Merge from Chromium at DEPS revision r213780

This commit was generated by merge_to_master.py.

Change-Id: I9cf93efc460166e8ae27c76302af9095b402a90e
diff --git a/.DEPS.git b/.DEPS.git
index f08ac72..09c6592 100644
--- a/.DEPS.git
+++ b/.DEPS.git
@@ -11,7 +11,7 @@
     'git_url':
          'https://chromium.googlesource.com',
     'webkit_rev':
-         '@9494eb3ac7df18c763bb17667bc39bdd7b853751'
+         '@44b34559d8a95540979f58ab9651c91c6622fcd5'
 }
 
 deps = {
@@ -98,11 +98,11 @@
     'src/third_party/sfntly/cpp/src':
         Var('git_url') + '/external/sfntly/cpp/src.git@cfb2f1743f0169ad8d01035458617bce97107539',
     'src/third_party/skia/gyp':
-        Var('git_url') + '/external/skia/gyp.git@f52cb2de30a9008d67ac3456e1cf9136fe661b76',
+        Var('git_url') + '/external/skia/gyp.git@ba077b2bba425e3c6127a748f7708cee16add283',
     'src/third_party/skia/include':
-        Var('git_url') + '/external/skia/include.git@3a7536753d16cde4a270978c9c1a20c287823661',
+        Var('git_url') + '/external/skia/include.git@a91286212782b14f72f705be220e62b73e1f751f',
     'src/third_party/skia/src':
-        Var('git_url') + '/external/skia/src.git@9a38b14fa51cf074f3f6100baa8a2acd27ba822c',
+        Var('git_url') + '/external/skia/src.git@c97456b20f8c3496ca88c48f82bb4428399b15cf',
     'src/third_party/smhasher/src':
         Var('git_url') + '/external/smhasher.git@6f63a4882e6b2cf87e8eec1a3ef8644e0d963283',
     'src/third_party/snappy/src':
@@ -124,7 +124,7 @@
     'src/third_party/webpagereplay':
         Var('git_url') + '/external/web-page-replay.git@ca269709e412d06b7b9f649dd47fb91f38f73852',
     'src/third_party/webrtc':
-        Var('git_url') + '/external/webrtc/stable/webrtc.git@ce6813c8e870a727915070e80c3f2a03c02f5fe0',
+        Var('git_url') + '/external/webrtc/stable/webrtc.git@17f0c86ea7dfc4908f06bb141cec25478eb45bd3',
     'src/third_party/yasm/source/patched-yasm':
         Var('git_url') + '/chromium/deps/yasm/patched-yasm.git@c960eb11ccda80b10ed50be39df4f0663b371d1d',
     'src/tools/deps2git':
@@ -136,9 +136,9 @@
     'src/tools/page_cycler/acid3':
         Var('git_url') + '/chromium/deps/acid3.git@6be0a66a1ebd7ebc5abc1b2f405a945f6d871521',
     'src/tools/swarm_client':
-        Var('git_url') + '/chromium/tools/swarm_client.git@db18a94a727a8fb042de269d07fb104cde267527',
+        Var('git_url') + '/chromium/tools/swarm_client.git@86681e9a54c88972dba217b4f1007222dd8936a4',
     'src/v8':
-        Var('git_url') + '/external/v8.git@6fe0fda6a144bf4a3991162c622e8745376b755a',
+        Var('git_url') + '/external/v8.git@4cf0056f2394ac119a5ede42ebe530e11efcc564',
     'src/webkit/renderer/media/crypto/ppapi/cdm':
         Var('git_url') + '/chromium/cdm.git@c2b192a02546916d28233cfd8b7717ffcdcc8347',
 }
diff --git a/DEPS b/DEPS
index 7a21929..de6f90b 100644
--- a/DEPS
+++ b/DEPS
@@ -8,7 +8,7 @@
   "sourceforge_url": "http://%(repo)s.svn.sourceforge.net/svnroot/%(repo)s",
   "webkit_trunk": "http://src.chromium.org/blink/trunk",
   "nacl_trunk": "http://src.chromium.org/native_client/trunk",
-  "webkit_revision": "154842",
+  "webkit_revision": "154965",
   "chromium_git": "https://chromium.googlesource.com",
   "chromiumos_git": "https://chromium.googlesource.com/chromiumos",
   "swig_revision": "69281",
@@ -29,21 +29,21 @@
   "ffmpeg_hash": "245a8c0cdfdd5ab3da9045089661017e9ddd8d0e",
 
   "sfntly_revision": "134",
-  "skia_revision": "10309",
+  "skia_revision": "10338",
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and V8 without interference from each other.
-  "v8_revision": "15825",
+  "v8_revision": "15886",
   # 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": "4297",
+  "webrtc_revision": "4409",
   "jsoncpp_revision": "248",
   "nss_revision": "209026",
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarm_client
   # and whatever else without interference from each other.
-  "swarm_revision": "212588",
+  "swarm_revision": "213621",
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling openssl
   # and whatever else without interference from each other.
diff --git a/android_webview/browser/browser_view_renderer.h b/android_webview/browser/browser_view_renderer.h
index bcbc61a..613b36a 100644
--- a/android_webview/browser/browser_view_renderer.h
+++ b/android_webview/browser/browser_view_renderer.h
@@ -90,11 +90,13 @@
   // return value indicates nothing was or will be drawn.
   // |java_canvas| is the target of the draw. |is_hardware_canvas| indicates
   // a GL Draw maybe possible on this canvas. |scroll| if the view's current
-  // scroll offset. |clip| is the canvas's clip bounds.
+  // scroll offset. |clip| is the canvas's clip bounds. |visible_rect| is the
+  // intersection of the view size and the window in window coordinates.
   virtual bool OnDraw(jobject java_canvas,
                       bool is_hardware_canvas,
                       const gfx::Vector2d& scroll,
-                      const gfx::Rect& clip) = 0;
+                      const gfx::Rect& clip,
+                      const gfx::Rect& visible_rect) = 0;
   // Called in response to a prior Client::RequestDrawGL() call. See
   // AwDrawGLInfo documentation for more details of the contract.
   virtual void DrawGL(AwDrawGLInfo* draw_info) = 0;
diff --git a/android_webview/browser/in_process_view_renderer.cc b/android_webview/browser/in_process_view_renderer.cc
index 7b70cff..dbb4c24 100644
--- a/android_webview/browser/in_process_view_renderer.cc
+++ b/android_webview/browser/in_process_view_renderer.cc
@@ -196,8 +196,10 @@
 bool InProcessViewRenderer::OnDraw(jobject java_canvas,
                                    bool is_hardware_canvas,
                                    const gfx::Vector2d& scroll,
-                                   const gfx::Rect& clip) {
+                                   const gfx::Rect& clip,
+                                   const gfx::Rect& visible_rect) {
   scroll_at_start_of_frame_  = scroll;
+  global_visible_rect_at_start_of_frame_ = visible_rect;
   if (is_hardware_canvas && attached_to_window_ && HardwareEnabled()) {
     // We should be performing a hardware draw here. If we don't have the
     // comositor yet or if RequestDrawGL fails, it means we failed this draw and
@@ -589,10 +591,10 @@
     AwDrawGLInfo* draw_info) {
   if (continuous_invalidate_ && !block_invalidates_) {
     if (draw_info) {
-      draw_info->dirty_left = draw_info->clip_left;
-      draw_info->dirty_top = draw_info->clip_top;
-      draw_info->dirty_right = draw_info->clip_right;
-      draw_info->dirty_bottom = draw_info->clip_bottom;
+      draw_info->dirty_left = global_visible_rect_at_start_of_frame_.x();
+      draw_info->dirty_top = global_visible_rect_at_start_of_frame_.y();
+      draw_info->dirty_right = global_visible_rect_at_start_of_frame_.right();
+      draw_info->dirty_bottom = global_visible_rect_at_start_of_frame_.bottom();
       draw_info->status_mask |= AwDrawGLInfo::kStatusMaskDraw;
     } else {
       client_->PostInvalidate();
diff --git a/android_webview/browser/in_process_view_renderer.h b/android_webview/browser/in_process_view_renderer.h
index c949bde..e4f6dd5 100644
--- a/android_webview/browser/in_process_view_renderer.h
+++ b/android_webview/browser/in_process_view_renderer.h
@@ -40,7 +40,8 @@
   virtual bool OnDraw(jobject java_canvas,
                       bool is_hardware_canvas,
                       const gfx::Vector2d& scroll_,
-                      const gfx::Rect& clip) OVERRIDE;
+                      const gfx::Rect& clip,
+                      const gfx::Rect& visible_rect) OVERRIDE;
   virtual void DrawGL(AwDrawGLInfo* draw_info) OVERRIDE;
   virtual base::android::ScopedJavaLocalRef<jobject> CapturePicture() OVERRIDE;
   virtual void EnableOnNewPicture(bool enabled) OVERRIDE;
@@ -115,6 +116,8 @@
   // Not to be used between draw calls.
   EGLContext last_egl_context_;
 
+  gfx::Rect global_visible_rect_at_start_of_frame_;
+
   // Last View scroll when View.onDraw() was called.
   gfx::Vector2d scroll_at_start_of_frame_;
 
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 00dc0ab..347bd75 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -169,6 +169,7 @@
     // picture listener API has not yet been enabled, or if it is using invalidation-only mode.
     private Callable<Picture> mPictureListenerContentProvider;
 
+    private final Rect mLastGlobalVisibleBounds = new Rect();
     private int mLastGlobalVisibleWidth;
     private int mLastGlobalVisibleHeight;
 
@@ -401,7 +402,7 @@
             // more of the containing view  becomes visible (i.e. a containing view
             // with a width/height of "wrap_content" and dimensions greater than
             // that of the screen).
-            AwContents.this.updatePhysicalBackingSizeIfNeeded();
+            AwContents.this.updateGlobalVisibleBounds();
          }
     };
 
@@ -620,23 +621,8 @@
         return nativeGetAwDrawGLViewContext(mNativeAwContents);
     }
 
-    // Only valid within updatePhysicalBackingSizeIfNeeded().
-    private final Rect mGlobalVisibleBoundsTemporary = new Rect();
-
-    private void updatePhysicalBackingSizeIfNeeded() {
-        // We musn't let the physical backing size get too big, otherwise we
-        // will try to allocate a SurfaceTexture beyond what the GL driver can
-        // cope with. In most cases, limiting the SurfaceTexture size to that
-        // of the visible bounds of the WebView will be good enough i.e. the maximum
-        // SurfaceTexture dimensions will match the screen dimensions).
-        mContainerView.getGlobalVisibleRect(mGlobalVisibleBoundsTemporary);
-        int width = mGlobalVisibleBoundsTemporary.width();
-        int height = mGlobalVisibleBoundsTemporary.height();
-        if (width != mLastGlobalVisibleWidth || height != mLastGlobalVisibleHeight) {
-            mLastGlobalVisibleWidth = width;
-            mLastGlobalVisibleHeight = height;
-            mContentViewCore.onPhysicalBackingSizeChanged(width, height);
-        }
+    private void updateGlobalVisibleBounds() {
+        mContainerView.getGlobalVisibleRect(mLastGlobalVisibleBounds);
     }
 
     //--------------------------------------------------------------------------------------------
@@ -658,7 +644,9 @@
         if (!nativeOnDraw(mNativeAwContents, canvas, canvas.isHardwareAccelerated(),
                     mContainerView.getScrollX(), mContainerView.getScrollY(),
                     mClipBoundsTemporary.left, mClipBoundsTemporary.top,
-                    mClipBoundsTemporary.right, mClipBoundsTemporary.bottom )) {
+                    mClipBoundsTemporary.right, mClipBoundsTemporary.bottom,
+                    mLastGlobalVisibleBounds.left, mLastGlobalVisibleBounds.top,
+                    mLastGlobalVisibleBounds.right, mLastGlobalVisibleBounds.bottom)) {
             Log.w(TAG, "nativeOnDraw failed; clearing to background color.");
             canvas.drawColor(getEffectiveBackgroundColor());
         }
@@ -1370,7 +1358,7 @@
     public void onSizeChanged(int w, int h, int ow, int oh) {
         if (mNativeAwContents == 0) return;
         mScrollOffsetManager.setContainerViewSize(w, h);
-        updatePhysicalBackingSizeIfNeeded();
+        mContentViewCore.onPhysicalBackingSizeChanged(w, h);
         mContentViewCore.onSizeChanged(w, h, ow, oh);
         nativeOnSizeChanged(mNativeAwContents, w, h, ow, oh);
     }
@@ -1751,7 +1739,8 @@
     private native void nativeAddVisitedLinks(int nativeAwContents, String[] visitedLinks);
     private native boolean nativeOnDraw(int nativeAwContents, Canvas canvas,
             boolean isHardwareAccelerated, int scrollX, int ScrollY,
-            int clipLeft, int clipTop, int clipRight, int clipBottom);
+            int clipLeft, int clipTop, int clipRight, int clipBottom,
+            int visibleLeft, int visibleTop, int visibleRight, int visibleBottom);
     private native void nativeFindAllAsync(int nativeAwContents, String searchString);
     private native void nativeFindNext(int nativeAwContents, boolean forward);
     private native void nativeClearMatches(int nativeAwContents);
diff --git a/android_webview/libwebviewchromium.target.darwin-arm.mk b/android_webview/libwebviewchromium.target.darwin-arm.mk
index d960ecb..6b9cca3 100644
--- a/android_webview/libwebviewchromium.target.darwin-arm.mk
+++ b/android_webview/libwebviewchromium.target.darwin-arm.mk
@@ -93,6 +93,10 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_WebKit_chromium_blink_common_gyp)/third_party_WebKit_Source_WebKit_chromium_blink_common_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_wtf_wtf_gyp)/third_party_WebKit_Source_wtf_wtf_gyp.a \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_wtf_wtf_config_gyp)/wtf_config.stamp \
+	$(call intermediates-dir-for,GYP,v8_tools_gyp_v8_gyp)/v8.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_base_arm_gyp)/v8_tools_gyp_v8_base_arm_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_snapshot_gyp)/v8_tools_gyp_v8_snapshot_gyp.a \
+	$(call intermediates-dir-for,GYP,v8_tools_gyp_js2c_host_gyp,true)/js2c.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp)/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp)/gpu_gles2_implementation_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,webkit_common_webkit_common_gyp)/webkit_common_webkit_common_gyp.a \
@@ -136,10 +140,6 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_ots_ots_gyp)/third_party_ots_ots_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_lzma_sdk_lzma_sdk_gyp)/third_party_lzma_sdk_lzma_sdk_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_qcms_qcms_gyp)/third_party_qcms_qcms_gyp.a \
-	$(call intermediates-dir-for,GYP,v8_tools_gyp_v8_gyp)/v8.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_base_arm_gyp)/v8_tools_gyp_v8_base_arm_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_snapshot_gyp)/v8_tools_gyp_v8_snapshot_gyp.a \
-	$(call intermediates-dir-for,GYP,v8_tools_gyp_js2c_host_gyp,true)/js2c.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_core_webcore_html_gyp)/third_party_WebKit_Source_core_webcore_html_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_core_webcore_platform_gyp)/third_party_WebKit_Source_core_webcore_platform_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_harfbuzz_ng_harfbuzz_ng_gyp)/third_party_harfbuzz_ng_harfbuzz_ng_gyp.a \
@@ -519,6 +519,8 @@
 	gpu_gpu_ipc_gyp \
 	third_party_WebKit_Source_WebKit_chromium_blink_common_gyp \
 	third_party_WebKit_Source_wtf_wtf_gyp \
+	v8_tools_gyp_v8_base_arm_gyp \
+	v8_tools_gyp_v8_snapshot_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
 	webkit_common_webkit_common_gyp \
@@ -542,8 +544,6 @@
 	third_party_ots_ots_gyp \
 	third_party_lzma_sdk_lzma_sdk_gyp \
 	third_party_qcms_qcms_gyp \
-	v8_tools_gyp_v8_base_arm_gyp \
-	v8_tools_gyp_v8_snapshot_gyp \
 	third_party_WebKit_Source_core_webcore_html_gyp \
 	third_party_WebKit_Source_core_webcore_platform_gyp \
 	third_party_harfbuzz_ng_harfbuzz_ng_gyp \
diff --git a/android_webview/libwebviewchromium.target.darwin-mips.mk b/android_webview/libwebviewchromium.target.darwin-mips.mk
index 5fa84ba..25b6af7 100644
--- a/android_webview/libwebviewchromium.target.darwin-mips.mk
+++ b/android_webview/libwebviewchromium.target.darwin-mips.mk
@@ -92,6 +92,10 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_WebKit_chromium_blink_common_gyp)/third_party_WebKit_Source_WebKit_chromium_blink_common_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_wtf_wtf_gyp)/third_party_WebKit_Source_wtf_wtf_gyp.a \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_wtf_wtf_config_gyp)/wtf_config.stamp \
+	$(call intermediates-dir-for,GYP,v8_tools_gyp_v8_gyp)/v8.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_base_mipsel_gyp)/v8_tools_gyp_v8_base_mipsel_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_snapshot_gyp)/v8_tools_gyp_v8_snapshot_gyp.a \
+	$(call intermediates-dir-for,GYP,v8_tools_gyp_js2c_host_gyp,true)/js2c.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp)/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp)/gpu_gles2_implementation_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,webkit_common_webkit_common_gyp)/webkit_common_webkit_common_gyp.a \
@@ -135,10 +139,6 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_ots_ots_gyp)/third_party_ots_ots_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_lzma_sdk_lzma_sdk_gyp)/third_party_lzma_sdk_lzma_sdk_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_qcms_qcms_gyp)/third_party_qcms_qcms_gyp.a \
-	$(call intermediates-dir-for,GYP,v8_tools_gyp_v8_gyp)/v8.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_base_mipsel_gyp)/v8_tools_gyp_v8_base_mipsel_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_snapshot_gyp)/v8_tools_gyp_v8_snapshot_gyp.a \
-	$(call intermediates-dir-for,GYP,v8_tools_gyp_js2c_host_gyp,true)/js2c.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_core_webcore_html_gyp)/third_party_WebKit_Source_core_webcore_html_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_core_webcore_platform_gyp)/third_party_WebKit_Source_core_webcore_platform_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_harfbuzz_ng_harfbuzz_ng_gyp)/third_party_harfbuzz_ng_harfbuzz_ng_gyp.a \
@@ -508,6 +508,8 @@
 	gpu_gpu_ipc_gyp \
 	third_party_WebKit_Source_WebKit_chromium_blink_common_gyp \
 	third_party_WebKit_Source_wtf_wtf_gyp \
+	v8_tools_gyp_v8_base_mipsel_gyp \
+	v8_tools_gyp_v8_snapshot_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
 	webkit_common_webkit_common_gyp \
@@ -530,8 +532,6 @@
 	third_party_ots_ots_gyp \
 	third_party_lzma_sdk_lzma_sdk_gyp \
 	third_party_qcms_qcms_gyp \
-	v8_tools_gyp_v8_base_mipsel_gyp \
-	v8_tools_gyp_v8_snapshot_gyp \
 	third_party_WebKit_Source_core_webcore_html_gyp \
 	third_party_WebKit_Source_core_webcore_platform_gyp \
 	third_party_harfbuzz_ng_harfbuzz_ng_gyp \
diff --git a/android_webview/libwebviewchromium.target.darwin-x86.mk b/android_webview/libwebviewchromium.target.darwin-x86.mk
index a2dfd78..ce9b5cc 100644
--- a/android_webview/libwebviewchromium.target.darwin-x86.mk
+++ b/android_webview/libwebviewchromium.target.darwin-x86.mk
@@ -97,6 +97,10 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_WebKit_chromium_blink_common_gyp)/third_party_WebKit_Source_WebKit_chromium_blink_common_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_wtf_wtf_gyp)/third_party_WebKit_Source_wtf_wtf_gyp.a \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_wtf_wtf_config_gyp)/wtf_config.stamp \
+	$(call intermediates-dir-for,GYP,v8_tools_gyp_v8_gyp)/v8.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_base_ia32_gyp)/v8_tools_gyp_v8_base_ia32_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_snapshot_gyp)/v8_tools_gyp_v8_snapshot_gyp.a \
+	$(call intermediates-dir-for,GYP,v8_tools_gyp_js2c_host_gyp,true)/js2c.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp)/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp)/gpu_gles2_implementation_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,webkit_common_webkit_common_gyp)/webkit_common_webkit_common_gyp.a \
@@ -140,10 +144,6 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_ots_ots_gyp)/third_party_ots_ots_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_lzma_sdk_lzma_sdk_gyp)/third_party_lzma_sdk_lzma_sdk_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_qcms_qcms_gyp)/third_party_qcms_qcms_gyp.a \
-	$(call intermediates-dir-for,GYP,v8_tools_gyp_v8_gyp)/v8.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_base_ia32_gyp)/v8_tools_gyp_v8_base_ia32_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_snapshot_gyp)/v8_tools_gyp_v8_snapshot_gyp.a \
-	$(call intermediates-dir-for,GYP,v8_tools_gyp_js2c_host_gyp,true)/js2c.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_core_webcore_html_gyp)/third_party_WebKit_Source_core_webcore_html_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_core_webcore_platform_gyp)/third_party_WebKit_Source_core_webcore_platform_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_harfbuzz_ng_harfbuzz_ng_gyp)/third_party_harfbuzz_ng_harfbuzz_ng_gyp.a \
@@ -526,6 +526,8 @@
 	gpu_gpu_ipc_gyp \
 	third_party_WebKit_Source_WebKit_chromium_blink_common_gyp \
 	third_party_WebKit_Source_wtf_wtf_gyp \
+	v8_tools_gyp_v8_base_ia32_gyp \
+	v8_tools_gyp_v8_snapshot_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
 	webkit_common_webkit_common_gyp \
@@ -548,8 +550,6 @@
 	third_party_ots_ots_gyp \
 	third_party_lzma_sdk_lzma_sdk_gyp \
 	third_party_qcms_qcms_gyp \
-	v8_tools_gyp_v8_base_ia32_gyp \
-	v8_tools_gyp_v8_snapshot_gyp \
 	third_party_WebKit_Source_core_webcore_html_gyp \
 	third_party_WebKit_Source_core_webcore_platform_gyp \
 	third_party_harfbuzz_ng_harfbuzz_ng_gyp \
diff --git a/android_webview/libwebviewchromium.target.linux-arm.mk b/android_webview/libwebviewchromium.target.linux-arm.mk
index d960ecb..6b9cca3 100644
--- a/android_webview/libwebviewchromium.target.linux-arm.mk
+++ b/android_webview/libwebviewchromium.target.linux-arm.mk
@@ -93,6 +93,10 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_WebKit_chromium_blink_common_gyp)/third_party_WebKit_Source_WebKit_chromium_blink_common_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_wtf_wtf_gyp)/third_party_WebKit_Source_wtf_wtf_gyp.a \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_wtf_wtf_config_gyp)/wtf_config.stamp \
+	$(call intermediates-dir-for,GYP,v8_tools_gyp_v8_gyp)/v8.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_base_arm_gyp)/v8_tools_gyp_v8_base_arm_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_snapshot_gyp)/v8_tools_gyp_v8_snapshot_gyp.a \
+	$(call intermediates-dir-for,GYP,v8_tools_gyp_js2c_host_gyp,true)/js2c.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp)/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp)/gpu_gles2_implementation_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,webkit_common_webkit_common_gyp)/webkit_common_webkit_common_gyp.a \
@@ -136,10 +140,6 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_ots_ots_gyp)/third_party_ots_ots_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_lzma_sdk_lzma_sdk_gyp)/third_party_lzma_sdk_lzma_sdk_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_qcms_qcms_gyp)/third_party_qcms_qcms_gyp.a \
-	$(call intermediates-dir-for,GYP,v8_tools_gyp_v8_gyp)/v8.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_base_arm_gyp)/v8_tools_gyp_v8_base_arm_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_snapshot_gyp)/v8_tools_gyp_v8_snapshot_gyp.a \
-	$(call intermediates-dir-for,GYP,v8_tools_gyp_js2c_host_gyp,true)/js2c.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_core_webcore_html_gyp)/third_party_WebKit_Source_core_webcore_html_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_core_webcore_platform_gyp)/third_party_WebKit_Source_core_webcore_platform_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_harfbuzz_ng_harfbuzz_ng_gyp)/third_party_harfbuzz_ng_harfbuzz_ng_gyp.a \
@@ -519,6 +519,8 @@
 	gpu_gpu_ipc_gyp \
 	third_party_WebKit_Source_WebKit_chromium_blink_common_gyp \
 	third_party_WebKit_Source_wtf_wtf_gyp \
+	v8_tools_gyp_v8_base_arm_gyp \
+	v8_tools_gyp_v8_snapshot_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
 	webkit_common_webkit_common_gyp \
@@ -542,8 +544,6 @@
 	third_party_ots_ots_gyp \
 	third_party_lzma_sdk_lzma_sdk_gyp \
 	third_party_qcms_qcms_gyp \
-	v8_tools_gyp_v8_base_arm_gyp \
-	v8_tools_gyp_v8_snapshot_gyp \
 	third_party_WebKit_Source_core_webcore_html_gyp \
 	third_party_WebKit_Source_core_webcore_platform_gyp \
 	third_party_harfbuzz_ng_harfbuzz_ng_gyp \
diff --git a/android_webview/libwebviewchromium.target.linux-mips.mk b/android_webview/libwebviewchromium.target.linux-mips.mk
index 5fa84ba..25b6af7 100644
--- a/android_webview/libwebviewchromium.target.linux-mips.mk
+++ b/android_webview/libwebviewchromium.target.linux-mips.mk
@@ -92,6 +92,10 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_WebKit_chromium_blink_common_gyp)/third_party_WebKit_Source_WebKit_chromium_blink_common_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_wtf_wtf_gyp)/third_party_WebKit_Source_wtf_wtf_gyp.a \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_wtf_wtf_config_gyp)/wtf_config.stamp \
+	$(call intermediates-dir-for,GYP,v8_tools_gyp_v8_gyp)/v8.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_base_mipsel_gyp)/v8_tools_gyp_v8_base_mipsel_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_snapshot_gyp)/v8_tools_gyp_v8_snapshot_gyp.a \
+	$(call intermediates-dir-for,GYP,v8_tools_gyp_js2c_host_gyp,true)/js2c.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp)/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp)/gpu_gles2_implementation_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,webkit_common_webkit_common_gyp)/webkit_common_webkit_common_gyp.a \
@@ -135,10 +139,6 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_ots_ots_gyp)/third_party_ots_ots_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_lzma_sdk_lzma_sdk_gyp)/third_party_lzma_sdk_lzma_sdk_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_qcms_qcms_gyp)/third_party_qcms_qcms_gyp.a \
-	$(call intermediates-dir-for,GYP,v8_tools_gyp_v8_gyp)/v8.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_base_mipsel_gyp)/v8_tools_gyp_v8_base_mipsel_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_snapshot_gyp)/v8_tools_gyp_v8_snapshot_gyp.a \
-	$(call intermediates-dir-for,GYP,v8_tools_gyp_js2c_host_gyp,true)/js2c.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_core_webcore_html_gyp)/third_party_WebKit_Source_core_webcore_html_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_core_webcore_platform_gyp)/third_party_WebKit_Source_core_webcore_platform_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_harfbuzz_ng_harfbuzz_ng_gyp)/third_party_harfbuzz_ng_harfbuzz_ng_gyp.a \
@@ -508,6 +508,8 @@
 	gpu_gpu_ipc_gyp \
 	third_party_WebKit_Source_WebKit_chromium_blink_common_gyp \
 	third_party_WebKit_Source_wtf_wtf_gyp \
+	v8_tools_gyp_v8_base_mipsel_gyp \
+	v8_tools_gyp_v8_snapshot_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
 	webkit_common_webkit_common_gyp \
@@ -530,8 +532,6 @@
 	third_party_ots_ots_gyp \
 	third_party_lzma_sdk_lzma_sdk_gyp \
 	third_party_qcms_qcms_gyp \
-	v8_tools_gyp_v8_base_mipsel_gyp \
-	v8_tools_gyp_v8_snapshot_gyp \
 	third_party_WebKit_Source_core_webcore_html_gyp \
 	third_party_WebKit_Source_core_webcore_platform_gyp \
 	third_party_harfbuzz_ng_harfbuzz_ng_gyp \
diff --git a/android_webview/libwebviewchromium.target.linux-x86.mk b/android_webview/libwebviewchromium.target.linux-x86.mk
index a2dfd78..ce9b5cc 100644
--- a/android_webview/libwebviewchromium.target.linux-x86.mk
+++ b/android_webview/libwebviewchromium.target.linux-x86.mk
@@ -97,6 +97,10 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_WebKit_chromium_blink_common_gyp)/third_party_WebKit_Source_WebKit_chromium_blink_common_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_wtf_wtf_gyp)/third_party_WebKit_Source_wtf_wtf_gyp.a \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_wtf_wtf_config_gyp)/wtf_config.stamp \
+	$(call intermediates-dir-for,GYP,v8_tools_gyp_v8_gyp)/v8.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_base_ia32_gyp)/v8_tools_gyp_v8_base_ia32_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_snapshot_gyp)/v8_tools_gyp_v8_snapshot_gyp.a \
+	$(call intermediates-dir-for,GYP,v8_tools_gyp_js2c_host_gyp,true)/js2c.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp)/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp)/gpu_gles2_implementation_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,webkit_common_webkit_common_gyp)/webkit_common_webkit_common_gyp.a \
@@ -140,10 +144,6 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_ots_ots_gyp)/third_party_ots_ots_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_lzma_sdk_lzma_sdk_gyp)/third_party_lzma_sdk_lzma_sdk_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_qcms_qcms_gyp)/third_party_qcms_qcms_gyp.a \
-	$(call intermediates-dir-for,GYP,v8_tools_gyp_v8_gyp)/v8.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_base_ia32_gyp)/v8_tools_gyp_v8_base_ia32_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,v8_tools_gyp_v8_snapshot_gyp)/v8_tools_gyp_v8_snapshot_gyp.a \
-	$(call intermediates-dir-for,GYP,v8_tools_gyp_js2c_host_gyp,true)/js2c.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_core_webcore_html_gyp)/third_party_WebKit_Source_core_webcore_html_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_core_webcore_platform_gyp)/third_party_WebKit_Source_core_webcore_platform_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_harfbuzz_ng_harfbuzz_ng_gyp)/third_party_harfbuzz_ng_harfbuzz_ng_gyp.a \
@@ -526,6 +526,8 @@
 	gpu_gpu_ipc_gyp \
 	third_party_WebKit_Source_WebKit_chromium_blink_common_gyp \
 	third_party_WebKit_Source_wtf_wtf_gyp \
+	v8_tools_gyp_v8_base_ia32_gyp \
+	v8_tools_gyp_v8_snapshot_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
 	webkit_common_webkit_common_gyp \
@@ -548,8 +550,6 @@
 	third_party_ots_ots_gyp \
 	third_party_lzma_sdk_lzma_sdk_gyp \
 	third_party_qcms_qcms_gyp \
-	v8_tools_gyp_v8_base_ia32_gyp \
-	v8_tools_gyp_v8_snapshot_gyp \
 	third_party_WebKit_Source_core_webcore_html_gyp \
 	third_party_WebKit_Source_core_webcore_platform_gyp \
 	third_party_harfbuzz_ng_harfbuzz_ng_gyp \
diff --git a/android_webview/native/DEPS b/android_webview/native/DEPS
index bb16f7d..b45be10 100644
--- a/android_webview/native/DEPS
+++ b/android_webview/native/DEPS
@@ -9,7 +9,4 @@
   "+components/navigation_interception",
   "+components/user_prefs",
   "+components/web_contents_delegate_android",
-
-  # These should be burned down. http://crbug.com/237267
-  "!third_party/WebKit/public/web/WebView.h",
 ]
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 9627eaa..623f7e9 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -650,14 +650,21 @@
                         jint clip_left,
                         jint clip_top,
                         jint clip_right,
-                        jint clip_bottom) {
-  return browser_view_renderer_->OnDraw(canvas,
-                                        is_hardware_accelerated,
-                                        gfx::Vector2d(scroll_x, scroll_y),
-                                        gfx::Rect(clip_left,
-                                                  clip_top,
-                                                  clip_right - clip_left,
-                                                  clip_bottom - clip_top));
+                        jint clip_bottom,
+                        jint visible_left,
+                        jint visible_top,
+                        jint visible_right,
+                        jint visible_bottom) {
+  return browser_view_renderer_->OnDraw(
+      canvas,
+      is_hardware_accelerated,
+      gfx::Vector2d(scroll_x, scroll_y),
+      gfx::Rect(
+          clip_left, clip_top, clip_right - clip_left, clip_bottom - clip_top),
+      gfx::Rect(visible_left,
+                visible_top,
+                visible_right - visible_left,
+                visible_bottom - visible_top));
 }
 
 void AwContents::SetPendingWebContentsForPopup(
diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h
index 8515e22..eade5aa 100644
--- a/android_webview/native/aw_contents.h
+++ b/android_webview/native/aw_contents.h
@@ -109,7 +109,11 @@
               jint clip_left,
               jint clip_top,
               jint clip_right,
-              jint clip_bottom);
+              jint clip_bottom,
+              jint visible_left,
+              jint visible_top,
+              jint visible_right,
+              jint visible_bottom);
   jint GetAwDrawGLViewContext(JNIEnv* env, jobject obj);
   base::android::ScopedJavaLocalRef<jobject> CapturePicture(JNIEnv* env,
                                                             jobject obj);
diff --git a/android_webview/native/aw_quota_manager_bridge_impl.cc b/android_webview/native/aw_quota_manager_bridge_impl.cc
index e9cb8ac..6427588 100644
--- a/android_webview/native/aw_quota_manager_bridge_impl.cc
+++ b/android_webview/native/aw_quota_manager_bridge_impl.cc
@@ -185,28 +185,21 @@
   return quota_manager;
 }
 
+// Cannot directly call StoragePartition clear data methods because cookies are
+// controlled separately.
 void AwQuotaManagerBridgeImpl::DeleteAllData(JNIEnv* env, jobject object) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  GetStoragePartition()->ClearDataForUnboundedRange(
-      // Clear all web storage data except cookies.
-      StoragePartition::REMOVE_DATA_MASK_APPCACHE |
-          StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
-          StoragePartition::REMOVE_DATA_MASK_INDEXEDDB |
-          StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE |
-          StoragePartition::REMOVE_DATA_MASK_WEBSQL,
-      StoragePartition::kQuotaManagedTemporaryStorage);
+  GetStoragePartition()->AsyncClearData(
+      StoragePartition::kQuotaManagedTemporaryStorage |
+      StoragePartition::kLocalDomStorage |
+      StoragePartition::kSessionDomStorage);
 }
 
 void AwQuotaManagerBridgeImpl::DeleteOrigin(
     JNIEnv* env, jobject object, jstring origin) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   StoragePartition* storage_partition = GetStoragePartition();
-  storage_partition->ClearDataForOrigin(
-      // All (temporary) QuotaClient types.
-      StoragePartition::REMOVE_DATA_MASK_APPCACHE |
-          StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
-          StoragePartition::REMOVE_DATA_MASK_INDEXEDDB |
-          StoragePartition::REMOVE_DATA_MASK_WEBSQL,
+  storage_partition->AsyncClearDataForOrigin(
       StoragePartition::kQuotaManagedTemporaryStorage,
       GURL(base::android::ConvertJavaStringToUTF16(env, origin)),
       storage_partition->GetURLRequestContext());
diff --git a/android_webview/native/aw_settings.cc b/android_webview/native/aw_settings.cc
index 89e0c75..1661c11 100644
--- a/android_webview/native/aw_settings.cc
+++ b/android_webview/native/aw_settings.cc
@@ -13,8 +13,8 @@
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/content_client.h"
+#include "content/public/common/page_zoom.h"
 #include "jni/AwSettings_jni.h"
-#include "third_party/WebKit/public/web/WebView.h"
 #include "webkit/common/user_agent/user_agent.h"
 #include "webkit/common/webpreferences.h"
 #include "webkit/glue/webkit_glue.h"
@@ -115,8 +115,8 @@
     render_view_host_ext->SetTextZoomLevel(0);
   } else {
     prefs.force_enable_zoom = false;
-    render_view_host_ext->SetTextZoomLevel(
-        WebKit::WebView::zoomFactorToZoomLevel(text_size_percent / 100.0f));
+    render_view_host_ext->SetTextZoomLevel(content::ZoomFactorToZoomLevel(
+        text_size_percent / 100.0f));
   }
 
   prefs.standard_font_family_map[webkit_glue::kCommonScript] =
diff --git a/ash/ash_switches.cc b/ash/ash_switches.cc
index 373bd1b..42217a0 100644
--- a/ash/ash_switches.cc
+++ b/ash/ash_switches.cc
@@ -91,7 +91,12 @@
 // Disable the notification when a low-power USB charger is connected.
 const char kAshDisableUsbChargerNotification[] =
     "ash-disable-usb-charger-notification";
-#endif
+
+// TODO(jamescook): Remove this unused flag. It exists only to allow the
+// "Enable audio device menu" about:flags item to have the tri-state
+// default/enabled/disabled UI.
+const char kAshEnableAudioDeviceMenu[] = "ash-enable-audio-device-menu";
+#endif  // defined(OS_CHROMEOS)
 
 // Enable advanced gestures (e.g. for window management).
 const char kAshEnableAdvancedGestures[] = "ash-enable-advanced-gestures";
@@ -111,6 +116,13 @@
 const char kAshEnableMemoryMonitor[] = "ash-enable-memory-monitor";
 #endif
 
+#if defined(OS_CHROMEOS)
+// TODO(jamescook): Remove this unused flag. It exists only to allow the
+// "Enable new audio handler" about:flags item to have the tri-state
+// default/enabled/disabled UI.
+const char kAshEnableNewAudioHandler[] = "ash-enable-new-audio-handler";
+#endif
+
 // Enables the Oak tree viewer.
 const char kAshEnableOak[] = "ash-enable-oak";
 
diff --git a/ash/ash_switches.h b/ash/ash_switches.h
index 429291c..cfe441d 100644
--- a/ash/ash_switches.h
+++ b/ash/ash_switches.h
@@ -44,6 +44,7 @@
 #if defined(OS_CHROMEOS)
 ASH_EXPORT extern const char kAshDisableSoftwareMirroring[];
 ASH_EXPORT extern const char kAshDisableUsbChargerNotification[];
+ASH_EXPORT extern const char kAshEnableAudioDeviceMenu[];
 #endif
 ASH_EXPORT extern const char kAshEnableAdvancedGestures[];
 ASH_EXPORT extern const char kAshEnableBrightnessControl[];
@@ -52,6 +53,9 @@
 ASH_EXPORT extern const char kAshEnableMemoryMonitor[];
 #endif
 ASH_EXPORT extern const char kAshEnableImmersiveFullscreen[];
+#if defined(OS_CHROMEOS)
+ASH_EXPORT extern const char kAshEnableNewAudioHandler[];
+#endif
 ASH_EXPORT extern const char kAshEnableOak[];
 ASH_EXPORT extern const char kAshEnableStickyEdges[];
 ASH_EXPORT extern const char kAshEnableTrayDragging[];
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb
index ad099ba..9fc41cc 100644
--- a/ash/strings/ash_strings_it.xtb
+++ b/ash/strings/ash_strings_it.xtb
@@ -107,7 +107,7 @@
 <translation id="2372145515558759244">Sincronizzazione applicazioni...</translation>
 <translation id="7256405249507348194">Errore non riconosciuto: <ph name="DESC"/></translation>
 <translation id="7925247922861151263">Controllo AAA non riuscito</translation>
-<translation id="8456362689280298700"><ph name="HOUR"/>:<ph name="MINUTE"/> rimanenti al completamento della ricarica</translation>
+<translation id="8456362689280298700"><ph name="HOUR"/>:<ph name="MINUTE"/> per completare la ricarica</translation>
 <translation id="5787281376604286451">Feedback vocale attivato.
 Premi Ctrl+Alt+Z per disattivarlo.</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -195,7 +195,7 @@
 <translation id="4015692727874266537">Accedi a un altro account...</translation>
 <translation id="5941711191222866238">Riduci a icona</translation>
 <translation id="6911468394164995108">Connetti a un'altra...</translation>
-<translation id="412065659894267608"><ph name="HOUR"/> ore e <ph name="MINUTE"/> min rimanenti al completamento della ricarica</translation>
+<translation id="412065659894267608"><ph name="HOUR"/> h e <ph name="MINUTE"/> m per completare la ricarica</translation>
 <translation id="6359806961507272919">SMS da <ph name="PHONE_NUMBER"/></translation>
 <translation id="1244147615850840081">Gestore</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/system/bluetooth/tray_bluetooth.cc b/ash/system/bluetooth/tray_bluetooth.cc
index 95af770..5d75e94 100644
--- a/ash/system/bluetooth/tray_bluetooth.cc
+++ b/ash/system/bluetooth/tray_bluetooth.cc
@@ -172,7 +172,7 @@
             IDS_ASH_STATUS_TRAY_BLUETOOTH_CONNECTING, list[i].display_name);
         new_connecting_devices.insert(list[i].address);
         UpdateBluetoothDeviceList(&connecting_devices_, list[i]);
-      } else if (list[i].connected) {
+      } else if (list[i].connected && list[i].paired) {
         new_connected_devices.insert(list[i].address);
         UpdateBluetoothDeviceList(&connected_devices_, list[i]);
       } else if (list[i].paired) {
diff --git a/base/base_paths_android.cc b/base/base_paths_android.cc
index edbe7cd..d0a709f 100644
--- a/base/base_paths_android.cc
+++ b/base/base_paths_android.cc
@@ -13,7 +13,7 @@
 #include "base/file_util.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
-#include "base/process_util.h"
+#include "base/process/process_metrics.h"
 
 namespace base {
 
diff --git a/base/base_paths_posix.cc b/base/base_paths_posix.cc
index 6d7b5e1..2d5fcbd 100644
--- a/base/base_paths_posix.cc
+++ b/base/base_paths_posix.cc
@@ -17,7 +17,7 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/nix/xdg_util.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
+#include "base/process/process_metrics.h"
 #include "build/build_config.h"
 
 #if defined(OS_FREEBSD)
diff --git a/base/base_unittests.isolate b/base/base_unittests.isolate
index 483d6f2..852997b 100644
--- a/base/base_unittests.isolate
+++ b/base/base_unittests.isolate
@@ -16,7 +16,7 @@
         'command': [
           '../testing/xvfb.py',
           '<(PRODUCT_DIR)',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/base_unittests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_tracked': [
@@ -30,7 +30,7 @@
         'isolate_dependency_tracked': [
           '../testing/test_env.py',
           '../tools/swarm_client/run_isolated.py',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/base_unittests<(EXECUTABLE_SUFFIX)',
         ],
       },
@@ -39,7 +39,7 @@
       'variables': {
         'command': [
           '../testing/test_env.py',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/base_unittests<(EXECUTABLE_SUFFIX)',
         ],
       },
diff --git a/base/debug/profiler.cc b/base/debug/profiler.cc
index 424dfe2..096e343 100644
--- a/base/debug/profiler.cc
+++ b/base/debug/profiler.cc
@@ -6,7 +6,7 @@
 
 #include <string>
 
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 
diff --git a/base/debug/stack_trace_ios.mm b/base/debug/stack_trace_ios.mm
index ab0abc4..998dd0d 100644
--- a/base/debug/stack_trace_ios.mm
+++ b/base/debug/stack_trace_ios.mm
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/process_util.h"
-
 #import <Foundation/Foundation.h>
 #include <mach/task.h>
 #include <stdio.h>
diff --git a/base/debug/stack_trace_unittest.cc b/base/debug/stack_trace_unittest.cc
index d290181..b676327 100644
--- a/base/debug/stack_trace_unittest.cc
+++ b/base/debug/stack_trace_unittest.cc
@@ -8,7 +8,8 @@
 
 #include "base/debug/stack_trace.h"
 #include "base/logging.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
+#include "base/process/process_handle.h"
 #include "base/test/test_timeouts.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/multiprocess_func_list.h"
diff --git a/base/debug/stack_trace_win.cc b/base/debug/stack_trace_win.cc
index 5622a4b..986241b 100644
--- a/base/debug/stack_trace_win.cc
+++ b/base/debug/stack_trace_win.cc
@@ -13,7 +13,7 @@
 #include "base/logging.h"
 #include "base/memory/singleton.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
+#include "base/process/launch.h"
 #include "base/strings/string_util.h"
 #include "base/synchronization/lock.h"
 #include "base/win/windows_version.h"
diff --git a/base/debug/trace_event_impl.cc b/base/debug/trace_event_impl.cc
index 3b92646..44d1f71 100644
--- a/base/debug/trace_event_impl.cc
+++ b/base/debug/trace_event_impl.cc
@@ -14,7 +14,7 @@
 #include "base/format_macros.h"
 #include "base/lazy_instance.h"
 #include "base/memory/singleton.h"
-#include "base/process_util.h"
+#include "base/process/process_metrics.h"
 #include "base/stl_util.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_tokenizer.h"
diff --git a/base/debug/trace_event_unittest.cc b/base/debug/trace_event_unittest.cc
index 348c1d0..5beea37 100644
--- a/base/debug/trace_event_unittest.cc
+++ b/base/debug/trace_event_unittest.cc
@@ -14,7 +14,7 @@
 #include "base/memory/ref_counted_memory.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/singleton.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/platform_thread.h"
diff --git a/base/file_util_win.cc b/base/file_util_win.cc
index c29e2e0..39317a3 100644
--- a/base/file_util_win.cc
+++ b/base/file_util_win.cc
@@ -17,7 +17,7 @@
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/metrics/histogram.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
diff --git a/base/linux_util.cc b/base/linux_util.cc
index bb96a33..5f9ecd4 100644
--- a/base/linux_util.cc
+++ b/base/linux_util.cc
@@ -19,7 +19,7 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/singleton.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
+#include "base/process/launch.h"
 #include "base/strings/string_util.h"
 #include "base/synchronization/lock.h"
 
diff --git a/base/memory/scoped_open_process.h b/base/memory/scoped_open_process.h
index 93ba387..8bb19e2 100644
--- a/base/memory/scoped_open_process.h
+++ b/base/memory/scoped_open_process.h
@@ -5,8 +5,7 @@
 #ifndef BASE_MEMORY_SCOPED_OPEN_PROCESS_H_
 #define BASE_MEMORY_SCOPED_OPEN_PROCESS_H_
 
-#include "base/process.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 
 namespace base {
 
diff --git a/base/memory/shared_memory.h b/base/memory/shared_memory.h
index 7f19bd7..23f6973 100644
--- a/base/memory/shared_memory.h
+++ b/base/memory/shared_memory.h
@@ -17,7 +17,7 @@
 
 #include "base/base_export.h"
 #include "base/basictypes.h"
-#include "base/process.h"
+#include "base/process/process_handle.h"
 
 #if defined(OS_POSIX)
 #include "base/file_descriptor_posix.h"
diff --git a/base/memory/shared_memory_posix.cc b/base/memory/shared_memory_posix.cc
index a52e73a..e6745ea 100644
--- a/base/memory/shared_memory_posix.cc
+++ b/base/memory/shared_memory_posix.cc
@@ -14,7 +14,7 @@
 #include "base/file_util.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
-#include "base/process_util.h"
+#include "base/process/process_metrics.h"
 #include "base/safe_strerror_posix.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/lock.h"
diff --git a/base/memory/shared_memory_unittest.cc b/base/memory/shared_memory_unittest.cc
index b1b664a..892fd7f 100644
--- a/base/memory/shared_memory_unittest.cc
+++ b/base/memory/shared_memory_unittest.cc
@@ -3,11 +3,9 @@
 // found in the LICENSE file.
 
 #include "base/basictypes.h"
-#if defined(OS_MACOSX)
-#include "base/mac/scoped_nsautorelease_pool.h"
-#endif
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/shared_memory.h"
+#include "base/process/kill.h"
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/sys_info.h"
diff --git a/base/message_loop/message_pump_win.cc b/base/message_loop/message_pump_win.cc
index 6d9863a..589d077 100644
--- a/base/message_loop/message_pump_win.cc
+++ b/base/message_loop/message_pump_win.cc
@@ -9,7 +9,7 @@
 #include "base/debug/trace_event.h"
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
 #include "base/strings/stringprintf.h"
 #include "base/win/wrapped_window_proc.h"
 
diff --git a/base/metrics/histogram_base.cc b/base/metrics/histogram_base.cc
index 352c01f..5b46d29 100644
--- a/base/metrics/histogram_base.cc
+++ b/base/metrics/histogram_base.cc
@@ -13,7 +13,7 @@
 #include "base/metrics/histogram_samples.h"
 #include "base/metrics/sparse_histogram.h"
 #include "base/pickle.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/strings/stringprintf.h"
 #include "base/values.h"
 
diff --git a/base/metrics/stats_table.cc b/base/metrics/stats_table.cc
index e61ca89..4a3d939 100644
--- a/base/metrics/stats_table.cc
+++ b/base/metrics/stats_table.cc
@@ -7,7 +7,7 @@
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/shared_memory.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/base/metrics/stats_table_unittest.cc b/base/metrics/stats_table_unittest.cc
index 88928db..8fd3397 100644
--- a/base/metrics/stats_table_unittest.cc
+++ b/base/metrics/stats_table_unittest.cc
@@ -5,6 +5,7 @@
 #include "base/memory/shared_memory.h"
 #include "base/metrics/stats_counters.h"
 #include "base/metrics/stats_table.h"
+#include "base/process/kill.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/base/process.h b/base/process.h
deleted file mode 100644
index 71f4391..0000000
--- a/base/process.h
+++ /dev/null
@@ -1,13 +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.
-
-// Forwarding header until all include paths can be updated.
-// TODO(rsesek): Remove this file <http://crbug.com/242290>.
-
-#ifndef BASE_PROCESS_H_
-#define BASE_PROCESS_H_
-
-#include "base/process/process.h"
-
-#endif  // BASE_PROCESS_H_
diff --git a/base/process/kill.h b/base/process/kill.h
index f7ee14c..f81ea90 100644
--- a/base/process/kill.h
+++ b/base/process/kill.h
@@ -9,7 +9,7 @@
 #define BASE_PROCESS_KILL_H_
 
 #include "base/files/file_path.h"
-#include "base/process.h"
+#include "base/process/process_handle.h"
 #include "base/time/time.h"
 
 namespace base {
diff --git a/base/process/kill_posix.cc b/base/process/kill_posix.cc
index 61a6020..5938fa5 100644
--- a/base/process/kill_posix.cc
+++ b/base/process/kill_posix.cc
@@ -13,7 +13,6 @@
 #include "base/logging.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/process/process_iterator.h"
-#include "base/process_util.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/third_party/dynamic_annotations/dynamic_annotations.h"
 #include "base/threading/platform_thread.h"
diff --git a/base/process/kill_win.cc b/base/process/kill_win.cc
index eb09254..99a7c66 100644
--- a/base/process/kill_win.cc
+++ b/base/process/kill_win.cc
@@ -12,7 +12,6 @@
 #include "base/logging.h"
 #include "base/message_loop/message_loop.h"
 #include "base/process/process_iterator.h"
-#include "base/process_util.h"
 #include "base/win/object_watcher.h"
 
 namespace base {
diff --git a/base/process/launch_posix.cc b/base/process/launch_posix.cc
index 336633c..3708af6 100644
--- a/base/process/launch_posix.cc
+++ b/base/process/launch_posix.cc
@@ -29,7 +29,8 @@
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/posix/eintr_wrapper.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
+#include "base/process/process_metrics.h"
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/third_party/dynamic_annotations/dynamic_annotations.h"
diff --git a/base/process/memory.h b/base/process/memory.h
index 2ad1e50..de79477 100644
--- a/base/process/memory.h
+++ b/base/process/memory.h
@@ -5,9 +5,9 @@
 #ifndef BASE_PROCESS_MEMORY_H_
 #define BASE_PROCESS_MEMORY_H_
 
-#include "base/basictypes.h"
 #include "base/base_export.h"
-#include "base/process.h"
+#include "base/basictypes.h"
+#include "base/process/process_handle.h"
 #include "build/build_config.h"
 
 #if defined(OS_WIN)
diff --git a/base/process/process_handle_openbsd.cc b/base/process/process_handle_openbsd.cc
index 637433b..3508ccb 100644
--- a/base/process/process_handle_openbsd.cc
+++ b/base/process/process_handle_openbsd.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 "base/process_util.h"
+#include "base/process/process_handle.h"
 
 #include <sys/sysctl.h>
 #include <sys/types.h>
diff --git a/base/process/process_iterator.h b/base/process/process_iterator.h
index f8ab2a2..aa8ba74 100644
--- a/base/process/process_iterator.h
+++ b/base/process/process_iterator.h
@@ -11,11 +11,11 @@
 #include <string>
 #include <vector>
 
-#include "build/build_config.h"
-#include "base/basictypes.h"
 #include "base/base_export.h"
+#include "base/basictypes.h"
 #include "base/files/file_path.h"
-#include "base/process.h"
+#include "base/process/process.h"
+#include "build/build_config.h"
 
 #if defined(OS_WIN)
 #include <windows.h>
diff --git a/base/process/process_iterator_linux.cc b/base/process/process_iterator_linux.cc
index e2da95d..6da51ca 100644
--- a/base/process/process_iterator_linux.cc
+++ b/base/process/process_iterator_linux.cc
@@ -7,7 +7,6 @@
 #include "base/file_util.h"
 #include "base/logging.h"
 #include "base/process/internal_linux.h"
-#include "base/process_util.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_restrictions.h"
 
diff --git a/base/process/process_metrics.h b/base/process/process_metrics.h
index 2db5d48..e329b4e 100644
--- a/base/process/process_metrics.h
+++ b/base/process/process_metrics.h
@@ -12,7 +12,7 @@
 
 #include "base/base_export.h"
 #include "base/basictypes.h"
-#include "base/process.h"
+#include "base/process/process_handle.h"
 #include "base/time/time.h"
 
 #if defined(OS_MACOSX)
diff --git a/base/process/process_posix.cc b/base/process/process_posix.cc
index a446b98..3d8b31d 100644
--- a/base/process/process_posix.cc
+++ b/base/process/process_posix.cc
@@ -4,12 +4,12 @@
 
 #include "base/process/process.h"
 
-#include <sys/types.h>
-#include <sys/time.h>
 #include <sys/resource.h>
+#include <sys/time.h>
+#include <sys/types.h>
 
-#include "base/process_util.h"
 #include "base/logging.h"
+#include "base/process/kill.h"
 
 namespace base {
 
diff --git a/base/process/process_util_unittest.cc b/base/process/process_util_unittest.cc
index 4a3d36d..77f058c 100644
--- a/base/process/process_util_unittest.cc
+++ b/base/process/process_util_unittest.cc
@@ -14,7 +14,11 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/path_service.h"
 #include "base/posix/eintr_wrapper.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
+#include "base/process/launch.h"
+#include "base/process/memory.h"
+#include "base/process/process.h"
+#include "base/process/process_metrics.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/multiprocess_test.h"
 #include "base/test/test_timeouts.h"
diff --git a/base/process/process_util_unittest_ios.cc b/base/process/process_util_unittest_ios.cc
index c82535d..cad0f1b 100644
--- a/base/process/process_util_unittest_ios.cc
+++ b/base/process/process_util_unittest_ios.cc
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/memory/scoped_ptr.h"
-#include "base/process_util.h"
+#include "base/process/process_metrics.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 TEST(ProcessUtilTestIos, Memory) {
diff --git a/base/process/process_win.cc b/base/process/process_win.cc
index 30945f2..1217b50 100644
--- a/base/process/process_win.cc
+++ b/base/process/process_win.cc
@@ -3,9 +3,9 @@
 // found in the LICENSE file.
 
 #include "base/process/process.h"
+
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/process_util.h"
 #include "base/win/windows_version.h"
 
 namespace base {
diff --git a/base/process_info.h b/base/process_info.h
deleted file mode 100644
index 17502b8..0000000
--- a/base/process_info.h
+++ /dev/null
@@ -1,13 +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.
-
-// Forwarding header until all include paths can be updated.
-// TODO(rsesek): Remove this file <http://crbug.com/242290>.
-
-#ifndef BASE_PROCESS_INFO_H_
-#define BASE_PROCESS_INFO_H_
-
-#include "base/process/process_info.h"
-
-#endif  // BASE_PROCESS_INFO_H_
diff --git a/base/process_util.h b/base/process_util.h
deleted file mode 100644
index 1c980c3..0000000
--- a/base/process_util.h
+++ /dev/null
@@ -1,18 +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.
-
-// Forwarding header until all include paths can be updated.
-// TODO(rsesek): Remove this file <http://crbug.com/242290>.
-
-#ifndef BASE_PROCESS_UTIL_H_
-#define BASE_PROCESS_UTIL_H_
-
-#include "base/process/kill.h"
-#include "base/process/launch.h"
-#include "base/process/memory.h"
-#include "base/process/process_handle.h"
-#include "base/process/process_iterator.h"
-#include "base/process/process_metrics.h"
-
-#endif  // BASE_PROCESS_UTIL_H_
diff --git a/base/test/multiprocess_test.h b/base/test/multiprocess_test.h
index 7c3af33..3bbb739 100644
--- a/base/test/multiprocess_test.h
+++ b/base/test/multiprocess_test.h
@@ -8,8 +8,8 @@
 #include <string>
 
 #include "base/basictypes.h"
-#include "base/process.h"
-#include "base/process_util.h"
+#include "base/process/launch.h"
+#include "base/process/process_handle.h"
 #include "build/build_config.h"
 #include "testing/platform_test.h"
 
diff --git a/base/test/multiprocess_test_android.cc b/base/test/multiprocess_test_android.cc
index 50aefd8..9367426 100644
--- a/base/test/multiprocess_test_android.cc
+++ b/base/test/multiprocess_test_android.cc
@@ -9,7 +9,6 @@
 #include "base/containers/hash_tables.h"
 #include "base/logging.h"
 #include "base/posix/eintr_wrapper.h"
-#include "base/process.h"
 #include "testing/multiprocess_func_list.h"
 
 namespace base {
diff --git a/base/test/perf_test_suite.cc b/base/test/perf_test_suite.cc
index 7a2d1c9..8cfbb73 100644
--- a/base/test/perf_test_suite.cc
+++ b/base/test/perf_test_suite.cc
@@ -9,7 +9,7 @@
 #include "base/files/file_path.h"
 #include "base/path_service.h"
 #include "base/perftimer.h"
-#include "base/process_util.h"
+#include "base/process/launch.h"
 #include "base/strings/string_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/base/test/test_launcher.cc b/base/test/test_launcher.cc
index aae48a5..b217d63 100644
--- a/base/test/test_launcher.cc
+++ b/base/test/test_launcher.cc
@@ -13,7 +13,8 @@
 #include "base/format_macros.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
+#include "base/process/launch.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_timeouts.h"
diff --git a/base/test/test_process_killer_win.cc b/base/test/test_process_killer_win.cc
index bcc2d5b..5e9cc52 100644
--- a/base/test/test_process_killer_win.cc
+++ b/base/test/test_process_killer_win.cc
@@ -10,7 +10,8 @@
 #include <algorithm>
 
 #include "base/logging.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
+#include "base/process/process_iterator.h"
 #include "base/strings/string_util.h"
 #include "base/win/scoped_handle.h"
 
diff --git a/base/test/test_suite.cc b/base/test/test_suite.cc
index 635423f..27c00c9 100644
--- a/base/test/test_suite.cc
+++ b/base/test/test_suite.cc
@@ -16,7 +16,7 @@
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
 #include "base/test/multiprocess_test.h"
 #include "base/test/test_timeouts.h"
 #include "base/time/time.h"
diff --git a/base/tracked_objects.cc b/base/tracked_objects.cc
index cc00ce6..38963c2 100644
--- a/base/tracked_objects.cc
+++ b/base/tracked_objects.cc
@@ -12,7 +12,7 @@
 #include "base/format_macros.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/port.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/profiler/alternate_timer.h"
 #include "base/strings/stringprintf.h"
 #include "base/third_party/valgrind/memcheck.h"
diff --git a/base/tracked_objects_unittest.cc b/base/tracked_objects_unittest.cc
index 6aa02ee..d2654c7 100644
--- a/base/tracked_objects_unittest.cc
+++ b/base/tracked_objects_unittest.cc
@@ -7,7 +7,7 @@
 #include "base/tracked_objects.h"
 
 #include "base/memory/scoped_ptr.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/time/time.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/base/win/event_trace_consumer_unittest.cc b/base/win/event_trace_consumer_unittest.cc
index ce5262e..d238192 100644
--- a/base/win/event_trace_consumer_unittest.cc
+++ b/base/win/event_trace_consumer_unittest.cc
@@ -14,7 +14,7 @@
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/strings/stringprintf.h"
 #include "base/win/event_trace_controller.h"
 #include "base/win/event_trace_provider.h"
diff --git a/base/win/event_trace_controller_unittest.cc b/base/win/event_trace_controller_unittest.cc
index 079a04b..16bf1e1 100644
--- a/base/win/event_trace_controller_unittest.cc
+++ b/base/win/event_trace_controller_unittest.cc
@@ -11,7 +11,7 @@
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/strings/stringprintf.h"
 #include "base/sys_info.h"
 #include "base/win/event_trace_controller.h"
diff --git a/base/win/message_window.cc b/base/win/message_window.cc
index eb5e069..5666074 100644
--- a/base/win/message_window.cc
+++ b/base/win/message_window.cc
@@ -6,7 +6,7 @@
 
 #include "base/lazy_instance.h"
 #include "base/logging.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
 #include "base/win/wrapped_window_proc.h"
 
 const wchar_t kMessageWindowClassName[] = L"Chrome_MessageWindow";
diff --git a/base/win/scoped_process_information_unittest.cc b/base/win/scoped_process_information_unittest.cc
index 75b69e3..b8ffc44 100644
--- a/base/win/scoped_process_information_unittest.cc
+++ b/base/win/scoped_process_information_unittest.cc
@@ -7,7 +7,7 @@
 #include <string>
 
 #include "base/command_line.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
 #include "base/test/multiprocess_test.h"
 #include "base/win/scoped_process_information.h"
 #include "testing/multiprocess_func_list.h"
diff --git a/base/win/wrapped_window_proc.cc b/base/win/wrapped_window_proc.cc
index 04e59c5..61b79ed 100644
--- a/base/win/wrapped_window_proc.cc
+++ b/base/win/wrapped_window_proc.cc
@@ -6,7 +6,7 @@
 
 #include "base/atomicops.h"
 #include "base/logging.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
 
 namespace {
 
diff --git a/build/android/buildbot/bb_device_status_check.py b/build/android/buildbot/bb_device_status_check.py
index 452eea7..1df95a3 100755
--- a/build/android/buildbot/bb_device_status_check.py
+++ b/build/android/buildbot/bb_device_status_check.py
@@ -45,24 +45,23 @@
   install_output = GetCmdOutput(
     ['%s/build/android/adb_install_apk.py' % constants.DIR_SOURCE_ROOT, '--apk',
      '%s/build/android/CheckInstallApk-debug.apk' % constants.DIR_SOURCE_ROOT])
-  install_speed_found = re.findall('(\d+) KB/s', install_output)
-  if install_speed_found:
-    install_speed = int(install_speed_found[0])
-  else:
-    install_speed = 'Unknown'
-  if 'Error' in battery:
-    ac_power = 'Unknown'
-    battery_level = 'Unknown'
-    battery_temp = 'Unknown'
-  else:
-    ac_power = re.findall('AC powered: (\w+)', battery)[0]
-    battery_level = int(re.findall('level: (\d+)', battery)[0])
-    battery_temp = float(re.findall('temperature: (\d+)', battery)[0]) / 10
-  sub_info = device_adb.GetSubscriberInfo()
-  imei_slice = ''
-  device_id = re.findall('Device ID = (\d+)', sub_info)
-  if device_id and len(device_id):
-    imei_slice = device_id[0][-6:]
+
+  def _GetData(re_expression, line, lambda_function=lambda x:x):
+    if not line:
+      return 'Unknown'
+    found = re.findall(re_expression, line)
+    if found and len(found):
+      return lambda_function(found[0])
+    return 'Unknown'
+
+  install_speed = _GetData('(\d+) KB/s', install_output)
+  ac_power = _GetData('AC powered: (\w+)', battery)
+  battery_level = _GetData('level: (\d+)', battery)
+  battery_temp = _GetData('temperature: (\d+)', battery,
+                          lambda x: float(x) / 10.0)
+  imei_slice = _GetData('Device ID = (\d+)',
+                        device_adb.GetSubscriberInfo(),
+                        lambda x: x[-6:])
   report = ['Device %s (%s)' % (serial, device_type),
             '  Build: %s (%s)' %
               (device_build, device_adb.GetBuildFingerprint()),
diff --git a/build/isolate.gypi b/build/isolate.gypi
index 7b81697..15fcf4c 100644
--- a/build/isolate.gypi
+++ b/build/isolate.gypi
@@ -44,7 +44,7 @@
         '<(DEPTH)/tools/swarm_client/isolate.py',
         '<(DEPTH)/tools/swarm_client/isolateserver_archive.py',
         '<(DEPTH)/tools/swarm_client/run_isolated.py',
-        '<(DEPTH)/tools/swarm_client/run_test_cases.py',
+        '<(DEPTH)/tools/swarm_client/googletest/run_test_cases.py',
         '<(DEPTH)/tools/swarm_client/short_expression_finder.py',
         '<(DEPTH)/tools/swarm_client/trace_inputs.py',
 
diff --git a/build/linux/unbundle/v8.gyp b/build/linux/unbundle/v8.gyp
index f7448fe..9b06347 100644
--- a/build/linux/unbundle/v8.gyp
+++ b/build/linux/unbundle/v8.gyp
@@ -26,7 +26,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 {
-  'includes': ['../../build/common.gypi'],
+  'includes': ['../../build/toolchain.gypi', '../../build/features.gypi'],
   'targets': [
     {
       'target_name': 'v8',
diff --git a/build/util/LASTCHANGE b/build/util/LASTCHANGE
index 31ae365..a724abe 100644
--- a/build/util/LASTCHANGE
+++ b/build/util/LASTCHANGE
@@ -1 +1 @@
-LASTCHANGE=213605
+LASTCHANGE=213780
diff --git a/build/util/LASTCHANGE.blink b/build/util/LASTCHANGE.blink
index 39ed5b7..e5435e2 100644
--- a/build/util/LASTCHANGE.blink
+++ b/build/util/LASTCHANGE.blink
@@ -1 +1 @@
-LASTCHANGE=154842
+LASTCHANGE=154965
diff --git a/cc/cc.target.darwin-arm.mk b/cc/cc.target.darwin-arm.mk
index 4b322bf..60bb489 100644
--- a/cc/cc.target.darwin-arm.mk
+++ b/cc/cc.target.darwin-arm.mk
@@ -287,6 +287,7 @@
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -401,6 +402,7 @@
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/cc/cc.target.darwin-mips.mk b/cc/cc.target.darwin-mips.mk
index 36433ff..dcf00a0 100644
--- a/cc/cc.target.darwin-mips.mk
+++ b/cc/cc.target.darwin-mips.mk
@@ -286,6 +286,7 @@
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -399,6 +400,7 @@
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/cc/cc.target.darwin-x86.mk b/cc/cc.target.darwin-x86.mk
index 2126313..541293e 100644
--- a/cc/cc.target.darwin-x86.mk
+++ b/cc/cc.target.darwin-x86.mk
@@ -288,6 +288,7 @@
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -404,6 +405,7 @@
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/cc/cc.target.linux-arm.mk b/cc/cc.target.linux-arm.mk
index 4b322bf..60bb489 100644
--- a/cc/cc.target.linux-arm.mk
+++ b/cc/cc.target.linux-arm.mk
@@ -287,6 +287,7 @@
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -401,6 +402,7 @@
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/cc/cc.target.linux-mips.mk b/cc/cc.target.linux-mips.mk
index 36433ff..dcf00a0 100644
--- a/cc/cc.target.linux-mips.mk
+++ b/cc/cc.target.linux-mips.mk
@@ -286,6 +286,7 @@
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -399,6 +400,7 @@
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/cc/cc.target.linux-x86.mk b/cc/cc.target.linux-x86.mk
index 2126313..541293e 100644
--- a/cc/cc.target.linux-x86.mk
+++ b/cc/cc.target.linux-x86.mk
@@ -288,6 +288,7 @@
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -404,6 +405,7 @@
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc
index 3437d86..5e7bd77 100644
--- a/cc/layers/layer.cc
+++ b/cc/layers/layer.cc
@@ -232,14 +232,6 @@
     replica_layer_->mask_layer_->reset_raster_scale_to_unknown();
 }
 
-bool Layer::HasAncestor(const Layer* ancestor) const {
-  for (const Layer* layer = parent(); layer; layer = layer->parent()) {
-    if (layer == ancestor)
-      return true;
-  }
-  return false;
-}
-
 void Layer::AddChild(scoped_refptr<Layer> child) {
   InsertChild(child, children_.size());
 }
@@ -353,6 +345,14 @@
     AddChild(children[i]);
 }
 
+bool Layer::HasAncestor(const Layer* ancestor) const {
+  for (const Layer* layer = parent(); layer; layer = layer->parent()) {
+    if (layer == ancestor)
+      return true;
+  }
+  return false;
+}
+
 void Layer::RequestCopyOfOutput(
     scoped_ptr<CopyOutputRequest> request) {
   DCHECK(IsPropertyChangeAllowed());
diff --git a/cc/layers/layer.h b/cc/layers/layer.h
index 76c4899..fb63c4c 100644
--- a/cc/layers/layer.h
+++ b/cc/layers/layer.h
@@ -69,6 +69,7 @@
   void RemoveFromParent();
   void RemoveAllChildren();
   void SetChildren(const LayerList& children);
+  bool HasAncestor(const Layer* ancestor) const;
 
   const LayerList& children() const { return children_; }
   Layer* child_at(size_t index) { return children_[index].get(); }
@@ -441,7 +442,6 @@
   friend class base::RefCounted<Layer>;
 
   void SetParent(Layer* layer);
-  bool HasAncestor(const Layer* ancestor) const;
   bool DescendantIsFixedToContainerLayer() const;
 
   // Returns the index of the child or -1 if not found.
diff --git a/cc/layers/layer_unittest.cc b/cc/layers/layer_unittest.cc
index fb3a752..f841e73 100644
--- a/cc/layers/layer_unittest.cc
+++ b/cc/layers/layer_unittest.cc
@@ -388,6 +388,27 @@
   EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(NULL));
 }
 
+TEST_F(LayerTest, HasAncestor) {
+  scoped_refptr<Layer> parent = Layer::Create();
+  EXPECT_FALSE(parent->HasAncestor(parent));
+
+  scoped_refptr<Layer> child = Layer::Create();
+  parent->AddChild(child);
+
+  EXPECT_FALSE(child->HasAncestor(child));
+  EXPECT_TRUE(child->HasAncestor(parent));
+  EXPECT_FALSE(parent->HasAncestor(child));
+
+  scoped_refptr<Layer> child_child = Layer::Create();
+  child->AddChild(child_child);
+
+  EXPECT_FALSE(child_child->HasAncestor(child_child));
+  EXPECT_TRUE(child_child->HasAncestor(parent));
+  EXPECT_TRUE(child_child->HasAncestor(child));
+  EXPECT_FALSE(parent->HasAncestor(child));
+  EXPECT_FALSE(parent->HasAncestor(child_child));
+}
+
 TEST_F(LayerTest, GetRootLayerAfterTreeManipulations) {
   CreateSimpleTestTree();
 
diff --git a/chrome/VERSION b/chrome/VERSION
index e905f18..b9638e5 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=30
 MINOR=0
-BUILD=1576
+BUILD=1577
 PATCH=0
diff --git a/chrome/app/breakpad_linux.cc b/chrome/app/breakpad_linux.cc
index f4b5caa..8c71bcd 100644
--- a/chrome/app/breakpad_linux.cc
+++ b/chrome/app/breakpad_linux.cc
@@ -31,7 +31,7 @@
 #include "base/platform_file.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/posix/global_descriptors.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
 #include "base/strings/string_util.h"
 #include "breakpad/src/client/linux/handler/exception_handler.h"
 #include "breakpad/src/client/linux/minidump_writer/directory_reader.h"
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc
index 6620288..ab25e99 100644
--- a/chrome/app/chrome_main_delegate.cc
+++ b/chrome/app/chrome_main_delegate.cc
@@ -9,7 +9,8 @@
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/stats_counters.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
+#include "base/process/process_handle.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 4d19df6..a396538 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5197,7 +5197,10 @@
         Use your microphone and camera
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS" desc="Permission string for access to downloads.">
-        Manage your downloads and open downloaded files
+        Manage your downloads
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS_OPEN" desc="Permission string for access to downloads.">
+        Open downloaded files
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_WRITE" desc="Permission string for write access to the file system.">
         Write to files that you have opened in the application
diff --git a/chrome/app/nacl_fork_delegate_linux.cc b/chrome/app/nacl_fork_delegate_linux.cc
index f152498..eef9436 100644
--- a/chrome/app/nacl_fork_delegate_linux.cc
+++ b/chrome/app/nacl_fork_delegate_linux.cc
@@ -19,7 +19,7 @@
 #include "base/path_service.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/posix/unix_domain_socket_linux.h"
-#include "base/process_util.h"
+#include "base/process/launch.h"
 #include "base/third_party/dynamic_annotations/dynamic_annotations.h"
 #include "chrome/common/chrome_paths.h"
 #include "components/nacl/common/nacl_helper_linux.h"
diff --git a/chrome/app/policy/policy_templates_am.xtb b/chrome/app/policy/policy_templates_am.xtb
index aa78515..f4548e4 100644
--- a/chrome/app/policy/policy_templates_am.xtb
+++ b/chrome/app/policy/policy_templates_am.xtb
@@ -90,6 +90,11 @@
 
       ካልተዋቀረ ተጠቃሚው ይመጣለት እንደሆነ ይጠየቃል ወይም ማስመጣት በራስ-ሰር ሊከሰት ይችላል።</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/> የሚከተሉትን የይዘት አይነቶች እንዲቆጣጠር ይፍቀዱለት</translation>
+<translation id="6647965994887675196">ወደ እውነት ከተዋቀረ ክትትል የሚደረግባቸው ተጠቃሚዎች ሊፈጠሩ እና ስራ ላይ ሊውሉ ይችላሉ።
+
+          ወደ ሐሰት ከተዋቀረ ወይም ካልተዋቀረ ክትትል የሚደረግባቸው የተጠቃሚዎች መፍጠር እና መግቢያ ይሰናከላሉ። ሁሉም ነባር ክትትል የሚደረግባቸው ተጠቃሚዎች ይደበቃሉ።
+
+          ማሳሰቢያ፦ የሸማች እና የድርጅት መሣሪያዎች ነባሪ ባህሪዎች የተለያዩ ናቸው፦ ክትትል የሚደረግባቸው ተጠቃሚዎች በሸማች መሣሪያዎች ላይ በነባሪነት ይነቃሉ፣ ነገር ግን በድርጅት መሣሪያዎች ላይ በነባሪነት ይሰናከላሉ።</translation>
 <translation id="5469825884154817306">በእነዚህ ጣቢያዎች ላይ ምስሎችን አግድ</translation>
 <translation id="8412312801707973447">የመስመር ላይ OCSP/CRL ማረጋገጦች ይከናወኑ ወይም አይከናወኑ እንደሆኑ</translation>
 <translation id="6649397154027560979">ይህ መመሪያ ተቋርጧል፣ እባክዎ ይልቁንስ URLBlacklist ይጠቀሙ።
@@ -1134,6 +1139,7 @@
 
           ይህ መመሪያ እንዳልተዋቀረ ከተተወ የመግቢያ ገጹ መጀመሪያ ላይ ሲታይ ባለከፍተኛ ንፅፅር ሁነታው ይሰናከላል። ተጠቃሚዎች በማንኛውም ጊዜ ባለከፍተኛ ንፅፅር ሁነታውን ማንቃት ወይም ማሰናከል ይችላሉ፣ እና በመግቢያ ገጹ ላይ ያለው ሁኔታው በተጠቃሚዎች መካከል ቋሚ ይሆናል።</translation>
 <translation id="8580857153747395000">ከይዘት ጥቅሎች ውጪ የሆኑ ጣቢያዎች በሚጎበኙበት ጊዜ አስጠንቅቅ።</translation>
+<translation id="350796261613621561">ክትትል የሚደረግባቸው የተጠቃሚዎች መፍጠር ያንቁ።</translation>
 <translation id="602728333950205286">ነባሪ የፍለጋ አቅራቢ ቅጽበታዊ ዩ አር ኤል</translation>
 <translation id="3030000825273123558">ሜትሪክስ ሪፖርት ማድረግን ያንቁ</translation>
 <translation id="6559057113164934677">ማንኛውም ጣቢያ ካሜራውን እና ማይክሮፎኑን እንዲደርስባቸው አትፍቀድ</translation>
@@ -1159,6 +1165,9 @@
 <translation id="8864975621965365890">አንድ ጣቢያ በ<ph name="PRODUCT_FRAME_NAME"/> ተሰርቶ ሲታይ የሚመጣውን የአለመቀበል ጥያቄን ያፍናል።</translation>
 <translation id="3264793472749429012">የነባሪ ፍለጋ አቅራቢ የኮድ ግቤቶች</translation>
 <translation id="285480231336205327">የከፍተኛ ንፅፅር ሁነታን ያንቁ</translation>
+<translation id="5366977351895725771">ወደ ሐሰት ከተዋቀረ በዚህ ተጠቃሚ የሚደረጉ ክትትል የሚደረግባቸው የተጠቃሚዎች መፍጠር ይሰናከላል። ማንኛቸውም ክትትል የሚደረግባቸው ተጠቃሚዎች አሁንም የሚገኙ ይሆናሉ።
+
+          ወደ እውነት ከተዋቀረ ወይም ካልተዋቀረ ክትትል የሚደረግባቸው ተጠቃሚዎች በዚህ ተጠቃሚ ሊፈጠሩ እና ሊቀናበሩ ይችላሉ።</translation>
 <translation id="8101760444435022591">Soft-fail፣ የመስመር ላይ የስረዛ ማረጋገጫዎች ምንም ውጤታማ የሆነ የደህንነት ጥቅም የማይሰጡ ከመሆናቸው አንጻር በ<ph name="PRODUCT_NAME"/> ስሪት 19 እና ከዚያ በኋላ በሆነ ስሪት በነባሪነት ተሰናክለዋል። ይህን መምሪያ ወደ በማዋቀር ቀዳሚው ባህሪ ይመለስና የመስመር ላይ OCSP/CRL ማረጋገጦች ይከናወናሉ።
 
       መምሪያው ካልተዋቀረ ወይም ሐሰት እንዲሆን ከተዋቀረ Chrome በChrome 19 እና ከዚያ በኋላ በሆነ ስሪት የመስመር ላይ ስረዛዎችን አያከናውንም።</translation>
diff --git a/chrome/app/policy/policy_templates_ar.xtb b/chrome/app/policy/policy_templates_ar.xtb
index e8acbf9..5436436 100644
--- a/chrome/app/policy/policy_templates_ar.xtb
+++ b/chrome/app/policy/policy_templates_ar.xtb
@@ -70,6 +70,11 @@
 <translation id="3816312845600780067">تمكين اختصار لوحة المفاتيح للخروج لتسجيل الدخول تلقائيًا</translation>
 <translation id="3214164532079860003">تفرض هذه السياسة استيراد الصفحة الرئيسية من المتصفح الافتراضي الحالي إذا تم تمكينه. إذا تم تعطيلها، فلا يتم استيراد الصفحة الرئيسية. إذا لم يتم تعيينها، فقد يتم سؤال المستخدم بشأن الاستيراد أو إجراء الاستيراد تلقائيًا.</translation>
 <translation id="5330684698007383292">السماح لـ <ph name="PRODUCT_FRAME_NAME"/> بالتعامل مع أنواع المحتوى التالية</translation>
+<translation id="6647965994887675196">في حالة تعيين السياسة على القيمة true، يمكن إنشاء حسابات للمستخدمين خاضعة للإشراف واستخدامها.
+
+          في حالة تعيين السياسة على القيمة false أو عدم تهيئتها، سيتم تعطيل إنشاء حسابات المستخدمين الخاضعة للإشراف وتسجيل الدخول إليها. سيتم إخفاء كل حسابات المستخدمين الخاضعة للإشراف.
+
+          ملاحظة: طريقة العمل الافتراضية لأجهزة المستخدمين وأجهزة المؤسسات تختلف: على أجهزة المستخدمين، يتم تمكين حسابات المستخدمين الخاضعة للإشراف بشكل افتراضي ولكن يتم تعطيلها على أجهزة المؤسسات بشكل افتراضي.</translation>
 <translation id="5469825884154817306">حظر عرض الصور في هذه المواقع</translation>
 <translation id="8412312801707973447">ما إذا كانت فحوصات OCSP/CRL عبر الإنترنت يتم تنفيذها أم لا</translation>
 <translation id="6649397154027560979">هناك اعتراض على هذه السياسة، يُرجى استخدام URLBlacklist بدلاً منها.
@@ -900,6 +905,7 @@
 
           في حالة ترك هذه السياسة بدون تعيين، يتم تعطيل وضع التباين العالي عند ظهور شاشة تسجيل الدخول للمرة الأولى. ويُمكن للمستخدمين تمكين وضع التباين العالي أو تعطيله في أي وقت مع استمرار الحالة في شاشة تسجيل الدخول بين المستخدمين.</translation>
 <translation id="8580857153747395000">التحذير عند الانتقال إلى مواقع خارج حزمات المحتوى.</translation>
+<translation id="350796261613621561">تمكين إنشاء حسابات المستخدمين الخاضعة للإشراف.</translation>
 <translation id="602728333950205286">عنوان URL للبحث باستخدام مزود البحث الافتراضي</translation>
 <translation id="3030000825273123558">تمكين إعداد تقرير للمقاييس</translation>
 <translation id="6559057113164934677">عدم السماح لأي موقع بالدخول إلى الكاميرا والميكروفون</translation>
@@ -917,6 +923,9 @@
 <translation id="8864975621965365890">لإيقاف طلب التحول إلى أسفل الذي يظهر عند عرض الموقع بواسطة <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">ترميز مزود البحث الافتراضي</translation>
 <translation id="285480231336205327">تمكين وضع التباين العالي</translation>
+<translation id="5366977351895725771">في حالة تعيين السياسة على القيمة false، فسيتم تعطيل إمكانية إنشاء هذا المستخدم لحسابات المستخدمين الخاضعة للإشراف. وستظل أي حسابات مستخدمين حالية خاضعة للإشراف متاحة.
+
+          في حالة تعيين السياسة على القيمة true أو عدم تهيئتها، يمكن لهذا المستخدم إنشاء حسابات المستخدمين الخاضعة للإشراف وإدارتها.</translation>
 <translation id="8101760444435022591">في ضوء حقيقة أن الأعطال البسيطة وفحوصات الإبطال عبر الإنترنت لا توفر فائدة أمان فعالة، لذلك يتم تعطيلها افتراضيًا في <ph name="PRODUCT_NAME"/>، الإصدار 19 والإصدارات الأحدث. من خلال تعيين هذه السياسة على &quot;true&quot;، تتم استعادة السلوك السابق وسيتم تنفيذ فحوصات OCSP/CRL عبر الإنترنت.
 
       في حالة عدم تعيين هذه السياسة أو تم تعيينها على &quot;false&quot;، فلن ينفذ Chrome فحوصات الإبطال عبر الإنترنت في الإصدار 19 من Chrome والإصدارات الأحدث.</translation>
diff --git a/chrome/app/policy/policy_templates_bg.xtb b/chrome/app/policy/policy_templates_bg.xtb
index 4c78499..092d353 100644
--- a/chrome/app/policy/policy_templates_bg.xtb
+++ b/chrome/app/policy/policy_templates_bg.xtb
@@ -78,6 +78,11 @@
 <translation id="3816312845600780067">Активиране на клавишната комбинация за предотвратяване на автоматичното влизане</translation>
 <translation id="3214164532079860003">Ако е активирано, това правило импортира принудително началната страница от текущия браузър по подразбиране. В противен случай тя няма да се импортира. Ако правилото не е зададено, потребителят може да бъде попитан дали операцията да се извърши, или импортирането може да стане автоматично.</translation>
 <translation id="5330684698007383292">Разрешаване на <ph name="PRODUCT_FRAME_NAME"/> да обработва следните типове съдържание</translation>
+<translation id="6647965994887675196">При „true“ могат да се създават и използват контролирани потребители.
+
+Ако е зададено „false“ или правилото не е конфигурирано, създаването на тези потребители и влизането в профили с тях ще бъдат деактивирани. Всички съществуващи контролирани потребители ще бъдат скрити.
+
+ЗАБЕЛЕЖКА: Стандартното поведение за потребителски и корпоративни устройства се различава: по подразбиране контролираните потребители са активирани на потребителски устройства, но са деактивирани на корпоративни.</translation>
 <translation id="5469825884154817306">Блокиране на изображенията на тези сайтове</translation>
 <translation id="8412312801707973447">Дали да се изпълняват онлайн OCSP/CRL проверки</translation>
 <translation id="6649397154027560979">Това правило е оттеглено. Вместо това, моля, ползвайте URLBlacklist.
@@ -904,6 +909,7 @@
 
           Ако правилото не бъде зададено, режимът на висок контраст е деактивиран при първото показване на екрана за вход. Потребителите могат да го активират или деактивират по всяко време и състоянието му в екрана за вход се запазва между тях.</translation>
 <translation id="8580857153747395000">Предупреждение при посещаване на сайтове извън пакети със съдържание.</translation>
+<translation id="350796261613621561">Активиране на създаването на контролирани потребители.</translation>
 <translation id="602728333950205286">URL адрес за динамично търсене за търсещата машина по подразбиране</translation>
 <translation id="3030000825273123558">Активиране на съобщаването на показателите</translation>
 <translation id="6559057113164934677">Забраняване на сайтовете да осъществяват достъп до камерата и микрофона</translation>
@@ -923,6 +929,9 @@
 <translation id="8864975621965365890">Потиска подканата за отхвърляне, която се показва при изобразяване на сайт от <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Кодировки за търсещата машина по подразбиране</translation>
 <translation id="285480231336205327">Да се активира режимът на висок контраст</translation>
+<translation id="5366977351895725771">При „false“ създаването на контролирани потребители ще бъде деактивирано за този потребител. Всички съществуващи контролирани потребители пак ще са налице.
+
+Ако е зададено „true“ или правилото не е конфигурирано, съответният потребител може да създава и управлява контролирани потребители.</translation>
 <translation id="8101760444435022591">Като се има предвид, че връщащите грешка „soft-fail“ онлайн проверки за анулирани сертификати не предоставят ефективни ползи за сигурността, те са деактивирани по подразбиране в <ph name="PRODUCT_NAME"/> версия 19 и по-нови. Със задаването на „true“ за това правило предишното поведение се възстановява и онлайн OCSP/CRL проверките ще се изпълняват. Ако правилото не е зададено или е „false“, Chrome няма да изпълнява съответните проверки във версия 19 или по-нови.</translation>
 <translation id="5469484020713359236">Позволява да зададете списък с образци за URL адреси, посочващи сайтове, на които е разрешено да задават „бисквитки“. Ако това правило е оставено незададено, за всички сайтове ще се използва глобалната стандартна стойност от правилото „DefaultCookiesSetting“, ако е зададено, или в противен случай – личната конфигурация на потребителя.</translation>
 <translation id="1504431521196476721">Отдалечено удостоверяване</translation>
diff --git a/chrome/app/policy/policy_templates_bn.xtb b/chrome/app/policy/policy_templates_bn.xtb
index 9e95d54..a80a1e9 100644
--- a/chrome/app/policy/policy_templates_bn.xtb
+++ b/chrome/app/policy/policy_templates_bn.xtb
@@ -74,6 +74,12 @@
 <translation id="3816312845600780067">স্বয়ংক্রিয় লগইনের জন্য বেলআউট কীবোর্ড শর্টকাট সক্রিয় করুন</translation>
 <translation id="3214164532079860003">এই নীতিটি হোম পৃষ্ঠাটিকে বর্তমান ডিফল্ট ব্রাউজারটি সক্ষম থাকলে সেটি থেকে আমদানি করতে জোর দেয় যদি অক্ষম থাকে তবে হোম পৃষ্ঠাটি আমদানি হয় না৷ যদি এটি সেট না থাকে তবে ব্যবহারকারীকে আমদানি করতে হবে কিনা তা জিজ্ঞাসা করা হতে পারে বা স্বয়ংক্রিয়ভাবে আমদানি করা হতে পারে৷</translation>
 <translation id="5330684698007383292">নিম্নোক্ত সামগ্রী প্রকার পরিচালনা করতে <ph name="PRODUCT_FRAME_NAME"/> কে মঞ্জুরি দিন৷</translation>
+<translation id="6647965994887675196">যদি সত্যতে সেট করা থাকে, তাহলে তত্বাবধানে থাকা ব্যবহারকারী তৈরি করা এবং ব্যবহার করা যেতে পারে৷
+
+          যদি মিথ্যাতে সেট করা থাকে বা কনফিগার করা না থাকে, তাহলে তত্বাবধানে থাকা ব্যবহারকারী তৈরি করা এবং লগইন করা অক্ষম থাকবে৷ সমস্ত বিদ্যমান তত্বাবধানে থাকা ব্যবহারকারী লুক্কায়িত হবে৷
+
+          
+ দ্রষ্টব্য: উপভোক্তা এবং এন্টারপ্রাইজ ডিভাইসগুলির জন্য ডিফল্ট আচরণ পৃথক হয়: উপভোক্তার ডিভাইসগুলিতে ডিফল্ট হিসাবে তত্বাবধানে থাকা ব্যবহারকারীগুলি সক্ষমিত থাকে, কিন্তু এন্টারপ্রাইজ ডিভাইসগুলিতে সেগুলি ডিফল্ট হিসাবে অক্ষমিত থাকে৷</translation>
 <translation id="5469825884154817306">এই সাইটগুলিতে চিত্রগুলি অবরোধ করুন</translation>
 <translation id="8412312801707973447">অনলাইন OCSP / CRL পরীক্ষা  করা হয় কিনা</translation>
 <translation id="6649397154027560979">এই নীতিটি থামানো হয়েছে, দয়া করে এর পরিবর্তে URLBlacklist ব্যবহার করুন৷
@@ -1074,6 +1080,7 @@
 
           যদি এই নীতিটি সেট না করে ফেলে রাখা হয়, তাহলে যখন লগইন স্ক্রীন প্রথমে প্রদর্শিত হয় তখন উচ্চ কনট্রাস্ট মোড অক্ষম থাকে৷ ব্যবহারকারীরা যেকোনো সময়ে উচ্চ কনট্রাস্ট মোড সক্ষম বা অক্ষম করতে পারেন এবং লগইন স্ক্রীনে ব্যবহারকারীদের মধ্যে এটির স্থিতি স্থায়ী হয়৷</translation>
 <translation id="8580857153747395000">সামগ্রী প্যাকগুলির বাইরের সাইটগুলি পরিদর্শন করা সময় সর্তক করুন৷</translation>
+<translation id="350796261613621561">তত্বাবধানে থাকা ব্যবহারকারী তৈরি করা সক্ষম করুন৷</translation>
 <translation id="602728333950205286">ডিফল্ট অনুসন্ধান সরবরাহকারী তাত্ক্ষণিক URL</translation>
 <translation id="3030000825273123558">ছন্দোবিজ্ঞান প্রতিবেদন সক্ষম করুন</translation>
 <translation id="6559057113164934677">ক্যামেরা ও মাইক্রোফোনে অ্যাক্সেসের মঞ্জুরি কোনো সাইটকে দেবেন না</translation>
@@ -1099,6 +1106,9 @@
 <translation id="8864975621965365890">যখন একটি সাইট <ph name="PRODUCT_FRAME_NAME"/> এর দ্বারা রেন্ডার করা হয় তখন এতে প্রদর্শিত প্রত্যাখ্যানের বিজ্ঞপ্তিটিকে গোপন করে৷</translation>
 <translation id="3264793472749429012">ডিফল্ট অনুসন্ধান সরবরাহকারী এনকোডিংগুলি</translation>
 <translation id="285480231336205327">উচ্চ কনট্র্যাস্ট মোড সক্ষম করুন</translation>
+<translation id="5366977351895725771">যদি মিথ্যাতে সেট করা থাকে, তাহলে এই ব্যবহারকারীর দ্বারা তত্বাবধানে থাকা ব্যবহারকারী তৈরি করা অক্ষম হবে৷ যেকোনো বিদ্যমান তত্বাবধানে থাকা ব্যবহারকারী এখনো উপলব্ধ হবে৷
+
+          যদি সত্যতে সেট করা থাকে বা কনফিগার করা না থাকে, তাহলে এই ব্যবহারকারী দ্বারা তত্বাবধানে থাকা ব্যবহারকারী তৈরি এবং পরিচালিত করা যেতে পারে৷</translation>
 <translation id="8101760444435022591">সফ্ট-ফেল অনলাইন প্রত্যাহারমূলক পরীক্ষা কোন কার্যকরী নিরাপত্তা সুবিধা প্রদান করেনা, এই বিষয়ের আলোকে, তাদের <ph name="PRODUCT_NAME"/> সংস্করণ 19 এবং তার পরে ডিফল্টরূপে অক্ষম করা হয়৷ এই নীতিকে সত্য হিসাবে সেট করলে, পূর্ববর্তী আচরণ পূর্বাবস্থায় ফিরে আসে এবং অনলাইন OCSP/CRL পরীক্ষা করা হয়৷
 
       যদি নীতি সেট না করা হয় অথবা মিথ্যা হিসাবে সেট করা হয়, তাহলে Chrome Chrome-19 এবং তার পরে অনলাইন প্রত্যাহার পরীক্ষা করবে না৷</translation>
diff --git a/chrome/app/policy/policy_templates_ca.xtb b/chrome/app/policy/policy_templates_ca.xtb
index 6eb5f28..e3894b8 100644
--- a/chrome/app/policy/policy_templates_ca.xtb
+++ b/chrome/app/policy/policy_templates_ca.xtb
@@ -66,6 +66,11 @@
 <translation id="3816312845600780067">Activa les tecles de drecera d'ajuda per a l'inici automàtic</translation>
 <translation id="3214164532079860003">Si està activada, aquesta política fa que la pàgina d'inici s'importi des del navegador predeterminat actual. Si està desactivada, la pàgina d'inici no s'importarà. Si no es defineix, pot ser que es demani a l'usuari si vol importar o bé la importació es pot produir de manera automàtica.</translation>
 <translation id="5330684698007383292">Permet que <ph name="PRODUCT_FRAME_NAME"/> gestioni els tipus de contingut següents</translation>
+<translation id="6647965994887675196">Si es defineix com a vertader, es poden crear usuaris supervisats i es poden fer servir.
+
+          Si es defineix com a fals o bé no es configura, l'inici de sessió i la creació d'usuaris supervisats es desactivaran. S'amagaran tots els usuaris supervisats existents.
+
+          NOTA: el comportament predeterminat dels dispositius de consumidor i d'empresa és diferent. Als dispositius de consumidor els usuaris supervisats estan activats de manera predeterminada, mentre que als dispositius d'empresa estan desactivats per defecte.</translation>
 <translation id="5469825884154817306">Bloqueja les imatges en aquests llocs</translation>
 <translation id="8412312801707973447">Si es realitzen comprovacions OCSP/CRL en línia</translation>
 <translation id="6649397154027560979">Aquesta política està obsoleta, feu servir URLBlacklist al seu lloc-.
@@ -895,6 +900,7 @@
 
           Si no s'estableix aquesta política, el mode de contrast elevat es desactivarà quan la pantalla d'inici de sessió es mostri per primera vegada. Els usuaris poden activar o desactivar el mode de contrast elevat en qualsevol moment i el seu estat a la pantalla d'inici de sessió es mantindrà entre els usuaris.</translation>
 <translation id="8580857153747395000">Mostra un advertiment quan es visitin llocs no inclosos en paquets de contingut.</translation>
+<translation id="350796261613621561">Activa la creació d'usuaris supervisats.</translation>
 <translation id="602728333950205286">URL instantani del proveïdor de cerca predeterminat</translation>
 <translation id="3030000825273123558">Activa la creació d'informes de mètriques</translation>
 <translation id="6559057113164934677">No permetis que cap lloc accedeixi a la càmera ni al micròfon</translation>
@@ -912,6 +918,9 @@
 <translation id="8864975621965365890">Suprimeix l'avís de desactivació que apareix quan un lloc <ph name="PRODUCT_FRAME_NAME"/> renderitza un lloc.</translation>
 <translation id="3264793472749429012">Codificacions del proveïdor de cerca predeterminat</translation>
 <translation id="285480231336205327">Activa el mode de contrast elevat</translation>
+<translation id="5366977351895725771">Si es defineix com a fals, la creació d'usuaris supervisats per part d'aquest usuari es desactivarà. Els usuaris supervisats existents continuaran estant disponibles.
+
+          Si es defineix com a vertader o bé no es configura, aquest usuari pot crear i gestionar usuaris supervisats.</translation>
 <translation id="8101760444435022591">Com que les comprovacions de revocació en línia que no requereixen cap atenció no proporcionen cap benefici de seguretat eficaç, estan desactivades de manera predeterminada a la versió 19 del producte <ph name="PRODUCT_NAME"/> i posteriors. En definir aquesta política a «true» (cert), es restaurarà el comportament anterior i es realitzaran les comprovacions OCSP/CRL en línia.
 
       Si no es defineix la política o si es defineix a «false» (fals), Chrome no realitzarà cap comprovació de revocació en línia a Chrome 19 i posteriors.</translation>
diff --git a/chrome/app/policy/policy_templates_cs.xtb b/chrome/app/policy/policy_templates_cs.xtb
index 6071f84..3178ece 100644
--- a/chrome/app/policy/policy_templates_cs.xtb
+++ b/chrome/app/policy/policy_templates_cs.xtb
@@ -86,6 +86,11 @@
 
      Není-li nastavena, může se uživatelům zobrazit výzva, zda chtějí domovskou stránku importovat, nebo může import probíhat automaticky.</translation>
 <translation id="5330684698007383292">Umožnit pluginu <ph name="PRODUCT_FRAME_NAME"/> zpracovávat následující typy obsahu</translation>
+<translation id="6647965994887675196">Pokud tuto zásadu nastavíte na hodnotu true, lze vytvářet a používat uživatele pod dohledem.
+
+          Pokud tuto zásadu nenakonfigurujete nebo ji nastavíte na hodnotu false, bude vytváření a přihlašování uživatelů pod dohledem zakázáno. Všichni existující uživatelé pod dohledem budou skryti.
+
+          POZNÁMKA: Výchozí chování pro zákaznická a podniková zařízení se liší. V zákaznických zařízeních budou uživatelé pod dohledem ve výchozím nastavení aktivní, zatímco v podnikových zařízeních nikoli.</translation>
 <translation id="5469825884154817306">Blokovat obrázky na těchto stránkách</translation>
 <translation id="8412312801707973447">Zda se budou provádět online kontroly OCSP/CRL</translation>
 <translation id="6649397154027560979">Podpora této zásady byla ukončena, použijte prosím namísto ní seznam URLBlacklist.
@@ -1121,6 +1126,7 @@
 
 Pokud tuto zásadu nenastavíte, bude při prvním zobrazení obrazovky přihlášení režim vysokého kontrastu deaktivován. Uživatelé budou moci režim vysokého kontrastu kdykoli aktivovat nebo deaktivovat a zvolený stav na přihlašovací obrazovce přetrvá i u jiných uživatelů.</translation>
 <translation id="8580857153747395000">Při návštěvě webů mimo obsahové balíčky se zobrazí varování.</translation>
+<translation id="350796261613621561">Povolení vytváření uživatelů pod dohledem</translation>
 <translation id="602728333950205286">Adresa URL dynamického vyhledávání výchozího poskytovatele vyhledávání</translation>
 <translation id="3030000825273123558">Povolit hlášení o metrikách</translation>
 <translation id="6559057113164934677">Nedovolit žádnému webu používat kameru a mikrofon</translation>
@@ -1146,6 +1152,9 @@
 <translation id="8864975621965365890">Potlačuje oznámení o ukončení podpory, která se zobrazuje, když je web vykreslován pomocí pluginu <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Kódování výchozího poskytovatele vyhledávání</translation>
 <translation id="285480231336205327">Aktivovat vysoce kontrastní režim</translation>
+<translation id="5366977351895725771">Pokud tuto zásadu nastavíte na hodnotu false, vytváření a přihlašování uživatelů pod dohledem bude zakázáno. Všichni existující uživatelé pod dohledem budou stále k dispozici.
+
+          Pokud tuto zásahu nenakonfigurujete nebo ji nastavíte na hodnotu true, tento uživatel bude moci vytvářet a spravovat uživatele pod dohledem.</translation>
 <translation id="8101760444435022591">Vzhledem k tomu, že online kontroly zamítnutých certifikátů nepřinášejí žádné efektivní bezpečnostní výhody a také snadno selhávají, jsou v prohlížeči <ph name="PRODUCT_NAME"/> verze 19 a vyšší ve výchozím nastavení deaktivovány. Nastavíte-li tuto zásadu na hodnotu True, obnoví se předchozí chování a budou prováděny online kontroly OCSP/CRL.
 
       Pokud tato zásada není nastavena nebo je nastavena na hodnotu False, nebude Chrome verze 19 a vyšší provádět online kontroly zamítnutých certifikátů.</translation>
diff --git a/chrome/app/policy/policy_templates_da.xtb b/chrome/app/policy/policy_templates_da.xtb
index ba361ea..fa233b7 100644
--- a/chrome/app/policy/policy_templates_da.xtb
+++ b/chrome/app/policy/policy_templates_da.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Aktivér nødtastaturgenvej til automatisk login</translation>
 <translation id="3214164532079860003">Denne politik tvinger import af startsiden fra den aktuelle standardbrowser, hvis den er aktiveret. Hvis den er deaktiveret, importeres startsiden ikke. Hvis den ikke er angivet, kan brugeren blive spurgt, om den skal importeres, eller også sker det automatisk.</translation>
 <translation id="5330684698007383292">Tillad, at <ph name="PRODUCT_FRAME_NAME"/> håndterer følgende indholdstyper</translation>
+<translation id="6647965994887675196">Hvis dette er angivet som sandt, kan overvågede brugere oprettes og anvendes.
+
+          Hvis dette er angivet som falsk eller ikke er konfigureret, vil oprettelse af overvågede brugere og login for sådanne brugere være deaktiveret. Alle eksisterende overvågede brugere vil blive skjult.
+
+          BEMÆRK! Forbruger- og virksomhedsenheder opfører sig som standard forskelligt. På forbrugerenheder er overvågede brugere som standard aktiveret, men på virksomhedsenheder er de som standard deaktiveret.</translation>
 <translation id="5469825884154817306">Bloker billeder på disse websites</translation>
 <translation id="8412312801707973447">Om der udføres online kontrol af OCSP/CRL</translation>
 <translation id="6649397154027560979">Denne politik er ved at blive udfaset. Brug i stedet URLBlacklist.
@@ -932,6 +937,7 @@
 
           Hvis denne politik ikke indstilles, deaktiveres høj kontrast, når loginskærmen vises første gang. Brugerne kan når som helst aktivere eller deaktivere Høj kontrast, og dens status på loginskærmen fastholdes hos brugerne.</translation>
 <translation id="8580857153747395000">Vis en advarsel, når du er på websites uden for indholdspakkerne.</translation>
+<translation id="350796261613621561">Aktivér oprettelse af overvågede brugere.</translation>
 <translation id="602728333950205286">Direkte webadresse til standardsøgemaskinen</translation>
 <translation id="3030000825273123558">Aktivér datarapportering</translation>
 <translation id="6559057113164934677">Tillad ikke, at websites får adgang til kameraet og mikrofonen</translation>
@@ -949,6 +955,9 @@
 <translation id="8864975621965365890">Undertrykker opfordringen til afvisning, som vises, når et website gengives af <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Kodninger for standardsøgemaskinen</translation>
 <translation id="285480231336205327">Aktivér høj kontrast</translation>
+<translation id="5366977351895725771">Hvis dette er angivet som falsk, vil oprettelse af overvågede brugere være deaktiveret for denne bruger. Alle eksisterende overvågede brugere vil stadig være tilgængelige.
+
+          Hvis dette er angivet som sandt eller ikke er konfigureret, kan overvågede brugere oprettes og administreres af denne bruger.</translation>
 <translation id="8101760444435022591">Set i lyset af det faktum, at soft-fail online tilbagekaldelsesundersøgelser ikke har nogen effektive sikkerhedsfordele, deaktiveres de som standard i <ph name="PRODUCT_NAME"/> version 19 eller nyere. Hvis du indstiller denne politik til sand, gendannes den forrige adfærd, og der udføres online OCSP/CRL-undersøgelser. 
 
       Hvis politikken ikke angives eller indstilles til falsk, udfører Chrome ikke online tilbagekaldelsesundersøgelser i Chrome 19 eller nyere.</translation>
diff --git a/chrome/app/policy/policy_templates_de.xtb b/chrome/app/policy/policy_templates_de.xtb
index a71f0d6..2c53b90 100644
--- a/chrome/app/policy/policy_templates_de.xtb
+++ b/chrome/app/policy/policy_templates_de.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Tastaturkürzel zur Umgehung der automatischen Anmeldung aktivieren</translation>
 <translation id="3214164532079860003">Bei Aktivierung erzwingt diese Richtlinie, dass die Startseite vom aktuellen Standardbrowser importiert wird. Wenn sie deaktiviert ist, wird die Startseite nicht importiert. Sollte sie nicht konfiguriert sein, so wird der Nutzer gefragt, ob ein Import erfolgen soll, oder der Import findet automatisch statt.</translation>
 <translation id="5330684698007383292">Verarbeitung der folgenden Inhaltstypen durch <ph name="PRODUCT_FRAME_NAME"/> zulassen</translation>
+<translation id="6647965994887675196">Wurde &quot;true&quot; festgelegt, können betreute Nutzer erstellt und verwendet werden.
+
+          Wurde &quot;false&quot; oder &quot;not configured&quot; festgelegt, wird die Erstellung und Anmeldung betreuter Nutzer deaktiviert. Alle vorhandenen betreuten Nutzer werden ausgeblendet.
+
+          Hinweis: Das Standardverhalten bei Geräten für Kunden und bei Geräten für Unternehmen ist unterschiedlich: Bei Geräten für Kunden sind betreute Nutzer standardmäßig aktiviert, bei Geräten für Unternehmen hingegen sind sie standardmäßig deaktiviert.</translation>
 <translation id="5469825884154817306">Bilder auf diesen Websites blockieren</translation>
 <translation id="8412312801707973447">Ob online OCSP-/CRL-Prüfungen durchgeführt werden</translation>
 <translation id="6649397154027560979">Diese Richtlinie wird nicht mehr verwendet, nutzen Sie stattdessen die Richtlinie &quot;URLBlacklist&quot;.
@@ -883,6 +888,7 @@
 
           Falls diese Richtlinie nicht konfiguriert wird, ist der Modus mit hohem Kontrast deaktiviert, wenn die Anmeldeseite das erste Mal angezeigt wird. Die Nutzer können den Modus mit hohem Kontrast jederzeit aktivieren oder deaktivieren und dieser Status bleibt auf der Anmeldeseite erhalten.</translation>
 <translation id="8580857153747395000">Vor dem Besuch von Websites außerhalb von Inhaltspaketen warnen</translation>
+<translation id="350796261613621561">Erstellung von betreuten Nutzern aktivieren</translation>
 <translation id="602728333950205286">Google Instant-URL der Standardsuchmaschine</translation>
 <translation id="3030000825273123558">Messdatenberichte aktivieren</translation>
 <translation id="6559057113164934677">Keine Website darf auf meine Kamera oder mein Mikrofon zugreifen</translation>
@@ -900,6 +906,9 @@
 <translation id="8864975621965365890">Unterdrückung des Hinweises auf Einstellung des Frames, der beim Rendern einer Website durch <ph name="PRODUCT_FRAME_NAME"/> erscheint</translation>
 <translation id="3264793472749429012">Standardsuchmaschinen-Codierungen</translation>
 <translation id="285480231336205327">Modus mit hohem Kontrast aktivieren</translation>
+<translation id="5366977351895725771">Wurde &quot;false&quot; festgelegt, kann dieser Nutzer keine betreuten Nutzer erstellen. Alle vorhandenen betreuten Nutzer sind weiterhin verfügbar.
+
+          Wurde &quot;true&quot; oder &quot;not configured&quot; festgelegt, kann dieser Nutzer betreute Nutzer erstellen und verwalten.</translation>
 <translation id="8101760444435022591">Da Online-Überprüfungen zu SoftFail-Zertifikatssperren keinen wirkungsvollen Sicherheitseffekt bieten, werden sie ab <ph name="PRODUCT_NAME"/>-Version 19 standardmäßig deaktiviert. Wenn Sie diese Richtlinie auf &quot;true&quot; setzen, wird das vorherige Verhalten wiederhergestellt und es werden online OCSP-/CRL-Prüfungen durchgeführt.
 
       Falls die Richtlinie nicht konfiguriert oder auf &quot;false&quot; eingestellt ist, führt Chrome ab Version 19 keine Online-Überprüfungen auf Zertifikatssperren mehr durch.</translation>
diff --git a/chrome/app/policy/policy_templates_el.xtb b/chrome/app/policy/policy_templates_el.xtb
index f876875..bcc2b85 100644
--- a/chrome/app/policy/policy_templates_el.xtb
+++ b/chrome/app/policy/policy_templates_el.xtb
@@ -85,6 +85,11 @@
 
       Αν δεν έχει καθοριστεί, μπορεί να ζητηθεί από τον χρήστη αν θα γίνει εισαγωγή, διαφορετικά η εισαγωγή μπορεί να συμβεί αυτόματα.</translation>
 <translation id="5330684698007383292">Να επιτρέπεται στο <ph name="PRODUCT_FRAME_NAME"/> η διαχείριση των παρακάτω τύπων περιεχομένου</translation>
+<translation id="6647965994887675196">Εάν αυτή η ρύθμιση οριστεί ως αληθής, είναι δυνατή η δημιουργία και η χρήση εποπτευόμενων χρηστών.
+
+          Εάν οριστεί ψευδής ή δεν διαμορφωθεί, η δημιουργία και η σύνδεση εποπτευόμενων χρηστών θα απενεργοποιηθεί. Θα γίνει απόκρυψη όλων των υπαρχόντων εποπτευόμενων χρηστών.
+
+          ΣΗΜΕΙΩΣΗ: Η προεπιλεγμένη συμπεριφορά για συσκευές πελατών και επιχειρήσεων διαφέρει: στις συσκευές πελατών, οι εποπτευόμενοι χρήστες είναι ενεργοποιημένοι από προεπιλογή, αλλά σε συσκευές επιχειρήσεων είναι απενεργοποιημένοι από προεπιλογή.</translation>
 <translation id="5469825884154817306">Αποκλεισμός εικόνων σε αυτούς τους ιστότοπους</translation>
 <translation id="8412312801707973447">Εάν εκτελούνται οι έλεγχοι OCSP/CRL στο διαδίκτυο</translation>
 <translation id="6649397154027560979">Αυτή η πολιτική έχει καταργηθεί, χρησιμοποιήστε στη θέση της το URLBlacklist.
@@ -1113,6 +1118,7 @@
 
           Αν δεν ρυθμιστεί αυτή η πολιτική, η λειτουργία υψηλής αντίθεσης απενεργοποιείται την πρώτη φορά που εμφανίζεται η οθόνη σύνδεσης. Οι χρήστες μπορούν να ενεργοποιούν ή να απενεργοποιούν τη λειτουργία υψηλής αντίθεσης ανά πάσα στιγμή και η κατάσταση της οθόνης σύνδεσης διατηρείται από τον ένα χρήστη στον άλλο.</translation>
 <translation id="8580857153747395000">Να προειδοποιείται ο χρήστης όταν επισκέπτεται ιστότοπους εκτός των πακέτων περιεχομένου.</translation>
+<translation id="350796261613621561">Ενεργοποίηση δημιουργίας εποπτευόμενων χρηστών.</translation>
 <translation id="602728333950205286">Προεπιλεγμένη διεύθυνση URL instant παροχέα αναζήτησης</translation>
 <translation id="3030000825273123558">Ενεργοποίηση αναφοράς μετρήσεων</translation>
 <translation id="6559057113164934677">Να μην επιτρέπεται η πρόσβαση οποιουδήποτε ιστότοπου στην κάμερα και το μικρόφωνο</translation>
@@ -1138,6 +1144,9 @@
 <translation id="8864975621965365890">Αποκρύπτει τo μήνυμα απόρριψης που εμφανίζεται όταν ένας ιστότοπος αποδίδεται από το <ph name="PRODUCT_FRAME_NAME"/> .</translation>
 <translation id="3264793472749429012">Προεπιλεγμένες κωδικοποιήσεις παροχέα αναζήτησης</translation>
 <translation id="285480231336205327">Ενεργοποίηση λειτουργίας υψηλής αντίθεσης</translation>
+<translation id="5366977351895725771">Εάν οριστεί ψευδής, η δημιουργία εποπτευόμενων χρηστών από αυτόν το χρήστη θα απενεργοποιηθεί. Τυχόν υπάρχοντες εποπτευόμενοι χρήστες θα εξακολουθήσουν να είναι διαθέσιμοι.
+
+          Εάν οριστεί αληθής ή δεν διαμορφωθεί, είναι δυνατή η δημιουργία και η διαχείριση εποπτευόμενων χρηστών από αυτόν το χρήστη.</translation>
 <translation id="8101760444435022591">Υπό το πρίσμα ότι οι έλεγχοι ακύρωσης τερματισμού μη κρίσιμων διεργασιών στο διαδίκτυο δεν παρέχουν αποτελεσματικά προνόμια ασφάλειας, απενεργοποιούνται από προεπιλογή στην έκδοση 19 του <ph name="PRODUCT_NAME"/> και σε νεότερες εκδόσεις. Με τη ρύθμιση αυτής της πολιτικής ως αληθούς, γίνεται επαναφορά της προηγούμενης συμπεριφοράς και εκτελούνται οι έλεγχοι OCSP/CRL στο διαδίκτυο.
 
       Εάν η πολιτική δεν έχει οριστεί ή έχει οριστεί ως ψευδής, το Chrome δεν θα εκτελέσει ελέγχους ακύρωσης στο διαδίκτυο στο Chrome 19 και σε νεότερες εκδόσεις.</translation>
diff --git a/chrome/app/policy/policy_templates_en-GB.xtb b/chrome/app/policy/policy_templates_en-GB.xtb
index cd674bc..dc24e08 100644
--- a/chrome/app/policy/policy_templates_en-GB.xtb
+++ b/chrome/app/policy/policy_templates_en-GB.xtb
@@ -90,6 +90,11 @@
 
       If it is not set, the user may be asked whether to import or importing may happen automatically.</translation>
 <translation id="5330684698007383292">Allow <ph name="PRODUCT_FRAME_NAME"/> to handle the following content types</translation>
+<translation id="6647965994887675196">If set to true, supervised users can be created and used.
+
+          If set to false or not configured, supervised-user creation and login will be disabled. All existing supervised users will be hidden.
+
+          NOTE: The default behaviour for consumer and enterprise devices differs: on consumer devices, supervised users are enabled by default, but on enterprise devices they are disabled by default.</translation>
 <translation id="5469825884154817306">Block images on these sites</translation>
 <translation id="8412312801707973447">Whether online OCSP/CRL checks are performed</translation>
 <translation id="6649397154027560979">This policy is deprecated, please use URLBlacklist instead.
@@ -1129,6 +1134,7 @@
 
           If this policy is left unset, high contrast mode is disabled when the login screen is first shown. Users can enable or disable high contrast mode at any time and its status on the login screen is persisted between users.</translation>
 <translation id="8580857153747395000">Warn when visiting sites outside of content packs.</translation>
+<translation id="350796261613621561">Enable creation of supervised users.</translation>
 <translation id="602728333950205286">Default search provider instant URL</translation>
 <translation id="3030000825273123558">Enable metrics reporting</translation>
 <translation id="6559057113164934677">Do not allow any site to access the camera and microphone</translation>
@@ -1154,6 +1160,9 @@
 <translation id="8864975621965365890">Suppresses the turn-down prompt that appears when a site is rendered by <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Default search provider encodings</translation>
 <translation id="285480231336205327">Enable high contrast mode</translation>
+<translation id="5366977351895725771">If set to false, supervised-user creation by this user will be disabled. Any existing supervised users will still be available.
+
+          If set to true or not configured, supervised users can be created and managed by this user.</translation>
 <translation id="8101760444435022591">In light of the fact that soft-fail online revocation checks provide no effective security benefit, they are disabled by default in <ph name="PRODUCT_NAME"/> version 19 and later. By setting this policy to true, the previous behaviour is restored and online OCSP/CRL checks will be performed.
 
       If the policy is not set, or is set to false, then Chrome will not perform online revocation checks in Chrome 19 and later.</translation>
diff --git a/chrome/app/policy/policy_templates_es-419.xtb b/chrome/app/policy/policy_templates_es-419.xtb
index 1e98d0c..726a738 100644
--- a/chrome/app/policy/policy_templates_es-419.xtb
+++ b/chrome/app/policy/policy_templates_es-419.xtb
@@ -72,6 +72,11 @@
 <translation id="3816312845600780067">Habilitar combinación de teclas para acceso directo de rescate para el acceso automático</translation>
 <translation id="3214164532079860003">Esta política, si se habilita, fuerza la importación de la página principal del navegador predeterminado actual. Si la política se inhabilita, la página principal no se importará. Si no se configura esta opción, se le puede preguntar al usuario si desea importar la página principal o la importación puede realizarse de forma automática.</translation>
 <translation id="5330684698007383292">Permitir que <ph name="PRODUCT_FRAME_NAME"/> gestione los siguientes tipos de contenido</translation>
+<translation id="6647965994887675196">Si está configurada en verdadero, pueden crearse y utilizarse usuarios supervisados.
+
+          Si está configurada en falso o si no está configurada, la creación y el acceso de usuarios supervisados estarán inhabilitados. Todos los usuarios supervisados existentes estarán ocultos.
+
+          NOTA: El comportamiento predeterminado en dispositivos para consumidores y empresas difiere: en los dispositivos para consumidores, los usuarios supervisados están habilitados de forma predeterminada; en cambio, en los dispositivos para empresas, los usuarios supervisados están inhabilitados de forma predeterminada.</translation>
 <translation id="5469825884154817306">Bloquear imágenes en estos sitios</translation>
 <translation id="8412312801707973447">Se realizan comprobaciones OCSP/CRL si estás conectado.</translation>
 <translation id="6649397154027560979">Esta política dejó de estar disponible. Utiliza URLBlacklist en su lugar.
@@ -884,6 +889,7 @@
 
           Si no se establece esta política, el modo de contraste alto se inhabilitará la primera vez que se muestre la pantalla de acceso. Los usuarios pueden habilitar o inhabilitar el modo de contraste alto en cualquier momento, y su estado en la pantalla de acceso permanece entre usuarios.</translation>
 <translation id="8580857153747395000">Advertir cuando se visitan sitios fuera de los paquetes de contenido</translation>
+<translation id="350796261613621561">Habilita la creación de usuarios supervisados.</translation>
 <translation id="602728333950205286">URL instantánea del proveedor de búsqueda predeterminado</translation>
 <translation id="3030000825273123558">Activar los informes estadísticos</translation>
 <translation id="6559057113164934677">No permitir que ningún sitio acceda a la cámara ni al micrófono</translation>
@@ -901,6 +907,9 @@
 <translation id="8864975621965365890">Elimina el mensaje de desactivación que aparece cuando <ph name="PRODUCT_FRAME_NAME"/> muestra un sitio.</translation>
 <translation id="3264793472749429012">Codificación del proveedor de búsqueda predeterminado</translation>
 <translation id="285480231336205327">Habilitar el modo de contraste alto</translation>
+<translation id="5366977351895725771">Si está configurada en falso, la creación de usuarios supervisados por este usuario estará inhabilitada. Los usuarios supervisados existentes seguirán estando disponibles.
+
+          Si está configurada en verdadero o si no está configurada, este usuario podrá crear y administrar usuarios supervisados.</translation>
 <translation id="8101760444435022591">Teniendo en cuenta que las comprobaciones de revocación en línea de fallos leves no proporcionan ventajas de seguridad efectivas, se desactivan de forma predeterminada en la versión 19 y posteriores de <ph name="PRODUCT_NAME"/>. Al establecer el valor de esta política en &quot;true&quot;, se restaura el comportamiento anterior y se realizan comprobaciones OCSP/CRL en línea.
 
       Si no se establece esta política, o si se establece el valor &quot;false&quot;, Chrome no realizará comprobaciones de revocación en línea en Chrome 19 y versiones posteriores.</translation>
diff --git a/chrome/app/policy/policy_templates_es.xtb b/chrome/app/policy/policy_templates_es.xtb
index beac3b7..7bcd6cd 100644
--- a/chrome/app/policy/policy_templates_es.xtb
+++ b/chrome/app/policy/policy_templates_es.xtb
@@ -87,6 +87,11 @@
 
       Si no se establece, es posible que se le pida al usuario que haga la importación o que la página de inicio se importe automáticamente.</translation>
 <translation id="5330684698007383292">Permitir que <ph name="PRODUCT_FRAME_NAME"/> procese los tipos de contenido que se indican a continuación</translation>
+<translation id="6647965994887675196">Si se establece el valor &quot;true&quot;, se permitirá la creación y el uso de usuarios supervisados.
+
+          Si se establece el valor &quot;false&quot; o no se configura la política, se inhabilitarán el inicio de sesión y la creación de usuarios supervisados y se ocultarán todos los usuarios supervisados creados anteriormente.
+
+          NOTA: El comportamiento predeterminado es diferente según el dispositivo: en los dispositivos de clientes particulares, los usuarios supervisados están habilitados de forma predeterminada, mientras que en los dispositivos de empresa, están inhabilitados de forma predeterminada.</translation>
 <translation id="5469825884154817306">Bloquear imágenes de estos sitios</translation>
 <translation id="8412312801707973447">Se realizan comprobaciones OCSP/CRL si estás online</translation>
 <translation id="6649397154027560979">Esta política está obsoleta, utiliza URLBlacklist en su lugar.
@@ -1131,6 +1136,7 @@
 
           Si no se establece esta política, el modo de contraste alto se inhabilitará la primera vez que se muestre la pantalla de inicio de sesión. Los usuarios pueden habilitar o inhabilitar el modo de contraste alto en cualquier momento, y su estado en la pantalla de inicio de sesión permanece entre usuarios.</translation>
 <translation id="8580857153747395000">Advertir cuando se visitan sitios no incluidos en paquetes de contenido.</translation>
+<translation id="350796261613621561">Habilitar la creación de usuarios supervisados</translation>
 <translation id="602728333950205286">URL de función Instant del proveedor de búsquedas predeterminadas</translation>
 <translation id="3030000825273123558">Habilitar los informes estadísticos</translation>
 <translation id="6559057113164934677">No permitir que ningún sitio acceda a la cámara y al micrófono</translation>
@@ -1156,6 +1162,9 @@
 <translation id="8864975621965365890">Elimina el mensaje de desactivación que aparece cuando <ph name="PRODUCT_FRAME_NAME"/> muestra un sitio.</translation>
 <translation id="3264793472749429012">Codificaciones del proveedor de búsquedas predeterminadas</translation>
 <translation id="285480231336205327">Habilitar modo de contraste alto</translation>
+<translation id="5366977351895725771">Si se establece el valor &quot;false&quot;, el usuario no podrá crear usuarios supervisados, pero seguirán estando disponibles los usuarios supervisados creados anteriormente.
+
+          Si se establece el valor &quot;true&quot; o no se configura la política, el usuario podrá crear y administrar usuarios supervisados.</translation>
 <translation id="8101760444435022591">Teniendo en cuenta el hecho de que las comprobaciones de revocación online de fallos leves no proporcionan ventajas de seguridad efectivas, se inhabilitan de forma predeterminada en la versión 19 y posteriores de <ph name="PRODUCT_NAME"/>. Al establecer el valor correspondiente a esta política en &quot;true&quot;, se restaura el comportamiento anterior y se realizan comprobaciones OCSP/CRL online.
 
       Si no se establece esta política, o si se establece el valor &quot;false&quot;, Chrome no realizará comprobaciones de revocación online en Chrome 19 y versiones posteriores.</translation>
diff --git a/chrome/app/policy/policy_templates_et.xtb b/chrome/app/policy/policy_templates_et.xtb
index a1f8568..c08257e 100644
--- a/chrome/app/policy/policy_templates_et.xtb
+++ b/chrome/app/policy/policy_templates_et.xtb
@@ -82,6 +82,11 @@
 <translation id="3816312845600780067">Pääsu klaviatuuri otsetee lubamine automaatseks sisselogimiseks</translation>
 <translation id="3214164532079860003">Kui see reegel on lubatud, siis imporditakse avaleht praegusest vaikebrauserist. Kui reegel on keelatud, siis avalehte ei impordita. Kui reegel ei ole määratud, siis võidakse avaleht automaatselt importida või kasutajalt küsida, kas ta soovib selle importida.</translation>
 <translation id="5330684698007383292">Pistikprogrammil <ph name="PRODUCT_FRAME_NAME"/> järgmiste sisutüüpide töötlemise lubamine</translation>
+<translation id="6647965994887675196">Kui väärtuseks on seatud valik Tõene, saab luua ja kasutada järelevalvega kasutajaid.
+
+          Kui väärtuseks on seatud valik Väär või Seadistamata, siis on järelevalvega kasutajate loomine ja sisselogimine keelatud. Kõik olemasolevad järelevalvega kasutajad peidetakse.
+
+          MÄRKUS. Tavatarbijatele ja ettevõtetele mõeldud seadmete vaikekäitumine on erinev: tarbijate seadmetes on järelevalvega kasutajad vaikimisi lubatud, kuid ettevõtete seadmetes vaikimisi keelatud.</translation>
 <translation id="5469825884154817306">Blokeeri kujutised nendel saitidel</translation>
 <translation id="8412312801707973447">Kontrolli võrgus OCSP-d/CRL-i</translation>
 <translation id="6649397154027560979">Selle reegli tugi on katkestatud, kasutage selle asemel üksust URLBlacklist.
@@ -1101,6 +1106,7 @@
 
          Kui jätate reegli määramata, on suure kontrastsusega režiim algselt keelatud. Kasutaja võib suure kontrastsusega režiimi igal ajal lubada või keelata ja selle olek jääb sisselogimisekraanil kasutajati püsivaks.</translation>
 <translation id="8580857153747395000">Hoiata sisupakettidest väljaspool olevate saitide külastamisel.</translation>
+<translation id="350796261613621561">Järelevalvega kasutajate loomise lubamine.</translation>
 <translation id="602728333950205286">Vaikeotsingupakkuja Instant-URL</translation>
 <translation id="3030000825273123558">Luba mõõdikute aruandlus</translation>
 <translation id="6559057113164934677">Keela kõikidel saitidel juurdepääs kaamerale ja mikrofonile</translation>
@@ -1126,6 +1132,9 @@
 <translation id="8864975621965365890">Keelab tagasilükkamisviiba, mis kuvatakse, kui saiti renderdab <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Vaikeotsingupakkuja kodeeringud</translation>
 <translation id="285480231336205327">Luba kõrge kontrastiga režiim</translation>
+<translation id="5366977351895725771">Kui väärtuseks on seatud valik Väär, siis keelatakse sellel kasutajal järelevalvega kasutajate loomine. Kõik olemasolevad järelevalvega kasutajad on ikka saadaval.
+
+          Kui väärtuseks on seatud valik Tõene või Seadistamata, saab see kasutaja luua ja hallata järelevalvega kasutajaid.</translation>
 <translation id="8101760444435022591">Osalise nurjumise puhul ei suurenda tagasivõtmise kontrollimine turvalisust, mistõttu on kontrollimine vaikimisi rakenduse <ph name="PRODUCT_NAME"/> 19. ja hilisemates versioonides vaikimisi keelatud. Selle reegli lubamisel taastatakse varasem käitumine ja võrgus ei kontrollita OCSP-d/CRL-i.
 
       Kui jätate selle reegli määramata või keelate selle, siis ei kontrolli Chrome 19. ja hilisemates versioonides võrgus tagasivõtmist.</translation>
diff --git a/chrome/app/policy/policy_templates_fa.xtb b/chrome/app/policy/policy_templates_fa.xtb
index 46771ff..7f65b53 100644
--- a/chrome/app/policy/policy_templates_fa.xtb
+++ b/chrome/app/policy/policy_templates_fa.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">به کار انداختن میانبر آزاد صفحه‌کلید برای ورود خودکار به سیستم</translation>
 <translation id="3214164532079860003">این قانون در صورت فعال بودن، صفحهٔ اصلی را وادار می‌کند تا از مرورگر پیش‌فرض کنونی وارد شود. در صورت غیرفعال بودن، صفحهٔ اصلی دریافت نمی‌شود. اگر تنظیم نشود، ممکن است از کاربر در مورد وارد کردن سؤال شود یا به طور خودکار وارد شود.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/> بتواند با انواع محتوای زیر کار کند</translation>
+<translation id="6647965994887675196">اگر روی صحیح تنظیم شده باشد، امکان ایجاد کاربر نظارت‌شده و استفاده از آن وجود دارد.
+
+       اگر روی غلط تنظیم شده باشد یا پیکربندی نشده باشد، ایجاد کاربر نظارت‌شده و ورود به سیستم آن از کار می‌افتد. تمام کاربران نظارت‌شده موجود مخفی خواهند شد.
+
+      نکته: رفتار پیش‌فرض دستگاه‌های مصرف‌کننده و دستگاه‌های سازمانی فرق می‌کند: در دستگاه‌های مصرف‌کننده کاربران نظارت‌شده به طور پیش‌فرض به کار انداخته می‌شوند اما در دستگاه‌های سازمانی به طور پیش‌فرض از کار انداخته می‌شوند.</translation>
 <translation id="5469825884154817306">مسدود کردن تصاویر در این سایت‌ها</translation>
 <translation id="8412312801707973447">آیا بررسی‌های OCSP/CRL آنلاین اجرا شود</translation>
 <translation id="6649397154027560979">این خط‌مشی منسوخ شده است، لطفاً به جای آن از فهرست سیاه نشانی اینترنتی استفاده کنید.
@@ -883,6 +888,7 @@
 
    چنانچه این خط‌مشی بدون تنظیم رها شده باشد، با نمایش صفحه ورود به سیستم، حالت کنتراست بالا از کار انداخته می‌شود. کاربران می‌توانند در هر زمان که بخواهند حالت کنتراست بالا را به کار انداخته یا از کار بیاندازند و این وضعیت در صفحه ورود به سیستم در بین کاربران دائمی خواهد بود.</translation>
 <translation id="8580857153747395000">اخطار در هنگام بازدید از سایت‌های خارج از بسته محتوا.</translation>
+<translation id="350796261613621561">ایجاد کاربران نظارت‌شده را به کار بیاندازید.</translation>
 <translation id="602728333950205286">URL جستجوی آنی برای ارائه دهنده جستجوی پیش‌فرض</translation>
 <translation id="3030000825273123558">گزارش معیارها فعال شود</translation>
 <translation id="6559057113164934677">به هر سایتی اجازه داده نشود به دوربین و میکروفون من دسترسی داشته باشد</translation>
@@ -900,6 +906,9 @@
 <translation id="8864975621965365890">درخواست برگرداندن را که هنگام اجرای سایت توسط <ph name="PRODUCT_FRAME_NAME"/> تولید می‌شود، متوقف می‌کند.</translation>
 <translation id="3264793472749429012">رمزگذاری های ارائه دهنده جستجوی پیش‌فرض</translation>
 <translation id="285480231336205327">فعال کردن حالت کنتراست بالا</translation>
+<translation id="5366977351895725771">اگر روی غلط تنظیم شده باشد، ایجاد کاربر نظارت‌شده توسط این کاربر از کار خواهد افتاد. کاربران نظارت‌شدهٔ موجود همچنان در دسترس خواهند بود.
+
+          اگر روی صحیح تنظیم شده باشد یا پیکربندی نشده باشد، این کاربر می‌تواند کاربران نظارت‌شده ایجاد کند و مدیریت نماید.</translation>
 <translation id="8101760444435022591">نظر به اینکه بررسی‌های لغو آنلاین، خرابی تدریجی هیچ مزیت امنیتی مؤثری را در بر ندارد، این ویژگی‌ها به صورت پیش‌فرض در نسخه 9 <ph name="PRODUCT_NAME"/> و بالاتر غیرفعال شدند. با تنظیم این خط مشی روی درست، رفتار قبلی بازیابی می‌شود و بررسی‌های OCSP/CRL آنلاین اجرا می‌شود.
 
      در صورتی که خط مشی تنظیم نشود، یا روی نادرست تنظیم شود، Chrome بررسی‌های لغو آنلاین را در Chrome 19 یا بالاتر انجام نمی‌دهد.
diff --git a/chrome/app/policy/policy_templates_fi.xtb b/chrome/app/policy/policy_templates_fi.xtb
index 5c0fbf1..0c5dd09 100644
--- a/chrome/app/policy/policy_templates_fi.xtb
+++ b/chrome/app/policy/policy_templates_fi.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Salli automaattisen kirjautumisen peruutusnäppäin</translation>
 <translation id="3214164532079860003">Tämä käytäntö (sen ollessa käytössä) pakottaa etusivun tuomisen nykyisestä oletusselaimesta. Jos käytäntö ei ole käytössä, etusivua ei tuoda. Jos käytäntöä ei ole määritetty, käyttäjältä voidaan kysyä, haluaako hän tuoda etusivun, tai sivu voidaan tuoda automaattisesti.</translation>
 <translation id="5330684698007383292">Anna tuotteen <ph name="PRODUCT_FRAME_NAME"/> käsitellä seuraavia sisältötyyppejä</translation>
+<translation id="6647965994887675196">Jos asetuksen arvo on tosi, valvottuja käyttäjiä voi luoda ja käyttää.
+
+          Jos asetuksen arvo on epätosi tai sitä ei ole määritetty, valvottujen käyttäjien luominen ja kirjautuminen ei ole käytössä. Kaikki olemassa olevat valvotut käyttäjät piilotetaan.
+
+          HUOMAA: kuluttajien ja yrityskäyttöön tarkoitettujen laitteiden oletuskäytös eroaa toisistaan: kuluttajien laitteilla valvotut käyttäjät ovat käytössä oletuksena, kun taas yrityslaitteilla ne ovat oletuksena pois käytöstä.</translation>
 <translation id="5469825884154817306">Estä kuvat näissä sivustoissa</translation>
 <translation id="8412312801707973447">OCSP-/CRL-tarkistusten suorittaminen</translation>
 <translation id="6649397154027560979">Tämä käytäntö ei ole enää käytössä, käytä URLBlacklist-käytäntöä sen sijaan.
@@ -884,6 +889,7 @@
 
           Jos tätä käytäntöä ei määritetä, suuri kontrasti -tila ei ole käytössä kirjautumisnäytön ensimmäisellä näyttökerralla. Käyttäjät voivat ottaa suuri kontrasti -tilan käyttöön tai pois käytöstä milloin tahansa, ja sen tila kirjautumisnäytössä pysyy samana, vaikka käyttäjä vaihtuisi.</translation>
 <translation id="8580857153747395000">Varoita, kun sisältöpaketteihin kuulumaton sivusto avataan.</translation>
+<translation id="350796261613621561">Ota valvottujen käyttäjien luominen käyttöön.</translation>
 <translation id="602728333950205286">Oletushakupalvelun Instant-URL-osoite</translation>
 <translation id="3030000825273123558">Ota tilastoraportit käyttöön</translation>
 <translation id="6559057113164934677">Älä anna minkään sivuston käyttää kameraa ja mikrofonia</translation>
@@ -901,6 +907,9 @@
 <translation id="8864975621965365890">Torjuu hylkäyskehotuksen, joka tulee näkyviin, kun sivu on hahmonnettu tuotteella <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Oletushakupalvelun merkkijärjestelmät</translation>
 <translation id="285480231336205327">Ota suuri kontrasti -tila käyttöön</translation>
+<translation id="5366977351895725771">Jos asetuksen arvo on epätosi, tämä käyttäjä ei voi luoda valvottuja käyttäjiä. Kaikki aiemmin luodut valvotut käyttäjät ovat kuitenkin käytettävissä.
+
+          Jos asetuksen arvo on tosi tai sitä ei ole määritetty, tämä käyttäjä voi luoda ja hallinnoida valvottuja käyttäjiä.</translation>
 <translation id="8101760444435022591">OCSP- ja CRL-tarkistukset eivät tarjoa merkittävää suojaushyötyä, joten ne ovat oletuksena poissa käytöstä tuotteen <ph name="PRODUCT_NAME"/> versiosta 19 lähtien. Jos tälle käytännölle asetetaan tosi-arvo, aikaisempi toiminnallisuus palautetaan ja OCSP- ja CRL-tarkistukset suoritetaan.
 
       Jos tätä käytäntöä ei aseteta tai jos sille asetetaan epätosi-arvo, Chromen versiossa 19 ja myöhemmissä ei suoriteta näitä tarkistuksia.</translation>
diff --git a/chrome/app/policy/policy_templates_fil.xtb b/chrome/app/policy/policy_templates_fil.xtb
index 75210d8..0330dfc 100644
--- a/chrome/app/policy/policy_templates_fil.xtb
+++ b/chrome/app/policy/policy_templates_fil.xtb
@@ -86,6 +86,11 @@
 
       Kung hindi ito nakatakda, maaaring tanungin sa user kung mag-i-import o hindi, o maaaring awtomatikong mangyari ang pag-import.</translation>
 <translation id="5330684698007383292">Payagan ang <ph name="PRODUCT_FRAME_NAME"/> na pangasiwaan ang mga sumusunod na uri ng nilalaman</translation>
+<translation id="6647965994887675196">Kung nakatakda sa true, maaaring gumawa at gumamit ng mga pinapangasiwaang user.
+
+          Kung nakatakda sa false o hindi naka-configure, idi-disable ang paggawa at pag-log in ng pinapangasiwaang user. Itatago ang lahat ng umiiral na pinapangasiwaang user.
+
+          TANDAAN: Magkaiba ang default na pagkilos ng mga device ng consumer at enterprise device: sa mga device ng consumer, naka-enable ang mga pinapangasiwaang user bilang default, ngunit sa mga enterprise device, naka-disable sila bilang default.</translation>
 <translation id="5469825884154817306">I-block ang mga larawan sa mga site na ito</translation>
 <translation id="8412312801707973447">Kung isinasagawa ang mga online na pagsusuri sa OCSP/CRL</translation>
 <translation id="6649397154027560979">Hindi na ginagamit ang patakarang ito, sa halip mangyaring gamitin ang URLBlacklist.
@@ -1111,6 +1116,7 @@
 
           Kung hahayaang hindi nakatakda ang patakarang ito, naka-disable ang high contrast mode kapag unang ipinakita ang screen sa pag-login. Maaaring i-enable o i-disable ng mga user ang high contrast mode anumang oras at mananatili ang katayuan nito sa screen sa pag-login sa pagitan ng mga user.</translation>
 <translation id="8580857153747395000">Magbabala kapag bumibisita sa mga site sa labas ng mga pack ng nilalaman.</translation>
+<translation id="350796261613621561">I-enable ang paggawa ng mga pinapangasiwaang user.</translation>
 <translation id="602728333950205286">Instant na URL ng default na provider ng paghahanap</translation>
 <translation id="3030000825273123558">Paganahin ang pag-uulat ng mga sukatan</translation>
 <translation id="6559057113164934677">Huwag payagan ang anumang site na i-access ang camera at mikropono</translation>
@@ -1136,6 +1142,9 @@
 <translation id="8864975621965365890">Pinipigilan ang turndown na prompt na lumilitaw kapag na-render ang isang site ng <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Mga pag-encode ng default na provider ng paghahanap</translation>
 <translation id="285480231336205327">Paganahin ang mataas na contrast mode</translation>
+<translation id="5366977351895725771">Kung nakatakda sa false, idi-disable ang paggawa ng pinapangasiwaang user para sa user na ito. Magiging available pa rin ang sinumang mga umiiral na pinapangasiwaang user.
+
+          Kung nakatakda sa true o hindi naka-configure, maaaring gumawa at mamahala ng mga pinapangasiwaang user ang user na ito.</translation>
 <translation id="8101760444435022591">Dahil walang mabisang pakinabang sa seguridad ang hindi pa pinal at mga pagsusuri sa pagbawi sa online, hindi pinapagana ang mga iyon bilang default sa  bersyon 19 at mas bago ng <ph name="PRODUCT_NAME"/>. Sa pamamagitan ng pagtatakda sa patakarang ito sa true, ipapanumbalik ang nakaraang paggalaw at isasagawa ang mga online na pagsusuri ng OCSP/CRL.
 
       Kung hindi nakatakda ang patakarang ito, o kung nakatakda ito sa false, hindi magsasagawa ng mga pagsusuri sa pagbawi sa online ang Chrome sa Chrome 19 at mas mabago.</translation>
diff --git a/chrome/app/policy/policy_templates_fr.xtb b/chrome/app/policy/policy_templates_fr.xtb
index f4e02f6..73a610b 100644
--- a/chrome/app/policy/policy_templates_fr.xtb
+++ b/chrome/app/policy/policy_templates_fr.xtb
@@ -90,6 +90,11 @@
 
 Si elle n'est pas configurée, l'utilisateur peut être invité à effectuer l'importation, ou celle-ci peut se faire automatiquement.</translation>
 <translation id="5330684698007383292">Autoriser <ph name="PRODUCT_FRAME_NAME"/> à gérer les types de contenu suivants</translation>
+<translation id="6647965994887675196">Si cette règle est associée à la valeur &quot;true&quot;, vous pouvez créer et utiliser des comptes utilisateur supervisés.
+
+          Si elle est associée à la valeur &quot;false&quot; ou si elle n'est pas configurée, la création et la connexion des comptes utilisateur supervisés sont désactivées. Tous les utilisateurs supervisés existants sont alors masqués.
+
+          REMARQUE : Le comportement par défaut des appareils grand public diffère de celui des appareils professionnels : sur les appareils grand public, les comptes utilisateur supervisés sont autorisés par défaut, contrairement aux appareils professionnels.</translation>
 <translation id="5469825884154817306">Bloquer les images sur ces sites</translation>
 <translation id="8412312801707973447">Si des contrôles OCSP/CRL en ligne sont effectués</translation>
 <translation id="6649397154027560979">Cette règle a été abandonnée. Veuillez utiliser URLBlacklist à la place.
@@ -1123,6 +1128,7 @@
 
           Si vous ne définissez pas cette règle, le mode Contraste élevé est désactivé au premier affichage de l'écran de connexion. Les utilisateurs peuvent l'activer ou le désactiver à tout moment, et son état sur l'écran de connexion est appliqué à tous les utilisateurs.</translation>
 <translation id="8580857153747395000">Prévenir lors de la consultation de sites en dehors des packs de contenu</translation>
+<translation id="350796261613621561">Autoriser la création de comptes utilisateur supervisés</translation>
 <translation id="602728333950205286">URL de recherche instantanée du moteur de recherche par défaut</translation>
 <translation id="3030000825273123558">Activer la génération de rapports sur les statistiques</translation>
 <translation id="6559057113164934677">Interdire à tous les sites d'accéder à la caméra et au microphone</translation>
@@ -1148,6 +1154,9 @@
 <translation id="8864975621965365890">Supprime l'invite de fermeture qui s'affiche lors du rendu d'un site par <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Codages du moteur de recherche par défaut</translation>
 <translation id="285480231336205327">Activer le mode Contraste élevé</translation>
+<translation id="5366977351895725771">Si cette règle est associée à la valeur &quot;false&quot;, la création de comptes utilisateur supervisés par cet utilisateur est désactivée. Les utilisateurs supervisés existants restent disponibles.
+
+          Si elle est associée à la valeur &quot;true&quot; ou si elle n'est pas configurée, cet utilisateur peut créer et gérer des comptes utilisateur supervisés.</translation>
 <translation id="8101760444435022591">Étant donné que les contrôles de révocation en ligne, parfois sujets à erreur, ne présentent aucun avantage concret en termes de sécurité, ils sont désactivés par défaut dans les versions 19 et ultérieures de <ph name="PRODUCT_NAME"/>. L'activation de cette règle restaure le comportement précédent. Des contrôles OCSP/CRL sont alors effectués.
 
        Si cette règle n'est pas définie ou si elle est définie sur &quot;false&quot;, Google Chrome n'effectue aucun contrôle de révocation en ligne dans les versions 19 et ultérieures.</translation>
diff --git a/chrome/app/policy/policy_templates_gu.xtb b/chrome/app/policy/policy_templates_gu.xtb
index 2b9874b..e7b6097 100644
--- a/chrome/app/policy/policy_templates_gu.xtb
+++ b/chrome/app/policy/policy_templates_gu.xtb
@@ -89,6 +89,11 @@
 
       જો તે સેટ કરેલું ન હોય, તો વપરાશકર્તાને આયાત કરવું કે નહીં તે પૂછવામાં આવશે અથવા આયાત કરવું આપમેળે થઈ શકે છે.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/> ને નીચે આપેલા સામગ્રી પ્રકારોને હેન્ડલ કરવાની મંજૂરી આપો</translation>
+<translation id="6647965994887675196">જો ટ્રૂ પર સેટ હોય, તો નિરીક્ષણ કરેલ વપરાશકર્તાઓ બનાવી અને ઉપયોગ કરી શકાય છે.
+
+          જો ફોલ્સ પર સેટ છે અથવા ગોઠવેલું નથી , તો નિરીક્ષણ કરેલ વપરાશકર્તા નિર્માણ અને લોગિન અક્ષમ કરવામાં આવશે. અસ્તિત્વમાં છે તે બધા નિરીક્ષણ કરેલા વપરાશકર્તાઓને છુપાવવામાં આવશે.
+
+          નોંધ: ઉપભોક્તા અને ઉદ્યોગના ઉપકરણો માટે ડિફોલ્ટ વર્તણૂક ભિન્ન હોય છે: ઉપભોક્તાના ઉપકરણો પર નિરીક્ષણ કરેલા વપરાશકર્તાઓ ડિફોલ્ટ રૂપે સક્ષમ હોય છે પરંતુ ઉદ્યોગના ઉપકરણો પર તે ડિફોલ્ટ રૂપે અક્ષમ હોય છે.</translation>
 <translation id="5469825884154817306">આ સાઇટ્સ પર છબીઓને અવરોધિત કરો</translation>
 <translation id="8412312801707973447">પછી ભલે ઑનલાઇન OCSP/CRL ચેક્સ કરવામાં આવ્યા હોય</translation>
 <translation id="6649397154027560979">આ નીતિ ટાળવામાં આવી છે, કૃપા કરીને તેને બદલે URLBlacklist નો ઉપયોગ કરો.
@@ -1108,6 +1113,7 @@
 
           જો આ નીતિને સેટ કર્યા વિના છોડેલી હોય, તો લોગિન સ્ક્રીન પહેલી વખત બતાવવામાં આવે ત્યારે ઉચ્ચ કોન્ટ્રાસ્ટ મોડ અક્ષમ હોય છે. વપરાશકર્તાઓ કોઈપણ સમયે ઉચ્ચ કોન્ટ્રાસ્ટ મોડને સક્ષમ અથવા અક્ષમ કરી શકે છે અને લોગિન સ્ક્રીન પર તેની સ્થિતિ વપરાશકર્તાઓ વચ્ચે નિરંતર હોય છે.</translation>
 <translation id="8580857153747395000">સામગ્રી પૅક્સ બહાર જ્યારે સાઇટ્સની મુલાકાત લઈ રહ્યાં હોય ત્યારે ચેતવો.</translation>
+<translation id="350796261613621561">નિરીક્ષણ કરેલ વપરાશકર્તાઓના નિર્માણને સક્ષમ કરો.</translation>
 <translation id="602728333950205286">ડિફોલ્ટ શોધ પ્રદાતા ત્વરિત URL</translation>
 <translation id="3030000825273123558">મેટ્રિક્સ રિપોર્ટિંગને સક્ષમ કરે છે</translation>
 <translation id="6559057113164934677">કોઈપણ સાઇટને કૅમેરા અથવા માઇક્રોફોનને ઍક્સેસ કરવાની મંજૂરી આપશો નહીં</translation>
@@ -1133,6 +1139,9 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME"/> દ્વારા કોઈ સાઇટ રેન્ડર કરવામાં આવે ત્યારે દેખાતા ટર્નડાઉન સંકેતને નાબૂદ કરે છે.</translation>
 <translation id="3264793472749429012">ડિફૉલ્ટ શોધ પ્રદાતા એન્કોડિંગ્સ</translation>
 <translation id="285480231336205327">હાઇ કોન્ટ્રાસ મોડને સક્ષમ કરો</translation>
+<translation id="5366977351895725771">જો ફોલ્સ પર સેટ છે, તો આ વપરાશકર્તા દ્વારા નિરીક્ષણ કરેલ વપરાશકર્તા નિર્માણ કરવામાં આવશે. અસ્તિત્વમાં છે તે કોઈ પણ નિરીક્ષણ કરેલા વપરાશકર્તાઓ હજી પણ ઉપલબ્ધ રહેશે.
+
+          જો ટ્રૂ પર સેટ છે અથવા ગોઠવેલું નથી , તો આ વપરાશકર્તા દ્વારા નિરીક્ષણ કરેલ વપરાશકર્તાઓ બનાવી અને સંચાલિત કરી શકાય છે.</translation>
 <translation id="8101760444435022591">હકીકતમાં થોડું નિષ્ફળ છે, ઑનલાઇન રદબાતલ ચેક્સ પ્રભાવી સુરક્ષા લાભ પ્રદાન કરતું નથી, તે <ph name="PRODUCT_NAME"/> vસંસ્કરણ 19 અને પછીનાં સંસ્કરણમાં ડિફોલ્ટ રૂપે અક્ષમ છે. આ નીતિ true પર સેટ કરીને, પાછલી વર્તણૂકને પુનઃસ્થાપિત કરી શકાય છે અને ઑનલાઇન OCSP/CRL ચેક્સ કરવામાં આવે છે.
 
       જો આ નીતિને સેટ કરેલી નથી અથવા false પર સેટ કરેલી છે, તો Chrome દ્વારા Chrome 19 અને પછીના સંસ્કરણમાં ઑનલાઇન રદબાતલ ચેક્સ કરવામાં આવશે.</translation>
diff --git a/chrome/app/policy/policy_templates_hi.xtb b/chrome/app/policy/policy_templates_hi.xtb
index 277a19d..d5b62b4 100644
--- a/chrome/app/policy/policy_templates_hi.xtb
+++ b/chrome/app/policy/policy_templates_hi.xtb
@@ -79,6 +79,11 @@
 
       यदि उसे सेट न किया गया हो, तो उपयोगकर्ता से आयात करने के लिए पूछा जा सकता है, या आयात स्‍वचालित रूप से हो सकता है.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/> को सामग्री के निम्‍न प्रकारों को प्रबंधित करने दें</translation>
+<translation id="6647965994887675196">यदि सही पर सेट है, तो पर्यवेक्षित उपयोगकर्ता बनाए और उपयोग किए जा सकते हैं.
+
+          यदि गलत पर सेट है या कॉन्फ़िगर नहीं है, तो पर्यवेक्षित-उपयोगकर्ता बनाया जाना और लॉगिन अक्षम हो जाएंगे. सभी मौजूदा पर्यवेक्षित उपयोगकर्ता छिपा दिए जाएंगे.
+
+          ध्यान दें: ग्राहक और एंटरप्राइज़ उपकरणों के डिफ़ॉल्ट व्यवहार में अंतर होता है: ग्राहक उपकरणों पर पर्यवेक्षित उपयोगकर्ता डिफ़ॉल्ट रूप से सक्षम होते हैं, लेकिन एंटरप्राइज़ उपकरणों पर वे डिफ़ॉल्ट रूप से अक्षम होते हैं.</translation>
 <translation id="5469825884154817306">इन साइटों पर चित्र अवरुद्ध करें</translation>
 <translation id="8412312801707973447">क्‍या ऑनलाइन OCSP/CRL जांचें निष्‍पादित की जा रही हैं</translation>
 <translation id="6649397154027560979">यह नीति बहिष्कृत हो गई है, इसके बजाय कृपया URLBlacklist का उपयोग करें.
@@ -977,6 +982,7 @@
 
           यदि इस नीति को सेट किए बिना ही छोड़ दिया जाता है, तो पहली बार लॉगिन स्क्रीन दिखाई देने पर उच्च कंट्रास्ट मो़ड अक्षम किया जाता है. उपयोगकर्ता उच्च कंट्रास्ट मोड को कभी भी सक्षम या अक्षम कर सकते हैं और लॉगिन स्क्रीन पर उसकी स्थिति उपयोगकर्ताओं के बीच एक समान होती है.</translation>
 <translation id="8580857153747395000">सामग्री पैक से बाहर की साइटें विज़िट करने पर चेतावनी दें.</translation>
+<translation id="350796261613621561">पर्यवेक्षित उपयोगकर्ताओं का बनाया जाना सक्षम करती है.</translation>
 <translation id="602728333950205286">डिफ़ॉल्‍ट खोज प्रदाता झटपट URL</translation>
 <translation id="3030000825273123558">मीट्रिक रिपोर्ट करना सक्षम करें</translation>
 <translation id="6559057113164934677">किसी भी साइट को कैमरे और माइक्रोफ़ोन तक न पहुंचने दें</translation>
@@ -1002,6 +1008,9 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME"/> द्वारा किसी साइट को रेंडर किए जाने पर दिखाई देने वाले टर्नडाउन संकेत को छिपा देती है.</translation>
 <translation id="3264793472749429012">डिफ़ॉल्‍ट खोज प्रदाता एन्कोडिंग</translation>
 <translation id="285480231336205327">उच्च कंट्रास्ट मोड सक्षम करें</translation>
+<translation id="5366977351895725771">यदि गलत पर सेट है तो, इस उपयोगकर्ता द्वारा पर्यवेक्षित-उपयोगकर्ता का बनाया जाना अक्षम हो जाएगा. कोई भी मौजूदा पर्यवेक्षित उपयोगकर्ता अभी भी उपलब्ध रहेगा.
+
+          यदि सही पर सेट है तो, इस उपयोगकर्ता द्वारा पर्यवेक्षित उपयोगकर्ता बनाए जा सकेंगे और प्रबंधित किए जा सकेंगे.</translation>
 <translation id="8101760444435022591">इस तथ्‍य को ध्‍यान में रखते हुए कि सॉफ़्ट-फ़ेल, ऑनलाइन निरस्‍तीकरण जाचं कोई प्रभावी सुरक्षा लाभ नहीं प्रदान करती हैं, वे <ph name="PRODUCT_NAME"/> के 19 और बाद के संस्‍करणों में डिफ़ॉल्‍ट रूप में अक्षम होते हैं. इस नीति को सही पर सेट करके, पिछला व्यवहार पुनर्स्‍थापित किया जाता है और ऑनलाइन OCSP/CRL जांच निष्‍पादित की जाती है.
 
       यदि नीति सेट नहीं है या गलत पर सेट हैं, तो फिर Chrome,  Chrome 19 और इसके बाद वालों में ऑनलाइन निरस्‍तीकरण जांच नहीं करेगा.</translation>
diff --git a/chrome/app/policy/policy_templates_hr.xtb b/chrome/app/policy/policy_templates_hr.xtb
index 39148c9..05c4f9a 100644
--- a/chrome/app/policy/policy_templates_hr.xtb
+++ b/chrome/app/policy/policy_templates_hr.xtb
@@ -73,6 +73,11 @@
 <translation id="3816312845600780067">Omogući tipkovni prečac za izbjegavanje automatske prijave</translation>
 <translation id="3214164532079860003">Ako je omogućeno, ovo pravilo prisilno uvozi početnu stranicu iz trenutačno zadanog preglednika. Ako je onemogućeno, početna se stranica ne uvozi. Ako nije postavljeno, korisniku može biti postavljen upit želi li uvesti stranicu ili do uvoza može doći automatski.</translation>
 <translation id="5330684698007383292">Dopusti proizvodu <ph name="PRODUCT_FRAME_NAME"/> rukovanje sljedećim vrstama sadržaja</translation>
+<translation id="6647965994887675196">Ako je postavljeno na točno, mogu se izrađivati i upotrebljavati nadzirani korisnici.
+
+          Ako je postavljeno na netočno ili nije konfigurirano, izrada i prijava nadziranih korisnika bit će onemogućena. Svi postojeći nadzirani korisnici bit će skriveni.
+
+          NAPOMENA: zadano se ponašanje za potrošačke i poslovne uređaje razlikuje: na potrošačkim su uređajima nadzirani korisnici omogućeni prema zadanim postavkama, a na poslovnim su uređajima onemogućeni prema zadanim postavkama.</translation>
 <translation id="5469825884154817306">Blokiraj slike na ovim web-lokacijama</translation>
 <translation id="8412312801707973447">Izvršavaju li se mrežne provjere OCSP/CRL</translation>
 <translation id="6649397154027560979">Pravilo je obustavljeno, upotrijebite URLBlacklist.
@@ -888,6 +893,7 @@
 
           Ako se to pravilo ne postavi, način visokog kontrasta onemogućen je pri prvom prikazivanju zaslona za prijavu. Korisnici mogu omogućiti ili onemogućiti način visokog kontrasta u bilo kojem trenutku, a njegov status na zaslonu za prijavu zadržat će se i za sljedeće korisnike.</translation>
 <translation id="8580857153747395000">Upozori kada se posjećuju web-lokacije izvan paketa sadržaja.</translation>
+<translation id="350796261613621561">Omogući izradu nadziranih korisnika.</translation>
 <translation id="602728333950205286">Instant URL zadanog davatelja usluge pretraživanja</translation>
 <translation id="3030000825273123558">Omogući izvješće o metrici</translation>
 <translation id="6559057113164934677">Ne dopuštaj nijednoj web-lokaciji pristupanje kameri i mikrofonu</translation>
@@ -905,6 +911,9 @@
 <translation id="8864975621965365890">Zaustavlja upit za odbijanje koji se pojavljuje kada web-lokaciju generira <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Kodiranja zadanog davatelja usluge pretraživanja</translation>
 <translation id="285480231336205327">Omogućavanje načina visokog kontrasta</translation>
+<translation id="5366977351895725771">Ako je postavljeno na netočno, korisnik neće moći izrađivati nadzirane korisnike. Postojeći nadzirani korisnici i dalje će biti dostupni.
+
+          Ako je postavljeno na točno ili nije konfigurirano, korisnik može izrađivati nadzirane korisnike i upravljati njima.</translation>
 <translation id="8101760444435022591">Budući da &quot;soft-fail&quot;, mrežne provjere opoziva ne pružaju učinkovitu zaštitu sigurnosti, onemogućuju se prema zadanim postavkama na usluzi <ph name="PRODUCT_NAME"/> verzije 19 i novijih verzija. Postavljanjem tog pravila na vrijednost &quot;istinito&quot;, prethodno se ponašanje vraća i mrežne provjere OCSP/CRL bit će izvršene.
 
       Ako to pravilo nije postavljeno ili je postavljeno na vrijednost &quot;lažno&quot;, Chrome neće vršiti mrežne provjere opoziva u Chromeu 19 i novijim verzijama.</translation>
diff --git a/chrome/app/policy/policy_templates_hu.xtb b/chrome/app/policy/policy_templates_hu.xtb
index 1dffde9..45f73b7 100644
--- a/chrome/app/policy/policy_templates_hu.xtb
+++ b/chrome/app/policy/policy_templates_hu.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Kiváltó billentyűparancs engedélyezése az automatikus bejelentkezéshez</translation>
 <translation id="3214164532079860003">Ez a házirend -- ha engedélyezve van -- kikényszeríti a kezdőlap importálását az alapértelmezett böngészőből. Ha le van tiltva, akkor nem kerül sor a kezdőlap importálására. Ha nincs beállítva, akkor előfordulhat, hogy a rendszer a felhasználótól kérdezi meg, hogy megtörténjen-e az importálás, vagy hogy lehet-e automatikus az importálás.</translation>
 <translation id="5330684698007383292">A következő tartalomtípusok kezelésének engedélyezése a(z) <ph name="PRODUCT_FRAME_NAME"/> számára</translation>
+<translation id="6647965994887675196">Ha „igaz” értékre van állítva, megengedett a felügyelt felhasználók létrehozása és használata.
+
+          Ha „hamis” értékre van állítva, illetve nincs beállítva, a felügyelt felhasználók létrehozása és bejelentkezése nem lehetséges. Az összes meglévő felügyelt felhasználó rejtve lesz.
+
+          MEGJEGYZÉS: a fogyasztói és vállalati eszközök alapértelmezett működése eltérő. A fogyasztói eszközökön alapértelmezés szerint engedélyezettek a felügyelt felhasználók, míg a vállalati eszközökön le vannak tiltva.</translation>
 <translation id="5469825884154817306">Képek letiltása ezeken az webhelyeken</translation>
 <translation id="8412312801707973447">Végbemenjenek-e online OCSP-/CRL-ellenőrzések</translation>
 <translation id="6649397154027560979">Ez a házirend megszűnt. Kérjük, használja helyette az URLBlacklist házirendet.
@@ -884,6 +889,7 @@
 
           Ha nem állítja be ezt a házirendet, akkor a nagy kontrasztú mód le lesz tiltva a bejelentkezési képernyő első megjelenítésekor. A felhasználók bármikor engedélyezhetik vagy letilthatják a nagy kontrasztú módot, és annak állapota mindegyik felhasználó esetében megmarad a bejelentkezési képernyőn.</translation>
 <translation id="8580857153747395000">Figyelmeztetés tartalomcsomagokon kívüli webhelyek felkeresése esetén.</translation>
+<translation id="350796261613621561">Felügyelt felhasználók létrehozásának engedélyezése.</translation>
 <translation id="602728333950205286">Alapértelmezett keresési szolgáltató azonnali URL-je</translation>
 <translation id="3030000825273123558">Mutatók jelentéseinek engedélyezése</translation>
 <translation id="6559057113164934677">Ne engedje webhelyek hozzáférését a kamerához és mikrofonhoz</translation>
@@ -901,6 +907,9 @@
 <translation id="8864975621965365890">Elrejti a kikapcsolási figyelmeztetést, amely akkor jelenik meg, ha egy webhelyet a(z) <ph name="PRODUCT_FRAME_NAME"/> jeleníti meg.</translation>
 <translation id="3264793472749429012">Alapértelmezett keresési szolgáltató kódolásai</translation>
 <translation id="285480231336205327">Nagy kontrasztú mód engedélyezése</translation>
+<translation id="5366977351895725771">Ha „hamis” értékre van állítva, a felhasználó nem hozhat létre felügyelt felhasználókat. Az összes meglévő felügyelt felhasználó továbbra is elérhető lesz.
+
+          Ha „igaz” értékre van állítva, illetve nincs beállítva, a felhasználó létrehozhat és kezelhet felügyelt felhasználókat.</translation>
 <translation id="8101760444435022591">Figyelemmel arra, hogy a hibajavító mechanizmus szerint működő internetes visszavonási ellenőrzések nem nyújtanak megfelelő biztonságot, a(z) <ph name="PRODUCT_NAME"/> 19-es és további verzióiban alapértelmezés szerint ki vannak kapcsolva. A házirend igaz értékre állításával visszaállítódik a korábbi viselkedés, és a rendszer online módú OCSP/CRL-ellenőrzéseket végez.
 
       Ha a házirend nincs beállítva, vagy értéke hamis, akkor a Chrome nem végez online visszavonási ellenőrzéseket a Chrome 19-es és újabb verzióinál.</translation>
diff --git a/chrome/app/policy/policy_templates_id.xtb b/chrome/app/policy/policy_templates_id.xtb
index 38c3d61..ba6282a 100644
--- a/chrome/app/policy/policy_templates_id.xtb
+++ b/chrome/app/policy/policy_templates_id.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Aktifkan pintasan keyboard penyelamatan untuk masuk otomatis</translation>
 <translation id="3214164532079860003">Kebijakan ini memaksa beranda diimpor dari browser default yang sedang digunakan, jika diaktifkan. Jika dinonaktifkan, beranda tidak diimpor. Jika tidak disetel, pengguna mungkin akan ditanya apakah ingin mengimpor, atau pengimporan dapat terjadi secara otomatis.</translation>
 <translation id="5330684698007383292">Izinkan <ph name="PRODUCT_FRAME_NAME"/> menangani jenis konten berikut</translation>
+<translation id="6647965994887675196">Jika disetel ke true, pengguna yang diawasi dapat dibuat dan digunakan.
+
+          Jika disetel ke false atau tidak dikonfigurasi, pembuatan dan info masuk pengguna yang diawasi akan dinonaktifkan. Semua pengguna diawasi yang sudah ada akan tersembunyi.
+
+          CATATAN: Perilaku default untuk perangkat pelanggan dan perusahaan berbeda: pada perangkat pelanggan, pengguna yang diawasi diaktifkan secara default, namun pada perangkat perusahaan, pengguna yang diawasi dinonaktifkan secara default.</translation>
 <translation id="5469825884154817306">Cekal gambar pada situs ini</translation>
 <translation id="8412312801707973447">Apakah pemeriksaan OCSP/CRL online dilakukan atau tidak</translation>
 <translation id="6649397154027560979">Kebijakan ini tidak lagi digunakan, gunakan URLBlacklist sebagai gantinya.
@@ -884,6 +889,7 @@
 
           Jika kebijakan ini tidak disetel, mode kontras tinggi dinonaktifkan saat layar masuk ditampilkan untuk pertama kali. Pengguna dapat mengaktifkan atau menonaktifkan mode kontras tinggi kapan saja dan statusnya di layar masuk bersifat permanen antar pengguna.</translation>
 <translation id="8580857153747395000">Peringatkan saat mengunjungi situs di luar paket konten.</translation>
+<translation id="350796261613621561">Mengaktifkan pembuatan pengguna yang diawasi.</translation>
 <translation id="602728333950205286">URL sekejap penyedia penelusuran default</translation>
 <translation id="3030000825273123558">Aktifkan pelaporan metrik</translation>
 <translation id="6559057113164934677">Jangan izinkan situs apa pun mengakses kamera dan mikrofon</translation>
@@ -901,6 +907,9 @@
 <translation id="8864975621965365890">Menimpa permintaan penghentian yang muncul saat situs dirender oleh <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Penyandiaksaraan penyedia penelusuran default</translation>
 <translation id="285480231336205327">Aktifkan mode kontras tinggi</translation>
+<translation id="5366977351895725771">Jika disetel ke false, pembuatan pengguna yang diawasi oleh pengguna ini akan dinonaktifkan. Pengguna diawasi mana pun yang sudah ada akan tetap tersedia.
+
+          Jika disetel ke true atau tidak dikonfigurasi, pengguna yang diawasi dapat dibuat dan dikelola oleh pengguna ini.</translation>
 <translation id="8101760444435022591">Mengingat bahwa pemeriksaan pembatalan online, kegagalan-lunak tidak memberikan manfaat keamanan yang efektif, pemeriksaan tersebut dinonaktifkan secara default dalam <ph name="PRODUCT_NAME"/> versi 19 dan yang lebih baru. Dengan menyetel kebijakan ini ke true, perilaku sebelumnya dipulihkan dan akan dilakukan pemeriksaan OCSP/CRL online.
 
       Jika kebijakan tidak disetel, atau disetel ke false, maka Chrome tidak akan melakukan pemeriksaan pembatalan online dalam Chrome 19 dan yang lebih baru.</translation>
diff --git a/chrome/app/policy/policy_templates_it.xtb b/chrome/app/policy/policy_templates_it.xtb
index 05ae087..e6659a2 100644
--- a/chrome/app/policy/policy_templates_it.xtb
+++ b/chrome/app/policy/policy_templates_it.xtb
@@ -66,6 +66,11 @@
 <translation id="3816312845600780067">Attivazione scorciatoia da tastiera bailout per accesso automatico</translation>
 <translation id="3214164532079860003">Se è attiva, questa norma impone l'importazione della pagina iniziale dal browser predefinito corrente. Se non è attiva, la pagina iniziale non viene importata. Se non viene impostata, all'utente potrebbe essere chiesto se desidera effettuare l'importazione, oppure l'importazione potrebbe avvenire automaticamente.</translation>
 <translation id="5330684698007383292">Consenti a <ph name="PRODUCT_FRAME_NAME"/> di gestire i seguenti tipi di contenuti</translation>
+<translation id="6647965994887675196">Se questa norma è impostata su true, è possibile creare e utilizzare utenti controllati.
+
+          Se questa norma è impostata su false o non è configurata, la creazione di utenti controllati e il relativo accesso saranno disattivati. Tutti gli utenti controllati esistenti saranno nascosti.
+
+          NOTA. Il comportamento predefinito per dispositivi consumer ed enterprise è diverso: sui dispositivi consumer, gli utenti controllati sono abilitati per impostazione predefinita, mentre sui dispositivi enterprise sono disabilitati per impostazione predefinita.</translation>
 <translation id="5469825884154817306">Blocca immagini su questi siti</translation>
 <translation id="8412312801707973447">Esecuzione dei controlli OCSP/CRL online</translation>
 <translation id="6649397154027560979">Questa norma non è più supportata; utilizza la norma URLBlacklist.
@@ -874,6 +879,7 @@
 
 Se la norma non viene impostata, la modalità ad alto contrasto viene disattivata alla prima visualizzazione della schermata di accesso. Gli utenti possono attivare o disattivare la modalità ad alto contrasto in qualsiasi momento e il relativo stato nella schermata di accesso persiste per tutti gli utenti.</translation>
 <translation id="8580857153747395000">Avvisa quando vengono visitati siti non presenti nei pacchetti di contenuti.</translation>
+<translation id="350796261613621561">Attivazione della creazione di utenti controllati.</translation>
 <translation id="602728333950205286">URL di ricerca istantanea del provider di ricerca predefinito</translation>
 <translation id="3030000825273123558">Attiva rapporti sulle metriche</translation>
 <translation id="6559057113164934677">Non consentire ad alcun sito di accedere alla fotocamera e al microfono</translation>
@@ -891,6 +897,9 @@
 <translation id="8864975621965365890">Consente di eliminare il messaggio di richiesta di turndown che compare quando un sito viene visualizzato da <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Codifiche del provider di ricerca predefinito</translation>
 <translation id="285480231336205327">Attiva modalità ad alto contrasto</translation>
+<translation id="5366977351895725771">Se questa norma è impostata su false, la creazione di utenti controllati da parte di questo utente sarà disabilitata. Gli eventuali utenti controllati esistenti saranno comunque disponibili.
+
+          Se questa norma è impostata su true o non è configurata, questo utente può creare e gestire utenti controllati.</translation>
 <translation id="8101760444435022591">Alla luce del fatto che i controlli della revoca online soft-fail non offrono un effettivo vantaggio per la sicurezza, sono disattivati per impostazione predefinita nella versione 19 e versioni successive di <ph name="PRODUCT_NAME"/>. Se questa norma viene impostata su true, viene ripristinato il comportamento precedente e vengono effettuati i controlli OCSP/CRL online.
 
       Se la norma non viene impostata o viene impostata su false, Chrome non effettuerà i controlli della revoca online in Chrome 19 e versioni successive.</translation>
diff --git a/chrome/app/policy/policy_templates_iw.xtb b/chrome/app/policy/policy_templates_iw.xtb
index e2b04c5..93f7c1a 100644
--- a/chrome/app/policy/policy_templates_iw.xtb
+++ b/chrome/app/policy/policy_templates_iw.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">הפעל מקשי קיצור כחלופה להתחברות אוטומטית</translation>
 <translation id="3214164532079860003">מדיניות זו מאלצת לייבא את דף הבית מדפדפן ברירת המחדל הנוכחי אם היא מופעלת. אם היא מושבתת, דף הבית אינו מיובא. אם לא הוגדרה, ייתכן כי המערכת תשאל את המשתמש אם לייבא את דף הבית, או שהייבוא עשוי להתבצע באופן אוטומטי.</translation>
 <translation id="5330684698007383292">אפשר ל-<ph name="PRODUCT_FRAME_NAME"/> לטפל בסוגי התוכן הבאים.</translation>
+<translation id="6647965994887675196">אם תוגדר כ-true, ניתן יהיה ליצור משתמשים מבוקרים ולהשתמש בהם.
+
+          אם תוגדר כ-false, יצירת משתמשים מבוקרים תוגבל וההתחברות תושבת. כל המשתמשים המבוקרים האחרים יוסתרו.
+
+          שים לב: ההתנהגות המוגדרת כברירת מחדל עבור מכשירים של צרכנים ושל ארגונים שונה: במכשירים של צרכנים, משתמשים מבוקרים מופעלים כברירת מחדל, אבל במכשירים של ארגונים, הם מושבתים כברירת מחדל.</translation>
 <translation id="5469825884154817306">חסום תמונות באתרים אלה</translation>
 <translation id="8412312801707973447">האם מבוצעות בדיקות OCSP/CRL מקוונות</translation>
 <translation id="6649397154027560979">מדיניות זו הוצאה משימוש, אנא השתמש ב-URLBlacklist במקום זאת.
@@ -880,6 +885,7 @@
 
           אם לא תגדיר מדיניות זו, מצב ניגודיות גבוהה יהיה מושבת בעת ההצגה הראשונה של מסך ההתחברות. המשתמשים יוכלו להפעיל או להשבית את מצב ניגודיות גבוהה בכל עת, והסטטוס שלו במסך ההתחברות יישאר עקבי בין המשתמשים.</translation>
 <translation id="8580857153747395000">הזהר בעת ביקור באתרים שמחוץ לחבילות תוכן.</translation>
+<translation id="350796261613621561">הפעלת יצירה של משתמשים מבוקרים.</translation>
 <translation id="602728333950205286">כתובת אתר Instant של ספק חיפוש המוגדר כברירת מחדל</translation>
 <translation id="3030000825273123558">הפעל דיווח על מדדים</translation>
 <translation id="6559057113164934677">אל תאפשר לאף אתר גישה למצלמה ולמיקרופון</translation>
@@ -897,6 +903,9 @@
 <translation id="8864975621965365890">מניעת השאלה לפני ביטול המופיעה כאשר אתר מוצג על ידי <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">קידודים של ספק חיפוש המוגדר כברירת מחדל</translation>
 <translation id="285480231336205327">אפשר מצב ניגודיות גבוהה</translation>
+<translation id="5366977351895725771">אם תוגדר כ-false, יצירת משתמשים מבוקרים על ידי המשתמש הזה תושבת. משתמשים מבוקרים קיימים עדיין יהיו זמינים.
+
+          אם תוגדר כ-true או לא תוגדר, המשתמש הזה יוכל ליצור משתמשים מבוקרים ולנהל אותם.</translation>
 <translation id="8101760444435022591">לאור העובדה שבדיקות ביטול מקוונות מסוג soft-fail אינן מספקות שום יתרון אבטחה, הן מושבתות כברירת מחדל ב-<ph name="PRODUCT_NAME"/> גרסה 19 ואילך. על ידי הגדרת מדיניות זו כ'אמת', הפעילות הקודמת תוחזר, ובדיקות OCSP/CRL מקוונות יתבצעו.
 
       אם המדיניות לא תוגדר, או מוגדרת כ'שקר', Chrome לא יבצע בדיקות ביטול מקוונות בגרסה 19 ואילך של Chrome.</translation>
diff --git a/chrome/app/policy/policy_templates_ja.xtb b/chrome/app/policy/policy_templates_ja.xtb
index 18753eb..e13e359 100644
--- a/chrome/app/policy/policy_templates_ja.xtb
+++ b/chrome/app/policy/policy_templates_ja.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">自動ログイン回避用のキーボード ショートカットを有効にする</translation>
 <translation id="3214164532079860003">このポリシーを有効にするとホームページが現在の既定のブラウザからインポートされます。無効にするとホームページはインポートされません。このポリシーが未設定の場合、インポートするかどうかをユーザーに尋ねるか、自動的にインポートされます。</translation>
 <translation id="5330684698007383292">次のコンテンツ タイプの処理を <ph name="PRODUCT_FRAME_NAME"/> に対して許可する</translation>
+<translation id="6647965994887675196">true に設定されている場合は、監視対象ユーザーを作成して使用できます。
+
+          false に設定されている場合や未設定の場合は、監視対象ユーザーの作成とログインはできません。既存の監視対象ユーザーはすべて非表示になります。
+
+          注: デフォルトの動作は、個人向けのデバイスと企業向けのデバイスとで異なります。個人向けデバイスでは、監視対象ユーザーはデフォルトで有効になっていますが、企業向けデバイスではそうではありません。</translation>
 <translation id="5469825884154817306">これらのサイトの画像をブロックする</translation>
 <translation id="8412312801707973447">オンライン OCSP/CRL チェックを実行するかどうかを指定する</translation>
 <translation id="6649397154027560979">このポリシーはサポート終了となっているため、代わりに URLBlacklist を使用してください。
@@ -896,6 +901,7 @@
 
           このポリシーが未設定の場合は、ログイン画面が表示された直後はハイコントラスト モードが無効になります。ユーザーはいつでもハイコントラスト モードを有効または無効にすることができ、ログイン画面でのハイコントラスト モードの状態はログアウト後も維持されます。</translation>
 <translation id="8580857153747395000">コンテンツ パック外部のサイトを訪問したときに警告する。</translation>
+<translation id="350796261613621561">監視対象ユーザーを作成できるようにします。</translation>
 <translation id="602728333950205286">デフォルトの検索プロバイダのインスタント検索 URL</translation>
 <translation id="3030000825273123558">統計情報のレポート送信を有効にする</translation>
 <translation id="6559057113164934677">カメラやマイクへのアクセスをどのサイトにも許可しない</translation>
@@ -913,6 +919,9 @@
 <translation id="8864975621965365890">サイトが <ph name="PRODUCT_FRAME_NAME"/> によってレンダリングされるときに表示されるサポート終了メッセージを抑制します。</translation>
 <translation id="3264793472749429012">デフォルトの検索プロバイダのエンコード</translation>
 <translation id="285480231336205327">ハイ コントラスト モードを有効にする</translation>
+<translation id="5366977351895725771">false に設定されている場合、このユーザーは監視対象ユーザーを作成できません。既存の監視対象ユーザーは引き続き利用可能です。
+
+          true に設定されている場合や未設定の場合、このユーザーは監視対象ユーザーを作成し管理できます。</translation>
 <translation id="8101760444435022591">オンラインによる証明書取り消しの確認が Soft Fail の場合、効果的なセキュリティ上の利点がないという点を考慮し、<ph name="PRODUCT_NAME"/> バージョン 19 以降ではデフォルトで無効になっています。このポリシーを true に設定すると、前回の動作を復元し、オンライン OCSP/CRL チェックを実行します。
 
       このポリシーが未設定または false に設定した場合、Chrome 19 以降ではオンラインによる証明書取り消しの確認は行われません。</translation>
diff --git a/chrome/app/policy/policy_templates_kn.xtb b/chrome/app/policy/policy_templates_kn.xtb
index 26ba7ab..8903f7f 100644
--- a/chrome/app/policy/policy_templates_kn.xtb
+++ b/chrome/app/policy/policy_templates_kn.xtb
@@ -73,6 +73,11 @@
 <translation id="3816312845600780067">ಆಟೋ-ಲಾಗಿನ್‌ಗಾಗಿ ಬೇಲ್ಔಟ್ ಕೀಬೋರ್ಡ್ ಕಿರುಹಾದಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="3214164532079860003">ಸಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ ಪ್ರಸ್ತುತ ಡೀಫಾಲ್ಟ್ ಬ್ರೌಸರ್‪ನಿಂದ ಮುಖಪುಟವನ್ನು ಆಮದು ಮಾಡುವಂತೆ ಈ ನೀತಿಯು ಆಗ್ರಹಿಸುತ್ತದೆ. ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ, ಮುಖಪುಟವನ್ನು ಆಮದುಗೊಳಿಸುವುದಿಲ್ಲ. ಇದನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, ಎಲ್ಲಿಂದ ಆಮದು ಮಾಡಬೇಕೆಂದು ಬಳಕೆದಾರ ಕೇಳಬಹುದು, ಅಥವಾ ಆಮದು ಮಾಡುವುದು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಭವಿಸಬಹುದು.</translation>
 <translation id="5330684698007383292">ಮುಂದಿನ ವಿಷಯದ ಪ್ರಕಾರಗಳನ್ನು ನಿರ್ವಹಿಸಲು <ph name="PRODUCT_FRAME_NAME"/> ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ.</translation>
+<translation id="6647965994887675196">ಸರಿ ಎಂದು ಹೊಂದಿಸಿದರೆ, ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಬಹುದು ಮತ್ತು ಬಳಸಬಹುದು.
+
+          ಒಂದು ವೇಳೆ ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದರೆ ಅಥವಾ ಕಾನ್ಫಿಗರ್ ಮಾಡದಿದ್ದರೆ, ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರ ರಚನೆ ಮತ್ತು ಲಾಗಿನ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ. ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಎಲ್ಲಾ ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ.
+
+         ಗಮನಿಸಿ: ಗ್ರಾಹಕ ಮತ್ತು ಉದ್ಯಮ ಸಾಧನಗಳಿಗೂ ಡೀಫಾಲ್ಟ್ ನಡವಳಿಕೆ ಭಿನ್ನವಾಗಿರುತ್ತದೆ: ಗ್ರಾಹಕರ ಸಾಧನಗಳಲ್ಲಿ ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರನ್ನು ಡೀಫಾಲ್ಟ್ ಮೂಲಕ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿರುತ್ತದೆ, ಆದರೆ ಉದ್ಯಮ ಸಾಧನಗಳಲ್ಲಿ ಅವರನ್ನು ಡೀಫಾಲ್ಟ್ ಮೂಲಕ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿರುತ್ತದೆ.</translation>
 <translation id="5469825884154817306">ಈ ಸೈಟ್‌ಗಳಲ್ಲಿ ಚಿತ್ರಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation>
 <translation id="8412312801707973447">ಆನ್‌ಲೈನ್ OCSP/CRL ಪರಿಶೀಲನೆಗಳನ್ನು ಕಾರ್ಯಾಚರಿಸಲಾಗುತ್ತದೆಯೇ</translation>
 <translation id="6649397154027560979">ಈ ನೀತಿಯನ್ನು ಅಸಮ್ಮತಿಸಲಾಗಿದೆ, ಬದಲಾಗಿ ದಯವಿಟ್ಟು URLBlacklist ಬಳಸಿ.
@@ -869,6 +874,7 @@
 
           ಒಂದು ವೇಳೆ ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೇ ಬಿಟ್ಟರೆ, ಲಾಗಿನ್ ಪರದೆಯು ಮೊದಲು ಪ್ರದರ್ಶನಗೊಂಡಾಗ ಅಧಿಕ ಕಾಂಟ್ರಾಸ್ಟ್ ಮೋಡ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ. ಬಳಕೆದಾರರು ಅಧಿಕ ಕಾಂಟ್ರಾಸ್ಟ್ ಮೋಡ್ ಆನ್ನು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಸಕ್ರಿಯ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು ಮತ್ತು ಲಾಗಿನ್ ಪರದೆಯಲ್ಲಿರುವ ಅದರ ಸ್ಥಿತಿಯು ಬಳಕೆದಾರರ ನಡುವೆ ನಿರಂತರವಾಗಿರುತ್ತದೆ.</translation>
 <translation id="8580857153747395000">ಸೈಟ್‌ಗಳಿಗೆ ವಿಷಯದ ಪ್ಯಾಕ್‌ಗಳಿಂದ ಹೊರಗೆ ಭೇಟಿ ನೀಡುವಾಗ ಎಚ್ಚರಿಸಿ.</translation>
+<translation id="350796261613621561">ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರ ರಚನೆ ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation>
 <translation id="602728333950205286">ಡೀಫಾಲ್ಟ್ ಹುಡುಕಾಟ ನೀಡುಗರ ಇನ್‌ಸ್ಟೆಂಟ್ URL</translation>
 <translation id="3030000825273123558">ಮಾಪನಗಳ ವರದಿಗಾರಿಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="6559057113164934677">ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೋಫೋನ್ ಪ್ರವೇಶಿಸಲು ಯಾವುದೇ ಸೈಟ್ ಅನ್ನು ಅನುಮತಿಸಬೇಡಿ</translation>
@@ -886,6 +892,9 @@
 <translation id="8864975621965365890">ಸೈಟ್ ಅನ್ನು <ph name="PRODUCT_FRAME_NAME"/> ಮೂಲಕ ತೋರಿಸುತ್ತಿರುವಾಗ ಗೋಚರಿಸುವಂತಹ ಟರ್ನ್‌ಡೌನ್ ಪ್ರಾಂಪ್ಟ್ ಅನ್ನು ನಿಗ್ರಹಿಸುತ್ತದೆ.</translation>
 <translation id="3264793472749429012">ಡೀಫಾಲ್ಟ್ ಹುಡುಕಾಟ ನೀಡುಗ ಎನ್ಕೋಡಿಂಗ್‌ಗಳು</translation>
 <translation id="285480231336205327">ಉನ್ನತ ಕಾಂಟ್ರಾಸ್ಟ್ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
+<translation id="5366977351895725771">ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದರೆ, ಈ ಬಳಕೆದಾರರಿಂದ ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರ ರಚನೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ. ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರು ಇನ್ನೂ ಲಭ್ಯವಿರುತ್ತಾರೆ.
+
+          ಒಂದು ವೇಳೆ ಸರಿ ಎಂದು ಹೊಂದಿಸಿದರೆ ಅಥವಾ ಕಾನ್ಫಿಗರ್ ಮಾಡದಿದ್ದರೆ, ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಬಹುದಾಗಿರುತ್ತದೆ ಮತ್ತು ಈ ಬಳಕೆದಾರರಿಂದ ನಿರ್ವಹಿಸಬಹುದಾಗಿರುತ್ತದೆ.</translation>
 <translation id="8101760444435022591">ನೈಜಾರ್ಥದಲ್ಲಿ, ಆನ್‌ಲೈನ್ ರಿವೊಕೇಶನ್ ಪರಿಶೀಲನೆಗಳು ಪರಿಣಾಮಕಾರಿಯಾದ ಭದ್ರತಾ ಪ್ರಯೋಜನವನ್ನು ಒದಗಿಸುವುದಿಲ್ಲ, ಡೀಫಾಲ್ಟ್ <ph name="PRODUCT_NAME"/> ನಲ್ಲಿ ಆವೃತ್ತಿ 19 ಮತ್ತು ಅದರ ನಂತರ ಅವುಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ನಿಜವಾದ ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸುವುದರ ಮೂಲಕ, ಹಿಂದಿನ ವರ್ತನೆಯು ಮರುಸ್ಥಾಪನೆಯಾಗುತ್ತದೆ ಮತ್ತು ಆನ್‌ಲೈನ್ OCSP/CRL ಪರಿಶೀಲನೆಗಳು ಕಾರ್ಯಾಚರಿಸುತ್ತವೆ. ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, ಸುಳ್ಳಿಗೆ ಹೊಂದಿಸಿದರೆ, Chrome 19 ಮತ್ತು ನಂತರದಲ್ಲಿ ಆನ್‌ಲೈನ್ ರಿವೊಕೇಶನ್ ಪರಿಶೀಲನೆಗಳನ್ನು ನಂತರ Chrome ಕಾರ್ಯಾಚರಿಸುವುದಿಲ್ಲ.</translation>
 <translation id="5469484020713359236">ಕುಕೀಗಳನ್ನು ಹೊಂದಿಸಲು ಅನುಮತಿಸುವಂತಹ ಸೈಟ್‌ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವಂತಹ url ಪ್ರಕಾರಗಳನ್ನು ಹೊಂದಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೆ ಬಿಟ್ಟಲ್ಲಿ ಜಾಗತಿಕ ಡೀಫಾಲ್ಟ್ ಮೌಲ್ಯವನ್ನು 'DefaultCookiesSetting' ನೀತಿಯನ್ನು ಹೊಂದಿಸಿದ್ದಲ್ಲಿ ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ ಅಥವಾ ಬಳಕೆದಾರರ ವೈಯಕ್ತಿಕ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="1504431521196476721">ರಿಮೋಟ್ ದೃಢೀಕರಣ</translation>
diff --git a/chrome/app/policy/policy_templates_ko.xtb b/chrome/app/policy/policy_templates_ko.xtb
index 5e4d252..f6f4a04 100644
--- a/chrome/app/policy/policy_templates_ko.xtb
+++ b/chrome/app/policy/policy_templates_ko.xtb
@@ -86,6 +86,11 @@
 
       설정하지 않으면 홈페이지를 가져올지 여부를 사용자에게 확인하거나 자동으로 가져올 수 있습니다.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/>이(가) 다음 콘텐츠 유형을 다루도록 허용</translation>
+<translation id="6647965994887675196">true로 설정하면 관리 대상 사용자를 생성하고 사용할 수 있습니다.
+
+          false로 설정하거나 설정하지 않으면 관리 대상 사용자 생성 및 로그인이 사용 중지됩니다. 기존의 모든 관리 대상 사용자는 숨겨집니다.
+
+          참고: 일반 소비자용과 기업용 기기는 기본 동작에 차이가 있습니다. 일반 소비자용 기기는 관리 대상 사용자를 기본적으로 사용하도록 설정되어 있으나, 기업용 기기에서는 기본적으로 사용 중지되어 있습니다.</translation>
 <translation id="5469825884154817306">이 사이트의 이미지 차단</translation>
 <translation id="8412312801707973447">온라인 OCSP/CRL 확인 수행 여부</translation>
 <translation id="6649397154027560979">이 정책은 지원 중단되었으므로 대신 URLBlacklist를 사용하시기 바랍니다.
@@ -1119,6 +1124,7 @@
 
           이 정책이 설정되지 않은 경우 로그인 화면이 처음 나타날 때 고대비 모드가 사용 중지되어 있습니다. 사용자는 언제든지 고대비 모드를 사용 설정 또는 사용 중지할 수 있으며 로그인 화면에서의 상태가 사용자별로 유지됩니다.</translation>
 <translation id="8580857153747395000">콘텐츠 팩 외부 사이트를 방문할 때 표시되는 경고입니다.</translation>
+<translation id="350796261613621561">관리 대상 사용자 생성을 사용하도록 설정합니다.</translation>
 <translation id="602728333950205286">기본 검색 공급자 순간 검색 URL</translation>
 <translation id="3030000825273123558">통계 보고 사용</translation>
 <translation id="6559057113164934677">카메라 및 마이크에 대한 모든 사이트의 액세스 허용 안함</translation>
@@ -1144,6 +1150,9 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME"/>에서 사이트를 렌더링할 때 나타나는 종료 프롬프트를 표시하지 않습니다.</translation>
 <translation id="3264793472749429012">기본 검색 공급자 인코딩</translation>
 <translation id="285480231336205327">고대비 모드 사용</translation>
+<translation id="5366977351895725771">false로 설정하면 이 사용자에 의한 관리 대상 사용자 생성이 사용 중지됩니다. 기존 관리 대상 사용자는 계속 사용할 수 있습니다.
+
+          true로 설정하거나 설정하지 않으면 이 사용자가 관리 대상 사용자를 생성하고 관리할 수 있습니다.</translation>
 <translation id="8101760444435022591">가벼운 고장, 온라인 폐기 검사가 보안 혜택을 제공하지 않는다는 것을 고려하여 기본적으로 <ph name="PRODUCT_NAME"/> 버전 19 이상에서는 사용 중지합니다. 이 정책을 true로 설정하면 이전 작업이 복원되며 온라인 OCSP/CRL 확인이 수행됩니다.
 
       이 정책을 설정하지 않거나 false로 설정하면 Chrome은 Chrome 19 이상에서 온라인 폐기 확인을 수행하지 않습니다.</translation>
diff --git a/chrome/app/policy/policy_templates_lt.xtb b/chrome/app/policy/policy_templates_lt.xtb
index bc7a676..56c8d0d 100644
--- a/chrome/app/policy/policy_templates_lt.xtb
+++ b/chrome/app/policy/policy_templates_lt.xtb
@@ -89,6 +89,11 @@
 
       Jei jis nenustatytas, naudotojo gali būti paklausta, ar importuoti, arba gali būti automatiškai pradėta importuoti.</translation>
 <translation id="5330684698007383292">Leisti „<ph name="PRODUCT_FRAME_NAME"/>“ naudoti šių tipų turinį</translation>
+<translation id="6647965994887675196">Jei ši politika galioja, galima sukurti ir naudoti prižiūrimus naudotojus.
+
+          Jei ši politika negalioja arba yra nesukonfigūruota, prižiūrimo naudotojo kūrimas ir prisijungimas bus neleidžiamas. Visi esami prižiūrimi naudotojai bus paslėpti.
+
+          PASTABA: numatytoji klientų ir įmonės įrenginių elgsena skiriasi: klientų įrenginiuose prižiūrimi naudotojai pagal numatytuosius nustatymus yra įgalinti, o įmonės įrenginiuose – neleidžiami.</translation>
 <translation id="5469825884154817306">Blokuoti vaizdus šiose svetainėse</translation>
 <translation id="8412312801707973447">Ar atliekami OCSP / CRL patikrinimai prisijungus</translation>
 <translation id="6649397154027560979">Ši politika nebenaudojama, vietoje jos naudokite politiką „URLBlacklist“.
@@ -1130,6 +1135,7 @@
 
           Jei ši politika nenustatyta, didelio kontrasto režimas yra išjungtas, kai prisijungimo ekranas rodomas pirmą kartą. Naudotojai gali bet kada įgalinti arba išjungti didelio kontrasto režimą, o jo būsena skirtingiems naudotojams prisijungimo ekrane bus vienoda.</translation>
 <translation id="8580857153747395000">Įspėti, kai apsilankoma svetainėse, neesančiose turinio paketuose.</translation>
+<translation id="350796261613621561">Įgalinti prižiūrimų naudotojų kūrimą.</translation>
 <translation id="602728333950205286">Numatytojo paieškos teikėjo intuityviosios paieškos URL</translation>
 <translation id="3030000825273123558">Įgalinti metrikos ataskaitų teikimą</translation>
 <translation id="6559057113164934677">Neleisti jokiai svetainei pasiekti kameros ir mikrofono</translation>
@@ -1155,6 +1161,9 @@
 <translation id="8864975621965365890">Nerodomas raginimas išjungti, kuris rodomas, kai svetainę pateikia „<ph name="PRODUCT_FRAME_NAME"/>“.</translation>
 <translation id="3264793472749429012">Numatytojo paieškos teikėjo koduotės</translation>
 <translation id="285480231336205327">Įgalinti didelio kontrasto būseną</translation>
+<translation id="5366977351895725771">Jei ši politika negalioja, šis naudotojas negalės kurti prižiūrimų naudotojų. Visi esami naudotojai bus vis tiek pasiekiami.
+
+          Jei ši politika galioja arba yra nesukonfigūruota, šis naudotojas gali kurti ir tvarkyti prižiūrimus naudotojus.</translation>
 <translation id="8101760444435022591">Atsiradus programiniam gedimui, prisijungus atliekami panaikinimo patikrinimai neužtikrina tinkamo saugumo, todėl jie pagal numatytuosius nustatymus neleidžiami 19 ir naujesnių versijų „<ph name="PRODUCT_NAME"/>“. Nustačius šią politiką į „true“ (tiesa), atkuriama ankstesnė elgsena ir atliekami OCSP / CRL patikrinimai prisijungus.
 
       Nenustačius politikos arba nustačius į „false“ (netiesa), „Chrome“ neatlieka panaikinimo patikrinimų prisijungus 19 ir naujesnių versijų „Chrome“.</translation>
diff --git a/chrome/app/policy/policy_templates_lv.xtb b/chrome/app/policy/policy_templates_lv.xtb
index 5023c93..52c011c 100644
--- a/chrome/app/policy/policy_templates_lv.xtb
+++ b/chrome/app/policy/policy_templates_lv.xtb
@@ -90,6 +90,11 @@
 
       Ja tā nav iestatīta, vai nu lietotājam var tikt vaicāts, vai importēt, vai arī importēšana var notikt automātiski.</translation>
 <translation id="5330684698007383292">Atļauja produktam <ph name="PRODUCT_FRAME_NAME"/> apstrādāt tālāk norādītos satura veidus</translation>
+<translation id="6647965994887675196">Iestatot vērtību uz “true”, var tikt veidoti un izmantoti uzraudzītie lietotāju konti.
+
+          Ja vērtība tiek iestatīta uz “false” vai arī netiek konfigurēta, uzraudzīto lietotāju kontu veidošana un pieteikšanās tiks atspējota. Visi esošie uzraudzītie lietotāju konti tiks slēpti.
+
+          PIEZĪME. Noklusējuma darbības klientu un uzņēmumu ierīcēs atšķiras: klientu ierīcēs uzraudzītie lietotāju konti pēc noklusējuma ir iespējoti, taču uzņēmumu ierīcēs — atspējoti.</translation>
 <translation id="5469825884154817306">Bloķē attēlus šajās vietnēs</translation>
 <translation id="8412312801707973447">Vai tiek veiktas OCSP/CRL pārbaudes tiešsaistē</translation>
 <translation id="6649397154027560979">Šīs politikas darbība ir pārtraukta. Lūdzu, tās vietā izmantojiet politiku URLBlacklist.
@@ -1120,6 +1125,7 @@
 
           Ja šī politika nav iestatīta, augsta kontrasta režīms ir atspējots, kad pirmo reizi tiek parādīts pieteikšanās ekrāns. Lietotājs var jebkurā brīdī iespējot vai atspējot augsta kontrasta režīmu, un tā statuss pieteikšanās ekrānā tiek saglabāts visiem lietotājiem.</translation>
 <translation id="8580857153747395000">Brīdināt, kad tiek apmeklētas satura pakotnēs neiekļautas vietnes.</translation>
+<translation id="350796261613621561">Iespējot uzraudzīto lietotāju kontu veidošanu</translation>
 <translation id="602728333950205286">Noklusējuma meklētājprogrammas dinamisko mekl. rezultātu URL</translation>
 <translation id="3030000825273123558">Iespējot metrikas ziņošanu</translation>
 <translation id="6559057113164934677">Neļaut nevienai vietnei piekļūt kamerai un mikrofonam</translation>
@@ -1145,6 +1151,9 @@
 <translation id="8864975621965365890">Aizliedz noraidīšanas uzvedni, kas tiek parādīta, ja vietni renderē spraudnis <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Noklusējuma meklētājprogrammas kodējumi</translation>
 <translation id="285480231336205327">Iespējot augsta kontrasta režīmu</translation>
+<translation id="5366977351895725771">Iestatot vērtību uz “false”, šim lietotājam tiks atspējota iespēja veidot uzraudzītos lietotāju kontus. Visi esošie uzraudzītie lietotāju konti joprojām būs pieejami.
+
+          Ja vērtība tiek iestatīta uz “true” vai netiek konfigurēta, šis lietotājs var veidot un pārvaldīt uzraudzītos lietotāju kontus.</translation>
 <translation id="8101760444435022591">Ņemot vērā to, ka pastāvīgas atteices atsaukšanas pārbaudes tiešsaistē nenodrošina nevienu efektīvu drošības priekšrocību, tās tiek atspējotas pēc noklusējuma produkta <ph name="PRODUCT_NAME"/> 19. vai jaunākā versijā. Iestatot šo politiku uz Patiesa, tiek atjaunota iepriekšējā darbība un tiek veiktas OCSP/CRL pārbaudes tiešsaistē.
 
       Ja politika netiek iestatīta vai iestatīta uz Aplama, pārlūks Chrome neveic atsaukšanas pārbaudes tiešsaistē pārlūka Chrome 19. vai jaunākā versijā.</translation>
diff --git a/chrome/app/policy/policy_templates_ml.xtb b/chrome/app/policy/policy_templates_ml.xtb
index 8e48af4..359ba90 100644
--- a/chrome/app/policy/policy_templates_ml.xtb
+++ b/chrome/app/policy/policy_templates_ml.xtb
@@ -88,6 +88,11 @@
 
       ഇത് സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, അത് ഇംപോർട്ട് ചെയ്യണോ അല്ലെങ്കിൽ ഇംപോർട്ട് ചെയ്യൽ യാന്ത്രികമായി സംഭവിക്കേണ്ടതുണ്ടോ എന്ന് ഉപയോക്താവിനോട് ചോദിച്ചേക്കാം.</translation>
 <translation id="5330684698007383292">ഇനിപ്പറയുന്ന ഉള്ളടക്ക തരങ്ങള്‍ കൈകാര്യം ചെയ്യാന്‍ <ph name="PRODUCT_FRAME_NAME"/> എന്നതിനെ അനുവദിക്കുക</translation>
+<translation id="6647965994887675196">true എന്നതായി സജ്ജമാക്കുകയാണെങ്കിൽ, സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെ സൃഷ്‌ടിക്കാനും ഉപയോഗിക്കാനുമാകും.
+
+          false എന്നതായി സജ്ജമാക്കുകയോ കോൺഫിഗർ ചെയ്യാതിരിക്കുകയോ ആണെങ്കിൽ, സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താവിനെ സൃഷ്‌ടിക്കലും ലോഗിൻ ചെയ്യലും പ്രവർത്തനരഹിതമാകും. നിലവിലുള്ള എല്ലാ സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളും മറയ്‌ക്കപ്പെടും.
+
+          ശ്രദ്ധിക്കുക: ഉപയോക്തൃ, എന്റർപ്രൈസ് ഉപകരണങ്ങൾക്കുള്ള സ്ഥിര രീതി വ്യത്യസ്‌തമാണ്: ഉപയോക്തൃ ഉപകരണങ്ങളിൽ സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെ സ്ഥിരമായി പ്രവർത്തനക്ഷമമാക്കിയിരിക്കുന്നു, എന്നാൽ എന്റർപ്രൈസ് ഉപകരണങ്ങളിൽ അവ സ്ഥിരമായി പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു.</translation>
 <translation id="5469825884154817306">ഈ സൈറ്റുകളില്‍ ഇമേജ് തടയുക</translation>
 <translation id="8412312801707973447">ഓൺലൈൻ OCSP/CRL ചെക്കുകൾ നടപ്പിലാക്കിയിട്ടുണ്ടോ</translation>
 <translation id="6649397154027560979">ഈ നയം ഒഴിവാക്കിയെങ്കിൽ പകരം URLBlacklist ഉപയോഗിക്കുക.
@@ -1127,6 +1132,7 @@
 
           ഈ നയം സജ്ജമാക്കാതെ വിടുകയാണെങ്കിൽ, ആദ്യമായി ലോഗിൻ സ്‌ക്രീൻ ദൃശ്യമാകുമ്പോൾ ഉയർന്ന ദൃശ്യ തീവ്രത മോഡ് പ്രവർത്തനരഹിതമാകുന്നു. ഉപയോക്താക്കൾക്ക് ഏതുസമയത്തും ഉയർന്ന ദൃശ്യ തീവ്രത മോഡ് പ്രവർത്തനക്ഷമമാക്കാനോ പ്രവർത്തനരഹിതമാക്കാനോ കഴിയും ഒപ്പം ലോഗിൻ സ്‌ക്രീനിൽ ഉപയോക്താക്കൾക്കിടയിൽ അതിന്റെ നില തുടരുകയും ചെയ്യും.</translation>
 <translation id="8580857153747395000">ഉള്ളടക്ക പാക്കുകളുടെ പുറത്തുള്ള സൈറ്റുകൾ സന്ദർശിക്കുമ്പോൾ മുന്നറിയിപ്പ് നൽകുക.</translation>
+<translation id="350796261613621561">സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെ സൃഷ്‌ടിക്കൽ പ്രവർത്തനക്ഷമമാക്കുക.</translation>
 <translation id="602728333950205286">സ്ഥിരസ്ഥിതി തിരയല്‍ ദാതാവിന്‍റെ തല്‍ക്ഷണ URL</translation>
 <translation id="3030000825273123558">അളവുകൾ റിപ്പോർട്ടുചെയ്യൽ പ്രാപ്‌തമാക്കുക</translation>
 <translation id="6559057113164934677">എന്റെ ക്യാമറയും മൈക്രോഫോണും ആക്‌സസ്സുചെയ്യാൻ ഒരു സൈറ്റിനെയും അനുവദിക്കരുത്</translation>
@@ -1152,6 +1158,9 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME"/>, ഒരു സൈറ്റ് റെൻഡർ ചെയ്‌തിരിക്കുമ്പോൾ ദൃശ്യമാകുന്ന നിരസിക്കൽ ആവശ്യം നിയന്ത്രിക്കുക.</translation>
 <translation id="3264793472749429012">സ്ഥിരസ്ഥിതി തിരയല്‍ ദാതാവിന്‍റെ എന്‍കോഡിംഗുകള്‍</translation>
 <translation id="285480231336205327">ഉയർന്ന ദൃശ്യ തീവ്രത മോഡ് പ്രാപ്‌തമാക്കുക</translation>
+<translation id="5366977351895725771">false എന്നതായി സജ്ജമാക്കുകയാണെങ്കിൽ, ഈ ഉപയോക്താവ് മുഖേന സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താവിനെ സൃഷ്‌ടിക്കൽ പ്രവർത്തനരഹിതമാകും. നിലവിലുള്ള സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെല്ലാം തുടർന്നും ലഭ്യമാകും.
+
+          true എന്നതായി സജ്ജമാക്കുകയോ കോൺഫിഗർ ചെയ്യാതിരിക്കുകയോ ആണെങ്കിൽ, ഈ ഉപയോക്താവിന് സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെ സൃഷ്‌ടിക്കാനും നിയന്ത്രിക്കാനും കഴിയും.</translation>
 <translation id="8101760444435022591">സോഫ്റ്റ്‌വെയർ പരാജയം എന്ന വസ്‌തുതയുടെ വെളിച്ചത്തില്‍, ഓണ്‍‌ലൈനായുള്ള അസാധുവാക്കൽ പരിശോധനകൾ ഫലപ്രദമായ സുരക്ഷാ പ്രയോജനം നൽകാത്തതിനാൽ, <ph name="PRODUCT_NAME"/> പതിപ്പ് 19-ലും അതിന് ശേഷം ഇറങ്ങിയ പതിപ്പുകളിലും അവ സ്ഥിരസ്ഥിതിയായി അപ്രാപ്‌തമാക്കി. ഈ നയം ശരി എന്നതിലേക്ക് ക്രമീകരിക്കുന്നതിലൂടെ, മുൻ പ്രവർത്തനരീതി പുനഃസ്ഥാപിക്കുകയും ഓൺലൈൻ OCSP/CRL പരിശോധനകൾ നടപ്പിലാക്കുകയും ചെയ്യും.
 
       ഈ നയം സജ്ജീകരിക്കാത്ത നിലയിലാണെങ്കിലോ തെറ്റ് എന്നതിലേക്ക് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിലോ, Chrome 19-ലും അതിന് ശേഷം ഇറങ്ങിയ പതിപ്പുകളിലും ഓണ്‍‌ലൈന്‍ അസാധുവാക്കൽ പരിശോധനകൾ Chrome നടപ്പിലാക്കുകയില്ല.</translation>
diff --git a/chrome/app/policy/policy_templates_mr.xtb b/chrome/app/policy/policy_templates_mr.xtb
index 75867fc..1eb05a0 100644
--- a/chrome/app/policy/policy_templates_mr.xtb
+++ b/chrome/app/policy/policy_templates_mr.xtb
@@ -83,6 +83,11 @@
 अक्षम केल्यास, मुख्‍य पृष्‍ठ आयात केले जात नाही.
 ते सेट केले नसल्यास, वापरकर्त्याला आयात करायचे की किंवा ‍नाही, किंवा आयात करणे स्वयंचलितपणे होण्याबाबत विचारले जाते.</translation>
 <translation id="5330684698007383292">खालील सामग्री प्रकार हाताळण्यास <ph name="PRODUCT_FRAME_NAME"/> ला अनुमती द्या</translation>
+<translation id="6647965994887675196">सत्य वर सेट केल्यास, पर्यवेक्षी वापरकर्ते तयार केले आणि वापरले जाऊ शकतात.
+
+          असत्य वर सेट केल्यास किंवा कॉन्फिगर केले नसल्यास, पर्यवेक्षी-वापरकर्ता निर्मिती आणि लॉग इन अक्षम होईल. सर्व विद्यमान पर्यवेक्षी वापरकर्ते लपविले जातील.
+
+          टीप: ग्राहकाचे डीफॉल्ट वर्तन आणि एंटरप्राइज डिव्हाइसेसमध्ये फरक असतो: ग्राहक डिव्हाइसेसवर पर्यवेक्षी वापरकर्ते डीफॉल्टनुसार सक्षम केले जातात, परंतु एंटरप्राइज डिव्हाइसेसवर ते डीफॉल्टनुसार अक्षम केले जातात.</translation>
 <translation id="5469825884154817306">या साइटवरील प्रतिमा अवरोधित करा</translation>
 <translation id="8412312801707973447">ऑनलाइन OCSP/CRL तपासण्या पूर्ण केल्या आहेत किंवा नाहीत</translation>
 <translation id="6649397154027560979">हे धोरण बहिष्कृत करण्यात आले आहे, कृपया त्याऐवजी URLBlacklist वापरा.
@@ -1076,6 +1081,7 @@
 
           हे धोरण सेट न करता सोडल्यास, जेव्हा लॉगिन स्क्रीन प्रथम दर्शविली जाते तेव्हा उच्च तीव्रता मोड अक्षम होतो. वापरकर्ते कोणत्याही वेळी उच्च तीव्रता मोड आणि लॉगिन स्क्रीनवरील वापरकर्त्यांमध्ये कायम असलेली त्याची स्थिती सक्षम किंवा अक्षम करू शकतात.</translation>
 <translation id="8580857153747395000">सामग्री पॅक बाहेर साइटना भेट देताना चेतावणी द्या.</translation>
+<translation id="350796261613621561">पर्यवेक्षी वापरकर्त्यांची निर्मिती सक्षम करा.</translation>
 <translation id="602728333950205286">डीफॉल्ट शोध प्रदाता झटपट URL</translation>
 <translation id="3030000825273123558">मेट्रिक्स अहवाल सक्षम करा</translation>
 <translation id="6559057113164934677">कॅमेरा आणि मायक्रोफोनवर प्रवेश करण्यास कोणत्याही साइटला अनुमती देऊ नका</translation>
@@ -1101,6 +1107,9 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME"/> द्वारे एखादी साइट पूर्तता करते तेव्हा दिसत असलेली नाकारण्याची सूचना दाबते.</translation>
 <translation id="3264793472749429012">डीफॉल्ट शोध प्रदाता एन्कोडिंग</translation>
 <translation id="285480231336205327">उच्च तीव्रता मोड सक्षम करा</translation>
+<translation id="5366977351895725771">असत्य वर सेट केल्यास, या वापरकर्त्याद्वारे पर्यवेक्षी-वापरकर्ता निर्मिती अक्षम केली जाईल. कोणतेही विद्यमान पर्यवेक्षी वापरकर्ते तरीही उपलब्ध राहतील.
+
+          सत्य वर सेट केल्यास किंवा कॉन्फिगर केले नसल्यास, पर्यवेक्षी वापरकर्ते या वापरकर्त्याद्वारे तयार केले आणि व्यवस्थापित केले जाऊ शकतात.</translation>
 <translation id="8101760444435022591">सॉफ्‍ट-फेल, ऑनलाइन रद्दीकरण तपासण्‍या कोणतेही प्रभावी सुरक्षा लाभ देत नाहीत या तथ्‍याच्या प्रकाशात, त्या डीफॉल्ट रुपात <ph name="PRODUCT_NAME"/> आवृत्ती 19 आणि त्यानंतरच्या मध्‍ये ते अक्षम करण्‍यात आले आहे. हे धोरण लागू होण्‍यास सेट केल्यास, मागील वर्तन पुनर्संचयित केले जाते आणि ऑनलाइन OCSP/CRL तपासण्‍या केल्या जातात. 
 
       धोरण सेट केले नसल्यास, किंवा चुकीचे वर सेट केल्यास, Chrome हे Chrome 19 आणि नंतरच्यामध्‍ये ऑनलाइन निरस्त करण्याच्या तपासण्या करणार नाही.</translation>
diff --git a/chrome/app/policy/policy_templates_ms.xtb b/chrome/app/policy/policy_templates_ms.xtb
index fe30be4..d870393 100644
--- a/chrome/app/policy/policy_templates_ms.xtb
+++ b/chrome/app/policy/policy_templates_ms.xtb
@@ -87,6 +87,11 @@
 
       Jika ia tidak ditetapkan, pengguna mungkin ditanya sama ada mahu mengimport atau tidak, atau pengimportan mungkin berlaku secara automatik.</translation>
 <translation id="5330684698007383292">Benarkan <ph name="PRODUCT_FRAME_NAME"/> mengendalikan jenis kandungan berikut</translation>
+<translation id="6647965994887675196">Jika ditetapkan kepada benar, pengguna diselia boleh dihasilkan dan digunakan.
+
+          Jika ditetapkan kepada palsu atau tidak dikonfigurasi, penghasilan dan log masuk pengguna diselia akan dilumpuhkan. Semua pengguna diselia yang sedia ada akan disembunyikan.
+
+          PERHATIAN: Gelagat lalai untuk peranti pengguna dan perusahaan berbeza: pada peranti pengguna, pengguna diselia didayakan secara lalai tetapi pada peranti perusahaan, pengguna diselia dilumpuhkan secara lalai.</translation>
 <translation id="5469825884154817306">Sekat imej pada tapak ini</translation>
 <translation id="8412312801707973447">Sama ada semakan OCSP/CRL dalam talian dilaksanakan</translation>
 <translation id="6649397154027560979">Dasar ini tidak akan digunakan lagi, sebaliknya, sila gunakan URLBlacklist.
@@ -1126,6 +1131,7 @@
 
           Jika dasar ini dibiarkan tanpa ditetapkan, mod kontras tinggi dilumpuhkan apabila skrin log masuk mula-mula dipaparkan. Pengguna boleh mendayakan atau melumpuhkan mod kontras tinggi pada bila-bila masa dan statusnya pada skrin log masuk yang berterusan antara pengguna.</translation>
 <translation id="8580857153747395000">Beri amaran apabila melawat tapak web di luar pek kandungan.</translation>
+<translation id="350796261613621561">Dayakan penghasilan pengguna diselia.</translation>
 <translation id="602728333950205286">URL semerta pembekal carian lalai</translation>
 <translation id="3030000825273123558">Dayakan laporan metrik</translation>
 <translation id="6559057113164934677">Jangan benarkan mana-mana tapak mengakses kamera dan mikrofon</translation>
@@ -1151,6 +1157,9 @@
 <translation id="8864975621965365890">Menyekat gesaan penolakan yang dipaparkan apabila tapak dipaparkan oleh <ph name="PRODUCT_FRAME_NAME"/> .</translation>
 <translation id="3264793472749429012">Pengekodan pembekal carian lalai</translation>
 <translation id="285480231336205327">Dayakan mod kontras tinggi</translation>
+<translation id="5366977351895725771">Jika ditetapkan kepada palsu, penghasilan pengguna diselia oleh pengguna ini akan dilumpuhkan. Mana-mana pengguna diselia yang sedia ada masih akan tersedia.
+
+          Jika ditetapkan kepada benar atau tidak dikonfigurasi, pengguna diselia boleh dihasilkan dan diuruskan oleh pengguna ini.</translation>
 <translation id="8101760444435022591">Berasaskan fakta bahawa semakan kegagalan lembut, pembatalan dalam talian tidak memberikan sebarang manfaat keselamatan yang berkesan, semakan ini dilumpuhkan secara lalai dalam <ph name="PRODUCT_NAME"/> versi 19 dan yang lebih baharu. Dengan menetapkan dasar ini kepada benar, gelagat terdahulu dipulihkan dan semakan OCSP/CRL dalam talian akan dilaksanakan.
 
       Jika dasar ini tidak ditetapkan atau ditetapkan kepada palsu, maka Chrome tidak akan melaksanakan semakan pembatalan dalam talian dalam Chrome 19 dan yang lebih baharu.</translation>
diff --git a/chrome/app/policy/policy_templates_nl.xtb b/chrome/app/policy/policy_templates_nl.xtb
index a187f08..72d4261 100644
--- a/chrome/app/policy/policy_templates_nl.xtb
+++ b/chrome/app/policy/policy_templates_nl.xtb
@@ -86,6 +86,11 @@
 
       Als dit beleid niet is ingesteld, kan de gebruiker worden gevraagd of deze wil importeren, of wordt er automatisch geïmporteerd.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/> toestaan de volgende soorten inhoud te verwerken.</translation>
+<translation id="6647965994887675196">Als dit wordt ingesteld op 'true' (waar), kunnen bewaakte gebruikers worden gemaakt en gebruikt.
+
+          Als dit wordt ingesteld op 'false' (niet waar) of niet wordt geconfigureerd, wordt het maken van en inloggen voor bewaakte gebruikers uitgeschakeld. Alle bestaande bewaakte gebruikers worden verborgen.
+
+          OPMERKING: het standaardgedrag voor zakelijke en consumentenapparaten verschilt: op consumentenapparaten zijn bewaakte gebruikers standaard ingeschakeld, maar op zakelijke apparaten zijn ze standaard uitgeschakeld.</translation>
 <translation id="5469825884154817306">Afbeeldingen blokkeren op deze sites</translation>
 <translation id="8412312801707973447">Uitvoer van online OCSP/CRL-controles</translation>
 <translation id="6649397154027560979">Dit  beleid is verouderd, gebruik URLBlacklist.
@@ -593,7 +598,7 @@
           Als dit beleid niet wordt ingesteld, wordt de algemene standaardwaarde gebruikt voor alle sites, op basis van het beleid 'DefaultPluginsSetting' (als dit is ingesteld) of anders op basis van de configuratie van de gebruiker.</translation>
 <translation id="4423597592074154136">Proxyinstellingen handmatig specificeren</translation>
 <translation id="209586405398070749">Stabiel kanaal</translation>
-<translation id="8170878842291747619">Hiermee wordt de geïntegreerde service Google Vertalen ingeschakeld in <ph name="PRODUCT_NAME"/>.
+<translation id="8170878842291747619">Hiermee wordt de geïntegreerde service Google Translate ingeschakeld in <ph name="PRODUCT_NAME"/>.
 
       Als u deze instelling inschakelt, wordt in <ph name="PRODUCT_NAME"/> een geïntegreerde werkbalk weergegeven waarin de gebruiker wordt gevraagd of deze de pagina wil laten vertalen (indien van toepassing).
 
@@ -1121,6 +1126,7 @@
 
           Als u het beleid niet instelt, wordt de modus voor hoog contrast uitgeschakeld wanneer het inlogscherm voor de eerste keer wordt weergegeven. Gebruikers kunnen de modus voor hoog contrast op elk moment in- of uitschakelen en de status op het inlogscherm is permanent tussen gebruikers.</translation>
 <translation id="8580857153747395000">Waarschuwen als sites worden bezocht die zich niet in de inhoudspakketten bevinden.</translation>
+<translation id="350796261613621561">Maken van bewaakte gebruikers inschakelen.</translation>
 <translation id="602728333950205286">Instant-URL voor standaardzoekprovider</translation>
 <translation id="3030000825273123558">Rapportage van statistieken inschakelen</translation>
 <translation id="6559057113164934677">Niet toestaan dat sites toegang krijgen tot de camera en microfoon</translation>
@@ -1146,6 +1152,9 @@
 <translation id="8864975621965365890">Hiermee onderdrukt u de prompt die wordt weergegeven wanneer een site wordt weergegeven door <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Coderingen voor standaardzoekprovider</translation>
 <translation id="285480231336205327">Modus voor hoog contrast inschakelen</translation>
+<translation id="5366977351895725771">Als dit is ingesteld op 'false' (niet waar) wordt het maken van bewaakte gebruikers uitgeschakeld voor deze gebruiker. Bestaande bewaakte gebruikers blijven beschikbaar.
+
+          Als dit is ingesteld op 'true' (waar) of niet is geconfigureerd, kunnen bewaakte gebruikers worden gemaakt en beheerd door deze gebruiker.</translation>
 <translation id="8101760444435022591">Omdat soft-fail, online certificaatintrekkingscontroles de veiligheid niet aantoonbaar verhogen, worden deze standaard uitgeschakeld in versie 19 en hoger van <ph name="PRODUCT_NAME"/>. Door dit beleid op 'true' in te stellen, wordt het eerdere gedrag hersteld en worden online OCSP/CRL-controles uitgevoerd.
 
       Als het beleid niet is ingesteld, of is ingesteld op 'false', voert Chrome geen online intrekkingscontroles uit in Chrome 19 en hoger.</translation>
diff --git a/chrome/app/policy/policy_templates_no.xtb b/chrome/app/policy/policy_templates_no.xtb
index 7794405..51db47b 100644
--- a/chrome/app/policy/policy_templates_no.xtb
+++ b/chrome/app/policy/policy_templates_no.xtb
@@ -77,6 +77,11 @@
 <translation id="3816312845600780067">Aktiver hurtigtasten for avbrytelse av automatisk pålogging</translation>
 <translation id="3214164532079860003">Denne retningslinjen tvinger startsiden til å bli importert fra nåværende standard nettleser hvis den er aktivert. Hvis retningslinjen er deaktivert, importeres ikke startsiden. Hvis retningslinjen ikke er angitt, er det mulig at brukeren får spørsmål om hvorvidt vedkommende ønsker å importere, eller så kan importeringen skje automatisk.</translation>
 <translation id="5330684698007383292">Gi <ph name="PRODUCT_FRAME_NAME"/> tillatelse til å håndtere de følgende innholdstypene</translation>
+<translation id="6647965994887675196">Hvis angitt til «true», kan overvåkede brukere opprettes og brukes.
+
+          Hvis angitt til «false» eller ikke konfigurert, er oppretting og bruk av overvåkede brukere deaktivert. Alle eksisterende overvåkede brukere skjules.
+
+          MERK: Standardatferden for forbruker- og bedriftsenheter er ikke den samme. På forbrukerenheter er overvåkede brukere aktivert som standard, men på bedriftsenheter er de deaktivert.</translation>
 <translation id="5469825884154817306">Blokkér bilder på disse nettstedene</translation>
 <translation id="8412312801707973447">Angir om OCSP/CRL-kontroller utføres på nettet</translation>
 <translation id="6649397154027560979">Denne innstillingen er avviklet. Bruk URLBlacklist i stedet.
@@ -1039,6 +1044,7 @@
 
           Hvis denne innstillingen angis, deaktiveres høykontrastmodus når påloggingssiden vises for første gang. Brukere kan aktivere eller deaktivere høykontrastmodus når som helst, og dens status på påloggingssiden forblir den samme mellom brukere.</translation>
 <translation id="8580857153747395000">Advarsel når nettsteder som ikke inngår i innholdspakker åpnes.</translation>
+<translation id="350796261613621561">Aktiver oppretting av overvåkede brukere.</translation>
 <translation id="602728333950205286">Umiddelbar nettadresse for standard søkeleverandør</translation>
 <translation id="3030000825273123558">Aktiver rapportering av beregninger</translation>
 <translation id="6559057113164934677">Forby nettsteder fra å bruke kameraet og mikrofonen min</translation>
@@ -1064,6 +1070,9 @@
 <translation id="8864975621965365890">Ignorerer avslagsforespørselen som vises når et nettsted gjengis av <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Kodinger av standard søkeleverandør</translation>
 <translation id="285480231336205327">Aktiver modus for høy kontrast</translation>
+<translation id="5366977351895725771">Hvis angitt til «false» kan ikke denne brukeren opprette overvåkede brukere. Eksisterende overvåkede brukere er fortsatt tilgjengelige.
+
+          Hvis angitt til «true» eller ikke konfigurert, kan denne brukeren opprette og administrere overvåkede brukere.</translation>
 <translation id="8101760444435022591">Som et resultat av at opphevelsekontroller for myke systemstopp ikke gir noen effektiv sikkerhetsfordel, blir de som standard deaktivert for versjon 19 og nyere av <ph name="PRODUCT_NAME"/>. Hvis du angir denne innstillingen som Sann, gjenopprettes tidligere atferd. I tillegg blir OCSP/CRL-kontroller på nettet utført.</translation>
 <translation id="5469484020713359236">Gjør at du kan angi en liste over nettadressemønstre som spesifiserer hvilke nettsteder som får angi informasjonskapsler.
 
diff --git a/chrome/app/policy/policy_templates_pl.xtb b/chrome/app/policy/policy_templates_pl.xtb
index b8191be..0ced8ea 100644
--- a/chrome/app/policy/policy_templates_pl.xtb
+++ b/chrome/app/policy/policy_templates_pl.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Włącz automatyczne logowanie skrótem klawiszowym</translation>
 <translation id="3214164532079860003">W przypadku włączenia ta zasada wymusza zaimportowanie strony startowej z bieżącej przeglądarki domyślnej. Jeśli zasada będzie wyłączona, strona startowa nie zostanie zaimportowana. Jeśli ta zasada nie zostanie ustawiona, użytkownik może zobaczyć pytanie, czy zaimportować stronę, lub importowanie może odbyć się automatycznie.</translation>
 <translation id="5330684698007383292">Zezwalaj <ph name="PRODUCT_FRAME_NAME"/> na obsługę tych typów treści</translation>
+<translation id="6647965994887675196">Jeśli ta zasada ma wartość „prawda”, można tworzyć użytkowników nadzorowanych i logować się jako oni.
+
+          Jeśli ma ona wartość „fałsz” lub nie jest skonfigurowana, tworzenie użytkowników nadzorowanych i logowanie się jako oni jest wyłączone. Wszyscy istniejący użytkownicy nadzorowani zostają ukryci.
+
+          UWAGA: działanie domyślne różni się na urządzeniach dla użytkowników indywidualnych i dla firm. Na tych pierwszych funkcja użytkowników nadzorowanych jest domyślnie włączona, a na drugich – wyłączona.</translation>
 <translation id="5469825884154817306">Blokuj grafiki w tych witrynach</translation>
 <translation id="8412312801707973447">Czy wykonywane jest sprawdzanie OCSP/CRL online</translation>
 <translation id="6649397154027560979">Ta zasada została wycofana, zamiast niej użyj URLBlacklist.
@@ -870,6 +875,7 @@
 
           Jeśli zasada pozostanie nieustawiona, po pierwszym wyświetleniu ekranu logowania tryb wysokiego kontrastu jest wyłączony. Użytkownicy mogą go w każdej chwili włączyć lub wyłączyć i jego stan na ekranie logowania jest trwały dla wszystkich użytkowników.</translation>
 <translation id="8580857153747395000">Ostrzegaj przy odwiedzaniu witryn spoza pakietów treści.</translation>
+<translation id="350796261613621561">Włącz tworzenie użytkowników nadzorowanych.</translation>
 <translation id="602728333950205286">Adres URL wyszukiwania dynamicznego od domyślnego dostawcy wyszukiwania</translation>
 <translation id="3030000825273123558">Włącz raportowanie statystyk</translation>
 <translation id="6559057113164934677">Nie pozwalaj żadnym stronom na dostęp do kamery i mikrofonu</translation>
@@ -887,6 +893,9 @@
 <translation id="8864975621965365890">Pomija monit o odinstalowanie wyświetlany wtedy, gdy witryna jest renderowana przez <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Kodowania obsługiwane przez domyślnego dostawcę wyszukiwania</translation>
 <translation id="285480231336205327">Włącz tryb wysokiego kontrastu</translation>
+<translation id="5366977351895725771">Jeśli ta zasada ma wartość „fałsz”, ten użytkownik nie może tworzyć użytkowników nadzorowanych. Dotychczasowi użytkownicy nadzorowani będą nadal dostępni.
+
+          Jeśli ma ona wartość „prawda” lub nie jest skonfigurowana, ten użytkownik może tworzyć użytkowników nadzorowanych i zarządzać nimi.</translation>
 <translation id="8101760444435022591">Ponieważ sprawdzanie online, czy certyfikat nie został unieważniony (ignorowany z powodu błędu sieci) nie poprawia bezpieczeństwa, w <ph name="PRODUCT_NAME"/> 19 i nowszych wersjach jest domyślnie wyłączone. W przypadku włączenia tej zasady przywrócone zostanie wcześniejsze zachowanie i będzie wykonywane sprawdzanie OCSP/CRL online.
 
       Jeśli ta zasada nie zostanie ustawiona lub będzie wyłączona, Chrome w wersji 19 lub nowszej nie będzie sprawdzał unieważnień online.</translation>
diff --git a/chrome/app/policy/policy_templates_pt-BR.xtb b/chrome/app/policy/policy_templates_pt-BR.xtb
index c37e5c6..2cd5c13 100644
--- a/chrome/app/policy/policy_templates_pt-BR.xtb
+++ b/chrome/app/policy/policy_templates_pt-BR.xtb
@@ -71,6 +71,11 @@
 <translation id="3816312845600780067">Ativar atalho do teclado dp plano de salvação para login automático</translation>
 <translation id="3214164532079860003">Caso ativada, esta política força a página inicial a ser importada do navegador padrão atual. Se desativada, a página inicial não é importada. Caso não seja definida, o usuário pode ser solicitado a responder se deseja importar ou permitir a importação automática.</translation>
 <translation id="5330684698007383292">Permitir que o <ph name="PRODUCT_FRAME_NAME"/> trabalhe com os tipos de conteúdo a seguir</translation>
+<translation id="6647965994887675196">Se definida com verdadeira, será possível criar e utilizar usuários supervisionados.
+
+          Se definida como falsa ou não configurada, a criação e o login de usuários supervisionados serão desativados. Todos os usuários supervisionados existentes serão ocultos.
+
+          OBSERVAÇÃO: há uma diferença entre o comportamento padrão em dispositivos corporativos e de consumidores: em dispositivos de consumidores, os usuários supervisionados são ativados por padrão. Já em dispositivos corporativos, o padrão é os usuários supervisionados estarem desativados.</translation>
 <translation id="5469825884154817306">Bloquear imagens nestes sites</translation>
 <translation id="8412312801707973447">Define se as verificações on-line de OCSP/CRL devem ser executadas</translation>
 <translation id="6649397154027560979">Esta política teve o uso suspenso. Em vez dela, use URLBlacklist.
@@ -840,6 +845,7 @@
 
           Se esta política não for definida, o modo de alto contraste será desativado quando a tela de login for exibida pela primeira vez. Os usuários podem ativar ou desativar o modo de alto contraste a qualquer momento e seu status na tela de login continuará entre os usuários.</translation>
 <translation id="8580857153747395000">Avisar ao visitar sites fora de pacotes de conteúdo.</translation>
+<translation id="350796261613621561">Ativa a criação de usuários supervisionados.</translation>
 <translation id="602728333950205286">URL instantâneo do provedor de pesquisa padrão</translation>
 <translation id="3030000825273123558">Ativa relatórios de métricas</translation>
 <translation id="6559057113164934677">Não permitir que nenhum site acesse minha câmera e meu microfone</translation>
@@ -857,6 +863,9 @@
 <translation id="8864975621965365890">Remove a solicitação de recusa que aparece quando um site é processado pelo <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Codificações do provedor de pesquisa padrão</translation>
 <translation id="285480231336205327">Ativar modo de alto contraste</translation>
+<translation id="5366977351895725771">Se definida como falsa, a criação de usuários supervisionados por este usuário será desativada. Quaisquer usuários supervisionados existentes permanecerão disponíveis.
+
+          Se definida como verdadeira ou não configurada, este usuário poderá criar e gerenciar usuários supervisionados.</translation>
 <translation id="8101760444435022591">Levando em consideração que as verificações soft-fail de revogação on-line não oferecem qualquer benefício de segurança eficaz, elas são desativadas por padrão nas versões 19 e posteriores do <ph name="PRODUCT_NAME"/>. Ao configurar true para esta política, o comportamento anterior será restaurado e as verificações on-line de OCSP/CRL serão realizadas. Se essa política não for configurada, ou for configurada para como false, o Google Chrome não realizará verificações de revogação on-line no Google Chrome 19 e posteriores.</translation>
 <translation id="5469484020713359236">Permite que você defina uma lista de padrões de URL que especificam sites com permissão para definir cookies. Se esta política for deixada sem definição, o valor padrão global será utilizado para todos os sites a partir da política &quot;DefaultCookiesSetting&quot;, caso esta tenha sido definida, ou a partir das configurações pessoais do usuário, caso não tenha sido definida.</translation>
 <translation id="1504431521196476721">Declaração remota</translation>
diff --git a/chrome/app/policy/policy_templates_pt-PT.xtb b/chrome/app/policy/policy_templates_pt-PT.xtb
index 6743b90..9c3f716 100644
--- a/chrome/app/policy/policy_templates_pt-PT.xtb
+++ b/chrome/app/policy/policy_templates_pt-PT.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Ativar o atalho de teclado de resgate para o início de sessão automático</translation>
 <translation id="3214164532079860003">Quando esta política está ativada, força a importação da página inicial a partir do navegador predefinido atual. Se estiver desativada, a página inicial não é importada. Se não estiver definida, o utilizador poderá ser questionado se pretende importá-la ou a importação poderá ocorrer automaticamente.</translation>
 <translation id="5330684698007383292">Permitir que o <ph name="PRODUCT_FRAME_NAME"/> processe os seguintes tipos de conteúdo</translation>
+<translation id="6647965994887675196">Se definido como &quot;true&quot;, é possível criar e utilizar utilizadores supervisionados.
+
+          Se definido como &quot;false&quot; ou não configurado, é desativada a criação e o início de sessão de utilizadores supervisionados. Todos os utilizadores supervisionados ficarão ocultos.
+
+          NOTA: O comportamento predefinido para dispositivos empresariais e de consumidor difere: em dispositivos de consumidor, os utilizadores supervisionados estão ativados por predefinição, enquanto que nos dispositivos empresariais estão desativados por predefinição.</translation>
 <translation id="5469825884154817306">Bloquear imagens nesses sites</translation>
 <translation id="8412312801707973447">Se são ou não efetuadas verificações OCSP/CRL on-line</translation>
 <translation id="6649397154027560979">Esta política está desatualizada. Em vez disso, utilize URLBlacklist.
@@ -887,6 +892,7 @@
 
           Se esta política não for definida, o modo de alto contraste é desativado quando o ecrã de início de sessão é mostrado pela primeira vez. Os utilizadores podem ativar ou desativar o modo de alto contraste a qualquer momento e o seu estado no ecrã de início de sessão persiste entre utilizadores.</translation>
 <translation id="8580857153747395000">Avisar quando estiver a visitar sites fora dos pacotes de conteúdo.</translation>
+<translation id="350796261613621561">Permitir a criação de utilizadores supervisionados.</translation>
 <translation id="602728333950205286">URL instantâneo do fornecedor de pesquisas predefinido</translation>
 <translation id="3030000825273123558">Ativar relatório de métricas</translation>
 <translation id="6559057113164934677">Não permitir que nenhum site aceda à câmara e microfone</translation>
@@ -904,6 +910,9 @@
 <translation id="8864975621965365890">Suprime o pedido de recusa que aparece quando um site é convertido por <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Codificações do fornecedor de pesquisas predefinido</translation>
 <translation id="285480231336205327">Ativar modo de alto contraste</translation>
+<translation id="5366977351895725771">Se definido como &quot;false&quot;, é desativada a criação de utilizadores supervisionados por parte deste utilizador. Todos os utilizadores supervisionados continuarão disponíveis.
+
+          Se definido como &quot;true&quot; ou não configurado, é possível criar e gerir utilizadores supervisionados por parte deste utilizador.</translation>
 <translation id="8101760444435022591">Uma vez que as verificações de revogação on-line &quot;softfail&quot; não oferecem nenhum benefício de segurança eficaz, estas estão desativadas por predefinição na versão 19 do <ph name="PRODUCT_NAME"/> e posterior. Ao definir esta política como verdadeira, o comportamento anterior é restaurado e são efetuadas as verificações OCSP/CRL on-line.
 
       Se a política não estiver definida ou estiver definida como falsa, o Chrome não irá efetuar verificações de revogação on-line no Chrome 19 e posterior.</translation>
diff --git a/chrome/app/policy/policy_templates_ro.xtb b/chrome/app/policy/policy_templates_ro.xtb
index 9ab07a9..8762b0b 100644
--- a/chrome/app/policy/policy_templates_ro.xtb
+++ b/chrome/app/policy/policy_templates_ro.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Activați comanda rapidă de la tastatură de rezervă pentru conectarea automată</translation>
 <translation id="3214164532079860003">Dacă este activată, această politică forțează importarea paginii de pornire din browserul prestabilit actual. Dacă este dezactivată, pagina de pornire nu este importată. Dacă nu este setată, este posibil ca utilizatorul să fie întrebat dacă se efectuează importarea sau aceasta ar putea avea loc în mod automat.</translation>
 <translation id="5330684698007383292">Permiteți ca <ph name="PRODUCT_FRAME_NAME"/> să gestioneze următoarele tipuri de conținut</translation>
+<translation id="6647965994887675196">Dacă această politică este activată, pot fi creați și folosiți utilizatori monitorizați.
+
+          Dacă această politică nu este activată sau configurată, crearea și conectarea utilizatorilor monitorizați vor fi dezactivate. Toți utilizatorii monitorizați existenți vor fi ascunși.
+
+          NOTĂ: comportamentul prestabilit pentru dispozitivele destinate consumatorilor și întreprinderilor diferă: utilizatorii monitorizați sunt activați în mod prestabilit pe dispozitivele destinate consumatorilor, iar pe dispozitivele destinate întreprinderilor, aceștia sunt dezactivați în mod prestabilit.</translation>
 <translation id="5469825884154817306">Blocați imagini de pe aceste site-uri</translation>
 <translation id="8412312801707973447">Această politică stabilește dacă sunt efectuate verificări OCSP/CRL online</translation>
 <translation id="6649397154027560979">Această politică este învechită. Utilizați, în schimb, URLBlacklist.
@@ -884,6 +889,7 @@
 
           Dacă această politică nu este configurată, modul de contrast ridicat este dezactivat la afișarea inițială a ecranului de conectare. Utilizatorii pot oricând să activeze sau să dezactiveze modul de contrast ridicat, iar starea sa pe ecranul de conectare persistă de la un utilizator la altul.</translation>
 <translation id="8580857153747395000">Utilizatorii sunt avertizați când accesează site-uri din afara pachetelor de conținut.</translation>
+<translation id="350796261613621561">Permiteți crearea utilizatorilor monitorizați.</translation>
 <translation id="602728333950205286">Adresa URL instant a furnizorului de căutare prestabilit</translation>
 <translation id="3030000825273123558">Activați raportarea statisticilor</translation>
 <translation id="6559057113164934677">Nu permiteți niciunui site să acceseze camera și microfonul</translation>
@@ -901,6 +907,9 @@
 <translation id="8864975621965365890">Elimină solicitarea de refuzare care apare atunci când un site web este redat de <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Codificări pentru furnizorul de căutare prestabilit</translation>
 <translation id="285480231336205327">Activați modul de contrast ridicat</translation>
+<translation id="5366977351895725771">Dacă această politică nu este activată, crearea utilizatorilor monitorizați de către acest utilizator va fi dezactivată. Utilizatorii monitorizați existenți vor fi în continuare disponibili.
+
+          Dacă această politică este activată sau nu este configurată, acest utilizator poate crea și gestiona utilizatori monitorizați.</translation>
 <translation id="8101760444435022591">Deoarece software-ul poate eșua, verificările de revocare online nu oferă avantaje de securitate clare, acestea fiind dezactivate în mod prestabilit în <ph name="PRODUCT_NAME"/> versiunea 19 și versiunile ulterioare. Prin activarea acestei politici, comportamentul anterior este restabilit și sunt efectuate verificări OCSP/CRL online.
 
       Dacă politica nu este setată sau nu este activată, atunci Chrome nu va efectua verificări de revocare online în Chrome 19 și versiunile ulterioare.</translation>
diff --git a/chrome/app/policy/policy_templates_ru.xtb b/chrome/app/policy/policy_templates_ru.xtb
index 6347977..1ee0064 100644
--- a/chrome/app/policy/policy_templates_ru.xtb
+++ b/chrome/app/policy/policy_templates_ru.xtb
@@ -71,6 +71,11 @@
 <translation id="3816312845600780067">Поддержка быстрых клавиш при выполнении автоматического входа</translation>
 <translation id="3214164532079860003">Это правило импортирует главную страницу из текущего браузера по умолчанию. Если оно отключено, главная страница не импортируется, а если не настроено, страница может быть импортирована автоматически либо пользователю может быть предложено импортировать ее.</translation>
 <translation id="5330684698007383292">Типы содержания, которые <ph name="PRODUCT_FRAME_NAME"/> может обрабатывать</translation>
+<translation id="6647965994887675196">Если для правила задано значение &quot;true&quot;, на устройстве можно создавать и использовать контролируемые профили.
+
+          Если задано значение &quot;false&quot; или значение не задано, нельзя будет создавать контролируемые профили и входить в них. Все существующие контролируемые профили будут скрыты.
+
+          ПРИМЕЧАНИЕ. На пользовательских и корпоративных устройствах применяются разные настройки по умолчанию: на пользовательских устройствах поддержка контролируемых профилей включена, а на корпоративных – отключена.</translation>
 <translation id="5469825884154817306">Блокировать изображения на этих сайтах</translation>
 <translation id="8412312801707973447">Выполняются ли проверки OCSP/CRL в режиме онлайн</translation>
 <translation id="6649397154027560979">Это правило устарело, используйте вместо него правило URLBlacklist.
@@ -875,6 +880,7 @@
 
           Если значение правила не задано, при первом переходе на экран входа режим высокой контрастности будет отключен. Пользователи могут его в любое время включить и отключить, а его статус будет виден всем пользователям на экране входа.</translation>
 <translation id="8580857153747395000">Предупреждение пользователя о том, что он переходит на сайт, не включенный в пакет контента.</translation>
+<translation id="350796261613621561">Включить поддержку контролируемых профилей.</translation>
 <translation id="602728333950205286">URL Живого поиска для поисковой системы по умолчанию</translation>
 <translation id="3030000825273123558">Включить передачу статистической информации</translation>
 <translation id="6559057113164934677">Запрет доступа сайтов к камере и микрофону</translation>
@@ -892,6 +898,9 @@
 <translation id="8864975621965365890">Скрывает подсказку, которая появляется, если сайт обрабатывается <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Кодировки поисковой системы по умолчанию</translation>
 <translation id="285480231336205327">Включить режим высокой контрастности</translation>
+<translation id="5366977351895725771">Если для правила задано значение &quot;false&quot;, этот пользователь не сможет создавать контролируемые профили. При этом все существующие контролируемые профили будут доступны.
+
+          Если задано значение &quot;true&quot; или значение не задано, этот пользователь сможет создавать контролируемые профили и управлять ими.</translation>
 <translation id="8101760444435022591">Так как проверки отозванных сертификатов в реальном времени и безопасном режиме не дают существенного улучшения безопасности, в <ph name="PRODUCT_NAME"/> 19 и более поздних версиях они по умолчанию отключены. Установка этого правила обеспечивает восстановление предыдущего режима работы с проведением проверок OCSP/CRL.
 
       Если эти правила не установлены или определены неверно, в Chrome 19 и более поздних версиях подобная проверка проводиться не будет.</translation>
diff --git a/chrome/app/policy/policy_templates_sk.xtb b/chrome/app/policy/policy_templates_sk.xtb
index a22a77f..6a6fe39 100644
--- a/chrome/app/policy/policy_templates_sk.xtb
+++ b/chrome/app/policy/policy_templates_sk.xtb
@@ -85,6 +85,11 @@
       Ak je zakázané, domovská stránka sa neimportuje.
       Ak nie je nastavené, môže sa používateľovi zobraziť výzva, či chce domovskú stránku importovať, alebo môže import prebehnúť automaticky.</translation>
 <translation id="5330684698007383292">Povoliť doplnku <ph name="PRODUCT_FRAME_NAME"/> spracovávať nasledujúce typy obsahu</translation>
+<translation id="6647965994887675196">Ak toto pravidlo nastavíte na hodnotu true, bude možné vytvárať a používať kontrolovaných používateľov.
+
+          Ak toto pravidlo nenakonfigurujete alebo ho nastavíte na hodnotu false, bude vytváranie a prihlasovanie kontrolovaných používateľov zakázané. Všetci existujúci kontrolovaní používatelia budú skrytí.
+
+          POZNÁMKA: Predvolené správanie pre zákaznícke a podnikové zariadenia sa líši. V zákazníckych zariadeniach budú kontrolovaní používatelia v predvolenom nastavení povolení, zatiaľ čo v podnikových zariadeniach budú zakázaní.</translation>
 <translation id="5469825884154817306">Blokovať obrázky na týchto stránkach</translation>
 <translation id="8412312801707973447">Či sa majú vykonávať kontroly OCSP/CRL online</translation>
 <translation id="6649397154027560979">Podpora tohto pravidla je ukončená. Použite namiesto neho pravidlo URLBlacklist.
@@ -1112,6 +1117,7 @@
 
           Ak toto pravidlo ponecháte nenastavené, bude režim vysokého kontrastu pri prvom zobrazení prihlasovacej obrazovky zakázaný. Používatelia budú môcť režim vysokého kontrastu kedykoľvek povoliť alebo zakázať a jeho stav na prihlasovacej obrazovke sa zachová aj po zmene používateľov.</translation>
 <translation id="8580857153747395000">Upozorniť na návštevu stránky, ktorá je mimo balíkov obsahu.</translation>
+<translation id="350796261613621561">Povoliť vytváranie kontrolovaných používateľov.</translation>
 <translation id="602728333950205286">Adresa URL dynamického vyhľadávania predvoleného poskytovateľa vyhľadávania</translation>
 <translation id="3030000825273123558">Povoliť hlásenia o metrikách</translation>
 <translation id="6559057113164934677">Nepovoliť žiadnym stránkam používať kameru a mikrofón</translation>
@@ -1137,6 +1143,9 @@
 <translation id="8864975621965365890">Potlačí výzvu o zamietnutie, ktorá sa zobrazí pri vykreslení stránky rámcom <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Kódovania predvoleného poskytovateľa vyhľadávania</translation>
 <translation id="285480231336205327">Povoliť režim s vysokým kontrastom</translation>
+<translation id="5366977351895725771">Ak toto pravidlo nastavíte na hodnotu false, bude vytváranie a prihlasovanie kontrolovaných používateľov zakázané. Všetci existujúci kontrolovaní používatelia budú stále k dispozícii.
+
+          Ak toto pravidlo nenakonfigurujete alebo ho nastavíte na hodnotu true, tento používateľ bude môcť vytvárať a spravovať kontrolovaných používateľov.</translation>
 <translation id="8101760444435022591">Vzhľadom na skutočnosť, že kontroly zrušenia typu soft-fail neposkytujú z hľadiska bezpečnosti žiadne efektívne výhody, sú v predvolenom nastavení prehliadača <ph name="PRODUCT_NAME"/> verzie 19 a novších zakázané. Ak toto pravidlo nastavíte na hodnotu true, obnoví sa predchádzajúca konfigurácia a začnú sa vykonávať kontroly OCSP/CLR online.
 
       Ak pravidlo nenastavíte alebo ho nastavíte na hodnotu false, prehliadač Chrome verzie 19 a novších nebude vykonávať kontroly zrušenia online.</translation>
diff --git a/chrome/app/policy/policy_templates_sl.xtb b/chrome/app/policy/policy_templates_sl.xtb
index 549f89b..6a238ea 100644
--- a/chrome/app/policy/policy_templates_sl.xtb
+++ b/chrome/app/policy/policy_templates_sl.xtb
@@ -90,6 +90,11 @@
 
       Če ni nastavljen, bo uporabnik morda vprašan, ali naj jo uvozi, ali pa bo uvoz izveden samodejno.</translation>
 <translation id="5330684698007383292">Dovoli, da <ph name="PRODUCT_FRAME_NAME"/> obravnava te vrste vsebine.</translation>
+<translation id="6647965994887675196">Če je pravilnik vklopljen, je mogoče ustvariti in uporabiti nadzorovane uporabnike.
+
+          Če pravilnik ni vklopljen ali ni nastavljen, ustvarjanje in prijava nadzorovanih uporabnikov nista mogoča. Vsi obstoječi nadzorovani uporabniki so skriti.
+
+          OPOMBA: Privzeta nastavitev se razlikuje v napravah za potrošnike in napravah za podjetja: v napravah za potrošnike so nadzorovani uporabniki privzeto omogočeni, v napravah za podjetja pa privzeto onemogočeni.</translation>
 <translation id="5469825884154817306">Blokiranje slik na teh mestih</translation>
 <translation id="8412312801707973447">Ali se izvaja spletni pregled OCSP/CRL</translation>
 <translation id="6649397154027560979">Ta pravilnik je zastarel, Namesto njega uporabite URLBlacklist.
@@ -1131,6 +1136,7 @@
 
           Če ta pravilnik ni vklopljen, je visokokontrastni način onemogočen, ko je prvič prikazan prijavni zaslon. Uporabniki lahko kadar koli omogočijo ali onemogočijo lupo, pri čemer se njegovo stanje na prijavnem zaslonu ohrani med uporabniki.</translation>
 <translation id="8580857153747395000">Opozori pri odpiranju spletnih mest zunaj paketov vsebine.</translation>
+<translation id="350796261613621561">Omogočanje ustvarjanja nadzorovanih uporabnikov.</translation>
 <translation id="602728333950205286">Privzeti URL iskalnika za dinamično iskanje</translation>
 <translation id="3030000825273123558">Omogoči pošiljanje podatkov</translation>
 <translation id="6559057113164934677">Ne dovoli nobenemu spletnemu mestu dostopa do kamere in mikrofona</translation>
@@ -1156,6 +1162,9 @@
 <translation id="8864975621965365890">Ne prikaže poziva za preklop, ki se prikaže, ko se spletno mesto upodablja z <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Privzeto kodiranje iskalnika</translation>
 <translation id="285480231336205327">Omogoči visokokontrastni način</translation>
+<translation id="5366977351895725771">Če pravilnik ni vklopljen, ta uporabnik ne more ustvarjati nadzorovanih uporabnikov. Obstoječi nadzorovani uporabniki so še vedno na voljo.
+
+          Če je pravilnik vklopljen ali ni nastavljen, lahko ta uporabnik ustvarja in upravlja nadzorovane uporabnike.</translation>
 <translation id="8101760444435022591">Ker mehko preverjanje preklica ne zagotavlja dodatne varnosti, je v brskalniku <ph name="PRODUCT_NAME"/> različice 19 ali novejšem privzeto onemogočeno. Če ta pravilnik omogočite, so obnovljene prejšnje nastavitve in spletni pregled OCSP/CRL se izvaja.
 
       Če pravilnik ni nastavljen ali ga onemogočite, Google Chrome v različici 19 ali novejši ne bo izvajal spletnega pregleda preklica.</translation>
diff --git a/chrome/app/policy/policy_templates_sr.xtb b/chrome/app/policy/policy_templates_sr.xtb
index ea68772..30c8396 100644
--- a/chrome/app/policy/policy_templates_sr.xtb
+++ b/chrome/app/policy/policy_templates_sr.xtb
@@ -86,6 +86,11 @@
 
       Ако нису подешене, корисник ће можда бити упитан да ли жели да је увезе или се увоз аутоматски одвија.</translation>
 <translation id="5330684698007383292">Дозволи <ph name="PRODUCT_FRAME_NAME"/>-у да рукује следећим типовима садржаја</translation>
+<translation id="6647965994887675196">Ако се подеси на „тачно“, омогућава се прављење и коришћење корисника под надзором.
+
+          Ако се подеси на „нетачно“ или се не конфигурише, онемогућава се прављење корисника под надзором и његово пријављивање. Сви постојећи корисници под надзором биће скривени.
+
+          НАПОМЕНА: Подразумевано понашање за уређаје корисника и уређаје предузећа се разликује – корисници под надзором су подразумевано омогућени на уређајима корисника, док су на уређајима предузећа подразумевано онемогућени.</translation>
 <translation id="5469825884154817306">Блокирај слике на овим сајтовима</translation>
 <translation id="8412312801707973447">Да ли се обављају OCSP/CRL провере на мрежи</translation>
 <translation id="6649397154027560979">Ове смернице су застареле, уместо њих користите URLBlacklist.
@@ -1115,6 +1120,7 @@
 
           Ако не подесите ове смернице, режим високог контраста ће бити онемогућен када се екран за пријављивање прикаже по први пут. Корисници ће моћи да омогуће или онемогуће режим високог контраста у било ком тренутку и његов статус на екрану за пријављивање ће бити трајан за кориснике.</translation>
 <translation id="8580857153747395000">Упозори ме када посећујем сајтове изван пакета садржаја.</translation>
+<translation id="350796261613621561">Омогућавање прављења корисника под надзором.</translation>
 <translation id="602728333950205286">Инстант URL адреса подразумеваног добављача претраге</translation>
 <translation id="3030000825273123558">Омогућавање пријављивања показатеља</translation>
 <translation id="6559057113164934677">Не дозволи ниједном сајту да приступа камери и микрофону</translation>
@@ -1140,6 +1146,9 @@
 <translation id="8864975621965365890">Спречава приказивање упита за одбијање који се појављује када <ph name="PRODUCT_FRAME_NAME"/> приказује сајт.</translation>
 <translation id="3264793472749429012">Кодирања подразумеваног добављача претраге</translation>
 <translation id="285480231336205327">Омогући режим високог контраста</translation>
+<translation id="5366977351895725771">Ако се подеси на „нетачно“, овом кориснику се онемогућава прављење корисника под надзором. Сви постојећи корисници под надзором биће и даље доступни.
+
+          Ако се подеси на „тачно“ или се не конфигурише, овај корисник ће моћи да прави кориснике под надзором и управља њима.</translation>
 <translation id="8101760444435022591">У светлу чињенице да провере опозива на мрежи са софтверским грешкама не пружају никакве стварне безбедносне погодности, оне су подразумевано онемогућене у верзији 19 и новијим верзијама производа <ph name="PRODUCT_NAME"/>. Подешавањем ових смерница на Тачно претходно понашање се враћа и OCSP/CRL провере на мрежи ће се обављати.
 
       Ако смернице не буду подешене или буду подешене на Нетачно, Chrome неће обављати провере опозива на мрежи у Chrome-у 19 и новијим верзијама.</translation>
diff --git a/chrome/app/policy/policy_templates_sv.xtb b/chrome/app/policy/policy_templates_sv.xtb
index 716bc22..108381e 100644
--- a/chrome/app/policy/policy_templates_sv.xtb
+++ b/chrome/app/policy/policy_templates_sv.xtb
@@ -90,6 +90,11 @@
 
       Om policyn inte ställs in kan användaren tillfrågas om han eller hon vill importera, eller så kan importen göras automatiskt.</translation>
 <translation id="5330684698007383292">Tillåt att <ph name="PRODUCT_FRAME_NAME"/> hanterar följande innehållstyper</translation>
+<translation id="6647965994887675196">Om &quot;true&quot; anges kan övervakade användare skapas och användas.
+
+          Om &quot;false&quot; anges eller om ingen konfiguration utförs inaktiveras alternativet att skapa övervakade användare och att logga in. Alla befintliga övervakade användare döljs.
+
+          OBS! Standardbeteendet skiljer sig åt mellan kund- och företagsenheter: på kundenheter aktiveras övervakade användare som standard men på företagsenheter inaktiveras de som standard.</translation>
 <translation id="5469825884154817306">Blockera bilder på dessa webbplatser</translation>
 <translation id="8412312801707973447">Anger huruvida OCSP/CRL-onlinekontroller ska utföras</translation>
 <translation id="6649397154027560979">Den här principen är föråldrad, använd URLBlacklist i stället.
@@ -1126,6 +1131,7 @@
 
           Om den här principen inte anges är högkontrastläget inaktiverat första gången som inloggningsskärmen visas. Användarna kan aktivera eller inaktivera högkontrastläget när som helst och dess status på inloggningsskärmen sparas.</translation>
 <translation id="8580857153747395000">Varna när du besöker webbplatser utanför innehållspaketet.</translation>
+<translation id="350796261613621561">Aktivera alternativet att skapa övervakade användare.</translation>
 <translation id="602728333950205286">Dynamisk webbadress för standardsökleverantör</translation>
 <translation id="3030000825273123558">Aktivera statistikrapportering</translation>
 <translation id="6559057113164934677">Tillåt inte att webbplatser kommer åt min kamera och mikrofon</translation>
@@ -1151,6 +1157,9 @@
 <translation id="8864975621965365890">Ser till att avvisningsmeddelandet som visas när en webbplats renderas av <ph name="PRODUCT_FRAME_NAME"/> inte visas.</translation>
 <translation id="3264793472749429012">Kodningar för standardsökleverantör</translation>
 <translation id="285480231336205327">Aktivera läge för hög kontrast</translation>
+<translation id="5366977351895725771">Om &quot;false&quot; anges inaktiveras alternativet att skapa övervakade användare för den här användaren. Eventuella befintliga övervakade användare är fortfarande tillgängliga.
+
+          Om &quot;true&quot; anges eller ingen konfiguration utförs kan den här användaren skapa och hantera övervakade användare.</translation>
 <translation id="8101760444435022591">Eftersom återkallelsekontroller online vid programfel inte ger någon effektiv säkerhetsfördel är de inaktiverade som standard i <ph name="PRODUCT_NAME"/> version 19 och senare. Om du aktiverar den här policyn återställs den tidigare inställningen och OCSP/CRL-onlinekontroller utförs.
 
       Om policyn inte ställs in eller ställs in på falskt görs ingen återkallelsekontroll online i Chrome 19.</translation>
diff --git a/chrome/app/policy/policy_templates_sw.xtb b/chrome/app/policy/policy_templates_sw.xtb
index b636188..4c3ac06 100644
--- a/chrome/app/policy/policy_templates_sw.xtb
+++ b/chrome/app/policy/policy_templates_sw.xtb
@@ -83,6 +83,11 @@
 
       Ikiwa hautawekwa, huenda mtumiaji akaombwa kuleta, au huenda uletaji ukatendeka kiotomatiki.</translation>
 <translation id="5330684698007383292">Ruhusu <ph name="PRODUCT_FRAME_NAME"/> kushughulikia aina zifuatazo za maudhui</translation>
+<translation id="6647965994887675196">Kama iwekwa kuwa kweli, watumiaji wanaosimamiwa wanaweza kuundwa na kutumiwa.
+
+         Kama imewekwa kuwa uwongo au haijasanidiwa, uundaji wa mtumiaji wa kusimamiwa na kuingia katika akaunti kutalemazwa. Watumiaji wote wa kusimamiwa watafichwa.
+
+          KUMBUKA: Tabia chaguo-msingi ya vifaa vya watumiaji na biashara zinatofautiana: kwenye vifaa vya watumiaji watumiaji wa kusimamiwa huwashwa kama chaguo-msingi, lakini kwenye vifaa vya biashara wao huzimwa kama chaguo-msingi.</translation>
 <translation id="5469825884154817306">Zuia picha katika tovuti hizi</translation>
 <translation id="8412312801707973447">Ikiwa ukaguzi wa mtandaoni wa OCSP/CRL umeatekelezwa</translation>
 <translation id="6649397154027560979">Sera hii imeacha kuendesha huduma, tafadhali tumia URL Zilizoondolewa Idhini badala yake. 
@@ -1039,15 +1044,15 @@
 
       Vifaa <ph name="PRODUCT_OS_NAME"/> vinakagua visasisho kiotomatiki wakati mpangilio huu haujasanidiwa au umewekwa kuwa Sivyo.</translation>
 <translation id="6190022522129724693">Mpangilio chaguo-msingi za ibukizi</translation>
-<translation id="847472800012384958">Usiruhusu tovuti yoyote kuonyesha viibukizi</translation>
+<translation id="847472800012384958">Usiruhusu tovuti yoyote kuonyesha madirisha ibukizi</translation>
 <translation id="4733471537137819387">Sera zinazohusiana na uthibitishaji wa HTTP jumuishi.</translation>
 <translation id="8951350807133946005">Weka saraka ya akiba ya diski</translation>
 <translation id="2592091433672667839">Muda wa shughuli kabla ya seva ya skrini kuonyeshwa kwenye skrini ya kuingia katika modi ya rejareja</translation>
 <translation id="166427968280387991">Seva ya proksi</translation>
-<translation id="2805707493867224476">Ruhusu tovuti zote zionyeshe viibukizi</translation>
+<translation id="2805707493867224476">Ruhusu tovuti zote zionyeshe madirisha ibukizi</translation>
 <translation id="1727394138581151779">Zuia programu jalizi zote</translation>
 <translation id="8118665053362250806">Weka ukubwa wa media ya akiba ya diski</translation>
-<translation id="7079519252486108041">Zuia viibukizi kwenye tovuti hizi</translation>
+<translation id="7079519252486108041">Zuia madirisha ibukizi kwenye tovuti hizi</translation>
 <translation id="1859633270756049523">Punguza urefu wa kipindi</translation>
 <translation id="7433714841194914373">Wezesha Papo hapo</translation>
 <translation id="4983201894483989687">Ruhusu kuendesha programu jalizi ambazo zimepitwa na wakati.</translation>
@@ -1101,6 +1106,7 @@
 Iwapo utaweka sera hii, watumiaji wanaweza kwa muda kuipuuza kwa kuwasha au kuzima hali ya juu ya utofautishaji. Hata hivyo, chaguo la mtumiaji halitaendelea na chaguo-msingi  hurejeshwa tena wakati wowote skrini ya kuingia katika akaunto inapoonyeshwa upya au mtumiaji anaposalia bila kufanya kitu kwenye skrini ya kuingia katika akaunti kwa dakika moja. 
 Iwapo sera hii haijawekwa, hali ya juu ya utoafautishaji huzimwa wakati skrini ya kuingia katika akaunti inapoonyeshwa kwanza. Watumiaji wanaweza kuwasha au kuzima hali ya juu ya utofautishaji wakati wowote na hali yake kwenye skrini ya kuingia katika akaunti inaendelea kati ya watumiaji.</translation>
 <translation id="8580857153747395000">Onya ninapotembelea tovuti zilizo nje ya mafurushi ya maudhui.</translation>
+<translation id="350796261613621561">Washa uundaji wa watumiaji wa kusimamiwa.</translation>
 <translation id="602728333950205286">URL ya papo hapo ya kitoaji chaguo-msingi cha utafutaji</translation>
 <translation id="3030000825273123558">Wezesha kuripoti kwa metriki</translation>
 <translation id="6559057113164934677">Usiruhusu tovuti yoyote kufikia kamera na maikrofoni yangu</translation>
@@ -1126,6 +1132,9 @@
 <translation id="8864975621965365890">Didimiza kukataa kuuliza ambako huonekana tovuti inapotolewa na <ph name="PRODUCT_FRAME_NAME"/> .</translation>
 <translation id="3264793472749429012">Usimbaji wa kitoaji chaguo-msingi cha utafutaji</translation>
 <translation id="285480231336205327">Wezesha modi ya juu ya kulinganua</translation>
+<translation id="5366977351895725771">Kama imewekwa kama uongo, uundaji wa mtumiaji wa kusimamiwa na mtumiaji huyu utazimwa. Bado mtumiaji yeyote wa kusimamiwa wa sasa atapatikana.
+
+          Kama ikiwekwa kuwa kweli au haijasanidiwa,watumiaji wa kusimamiwa wanaweza kuundwa na kusimamiwa na mtumiaji huyu.</translation>
 <translation id="8101760444435022591">Kwa sababu ya Ndivyo kwamba kushindwa kwa baadhi ya vipengee, ukaguzi wa ubatilishaji wa mtandaoni hautio usalama bora unaofanya inayofanya kazi, utalemazwa kwa chaguo-msingi katika toleo la 19 la <ph name="PRODUCT_NAME"/> na baadaye. Kwa kuweka sera hii kuwa kweli, tabia ya awali inahifadhiwa upya na ukaguzi wa mtandaoni wa OCSP/CRL utatekelezwa.
 
       Ikiwa sera hii haitawekwa, au kuwekwa kwenye Sivyo, basi Chrome haitatekeleza ukaguzi wa ubatilishaji wa mtandao katika Chrome 19 na baadaye.</translation>
diff --git a/chrome/app/policy/policy_templates_ta.xtb b/chrome/app/policy/policy_templates_ta.xtb
index f06a165..a2aa82a 100644
--- a/chrome/app/policy/policy_templates_ta.xtb
+++ b/chrome/app/policy/policy_templates_ta.xtb
@@ -72,6 +72,11 @@
 <translation id="3816312845600780067">தானியங்கு உள்நுழைவுக்கு மீட்பு விசைப்பலகை குறுக்குவழியை இயக்கவும்</translation>
 <translation id="3214164532079860003">தற்போதைய இயல்புநிலை உலாவி இயக்கத்தில் இருந்தால் முகப்புப்பக்கத்தை இறக்குமதி செய்ய இந்தக் கொள்கை தூண்டுகிறது. அது முடக்கப்பட்டால், முகப்புப்பக்கத்தை இறக்குமதி செய்ய முடியாது. இது அமைக்கப்படவில்லை எனில், இறக்குமதி செய்யலாமா என பயனரிடம் கேட்கப்படும் அல்லது தானாக இறக்குமதியாகும்.</translation>
 <translation id="5330684698007383292">பின்வரும் உள்ளடக்க வகைகளைக் கையாள <ph name="PRODUCT_FRAME_NAME"/> ஐ அனுமதி</translation>
+<translation id="6647965994887675196">சரி என அமைக்கப்பட்டால், கண்காணிக்கப்படும் பயனர்களை உருவாக்கி, அவர்களைப் பயன்படுத்த முடியும்.
+
+         தவறு என அமைக்கப்பட்டால் அல்லது உள்ளமைக்கப்படாவிட்டால், கண்காணிக்கப்படும் பயனரை உருவாக்குதல் மற்றும் உள்நுழைதல் முடக்கப்படும். ஏற்கனவே இருக்கும் அனைத்து கண்காணிக்கப்படும் பயனர்களும் மறைக்கப்படுவார்கள்.
+
+          குறிப்பு: நுகர்வோர் மற்றும் நிறுவன சாதனங்களுக்கான இயல்புநிலை செயல்முறை மாறுபடும்: நுகர்வோர் சாதனங்களில் கண்காணிக்கப்படும் பயனர்கள் இயல்புநிலையில் இயக்கப்படுவார்கள், ஆனால் நிறுவன சாதனங்களில் இயல்பாகவே அவர்கள் முடக்கப்படுவார்கள்.</translation>
 <translation id="5469825884154817306">இந்த தளங்களில் படங்களை தடு</translation>
 <translation id="8412312801707973447">ஆன்லைன் OCSP/CRL சோதனைகள் செயல்படுகின்றனவா</translation>
 <translation id="6649397154027560979">இந்தக் கொள்கைத் தடுக்கப்பட்டது, பதிலாக URLBlacklist ஐப் பயன்படுத்தவும்.
@@ -881,6 +886,7 @@
 
           இந்தக் கொள்கை அமைக்கப்படாமல் இருந்தால், உள்நுழைவுத் திரை முதலில் காண்பிக்கப்படும்போது அதிக ஒளி மாறுபாட்டுப் பயன்முறை முடக்கப்படும். உள்நுழைவுத் திரையில் பயனர்கள் எந்த நேரத்திலும் அதிக ஒளி மாறுபாட்டுப் பயன்முறையையும் அதன் நிலையையும் இயக்கலாம் அல்லது முடக்கலாம், இது பயனர்களுக்கு இடையில் நிலையானது.</translation>
 <translation id="8580857153747395000">உள்ளடக்கத் தொகுப்புகளுக்கு வெளியே உள்ள தளங்களைப் பார்வையிடும்போது எச்சரிக்கைசெய்.</translation>
+<translation id="350796261613621561">கண்காணிக்கப்படும் பயனர்களின் உருவாக்குதலை இயக்கு.</translation>
 <translation id="602728333950205286">இயல்புநிலை தேடல் வழங்குநர்  உடனடி URL</translation>
 <translation id="3030000825273123558">மெட்ரிக்ஸ் அறிக்கைகளை இயக்கு</translation>
 <translation id="6559057113164934677">கேமரா அல்லது மைக்ரோஃபோனை எந்த தளமும் அணுக அனுமதிக்காதே</translation>
@@ -898,6 +904,9 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME"/> ஆல் தளம் வழங்கப்படும்போது தோன்றும் இயக்க அறிவுறுத்துதலை முடக்கும்</translation>
 <translation id="3264793472749429012">இயல்புநிலை தேடல் வழங்குநர் குறியீட்டு முறைகள்</translation>
 <translation id="285480231336205327">அதிக தெளிவான பயன்முறையை செயலாக்குக</translation>
+<translation id="5366977351895725771">தவறு என அமைக்கப்பட்டால், இந்தப் பயனர் உருவாக்கும் கண்காணிக்கப்படும் பயனர் முடக்கப்படுவார். ஏற்கனவே உள்ள கண்காணிக்கப்படும் பயனர்கள் அனைவரும் தொடர்ந்து இருப்பார்கள்.
+
+          சரி என அமைக்கப்பட்டால் அல்லது உள்ளமைக்கப்படாவிட்டால், இந்தப் பயனரால் கண்காணிக்கப்படும் பயனர்கள் உருவாக்கப்பட்டு நிர்வகிக்கப்படுவார்கள்.</translation>
 <translation id="8101760444435022591">மென்மையான-தோல்வில் சிறிதளவு உண்மையாக, ஆன்லைன் திரும்பப்பெறல் சோதனைகள் பயனுள்ள எந்த பாதுகாப்பு நன்மையையும் வழங்காது. அவை, <ph name="PRODUCT_NAME"/> பதிப்பு 19 மற்றும் அதற்குப் பிந்தைய பதிப்பில் இயல்பாகவே முடக்கப்படும். இந்தக் கொள்கையை true என அமைத்தால், முந்தைய பண்பானது மீட்டமைக்கப்படும். மேலும், ஆன்லைன் OCSP/CRL சோதனைகள் செயல்படும்.
 
       கொள்கையை அமைக்கவில்லையென்றாலோ அல்லது false என அமைத்தாலோ, Chrome 19 மற்றும் அதற்குப் பிந்தைய பதிப்புகளில் ஆன்லைன் திரும்பப்பெறல் சோதனைகளை Chrome செயல்படுத்தாது.</translation>
diff --git a/chrome/app/policy/policy_templates_te.xtb b/chrome/app/policy/policy_templates_te.xtb
index 8c9be41..d3d7db2 100644
--- a/chrome/app/policy/policy_templates_te.xtb
+++ b/chrome/app/policy/policy_templates_te.xtb
@@ -73,6 +73,11 @@
 <translation id="3816312845600780067">స్వీయ-లాగిన్ కోసం బెయిల్అవుట్ కీబోర్డ్ సత్వరమార్గాన్ని ప్రారంభించండి</translation>
 <translation id="3214164532079860003">ఈ విధానం హోమ్ పేజీని ప్రారంభించబడినట్లయితే ప్రస్తుత డిఫాల్ట్ బ్రౌజర్ నుండి దిగుమతి చేస్తుంది. ఆపివేయబడితే, హోమ్ పేజీ దిగుమతి చేయబడదు. సెట్ చేయకపోతే, దిగుమతి కోసం వినియోగదారు అభ్యర్థనను పొందవచ్చు లేదా స్వయంచాలకంగా దిగుమతి కావచ్చు.</translation>
 <translation id="5330684698007383292">ఈ క్రింది కంటెంట్ రకాలని నిర్వహించడానికి <ph name="PRODUCT_FRAME_NAME"/>ని అనుమతించండి</translation>
+<translation id="6647965994887675196">ఒప్పుకు సెట్ చేస్తే, పర్యవేక్షించబడే వినియోగదారులు సృష్టించబడతారు మరియు ఉపయోగించబడతారు.
+
+          తప్పుకు సెట్ చేస్తే లేదా కాన్ఫిగర్ చేయకపోతే, పర్యవేక్షించబడే-వినియోగదారు సృష్టి మరియు లాగిన్ నిలిపివేయబడతాయి. ప్రస్తుతం ఉన్న పర్యవేక్షించబడే వినియోగదారులందరూ దాచబడతారు.
+
+          గమనిక: వాడుకదారు మరియు ఎంటర్‌ప్రైజ్ పరికరాల డిఫాల్ట్ ప్రవర్తన భిన్నంగా ఉంటుంది: వాడుకదారు పరికరాల్లో పర్యవేక్షించబడే వినియోగదారులు డిఫాల్ట్‌గా ప్రారంభించబడతారు, కానీ ఎంటర్‌ప్రైజ్ పరికరాల్లో వారు డిఫాల్ట్‌గా నిలిపివేయబడతారు.</translation>
 <translation id="5469825884154817306">ఈ సైట్‌లలో చిత్రాలని బ్లాక్ చెయ్యి</translation>
 <translation id="8412312801707973447">ఆన్‌లైన్‌లో OCSP/CRL తనిఖీలు అమలు చేయాలా లేదా</translation>
 <translation id="6649397154027560979">ఈ విధానం విస్మరించబడింది, దయచేసి బదులుగా URLBlacklistని ఉపయోగించండి.
@@ -898,6 +903,7 @@
 
           ఈ విధానాన్ని సెట్ చేయకుండా వదిలేస్తే, లాగిన్ స్క్రీన్ మొదట చూపబడినప్పుడు అధిక కాంట్రాస్ట్ మోడ్ నిలిపివేయబడుతుంది. వినియోగదారులు ఎప్పుడైనా అధిక కాంట్రాస్ట్ మోడ్‌ను ప్రారంభించవచ్చు లేదా నిలిపివేయవచ్చు మరియు లాగిన్ స్క్రీన్‌లో దాని స్థితి వినియోగదారుల మధ్య అలాగే కొనసాగుతుంది.</translation>
 <translation id="8580857153747395000">కంటెంట్ ప్యాక్‌ల వెలుపలి సైట్‌లను సందర్శించేటప్పుడు హెచ్చరిక.</translation>
+<translation id="350796261613621561">పర్యవేక్షించబడే వినియోగదారుల సృష్టిని ప్రారంభించండి.</translation>
 <translation id="602728333950205286">డిఫాల్ట్ శోధన అందింపుదారు తక్షణ URL</translation>
 <translation id="3030000825273123558">గణాంకాల నివేదనను ప్రారంభించు</translation>
 <translation id="6559057113164934677">కెమెరా మరియు మైక్రోఫోన్‌ను ప్రాప్యత చేయడానికి ఏ సైట్‌ని అనుమతించవద్దు</translation>
@@ -915,6 +921,9 @@
 <translation id="8864975621965365890">సైట్ <ph name="PRODUCT_FRAME_NAME"/> ద్వారా అమలు చేయబడినప్పుడు ప్రాంప్ట్ చేయబడే అవకాశాన్ని నియంత్రిస్తుంది.</translation>
 <translation id="3264793472749429012">డిఫాల్ట్ శోధన అందింపుదారు ఎన్‌కోడింగ్‌లు</translation>
 <translation id="285480231336205327">అధిక వర్ణ వ్యత్యాస మోడ్‌ను ప్రారంభించు</translation>
+<translation id="5366977351895725771">తప్పుకు సెట్ చేస్తే, ఈ వినియోగదారు యొక్క పర్యవేక్షించబడే-వినియోగదారు సృష్టి నిలిపివేయబడుతుంది. ప్రస్తుతం ఉన్న పర్యవేక్షించబడే వినియోగదారులు ఇప్పటికీ అందుబాటులో ఉంటారు.
+
+          ఒప్పుకు సెట్ చేస్తే లేదా కాన్ఫిగర్ చేయకపోతే, పర్యవేక్షించబడే వినియోగదారులు ఈ వినియోగదారు ద్వారా సృష్టించబడతారు మరియు నిర్వహించబడతారు.</translation>
 <translation id="8101760444435022591">వాస్తవానికి సాఫ్ట్-వైఫల్యం, ఆన్‌లైన్‌లో ఉపసంహరణ తనిఖీలు ప్రభావవంతమైన భద్రతా ప్రయోజనాన్ని అందించవు, <ph name="PRODUCT_NAME"/> సంస్కరణ 19 మరియు తర్వాత దానిలో అవి డిఫాల్ట్‌గా నిలిపివేయబడతాయి. ఈ విధానాన్ని ఒప్పుకు సెట్ చేయడం ద్వారా, మునుపటి ప్రవర్తన పునరుద్ధరించబడుతుంది మరియు ఆన్‌లైన్‌లో OCSP/CRL తనిఖీలు అమలు చేయబడతాయి.
 
       విధానాన్ని సెట్ చేయకుండా ఉంటే లేదా తప్పుకు సెట్ చేయబడి ఉంటే, తర్వాత Chrome 19 మరియు తర్వాత దానిలో  Chrome ఆన్‌లైన్ ఉపసంహరణ తనిఖీలను అమలు చేయదు.</translation>
diff --git a/chrome/app/policy/policy_templates_th.xtb b/chrome/app/policy/policy_templates_th.xtb
index 3f9dee1..e5ee913 100644
--- a/chrome/app/policy/policy_templates_th.xtb
+++ b/chrome/app/policy/policy_templates_th.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">เปิดใช้งานแป้นพิมพ์ลัด bailout สำหรับการเข้าสู่ระบบอัตโนมัติ</translation>
 <translation id="3214164532079860003">นโยบายนี้บังคับให้นำเข้าหน้าแรกจากเบราว์เซอร์เริ่มต้นปัจจุบันหากมีการเปิดใช้งานไว้ แต่หากปิดใช้งานอยู่ จะไม่มีการนำเข้าหน้าแรก หากไม่มีการตั้งค่าไว้ ผู้ใช้อาจจะได้รับคำถามว่าจะนำเข้าหรือไม่ หรือการนำเข้าอาจเกิดขึ้นโดยอัตโนมัติก็ได้</translation>
 <translation id="5330684698007383292">อนุญาตให้ <ph name="PRODUCT_FRAME_NAME"/> จัดการประเภทเนื้อหาดังต่อไปนี้</translation>
+<translation id="6647965994887675196">หากตั้งค่าเป็นจริง จะสามารถสร้างและใช้งานผู้ใช้ภายใต้การดูแลได้
+
+          หากตั้งค่าเป็นเท็จหรือไม่ได้กำหนดค่า การสร้างผู้ใช้ภายใต้การดูแลและการเข้าสู่ระบบของผู้ใช้ภายใต้การดูแลจะถูกปิดใช้งาน ผู้ใช้ภายใต้การดูแลที่มีอยู่ทั้งหมดจะถูกซ่อนไว้
+
+          หมายเหตุ: การทำงานเริ่มต้นสำหรับอุปกรณ์ของผู้บริโภคและอุปกรณ์ขององค์กรจะแตกต่างกัน: บนอุปกรณ์ของผู้บริโภค ผู้ใช้ภายใต้การดูแลจะถูกเปิดใช้งานโดยค่าเริ่มต้น แต่จะปิดใช้งานโดยค่าเริ่มต้นบนอุปกรณ์ขององค์กร</translation>
 <translation id="5469825884154817306">ปิดกั้นภาพบนไซต์เหล่านี้</translation>
 <translation id="8412312801707973447">ดำเนินการตรวจสอบ OCSP/CRL แบบออนไลน์หรือไม่</translation>
 <translation id="6649397154027560979">นโยบายนี้ได้ถูกเลิกใช้งาน โปรดใช้ URLBlacklist แทน
@@ -870,6 +875,7 @@
 
           หากนโยบายนี้ไม่มีการตั้งค่า โหมดคอนทราสต์สูงจะถูกปิดใช้งานเมื่อหน้าจอการเข้าสู่ระบบแสดงเป็นครั้งแรก ผู้ใช้สามารถเปิดหรือปิดใช้งานโหมดคอนทราสต์สูงได้ตลอดเวลา และสถานะบนหน้าจอการเข้าสู่ระบบจะยังคงค้างอยู่สำหรับการใช้งานในระหว่างผู้ใช้รายต่างๆ</translation>
 <translation id="8580857153747395000">เตือนเมื่อไปที่เว็บไซต์ภายนอกชุดเนื้อหา</translation>
+<translation id="350796261613621561">เปิดใช้งานการสร้างผู้ใช้ภายใต้การดูแล</translation>
 <translation id="602728333950205286">URL ค้นหาทันใจของผู้ให้บริการการค้นหาเริ่มต้น</translation>
 <translation id="3030000825273123558">เปิดใช้งานการรายงานเมตริก</translation>
 <translation id="6559057113164934677">ไม่อนุญาตให้ไซต์ใดๆ เข้าถึงกล้องและไมโครโฟน</translation>
@@ -887,6 +893,9 @@
 <translation id="8864975621965365890">ระงับการแจ้งเรื่องการปฏิเสธ ซึ่งจะปรากฏขึ้นเมื่อไซต์แสดงผลโดย <ph name="PRODUCT_FRAME_NAME"/></translation>
 <translation id="3264793472749429012">การเข้ารหัสของผู้ให้บริการการค้นหาเริ่มต้น</translation>
 <translation id="285480231336205327">เปิดใช้งานโหมดความคมชัดสูง</translation>
+<translation id="5366977351895725771">หากตั้งค่าเป็นเท็จ การสร้างผู้ใช้ภายใต้การดูแลโดยผู้ใช้รายนี้จะถูกปิดใช้งาน ผู้ใช้ภายใต้การดูแลใดๆ ที่มีอยู่แล้วจะยังคงมีอยู่
+
+          หากตั้งค่าเป็นจริงหรือไม่ได้กำหนดค่า ผู้ใช้รายนี้จะสามารถสร้างและจัดการผู้ใช้ภายใต้การดูแลได้</translation>
 <translation id="8101760444435022591">เนื่องจากข้อเท็จจริงที่ว่าการตรวจสอบการเพิกถอนทางออนไลน์แบบ Soft-fail ไม่มีประโยชน์ในด้านการรักษาความปลอดภัยที่มีประสิทธิผล การตรวจสอบดังกล่าวจะถูกปิดใช้งานโดยค่าเริ่มต้นใน <ph name="PRODUCT_NAME"/> รุ่น 19 และรุ่นที่ใหม่กว่า และด้วยการตั้งค่านโยบายนี้เป็น &quot;จริง&quot; ลักษณะการทำงานก่อนหน้านี้จะได้รับการคืนค่า และจะมีการดำเนินการตรวจสอบ OCSP/CRL แบบออนไลน์
 
       หากไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็น &quot;เท็จ&quot; Chrome จะไม่ตรวจสอบการเพิกถอนทางออนไลน์ใน Chrome 19 และรุ่นที่ใหม่กว่า</translation>
diff --git a/chrome/app/policy/policy_templates_tr.xtb b/chrome/app/policy/policy_templates_tr.xtb
index 03f9d2b..14aa1d8 100644
--- a/chrome/app/policy/policy_templates_tr.xtb
+++ b/chrome/app/policy/policy_templates_tr.xtb
@@ -88,6 +88,11 @@
 
       Ayarlanmazsa, kullanıcıdan içe aktarma işlemini gerçekleştirmesi istenebilir veya içe aktarma otomatik olarak gerçekleşebilir.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/> için aşağıdaki içerik türlerini işlemeye izin ver</translation>
+<translation id="6647965994887675196">True (doğru) olarak ayarlanırsa, denetlenen kullanıcılar oluşturulabilir ve kullanılabilir
+
+          False (yanlış) olarak ayarlanır veya yapılandırılmazsa, denetlenen kullanıcı oluşturma ve denetlenen kullanıcı girişi özellikleri devre dışı bırakılır. Mevcut tüm denetlenen kullanıcılar gizlenir.
+
+          NOT: Tüketicilere ve kuruluşlara yönelik cihazlarda varsayılan davranış farklıdır: Tüketicilere yönelik cihazlarda, denetlenen kullanıcılar varsayılan olarak etkindir, ancak kuruluşlara yönelik cihazlarda bunlar varsayılan olarak devre dışıdır.</translation>
 <translation id="5469825884154817306">Bu sitelerdeki resimleri engelle</translation>
 <translation id="8412312801707973447">Çevrimiçi OCSP/CRL denetimlerinin yapılıp yapılmayacağı</translation>
 <translation id="6649397154027560979">Bu politika kullanımdan kaldırılmıştır; lütfen bunun yerine URLBlacklist'i kullanın.
@@ -1114,6 +1119,7 @@
 
           Bu politika ayarlanmadan bırakılırsa, giriş ekranı ilk kez gösterildiğinde yüksek kontrast modu devre dışıdır. Kullanıcılar yüksek kontrast modunu her zaman etkinleştirebilir veya devre dışı bırakabilir ve yüksek kontrast modunun giriş ekranındaki durumu kullanıcılar arasında kalıcıdır.</translation>
 <translation id="8580857153747395000">İçerik paketlerinin dışındaki siteleri ziyaret ederken uyar.</translation>
+<translation id="350796261613621561">Denetlenen kullanıcılar oluşturmayı etkinleştir.</translation>
 <translation id="602728333950205286">Varsayılan arama sağlayıcı anında arama URL'si</translation>
 <translation id="3030000825273123558">Ölçüm raporlamayı etkinleştir</translation>
 <translation id="6559057113164934677">Hiçbir sitenin kamera ve mikrofona erişmesine izin verme</translation>
@@ -1139,6 +1145,9 @@
 <translation id="8864975621965365890">Bir site <ph name="PRODUCT_FRAME_NAME"/> tarafından oluşturulduğunda görülen reddetme sorusunu engeller.</translation>
 <translation id="3264793472749429012">Varsayılan arama sağlayıcı kodlamaları</translation>
 <translation id="285480231336205327">Yüksek kontrast modunu etkinleştir</translation>
+<translation id="5366977351895725771">False (yanlış) olarak ayarlanırsa, bu kullanıcının denetlenen kullanıcı oluşturma yetkisi devre dışı bırakılır. Mevcut tüm denetlenen kullanıcılar kullanılabilir olmaya devam eder.
+
+          True (doğru) olarak ayarlanırsa veya yapılandırılmazsa, bu kullanıcı denetlenen kullanıcılar oluşturabilir ve denetlenen kullanıcıları yönetebilir.</translation>
 <translation id="8101760444435022591">Kısmi çökme bağlamında, çevrimiçi iptal denetimleri güvenlik açısından etkili yararlar sağlamaz, bunlar <ph name="PRODUCT_NAME"/> sürüm 19 ve daha yeni sürümlerde varsayılan olarak devre dışı bırakılmıştır. Bu politika true değerine ayarlandığında, önceki çalışma biçimi geri yüklenir ve çevrimiçi OCSP/CRL denetimleri yapılır.
 
       Politika ayarlanmazsa veya false değerine ayarlanırsa, Chrome 19 ve daha yeni sürümlerde çevrimiçi iptal denetimleri yapılmaz.</translation>
diff --git a/chrome/app/policy/policy_templates_uk.xtb b/chrome/app/policy/policy_templates_uk.xtb
index 68aa4d3..a74d889 100644
--- a/chrome/app/policy/policy_templates_uk.xtb
+++ b/chrome/app/policy/policy_templates_uk.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Увімкнути аварійну комбінацію клавіш для автоматичного входу</translation>
 <translation id="3214164532079860003">Якщо це правило ввімкнено, домашня сторінка імпортується з поточного веб-переглядача за умовчанням. Якщо вимкнено, домашня сторінка не імпортується. Якщо його не встановлено, користувач отримує запит на імпортування або імпортування розпочинається автоматично.</translation>
 <translation id="5330684698007383292">Дозволити <ph name="PRODUCT_FRAME_NAME"/> обробляти вказані типи вмісту</translation>
+<translation id="6647965994887675196">Якщо для цього правила встановлено значення &quot;true&quot;, можна створювати контрольованих користувачів і користуватися їхніми обліковими записами.
+
+          Якщо для цього правила встановлено значення &quot;false&quot; або його не налаштовано, створення та вхід контрольованих користувачів буде вимкнено. Усіх наявних контрольованих користувачів буде сховано.
+
+          ПРИМІТКА. Поведінка за умовчанням для приватних і корпоративних пристроїв різниться: на приватних пристроях контрольовані користувачі ввімкнені за умовчанням, а на корпоративних пристроях – вимкнені за умовчанням.</translation>
 <translation id="5469825884154817306">Блокувати зображення на цих сайтах</translation>
 <translation id="8412312801707973447">Чи виконуються онлайнові перевірки OCSP/CRL</translation>
 <translation id="6649397154027560979">Це правило більше не використовується. Натомість використовуйте правило URLBlacklist.
@@ -885,6 +890,7 @@
 
           Якщо це правило не встановлено, режим високого контрасту вимикається під час першої появи екрана входу. Користувачі можуть вмикати чи вимикати режим високого контрасту будь-коли, і такий вибір на екрані входу буде чинним для всіх користувачів.</translation>
 <translation id="8580857153747395000">Попереджати про відвідування сайтів, які не входять у пакети вмісту.</translation>
+<translation id="350796261613621561">Увімкнути створення контрольованих користувачів.</translation>
 <translation id="602728333950205286">URL-адреса для миттєвого пошуку пошукової служби за умовчанням</translation>
 <translation id="3030000825273123558">Увімкнути повідомлення показників</translation>
 <translation id="6559057113164934677">Заборонити всім сайтам доступ до камери та мікрофона</translation>
@@ -902,6 +908,9 @@
 <translation id="8864975621965365890">Забороняє запити на вимкнення, які з’являються, коли <ph name="PRODUCT_FRAME_NAME"/> обробляє сайт.</translation>
 <translation id="3264793472749429012">Кодування пошукової служби за умовчанням</translation>
 <translation id="285480231336205327">Увімкнути режим високого контрасту</translation>
+<translation id="5366977351895725771">Якщо для цього правила встановлено значення &quot;false&quot;, цей користувач не зможе створювати контрольованих користувачів. Усі наявні контрольовані користувачі все ж будуть активні.
+
+          Якщо для цього правила встановлено значення &quot;true&quot; або його не налаштовано, цей користувач зможе створювати контрольованих користувачів і керувати ними.</translation>
 <translation id="8101760444435022591">Зважаючи на те, що онлайнові перевірки анулювання сертифікатів із так званою &quot;м’якою відмовою&quot; (soft-fail) не забезпечують ефективного покращання безпеки, за умовчанням вони вимкнені в <ph name="PRODUCT_NAME"/> 19 і новіших версіях. Якщо встановити для цього правила значення &quot;true&quot;, відновиться попередній режим і знову виконуватимуться перевірки OCSP/CRL у режимі онлайн.
 
       Якщо правило не встановлено чи його значення встановлено як &quot;false&quot;, Chrome не виконуватиме онлайнові перевірки сертифікатів у Chrome 19 і новіших версіях.</translation>
diff --git a/chrome/app/policy/policy_templates_vi.xtb b/chrome/app/policy/policy_templates_vi.xtb
index 1dfabaf..33b94eb 100644
--- a/chrome/app/policy/policy_templates_vi.xtb
+++ b/chrome/app/policy/policy_templates_vi.xtb
@@ -89,6 +89,11 @@
 
       Nếu không thiết lập chính sách này, người dùng có thể được hỏi có nhập hay không hoặc quá trình nhập có thể diễn ra tự động.</translation>
 <translation id="5330684698007383292">Cho phép <ph name="PRODUCT_FRAME_NAME"/> xử lý các loại nội dung sau</translation>
+<translation id="6647965994887675196">Nếu đặt thành đúng, bạn có thể tạo và sử dụng tài khoản người dùng bị giám sát.
+
+          Nếu đặt thành sai hoặc không định cấu hình, tính năng tạo và đăng nhập tài khoản người dùng bị giám sát sẽ bị tắt. Tất cả tài khoản người dùng bị giám sát hiện có sẽ bị ẩn.
+
+          LƯU Ý: Chế độ mặc định đối với các thiết bị dành cho người tiêu dùng và doanh nghiệp khác nhau: trên thiết bị dành cho người tiêu dùng, tài khoản người dùng bị giám sát được bật theo mặc định nhưng trên thiết bị dành cho doanh nghiệp, các tài khoản này được tắt theo mặc định.</translation>
 <translation id="5469825884154817306">Chặn hình ảnh trên các trang web này</translation>
 <translation id="8412312801707973447">Liệu các kiểm tra OCSP/CRL trực tuyến có được thực hiện hay không</translation>
 <translation id="6649397154027560979">Chính sách này không còn được dùng nữa, thay vào đó hãy sử dụng URLBlacklist.
@@ -1097,6 +1102,7 @@
 
           Nếu không đặt chính sách này, chế độ tương phản cao bị tắt khi màn hình đăng nhập hiển thị lần đầu. Người dùng có thể bật hoặc tắt chế độ tương phản cao bất cứ lúc nào và trạng thái của chế độ này trên màn hình đăng nhập được duy trì giữa những người dùng.</translation>
 <translation id="8580857153747395000">Cảnh báo khi truy cập vào các trang web bên ngoài gói nội dung.</translation>
+<translation id="350796261613621561">Bật tính năng tạo tài khoản người dùng bị giám sát.</translation>
 <translation id="602728333950205286">URL instant của nhà cung cấp dịch vụ tìm kiếm mặc định</translation>
 <translation id="3030000825273123558">Bật báo cáo số liệu</translation>
 <translation id="6559057113164934677">Không cho phép bất kỳ trang web nào truy cập vào máy ảnh và micrô</translation>
@@ -1122,6 +1128,9 @@
 <translation id="8864975621965365890">Loại bỏ lời nhắc từ chối xuất hiện khi một trang web được hiển thị bởi <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Mã hóa của nhà cung cấp dịch vụ tìm kiếm mặc định</translation>
 <translation id="285480231336205327">Bật chế độ tương phản cao</translation>
+<translation id="5366977351895725771">Nếu đặt thành sai, tác vụ tạo tài khoản người dùng bị giám sát của người dùng này sẽ bị tắt. Mọi tài khoản người dùng bị giám sát hiện có sẽ vẫn khả dụng.
+
+          Nếu đặt thành đúng hoặc không định cấu hình, người dùng này có thể tạo và quản lý tài khoản người dùng bị giám sát.</translation>
 <translation id="8101760444435022591">Cân nhắc sự thật rằng các kiểm tra lỗi phần mềm, thu hồi trực tuyến không cung cấp lợi ích bảo mật thực sự nào, chúng bị tắt theo mặc định trong <ph name="PRODUCT_NAME"/> phiên bản 19 và cao hơn. Bằng cách đặt chính sách này thành đúng, hoạt động trước đó được khôi phục và các kiểm tra OCSP/CRL trực tuyến sẽ được thực hiện.
 
       Nếu chính sách không được đặt hoặc được đặt thành sai, khi đó Chrome sẽ không thực hiện các kiểm tra thu hồi trực tuyến trong Chrome 19 và cao hơn.</translation>
diff --git a/chrome/app/policy/policy_templates_zh-CN.xtb b/chrome/app/policy/policy_templates_zh-CN.xtb
index 213afe3..cdbc6cc 100644
--- a/chrome/app/policy/policy_templates_zh-CN.xtb
+++ b/chrome/app/policy/policy_templates_zh-CN.xtb
@@ -66,6 +66,11 @@
 <translation id="3816312845600780067">启用停止自动登录的键盘快捷键</translation>
 <translation id="3214164532079860003">如果启用此政策,就会强制从当前默认浏览器导入主页。如果停用此政策,就不会导入主页。如果未设置此政策,系统就会询问用户是否导入主页,或者系统自动进行导入。</translation>
 <translation id="5330684698007383292">允许 <ph name="PRODUCT_FRAME_NAME"/>处理以下内容类型</translation>
+<translation id="6647965994887675196">如果此政策的值设置为 True,则您可以创建和使用受监管用户帐户。
+
+          如果此政策的值设置为 False 或未配置,则系统将停用受监管用户创建和登录功能,并会隐藏所有现有的受监管用户。
+
+          请注意,普通用户设备和企业设备的默认行为有所不同:默认情况下,系统会在普通用户设备上启用受监管用户,而在企业设备上停用受监管用户。</translation>
 <translation id="5469825884154817306">在这些网站上阻止图片</translation>
 <translation id="8412312801707973447">是否执行在线 OCSP/CRL 检查</translation>
 <translation id="6649397154027560979">此政策已弃用,请改用 URLBlacklist。
@@ -885,6 +890,7 @@
 
           如果未设置此政策,则登录屏幕初次显示时会停用高反差模式。用户可以随时启用或停用高反差模式,并且其在登录屏幕上的启用或停用状态对于各用户均有效。</translation>
 <translation id="8580857153747395000">在访问非内容包内的网站时发出警告。</translation>
+<translation id="350796261613621561">启用创建受监管用户的功能。</translation>
 <translation id="602728333950205286">默认搜索服务提供商的即搜即得网址</translation>
 <translation id="3030000825273123558">启用指标报告</translation>
 <translation id="6559057113164934677">不允许任何网站使用摄像头和麦克风</translation>
@@ -902,6 +908,9 @@
 <translation id="8864975621965365890">浏览使用 <ph name="PRODUCT_FRAME_NAME"/>呈现的网站时,阻止显示“停止支持”的提示。</translation>
 <translation id="3264793472749429012">默认搜索服务提供商的编码</translation>
 <translation id="285480231336205327">启用高反差模式</translation>
+<translation id="5366977351895725771">如果此政策的值设置为 False,此用户将无法创建受监管用户。不过,所有目前受监管的用户帐户仍然可供访问。
+
+          如果此政策的值设置为 True 或未配置,这位用户即可创建并管理受监管用户。</translation>
 <translation id="8101760444435022591">鉴于软故障和在线撤消检查未提供有效的安全优势,因此它们在 <ph name="PRODUCT_NAME"/>版本 19 及更高版本中默认停用。将此政策设置为 true,即可恢复以前的行为,系统将执行在线 OCSP/CRL 检查。
 
       如果未设置此政策或将其设置为 false,Chrome 浏览器 19 及更高版本就不会执行在线撤消检查。</translation>
diff --git a/chrome/app/policy/policy_templates_zh-TW.xtb b/chrome/app/policy/policy_templates_zh-TW.xtb
index 866a686..9bab638 100644
--- a/chrome/app/policy/policy_templates_zh-TW.xtb
+++ b/chrome/app/policy/policy_templates_zh-TW.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">啟用停止自動登入的鍵盤快速鍵</translation>
 <translation id="3214164532079860003">如果啟用這項政策,則會強制從目前的預設瀏覽器匯入首頁。如果停用這項政策,則不會匯入首頁。如果未設定這項政策,系統會自動匯入首頁,或詢問使用者是否要匯入首頁。</translation>
 <translation id="5330684698007383292">允許 <ph name="PRODUCT_FRAME_NAME"/> 處理列出的內容類型</translation>
+<translation id="6647965994887675196">如果設為 True,即可建立並使用受監督的使用者。
+
+          如果設為 False 或不予設定,則無法建立及登入受監督的使用者帳戶。系統將全面隱藏現有的受監督使用者。
+
+          注意:一般使用者和企業客戶的裝置對於這項設定的預設值有所不同。在預設狀態下,一般使用者的裝置會啟用建立受監督使用者的功能,但企業戶的裝置則會停用這項功能。</translation>
 <translation id="5469825884154817306">封鎖這些網站的圖片</translation>
 <translation id="8412312801707973447">不論線上 OCSP/CRL 檢查是否執行</translation>
 <translation id="6649397154027560979">這項政策已淘汰,請改用 URLBlacklist。
@@ -894,6 +899,7 @@
 
           如果您未設定這項政策,則系統會在初次顯示登入畫面時停用高反差模式。使用者隨時都可以啟用或停用高反差模式,而高反差模式在登入畫面的狀態則視使用者的選擇而定 (均為永久性)。</translation>
 <translation id="8580857153747395000">瀏覽非內容套件內網站時顯示警告。</translation>
+<translation id="350796261613621561">啟用建立受監督使用者的功能。</translation>
 <translation id="602728333950205286">預設搜尋引擎互動智慧搜尋網址</translation>
 <translation id="3030000825273123558">啟用計量報告</translation>
 <translation id="6559057113164934677">不允許任何網站使用攝影機和麥克風</translation>
@@ -911,6 +917,9 @@
 <translation id="8864975621965365890">瀏覽使用 <ph name="PRODUCT_FRAME_NAME"/>轉譯的網站時,隱藏停止支援提示。</translation>
 <translation id="3264793472749429012">預設搜尋引擎編碼</translation>
 <translation id="285480231336205327">啟用高反差模式</translation>
+<translation id="5366977351895725771">如果設為 False,這位使用者將無法建立受監督的使用者。目前如有任何受監督的使用者帳戶,則仍然可供存取。
+
+          如果設為 True 或不予設定,這位使用者即可建立並管理受監督的使用者。</translation>
 <translation id="8101760444435022591">由於軟失敗線上撤銷檢查不會提供有效的安全性效益,因此在 <ph name="PRODUCT_NAME"/> 版本 19 和更新版本中,根據預設這些檢查已停用。將這項政策設定為 True,系統會還原先前行為,並且會執行線上 OCSP/CRL 檢查。
 
       如果您沒有設定這項政策,或將政策設定為 False,則 Chrome 不會在 Chrome 19 和更新版本中執行線上撤銷檢查。</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 2db3d44..00ace1a 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -2800,7 +2800,7 @@
 <translation id="7525138786556653796">Přepne na schéma šifrování podporované novým serverem synchronizace. Upozornění: touto akcí dojde ke změně dat synchronizace a někteří klienti je pak nemusí přečíst.</translation>
 <translation id="2498765460639677199">Obrovské</translation>
 <translation id="2378982052244864789">Vyberte adresář rozšíření.</translation>
-<translation id="7861215335140947162">Stahování</translation>
+<translation id="7861215335140947162">&amp;Stažené soubory</translation>
 <translation id="6586099239452884121">Prohlížení v roli hosta</translation>
 <translation id="1358735829858566124">Soubor nebo adresář nelze použít.</translation>
 <translation id="175772926354468439">Aktivovat motiv</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index d52d5dd..c40251e 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -788,7 +788,7 @@
 <translation id="7550830279652415241">bookmarks_<ph name="DATESTAMP"/>.html</translation>
 <translation id="6327653052522436195">Ort</translation>
 <translation id="6828153365543658583">Anmeldung auf die folgenden Nutzer beschränken:</translation>
-<translation id="8106045200081704138">Mit mir geteilt</translation>
+<translation id="8106045200081704138">Für mich freigegeben</translation>
 <translation id="1652965563555864525">&amp;Stummschalten</translation>
 <translation id="4200983522494130825">&amp;Neuer Tab</translation>
 <translation id="7979036127916589816">Synchronisierungsfehler</translation>
@@ -3490,7 +3490,7 @@
 <translation id="1197979282329025000">Beim Abrufen der Druckerfunktionen für Drucker &quot;<ph name="PRINTER_NAME"/>&quot; ist ein Fehler aufgetreten. Dieser Drucker konnte nicht mit <ph name="CLOUD_PRINT_NAME"/> registriert werden.</translation>
 <translation id="890308499387283275">Chrome kann Datei nicht herunterladen.</translation>
 <translation id="6557565812667414268">Nur für High DPI-Displays aktiviert</translation>
-<translation id="5469954281417596308">Lesezeichen-Manager</translation>
+<translation id="5469954281417596308">Lesezeichenmanager</translation>
 <translation id="5288481194217812690"><ph name="FILENAME"/></translation>
 <translation id="4151234098429563754">Diese Seite enthält ein Skript von nicht authentifizierten Quellen.</translation>
 <translation id="1143142264369994168">Signaturgeber des Zertifikats</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index dab3c50..29299fe 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -66,7 +66,7 @@
 <translation id="479384608159513044">Attiva gruppo di app OS X per Avvio applicazioni.</translation>
 <translation id="390181652609784098">Ora puoi accedere ai tuoi Preferiti, alla tua cronologia e ad altre impostazioni su tutti i dispositivi su cui esegui l'accesso.</translation>
 <translation id="368260109873638734">Dettagli sui problemi di questo sito web</translation>
-<translation id="7409233648990234464">Riavvia Powerwash</translation>
+<translation id="7409233648990234464">Riavvia ed esegui Powerwash</translation>
 <translation id="7428534988046001922">Le seguenti applicazioni sono ora installate:</translation>
 <translation id="787386463582943251">Aggiungi indirizzo email</translation>
 <translation id="2833791489321462313">Richiedi la password per riattivazione da sospensione</translation>
@@ -3191,7 +3191,7 @@
 <translation id="6442187272350399447">Strepitoso</translation>
 <translation id="7317938878466090505"><ph name="PROFILE_NAME"/> (corrente)</translation>
 <translation id="6774230405643443657">Abilita la decodifica differita delle immagini.</translation>
-<translation id="2148999191776934271"><ph name="HOUR"/>:<ph name="MINUTE"/> rimanenti al completamento della ricarica</translation>
+<translation id="2148999191776934271"><ph name="HOUR"/>:<ph name="MINUTE"/> per completare la ricarica</translation>
 <translation id="6007237601604674381">Spostamento non riuscito. <ph name="ERROR_MESSAGE"/></translation>
 <translation id="907841381057066561">Operazione di creazione di un file zip temporaneo durante la creazione del pacchetto non riuscita.</translation>
 <translation id="1881456419707551346">Dettagli connessione</translation>
@@ -4318,7 +4318,7 @@
 <translation id="8119381715954636144">Identità non verificata</translation>
 <translation id="1497270430858433901">Hai ottenuto l'utilizzo gratuito di <ph name="DATA_AMOUNT"/> in data <ph name="DATE"/></translation>
 <translation id="1779652936965200207">Inserisci questa passkey su &quot;<ph name="DEVICE_NAME"/>&quot;:</translation>
-<translation id="8307376264102990850">Calcolo del tempo rimanente al completamento della ricarica</translation>
+<translation id="8307376264102990850">Calcolo del tempo per completare la ricarica</translation>
 <translation id="636850387210749493">Registrazione aziendale</translation>
 <translation id="4602466770786743961">Consenti sempre a <ph name="HOST"/> di accedere alla webcam e al microfono</translation>
 <translation id="852573274664085347">La modifica al tocco può essere inizializzata toccando un campo di testo o un testo selezionato.</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 687bdba..87bba1b 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -443,7 +443,7 @@
 <translation id="8373486119359090598">הפעל מחוות מתקדמות</translation>
 <translation id="5197255632782567636">אינטרנט</translation>
 <translation id="8787254343425541995">אפשר שרתי proxy עבור רשתות משותפות</translation>
-<translation id="4755860829306298968">נהל חסימת פלאגין...</translation>
+<translation id="4755860829306298968">נהל חסימת יישומי פלאגין...</translation>
 <translation id="8879284080359814990">הצ&amp;ג ככרטיסייה</translation>
 <translation id="4314714876846249089"><ph name="PRODUCT_NAME"/>
           נתקל בבעיות בגישה לרשת.
@@ -2410,7 +2410,7 @@
 <translation id="4578576389176790381">תוכן מ-<ph name="ELEMENTS_HOST_NAME"/>, מפיצה ידועה של תוכנות זדוניות, הוכנס לדף האינטרנט הזה. סביר מאוד שביקור בדף זה יגרום לפגיעה ב-Mac שלך על ידי תוכנה זדונית.</translation>
 <translation id="2208158072373999562">ארכיון Zip</translation>
 <translation id="2756798847867733934">כרטיס SIM מושבת</translation>
-<translation id="5464632865477611176">הרץ בפעם הזאת</translation>
+<translation id="5464632865477611176">הפעל באופן חד פעמי</translation>
 <translation id="4268025649754414643">קידוד מפתח</translation>
 <translation id="916745092148443205">הדגשה של מחוות הקשה</translation>
 <translation id="1168020859489941584">פותח ב-<ph name="TIME_REMAINING"/>...</translation>
@@ -3882,7 +3882,7 @@
 <translation id="7538714048953037041">רשת Wimax</translation>
 <translation id="641087317769093025">לא ניתן לבטל את הדחיסה של התוסף</translation>
 <translation id="5263972071113911534">לפני <ph name="NUMBER_MANY"/> ימים</translation>
-<translation id="7461850476009326849">סגור פלאגאינים בודדים...</translation>
+<translation id="7461850476009326849">השבת חלק מיישומי הפלאגין...</translation>
 <translation id="4097411759948332224">שלח צילום מסך של דף זה</translation>
 <translation id="2231990265377706070">סימן קריאה</translation>
 <translation id="7199540622786492483"><ph name="PRODUCT_NAME"/> אינו מעודכן מכיוון שלא הופעל במשך זמן מה. יש עדכון זמין והוא יחול ברגע שתבצע הפעלה מחדש.</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index f469417..22315b1 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -3467,7 +3467,7 @@
 <translation id="5293659407874396561"><ph name="SUBJECT"/>(<ph name="ISSUER"/>)</translation>
 <translation id="2115926821277323019">유효한 URL이어야 함</translation>
 <translation id="3464726836683998962">모바일 데이터 로밍 사용 안 함</translation>
-<translation id="8986494364107987395">사용 통계 및 충돌 보고서를 Google에 자동으로 보내기</translation>
+<translation id="8986494364107987395">사용 통계 및 오류 보고서를 Google에 자동으로 보내기</translation>
 <translation id="7070714457904110559">위치 정보 기능에 실험실 확장 프로그램을 사용하도록 설정합니다. 여기에는 운영체제 위치 API를 사용(가능한 경우)하고 더 정확한 위치 확인을 위해 로컬 네트워크 설정 데이터를 Google 위치 서비스에 전송하는 기능이 포함됩니다.</translation>
 <translation id="6701535245008341853">프로필을 가져올 수 없습니다.</translation>
 <translation id="8303655282093186569">병음 입력 설정</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 023d0fc..5de0e9e 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -2511,7 +2511,7 @@
 <translation id="1800987794509850828">Plug-inbroker: <ph name="PLUGIN_NAME"/></translation>
 <translation id="8871696467337989339">U gebruikt een niet-ondersteunde opdrachtregelmarkering: <ph name="BAD_FLAG"/>. De stabiliteit en beveiliging zullen hieronder lijden.</translation>
 <translation id="1774833706453699074">Bladwijzer toevoegen voor geopende pagina's...</translation>
-<translation id="5031870354684148875">Over Google Vertalen</translation>
+<translation id="5031870354684148875">Over Google Translate</translation>
 <translation id="5702389759209837579">Toegang tot uw geopende tabbladen op al uw apparaten.</translation>
 <translation id="8381055888183086563">Hiermee worden contextmenuopties voor foutopsporing ingeschakeld, zoals 'Element controleren' voor pakketapps.</translation>
 <translation id="1675020493753693718">Interactief automatisch aanvullen inschakelen</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index c8ecf07..fe17186 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -406,7 +406,7 @@
 <translation id="6337534724793800597">Chuja sera kwa jina</translation>
 <translation id="3583413473134066075">Inaenda.. Inaenda... Imeenda.</translation>
 <translation id="6585234750898046415">Chagua picha ya kuonyesha ya akaunti yako kwenye skrini ya kuingia.</translation>
-<translation id="7957054228628133943">Dhibiti uzuiaji wa viibukizi...</translation>
+<translation id="7957054228628133943">Dhibiti uzuiaji wa madirisha ibukizi...</translation>
 <translation id="179767530217573436">wiki 4 zilizopita</translation>
 <translation id="2279770628980885996">Hali isiyotarajiwa ilishuhudiwa wakati seva ilipokuwa ikijaribu kutimiza ombi.</translation>
 <translation id="210116126541562594">Kimezuiwa kwa chauo-msingi</translation>
@@ -1003,7 +1003,7 @@
 <translation id="1465078513372056452">Tumia anwani ya utozaji kwa usafirishaji</translation>
 <translation id="8494979374722910010">Jaribio la kufikia seva limeshindwa.</translation>
 <translation id="1864756863218646478">Faili haikupatikana.</translation>
-<translation id="7810202088502699111">Viibukizi vilizuiwa kwenye ukurasa huu.</translation>
+<translation id="7810202088502699111">Madirisha ibukizi yalizuiwa kwenye ukurasa huu.</translation>
 <translation id="3808873045540128170">Amekufa, Juma!</translation>
 <translation id="3452404311384756672">Muda unaotumika kuleta:</translation>
 <translation id="646727171725540434">Proksi ya HTTP</translation>
@@ -1064,7 +1064,7 @@
 <translation id="7740996059027112821">Wastani</translation>
 <translation id="6973656660372572881">Seva zote za proksi thabiti na URL ya hati ya .pac zimebainishwa.</translation>
 <translation id="409980434320521454">Ulinganishaji umeshindwa</translation>
-<translation id="192144045824434199">Wezesha vidirsha vya madirisha yanayofungukia nje ya fremu ya kivinjari. Jaribio la kufungua Kidirisha litafunuga kiibukizi badala yake iwapo halitawezeshwa. Vidirisha vinawezeshwa mara kwa mara kwenye vituo vya dev na kanari.</translation>
+<translation id="192144045824434199">Washa vidirisha vinavyofungukia nje ya fremu ya kivinjari. Jaribio la kufungua Kidirisha, badala yake, litafungua kiibukizi iwapo hakijawashwa. Vidirisha vinawashwa mara kwa mara kwenye vituo vya usanidi na kanari.</translation>
 <translation id="6344783595350022745">Futa Matini</translation>
 <translation id="1426410128494586442">Ndio</translation>
 <translation id="2359345697448000899">Dhibiti viendelezi vyako kwa kubofya Viendelezi katika menyu ya Zana.</translation>
@@ -1289,7 +1289,7 @@
 <translation id="8340999562596018839">Maoni ya yaliyotamkwa</translation>
 <translation id="3866443872548686097">Midia yako fufuzi iko tayari. Unaweza kuiondoa kwenye mfumo wako.</translation>
 <translation id="6824564591481349393">Nakili Anwani ya Barua P&amp;epe</translation>
-<translation id="907148966137935206">Usiruhusu tovuti yoyote ionyeshe viibukizi (inapendekezwa)</translation>
+<translation id="907148966137935206">Usiruhusu tovuti yoyote ionyeshe madirisha ibukizi (inapendekezwa)</translation>
 <translation id="5184063094292164363">Kidhibiti Kazi cha &amp;JavaScript</translation>
 <translation id="333371639341676808">Zuia ukurasa huu usiunde majadiliano zaidi.</translation>
 <translation id="2280486287150724112">Pambizo la kulia</translation>
@@ -1421,7 +1421,7 @@
 <translation id="644038709730536388">Pata maelezo zaidi kuhusu jinsi ya kujilinda dhidi ya programu hatari kwenye wavuti.</translation>
 <translation id="5730457677019354032">Onyesha matokeo ya Papo hapo (Viendelezi vya Papo Hapo ni vya karibu nawe pekee).</translation>
 <translation id="6677380263041696420">Badilisha picha...</translation>
-<translation id="2155931291251286316">Ruhusu viibukizi kutoka <ph name="HOST"/> kila wakati</translation>
+<translation id="2155931291251286316">Ruhusu madirisha ibukizi kutoka <ph name="HOST"/> kila wakati</translation>
 <translation id="3445830502289589282">Uthibitishaji wa awamu ya pili:</translation>
 <translation id="5650551054760837876">Matokeo ya utafutaji hayakupatikana.</translation>
 <translation id="5494362494988149300">Funga &amp;Utakapomalizika</translation>
@@ -1461,7 +1461,7 @@
 <translation id="4874539263382920044">Kichwa sharti kiwe na angalua kibambo kimoja</translation>
 <translation id="9214520840402538427">Lo! Uanzishaji wa muda wa usakinishaji sifa umechina. Tafadhali wasiliana na mwakilishi wako wa kutoa msaada.</translation>
 <translation id="798525203920325731">Nafasi za majina za mtandao</translation>
-<translation id="7092106376816104">Vighairi vya viibukizi</translation>
+<translation id="7092106376816104">Vighairi madirisha ibukizi</translation>
 <translation id="4600958291864306415">inaunda...</translation>
 <translation id="8594787581355215556">Umeingia kama <ph name="USER_EMAIL_ADDRESS"/>. Dhibiti data yako iliyolinganishwa kwenye <ph name="BEGIN_LINK"/>Dashibodi ya Google<ph name="END_LINK"/>.</translation>
 <translation id="4338600611020922010">Ongeza kwa skrini ya mwanzo</translation>
@@ -1795,7 +1795,7 @@
 <translation id="7978976675897366893">Ongeza anwani ya usafirishaji...</translation>
 <translation id="2084978867795361905">MS-IME</translation>
 <translation id="1818196664359151069">Msongo:</translation>
-<translation id="3481915276125965083">Viibukizi vifuatavyo vilizuiwa kwenye ukurasa huu:</translation>
+<translation id="3481915276125965083">Madirisha ibukizi yafuatayo yalizuiwa kwenye ukurasa huu:</translation>
 <translation id="7163503212501929773">zimesalia saa <ph name="NUMBER_MANY"/></translation>
 <translation id="7705276765467986571">Isingeweza kupakia muundo wa alamisho.</translation>
 <translation id="750413812607578381">Unapaswa kuanzisha upya <ph name="PRODUCT_NAME"/> sasa.</translation>
@@ -1862,7 +1862,7 @@
 <translation id="5486561344817861625">Unda Uanzishaji upya wa Ukurasa</translation>
 <translation id="2367972762794486313">Onyesha programu</translation>
 <translation id="5602600725402519729">&amp;Pakia tena</translation>
-<translation id="6955446738988643816">Kagua Kiibukizi</translation>
+<translation id="6955446738988643816">Kagua Dirisha Ibukizi</translation>
 <translation id="172612876728038702">TPM inasanidiwa. Tafadhali vumilia; huenda hii ikachukua dakika chache.</translation>
 <translation id="2836635946302913370">Kuingia kwa jina hili la mtumiaji kumelemazwa na msimamizi wako.</translation>
 <translation id="3512307528596687562">Ukurasa wa wavuti ulio <ph name="URL"/> umesababisha kuelekezwa kwingine kwingi. Kufuta vidakuzi vyako vya tovuti hii au kuruhusu vidakuzi vya mtu mwingine kunaweza kutatua tatizo. Ikiwa sivyo, kuna uwezekano ni tatizo la usanidi wa seva na siyo tatizo katika kifaa chako.</translation>
@@ -2680,7 +2680,7 @@
 <translation id="942954117721265519">Hakuna picha katika saraka hii.</translation>
 <translation id="671928215901716392">Funga skrini</translation>
 <translation id="2241468422635044128">Imeruhusiwa na kiendelezi</translation>
-<translation id="3727187387656390258">Kagua kiibukizi</translation>
+<translation id="3727187387656390258">Kagua dirisha ibukizi</translation>
 <translation id="361106536627977100">Data ya Flash</translation>
 <translation id="569068482611873351">Ingiza...</translation>
 <translation id="6571070086367343653">Hariri kadi ya mkopo</translation>
@@ -3199,7 +3199,7 @@
 <translation id="3414758901256308084">Sakinua</translation>
 <translation id="7791536208663663346">Inalemaza uondoaji msimbo kwenye video ya maunzi iliyoharakishwa inapopatikana.</translation>
 <translation id="87377425248837826">Wezesha Paneli</translation>
-<translation id="2805707493867224476">Ruhusu tovuti zote zionyeshe viibukizi</translation>
+<translation id="2805707493867224476">Ruhusu tovuti zote zionyeshe madirisha ibukizi</translation>
 <translation id="3561217442734750519">Thamani ya kuingizwa kwa ufunguo binafsi sharti iwe njia halali.</translation>
 <translation id="2984337792991268709">Leo <ph name="TODAY_DAYTIME"/></translation>
 <translation id="5227808808023563348">Tafuta maandishi ya awali</translation>
@@ -4720,7 +4720,7 @@
 <translation id="4614787993721978672">Inaruhusu mtumaji kubadili kati ya watoa huduma wa simu kutuma Kiolesura. Onyo: Mtoa huduma wa Sprint atafanya kazi TU kwa watumiaji walio na mpango wa Sprint uliopo.</translation>
 <translation id="146220085323579959">Mtandao umekatizwa. Tafadhali kagua muunganisho wako wa mtandao na ujaribu tena.</translation>
 <translation id="6263284346895336537">Sio Muhimu</translation>
-<translation id="6409731863280057959">Viibukizi</translation>
+<translation id="6409731863280057959">Madirisha ibukizi</translation>
 <translation id="3459774175445953971">Ilibadilishwa mwisho:</translation>
 <translation id="2569850583200847032">Washa utoaji wa nenosiri.</translation>
 <translation id="6122191549521593678">Mtandaoni</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 2b02f2b..1019ddd 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -941,7 +941,7 @@
 <translation id="5361686177218315158">Ngoại lệ máy ảnh và micrô Adobe Flash Player khác nhau.</translation>
 <translation id="3395011312013575824">Đang gửi.</translation>
 <translation id="5043766625767731235">Tiếp tục chặn plug-in không có hộp cát</translation>
-<translation id="4667176955651319626">Chặn dữ liệu web và cookie bên thứ ba</translation>
+<translation id="4667176955651319626">Chặn dữ liệu web và cookie của bên thứ ba</translation>
 <translation id="6686490380836145850">Đóng tab phía bên phải</translation>
 <translation id="8366694425498033255">Phím chọn</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> giờ</translation>
@@ -2574,7 +2574,7 @@
 <translation id="994901932508062332">Tháng vừa qua</translation>
 <translation id="1720318856472900922">Xác thực Máy chủ TLS WWW</translation>
 <translation id="62243461820985415">Chrome không thể tải xuống hình nền này.</translation>
-<translation id="1752977958630076881">Chỉ giữ dữ liệu cục bộ cho đến khi tôi thoát trình duyệt của mình</translation>
+<translation id="1752977958630076881">Chỉ lưu giữ dữ liệu cục bộ cho đến khi tôi thoát trình duyệt của mình</translation>
 <translation id="8550022383519221471">Dịch vụ đồng bộ hóa không khả dụng cho tên miền của bạn.</translation>
 <translation id="1658424621194652532">Trang này đang truy cập micrô của bạn.</translation>
 <translation id="3355823806454867987">Thay đổi thiết lập proxy...</translation>
diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resources.grd
index c86a968..8a9e420 100644
--- a/chrome/app/theme/theme_resources.grd
+++ b/chrome/app/theme/theme_resources.grd
@@ -248,6 +248,7 @@
         <structure type="chrome_scaled_image" name="IDR_ENROLL_SUCCESS" file="enroll_success.png" />
       </if>
       <structure type="chrome_scaled_image" name="IDR_ERROR_NETWORK_GENERIC" file="common/error_network_generic.png" />
+      <structure type="chrome_scaled_image" name="IDR_ERROR_NETWORK_OFFLINE" file="common/error_network_offline.png" />
       <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_PUZZLE_PIECE" file="common/exstension-features_28.png" />
@@ -483,7 +484,6 @@
       </if>
       <if expr="pp_ifdef('chromeos')">
         <structure type="chrome_scaled_image" name="IDR_NETWORK_ADD_CONNECTION" file="cros/network_add_connection.png" />
-        <structure type="chrome_scaled_image" name="IDR_NETWORK_ERROR" file="cros/network_error.png" />
         <structure type="chrome_scaled_image" name="IDR_NETWORK_HIDE_PASSWORD" file="cros/network_hide_password.png" />
         <structure type="chrome_scaled_image" name="IDR_NETWORK_HIDE_PASSWORD_HOVER" file="cros/network_hide_password_hover.png" />
         <structure type="chrome_scaled_image" name="IDR_NETWORK_SHOW_PASSWORD" file="cros/network_show_password.png" />
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
index b5c1fc7..ca42870 100644
--- a/chrome/browser/DEPS
+++ b/chrome/browser/DEPS
@@ -106,7 +106,4 @@
   "+third_party/WebKit/public/web/WebScreenInfo.h",
   "+third_party/WebKit/public/web/WebTextDirection.h",
   "+third_party/WebKit/public/web/WebWindowFeatures.h",
-
-  # These should be burned down. http://crbug.com/237267
-  "!third_party/WebKit/public/web/WebView.h",
 ]
diff --git a/chrome/browser/OWNERS b/chrome/browser/OWNERS
index f9db9bc..b614afe 100644
--- a/chrome/browser/OWNERS
+++ b/chrome/browser/OWNERS
@@ -4,6 +4,7 @@
 
 per-file chrome_content_browser_client.cc=*
 per-file chrome_content_browser_client.h=*
+per-file chrome_content_browser_client_browsertest.cc=*
 
 per-file chrome_browser_field_trials*=asvitkine@chromium.org
 per-file chrome_browser_field_trials*=stevet@chromium.org
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 9879d13..9e5a15e 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1228,14 +1228,16 @@
     IDS_FLAGS_ASH_ENABLE_NEW_AUDIO_HANDLER_NAME,
     IDS_FLAGS_ASH_ENABLE_NEW_AUDIO_HANDLER_DESCRIPTION,
     kOsCrOS,
-    ENABLE_DISABLE_VALUE_TYPE("", ash::switches::kAshDisableNewAudioHandler)
+    ENABLE_DISABLE_VALUE_TYPE(ash::switches::kAshEnableNewAudioHandler,
+                              ash::switches::kAshDisableNewAudioHandler)
   },
   {
     "ash-audio-device-menu",
     IDS_FLAGS_ASH_AUDIO_DEVICE_MENU_NAME,
     IDS_FLAGS_ASH_AUDIO_DEVICE_MENU_DESCRIPTION,
     kOsCrOS,
-    ENABLE_DISABLE_VALUE_TYPE("", ash::switches::kAshDisableAudioDeviceMenu)
+    ENABLE_DISABLE_VALUE_TYPE(ash::switches::kAshEnableAudioDeviceMenu,
+                              ash::switches::kAshDisableAudioDeviceMenu)
   },
   {
     "enable-carrier-switching",
diff --git a/chrome/browser/browsing_data/browsing_data_remover.cc b/chrome/browser/browsing_data/browsing_data_remover.cc
index 1eb406a..15b8959 100644
--- a/chrome/browser/browsing_data/browsing_data_remover.cc
+++ b/chrome/browser/browsing_data/browsing_data_remover.cc
@@ -849,10 +849,8 @@
 void BrowsingDataRemover::ClearShaderCacheOnUIThread() {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
-  BrowserContext::GetDefaultStoragePartition(profile_)->ClearDataForRange(
-      content::StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE,
-      content::StoragePartition::kAllStorage,
-      delete_begin_, delete_end_,
+  BrowserContext::GetDefaultStoragePartition(profile_)->AsyncClearDataBetween(
+      content::StoragePartition::kShaderStorage, delete_begin_, delete_end_,
       base::Bind(&BrowsingDataRemover::ClearedShaderCache,
                  base::Unretained(this)));
 }
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index a166d59..a47541a 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -2195,6 +2195,11 @@
   // actually handle them.
   handler->AddHandlerPair(&WillHandleBrowserAboutURL,
                           BrowserURLHandler::null_handler());
+
+  // Handler to rewrite chrome://newtab for InstantExtended.
+  handler->AddHandlerPair(&chrome::HandleNewTabURLRewrite,
+                          &chrome::HandleNewTabURLReverseRewrite);
+
   // chrome: & friends.
   handler->AddHandlerPair(&HandleWebUI, &HandleWebUIReverse);
 }
diff --git a/chrome/browser/chrome_content_browser_client_browsertest.cc b/chrome/browser/chrome_content_browser_client_browsertest.cc
index de24691..9d4b494 100644
--- a/chrome/browser/chrome_content_browser_client_browsertest.cc
+++ b/chrome/browser/chrome_content_browser_client_browsertest.cc
@@ -3,8 +3,10 @@
 // found in the LICENSE file.
 
 #include "base/command_line.h"
+#include "chrome/browser/search/search.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "content/public/browser/navigation_controller.h"
@@ -75,6 +77,37 @@
   EXPECT_EQ(url, entry->GetVirtualURL());
 }
 
+IN_PROC_BROWSER_TEST_F(ChromeContentBrowserClientBrowserTest,
+                       UberURLHandler_InstantExtendedNewTabPage) {
+  const GURL url_original("chrome://newtab");
+  const GURL url_rewritten("http://example.com/newtab");
+  CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+      switches::kInstantNewTabURL, url_rewritten.spec());
+  chrome::EnableInstantExtendedAPIForTesting();
+
+  ui_test_utils::NavigateToURL(browser(), url_original);
+  NavigationEntry* entry = GetLastCommittedEntry();
+
+  ASSERT_TRUE(entry != NULL);
+  EXPECT_EQ(url_rewritten, entry->GetURL());
+  EXPECT_EQ(url_original, entry->GetVirtualURL());
+}
+
+IN_PROC_BROWSER_TEST_F(ChromeContentBrowserClientBrowserTest,
+                       UberURLHandler_InstantExtendedNewTabPageDisabled) {
+  const GURL url_original("chrome://newtab");
+  const GURL url_rewritten("http://example.com/newtab");
+  CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+      switches::kInstantNewTabURL, url_rewritten.spec());
+
+  ui_test_utils::NavigateToURL(browser(), url_original);
+  NavigationEntry* entry = GetLastCommittedEntry();
+
+  ASSERT_TRUE(entry != NULL);
+  EXPECT_EQ(url_original, entry->GetURL());
+  EXPECT_EQ(url_original, entry->GetVirtualURL());
+}
+
 // Test that a basic navigation works in --site-per-process mode.  This prevents
 // regressions when that mode calls out into the ChromeContentBrowserClient,
 // such as http://crbug.com/164223.
diff --git a/chrome/browser/chrome_page_zoom.cc b/chrome/browser/chrome_page_zoom.cc
index acca565..ae596ce 100644
--- a/chrome/browser/chrome_page_zoom.cc
+++ b/chrome/browser/chrome_page_zoom.cc
@@ -14,8 +14,8 @@
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/user_metrics.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/common/page_zoom.h"
 #include "content/public/common/renderer_preferences.h"
-#include "third_party/WebKit/public/web/WebView.h"
 
 using content::UserMetricsAction;
 
@@ -36,7 +36,7 @@
   for (size_t i = 0; i < kPresetZoomFactorsSize; i++) {
     double zoom_value = kPresetZoomFactors[i];
     if (value_type == PAGE_ZOOM_VALUE_TYPE_LEVEL)
-      zoom_value = WebKit::WebView::zoomFactorToZoomLevel(zoom_value);
+      zoom_value = content::ZoomFactorToZoomLevel(zoom_value);
     if (content::ZoomValuesEqual(zoom_value, custom_value))
       found_custom = true;
     zoom_values.push_back(zoom_value);
@@ -44,10 +44,10 @@
   // If the preset array did not contain the custom value, append it to the
   // vector and then sort.
   double min = value_type == PAGE_ZOOM_VALUE_TYPE_LEVEL ?
-      WebKit::WebView::zoomFactorToZoomLevel(content::kMinimumZoomFactor) :
+      content::ZoomFactorToZoomLevel(content::kMinimumZoomFactor) :
       content::kMinimumZoomFactor;
   double max = value_type == PAGE_ZOOM_VALUE_TYPE_LEVEL ?
-      WebKit::WebView::zoomFactorToZoomLevel(content::kMaximumZoomFactor) :
+      content::ZoomFactorToZoomLevel(content::kMaximumZoomFactor) :
       content::kMaximumZoomFactor;
   if (!found_custom && custom_value > min && custom_value < max) {
     zoom_values.push_back(custom_value);
diff --git a/chrome/browser/chromeos/drive/change_list_loader_unittest.cc b/chrome/browser/chromeos/drive/change_list_loader_unittest.cc
index d774a64..7605e61 100644
--- a/chrome/browser/chromeos/drive/change_list_loader_unittest.cc
+++ b/chrome/browser/chromeos/drive/change_list_loader_unittest.cc
@@ -66,6 +66,35 @@
   DISALLOW_COPY_AND_ASSIGN(TestChangeListLoaderObserver);
 };
 
+class TestDriveService : public FakeDriveService {
+ public:
+  TestDriveService() : never_return_all_resource_list_(false),
+                       blocked_call_count_(0) {}
+
+  void set_never_return_all_resource_list(bool value) {
+    never_return_all_resource_list_ = value;
+  }
+
+  int blocked_call_count() const { return blocked_call_count_; }
+
+  // FakeDriveService override.
+  virtual google_apis::CancelCallback GetAllResourceList(
+      const google_apis::GetResourceListCallback& callback) OVERRIDE {
+    if (never_return_all_resource_list_) {
+      ++blocked_call_count_;
+      return google_apis::CancelCallback();
+    }
+    return FakeDriveService::GetAllResourceList(callback);
+  }
+
+ private:
+  // GetAllResourceList never returns result when this is set to true.
+  // Used to emulate the real server's slowness.
+  bool never_return_all_resource_list_;
+
+  int blocked_call_count_;  // Number of blocked method calls.
+};
+
 class ChangeListLoaderTest : public testing::Test {
  protected:
   virtual void SetUp() OVERRIDE {
@@ -73,7 +102,7 @@
     pref_service_.reset(new TestingPrefServiceSimple);
     test_util::RegisterDrivePrefs(pref_service_->registry());
 
-    drive_service_.reset(new FakeDriveService);
+    drive_service_.reset(new TestDriveService);
     ASSERT_TRUE(drive_service_->LoadResourceListForWapi(
         "gdata/root_feed.json"));
     ASSERT_TRUE(drive_service_->LoadAccountMetadataForWapi(
@@ -121,7 +150,7 @@
   content::TestBrowserThreadBundle thread_bundle_;
   base::ScopedTempDir temp_dir_;
   scoped_ptr<TestingPrefServiceSimple> pref_service_;
-  scoped_ptr<FakeDriveService> drive_service_;
+  scoped_ptr<TestDriveService> drive_service_;
   scoped_ptr<JobScheduler> scheduler_;
   scoped_ptr<ResourceMetadataStorage,
              test_util::DestroyHelperForTests> metadata_storage_;
@@ -224,6 +253,112 @@
             metadata_->GetResourceEntryByPath(file_path, &entry));
 }
 
+TEST_F(ChangeListLoaderTest, LoadIfNeeded_MyDrive) {
+  // Emulate the slowness of GetAllResourceList().
+  drive_service_->set_never_return_all_resource_list(true);
+
+  // Load grand root.
+  FileError error = FILE_ERROR_FAILED;
+  change_list_loader_->LoadIfNeeded(
+      DirectoryFetchInfo(util::kDriveGrandRootSpecialResourceId, 0),
+      google_apis::test_util::CreateCopyResultCallback(&error));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(FILE_ERROR_OK, error);
+
+  // GetAllResourceList() was called.
+  EXPECT_EQ(1, drive_service_->blocked_call_count());
+
+  // My Drive is present in the local metadata, but its child is not.
+  ResourceEntry entry;
+  EXPECT_EQ(FILE_ERROR_OK,
+            metadata_->GetResourceEntryByPath(util::GetDriveMyDriveRootPath(),
+                                              &entry));
+  const int64 mydrive_changestamp =
+      entry.directory_specific_info().changestamp();
+
+  base::FilePath file_path =
+      util::GetDriveMyDriveRootPath().AppendASCII("File 1.txt");
+  EXPECT_EQ(FILE_ERROR_NOT_FOUND,
+            metadata_->GetResourceEntryByPath(file_path, &entry));
+
+  // Load My Drive.
+  change_list_loader_->LoadIfNeeded(
+      DirectoryFetchInfo(drive_service_->GetRootResourceId(),
+                         mydrive_changestamp),
+      google_apis::test_util::CreateCopyResultCallback(&error));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(FILE_ERROR_OK, error);
+
+  // Now the file is present.
+  EXPECT_EQ(FILE_ERROR_OK,
+            metadata_->GetResourceEntryByPath(file_path, &entry));
+}
+
+TEST_F(ChangeListLoaderTest, LoadIfNeeded_NewDirectories) {
+  // Make local metadata up to date.
+  FileError error = FILE_ERROR_FAILED;
+  change_list_loader_->LoadIfNeeded(
+      DirectoryFetchInfo(),
+      google_apis::test_util::CreateCopyResultCallback(&error));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(FILE_ERROR_OK, error);
+
+  // Add a new file.
+  scoped_ptr<google_apis::ResourceEntry> file = AddNewFile("New File");
+  ASSERT_TRUE(file);
+
+  // Emulate the slowness of GetAllResourceList().
+  drive_service_->set_never_return_all_resource_list(true);
+
+  // Enter refreshing state.
+  FileError check_for_updates_error = FILE_ERROR_FAILED;
+  change_list_loader_->CheckForUpdates(
+      google_apis::test_util::CreateCopyResultCallback(
+          &check_for_updates_error));
+  EXPECT_TRUE(change_list_loader_->IsRefreshing());
+
+  // Load My Drive.
+  change_list_loader_->LoadIfNeeded(
+      DirectoryFetchInfo(drive_service_->GetRootResourceId(),
+                         metadata_->GetLargestChangestamp()),
+      google_apis::test_util::CreateCopyResultCallback(&error));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(FILE_ERROR_OK, error);
+
+  // The new file is present in the local metadata.
+  base::FilePath file_path =
+      util::GetDriveMyDriveRootPath().AppendASCII(file->title());
+  ResourceEntry entry;
+  EXPECT_EQ(FILE_ERROR_OK,
+            metadata_->GetResourceEntryByPath(file_path, &entry));
+}
+
+TEST_F(ChangeListLoaderTest, LoadIfNeeded_MultipleCalls) {
+  TestChangeListLoaderObserver observer(change_list_loader_.get());
+
+  // Load grand root.
+  FileError error = FILE_ERROR_FAILED;
+  change_list_loader_->LoadIfNeeded(
+      DirectoryFetchInfo(util::kDriveGrandRootSpecialResourceId, 0),
+      google_apis::test_util::CreateCopyResultCallback(&error));
+
+  // Load grand root again without waiting for the result.
+  FileError error2 = FILE_ERROR_FAILED;
+  change_list_loader_->LoadIfNeeded(
+      DirectoryFetchInfo(util::kDriveGrandRootSpecialResourceId, 0),
+      google_apis::test_util::CreateCopyResultCallback(&error2));
+  base::RunLoop().RunUntilIdle();
+
+  // Callback is called for each method call.
+  EXPECT_EQ(FILE_ERROR_OK, error);
+  EXPECT_EQ(FILE_ERROR_OK, error2);
+
+  // No duplicated resource list load and observer events.
+  EXPECT_EQ(1, drive_service_->resource_list_load_count());
+  EXPECT_EQ(1, observer.initial_load_complete_count());
+  EXPECT_EQ(1, observer.load_from_server_complete_count());
+}
+
 TEST_F(ChangeListLoaderTest, CheckForUpdates) {
   // CheckForUpdates() results in no-op before load.
   FileError check_for_updates_error = FILE_ERROR_FAILED;
diff --git a/chrome/browser/chromeos/drive/drive_integration_service.cc b/chrome/browser/chromeos/drive/drive_integration_service.cc
index 1af4edc..139292c 100644
--- a/chrome/browser/chromeos/drive/drive_integration_service.cc
+++ b/chrome/browser/chromeos/drive/drive_integration_service.cc
@@ -232,6 +232,13 @@
     drive_notification_manager->RemoveObserver(this);
 
   RemoveDriveMountPoint();
+  debug_info_collector_.reset();

+  download_handler_.reset();

+  file_write_helper_.reset();

+  file_system_.reset();

+  drive_app_registry_.reset();

+  scheduler_.reset();
+  drive_service_.reset();
 }
 
 void DriveIntegrationService::AddObserver(
diff --git a/chrome/browser/chromeos/drive/file_cache.cc b/chrome/browser/chromeos/drive/file_cache.cc
index 1b1ef5e..8ef2ab7 100644
--- a/chrome/browser/chromeos/drive/file_cache.cc
+++ b/chrome/browser/chromeos/drive/file_cache.cc
@@ -238,7 +238,6 @@
 }
 
 void FileCache::GetFileOnUIThread(const std::string& resource_id,
-                                  const std::string& md5,
                                   const GetFileFromCacheCallback& callback) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   DCHECK(!callback.is_null());
@@ -249,7 +248,6 @@
                                    base::Bind(&FileCache::GetFile,
                                               base::Unretained(this),
                                               resource_id,
-                                              md5,
                                               cache_file_path),
                                    base::Bind(&RunGetFileFromCacheCallback,
                                               callback,
@@ -257,13 +255,12 @@
 }
 
 FileError FileCache::GetFile(const std::string& resource_id,
-                             const std::string& md5,
                              base::FilePath* cache_file_path) {
   AssertOnSequencedWorkerPool();
   DCHECK(cache_file_path);
 
   FileCacheEntry cache_entry;
-  if (!GetCacheEntry(resource_id, md5, &cache_entry) ||
+  if (!storage_->GetCacheEntry(resource_id, &cache_entry) ||
       !cache_entry.is_present())
     return FILE_ERROR_NOT_FOUND;
 
@@ -417,7 +414,6 @@
   if (cache_entry.is_dirty())
     return FILE_ERROR_OK;
 
-  // Now that file operations have completed, update metadata.
   cache_entry.set_is_dirty(true);
   return storage_->PutCacheEntry(resource_id, cache_entry) ?
       FILE_ERROR_OK : FILE_ERROR_FAILED;
@@ -427,30 +423,24 @@
                                 const std::string& md5) {
   AssertOnSequencedWorkerPool();
 
-  // |md5| is the new .<md5> extension to rename the file to.
-  // So, search for entry in cache without comparing md5.
-  FileCacheEntry cache_entry;
-
   // Clearing a dirty file means its entry and actual file blob must exist in
   // cache.
+  FileCacheEntry cache_entry;
   if (!storage_->GetCacheEntry(resource_id, &cache_entry) ||
       !cache_entry.is_present()) {
     LOG(WARNING) << "Can't clear dirty state of a file that wasn't cached: "
-                 << "res_id=" << resource_id
-                 << ", md5=" << md5;
+                 << resource_id;
     return FILE_ERROR_NOT_FOUND;
   }
 
   // If a file is not dirty (it should have been marked dirty via
   // MarkDirtyInCache), clearing its dirty state is an invalid operation.
   if (!cache_entry.is_dirty()) {
-    LOG(WARNING) << "Can't clear dirty state of a non-dirty file: res_id="
-                 << resource_id
-                 << ", md5=" << md5;
+    LOG(WARNING) << "Can't clear dirty state of a non-dirty file: "
+                 << resource_id;
     return FILE_ERROR_INVALID_OPERATION;
   }
 
-  // Now that file operations have completed, update metadata.
   cache_entry.set_md5(md5);
   cache_entry.set_is_dirty(false);
   return storage_->PutCacheEntry(resource_id, cache_entry) ?
diff --git a/chrome/browser/chromeos/drive/file_cache.h b/chrome/browser/chromeos/drive/file_cache.h
index c576b7b..405341b 100644
--- a/chrome/browser/chromeos/drive/file_cache.h
+++ b/chrome/browser/chromeos/drive/file_cache.h
@@ -134,15 +134,12 @@
   // |callback| must not be null.
   // Must be called on the UI thread.
   void GetFileOnUIThread(const std::string& resource_id,
-                         const std::string& md5,
                          const GetFileFromCacheCallback& callback);
 
-  // Checks if file corresponding to |resource_id| and |md5| exists in cache,
-  // and returns FILE_ERROR_OK with |cache_file_path| storing the path to
-  // the file.
+  // Checks if file corresponding to |resource_id| exists in cache, and returns
+  // FILE_ERROR_OK with |cache_file_path| storing the path to the file.
   // |cache_file_path| must not be null.
   FileError GetFile(const std::string& resource_id,
-                    const std::string& md5,
                     base::FilePath* cache_file_path);
 
   // Runs Store() on |blocking_task_runner_|, and calls |callback| with
@@ -205,7 +202,7 @@
   // Marks the specified entry dirty.
   FileError MarkDirty(const std::string& resource_id);
 
-  // Clears dirty state of the specified entry.
+  // Clears dirty state of the specified entry and updates its MD5.
   FileError ClearDirty(const std::string& resource_id,
                        const std::string& md5);
 
diff --git a/chrome/browser/chromeos/drive/file_cache_unittest.cc b/chrome/browser/chromeos/drive/file_cache_unittest.cc
index f18830a..7db6e0a 100644
--- a/chrome/browser/chromeos/drive/file_cache_unittest.cc
+++ b/chrome/browser/chromeos/drive/file_cache_unittest.cc
@@ -106,14 +106,11 @@
     ASSERT_TRUE(success);
   }
 
-  void TestGetFileFromCacheByResourceIdAndMd5(
-      const std::string& resource_id,
-      const std::string& md5,
-      FileError expected_error,
-      const std::string& expected_file_extension) {
+  void TestGetFile(const std::string& resource_id,
+                   FileError expected_error) {
     FileError error = FILE_ERROR_OK;
     base::FilePath cache_file_path;
-    cache_->GetFileOnUIThread(resource_id, md5,
+    cache_->GetFileOnUIThread(resource_id,
                               google_apis::test_util::CreateCopyResultCallback(
                                   &error, &cache_file_path));
     test_util::RunBlockingPoolTask();
@@ -217,7 +214,7 @@
     if (error == FILE_ERROR_OK) {
       base::FilePath cache_file_path;
       cache_->GetFileOnUIThread(
-          resource_id, std::string(),
+          resource_id,
           google_apis::test_util::CreateCopyResultCallback(
               &error, &cache_file_path));
       test_util::RunBlockingPoolTask();
@@ -271,7 +268,6 @@
   }
 
   void TestMarkAsUnmounted(const std::string& resource_id,
-                           const std::string& md5,
                            const base::FilePath& file_path,
                            FileError expected_error,
                            int expected_cache_state) {
@@ -286,7 +282,7 @@
 
     base::FilePath cache_file_path;
     cache_->GetFileOnUIThread(
-        resource_id, md5,
+        resource_id,
         google_apis::test_util::CreateCopyResultCallback(
             &error, &cache_file_path));
     test_util::RunBlockingPoolTask();
@@ -411,19 +407,11 @@
                    FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT);
 
   // Then try to get the existing file from cache.
-  TestGetFileFromCacheByResourceIdAndMd5(
-      resource_id, md5, FILE_ERROR_OK, md5);
+  TestGetFile(resource_id, FILE_ERROR_OK);
 
-  // Get file from cache with same resource id as existing file but different
-  // md5.
-  TestGetFileFromCacheByResourceIdAndMd5(
-      resource_id, "9999", FILE_ERROR_NOT_FOUND, md5);
-
-  // Get file from cache with different resource id from existing file but same
-  // md5.
+  // Get file from cache with different resource id.
   resource_id = "document:1a2b";
-  TestGetFileFromCacheByResourceIdAndMd5(
-      resource_id, md5, FILE_ERROR_NOT_FOUND, md5);
+  TestGetFile(resource_id, FILE_ERROR_NOT_FOUND);
 }
 
 TEST_F(FileCacheTestOnUIThread, RemoveFromCacheSimple) {
@@ -506,16 +494,14 @@
   TestPin(resource_id, FILE_ERROR_OK, TEST_CACHE_STATE_PINNED);
 
   // Get the non-existent pinned file from cache.
-  TestGetFileFromCacheByResourceIdAndMd5(
-      resource_id, md5, FILE_ERROR_NOT_FOUND, md5);
+  TestGetFile(resource_id, FILE_ERROR_NOT_FOUND);
 
   // Store an existing file to the previously pinned non-existent file.
   TestStoreToCache(resource_id, md5, dummy_file_path_, FILE_ERROR_OK,
                    TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_PINNED);
 
   // Get the previously pinned and stored file from cache.
-  TestGetFileFromCacheByResourceIdAndMd5(
-      resource_id, md5, FILE_ERROR_OK, md5);
+  TestGetFile(resource_id, FILE_ERROR_OK);
 }
 
 TEST_F(FileCacheTestOnUIThread, RemoveFromCachePinned) {
@@ -595,7 +581,7 @@
   base::FilePath dirty_path;
   FileError error = FILE_ERROR_FAILED;
   cache_->GetFileOnUIThread(
-      resource_id, md5,
+      resource_id,
       google_apis::test_util::CreateCopyResultCallback(&error, &dirty_path));
   test_util::RunBlockingPoolTask();
   EXPECT_EQ(FILE_ERROR_OK, error);
@@ -710,12 +696,12 @@
   base::FilePath file_path;
   FileError error = FILE_ERROR_FAILED;
   cache_->GetFileOnUIThread(
-      resource_id, md5,
+      resource_id,
       google_apis::test_util::CreateCopyResultCallback(&error, &file_path));
   test_util::RunBlockingPoolTask();
   EXPECT_EQ(FILE_ERROR_OK, error);
 
-  TestMarkAsUnmounted(resource_id, md5, file_path, FILE_ERROR_OK,
+  TestMarkAsUnmounted(resource_id, file_path, FILE_ERROR_OK,
                       TEST_CACHE_STATE_PRESENT);
   EXPECT_TRUE(CacheEntryExists(resource_id, md5));
 
@@ -895,8 +881,7 @@
             cache_->Store(resource_id_tmp, md5_tmp, src_file,
                           FileCache::FILE_OPERATION_COPY));
   base::FilePath tmp_path;
-  ASSERT_EQ(FILE_ERROR_OK,
-            cache_->GetFile(resource_id_tmp, md5_tmp, &tmp_path));
+  ASSERT_EQ(FILE_ERROR_OK, cache_->GetFile(resource_id_tmp, &tmp_path));
 
   // Store a file as a pinned file and remember the path.
   const std::string resource_id_pinned = "id_pinned", md5_pinned = "md5_pinned";
@@ -905,8 +890,7 @@
                           FileCache::FILE_OPERATION_COPY));
   ASSERT_EQ(FILE_ERROR_OK, cache_->Pin(resource_id_pinned));
   base::FilePath pinned_path;
-  ASSERT_EQ(FILE_ERROR_OK,
-            cache_->GetFile(resource_id_pinned, md5_pinned, &pinned_path));
+  ASSERT_EQ(FILE_ERROR_OK, cache_->GetFile(resource_id_pinned, &pinned_path));
 
   // Call FreeDiskSpaceIfNeededFor().
   fake_free_disk_space_getter_->set_default_value(test_util::kLotsOfSpace);
diff --git a/chrome/browser/chromeos/drive/file_system.cc b/chrome/browser/chromeos/drive/file_system.cc
index 674dbc4..0962967 100644
--- a/chrome/browser/chromeos/drive/file_system.cc
+++ b/chrome/browser/chromeos/drive/file_system.cc
@@ -756,7 +756,6 @@
 
   drive::internal::SearchMetadata(blocking_task_runner_,
                                   resource_metadata_,
-                                  cache_,
                                   query,
                                   options,
                                   at_most_num_matches,
@@ -949,10 +948,8 @@
 
   // Gets the cache file path.
   const std::string& resource_id = entry->resource_id();
-  const std::string& md5 = entry->file_specific_info().md5();
   cache_->GetFileOnUIThread(
       resource_id,
-      md5,
       base::Bind(
           &FileSystem::CheckLocalModificationAndRunAfterGetCacheFile,
           weak_ptr_factory_.GetWeakPtr(),
diff --git a/chrome/browser/chromeos/drive/file_system/copy_operation_unittest.cc b/chrome/browser/chromeos/drive/file_system/copy_operation_unittest.cc
index d9643e5..aee7007 100644
--- a/chrome/browser/chromeos/drive/file_system/copy_operation_unittest.cc
+++ b/chrome/browser/chromeos/drive/file_system/copy_operation_unittest.cc
@@ -125,7 +125,6 @@
   // The content is "x"s of the file size.
   base::FilePath cache_path;
   cache()->GetFileOnUIThread(entry.resource_id(),
-                             entry.file_specific_info().md5(),
                              google_apis::test_util::CreateCopyResultCallback(
                                  &error, &cache_path));
   test_util::RunBlockingPoolTask();
diff --git a/chrome/browser/chromeos/drive/file_system/download_operation.cc b/chrome/browser/chromeos/drive/file_system/download_operation.cc
index a391986..0e01200 100644
--- a/chrome/browser/chromeos/drive/file_system/download_operation.cc
+++ b/chrome/browser/chromeos/drive/file_system/download_operation.cc
@@ -66,29 +66,36 @@
     return FILE_ERROR_OK;
   }
 
-  // Get the cache file path if available.
-  cache->GetFile(entry->resource_id(),
-                 entry->file_specific_info().md5(),
-                 cache_file_path);
+  // Leave |cache_file_path| empty when no cache entry is found.
+  FileCacheEntry cache_entry;
+  if (!cache->GetCacheEntry(entry->resource_id(),
+                            entry->file_specific_info().md5(),
+                            &cache_entry))
+    return FILE_ERROR_OK;
 
-  // If the cache file is available and dirty, the modified file info needs to
-  // be stored in |entry|.
+  // Leave |cache_file_path| empty when the stored file is obsolete and has no
+  // local modification.
+  if (!cache_entry.is_dirty() &&
+      entry->file_specific_info().md5() != cache_entry.md5())
+    return FILE_ERROR_OK;
+
+  // Fill |cache_file_path| with the path to the cached file.
+  FileError error = cache->GetFile(entry->resource_id(), cache_file_path);
+  if (error != FILE_ERROR_OK)
+    return error;
+
+  // If the cache file is dirty, the modified file info needs to be stored in
+  // |entry|.
   // TODO(kinaba): crbug.com/246469. The logic below is a duplicate of that in
   // drive::FileSystem::CheckLocalModificationAndRun. We should merge them once
   // the drive::FS side is also converted to run fully on blocking pool.
-  if (!cache_file_path->empty()) {
-    FileCacheEntry cache_entry;
-    if (cache->GetCacheEntry(entry->resource_id(),
-                             entry->file_specific_info().md5(),
-                             &cache_entry) &&
-        cache_entry.is_dirty()) {
-      base::PlatformFileInfo file_info;
-      if (file_util::GetFileInfo(*cache_file_path, &file_info)) {
-        PlatformFileInfoProto entry_file_info;
-        util::ConvertPlatformFileInfoToResourceEntry(file_info,
-                                                     &entry_file_info);
-        *entry->mutable_file_info() = entry_file_info;
-      }
+  if (cache_entry.is_dirty()) {
+    base::PlatformFileInfo file_info;
+    if (file_util::GetFileInfo(*cache_file_path, &file_info)) {
+      PlatformFileInfoProto entry_file_info;
+      util::ConvertPlatformFileInfoToResourceEntry(file_info,
+                                                   &entry_file_info);
+      *entry->mutable_file_info() = entry_file_info;
     }
   }
 
@@ -194,7 +201,7 @@
     return error;
   }
 
-  return cache->GetFile(resource_id, md5, cache_file_path);
+  return cache->GetFile(resource_id, cache_file_path);
 }
 
 }  // namespace
diff --git a/chrome/browser/chromeos/drive/file_system/open_file_operation.cc b/chrome/browser/chromeos/drive/file_system/open_file_operation.cc
index d23c488..7743c06 100644
--- a/chrome/browser/chromeos/drive/file_system/open_file_operation.cc
+++ b/chrome/browser/chromeos/drive/file_system/open_file_operation.cc
@@ -26,13 +26,12 @@
 
 FileError UpdateFileLocalState(internal::FileCache* cache,
                                const std::string& resource_id,
-                               const std::string& md5,
                                base::FilePath* local_file_path) {
   FileError error = cache->MarkDirty(resource_id);
   if (error != FILE_ERROR_OK)
     return error;
 
-  return cache->GetFile(resource_id, md5, local_file_path);
+  return cache->GetFile(resource_id, local_file_path);
 }
 
 }  // namespace
@@ -140,7 +139,6 @@
       base::Bind(&UpdateFileLocalState,
                  cache_,
                  entry->resource_id(),
-                 entry->file_specific_info().md5(),
                  new_local_file_path),
       base::Bind(&OpenFileOperation::OpenFileAfterUpdateLocalState,
                  weak_ptr_factory_.GetWeakPtr(),
diff --git a/chrome/browser/chromeos/drive/file_system/truncate_operation_unittest.cc b/chrome/browser/chromeos/drive/file_system/truncate_operation_unittest.cc
index 32ff259..e2c8575 100644
--- a/chrome/browser/chromeos/drive/file_system/truncate_operation_unittest.cc
+++ b/chrome/browser/chromeos/drive/file_system/truncate_operation_unittest.cc
@@ -48,7 +48,7 @@
   base::FilePath local_path;
   error = FILE_ERROR_FAILED;
   cache()->GetFileOnUIThread(
-      src_entry.resource_id(), src_entry.file_specific_info().md5(),
+      src_entry.resource_id(),
       google_apis::test_util::CreateCopyResultCallback(&error, &local_path));
   test_util::RunBlockingPoolTask();
   ASSERT_EQ(FILE_ERROR_OK, error);
@@ -107,7 +107,7 @@
   base::FilePath local_path;
   error = FILE_ERROR_FAILED;
   cache()->GetFileOnUIThread(
-      src_entry.resource_id(), src_entry.file_specific_info().md5(),
+      src_entry.resource_id(),
       google_apis::test_util::CreateCopyResultCallback(&error, &local_path));
   test_util::RunBlockingPoolTask();
   ASSERT_EQ(FILE_ERROR_OK, error);
diff --git a/chrome/browser/chromeos/drive/file_system/update_operation.cc b/chrome/browser/chromeos/drive/file_system/update_operation.cc
index 7bc4255..324fcda 100644
--- a/chrome/browser/chromeos/drive/file_system/update_operation.cc
+++ b/chrome/browser/chromeos/drive/file_system/update_operation.cc
@@ -40,8 +40,7 @@
   if (drive_file_path->empty())
     return FILE_ERROR_NOT_FOUND;
 
-  error = cache->GetFile(
-      resource_id, entry->file_specific_info().md5(), cache_file_path);
+  error = cache->GetFile(resource_id, cache_file_path);
   if (error != FILE_ERROR_OK)
     return error;
 
diff --git a/chrome/browser/chromeos/drive/file_system_unittest.cc b/chrome/browser/chromeos/drive/file_system_unittest.cc
index 95bfd1b..68d79c2 100644
--- a/chrome/browser/chromeos/drive/file_system_unittest.cc
+++ b/chrome/browser/chromeos/drive/file_system_unittest.cc
@@ -772,8 +772,7 @@
   EXPECT_TRUE(cache_entry.is_dirty());
 
   base::FilePath cache_file_path;
-  EXPECT_EQ(FILE_ERROR_OK,
-            cache_->GetFile(file_resource_id, md5, &cache_file_path));
+  EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(file_resource_id, &cache_file_path));
   EXPECT_EQ(cache_file_path, opened_file_path);
 
   // Write a new content.
diff --git a/chrome/browser/chromeos/drive/resource_metadata_storage.cc b/chrome/browser/chromeos/drive/resource_metadata_storage.cc
index 6f7c74d..56a6bc9 100644
--- a/chrome/browser/chromeos/drive/resource_metadata_storage.cc
+++ b/chrome/browser/chromeos/drive/resource_metadata_storage.cc
@@ -121,6 +121,28 @@
   return entry_;
 }
 
+bool ResourceMetadataStorage::Iterator::GetCacheEntry(
+    FileCacheEntry* cache_entry) {
+  base::ThreadRestrictions::AssertIOAllowed();
+  DCHECK(!IsAtEnd());
+
+  // Try to seek to the cache entry.
+  std::string current_key = it_->key().ToString();
+  std::string cache_entry_key = GetCacheEntryKey(current_key);
+  it_->Seek(leveldb::Slice(cache_entry_key));
+
+  bool success = it_->Valid() &&
+      it_->key().compare(cache_entry_key) == 0 &&
+      cache_entry->ParseFromArray(it_->value().data(), it_->value().size());
+
+  // Seek back to the original position.
+  it_->Seek(leveldb::Slice(current_key));
+  DCHECK(!IsAtEnd());
+  DCHECK_EQ(current_key, it_->key().ToString());
+
+  return success;
+}
+
 void ResourceMetadataStorage::Iterator::Advance() {
   base::ThreadRestrictions::AssertIOAllowed();
   DCHECK(!IsAtEnd());
diff --git a/chrome/browser/chromeos/drive/resource_metadata_storage.h b/chrome/browser/chromeos/drive/resource_metadata_storage.h
index adac420..0ad61ef 100644
--- a/chrome/browser/chromeos/drive/resource_metadata_storage.h
+++ b/chrome/browser/chromeos/drive/resource_metadata_storage.h
@@ -51,6 +51,9 @@
     // Returns the entry currently pointed by this object.
     const ResourceEntry& Get() const;
 
+    // Gets the cache entry which corresponds to |entry_| if available.
+    bool GetCacheEntry(FileCacheEntry* cache_entry);
+
     // Advances to the next entry.
     void Advance();
 
diff --git a/chrome/browser/chromeos/drive/resource_metadata_storage_unittest.cc b/chrome/browser/chromeos/drive/resource_metadata_storage_unittest.cc
index a1f31ad..667f920 100644
--- a/chrome/browser/chromeos/drive/resource_metadata_storage_unittest.cc
+++ b/chrome/browser/chromeos/drive/resource_metadata_storage_unittest.cc
@@ -151,24 +151,39 @@
   for (size_t i = 0; i < entries.size(); ++i)
     EXPECT_TRUE(storage_->PutEntry(entries[i]));
 
-  // Insert some dummy cache entries.
-  FileCacheEntry cache_entry;
-  EXPECT_TRUE(storage_->PutCacheEntry(entries[0].resource_id(), cache_entry));
-  EXPECT_TRUE(storage_->PutCacheEntry(entries[1].resource_id(), cache_entry));
+  // Insert some cache entries.
+  std::map<std::string, FileCacheEntry> cache_entries;
+  cache_entries[entries[0].resource_id()].set_md5("aaaaaa");
+  cache_entries[entries[1].resource_id()].set_md5("bbbbbb");
+  for (std::map<std::string, FileCacheEntry>::iterator it =
+           cache_entries.begin(); it != cache_entries.end(); ++it)
+    EXPECT_TRUE(storage_->PutCacheEntry(it->first, it->second));
 
   // Iterate and check the result.
-  std::map<std::string, ResourceEntry> result;
+  std::map<std::string, ResourceEntry> found_entries;
+  std::map<std::string, FileCacheEntry> found_cache_entries;
   scoped_ptr<ResourceMetadataStorage::Iterator> it = storage_->GetIterator();
   ASSERT_TRUE(it);
   for (; !it->IsAtEnd(); it->Advance()) {
     const ResourceEntry& entry = it->Get();
-    result[entry.resource_id()] = entry;
+    found_entries[entry.resource_id()] = entry;
+
+    FileCacheEntry cache_entry;
+    if (it->GetCacheEntry(&cache_entry))
+      found_cache_entries[entry.resource_id()] = cache_entry;
   }
   EXPECT_FALSE(it->HasError());
 
-  EXPECT_EQ(entries.size(), result.size());
+  EXPECT_EQ(entries.size(), found_entries.size());
   for (size_t i = 0; i < entries.size(); ++i)
-    EXPECT_EQ(1U, result.count(entries[i].resource_id()));
+    EXPECT_EQ(1U, found_entries.count(entries[i].resource_id()));
+
+  EXPECT_EQ(cache_entries.size(), found_cache_entries.size());
+  for (std::map<std::string, FileCacheEntry>::iterator it =
+           cache_entries.begin(); it != cache_entries.end(); ++it) {
+    ASSERT_EQ(1U, found_cache_entries.count(it->first));
+    EXPECT_EQ(it->second.md5(), found_cache_entries[it->first].md5());
+  }
 }
 
 TEST_F(ResourceMetadataStorageTest, PutCacheEntry) {
diff --git a/chrome/browser/chromeos/drive/search_metadata.cc b/chrome/browser/chromeos/drive/search_metadata.cc
index 9e5b30c..a167830 100644
--- a/chrome/browser/chromeos/drive/search_metadata.cc
+++ b/chrome/browser/chromeos/drive/search_metadata.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/i18n/string_search.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/chromeos/drive/file_cache.h"
 #include "chrome/browser/chromeos/drive/file_system_util.h"
 #include "content/public/browser/browser_thread.h"
 #include "net/base/escape.h"
@@ -83,7 +82,7 @@
 // SEARCH_METADATA_OFFLINE is requested, only hosted documents and cached files
 // match with the query. This option can not be used with other options.
 bool IsEligibleEntry(const ResourceEntry& entry,
-                     internal::FileCache* cache,
+                     ResourceMetadata::Iterator* it,
                      int options) {
   if ((options & SEARCH_METADATA_EXCLUDE_HOSTED_DOCUMENTS) &&
       entry.file_specific_info().is_hosted_document())
@@ -100,9 +99,7 @@
     if (entry.file_specific_info().is_hosted_document())
       return true;
     FileCacheEntry cache_entry;
-    cache->GetCacheEntry(entry.resource_id(),
-                         std::string(),
-                         &cache_entry);
+    it->GetCacheEntry(&cache_entry);
     return cache_entry.is_present();
   }
 
@@ -121,15 +118,16 @@
 // the query.
 void MaybeAddEntryToResult(
     ResourceMetadata* resource_metadata,
-    FileCache* cache,
+    ResourceMetadata::Iterator* it,
     base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents* query,
     int options,
     size_t at_most_num_matches,
     ScopedPriorityQueue<MetadataSearchResult,
-                        MetadataSearchResultComparator>* result_candidates,
-    const ResourceEntry& entry) {
+                        MetadataSearchResultComparator>* result_candidates) {
   DCHECK_GE(at_most_num_matches, result_candidates->size());
 
+  const ResourceEntry& entry = it->Get();
+
   // If the candidate set is already full, and this |entry| is old, do nothing.
   // We perform this check first in order to avoid the costly find-and-highlight
   // or FilePath lookup as much as possible.
@@ -141,7 +139,7 @@
   // |options| and matches the query. The base name of the entry must
   // contain |query| to match the query.
   std::string highlighted;
-  if (!IsEligibleEntry(entry, cache, options) ||
+  if (!IsEligibleEntry(entry, it, options) ||
       (query && !FindAndHighlight(entry.base_name(), query, &highlighted)))
     return;
 
@@ -153,7 +151,6 @@
 
 // Implements SearchMetadata().
 FileError SearchMetadataOnBlockingPool(ResourceMetadata* resource_metadata,
-                                       FileCache* cache,
                                        const std::string& query_text,
                                        int options,
                                        int at_most_num_matches,
@@ -168,10 +165,10 @@
   // Iterate over entries.
   scoped_ptr<ResourceMetadata::Iterator> it = resource_metadata->GetIterator();
   for (; !it->IsAtEnd(); it->Advance()) {
-    MaybeAddEntryToResult(resource_metadata, cache,
+    MaybeAddEntryToResult(resource_metadata, it.get(),
                           query_text.empty() ? NULL : &query,
                           options,
-                          at_most_num_matches, &result_candidates, it->Get());
+                          at_most_num_matches, &result_candidates);
   }
 
   // Prepare the result.
@@ -207,7 +204,6 @@
 void SearchMetadata(
     scoped_refptr<base::SequencedTaskRunner> blocking_task_runner,
     ResourceMetadata* resource_metadata,
-    FileCache* cache,
     const std::string& query,
     int options,
     int at_most_num_matches,
@@ -223,7 +219,6 @@
                                    FROM_HERE,
                                    base::Bind(&SearchMetadataOnBlockingPool,
                                               resource_metadata,
-                                              cache,
                                               query,
                                               options,
                                               at_most_num_matches,
diff --git a/chrome/browser/chromeos/drive/search_metadata.h b/chrome/browser/chromeos/drive/search_metadata.h
index d4e0e6f..e4f140d 100644
--- a/chrome/browser/chromeos/drive/search_metadata.h
+++ b/chrome/browser/chromeos/drive/search_metadata.h
@@ -18,7 +18,6 @@
 namespace drive {
 namespace internal {
 
-class FileCache;
 class ResourceMetadata;
 
 // Searches the local resource metadata, and returns the entries
@@ -31,7 +30,6 @@
 void SearchMetadata(
     scoped_refptr<base::SequencedTaskRunner> blocking_task_runner,
     ResourceMetadata* resource_metadata,
-    FileCache* cache,
     const std::string& query,
     int search_options,
     int at_most_num_matches,
diff --git a/chrome/browser/chromeos/drive/search_metadata_unittest.cc b/chrome/browser/chromeos/drive/search_metadata_unittest.cc
index 1c9c3d4..9e1ff21 100644
--- a/chrome/browser/chromeos/drive/search_metadata_unittest.cc
+++ b/chrome/browser/chromeos/drive/search_metadata_unittest.cc
@@ -218,7 +218,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "NonExistent",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -236,7 +235,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "SubDirectory File 1.txt",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -259,7 +257,6 @@
   // The query is all in lower case.
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "subdirectory file 1.txt",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -279,7 +276,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "SubDir",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -309,7 +305,6 @@
   // returned.
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "SubDir",
                  SEARCH_METADATA_ALL,
                  1,  // at_most_num_matches
@@ -329,7 +324,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "Directory 1",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -348,7 +342,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "Document",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -369,7 +362,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "Document",
                  SEARCH_METADATA_EXCLUDE_HOSTED_DOCUMENTS,
                  kDefaultAtMostNumMatches,
@@ -387,7 +379,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "",
                  SEARCH_METADATA_SHARED_WITH_ME,
                  kDefaultAtMostNumMatches,
@@ -407,7 +398,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "excludeDir-test",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -431,7 +421,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "excludeDir-test",
                  SEARCH_METADATA_EXCLUDE_DIRECTORIES,
                  kDefaultAtMostNumMatches,
@@ -457,7 +446,6 @@
     const std::string query = kQueries[i];
     SearchMetadata(base::MessageLoopProxy::current(),
                    resource_metadata_.get(),
-                   cache_.get(),
                    query,
                    SEARCH_METADATA_ALL,
                    kDefaultAtMostNumMatches,
@@ -485,7 +473,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "",
                  SEARCH_METADATA_OFFLINE,
                  kDefaultAtMostNumMatches,
diff --git a/chrome/browser/chromeos/drive/sync_client_unittest.cc b/chrome/browser/chromeos/drive/sync_client_unittest.cc
index c209643..6c0c8d6 100644
--- a/chrome/browser/chromeos/drive/sync_client_unittest.cc
+++ b/chrome/browser/chromeos/drive/sync_client_unittest.cc
@@ -293,13 +293,13 @@
   base::FilePath cache_file;
   std::string content;
   EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(resource_ids_["fetched"],
-                                           std::string(), &cache_file));
+                                           &cache_file));
   EXPECT_TRUE(file_util::ReadFileToString(cache_file, &content));
   EXPECT_EQ(kRemoteContent, content);
   content.clear();
 
   EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(resource_ids_["dirty"],
-                                           std::string(), &cache_file));
+                                           &cache_file));
   EXPECT_TRUE(file_util::ReadFileToString(cache_file, &content));
   EXPECT_EQ(kLocalContent, content);
 }
diff --git a/chrome/browser/chromeos/extensions/external_cache.cc b/chrome/browser/chromeos/extensions/external_cache.cc
new file mode 100644
index 0000000..3e19c65
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/external_cache.cc
@@ -0,0 +1,440 @@
+// 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/chromeos/extensions/external_cache.h"
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/file_util.h"
+#include "base/files/file_enumerator.h"
+#include "base/location.h"
+#include "base/strings/string_util.h"
+#include "base/values.h"
+#include "base/version.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/extensions/crx_installer.h"
+#include "chrome/browser/extensions/external_provider_impl.h"
+#include "chrome/browser/extensions/updater/extension_downloader.h"
+#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/extension_constants.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"
+
+namespace chromeos {
+
+namespace {
+
+// File name extension for CRX files (not case sensitive).
+const char kCRXFileExtension[] = ".crx";
+
+}  // namespace
+
+ExternalCache::ExternalCache(const std::string& cache_dir,
+                             net::URLRequestContextGetter* request_context,
+                             Delegate* delegate)
+    : cache_dir_(cache_dir),
+      request_context_(request_context),
+      delegate_(delegate),
+      cached_extensions_(new base::DictionaryValue()),
+      weak_ptr_factory_(this),
+      worker_pool_token_(
+          content::BrowserThread::GetBlockingPool()->GetSequenceToken()) {
+  notification_registrar_.Add(
+      this,
+      chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR,
+      content::NotificationService::AllBrowserContextsAndSources());
+}
+
+ExternalCache::~ExternalCache() {
+}
+
+void ExternalCache::UpdateExtensionsList(
+    scoped_ptr<base::DictionaryValue> prefs) {
+  extensions_ = prefs.Pass();
+  CheckCacheNow();
+}
+
+void ExternalCache::OnDamagedFileDetected(const base::FilePath& path) {
+  for (base::DictionaryValue::Iterator it(*cached_extensions_.get());
+       !it.IsAtEnd(); it.Advance()) {
+    const base::DictionaryValue* entry = NULL;
+    if (it.value().GetAsDictionary(&entry)) {
+      NOTREACHED() << "ExternalCache found bad entry with type "
+                   << it.value().GetType();
+      continue;
+    }
+
+    std::string external_crx;
+    if (entry->GetString(extensions::ExternalProviderImpl::kExternalCrx,
+                         &external_crx) &&
+        external_crx == path.value()) {
+
+      LOG(ERROR) << "ExternalCache extension at " << path.value()
+                 << " failed to install, deleting it.";
+      cached_extensions_->Remove(it.key(), NULL);
+      UpdateExtensionLoader();
+
+      // The file will be downloaded again on the next restart.
+      content::BrowserThread::PostTask(
+          content::BrowserThread::FILE, FROM_HERE,
+          base::Bind(base::IgnoreResult(base::DeleteFile), path, true));
+
+      // Don't try to DownloadMissingExtensions() from here,
+      // since it can cause a fail/retry loop.
+      return;
+    }
+  }
+  LOG(ERROR) << "ExternalCache cannot find external_crx " << path.value();
+}
+
+void ExternalCache::Observe(int type,
+                            const content::NotificationSource& source,
+                            const content::NotificationDetails& details) {
+  switch (type) {
+    case chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR: {
+      extensions::CrxInstaller* installer =
+          content::Source<extensions::CrxInstaller>(source).ptr();
+      OnDamagedFileDetected(installer->source_file());
+      break;
+    }
+
+    default:
+      NOTREACHED();
+  }
+}
+
+void ExternalCache::OnExtensionDownloadFailed(
+    const std::string& id,
+    extensions::ExtensionDownloaderDelegate::Error error,
+    const extensions::ExtensionDownloaderDelegate::PingResult& ping_result,
+    const std::set<int>& request_ids) {
+  if (error == NO_UPDATE_AVAILABLE) {
+    if (!cached_extensions_->HasKey(id)) {
+      LOG(ERROR) << "ExternalCache extension " << id
+                 << " not found on update server";
+    }
+  } else {
+    LOG(ERROR) << "ExternalCache failed to download extension " << id
+               << ", error " << error;
+  }
+}
+
+void ExternalCache::OnExtensionDownloadFinished(
+    const std::string& id,
+    const base::FilePath& path,
+    const GURL& download_url,
+    const std::string& version,
+    const extensions::ExtensionDownloaderDelegate::PingResult& ping_result,
+    const std::set<int>& request_ids) {
+  // The explicit copy ctors are to make sure that Bind() binds a copy and not
+  // a reference to the arguments.
+  PostBlockingTask(FROM_HERE,
+                   base::Bind(&ExternalCache::BlockingInstallCacheEntry,
+                              weak_ptr_factory_.GetWeakPtr(),
+                              std::string(cache_dir_),
+                              std::string(id),
+                              base::FilePath(path),
+                              std::string(version)));
+}
+
+void ExternalCache::OnBlacklistDownloadFinished(
+    const std::string& data,
+    const std::string& package_hash,
+    const std::string& version,
+    const extensions::ExtensionDownloaderDelegate::PingResult& ping_result,
+    const std::set<int>& request_ids) {
+  NOTREACHED();
+}
+
+bool ExternalCache::IsExtensionPending(const std::string& id) {
+  // Pending means that there is no installed version yet.
+  return extensions_->HasKey(id) && !cached_extensions_->HasKey(id);
+}
+
+bool ExternalCache::GetExtensionExistingVersion(const std::string& id,
+                                                std::string* version) {
+  DictionaryValue* extension_dictionary = NULL;
+  if (cached_extensions_->GetDictionary(id, &extension_dictionary)) {
+    return extension_dictionary->GetString(
+        extensions::ExternalProviderImpl::kExternalVersion,
+        version);
+  }
+  return false;
+}
+
+void ExternalCache::CheckCacheNow() {
+  scoped_ptr<DictionaryValue> prefs(extensions_->DeepCopy());
+  PostBlockingTask(FROM_HERE,
+                   base::Bind(&ExternalCache::BlockingCheckCache,
+                              weak_ptr_factory_.GetWeakPtr(),
+                              std::string(cache_dir_),
+                              base::Passed(&prefs)));
+}
+
+void ExternalCache::UpdateExtensionLoader() {
+  VLOG(1) << "Notify ExternalCache delegate about cache update";
+  if (delegate_)
+    delegate_->OnExtensionListsUpdated(cached_extensions_.get());
+}
+
+// static
+void ExternalCache::BlockingCheckCache(
+    base::WeakPtr<ExternalCache> external_cache,
+    const std::string& cache_dir,
+    scoped_ptr<base::DictionaryValue> prefs) {
+  BlockingCheckCacheInternal(cache_dir, prefs.get());
+  content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
+                          base::Bind(&ExternalCache::OnCacheUpdated,
+                                     external_cache,
+                                     base::Passed(&prefs)));
+}
+
+// static
+void ExternalCache::BlockingCheckCacheInternal(const std::string& cache_dir,
+                                               base::DictionaryValue* prefs) {
+  // Start by verifying that the cache dir exists.
+  base::FilePath dir(cache_dir);
+  if (!base::DirectoryExists(dir)) {
+    // Create it now.
+    if (!file_util::CreateDirectory(dir)) {
+      LOG(ERROR) << "Failed to create ExternalCache directory at "
+                 << dir.value();
+
+      // Nothing else to do. Cache won't be used.
+      return;
+    }
+  }
+
+  // Enumerate all the files in the cache |dir|, including directories
+  // and symlinks. Each unrecognized file will be erased.
+  int types = base::FileEnumerator::FILES | base::FileEnumerator::DIRECTORIES |
+      base::FileEnumerator::SHOW_SYM_LINKS;
+  base::FileEnumerator enumerator(dir, false /* recursive */, types);
+  for (base::FilePath path = enumerator.Next();
+       !path.empty(); path = enumerator.Next()) {
+    base::FileEnumerator::FileInfo info = enumerator.GetInfo();
+    std::string basename = path.BaseName().value();
+
+    if (info.IsDirectory() || file_util::IsLink(info.GetName())) {
+      LOG(ERROR) << "Erasing bad file in ExternalCache directory: " << basename;
+      base::DeleteFile(path, true /* recursive */);
+      continue;
+    }
+
+    // crx files in the cache are named <extension-id>-<version>.crx.
+    std::string id;
+    std::string version;
+    if (EndsWith(basename, kCRXFileExtension, false /* case-sensitive */)) {
+      size_t n = basename.find('-');
+      if (n != std::string::npos && n + 1 < basename.size() - 4) {
+        id = basename.substr(0, n);
+        // Size of |version| = total size - "<id>" - "-" - ".crx"
+        version = basename.substr(n + 1, basename.size() - 5 - id.size());
+      }
+    }
+
+    base::DictionaryValue* entry = NULL;
+    if (!extensions::Extension::IdIsValid(id)) {
+      LOG(ERROR) << "Bad extension id in ExternalCache: " << id;
+      id.clear();
+    } else if (!prefs->GetDictionary(id, &entry)) {
+      LOG(WARNING) << basename << " is in the cache but is not configured by "
+                   << "the ExternalCache source, and will be erased.";
+      id.clear();
+    }
+
+    if (!Version(version).IsValid()) {
+      LOG(ERROR) << "Bad extension version in ExternalCache: " << version;
+      version.clear();
+    }
+
+    if (id.empty() || version.empty()) {
+      LOG(ERROR) << "Invalid file in ExternalCache, erasing: " << basename;
+      base::DeleteFile(path, true /* recursive */);
+      continue;
+    }
+
+    // Enforce a lower-case id.
+    id = StringToLowerASCII(id);
+
+    std::string update_url;
+    std::string prev_version_string;
+    std::string prev_crx;
+    if (entry->GetString(extensions::ExternalProviderImpl::kExternalUpdateUrl,
+                         &update_url)) {
+      VLOG(1) << "ExternalCache found cached version " << version
+              << " for extension id: " << id;
+      entry->Remove(extensions::ExternalProviderImpl::kExternalUpdateUrl, NULL);
+      entry->SetString(extensions::ExternalProviderImpl::kExternalVersion,
+                       version);
+      entry->SetString(extensions::ExternalProviderImpl::kExternalCrx,
+                        path.value());
+      if (extension_urls::IsWebstoreUpdateUrl(GURL(update_url))) {
+        entry->SetBoolean(extensions::ExternalProviderImpl::kIsFromWebstore,
+                         true);
+      }
+    } else if (
+        entry->GetString(extensions::ExternalProviderImpl::kExternalVersion,
+                         &prev_version_string) &&
+        entry->GetString(extensions::ExternalProviderImpl::kExternalCrx,
+                         &prev_crx)) {
+      LOG(ERROR) << "Found two ExternalCache files for the same extension, "
+                    "will erase the oldest version";
+      Version prev_version(prev_version_string);
+      Version curr_version(version);
+      DCHECK(prev_version.IsValid());
+      DCHECK(curr_version.IsValid());
+      if (prev_version.CompareTo(curr_version) < 0) {
+        base::DeleteFile(base::FilePath(prev_crx), true /* recursive */);
+        entry->SetString(extensions::ExternalProviderImpl::kExternalCrx,
+                         path.value());
+      } else {
+        base::DeleteFile(path, true /* recursive */);
+      }
+    } else {
+      NOTREACHED() << "ExternalCache found bad entry for extension id: " << id
+                   << " file path: " << path.value();
+    }
+  }
+}
+
+void ExternalCache::OnCacheUpdated(scoped_ptr<base::DictionaryValue> prefs) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+  // If request_context_ is missing we can't download anything.
+  if (!downloader_ && request_context_) {
+    downloader_.reset(
+        new extensions::ExtensionDownloader(this, request_context_));
+  }
+
+  cached_extensions_->Clear();
+  for (base::DictionaryValue::Iterator it(*extensions_.get());
+       !it.IsAtEnd(); it.Advance()) {
+    const base::DictionaryValue* entry = NULL;
+    if (!it.value().GetAsDictionary(&entry)) {
+      LOG(ERROR) << "ExternalCache found bad entry with type "
+                 << it.value().GetType();
+      continue;
+    }
+
+    // Check for updates for all extensions configured except for extensions
+    // marked as keep_if_present.
+    std::string update_url;
+    if (downloader_ &&
+        !entry->HasKey(extensions::ExternalProviderImpl::kKeepIfPresent) &&
+        entry->GetString(extensions::ExternalProviderImpl::kExternalUpdateUrl,
+                         &update_url)) {
+      downloader_->AddPendingExtension(it.key(), GURL(update_url), 0);
+    }
+
+    base::DictionaryValue* cached_entry = NULL;
+    if (prefs->GetDictionary(it.key(), &cached_entry)) {
+      std::string crx_path;
+      if (!downloader_ ||
+          cached_entry->GetString(
+              extensions::ExternalProviderImpl::kExternalCrx, &crx_path) ||
+          cached_entry->HasKey(
+              extensions::ExternalProviderImpl::kKeepIfPresent)) {
+        base::Value* value = NULL;
+        prefs->Remove(it.key(), &value);
+        cached_extensions_->Set(it.key(), value);
+      }
+    }
+  }
+  if (downloader_)
+    downloader_->StartAllPending();
+
+  VLOG(1) << "Updated ExternalCache, there are "
+          << cached_extensions_->size() << " extensions cached";
+
+  UpdateExtensionLoader();
+}
+
+// static
+void ExternalCache::BlockingInstallCacheEntry(
+    base::WeakPtr<ExternalCache> external_cache,
+    const std::string& app_cache_dir,
+    const std::string& id,
+    const base::FilePath& path,
+    const std::string& version) {
+  Version version_validator(version);
+  if (!version_validator.IsValid()) {
+    LOG(ERROR) << "ExternalCache downloaded extension " << id << " but got bad "
+               << "version: " << version;
+    base::DeleteFile(path, true /* recursive */);
+    return;
+  }
+
+  std::string basename = id + "-" + version + kCRXFileExtension;
+  base::FilePath cache_dir(app_cache_dir);
+  base::FilePath cached_crx_path = cache_dir.Append(basename);
+
+  if (base::PathExists(cached_crx_path)) {
+    LOG(WARNING) << "AppPack downloaded a crx whose filename will overwrite "
+                 << "an existing cached crx.";
+    base::DeleteFile(cached_crx_path, true /* recursive */);
+  }
+
+  if (!base::DirectoryExists(cache_dir)) {
+    LOG(ERROR) << "AppPack cache directory does not exist, creating now: "
+               << cache_dir.value();
+    if (!file_util::CreateDirectory(cache_dir)) {
+      LOG(ERROR) << "Failed to create the AppPack cache dir!";
+      base::DeleteFile(path, true /* recursive */);
+      return;
+    }
+  }
+
+  if (!base::Move(path, cached_crx_path)) {
+    LOG(ERROR) << "Failed to move AppPack crx from " << path.value()
+               << " to " << cached_crx_path.value();
+    base::DeleteFile(path, true /* recursive */);
+    return;
+  }
+
+  content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
+                          base::Bind(&ExternalCache::OnCacheEntryInstalled,
+                                     external_cache,
+                                     std::string(id),
+                                     cached_crx_path.value(),
+                                     std::string(version)));
+}
+
+void ExternalCache::OnCacheEntryInstalled(const std::string& id,
+                                          const std::string& path,
+                                          const std::string& version) {
+  VLOG(1) << "AppPack installed a new extension in the cache: " << path;
+
+  base::DictionaryValue* entry = NULL;
+  std::string update_url;
+  if (!extensions_->GetDictionary(id, &entry) ||
+      !entry->GetString(extensions::ExternalProviderImpl::kExternalUpdateUrl,
+                        &update_url)) {
+    LOG(ERROR) << "ExternalCache cannot find entry for extension " << id;
+    return;
+  }
+
+  // Copy entry to don't modify it inside extensions_.
+  entry = entry->DeepCopy();
+  entry->Remove(extensions::ExternalProviderImpl::kExternalUpdateUrl, NULL);
+  entry->SetString(extensions::ExternalProviderImpl::kExternalVersion, version);
+  entry->SetString(extensions::ExternalProviderImpl::kExternalCrx, path);
+  if (extension_urls::IsWebstoreUpdateUrl(GURL(update_url)))
+    entry->SetBoolean(extensions::ExternalProviderImpl::kIsFromWebstore, true);
+
+  cached_extensions_->Set(id, entry);
+  UpdateExtensionLoader();
+}
+
+void ExternalCache::PostBlockingTask(const tracked_objects::Location& location,
+                                     const base::Closure& task) {
+  content::BrowserThread::GetBlockingPool()->
+      PostSequencedWorkerTaskWithShutdownBehavior(
+          worker_pool_token_, location, task,
+          base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/external_cache.h b/chrome/browser/chromeos/extensions/external_cache.h
new file mode 100644
index 0000000..e9415b5
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/external_cache.h
@@ -0,0 +1,172 @@
+// 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_CHROMEOS_EXTENSIONS_EXTERNAL_CACHE_H_
+#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_EXTERNAL_CACHE_H_
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "base/files/file_path.h"
+#include "base/memory/weak_ptr.h"
+#include "base/threading/sequenced_worker_pool.h"
+#include "chrome/browser/extensions/updater/extension_downloader_delegate.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
+
+namespace base {
+class DictionaryValue;
+}
+
+namespace extensions {
+class ExtensionDownloader;
+}
+
+namespace net {
+class URLRequestContextGetter;
+}
+
+namespace tracked_objects {
+class Location;
+}
+
+namespace chromeos {
+
+// The ExternalCache manages cache for external extensions.
+class ExternalCache : public content::NotificationObserver,
+                      public extensions::ExtensionDownloaderDelegate {
+ public:
+  class Delegate {
+   public:
+    virtual ~Delegate() {}
+    // Caller owns |prefs|.
+    virtual void OnExtensionListsUpdated(
+        const base::DictionaryValue* prefs) = 0;
+  };
+
+  // The |request_context| is used for the update checks.
+  ExternalCache(const std::string& cache_dir,
+                net::URLRequestContextGetter* request_context,
+                Delegate* delegate);
+  virtual ~ExternalCache();
+
+  // Update list of extensions in cache and force update check for them.
+  // ExternalCache gets ownership of |prefs|.
+  void UpdateExtensionsList(scoped_ptr<base::DictionaryValue> prefs);
+
+  // If a user of one of the ExternalCache's extensions detects that
+  // the extension is damaged then this method can be used to remove it from
+  // the cache and retry to download it after a restart.
+  void OnDamagedFileDetected(const base::FilePath& path);
+
+ protected:
+  // Implementation of content::NotificationObserver:
+  virtual void Observe(int type,
+                       const content::NotificationSource& source,
+                       const content::NotificationDetails& details) OVERRIDE;
+
+  // Implementation of ExtensionDownloaderDelegate:
+  virtual void OnExtensionDownloadFailed(
+      const std::string& id,
+      Error error,
+      const PingResult& ping_result,
+      const std::set<int>& request_ids) OVERRIDE;
+
+  virtual void OnExtensionDownloadFinished(
+      const std::string& id,
+      const base::FilePath& path,
+      const GURL& download_url,
+      const std::string& version,
+      const PingResult& ping_result,
+      const std::set<int>& request_ids) OVERRIDE;
+
+  virtual void OnBlacklistDownloadFinished(
+      const std::string& data,
+      const std::string& package_hash,
+      const std::string& version,
+      const PingResult& ping_result,
+      const std::set<int>& request_ids) OVERRIDE;
+
+  virtual bool IsExtensionPending(const std::string& id) OVERRIDE;
+
+  virtual bool GetExtensionExistingVersion(const std::string& id,
+                                           std::string* version) OVERRIDE;
+
+  // Starts a cache update check immediately.
+  void CheckCacheNow();
+
+  // Notifies the that the cache has been updated, providing
+  // extensions loader with an updated list of extensions.
+  void UpdateExtensionLoader();
+
+  // Performs a cache update check on the blocking pool. |external_cache| is
+  // used to reply in the UI thread. |prefs| contains the list extensions
+  // anything else is invalid, and should be removed from the cache.
+  // Ownership of |prefs| is transferred to this function.
+  static void BlockingCheckCache(
+      base::WeakPtr<ExternalCache> external_cache,
+      const std::string& app_cache_dir,
+      scoped_ptr<base::DictionaryValue> prefs);
+
+  // Helper for BlockingCheckCache(), updates |prefs|.
+  static void BlockingCheckCacheInternal(
+      const std::string& app_cache_dir,
+      base::DictionaryValue* prefs);
+
+  // Invoked when the cache has been updated. |prefs| contains all the currently
+  // valid crx files in the cache, ownerships is transfered to this function.
+  void OnCacheUpdated(scoped_ptr<base::DictionaryValue> prefs);
+
+  // Invoked to install the downloaded crx file at |path| in the cache.
+  static void BlockingInstallCacheEntry(
+      base::WeakPtr<ExternalCache> external_cache,
+      const std::string& app_cache_dir,
+      const std::string& id,
+      const base::FilePath& path,
+      const std::string& version);
+
+  // Invoked on the UI thread when a new entry has been installed in the cache.
+  void OnCacheEntryInstalled(const std::string& id,
+                             const std::string& path,
+                             const std::string& version);
+
+  // Helper to post blocking IO tasks to the blocking pool.
+  void PostBlockingTask(const tracked_objects::Location& from_here,
+                        const base::Closure& task);
+
+  // Path to the dir where apps cache is stored.
+  std::string cache_dir_;
+
+  // Request context used by the |downloader_|.
+  net::URLRequestContextGetter* request_context_;
+
+  // Delegate that would like to get notifications about cache updates.
+  Delegate* delegate_;
+
+  // This is the list of extensions currently configured.
+  scoped_ptr<base::DictionaryValue> extensions_;
+
+  // This contains extensions that are both currently configured
+  // and that have a valid crx in the cache.
+  scoped_ptr<base::DictionaryValue> cached_extensions_;
+
+  // Used to download the extensions and to check for updates.
+  scoped_ptr<extensions::ExtensionDownloader> downloader_;
+
+  base::WeakPtrFactory<ExternalCache> weak_ptr_factory_;
+
+  // Observes failures to install CRX files.
+  content::NotificationRegistrar notification_registrar_;
+
+  // Unique sequence token so that tasks posted by the ExternalCache are
+  // executed sequentially in the blocking pool.
+  base::SequencedWorkerPool::SequenceToken worker_pool_token_;
+
+  DISALLOW_COPY_AND_ASSIGN(ExternalCache);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_EXTERNAL_CACHE_H_
diff --git a/chrome/browser/chromeos/extensions/external_pref_cache_loader.cc b/chrome/browser/chromeos/extensions/external_pref_cache_loader.cc
new file mode 100644
index 0000000..cd02dae
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/external_pref_cache_loader.cc
@@ -0,0 +1,47 @@
+// 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/chromeos/extensions/external_pref_cache_loader.h"
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/memory/singleton.h"
+#include "base/values.h"
+#include "chrome/browser/browser_process.h"
+#include "content/public/browser/browser_thread.h"
+
+namespace chromeos {
+
+namespace {
+
+// Directory where the extensions are cached.
+const char kPreinstalledAppsCacheDir[] = "/var/cache/external_cache";
+
+}  // namespace
+
+ExternalPrefCacheLoader::ExternalPrefCacheLoader(int base_path_id,
+                                                 Options options)
+  : ExternalPrefLoader(base_path_id, options) {
+}
+
+ExternalPrefCacheLoader::~ExternalPrefCacheLoader() {
+}
+
+void ExternalPrefCacheLoader::OnExtensionListsUpdated(
+    const base::DictionaryValue* prefs) {
+  prefs_.reset(prefs->DeepCopy());
+  ExternalPrefLoader::LoadFinished();
+}
+
+void ExternalPrefCacheLoader::LoadFinished() {
+  if (!external_cache_.get()) {
+    external_cache_.reset(new ExternalCache(kPreinstalledAppsCacheDir,
+        g_browser_process->system_request_context(),
+        this));
+  }
+
+  external_cache_->UpdateExtensionsList(prefs_.Pass());
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/external_pref_cache_loader.h b/chrome/browser/chromeos/extensions/external_pref_cache_loader.h
new file mode 100644
index 0000000..f886f85
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/external_pref_cache_loader.h
@@ -0,0 +1,40 @@
+// 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_CHROMEOS_EXTENSIONS_EXTERNAL_PREF_CACHE_LOADER_H_
+#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_EXTERNAL_PREF_CACHE_LOADER_H_
+
+#include "chrome/browser/chromeos/extensions/external_cache.h"
+#include "chrome/browser/extensions/external_pref_loader.h"
+
+namespace chromeos {
+
+// A specialization of the ExternalPrefCacheLoader that caches crx files for
+// external extensions with update URL in common place for all users on the
+// machine.
+class ExternalPrefCacheLoader : public extensions::ExternalPrefLoader,
+                                public ExternalCache::Delegate {
+ public:
+  ExternalPrefCacheLoader(int base_path_id, Options options);
+
+  // Implementation of ExternalCache::Delegate:
+  virtual void OnExtensionListsUpdated(
+      const base::DictionaryValue* prefs) OVERRIDE;
+
+ protected:
+  virtual ~ExternalPrefCacheLoader();
+
+  virtual void LoadFinished() OVERRIDE;
+
+ private:
+  friend class base::RefCountedThreadSafe<ExternalLoader>;
+
+  scoped_ptr<ExternalCache> external_cache_;
+
+  DISALLOW_COPY_AND_ASSIGN(ExternalPrefCacheLoader);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_EXTERNAL_PREF_CACHE_LOADER_H_
diff --git a/chrome/browser/chromeos/fileapi/remote_file_system_operation.cc b/chrome/browser/chromeos/fileapi/remote_file_system_operation.cc
deleted file mode 100644
index e51e568..0000000
--- a/chrome/browser/chromeos/fileapi/remote_file_system_operation.cc
+++ /dev/null
@@ -1,244 +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/fileapi/remote_file_system_operation.h"
-
-#include "base/bind.h"
-#include "base/platform_file.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/values.h"
-#include "net/url_request/url_request.h"
-#include "url/gurl.h"
-#include "webkit/browser/fileapi/file_system_url.h"
-#include "webkit/browser/fileapi/file_writer_delegate.h"
-
-using fileapi::FileSystemURL;
-
-namespace chromeos {
-
-RemoteFileSystemOperation::RemoteFileSystemOperation(
-    scoped_refptr<fileapi::RemoteFileSystemProxyInterface> remote_proxy)
-      : remote_proxy_(remote_proxy),
-        pending_operation_(kOperationNone) {
-}
-
-RemoteFileSystemOperation::~RemoteFileSystemOperation() {
-}
-
-void RemoteFileSystemOperation::GetMetadata(const FileSystemURL& url,
-    const GetMetadataCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationGetMetadata));
-  remote_proxy_->GetFileInfo(url, callback);
-}
-
-void RemoteFileSystemOperation::DirectoryExists(const FileSystemURL& url,
-    const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationDirectoryExists));
-  remote_proxy_->GetFileInfo(url,
-      base::Bind(&RemoteFileSystemOperation::DidDirectoryExists,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::FileExists(const FileSystemURL& url,
-    const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationFileExists));
-  remote_proxy_->GetFileInfo(url,
-      base::Bind(base::Bind(&RemoteFileSystemOperation::DidFileExists,
-                            AsWeakPtr(), callback)));
-}
-
-void RemoteFileSystemOperation::ReadDirectory(const FileSystemURL& url,
-    const ReadDirectoryCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationReadDirectory));
-  remote_proxy_->ReadDirectory(url, callback);
-}
-
-void RemoteFileSystemOperation::Remove(const FileSystemURL& url, bool recursive,
-                                       const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationRemove));
-  remote_proxy_->Remove(url, recursive,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-
-void RemoteFileSystemOperation::CreateDirectory(
-    const FileSystemURL& url, bool exclusive, bool recursive,
-    const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationCreateDirectory));
-  remote_proxy_->CreateDirectory(url, exclusive, recursive,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::CreateFile(const FileSystemURL& url,
-                                           bool exclusive,
-                                           const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationCreateFile));
-  remote_proxy_->CreateFile(url, exclusive,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::Copy(const FileSystemURL& src_url,
-                                     const FileSystemURL& dest_url,
-                                     const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationCopy));
-
-  remote_proxy_->Copy(src_url, dest_url,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::Move(const FileSystemURL& src_url,
-                                     const FileSystemURL& dest_url,
-                                     const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationMove));
-
-  remote_proxy_->Move(src_url, dest_url,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::Write(
-    const FileSystemURL& url,
-    scoped_ptr<fileapi::FileWriterDelegate> writer_delegate,
-    scoped_ptr<net::URLRequest> blob_request,
-    const WriteCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationWrite));
-  file_writer_delegate_ = writer_delegate.Pass();
-  file_writer_delegate_->Start(
-      blob_request.Pass(),
-      base::Bind(&RemoteFileSystemOperation::DidWrite, AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::Truncate(const FileSystemURL& url,
-                                         int64 length,
-                                         const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationTruncate));
-
-  remote_proxy_->Truncate(url, length,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::Cancel(const StatusCallback& cancel_callback) {
-  DCHECK(cancel_callback_.is_null());
-  cancel_callback_ = cancel_callback;
-
-  if (file_writer_delegate_) {
-    DCHECK_EQ(kOperationWrite, pending_operation_);
-    // This will call DidWrite() with ABORT status code.
-    file_writer_delegate_->Cancel();
-  } else {
-    // For truncate we have no way to cancel the inflight operation (for now).
-    // Let it just run and dispatch cancel callback later.
-    DCHECK_EQ(kOperationTruncate, pending_operation_);
-  }
-}
-
-void RemoteFileSystemOperation::TouchFile(const FileSystemURL& url,
-                                          const base::Time& last_access_time,
-                                          const base::Time& last_modified_time,
-                                          const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationTouchFile));
-  remote_proxy_->TouchFile(
-      url,
-      last_access_time,
-      last_modified_time,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::OpenFile(const FileSystemURL& url,
-                                         int file_flags,
-                                         base::ProcessHandle peer_handle,
-                                         const OpenFileCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationOpenFile));
-  remote_proxy_->OpenFile(
-      url,
-      file_flags,
-      peer_handle,
-      base::Bind(&RemoteFileSystemOperation::DidOpenFile,
-                 AsWeakPtr(), url, callback));
-}
-
-fileapi::LocalFileSystemOperation*
-RemoteFileSystemOperation::AsLocalFileSystemOperation() {
-  NOTIMPLEMENTED();
-  return NULL;
-}
-
-void RemoteFileSystemOperation::CreateSnapshotFile(
-    const FileSystemURL& url,
-    const SnapshotFileCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationCreateSnapshotFile));
-  remote_proxy_->CreateSnapshotFile(url, callback);
-}
-
-bool RemoteFileSystemOperation::SetPendingOperationType(OperationType type) {
-  if (pending_operation_ != kOperationNone)
-    return false;
-  pending_operation_ = type;
-  return true;
-}
-
-void RemoteFileSystemOperation::DidDirectoryExists(
-    const StatusCallback& callback,
-    base::PlatformFileError rv,
-    const base::PlatformFileInfo& file_info) {
-  if (rv == base::PLATFORM_FILE_OK && !file_info.is_directory)
-    rv = base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY;
-  callback.Run(rv);
-}
-
-void RemoteFileSystemOperation::DidFileExists(
-    const StatusCallback& callback,
-    base::PlatformFileError rv,
-    const base::PlatformFileInfo& file_info) {
-  if (rv == base::PLATFORM_FILE_OK && file_info.is_directory)
-    rv = base::PLATFORM_FILE_ERROR_NOT_A_FILE;
-  callback.Run(rv);
-}
-
-void RemoteFileSystemOperation::DidWrite(
-    const WriteCallback& write_callback,
-    base::PlatformFileError rv,
-    int64 bytes,
-    FileWriterDelegate::WriteProgressStatus write_status) {
-  bool complete = (write_status != FileWriterDelegate::SUCCESS_IO_PENDING);
-  StatusCallback cancel_callback = cancel_callback_;
-  write_callback.Run(rv, bytes, complete);
-  if (!cancel_callback.is_null())
-    cancel_callback.Run(base::PLATFORM_FILE_OK);
-}
-
-void RemoteFileSystemOperation::DidFinishFileOperation(
-    const StatusCallback& callback,
-    base::PlatformFileError rv) {
-  if (!cancel_callback_.is_null()) {
-    DCHECK_EQ(kOperationTruncate, pending_operation_);
-
-    StatusCallback cancel_callback = cancel_callback_;
-    callback.Run(base::PLATFORM_FILE_ERROR_ABORT);
-    cancel_callback.Run(base::PLATFORM_FILE_OK);
-  } else {
-    callback.Run(rv);
-  }
-}
-
-void RemoteFileSystemOperation::DidOpenFile(
-    const fileapi::FileSystemURL& url,
-    const OpenFileCallback& callback,
-    base::PlatformFileError result,
-    base::PlatformFile file,
-    base::ProcessHandle peer_handle) {
-  callback.Run(
-      result, file,
-      base::Bind(&fileapi::RemoteFileSystemProxyInterface::NotifyCloseFile,
-                 remote_proxy_, url),
-      peer_handle);
-}
-
-}  // namespace chromeos
diff --git a/chrome/browser/chromeos/fileapi/remote_file_system_operation.h b/chrome/browser/chromeos/fileapi/remote_file_system_operation.h
deleted file mode 100644
index a467368..0000000
--- a/chrome/browser/chromeos/fileapi/remote_file_system_operation.h
+++ /dev/null
@@ -1,120 +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_FILEAPI_REMOTE_FILE_SYSTEM_OPERATION_H_
-#define CHROME_BROWSER_CHROMEOS_FILEAPI_REMOTE_FILE_SYSTEM_OPERATION_H_
-
-#include "base/basictypes.h"
-#include "base/memory/weak_ptr.h"
-#include "webkit/browser/fileapi/file_system_operation.h"
-#include "webkit/browser/fileapi/file_writer_delegate.h"
-#include "webkit/browser/fileapi/remote_file_system_proxy.h"
-
-namespace base {
-class Value;
-}
-
-namespace fileapi {
-class FileWriterDelegate;
-class LocalFileSystemOperation;
-}
-
-namespace chromeos {
-
-// FileSystemOperation implementation for local file systems.
-class RemoteFileSystemOperation
-    : public fileapi::FileSystemOperation,
-      public base::SupportsWeakPtr<RemoteFileSystemOperation> {
- public:
-  typedef fileapi::FileWriterDelegate FileWriterDelegate;
-
-  explicit RemoteFileSystemOperation(
-      scoped_refptr<fileapi::RemoteFileSystemProxyInterface> remote_proxy);
-
-  virtual ~RemoteFileSystemOperation();
-
-  // FileSystemOperation overrides.
-  virtual void CreateFile(const fileapi::FileSystemURL& url,
-                          bool exclusive,
-                          const StatusCallback& callback) OVERRIDE;
-  virtual void CreateDirectory(const fileapi::FileSystemURL& url,
-                               bool exclusive,
-                               bool recursive,
-                               const StatusCallback& callback) OVERRIDE;
-  virtual void Copy(const fileapi::FileSystemURL& src_url,
-                    const fileapi::FileSystemURL& dest_url,
-                    const StatusCallback& callback) OVERRIDE;
-  virtual void Move(const fileapi::FileSystemURL& src_url,
-                    const fileapi::FileSystemURL& dest_url,
-                    const StatusCallback& callback) OVERRIDE;
-  virtual void DirectoryExists(const fileapi::FileSystemURL& url,
-                               const StatusCallback& callback) OVERRIDE;
-  virtual void FileExists(const fileapi::FileSystemURL& url,
-                          const StatusCallback& callback) OVERRIDE;
-  virtual void GetMetadata(const fileapi::FileSystemURL& url,
-                           const GetMetadataCallback& callback) OVERRIDE;
-  virtual void ReadDirectory(const fileapi::FileSystemURL& url,
-                             const ReadDirectoryCallback& callback) OVERRIDE;
-  virtual void Remove(const fileapi::FileSystemURL& url, bool recursive,
-                      const StatusCallback& callback) OVERRIDE;
-  virtual void Write(const fileapi::FileSystemURL& url,
-                     scoped_ptr<fileapi::FileWriterDelegate> writer_delegate,
-                     scoped_ptr<net::URLRequest> blob_request,
-                     const WriteCallback& callback) OVERRIDE;
-  virtual void Truncate(const fileapi::FileSystemURL& url, int64 length,
-                        const StatusCallback& callback) OVERRIDE;
-  virtual void Cancel(const StatusCallback& cancel_callback) OVERRIDE;
-  virtual void TouchFile(const fileapi::FileSystemURL& url,
-                         const base::Time& last_access_time,
-                         const base::Time& last_modified_time,
-                         const StatusCallback& callback) OVERRIDE;
-  virtual void OpenFile(
-      const fileapi::FileSystemURL& url,
-      int file_flags,
-      base::ProcessHandle peer_handle,
-      const OpenFileCallback& callback) OVERRIDE;
-  virtual fileapi::LocalFileSystemOperation*
-      AsLocalFileSystemOperation() OVERRIDE;
-  virtual void CreateSnapshotFile(
-      const fileapi::FileSystemURL& url,
-      const SnapshotFileCallback& callback) OVERRIDE;
-
- private:
-  // Used only for internal assertions.
-  // Returns false if there's another inflight pending operation.
-  bool SetPendingOperationType(OperationType type);
-
-  // Generic callback that translates platform errors to WebKit error codes.
-  void DidDirectoryExists(const StatusCallback& callback,
-                          base::PlatformFileError rv,
-                          const base::PlatformFileInfo& file_info);
-  void DidFileExists(const StatusCallback& callback,
-                     base::PlatformFileError rv,
-                     const base::PlatformFileInfo& file_info);
-  void DidWrite(const WriteCallback& write_callback,
-                base::PlatformFileError result,
-                int64 bytes,
-                FileWriterDelegate::WriteProgressStatus write_status);
-  void DidFinishFileOperation(const StatusCallback& callback,
-                              base::PlatformFileError rv);
-  void DidOpenFile(
-      const fileapi::FileSystemURL& url,
-      const OpenFileCallback& callback,
-      base::PlatformFileError result,
-      base::PlatformFile file,
-      base::ProcessHandle peer_handle);
-
-  scoped_refptr<fileapi::RemoteFileSystemProxyInterface> remote_proxy_;
-  // A flag to make sure we call operation only once per instance.
-  OperationType pending_operation_;
-  scoped_ptr<fileapi::FileWriterDelegate> file_writer_delegate_;
-
-  StatusCallback cancel_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(RemoteFileSystemOperation);
-};
-
-}  // namespace chromeos
-
-#endif  // CHROME_BROWSER_CHROMEOS_FILEAPI_REMOTE_FILE_SYSTEM_OPERATION_H_
diff --git a/chrome/browser/chromeos/policy/app_pack_updater.h b/chrome/browser/chromeos/policy/app_pack_updater.h
index 390de7e..9f256b8 100644
--- a/chrome/browser/chromeos/policy/app_pack_updater.h
+++ b/chrome/browser/chromeos/policy/app_pack_updater.h
@@ -22,7 +22,6 @@
 class GURL;
 
 namespace extensions {
-class CrxInstaller;
 class ExtensionDownloader;
 class ExternalLoader;
 }
@@ -164,10 +163,6 @@
                              const std::string& path,
                              const std::string& version);
 
-  // Handles failure to install CRX files. The file is deleted if it came from
-  // the cache.
-  void OnCrxInstallFailed(extensions::CrxInstaller* installer);
-
   // Helper to post blocking IO tasks to the blocking pool.
   void PostBlockingTask(const tracked_objects::Location& from_here,
                         const base::Closure& task);
diff --git a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
index a7f7ed9..96f6f9d 100644
--- a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
+++ b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
@@ -679,8 +679,10 @@
 
   virtual void ConnectToBluetoothDevice(const std::string& address) OVERRIDE {
     device::BluetoothDevice* device = bluetooth_adapter_->GetDevice(address);
-    if (!device || device->IsConnecting() || device->IsConnected())
+    if (!device || device->IsConnecting() ||
+        (device->IsConnected() && device->IsPaired())) {
       return;
+    }
     if (device->IsPaired() && !device->IsConnectable())
       return;
     if (device->IsPaired() || !device->IsPairable()) {
diff --git a/chrome/browser/chromeos/system_logs/debug_daemon_log_source.cc b/chrome/browser/chromeos/system_logs/debug_daemon_log_source.cc
index 60ba329..feb1d8f 100644
--- a/chrome/browser/chromeos/system_logs/debug_daemon_log_source.cc
+++ b/chrome/browser/chromeos/system_logs/debug_daemon_log_source.cc
@@ -23,6 +23,7 @@
 const char kRoutesKeyName[] = "routes";
 const char kNetworkStatusKeyName[] = "network-status";
 const char kModemStatusKeyName[] = "modem-status";
+const char kWiMaxStatusKeyName[] = "wimax-status";
 const char kUserLogFileKeyName[] = "user_log_files";
 
 namespace chromeos {
@@ -53,6 +54,9 @@
   client->GetModemStatus(base::Bind(&DebugDaemonLogSource::OnGetModemStatus,
                                     weak_ptr_factory_.GetWeakPtr()));
   ++num_pending_requests_;
+  client->GetWiMaxStatus(base::Bind(&DebugDaemonLogSource::OnGetWiMaxStatus,
+                                    weak_ptr_factory_.GetWeakPtr()));
+  ++num_pending_requests_;
   client->GetAllLogs(base::Bind(&DebugDaemonLogSource::OnGetLogs,
                                 weak_ptr_factory_.GetWeakPtr()));
   ++num_pending_requests_;
@@ -94,6 +98,17 @@
   RequestCompleted();
 }
 
+void DebugDaemonLogSource::OnGetWiMaxStatus(bool succeeded,
+                                            const std::string& status) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+  if (succeeded)
+    (*response_)[kWiMaxStatusKeyName] = status;
+  else
+    (*response_)[kWiMaxStatusKeyName] = kNotAvailable;
+  RequestCompleted();
+}
+
 void DebugDaemonLogSource::OnGetLogs(bool /* succeeded */,
                                      const KeyValueMap& logs) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
diff --git a/chrome/browser/chromeos/system_logs/debug_daemon_log_source.h b/chrome/browser/chromeos/system_logs/debug_daemon_log_source.h
index aea030f..8d1626c 100644
--- a/chrome/browser/chromeos/system_logs/debug_daemon_log_source.h
+++ b/chrome/browser/chromeos/system_logs/debug_daemon_log_source.h
@@ -33,6 +33,7 @@
   void OnGetRoutes(bool succeeded, const std::vector<std::string>& routes);
   void OnGetNetworkStatus(bool succeeded, const std::string& status);
   void OnGetModemStatus(bool succeeded, const std::string& status);
+  void OnGetWiMaxStatus(bool succeeded, const std::string& status);
   void OnGetLogs(bool succeeded,
                  const KeyValueMap& logs);
   void OnGetUserLogFiles(bool succeeded,
diff --git a/chrome/browser/drive/drive_uploader.cc b/chrome/browser/drive/drive_uploader.cc
index 0d4866a..493a763 100644
--- a/chrome/browser/drive/drive_uploader.cc
+++ b/chrome/browser/drive/drive_uploader.cc
@@ -34,6 +34,15 @@
 
 namespace drive {
 
+namespace {
+// Upload data is split to multiple HTTP request each conveying kUploadChunkSize
+// bytes (except the request for uploading the last chunk of data).
+// The value must be a multiple of 512KB according to the spec of GData WAPI and
+// Drive API v2. It is set to a smaller value than 2^31 for working around
+// server side error (crbug.com/264089).
+const int64 kUploadChunkSize = (1LL << 30);  // 1GB
+}  // namespace
+
 // Structure containing current upload information of file, passed between
 // DriveServiceInterface methods and callbacks.
 struct DriveUploader::UploadFileInfo {
@@ -316,11 +325,15 @@
     return;
   }
 
+  // Limit the size of data uploaded per each request by kUploadChunkSize.
+  const int64 end_position = std::min(upload_file_info->content_length,
+                                      start_position + kUploadChunkSize);
+
   UploadFileInfo* info_ptr = upload_file_info.get();
   info_ptr->cancel_callback = drive_service_->ResumeUpload(
       info_ptr->upload_location,
       start_position,
-      info_ptr->content_length,
+      end_position,
       info_ptr->content_length,
       info_ptr->content_type,
       info_ptr->file_path,
diff --git a/chrome/browser/extensions/ad_view_browsertest.cc b/chrome/browser/extensions/ad_view_browsertest.cc
index 045293e..4982cb2 100644
--- a/chrome/browser/extensions/ad_view_browsertest.cc
+++ b/chrome/browser/extensions/ad_view_browsertest.cc
@@ -65,7 +65,15 @@
 
 // This test checks that <adview> attributes are also exposed as properties
 // (with the same name and value).
-IN_PROC_BROWSER_TEST_F(AdViewTest, PropertiesAreInSyncWithAttributes) {
+#if defined(OS_WIN)
+// Flaky on Win XP. (http://crbug.com/264362)
+#define MAYBE_PropertiesAreInSyncWithAttributes \
+    DISABLED_PropertiesAreInSyncWithAttributes
+#else
+#define MAYBE_PropertiesAreInSyncWithAttributes \
+    PropertiesAreInSyncWithAttributes
+#endif
+IN_PROC_BROWSER_TEST_F(AdViewTest, MAYBE_PropertiesAreInSyncWithAttributes) {
   ASSERT_TRUE(StartEmbeddedTestServer());
 
   ASSERT_TRUE(RunPlatformAppTest(
diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc
index 03d6613..7de85f4 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api.cc
@@ -808,11 +808,7 @@
   EXTENSION_FUNCTION_VALIDATE(params.get());
   const extensions::api::downloads::DownloadOptions& options = params->options;
   GURL download_url(options.url);
-  if (!download_url.is_valid() ||
-      (!download_url.SchemeIs("data") &&
-       download_url.GetOrigin() != GetExtension()->url().GetOrigin() &&
-       !extensions::PermissionsData::HasHostPermission(GetExtension(),
-                                                       download_url))) {
+  if (!download_url.is_valid()) {
     error_ = download_extension_errors::kInvalidURLError;
     return false;
   }
@@ -1109,7 +1105,9 @@
   EXTENSION_FUNCTION_VALIDATE(params.get());
   DownloadItem* download_item = GetDownload(
       profile(), include_incognito(), params->download_id);
-  if (!download_item || download_item->GetState() != DownloadItem::COMPLETE) {
+  if (!download_item || download_item->GetState() != DownloadItem::COMPLETE ||
+      !GetExtension()->HasAPIPermission(
+          extensions::APIPermission::kDownloadsOpen)) {
     error_ = download_extension_errors::kInvalidOperationError;
     return false;
   }
diff --git a/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc b/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc
index 26450b6..93a40f2 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc
@@ -1736,17 +1736,25 @@
     "http://",
     "#frag",
     "foo/bar.html#frag",
-    "javascript:document.write(\\\"hello\\\");",
-    "javascript:return false;",
-    "ftp://example.com/example.txt",
   };
 
   for (size_t index = 0; index < arraysize(kInvalidURLs); ++index) {
     EXPECT_STREQ(download_extension_errors::kInvalidURLError,
                   RunFunctionAndReturnError(new DownloadsDownloadFunction(),
                                             base::StringPrintf(
-        "[{\"url\": \"%s\"}]", kInvalidURLs[index])).c_str());
+        "[{\"url\": \"%s\"}]", kInvalidURLs[index])).c_str())
+      << kInvalidURLs[index];
   }
+
+  EXPECT_STREQ("net::ERR_ACCESS_DENIED", RunFunctionAndReturnError(
+      new DownloadsDownloadFunction(),
+      "[{\"url\": \"javascript:document.write(\\\"hello\\\");\"}]").c_str());
+  EXPECT_STREQ("net::ERR_ACCESS_DENIED", RunFunctionAndReturnError(
+      new DownloadsDownloadFunction(),
+      "[{\"url\": \"javascript:return false;\"}]").c_str());
+  EXPECT_STREQ("net::ERR_NOT_IMPLEMENTED", RunFunctionAndReturnError(
+      new DownloadsDownloadFunction(),
+      "[{\"url\": \"ftp://example.com/example.txt\"}]").c_str());
 }
 
 // TODO(benjhayden): Set up a test ftp server, add ftp://localhost* to
diff --git a/chrome/browser/chromeos/extensions/networking_private_api.h b/chrome/browser/extensions/api/networking_private/networking_private_api.h
similarity index 96%
rename from chrome/browser/chromeos/extensions/networking_private_api.h
rename to chrome/browser/extensions/api/networking_private/networking_private_api.h
index d7232a3..cab006d 100644
--- a/chrome/browser/chromeos/extensions/networking_private_api.h
+++ b/chrome/browser/extensions/api/networking_private/networking_private_api.h
@@ -1,12 +1,12 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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 classes implement the chrome.networkingPrivate JavaScript extension
 // API.
 
-#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_API_H_
-#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_API_H_
+#ifndef CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_API_H_
+#define CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_API_H_
 
 #include <string>
 
@@ -250,4 +250,5 @@
   DISALLOW_COPY_AND_ASSIGN(NetworkingPrivateVerifyAndEncryptDataFunction);
 };
 
-#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_API_H_
+#endif  // CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_API_H_
+
diff --git a/chrome/browser/chromeos/extensions/networking_private_api.cc b/chrome/browser/extensions/api/networking_private/networking_private_api_chromeos.cc
similarity index 98%
rename from chrome/browser/chromeos/extensions/networking_private_api.cc
rename to chrome/browser/extensions/api/networking_private/networking_private_api_chromeos.cc
index 9708b8d..cdaf357 100644
--- a/chrome/browser/chromeos/extensions/networking_private_api.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_api_chromeos.cc
@@ -1,8 +1,8 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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/extensions/networking_private_api.h"
+#include "chrome/browser/extensions/api/networking_private/networking_private_api.h"
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_api_nonchromeos.cc b/chrome/browser/extensions/api/networking_private/networking_private_api_nonchromeos.cc
new file mode 100644
index 0000000..55beff7
--- /dev/null
+++ b/chrome/browser/extensions/api/networking_private/networking_private_api_nonchromeos.cc
@@ -0,0 +1,435 @@
+// 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/extensions/api/networking_private/networking_private_api.h"
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/callback.h"
+#include "base/command_line.h"
+#include "base/json/json_reader.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/extensions/event_names.h"
+#include "chrome/browser/extensions/event_router.h"
+#include "chrome/browser/extensions/extension_function_registry.h"
+#include "chrome/browser/extensions/extension_system.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/api/networking_private.h"
+
+using extensions::event_names::kOnNetworkListChanged;
+using extensions::event_names::kOnNetworksChanged;
+using extensions::EventRouter;
+using extensions::ExtensionSystem;
+namespace api = extensions::api::networking_private;
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateGetPropertiesFunction
+
+
+const char kNetworkingPrivateProperties[] = "NetworkingPrivateProperties";
+
+struct NetworkingPrivatePropertiesData : base::SupportsUserData::Data {
+  explicit NetworkingPrivatePropertiesData(const base::DictionaryValue* prop) :
+    properties_(prop->DeepCopy()) { }
+  scoped_ptr<base::DictionaryValue> properties_;
+};
+
+NetworkingPrivateGetPropertiesFunction::
+  ~NetworkingPrivateGetPropertiesFunction() {
+}
+
+bool NetworkingPrivateGetPropertiesFunction::RunImpl() {
+  scoped_ptr<api::GetProperties::Params> params =
+      api::GetProperties::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+
+  // If there are properties set by SetProperties function, use those.
+  NetworkingPrivatePropertiesData* stored_properties =
+    static_cast<NetworkingPrivatePropertiesData*> (
+        profile()->GetUserData(kNetworkingPrivateProperties));
+  if (stored_properties != NULL) {
+    SetResult(stored_properties->properties_.release());
+    SendResponse(true);
+    return true;
+  }
+
+  const std::string network_properties =
+    "{\"ConnectionState\":\"NotConnected\","
+     "\"GUID\":\"stub_wifi2\","
+     "\"Name\":\"wifi2_PSK\","
+     "\"Type\":\"WiFi\","
+     "\"WiFi\":{"
+       "\"Frequency\":5000,"
+       "\"FrequencyList\":[2400,5000],"
+       "\"SSID\":\"stub_wifi2\","
+       "\"Security\":\"WPA-PSK\","
+       "\"SignalStrength\":80}}";
+
+  if (params->network_guid == "nonexistent_path") {
+    error_ = "Error.DBusFailed";
+    SendResponse(false);
+  } else {
+    SetResult(base::JSONReader::Read(network_properties));
+    SendResponse(true);
+  }
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateGetManagedPropertiesFunction
+
+NetworkingPrivateGetManagedPropertiesFunction::
+  ~NetworkingPrivateGetManagedPropertiesFunction() {
+}
+
+bool NetworkingPrivateGetManagedPropertiesFunction::RunImpl() {
+  scoped_ptr<api::GetManagedProperties::Params> params =
+      api::GetManagedProperties::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  const std::string network_properties =
+      "{"
+      "  \"ConnectionState\": {"
+      "    \"Active\": \"NotConnected\","
+      "    \"Effective\": \"Unmanaged\""
+      "  },"
+      "  \"GUID\": \"stub_wifi2\","
+      "  \"Name\": {"
+      "    \"Active\": \"wifi2_PSK\","
+      "    \"Effective\": \"UserPolicy\","
+      "    \"UserPolicy\": \"My WiFi Network\""
+      "  },"
+      "  \"Type\": {"
+      "    \"Active\": \"WiFi\","
+      "    \"Effective\": \"UserPolicy\","
+      "    \"UserPolicy\": \"WiFi\""
+      "  },"
+      "  \"WiFi\": {"
+      "    \"AutoConnect\": {"
+      "      \"Active\": false,"
+      "      \"UserEditable\": true"
+      "    },"
+      "    \"Frequency\" : {"
+      "      \"Active\": 5000,"
+      "      \"Effective\": \"Unmanaged\""
+      "    },"
+      "    \"FrequencyList\" : {"
+      "      \"Active\": [2400, 5000],"
+      "      \"Effective\": \"Unmanaged\""
+      "    },"
+      "    \"Passphrase\": {"
+      "      \"Effective\": \"UserSetting\","
+      "      \"UserEditable\": true,"
+      "      \"UserSetting\": \"FAKE_CREDENTIAL_VPaJDV9x\""
+      "    },"
+      "    \"SSID\": {"
+      "      \"Active\": \"stub_wifi2\","
+      "      \"Effective\": \"UserPolicy\","
+      "      \"UserPolicy\": \"stub_wifi2\""
+      "    },"
+      "    \"Security\": {"
+      "      \"Active\": \"WPA-PSK\","
+      "      \"Effective\": \"UserPolicy\","
+      "      \"UserPolicy\": \"WPA-PSK\""
+      "    },"
+      "    \"SignalStrength\": {"
+      "      \"Active\": 80,"
+      "      \"Effective\": \"Unmanaged\""
+      "    }"
+      "  }"
+      "}";
+
+  SetResult(base::JSONReader::Read(network_properties));
+  SendResponse(true);
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateGetStateFunction
+
+NetworkingPrivateGetStateFunction::
+  ~NetworkingPrivateGetStateFunction() {
+}
+
+bool NetworkingPrivateGetStateFunction::RunImpl() {
+  scoped_ptr<api::GetState::Params> params =
+      api::GetState::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  const std::string network_state =
+      "{"
+      "  \"ConnectionState\": \"NotConnected\","
+      "  \"GUID\": \"stub_wifi2\","
+      "  \"Name\": \"wifi2_PSK\","
+      "  \"Type\": \"WiFi\","
+      "  \"WiFi\": {"
+      "    \"AutoConnect\": false,"
+      "    \"FrequencyList\": [2400, 5000],"
+      "    \"Security\": \"WPA-PSK\","
+      "    \"SignalStrength\": 80"
+      "  }"
+      "}";
+  SetResult(base::JSONReader::Read(network_state));
+  SendResponse(true);
+  return true;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateSetPropertiesFunction
+
+NetworkingPrivateSetPropertiesFunction::
+  ~NetworkingPrivateSetPropertiesFunction() {
+}
+
+bool NetworkingPrivateSetPropertiesFunction::RunImpl() {
+  scoped_ptr<api::SetProperties::Params> params =
+      api::SetProperties::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  scoped_ptr<base::DictionaryValue> properties_dict(
+      params->properties.ToValue());
+
+  // Store properties_dict in profile to return from GetProperties.
+  profile()->SetUserData(kNetworkingPrivateProperties,
+    new NetworkingPrivatePropertiesData(properties_dict.get()));
+  SendResponse(true);
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateGetVisibleNetworksFunction
+
+NetworkingPrivateGetVisibleNetworksFunction::
+  ~NetworkingPrivateGetVisibleNetworksFunction() {
+}
+
+bool NetworkingPrivateGetVisibleNetworksFunction::RunImpl() {
+  scoped_ptr<api::GetVisibleNetworks::Params> params =
+      api::GetVisibleNetworks::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  const std::string networks_json =
+      "[{"
+      "    \"ConnectionState\": \"Connected\","
+      "    \"GUID\": \"stub_ethernet\","
+      "    \"Name\": \"eth0\","
+      "    \"Type\": \"Ethernet\""
+      "  },"
+      "  {"
+      "    \"ConnectionState\": \"Connected\","
+      "    \"GUID\": \"stub_wifi1\","
+      "    \"Name\": \"wifi1\","
+      "    \"Type\": \"WiFi\","
+      "    \"WiFi\": {"
+      "      \"AutoConnect\": false,"
+      "      \"FrequencyList\": [2400],"
+      "      \"Security\": \"WEP-PSK\","
+      "      \"SignalStrength\": 0"
+      "    }"
+      "  },"
+      "  {"
+      "    \"ConnectionState\": \"NotConnected\","
+      "    \"GUID\": \"stub_wifi2\","
+      "    \"Name\": \"wifi2_PSK\","
+      "    \"Type\": \"WiFi\","
+      "    \"WiFi\": {"
+      "      \"AutoConnect\": false,"
+      "      \"FrequencyList\": [2400, 5000],"
+      "      \"Security\": \"WPA-PSK\","
+      "      \"SignalStrength\": 80"
+      "    }"
+      "  },"
+      "  {"
+      "    \"Cellular\": {"
+      "      \"ActivateOverNonCellularNetwork\": false,"
+      "      \"ActivationState\": \"not-activated\","
+      "      \"NetworkTechnology\": \"GSM\","
+      "      \"RoamingState\": \"home\""
+      "    },"
+      "    \"ConnectionState\": \"NotConnected\","
+      "    \"GUID\": \"stub_cellular1\","
+      "    \"Name\": \"cellular1\","
+      "    \"Type\": \"Cellular\""
+      "  },"
+      "  {"
+      "    \"ConnectionState\": \"Connected\","
+      "    \"GUID\": \"stub_vpn1\","
+      "    \"Name\": \"vpn1\","
+      "    \"Type\": \"VPN\","
+      "    \"VPN\": {"
+      "      \"AutoConnect\": false"
+      "    }"
+      "  }]";
+  ListValue* visible_networks =
+      static_cast<ListValue*>(base::JSONReader::Read(networks_json));
+  // If caller only needs WiFi networks, then remove all other networks.
+  if (params->type == api::GetVisibleNetworks::Params::TYPE_WIFI) {
+    visible_networks->Remove(4, NULL);
+    visible_networks->Remove(3, NULL);
+    visible_networks->Remove(0, NULL);
+  }
+
+  SetResult(visible_networks);
+  SendResponse(true);
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateRequestNetworkScanFunction
+
+NetworkingPrivateRequestNetworkScanFunction::
+  ~NetworkingPrivateRequestNetworkScanFunction() {
+}
+
+bool NetworkingPrivateRequestNetworkScanFunction::RunImpl() {
+  // Generate onNetworkListChanged event.
+  std::vector<std::string> changes;
+  changes.push_back("stub_ethernet");
+  changes.push_back("stub_wifi1");
+  changes.push_back("stub_wifi2");
+  changes.push_back("stub_cellular1");
+  changes.push_back("stub_vpn1");
+
+  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  scoped_ptr<base::ListValue> args(api::OnNetworkListChanged::Create(changes));
+  scoped_ptr<extensions::Event> extension_event(new extensions::Event(
+      kOnNetworkListChanged, args.Pass()));
+  event_router->BroadcastEvent(extension_event.Pass());
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateStartConnectFunction
+
+NetworkingPrivateStartConnectFunction::
+  ~NetworkingPrivateStartConnectFunction() {
+}
+
+bool NetworkingPrivateStartConnectFunction::RunImpl() {
+  scoped_ptr<api::StartConnect::Params> params =
+      api::StartConnect::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  if (params->network_guid == "nonexistent_path") {
+    error_ = "not-found";
+    SendResponse(false);
+  } else {
+    SendResponse(true);
+    // Set Properties to reflect connected state
+    const std::string network_properties =
+      "{\"ConnectionState\":\"Connected\","
+       "\"GUID\":\"stub_wifi2\","
+       "\"Name\":\"wifi2_PSK\","
+       "\"Type\":\"WiFi\","
+       "\"WiFi\":{"
+         "\"Frequency\":5000,"
+         "\"FrequencyList\":[2400,5000],"
+         "\"SSID\":\"stub_wifi2\","
+         "\"Security\":\"WPA-PSK\","
+         "\"SignalStrength\":80}}";
+
+    // Store network_properties in profile to return from GetProperties.
+    profile()->SetUserData(kNetworkingPrivateProperties,
+      new NetworkingPrivatePropertiesData(
+        static_cast<DictionaryValue*>(
+          base::JSONReader::Read(network_properties))));
+
+    // Broadcast NetworksChanged Event that network is connected
+    EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+    scoped_ptr<base::ListValue> args(api::OnNetworksChanged::Create(
+        std::vector<std::string>(1, params->network_guid)));
+    scoped_ptr<extensions::Event> netchanged_event(
+        new extensions::Event(kOnNetworksChanged, args.Pass()));
+    event_router->BroadcastEvent(netchanged_event.Pass());
+
+    // Generate NetworkListChanged event.
+    std::vector<std::string> list;
+    list.push_back("stub_wifi2");
+    list.push_back("stub_ethernet");
+    list.push_back("stub_wifi1");
+    list.push_back("stub_cellular1");
+    list.push_back("stub_vpn1");
+
+    scoped_ptr<base::ListValue> arg2(api::OnNetworkListChanged::Create(list));
+    scoped_ptr<extensions::Event> netlist_event(new extensions::Event(
+        kOnNetworkListChanged, arg2.Pass()));
+    event_router->BroadcastEvent(netlist_event.Pass());
+  }
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateStartDisconnectFunction
+
+NetworkingPrivateStartDisconnectFunction::
+  ~NetworkingPrivateStartDisconnectFunction() {
+}
+
+bool NetworkingPrivateStartDisconnectFunction::RunImpl() {
+  scoped_ptr<api::StartDisconnect::Params> params =
+      api::StartDisconnect::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  if (params->network_guid == "nonexistent_path") {
+    error_ = "not-found";
+    SendResponse(false);
+  } else {
+    SendResponse(true);
+
+    // Send Event that network is disconnected. Listener will use GetProperties.
+    EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+    scoped_ptr<base::ListValue> args(api::OnNetworksChanged::Create(
+        std::vector<std::string>(1, params->network_guid)));
+    scoped_ptr<extensions::Event> extension_event(
+        new extensions::Event(kOnNetworksChanged, args.Pass()));
+    event_router->BroadcastEvent(extension_event.Pass());
+  }
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateVerifyDestinationFunction
+
+NetworkingPrivateVerifyDestinationFunction::
+  ~NetworkingPrivateVerifyDestinationFunction() {
+}
+
+bool NetworkingPrivateVerifyDestinationFunction::RunImpl() {
+  scoped_ptr<api::VerifyDestination::Params> params =
+      api::VerifyDestination::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  SetResult(new base::FundamentalValue(true));
+  SendResponse(true);
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateVerifyAndEncryptCredentialsFunction
+
+NetworkingPrivateVerifyAndEncryptCredentialsFunction::
+  ~NetworkingPrivateVerifyAndEncryptCredentialsFunction() {
+}
+
+bool NetworkingPrivateVerifyAndEncryptCredentialsFunction::RunImpl() {
+  scoped_ptr<api::VerifyAndEncryptCredentials::Params> params =
+      api::VerifyAndEncryptCredentials::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  SetResult(new base::StringValue("encrypted_credentials"));
+  SendResponse(true);
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateVerifyAndEncryptDataFunction
+
+NetworkingPrivateVerifyAndEncryptDataFunction::
+  ~NetworkingPrivateVerifyAndEncryptDataFunction() {
+}
+
+bool NetworkingPrivateVerifyAndEncryptDataFunction::RunImpl() {
+  scoped_ptr<api::VerifyAndEncryptData::Params> params =
+      api::VerifyAndEncryptData::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  SetResult(new base::StringValue("encrypted_data"));
+  SendResponse(true);
+  return true;
+}
+
diff --git a/chrome/browser/chromeos/extensions/networking_private_apitest.cc b/chrome/browser/extensions/api/networking_private/networking_private_apitest.cc
similarity index 93%
rename from chrome/browser/chromeos/extensions/networking_private_apitest.cc
rename to chrome/browser/extensions/api/networking_private/networking_private_apitest.cc
index fe7093c..5ab4ef5 100644
--- a/chrome/browser/chromeos/extensions/networking_private_apitest.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_apitest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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.
 
@@ -15,6 +15,8 @@
 #include "chrome/browser/policy/policy_types.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
+
+#if defined(OS_CHROMEOS)
 #include "chromeos/chromeos_switches.h"
 #include "chromeos/dbus/cryptohome_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
@@ -25,7 +27,7 @@
 #include "chromeos/network/onc/onc_utils.h"
 #include "policy/policy_constants.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
-
+#endif  // OS_CHROMEOS
 using testing::AnyNumber;
 using testing::Return;
 using testing::_;
@@ -37,19 +39,35 @@
 const char kUser1ProfilePath[] = "/profile/user1/shill";
 const char kUserIdStubHashSuffix[] = "-hash";
 
-void AssignString(std::string* out,
-                  DBusMethodCallStatus call_status,
-                  const std::string& result) {
-  CHECK_EQ(call_status, DBUS_METHOD_CALL_SUCCESS);
-  *out = result;
-}
-
 }  // namespace
 
 class ExtensionNetworkingPrivateApiTest :
     public ExtensionApiTest,
     public testing::WithParamInterface<bool> {
  public:
+  bool RunNetworkingSubtest(const std::string& subtest) {
+    return RunExtensionSubtest(
+        "networking", "main.html?" + subtest,
+        kFlagEnableFileAccess | kFlagLoadAsComponent);
+  }
+
+  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
+    EXPECT_CALL(provider_, IsInitializationComplete(_))
+        .WillRepeatedly(Return(true));
+    EXPECT_CALL(provider_, RegisterPolicyDomain(_)).Times(AnyNumber());
+    policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
+
+    ExtensionApiTest::SetUpInProcessBrowserTestFixture();
+  }
+
+#if defined(OS_CHROMEOS)
+  static void AssignString(std::string* out,
+                    DBusMethodCallStatus call_status,
+                    const std::string& result) {
+    CHECK_EQ(call_status, DBUS_METHOD_CALL_SUCCESS);
+    *out = result;
+  }
+
   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
     ExtensionApiTest::SetUpCommandLine(command_line);
     // Whitelist the extension ID of the test extension.
@@ -68,21 +86,6 @@
       command_line->AppendSwitch(::switches::kMultiProfiles);
   }
 
-  bool RunNetworkingSubtest(const std::string& subtest) {
-    return RunExtensionSubtest(
-        "networking", "main.html?" + subtest,
-        kFlagEnableFileAccess | kFlagLoadAsComponent);
-  }
-
-  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
-    EXPECT_CALL(provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
-    EXPECT_CALL(provider_, RegisterPolicyDomain(_)).Times(AnyNumber());
-    policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
-
-    ExtensionApiTest::SetUpInProcessBrowserTestFixture();
-  }
-
   void InitializeSanitizedUsername() {
     chromeos::UserManager* user_manager = chromeos::UserManager::Get();
     chromeos::User* user = user_manager->GetActiveUser();
@@ -189,6 +192,19 @@
 
     content::RunAllPendingInMessageLoop();
   }
+#else  // !defined(OS_CHROMEOS)
+  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
+    ExtensionApiTest::SetUpCommandLine(command_line);
+    // Whitelist the extension ID of the test extension.
+    command_line->AppendSwitchASCII(::switches::kWhitelistedExtensionID,
+                                    "epcifkihnkjgphfkloaaleeakhpmgdmn");
+  }
+
+  virtual void SetUpOnMainThread() OVERRIDE {
+    ExtensionApiTest::SetUpOnMainThread();
+    content::RunAllPendingInMessageLoop();
+  }
+#endif  // OS_CHROMEOS
 
  protected:
   policy::MockConfigurationPolicyProvider provider_;
@@ -250,6 +266,7 @@
   EXPECT_TRUE(RunNetworkingSubtest("setProperties")) << message_;
 }
 
+#if defined(OS_CHROMEOS)
 IN_PROC_BROWSER_TEST_P(ExtensionNetworkingPrivateApiTest,
                        GetManagedProperties) {
   ShillServiceClient::TestInterface* service_test =
@@ -302,6 +319,7 @@
 
   EXPECT_TRUE(RunNetworkingSubtest("getManagedProperties")) << message_;
 }
+#endif  // OS_CHROMEOS
 
 IN_PROC_BROWSER_TEST_P(ExtensionNetworkingPrivateApiTest,
                        OnNetworksChangedEventConnect) {
@@ -340,3 +358,4 @@
                         testing::Bool());
 
 }  // namespace chromeos
+
diff --git a/chrome/browser/chromeos/extensions/networking_private_event_router.h b/chrome/browser/extensions/api/networking_private/networking_private_event_router.h
similarity index 84%
rename from chrome/browser/chromeos/extensions/networking_private_event_router.h
rename to chrome/browser/extensions/api/networking_private/networking_private_event_router.h
index 9173c76..011c8dd 100644
--- a/chrome/browser/chromeos/extensions/networking_private_event_router.h
+++ b/chrome/browser/extensions/api/networking_private/networking_private_event_router.h
@@ -1,9 +1,9 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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_EXTENSIONS_NETWORKING_PRIVATE_EVENT_ROUTER_H_
-#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_EVENT_ROUTER_H_
+#ifndef CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_H_
+#define CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_H_
 
 #include "chrome/browser/extensions/event_router.h"
 #include "chromeos/network/network_state_handler_observer.h"
@@ -52,4 +52,5 @@
 
 }  // namespace chromeos
 
-#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_EVENT_ROUTER_H_
+#endif  // CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_H_
+
diff --git a/chrome/browser/chromeos/extensions/networking_private_event_router.cc b/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
similarity index 95%
rename from chrome/browser/chromeos/extensions/networking_private_event_router.cc
rename to chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
index 97b3b60..44d70eb 100644
--- a/chrome/browser/chromeos/extensions/networking_private_event_router.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
@@ -1,12 +1,12 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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/extensions/networking_private_event_router.h"
+#include "chrome/browser/extensions/api/networking_private/networking_private_event_router.h"
 
 #include "base/json/json_writer.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/chromeos/extensions/networking_private_api.h"
+#include "chrome/browser/extensions/api/networking_private/networking_private_api.h"
 #include "chrome/browser/extensions/event_names.h"
 #include "chrome/browser/extensions/event_router_forwarder.h"
 #include "chrome/browser/extensions/extension_system.h"
@@ -139,3 +139,4 @@
 }
 
 }  // namespace chromeos
+
diff --git a/chrome/browser/chromeos/extensions/networking_private_event_router_factory.cc b/chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.cc
similarity index 83%
rename from chrome/browser/chromeos/extensions/networking_private_event_router_factory.cc
rename to chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.cc
index 1a88b74..6814ffe 100644
--- a/chrome/browser/chromeos/extensions/networking_private_event_router_factory.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.cc
@@ -1,10 +1,10 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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/extensions/networking_private_event_router_factory.h"
+#include "chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.h"
 
-#include "chrome/browser/chromeos/extensions/networking_private_event_router.h"
+#include "chrome/browser/extensions/api/networking_private/networking_private_event_router.h"
 #include "chrome/browser/extensions/extension_system_factory.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
@@ -38,7 +38,11 @@
 BrowserContextKeyedService*
 NetworkingPrivateEventRouterFactory::BuildServiceInstanceFor(
     content::BrowserContext* profile) const {
+#if defined(OS_CHROMEOS)
   return new NetworkingPrivateEventRouter(static_cast<Profile*>(profile));
+#else  // OS_CHROMEOS
+  return NULL;
+#endif  // OS_CHROMEOS
 }
 
 content::BrowserContext*
diff --git a/chrome/browser/chromeos/extensions/networking_private_event_router_factory.h b/chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.h
similarity index 81%
rename from chrome/browser/chromeos/extensions/networking_private_event_router_factory.h
rename to chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.h
index 0208904..bcd2eba 100644
--- a/chrome/browser/chromeos/extensions/networking_private_event_router_factory.h
+++ b/chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.h
@@ -1,9 +1,9 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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_EXTENSIONS_NETWORKING_PRIVATE_EVENT_ROUTER_FACTORY_H_
-#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_EVENT_ROUTER_FACTORY_H_
+#ifndef CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_FACTORY_H_
+#define CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_FACTORY_H_
 
 #include "base/memory/singleton.h"
 #include "components/browser_context_keyed_service/browser_context_keyed_service_factory.h"
@@ -49,4 +49,5 @@
 
 }  // namespace chromeos
 
-#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_EVENT_ROUTER_FACTORY_H_
+#endif  // CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_FACTORY_H_
+
diff --git a/chrome/browser/extensions/app_process_apitest.cc b/chrome/browser/extensions/app_process_apitest.cc
index ee5a829..a1c30b5 100644
--- a/chrome/browser/extensions/app_process_apitest.cc
+++ b/chrome/browser/extensions/app_process_apitest.cc
@@ -10,6 +10,7 @@
 #include "chrome/browser/extensions/process_map.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
+#include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_finder.h"
@@ -656,20 +657,28 @@
       LoadExtension(test_data_dir_.AppendASCII("app_process"));
   ASSERT_TRUE(app);
 
-  content::WindowedNotificationObserver blocker_observer(
-      chrome::NOTIFICATION_CONTENT_BLOCKED_STATE_CHANGED,
-      content::NotificationService::AllSources());
   ui_test_utils::NavigateToURL(
       browser(), GetTestBaseURL("app_process").Resolve("path3/container.html"));
 
-  blocker_observer.Wait();
-
   WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
   BlockedContentTabHelper* blocked_content_tab_helper =
       BlockedContentTabHelper::FromWebContents(tab);
-  std::vector<WebContents*> blocked_contents;
-  blocked_content_tab_helper->GetBlockedContents(&blocked_contents);
-  EXPECT_EQ(blocked_contents.size(), 1u);
+  PopupBlockerTabHelper* popup_blocker_tab_helper =
+      PopupBlockerTabHelper::FromWebContents(tab);
+  if (!blocked_content_tab_helper->GetBlockedContentsCount() &&
+      (!popup_blocker_tab_helper ||
+       !popup_blocker_tab_helper->GetBlockedPopupsCount())) {
+    content::WindowedNotificationObserver observer(
+        chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED,
+        content::NotificationService::AllSources());
+    observer.Wait();
+  }
+
+  EXPECT_EQ(1u,
+            blocked_content_tab_helper->GetBlockedContentsCount() +
+                (popup_blocker_tab_helper
+                     ? popup_blocker_tab_helper->GetBlockedPopupsCount()
+                     : 0));
 }
 
 // Tests that if an extension launches an app via chrome.tabs.create with an URL
diff --git a/chrome/browser/extensions/data_deleter.cc b/chrome/browser/extensions/data_deleter.cc
index 8c8fe4f..46518b0 100644
--- a/chrome/browser/extensions/data_deleter.cc
+++ b/chrome/browser/extensions/data_deleter.cc
@@ -41,19 +41,16 @@
     // preserve this code path without checking for isolation because it's
     // simpler than special casing.  This code should go away once we merge
     // the various URLRequestContexts (http://crbug.com/159193).
-    partition->ClearDataForOrigin(
-        content::StoragePartition::REMOVE_DATA_MASK_ALL,
+    partition->AsyncClearDataForOrigin(
         content::StoragePartition::kAllStorage,
         storage_origin,
         profile->GetRequestContextForExtensions());
   } else {
     // We don't need to worry about the media request context because that
     // shares the same cookie store as the main request context.
-    partition->ClearDataForOrigin(
-        content::StoragePartition::REMOVE_DATA_MASK_ALL,
-        content::StoragePartition::kAllStorage,
-        storage_origin,
-        partition->GetURLRequestContext());
+    partition->AsyncClearDataForOrigin(content::StoragePartition::kAllStorage,
+                                       storage_origin,
+                                       partition->GetURLRequestContext());
   }
 
   // Begin removal of the settings for the current extension.
diff --git a/chrome/browser/extensions/external_loader.h b/chrome/browser/extensions/external_loader.h
index 86ffee3..ecadda0 100644
--- a/chrome/browser/extensions/external_loader.h
+++ b/chrome/browser/extensions/external_loader.h
@@ -55,7 +55,7 @@
   virtual ~ExternalLoader();
 
   // Notifies the provider that the list of extensions has been loaded.
-  void LoadFinished();
+  virtual void LoadFinished();
 
   // Used for passing the list of extensions from the method that loads them
   // to |LoadFinished|. To ensure thread safety, the rules are the following:
diff --git a/chrome/browser/extensions/external_pref_loader.h b/chrome/browser/extensions/external_pref_loader.h
index 49b0ce9..c06dd35 100644
--- a/chrome/browser/extensions/external_pref_loader.h
+++ b/chrome/browser/extensions/external_pref_loader.h
@@ -38,6 +38,8 @@
   virtual const base::FilePath GetBaseCrxFilePath() OVERRIDE;
 
  protected:
+  virtual ~ExternalPrefLoader() {}
+
   virtual void StartLoading() OVERRIDE;
   bool IsOptionSet(Options option) {
     return (options_ & option) != 0;
@@ -46,8 +48,6 @@
  private:
   friend class base::RefCountedThreadSafe<ExternalLoader>;
 
-  virtual ~ExternalPrefLoader() {}
-
   // Actually searches for and loads candidate standalone extension preference
   // files in the path corresponding to |base_path_id|.
   // Must be called on the file thread.
diff --git a/chrome/browser/extensions/external_provider_impl.cc b/chrome/browser/extensions/external_provider_impl.cc
index b5f3dc5..677f447 100644
--- a/chrome/browser/extensions/external_provider_impl.cc
+++ b/chrome/browser/extensions/external_provider_impl.cc
@@ -39,6 +39,7 @@
 #endif
 
 #if defined(OS_CHROMEOS)
+#include "chrome/browser/chromeos/extensions/external_pref_cache_loader.h"
 #include "chrome/browser/chromeos/login/user_manager.h"
 #include "chrome/browser/chromeos/policy/app_pack_updater.h"
 #include "chrome/browser/policy/browser_policy_connector.h"
@@ -394,13 +395,19 @@
     external_apps_path_id = chrome::DIR_MANAGED_USERS_DEFAULT_APPS;
 #endif
 
+#if defined(OS_CHROMEOS)
+  typedef chromeos::ExternalPrefCacheLoader PrefLoader;
+#else
+  typedef ExternalPrefLoader PrefLoader;
+#endif
+
   if (!is_chromeos_demo_session) {
     provider_list->push_back(
         linked_ptr<ExternalProviderInterface>(
             new ExternalProviderImpl(
                 service,
-                new ExternalPrefLoader(external_apps_path_id,
-                                       check_admin_permissions_on_mac),
+                new PrefLoader(external_apps_path_id,
+                               check_admin_permissions_on_mac),
                 profile,
                 Manifest::EXTERNAL_PREF,
                 Manifest::EXTERNAL_PREF_DOWNLOAD,
diff --git a/chrome/browser/feedback/feedback_util.cc b/chrome/browser/feedback/feedback_util.cc
index 8095fad..738bf9e 100644
--- a/chrome/browser/feedback/feedback_util.cc
+++ b/chrome/browser/feedback/feedback_util.cc
@@ -38,17 +38,15 @@
 #include "net/url_request/url_fetcher_delegate.h"
 #include "net/url_request/url_request_status.h"
 #include "third_party/icu/source/common/unicode/locid.h"
+#include "third_party/zlib/google/zip.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "url/gurl.h"
 
-#if defined(OS_CHROMEOS)
-#include "third_party/zlib/google/zip.h"
-#endif
-
 using content::WebContents;
 
 namespace {
-const char kLogsFilename[] = "system_logs.txt";
+const base::FilePath::CharType kLogsFilename[] =
+    FILE_PATH_LITERAL("system_logs.txt");
 }
 
 namespace chrome {
@@ -434,7 +432,6 @@
   screen_size = rect;
 }
 
-#if defined(OS_CHROMEOS)
 // static
 bool FeedbackUtil::ZipString(const std::string& logs,
                              std::string* compressed_logs) {
@@ -443,10 +440,10 @@
 
   // Create a temporary directory, put the logs into a file in it. Create
   // another temporary file to receive the zip file in.
-  if (!file_util::CreateNewTempDirectory("", &temp_path))
+  if (!file_util::CreateNewTempDirectory(FILE_PATH_LITERAL(""), &temp_path))
     return false;
-  if (file_util::WriteFile(
-      temp_path.Append(kLogsFilename), logs.c_str(), logs.size()) == -1)
+  if (file_util::WriteFile(temp_path.Append(kLogsFilename),
+                           logs.c_str(), logs.size()) == -1)
     return false;
   if (!file_util::CreateTemporaryFile(&zip_file))
     return false;
@@ -459,5 +456,3 @@
 
   return true;
 }
-#endif // OS_CHROMEOS
-
diff --git a/chrome/browser/feedback/feedback_util.h b/chrome/browser/feedback/feedback_util.h
index 163317d..7849186 100644
--- a/chrome/browser/feedback/feedback_util.h
+++ b/chrome/browser/feedback/feedback_util.h
@@ -76,9 +76,7 @@
   static void ClearScreenshotPng();
   static void SetScreenshotSize(const gfx::Rect& rect);
   static gfx::Rect& GetScreenshotSize();
-#if defined(OS_CHROMEOS)
   static bool ZipString(const std::string& logs, std::string* compressed_logs);
-#endif
 
   class PostCleanup;
 
diff --git a/chrome/browser/feedback/tracing_manager.cc b/chrome/browser/feedback/tracing_manager.cc
new file mode 100644
index 0000000..3ea14cf
--- /dev/null
+++ b/chrome/browser/feedback/tracing_manager.cc
@@ -0,0 +1,135 @@
+// 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/feedback/tracing_manager.h"
+
+#include "base/bind.h"
+#include "base/prefs/pref_service.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/feedback/feedback_util.h"
+#include "chrome/common/pref_names.h"
+#include "content/public/browser/trace_controller.h"
+
+namespace {
+// Only once trace manager can exist at a time.
+TracingManager* g_tracing_manager = NULL;
+// Trace IDs start at 1 and increase.
+int g_next_trace_id = 1;
+}
+
+TracingManager::TracingManager()
+    : current_trace_id_(0),
+      weak_ptr_factory_(this) {
+  DCHECK(!g_tracing_manager);
+  g_tracing_manager = this;
+  StartTracing();
+}
+
+TracingManager::~TracingManager() {
+  DCHECK(g_tracing_manager == this);
+  g_tracing_manager = NULL;
+}
+
+int TracingManager::RequestTrace() {
+  // Return the current trace if one is being collected.
+  if (current_trace_id_)
+    return current_trace_id_;
+
+  current_trace_id_ = g_next_trace_id;
+  ++g_next_trace_id;
+  content::TraceController::GetInstance()->EndTracingAsync(this);
+  return current_trace_id_;
+}
+
+bool TracingManager::GetTraceData(int id, const TraceDataCallback& callback) {
+  // If a trace is being collected currently, send it via callback when
+  // complete.
+  if (current_trace_id_) {
+    // Only allow one trace data request at a time.
+    if (trace_callback_.is_null()) {
+      trace_callback_ = callback;
+      return true;
+    } else {
+      return false;
+    }
+  } else {
+    std::map<int, scoped_refptr<base::RefCountedString> >::iterator data =
+        trace_data_.find(id);
+    if (data == trace_data_.end())
+      return false;
+
+    // Always return the data asychronously, so the behavior is consistant.
+    base::MessageLoopProxy::current()->PostTask(
+        FROM_HERE,
+        base::Bind(callback, data->second));
+    return true;
+  }
+}
+
+void TracingManager::DiscardTraceData(int id) {
+  trace_data_.erase(id);
+
+  // If the trace is discarded before it is complete, clean up the accumulators.
+  if (id == current_trace_id_) {
+    current_trace_id_ = 0;
+    data_ = "";
+
+    // If the trace has already been requested, provide an empty string.
+    if (!trace_callback_.is_null()) {
+      trace_callback_.Run(scoped_refptr<base::RefCountedString>());
+      trace_callback_.Reset();
+    }
+  }
+}
+
+void TracingManager::StartTracing() {
+  content::TraceController::GetInstance()->BeginTracing(
+      this, "-test_*",
+      base::debug::TraceLog::RECORD_CONTINUOUSLY);
+}
+
+void TracingManager::OnEndTracingComplete() {
+  if (!current_trace_id_)
+    return;
+
+  std::string output_val;
+  FeedbackUtil::ZipString(data_, &output_val);
+
+  scoped_refptr<base::RefCountedString> output;
+  output->TakeString(&output_val);
+
+  trace_data_[current_trace_id_] = output;
+
+  if (!trace_callback_.is_null()) {
+    trace_callback_.Run(output);
+    trace_callback_.Reset();
+  }
+
+  current_trace_id_ = 0;
+  data_ = "";
+
+  // Tracing has to be restarted asynchronous, so the TracingController can
+  // clean up.
+  base::MessageLoopProxy::current()->PostTask(
+      FROM_HERE,
+      base::Bind(&TracingManager::StartTracing,
+                 weak_ptr_factory_.GetWeakPtr()));
+}
+
+void TracingManager::OnTraceDataCollected(
+    const scoped_refptr<base::RefCountedString>& trace_fragment) {
+  if (current_trace_id_)
+    data_ += trace_fragment->data();
+}
+
+// static
+scoped_ptr<TracingManager> TracingManager::Create() {
+  if (g_tracing_manager)
+    return scoped_ptr<TracingManager>();
+  return scoped_ptr<TracingManager>(new TracingManager());
+}
+
+TracingManager* TracingManager::Get() {
+  return g_tracing_manager;
+}
diff --git a/chrome/browser/feedback/tracing_manager.h b/chrome/browser/feedback/tracing_manager.h
new file mode 100644
index 0000000..c70206a
--- /dev/null
+++ b/chrome/browser/feedback/tracing_manager.h
@@ -0,0 +1,80 @@
+// 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_FEEDBACK_TRACING_MANAGER_H_
+#define CHROME_BROWSER_FEEDBACK_TRACING_MANAGER_H_
+
+#include <map>
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "content/public/browser/trace_subscriber.h"
+
+// Callback used for getting the output of a trace.
+typedef base::Callback<void(scoped_refptr<base::RefCountedString> trace_data)>
+    TraceDataCallback;
+
+// This class is used to manage performance meterics that can be attached to
+// feedback reports.  This class is a Singleton that is owned by the preference
+// system.  It should only be created when it is enabled, and should only be
+// accessed elsewhere via Get().
+//
+// When a performance trace is desired, TracingManager::Get()->RequestTrace()
+// should be invoked.  The TracingManager will then start preparing a zipped
+// version of the performance data.  That data can then be requested via
+// GetTraceData().  When the data is no longer needed, it should be discarded
+// via DiscardTraceData().
+class TracingManager : public content::TraceSubscriber {
+ public:
+  virtual ~TracingManager();
+
+  // Create a TracingManager.  Can only be called when none exists.
+  static scoped_ptr<TracingManager> Create();
+
+  // Get the current TracingManager.  Returns NULL if one doesn't exist.
+  static TracingManager* Get();
+
+  // Request a trace ending at the current time.  If a trace is already being
+  // collected, the id for that trace is returned.
+  int RequestTrace();
+
+  // Get the trace data for |id|.  On success, true is returned, and the data is
+  // returned via |callback|.  Returns false on failure.
+  bool GetTraceData(int id, const TraceDataCallback& callback);
+
+  // Discard the data for trace |id|.
+  void DiscardTraceData(int id);
+
+ private:
+  void StartTracing();
+
+  // content::TraceSubscriber overrides
+  virtual void OnEndTracingComplete() OVERRIDE;
+  virtual void OnTraceDataCollected(
+      const scoped_refptr<base::RefCountedString>& trace_fragment) OVERRIDE;
+
+  TracingManager();
+
+  // Data being collected from the current trace.
+  std::string data_;
+
+  // ID of the trace that is being collected.
+  int current_trace_id_;
+
+  // Mapping of trace ID to trace data.
+  std::map<int, scoped_refptr<base::RefCountedString> > trace_data_;
+
+  // Callback for the current trace request.
+  TraceDataCallback trace_callback_;
+
+  base::WeakPtrFactory<TracingManager> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(TracingManager);
+};
+
+#endif  // CHROME_BROWSER_FEEDBACK_TRACING_MANAGER_H_
+
diff --git a/chrome/browser/google_apis/DEPS b/chrome/browser/google_apis/DEPS
index 214c501..20ee665 100644
--- a/chrome/browser/google_apis/DEPS
+++ b/chrome/browser/google_apis/DEPS
@@ -8,14 +8,9 @@
 specific_include_rules = {
   # AuthService should be gone. crbug.com/162157
   "auth_service\.(h|cc)": [
-    "!chrome/browser/chrome_notification_types.h",
     "!chrome/browser/profiles/profile.h",
-    "!chrome/browser/signin/token_service_factory.h",
-    "!chrome/browser/signin/token_service.h",
-    "!content/public/browser/notification_details.h",
-    "!content/public/browser/notification_observer.h",
-    "!content/public/browser/notification_registrar.h",
-    "!content/public/browser/notification_source.h",
-    "!content/public/browser/notification_types.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",
   ],
 }
diff --git a/chrome/browser/google_apis/auth_service.cc b/chrome/browser/google_apis/auth_service.cc
index 7d2017a..195848b 100644
--- a/chrome/browser/google_apis/auth_service.cc
+++ b/chrome/browser/google_apis/auth_service.cc
@@ -8,20 +8,16 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/location.h"
 #include "base/message_loop/message_loop_proxy.h"
 #include "base/metrics/histogram.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/google_apis/auth_service_observer.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/signin/token_service.h"
-#include "chrome/browser/signin/token_service_factory.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/browser/notification_types.h"
+#include "chrome/browser/signin/profile_oauth2_token_service.h"
+#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "google_apis/gaia/gaia_constants.h"
 #include "google_apis/gaia/gaia_urls.h"
 #include "google_apis/gaia/google_service_auth_error.h"
-#include "google_apis/gaia/oauth2_access_token_fetcher.h"
 
 #if defined(OS_CHROMEOS)
 #include "chromeos/login/login_state.h"
@@ -39,62 +35,49 @@
 const int kSuccessRatioHistogramTemporaryFailure = 3;
 const int kSuccessRatioHistogramMaxValue = 4;  // The max value is exclusive.
 
-}  // namespace
-
 // OAuth2 authorization token retrieval request.
-class AuthRequest : public OAuth2AccessTokenConsumer {
+class AuthRequest : public OAuth2TokenService::Consumer {
  public:
-  AuthRequest(net::URLRequestContextGetter* url_request_context_getter,
+  AuthRequest(Profile* profile,
+              net::URLRequestContextGetter* url_request_context_getter,
               const AuthStatusCallback& callback,
-              const std::vector<std::string>& scopes,
-              const std::string& refresh_token);
+              const std::vector<std::string>& scopes);
   virtual ~AuthRequest();
-  void Start();
-
-  // Overridden from OAuth2AccessTokenConsumer:
-  virtual void OnGetTokenSuccess(const std::string& access_token,
-                                 const base::Time& expiration_time) OVERRIDE;
-  virtual void OnGetTokenFailure(const GoogleServiceAuthError& error) OVERRIDE;
 
  private:
-  net::URLRequestContextGetter* url_request_context_getter_;
-  std::string refresh_token_;
+  // Overridden from OAuth2TokenService::Consumer:
+  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;
+
   AuthStatusCallback callback_;
-  std::vector<std::string> scopes_;
-  scoped_ptr<OAuth2AccessTokenFetcher> oauth2_access_token_fetcher_;
+  OAuth2TokenService::ScopeSet scopes_;
+  scoped_ptr<OAuth2TokenService::Request> request_;
   base::ThreadChecker thread_checker_;
 
   DISALLOW_COPY_AND_ASSIGN(AuthRequest);
 };
 
 AuthRequest::AuthRequest(
+    Profile* profile,
     net::URLRequestContextGetter* url_request_context_getter,
     const AuthStatusCallback& callback,
-    const std::vector<std::string>& scopes,
-    const std::string& refresh_token)
-    : url_request_context_getter_(url_request_context_getter),
-      refresh_token_(refresh_token),
-      callback_(callback),
-      scopes_(scopes) {
+    const std::vector<std::string>& scopes)
+    : callback_(callback),
+      scopes_(scopes.begin(), scopes.end()) {
   DCHECK(!callback_.is_null());
+  request_ = ProfileOAuth2TokenServiceFactory::GetForProfile(profile)->
+      StartRequestWithContext(url_request_context_getter, scopes_, this);
 }
 
 AuthRequest::~AuthRequest() {}
 
-void AuthRequest::Start() {
-  DCHECK(!refresh_token_.empty());
-  oauth2_access_token_fetcher_.reset(new OAuth2AccessTokenFetcher(
-      this, url_request_context_getter_));
-  oauth2_access_token_fetcher_->Start(
-      GaiaUrls::GetInstance()->oauth2_chrome_client_id(),
-      GaiaUrls::GetInstance()->oauth2_chrome_client_secret(),
-      refresh_token_,
-      scopes_);
-}
-
 // Callback for OAuth2AccessTokenFetcher on success. |access_token| is the token
 // used to start fetching user data.
-void AuthRequest::OnGetTokenSuccess(const std::string& access_token,
+void AuthRequest::OnGetTokenSuccess(const OAuth2TokenService::Request* request,
+                                    const std::string& access_token,
                                     const base::Time& expiration_time) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
@@ -107,7 +90,8 @@
 }
 
 // Callback for OAuth2AccessTokenFetcher on failure.
-void AuthRequest::OnGetTokenFailure(const GoogleServiceAuthError& error) {
+void AuthRequest::OnGetTokenFailure(const OAuth2TokenService::Request* request,
+                                    const GoogleServiceAuthError& error) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
   LOG(WARNING) << "AuthRequest: token request using refresh token failed: "
@@ -137,6 +121,8 @@
   delete this;
 }
 
+}  // namespace
+
 AuthService::AuthService(
     Profile* profile,
     net::URLRequestContextGetter* url_request_context_getter,
@@ -146,19 +132,19 @@
       scopes_(scopes),
       weak_ptr_factory_(this) {
   DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK(profile);
 
   // Get OAuth2 refresh token (if we have any) and register for its updates.
-  TokenService* service = TokenServiceFactory::GetForProfile(profile_);
-  refresh_token_ = service->GetOAuth2LoginRefreshToken();
-  registrar_.Add(this,
-                 chrome::NOTIFICATION_TOKEN_AVAILABLE,
-                 content::Source<TokenService>(service));
-  registrar_.Add(this,
-                 chrome::NOTIFICATION_TOKEN_REQUEST_FAILED,
-                 content::Source<TokenService>(service));
+  OAuth2TokenService* service =
+      ProfileOAuth2TokenServiceFactory::GetForProfile(profile_);
+  service->AddObserver(this);
+  has_refresh_token_ = service->RefreshTokenIsAvailable();
 }
 
 AuthService::~AuthService() {
+  OAuth2TokenService* service =
+      ProfileOAuth2TokenServiceFactory::GetForProfile(profile_);
+  service->RemoveObserver(this);
 }
 
 void AuthService::StartAuthentication(const AuthStatusCallback& callback) {
@@ -172,12 +158,12 @@
                           base::Bind(callback, HTTP_SUCCESS, access_token_));
   } else if (HasRefreshToken()) {
     // We have refresh token, let's get an access token.
-    (new AuthRequest(url_request_context_getter_,
-                     base::Bind(&AuthService::OnAuthCompleted,
-                                weak_ptr_factory_.GetWeakPtr(),
-                                callback),
-                     scopes_,
-                     refresh_token_))->Start();
+    new AuthRequest(profile_,
+                    url_request_context_getter_,
+                    base::Bind(&AuthService::OnAuthCompleted,
+                               weak_ptr_factory_.GetWeakPtr(),
+                               callback),
+                    scopes_);
   } else {
     relay_proxy->PostTask(FROM_HERE,
                           base::Bind(callback, GDATA_NOT_READY, std::string()));
@@ -189,7 +175,7 @@
 }
 
 bool AuthService::HasRefreshToken() const {
-  return !refresh_token_.empty();
+  return has_refresh_token_;
 }
 
 const std::string& AuthService::access_token() const {
@@ -201,7 +187,7 @@
 }
 
 void AuthService::ClearRefreshToken() {
-  refresh_token_.clear();
+  has_refresh_token_ = false;
 
   FOR_EACH_OBSERVER(AuthServiceObserver,
                     observers_,
@@ -239,24 +225,19 @@
   observers_.RemoveObserver(observer);
 }
 
-void AuthService::Observe(int type,
-                          const content::NotificationSource& source,
-                          const content::NotificationDetails& details) {
-  DCHECK(type == chrome::NOTIFICATION_TOKEN_AVAILABLE ||
-         type == chrome::NOTIFICATION_TOKEN_REQUEST_FAILED);
+void AuthService::OnRefreshTokenAvailable(const std::string& account_id) {
+  OnHandleRefreshToken(true);
+}
 
-  TokenService::TokenAvailableDetails* token_details =
-      content::Details<TokenService::TokenAvailableDetails>(details).ptr();
-  if (token_details->service() != GaiaConstants::kGaiaOAuth2LoginRefreshToken)
-    return;
+void AuthService::OnRefreshTokenRevoked(const std::string& account_id,
+                                        const GoogleServiceAuthError& error) {
+  OnHandleRefreshToken(false);
+}
 
+void AuthService::OnHandleRefreshToken(bool has_refresh_token) {
   access_token_.clear();
-  if (type == chrome::NOTIFICATION_TOKEN_AVAILABLE) {
-    TokenService* service = TokenServiceFactory::GetForProfile(profile_);
-    refresh_token_ = service->GetOAuth2LoginRefreshToken();
-  } else {
-    refresh_token_.clear();
-  }
+  has_refresh_token_ = has_refresh_token;
+
   FOR_EACH_OBSERVER(AuthServiceObserver,
                     observers_,
                     OnOAuth2RefreshTokenChanged());
diff --git a/chrome/browser/google_apis/auth_service.h b/chrome/browser/google_apis/auth_service.h
index a5647a7..4c92ab1 100644
--- a/chrome/browser/google_apis/auth_service.h
+++ b/chrome/browser/google_apis/auth_service.h
@@ -12,9 +12,7 @@
 #include "base/observer_list.h"
 #include "base/threading/thread_checker.h"
 #include "chrome/browser/google_apis/auth_service_interface.h"
-#include "chrome/browser/google_apis/gdata_errorcode.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
+#include "chrome/browser/signin/oauth2_token_service.h"
 
 class Profile;
 
@@ -31,7 +29,7 @@
 // (TokenService) and provides OAuth2 token refresh infrastructure.
 // All public functions must be called on UI thread.
 class AuthService : public AuthServiceInterface,
-                    public content::NotificationObserver {
+                    public OAuth2TokenService::Observer {
  public:
   // |url_request_context_getter| is used to perform authentication with
   // URLFetcher.
@@ -52,10 +50,11 @@
   virtual void ClearAccessToken() OVERRIDE;
   virtual void ClearRefreshToken() OVERRIDE;
 
-  // Overridden from content::NotificationObserver:
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
+  // Overridden from OAuth2TokenService::Observer:
+  virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE;
+  virtual void OnRefreshTokenRevoked(
+      const std::string& account_id,
+      const GoogleServiceAuthError& error) OVERRIDE;
 
   // Sets the access_token as specified.  This should be used only for testing.
   void set_access_token_for_testing(const std::string& token) {
@@ -68,6 +67,9 @@
   static bool CanAuthenticate(Profile* profile);
 
  private:
+  // Called when the state of the refresh token changes.
+  void OnHandleRefreshToken(bool has_refresh_token);
+
   // Called when authentication request from StartAuthentication() is
   // completed.
   void OnAuthCompleted(const AuthStatusCallback& callback,
@@ -76,14 +78,12 @@
 
   Profile* profile_;
   net::URLRequestContextGetter* url_request_context_getter_;  // Not owned.
-  std::string refresh_token_;
+  bool has_refresh_token_;
   std::string access_token_;
   std::vector<std::string> scopes_;
   ObserverList<AuthServiceObserver> observers_;
   base::ThreadChecker thread_checker_;
 
-  content::NotificationRegistrar registrar_;
-
   // 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<AuthService> weak_ptr_factory_;
diff --git a/chrome/browser/guestview/webview/webview_constants.cc b/chrome/browser/guestview/webview/webview_constants.cc
index b80b635..2611a7d 100644
--- a/chrome/browser/guestview/webview/webview_constants.cc
+++ b/chrome/browser/guestview/webview/webview_constants.cc
@@ -16,6 +16,8 @@
 const char kEventLoadRedirect[] = "webview.onLoadRedirect";
 const char kEventLoadStart[] = "webview.onLoadStart";
 const char kEventLoadStop[] = "webview.onLoadStop";
+const char kEventResponsive[] = "webview.onResponsive";
+const char kEventUnresponsive[] = "webview.onUnresponsive";
 
 // Parameters/properties on events.
 const char kLevel[] = "level";
diff --git a/chrome/browser/guestview/webview/webview_constants.h b/chrome/browser/guestview/webview/webview_constants.h
index e8ce5a4..59532f2 100644
--- a/chrome/browser/guestview/webview/webview_constants.h
+++ b/chrome/browser/guestview/webview/webview_constants.h
@@ -19,11 +19,13 @@
 extern const char kEventLoadRedirect[];
 extern const char kEventLoadStart[];
 extern const char kEventLoadStop[];
+extern const char kEventResponsive[];
+extern const char kEventUnresponsive[];
 
 // Parameters/properties on events.
-extern const char kMessage[];
 extern const char kLevel[];
 extern const char kLine[];
+extern const char kMessage[];
 extern const char kNewURL[];
 extern const char kOldURL[];
 extern const char kProcessId[];
@@ -35,8 +37,6 @@
 extern const char kInternalEntryCount[];
 extern const char kInternalProcessId[];
 
-// Parameters/properties on events.
-
 }  // namespace webview
 
 #endif  // CHROME_BROWSER_GUESTVIEW_WEBVIEW_WEBVIEW_CONSTANTS_H_
diff --git a/chrome/browser/guestview/webview/webview_guest.cc b/chrome/browser/guestview/webview/webview_guest.cc
index 71a4e6c..9bd9389 100644
--- a/chrome/browser/guestview/webview/webview_guest.cc
+++ b/chrome/browser/guestview/webview/webview_guest.cc
@@ -160,6 +160,22 @@
   return false;
 }
 
+// TODO(fsamuel): Find a reliable way to test the 'responsive' and
+// 'unresponsive' events.
+void WebViewGuest::RendererResponsive() {
+  scoped_ptr<DictionaryValue> args(new DictionaryValue());
+  args->SetInteger(webview::kProcessId,
+      guest_web_contents()->GetRenderProcessHost()->GetID());
+  DispatchEvent(new GuestView::Event(webview::kEventResponsive, args.Pass()));
+}
+
+void WebViewGuest::RendererUnresponsive() {
+  scoped_ptr<DictionaryValue> args(new DictionaryValue());
+  args->SetInteger(webview::kProcessId,
+      guest_web_contents()->GetRenderProcessHost()->GetID());
+  DispatchEvent(new GuestView::Event(webview::kEventUnresponsive, args.Pass()));
+}
+
 void WebViewGuest::Observe(int type,
                            const content::NotificationSource& source,
                            const content::NotificationDetails& details) {
diff --git a/chrome/browser/guestview/webview/webview_guest.h b/chrome/browser/guestview/webview/webview_guest.h
index 5f63ecd..a13e306 100644
--- a/chrome/browser/guestview/webview/webview_guest.h
+++ b/chrome/browser/guestview/webview/webview_guest.h
@@ -48,6 +48,8 @@
   virtual void GuestProcessGone(base::TerminationStatus status) OVERRIDE;
   virtual bool HandleKeyboardEvent(
       const content::NativeWebKeyboardEvent& event) OVERRIDE;
+  virtual void RendererResponsive() OVERRIDE;
+  virtual void RendererUnresponsive() OVERRIDE;
 
   // NotificationObserver implementation.
   virtual void Observe(int type,
diff --git a/chrome/browser/media/webrtc_browsertest_common.cc b/chrome/browser/media/webrtc_browsertest_common.cc
index 83c24fc..cf067b6 100644
--- a/chrome/browser/media/webrtc_browsertest_common.cc
+++ b/chrome/browser/media/webrtc_browsertest_common.cc
@@ -6,7 +6,6 @@
 
 #include "base/file_util.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/test_timeouts.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/memory_details_android.cc b/chrome/browser/memory_details_android.cc
index 9be87ae..fab8422 100644
--- a/chrome/browser/memory_details_android.cc
+++ b/chrome/browser/memory_details_android.cc
@@ -10,6 +10,7 @@
 
 #include "base/bind.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/process/process_iterator.h"
 #include "chrome/common/chrome_constants.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/common/process_type.h"
diff --git a/chrome/browser/metrics/thread_watcher.cc b/chrome/browser/metrics/thread_watcher.cc
index 54e26c7..c8ee4cf 100644
--- a/chrome/browser/metrics/thread_watcher.cc
+++ b/chrome/browser/metrics/thread_watcher.cc
@@ -411,7 +411,7 @@
 // static
 const int ThreadWatcherList::kUnresponsiveSeconds = 2;
 // static
-const int ThreadWatcherList::kUnresponsiveCount = 7;
+const int ThreadWatcherList::kUnresponsiveCount = 9;
 // static
 const int ThreadWatcherList::kLiveThreadsThreshold = 2;
 
diff --git a/chrome/browser/net/net_error_tab_helper.cc b/chrome/browser/net/net_error_tab_helper.cc
index 6f20a8a..c441c2c 100644
--- a/chrome/browser/net/net_error_tab_helper.cc
+++ b/chrome/browser/net/net_error_tab_helper.cc
@@ -143,7 +143,7 @@
       dns_error_active_(false),
       dns_error_page_committed_(false),
       dns_probe_status_(chrome_common_net::DNS_PROBE_POSSIBLE),
-      enabled_by_trial_(chrome_common_net::DnsProbesEnabledByFieldTrial()) {
+      probes_enabled_(chrome_common_net::DnsProbesEnabled()) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
   // If this helper is under test, it won't have a WebContents.
@@ -208,7 +208,7 @@
     return testing_state_ == TESTING_FORCE_ENABLED;
 
   // TODO(ttuttle): Disable on mobile?
-  return enabled_by_trial_ && *resolve_errors_with_web_service_;
+  return probes_enabled_ && *resolve_errors_with_web_service_;
 }
 
 void NetErrorTabHelper::SendInfo() {
diff --git a/chrome/browser/net/net_error_tab_helper.h b/chrome/browser/net/net_error_tab_helper.h
index fd0553e..2a38e0c 100644
--- a/chrome/browser/net/net_error_tab_helper.h
+++ b/chrome/browser/net/net_error_tab_helper.h
@@ -108,8 +108,8 @@
   // navigations), it re-sends the status whenever an error page commits.
   chrome_common_net::DnsProbeStatus dns_probe_status_;
 
-  // Whether we are enabled to run by the DnsProbe-Enable field trial.
-  const bool enabled_by_trial_;
+  // Whether probes are enabled (by the command-line option or the field trial).
+  const bool probes_enabled_;
 
   // Optional callback for browser test to snoop on outgoing NetErrorInfo IPCs.
   DnsProbeStatusSnoopCallback dns_probe_status_snoop_callback_;
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service.cc b/chrome/browser/policy/cloud/user_policy_signin_service.cc
index 4091e32..2baff3d 100644
--- a/chrome/browser/policy/cloud/user_policy_signin_service.cc
+++ b/chrome/browser/policy/cloud/user_policy_signin_service.cc
@@ -20,6 +20,7 @@
 #include "chrome/browser/signin/token_service_factory.h"
 #include "chrome/common/pref_names.h"
 #include "content/public/browser/notification_details.h"
+#include "content/public/browser/notification_source.h"
 #include "google_apis/gaia/gaia_constants.h"
 
 #if defined(ENABLE_MANAGED_USERS)
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_base.cc b/chrome/browser/policy/cloud/user_policy_signin_service_base.cc
index d530557..2b78d89 100644
--- a/chrome/browser/policy/cloud/user_policy_signin_service_base.cc
+++ b/chrome/browser/policy/cloud/user_policy_signin_service_base.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
+#include "content/public/browser/notification_source.h"
 
 namespace policy {
 
diff --git a/chrome/browser/prerender/prerender_local_predictor.cc b/chrome/browser/prerender/prerender_local_predictor.cc
index 93525f6..520dc22 100644
--- a/chrome/browser/prerender/prerender_local_predictor.cc
+++ b/chrome/browser/prerender/prerender_local_predictor.cc
@@ -198,6 +198,10 @@
   return (transition & content::PAGE_TRANSITION_CHAIN_END) == 0;
 }
 
+bool IsFormSubmit(PageTransition transition) {
+  return (transition & content::PAGE_TRANSITION_FORM_SUBMIT) != 0;
+}
+
 bool ShouldExcludeTransitionForPrediction(PageTransition transition) {
   return IsBackForward(transition) || IsHomePage(transition) ||
       IsIntermediateRedirect(transition);
@@ -441,7 +445,8 @@
       if (!last_visited.is_null() &&
           last_visited > visits[i].time - max_age &&
           last_visited < visits[i].time - min_age) {
-        next_urls_currently_found.insert(visits[i].url_id);
+        if (!IsFormSubmit(visits[i].transition))
+          next_urls_currently_found.insert(visits[i].url_id);
       }
     }
     if (i == static_cast<int>(visits.size()) - 1 ||
@@ -715,6 +720,7 @@
   PrerenderProperties* prerender_properties = NULL;
 
   for (int i = 0; i < static_cast<int>(info->candidate_urls_.size()); i++) {
+    RecordEvent(EVENT_CONTINUE_PRERENDER_CHECK_EXAMINE_NEXT_URL);
     url_info.reset(new LocalPredictorURLInfo(info->candidate_urls_[i]));
 
     // We need to check whether we can issue a prerender for this URL.
@@ -813,11 +819,13 @@
             p->prerender_handle.get())) {
       new_prerender_handle->OnCancel();
       new_prerender_handle.reset(NULL);
+      RecordEvent(EVENT_ISSUE_PRERENDER_ALREADY_PRERENDERING);
       break;
     }
   }
 
   if (new_prerender_handle.get()) {
+    RecordEvent(EVENT_ISSUE_PRERENDER_NEW_PRERENDER);
     // The new prerender does not match any existing prerenders. Update
     // prerender_properties so that it reflects the new entry.
     prerender_properties->url_id = url_id;
@@ -829,8 +837,10 @@
     prerender_properties->prerender_handle.swap(new_prerender_handle);
     // new_prerender_handle now represents the old previou prerender that we
     // are replacing. So we need to cancel it.
-    if (new_prerender_handle)
+    if (new_prerender_handle) {
       new_prerender_handle->OnCancel();
+      RecordEvent(EVENT_ISSUE_PRERENDER_CANCELLED_OLD_PRERENDER);
+    }
   }
 
   RecordEvent(EVENT_ADD_VISIT_PRERENDERING);
diff --git a/chrome/browser/prerender/prerender_local_predictor.h b/chrome/browser/prerender/prerender_local_predictor.h
index ebd8e03..67cea7f 100644
--- a/chrome/browser/prerender/prerender_local_predictor.h
+++ b/chrome/browser/prerender/prerender_local_predictor.h
@@ -91,6 +91,10 @@
     EVENT_TAB_HELPER_URL_SEEN_NAMESPACE_MATCH = 48,
     EVENT_PRERENDER_URL_LOOKUP_MULTIPLE_SOURCE_WEBCONTENTS_FOUND = 49,
     EVENT_CONTINUE_PRERENDER_CHECK_ON_SIDE_EFFECT_FREE_WHITELIST = 50,
+    EVENT_CONTINUE_PRERENDER_CHECK_EXAMINE_NEXT_URL = 51,
+    EVENT_ISSUE_PRERENDER_ALREADY_PRERENDERING = 52,
+    EVENT_ISSUE_PRERENDER_NEW_PRERENDER = 53,
+    EVENT_ISSUE_PRERENDER_CANCELLED_OLD_PRERENDER = 54,
     EVENT_MAX_VALUE
   };
 
diff --git a/chrome/browser/printing/printing_layout_browsertest.cc b/chrome/browser/printing/printing_layout_browsertest.cc
index 1d80518..cc0c449 100644
--- a/chrome/browser/printing/printing_layout_browsertest.cc
+++ b/chrome/browser/printing/printing_layout_browsertest.cc
@@ -8,6 +8,7 @@
 #include "base/files/file_path.h"
 #include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
+#include "base/process/process.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_file_util.h"
diff --git a/chrome/browser/profile_resetter/brandcode_config_fetcher.cc b/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
index b3fb98b..f9c6c83 100644
--- a/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
+++ b/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
@@ -27,12 +27,20 @@
 "      >\n"
 "    <updatecheck />\n"
 "    <data name=\"install\" "
-    "index=\"skipfirstrunui-importsearch-defaultbrowser\" />\n"
+    "index=\"__BRANDCODE_PLACEHOLDER__\" />\n"
 "  </app>\n"
 "</request>";
 
-std::string GetUploadData() {
-  return kPostXml;
+// Returns the query to the server which can be used to retrieve the config.
+// |brand| is a brand code, it mustn't be empty.
+std::string GetUploadData(const std::string& brand) {
+  DCHECK(!brand.empty());
+  std::string data(kPostXml);
+  const std::string placeholder("__BRANDCODE_PLACEHOLDER__");
+  size_t placeholder_pos = data.find(placeholder);
+  DCHECK(placeholder_pos != std::string::npos);
+  data.replace(placeholder_pos, placeholder.size(), brand);
+  return data;
 }
 
 // Extracts json master prefs from xml.
@@ -130,15 +138,17 @@
 } // namespace
 
 BrandcodeConfigFetcher::BrandcodeConfigFetcher(const FetchCallback& callback,
-                                               const GURL& url)
+                                               const GURL& url,
+                                               const std::string& brandcode)
     : fetch_callback_(callback) {
+  DCHECK(!brandcode.empty());
   config_fetcher_.reset(net::URLFetcher::Create(0 /* ID used for testing */,
                                                 url,
                                                 net::URLFetcher::POST,
                                                 this));
   config_fetcher_->SetRequestContext(
       g_browser_process->system_request_context());
-  config_fetcher_->SetUploadData("text/xml", GetUploadData());
+  config_fetcher_->SetUploadData("text/xml", GetUploadData(brandcode));
   config_fetcher_->AddExtraRequestHeader("Accept: text/xml");
   config_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                                 net::LOAD_DO_NOT_SAVE_COOKIES |
diff --git a/chrome/browser/profile_resetter/brandcode_config_fetcher.h b/chrome/browser/profile_resetter/brandcode_config_fetcher.h
index cacee4d..bbb5631 100644
--- a/chrome/browser/profile_resetter/brandcode_config_fetcher.h
+++ b/chrome/browser/profile_resetter/brandcode_config_fetcher.h
@@ -20,7 +20,8 @@
   typedef base::Callback<void ()> FetchCallback;
 
   BrandcodeConfigFetcher(const FetchCallback& callback,
-                         const GURL& url);
+                         const GURL& url,
+                         const std::string& brandcode);
   virtual ~BrandcodeConfigFetcher();
 
   bool IsActive() const { return config_fetcher_; }
diff --git a/chrome/browser/profile_resetter/profile_resetter_unittest.cc b/chrome/browser/profile_resetter/profile_resetter_unittest.cc
index f1caa33..0c3b529 100644
--- a/chrome/browser/profile_resetter/profile_resetter_unittest.cc
+++ b/chrome/browser/profile_resetter/profile_resetter_unittest.cc
@@ -72,6 +72,9 @@
 using extensions::Extension;
 using extensions::Manifest;
 
+
+// ProfileResetterTest --------------------------------------------------------
+
 // ProfileResetterTest sets up the extension, WebData and TemplateURL services.
 class ProfileResetterTest : public ExtensionServiceTestBase,
                             public ProfileResetterTestBase {
@@ -101,6 +104,125 @@
   return new TemplateURLService(static_cast<Profile*>(context));
 }
 
+
+// PinnedTabsResetTest --------------------------------------------------------
+
+class PinnedTabsResetTest : public BrowserWithTestWindowTest,
+                            public ProfileResetterTestBase {
+ protected:
+  virtual void SetUp() OVERRIDE;
+
+  content::WebContents* CreateWebContents();
+};
+
+void PinnedTabsResetTest::SetUp() {
+  BrowserWithTestWindowTest::SetUp();
+  resetter_.reset(new ProfileResetter(profile()));
+}
+
+content::WebContents* PinnedTabsResetTest::CreateWebContents() {
+  return content::WebContents::Create(
+      content::WebContents::CreateParams(profile()));
+}
+
+
+// ConfigParserTest -----------------------------------------------------------
+
+// URLFetcher delegate that simply records the upload data.
+struct URLFetcherRequestListener : net::URLFetcherDelegate {
+  URLFetcherRequestListener();
+  virtual ~URLFetcherRequestListener();
+
+  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
+
+  std::string upload_data;
+  net::URLFetcherDelegate* real_delegate;
+};
+
+URLFetcherRequestListener::URLFetcherRequestListener()
+    : real_delegate(NULL) {
+}
+
+URLFetcherRequestListener::~URLFetcherRequestListener() {
+}
+
+void URLFetcherRequestListener::OnURLFetchComplete(
+    const net::URLFetcher* source) {
+  const net::TestURLFetcher* test_fetcher =
+      static_cast<const net::TestURLFetcher*>(source);
+  upload_data = test_fetcher->upload_data();
+  DCHECK(real_delegate);
+  real_delegate->OnURLFetchComplete(source);
+}
+
+class ConfigParserTest : public testing::Test {
+ protected:
+  ConfigParserTest();
+  virtual ~ConfigParserTest();
+
+  scoped_ptr<BrandcodeConfigFetcher> WaitForRequest(const GURL& url);
+
+  net::FakeURLFetcherFactory& factory() { return factory_; }
+
+ private:
+  scoped_ptr<net::FakeURLFetcher> CreateFakeURLFetcher(
+      const GURL& url,
+      net::URLFetcherDelegate* fetcher_delegate,
+      const std::string& response_data,
+      bool success);
+
+  MOCK_METHOD0(Callback, void(void));
+
+  base::MessageLoop loop_;
+  content::TestBrowserThread ui_thread_;
+  content::TestBrowserThread io_thread_;
+  URLFetcherRequestListener request_listener_;
+  net::FakeURLFetcherFactory factory_;
+};
+
+ConfigParserTest::ConfigParserTest()
+    : loop_(base::MessageLoop::TYPE_IO),
+      ui_thread_(content::BrowserThread::UI, &loop_),
+      io_thread_(content::BrowserThread::IO, &loop_),
+      factory_(NULL, base::Bind(&ConfigParserTest::CreateFakeURLFetcher,
+                                base::Unretained(this))) {
+}
+
+ConfigParserTest::~ConfigParserTest() {}
+
+scoped_ptr<BrandcodeConfigFetcher> ConfigParserTest::WaitForRequest(
+    const GURL& url) {
+  EXPECT_CALL(*this, Callback());
+  scoped_ptr<BrandcodeConfigFetcher> fetcher(
+      new BrandcodeConfigFetcher(base::Bind(&ConfigParserTest::Callback,
+                                            base::Unretained(this)),
+                                 url,
+                                 "ABCD"));
+  base::MessageLoop::current()->RunUntilIdle();
+  EXPECT_FALSE(fetcher->IsActive());
+  // Look for the brand code in the request.
+  EXPECT_NE(std::string::npos, request_listener_.upload_data.find("ABCD"));
+  return fetcher.Pass();
+}
+
+scoped_ptr<net::FakeURLFetcher> ConfigParserTest::CreateFakeURLFetcher(
+    const GURL& url,
+    net::URLFetcherDelegate* fetcher_delegate,
+    const std::string& response_data,
+    bool success) {
+  request_listener_.real_delegate = fetcher_delegate;
+  scoped_ptr<net::FakeURLFetcher> fetcher(
+      new net::FakeURLFetcher(url, &request_listener_, response_data, success));
+  scoped_refptr<net::HttpResponseHeaders> download_headers =
+      new net::HttpResponseHeaders("");
+  download_headers->AddHeader("Content-Type: text/xml");
+  fetcher->set_response_headers(download_headers);
+  return fetcher.Pass();
+}
+
+
+// helper functions -----------------------------------------------------------
+
 scoped_refptr<Extension> CreateExtension(const std::string& name,
                                          const base::FilePath& path,
                                          Manifest::Location location,
@@ -123,78 +245,6 @@
   return extension;
 }
 
-class PinnedTabsResetTest : public BrowserWithTestWindowTest,
-                            public ProfileResetterTestBase {
- protected:
-  virtual void SetUp() OVERRIDE;
-
-  content::WebContents* CreateWebContents();
-};
-
-void PinnedTabsResetTest::SetUp() {
-  BrowserWithTestWindowTest::SetUp();
-  resetter_.reset(new ProfileResetter(profile()));
-}
-
-content::WebContents* PinnedTabsResetTest::CreateWebContents() {
-  return content::WebContents::Create(
-      content::WebContents::CreateParams(profile()));
-}
-
-class ConfigParserTest : public testing::Test {
- protected:
-  ConfigParserTest();
-  virtual ~ConfigParserTest();
-
-  MOCK_METHOD0(Callback, void(void));
-
-  scoped_ptr<BrandcodeConfigFetcher> WaitForRequest(const GURL& url);
-
-  static scoped_ptr<net::FakeURLFetcher> CreateFakeURLFetcher(
-      const GURL& url,
-      net::URLFetcherDelegate* d,
-      const std::string& response_data,
-      bool success);
-
-  base::MessageLoop loop_;
-  content::TestBrowserThread ui_thread_;
-  content::TestBrowserThread io_thread_;
-};
-
-ConfigParserTest::ConfigParserTest()
-    : loop_(base::MessageLoop::TYPE_IO),
-      ui_thread_(content::BrowserThread::UI, &loop_),
-      io_thread_(content::BrowserThread::IO, &loop_) {
-}
-
-ConfigParserTest::~ConfigParserTest() {}
-
-scoped_ptr<BrandcodeConfigFetcher> ConfigParserTest::WaitForRequest(
-    const GURL& url) {
-  EXPECT_CALL(*this, Callback());
-  scoped_ptr<BrandcodeConfigFetcher> fetcher(
-      new BrandcodeConfigFetcher(base::Bind(&ConfigParserTest::Callback,
-                                            base::Unretained(this)),
-                                 url));
-  base::MessageLoop::current()->RunUntilIdle();
-  EXPECT_FALSE(fetcher->IsActive());
-  return fetcher.Pass();
-}
-
-scoped_ptr<net::FakeURLFetcher> ConfigParserTest::CreateFakeURLFetcher(
-    const GURL& url,
-    net::URLFetcherDelegate* d,
-    const std::string& response_data,
-    bool success) {
-  scoped_ptr<net::FakeURLFetcher> fetcher(
-      new net::FakeURLFetcher(url, d, response_data, success));
-  scoped_refptr<net::HttpResponseHeaders> download_headers =
-      new net::HttpResponseHeaders("");
-  download_headers->AddHeader("Content-Type: text/xml");
-  fetcher->set_response_headers(download_headers);
-  return fetcher.Pass();
-}
-
 void ReplaceString(std::string* str,
                    const std::string& placeholder,
                    const std::string& substitution) {
@@ -523,9 +573,8 @@
 
 // Tries to load unavailable config file.
 TEST_F(ConfigParserTest, NoConnectivity) {
-  net::FakeURLFetcherFactory factory(NULL);
   const std::string url("http://test");
-  factory.SetFakeResponse(url, "", false);
+  factory().SetFakeResponse(url, "", false);
 
   scoped_ptr<BrandcodeConfigFetcher> fetcher = WaitForRequest(GURL(url));
   EXPECT_FALSE(fetcher->GetSettings());
@@ -533,16 +582,13 @@
 
 // Tries to load available config file.
 TEST_F(ConfigParserTest, ParseConfig) {
-  net::FakeURLFetcherFactory factory(
-      NULL,
-      base::Bind(&ConfigParserTest::CreateFakeURLFetcher));
   const std::string url("http://test");
   std::string xml_config(kXmlConfig);
   ReplaceString(&xml_config, "placeholder_for_data", kDistributionConfig);
   ReplaceString(&xml_config,
                 "placeholder_for_id",
                 "abbaabbaabbaabbaabbaabbaabbaabba");
-  factory.SetFakeResponse(url, xml_config, true);
+  factory().SetFakeResponse(url, xml_config, true);
 
   scoped_ptr<BrandcodeConfigFetcher> fetcher = WaitForRequest(GURL(url));
   scoped_ptr<BrandcodedDefaultSettings> settings = fetcher->GetSettings();
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
index 38b80e9..35cae78 100644
--- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -118,8 +118,8 @@
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/extensions/input_method_api.h"
 #include "chrome/browser/chromeos/extensions/media_player_api.h"
-#include "chrome/browser/chromeos/extensions/networking_private_event_router_factory.h"
 #include "chrome/browser/extensions/api/input_ime/input_ime_api.h"
+#include "chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.h"
 #if defined(FILE_MANAGER_EXTENSION)
 #include "chrome/browser/chromeos/extensions/file_manager/file_browser_private_api_factory.h"
 #endif
diff --git a/chrome/browser/resources/chromeos/login/screen_error_message.html b/chrome/browser/resources/chromeos/login/screen_error_message.html
index 0365067..82db057 100644
--- a/chrome/browser/resources/chromeos/login/screen_error_message.html
+++ b/chrome/browser/resources/chromeos/login/screen_error_message.html
@@ -1,7 +1,7 @@
 <div id="error-message" class="step hidden show-offline-error">
   <div class="step-contents">
     <div class="error-header">
-      <img alt class="error-icon" src="chrome://theme/IDR_NETWORK_ERROR">
+      <img alt class="error-icon" src="chrome://theme/IDR_ERROR_NETWORK_OFFLINE">
       <div id="captive-portal-title" i18n-content="captivePortalTitle"
           class="error-title
                  show-with-error-state-portal
diff --git a/chrome/browser/resources/file_manager/js/file_copy_manager.js b/chrome/browser/resources/file_manager/js/file_copy_manager.js
index 9fe76ce..766c251 100644
--- a/chrome/browser/resources/file_manager/js/file_copy_manager.js
+++ b/chrome/browser/resources/file_manager/js/file_copy_manager.js
@@ -693,6 +693,8 @@
     task, successCallback, errorCallback) {
   if (task.zip)
     this.serviceZipTask_(task, successCallback, errorCallback);
+  else if (task.move)
+    this.serviceMoveTask_(task, successCallback, errorCallback);
   else
     this.serviceCopyTask_(task, successCallback, errorCallback);
 };
@@ -701,7 +703,6 @@
  * Service all entries in the copy (and move) task.
  * Note: this method contains also the operation of "Move" due to historical
  * reason.
- * TODO(hidehiko): extract "move" related code into another method.
  *
  * @param {FileCopyManager.Task} task A copy task to be run.
  * @param {function()} successCallback On success.
@@ -753,7 +754,7 @@
 };
 
 /**
- * Service the next entry in a given task.
+ * Copies the next entry in a given task.
  * TODO(olege): Refactor this method into a separate class.
  *
  * @param {FileManager.Task} task A task.
@@ -817,28 +818,11 @@
     onCopyCompleteBase(targetEntry, 0);
   };
 
-  var onFilesystemMoveComplete = function(sourceEntry, targetEntry) {
-    self.sendOperationEvent_('moved', [sourceEntry, targetEntry]);
-    onCopyCompleteBase(targetEntry, 0);
-  };
-
   var onFilesystemError = function(err) {
     onError('FILESYSTEM_ERROR', err);
   };
 
   var onDeduplicated = function(targetRelativePath) {
-    if (task.move) {
-      targetDirEntry.getDirectory(
-          PathUtil.dirname(targetRelativePath), {create: false},
-          function(dirEntry) {
-            sourceEntry.moveTo(dirEntry, PathUtil.basename(targetRelativePath),
-                               onFilesystemMoveComplete.bind(self, sourceEntry),
-                               onFilesystemError);
-          },
-          onFilesystemError);
-      return;
-    }
-
     // TODO(benchan): drive::FileSystem has not implemented directory copy,
     // and thus we only call FileEntry.copyTo() for files. Revisit this
     // code when drive::FileSystem supports directory copy.
@@ -986,6 +970,106 @@
 };
 
 /**
+ * Moves all entries in the task.
+ *
+ * @param {FileCopyManager.Task} task A move task to be run.
+ * @param {function()} successCallback On success.
+ * @param {function(FileCopyManager.Error)} errorCallback On error.
+ * @private
+ */
+FileCopyManager.prototype.serviceMoveTask_ = function(
+    task, successCallback, errorCallback) {
+  this.serviceNextMoveTaskEntry_(
+      task,
+      (function onCompleted() {
+        // We should not dispatch a PROGRESS event when there is no pending
+        // items in the task.
+        if (task.pendingDirectories.length + task.pendingFiles.length == 0) {
+          successCallback();
+          return;
+        }
+
+        // Move the next entry.
+        this.sendProgressEvent_('PROGRESS');
+        this.serviceNextMoveTaskEntry_(
+            task, onCompleted.bind(this), errorCallback);
+      }).bind(this),
+      errorCallback);
+};
+
+/**
+ * Moves the next entry in a given task.
+ *
+ * Implementation note: This method can be simplified more. For example, in
+ * Task.setEntries(), the flag to recurse is set to false for move task,
+ * so that all the entries' originalSourcePath should be
+ * dirname(sourceEntry.fullPath).
+ * Thus, targetRelativePath should contain exact one component. Also we can
+ * skip applyRenames, because the destination directory always should be
+ * task.targetDirEntry.
+ * The unnecessary complexity is due to historical reason.
+ * TODO(hidehiko): Refactor this method.
+ *
+ * @param {FileManager.Task} task A move task.
+ * @param {function()} successCallback On success.
+ * @param {function(FileCopyManager.Error)} errorCallback On error.
+ * @private
+ */
+FileCopyManager.prototype.serviceNextMoveTaskEntry_ = function(
+    task, successCallback, errorCallback) {
+  if (this.maybeCancel_())
+    return;
+
+  var self = this;
+  var sourceEntry = task.getNextEntry();
+
+  if (!sourceEntry) {
+    // All entries in this task have been copied.
+    successCallback();
+    return;
+  }
+
+  var onError = function(reason, data) {
+    self.log_('serviceNextMoveTaskEntry error: ' + reason + ':', data);
+    errorCallback(new FileCopyManager.Error(reason, data));
+  };
+
+  // |sourceEntry.originalSourcePath| is set in util.recurseAndResolveEntries.
+  var sourcePath = sourceEntry.originalSourcePath;
+  if (sourceEntry.fullPath.substr(0, sourcePath.length) != sourcePath) {
+    // We found an entry in the list that is not relative to the base source
+    // path, something is wrong.
+    onError('UNEXPECTED_SOURCE_FILE', sourceEntry.fullPath);
+    return;
+  }
+
+  util.deduplicatePath(
+      task.targetDirEntry,
+      task.applyRenames(sourceEntry.fullPath.substr(sourcePath.length + 1)),
+      function(targetRelativePath) {
+        var onFilesystemError = function(err) {
+          onError('FILESYSTEM_ERROR', err);
+        };
+
+        task.targetDirEntry.getDirectory(
+            PathUtil.dirname(targetRelativePath), {create: false},
+            function(dirEntry) {
+              sourceEntry.moveTo(
+                  dirEntry, PathUtil.basename(targetRelativePath),
+                  function(targetEntry) {
+                    self.sendOperationEvent_(
+                        'moved', [sourceEntry, targetEntry]);
+                    task.markEntryComplete(targetEntry, 0);
+                    successCallback();
+                  },
+                  onFilesystemError);
+            },
+            onFilesystemError);
+      },
+      onError);
+};
+
+/**
  * Service a zip file creation task.
  *
  * @param {FileCopyManager.Task} task A zip task to be run.
@@ -1083,7 +1167,7 @@
         reportedProgress = progress.loaded;
       };
 
-      writer.onwriteend = function() {
+      writer.onwrite = function() {
         sourceEntry.getMetadata(function(metadata) {
           chrome.fileBrowserPrivate.setLastModified(targetEntry.toURL(),
               '' + Math.round(metadata.modificationTime.getTime() / 1000));
diff --git a/chrome/browser/resources/file_manager/js/file_manager.js b/chrome/browser/resources/file_manager/js/file_manager.js
index 66cb272..fc02338 100644
--- a/chrome/browser/resources/file_manager/js/file_manager.js
+++ b/chrome/browser/resources/file_manager/js/file_manager.js
@@ -637,13 +637,13 @@
 
     var doc = this.document_;
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'newfolder',
+    CommandUtil.registerCommand(doc, 'newfolder',
         Commands.newFolderCommand, this, this.directoryModel_);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'newwindow',
+    CommandUtil.registerCommand(doc, 'newwindow',
         Commands.newWindowCommand, this, this.directoryModel_);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'change-default-app',
+    CommandUtil.registerCommand(doc, 'change-default-app',
         Commands.changeDefaultAppCommand, this);
 
     CommandUtil.registerCommand(this.volumeList_, 'unmount',
@@ -652,58 +652,53 @@
     CommandUtil.registerCommand(this.volumeList_, 'import-photos',
         Commands.importCommand, this.volumeList_);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'format',
+    CommandUtil.registerCommand(doc, 'format',
         Commands.formatCommand, this.volumeList_, this,
         this.directoryModel_);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'delete',
+    CommandUtil.registerCommand(doc, 'delete',
         Commands.deleteFileCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'rename',
+    CommandUtil.registerCommand(doc, 'rename',
         Commands.renameFileCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'volume-help',
+    CommandUtil.registerCommand(doc, 'volume-help',
         Commands.volumeHelpCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'drive-buy-more-space',
+    CommandUtil.registerCommand(doc, 'drive-buy-more-space',
         Commands.driveBuySpaceCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_,
-        'drive-clear-local-cache', Commands.driveClearCacheCommand, this);
+    CommandUtil.registerCommand(doc, 'drive-clear-local-cache',
+        Commands.driveClearCacheCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'drive-go-to-drive',
+    CommandUtil.registerCommand(doc, 'drive-go-to-drive',
         Commands.driveGoToDriveCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'paste',
+    CommandUtil.registerCommand(doc, 'paste',
         Commands.pasteFileCommand, doc, this.fileTransferController_);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'open-with',
+    CommandUtil.registerCommand(doc, 'open-with',
         Commands.openWithCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'toggle-pinned',
+    CommandUtil.registerCommand(doc, 'toggle-pinned',
         Commands.togglePinnedCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'zip-selection',
+    CommandUtil.registerCommand(doc, 'zip-selection',
         Commands.zipSelectionCommand, this, this.directoryModel_);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'share',
-        Commands.shareCommand, this);
+    CommandUtil.registerCommand(doc, 'share', Commands.shareCommand, this);
+    CommandUtil.registerCommand(doc, 'create-folder-shortcut',
+        Commands.createFolderShortcutCommand, this);
+    CommandUtil.registerCommand(doc, 'remove-folder-shortcut',
+        Commands.removeFolderShortcutCommand, this, this.volumeList_);
 
-    CommandUtil.registerCommand(this.dialogContainer_,
-        'create-folder-shortcut', Commands.createFolderShortcutCommand, this);
-
-    CommandUtil.registerCommand(this.dialogContainer_,
-        'remove-folder-shortcut', Commands.removeFolderShortcutCommand, this,
-        this.volumeList_);
-
-    CommandUtil.registerCommand(this.dialogContainer_, 'search',
-        Commands.searchCommand, this,
+    CommandUtil.registerCommand(doc, 'search', Commands.searchCommand, this,
         this.dialogDom_.querySelector('#search-box'));
 
     // Register commands with CTRL-1..9 shortcuts for switching between
     // volumes.
     for (var i = 1; i <= 9; i++) {
-      CommandUtil.registerCommand(this.dialogContainer_,
+      CommandUtil.registerCommand(doc,
                                   'volume-switch-' + i,
                                   Commands.volumeSwitchCommand,
                                   this.volumeList_,
diff --git a/chrome/browser/resources/gesture_config.js b/chrome/browser/resources/gesture_config.js
index e38baa9..1e201b2 100644
--- a/chrome/browser/resources/gesture_config.js
+++ b/chrome/browser/resources/gesture_config.js
@@ -331,7 +331,12 @@
     },
     {
       key: 'minimum_threshold_start',
-      label: 'Start overscroll gesture after scrolling',
+      label: 'Start overscroll gesture (horizontal)',
+      units: 'pixels'
+    },
+    {
+      key: 'vertical_threshold_start',
+      label: 'Start overscroll gesture (vertical)',
       units: 'pixels'
     },
     {
diff --git a/chrome/browser/resources/local_ntp/local_ntp.js b/chrome/browser/resources/local_ntp/local_ntp.js
index e63fbaa..23272e0 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.js
+++ b/chrome/browser/resources/local_ntp/local_ntp.js
@@ -391,8 +391,7 @@
 
 
 /**
- * Renders the attribution if the image is present and loadable.  Otherwise
- * hides it.
+ * Renders the attribution if the URL is present, otherwise hides it.
  * @param {string} url The URL of the attribution image, if any.
  * @private
  */
@@ -401,18 +400,14 @@
     setAttributionVisibility_(false);
     return;
   }
-  var attributionImage = new Image();
-  attributionImage.onload = function() {
-    var oldAttributionImage = attribution.querySelector('img');
-    if (oldAttributionImage)
-      removeNode(oldAttributionImage);
+
+  var attributionImage = attribution.querySelector('img');
+  if (!attributionImage) {
+    attributionImage = new Image();
     attribution.appendChild(attributionImage);
-    setAttributionVisibility_(true);
-  };
-  attributionImage.onerror = function() {
-    setAttributionVisibility_(false);
-  };
-  attributionImage.src = url;
+  }
+  attributionImage.style.content = url;
+  setAttributionVisibility_(true);
 }
 
 
diff --git a/chrome/browser/resources/net_internals/waterfall_row.js b/chrome/browser/resources/net_internals/waterfall_row.js
index d24595a..d17ebc3 100644
--- a/chrome/browser/resources/net_internals/waterfall_row.js
+++ b/chrome/browser/resources/net_internals/waterfall_row.js
@@ -41,15 +41,23 @@
         addTextNode(this.urlCell_, this.description_);
       }
 
-      this.barCell_.innerHTML = '';
+      this.rowCell_.innerHTML = '';
+
       var matchingEventPairs = this.findLogEntryPairs_(this.eventTypes_);
 
       // Creates the spacing in the beginning to show start time.
       var startTime = this.parentView_.getStartTime();
       var sourceEntryStartTime = this.sourceEntry_.getStartTime();
       var delay = sourceEntryStartTime - startTime;
-      var scaledMinTime = delay * scale;
-      this.createNode_(this.barCell_, scaledMinTime, 'padding');
+      var frontNode = addNode(this.rowCell_, 'div');
+      setNodeWidth(frontNode, delay * scale);
+
+      var barCell = addNode(this.rowCell_, 'div');
+      barCell.classList.add('waterfall-view-bar');
+
+      if (this.sourceEntry_.isError()) {
+        barCell.classList.add('error');
+      }
 
       var currentEnd = sourceEntryStartTime;
       for (var i = 0; i < matchingEventPairs.length; ++i) {
@@ -64,20 +72,22 @@
         // Handles the spaces between events.
         if (currentEnd < event.startTime) {
           var eventDuration = event.startTime - currentEnd;
-          var eventWidth = eventDuration * scale;
-          this.createNode_(this.barCell_, eventWidth, this.type_);
+          var padNode = this.createNode_(
+              barCell, eventDuration, this.type_, 'source');
         }
 
         // Creates event bars.
         var eventType = eventTypeToCssClass_(EventTypeNames[event.eventType]);
-        var eventWidth = event.eventDuration * scale;
-        this.createNode_(this.barCell_, eventWidth, eventType);
+        var eventNode = this.createNode_(
+            barCell, event.eventDuration, eventType, event);
         currentEnd = event.startTime + event.eventDuration;
       }
+
       // Creates a bar for the part after the last event.
       if (this.getEndTime() > currentEnd) {
-        var endWidth = (this.getEndTime() - currentEnd) * scale;
-        this.createNode_(this.barCell_, endWidth, this.type_);
+        var endDuration = (this.getEndTime() - currentEnd);
+        var endNode = this.createNode_(
+            barCell, endDuration, this.type_, 'source');
       }
     },
 
@@ -89,11 +99,84 @@
       return this.sourceEntry_.getEndTime();
     },
 
+    clearPopup_: function(parentNode) {
+      parentNode.innerHTML = '';
+    },
+
+    // TODO(viona): Create popup at mouse location.
+    createPopup_: function(parentNode, event, eventType, duration, mouse) {
+      var tableStart = this.parentView_.getStartTime();
+
+      var newPopup = addNode(parentNode, 'div');
+      newPopup.classList.add('waterfall-view-popup');
+
+      var popupList = addNode(newPopup, 'ul');
+      popupList.classList.add('waterfall-view-popup-list');
+
+      this.createPopupItem_(
+          popupList, 'Event Type', eventType);
+      this.createPopupItem_(
+          popupList, 'Event Duration', duration.toFixed(0) + 'ms');
+
+      if (event != 'source') {
+        this.createPopupItem_(
+            popupList, 'Event Start Time', event.startTime - tableStart + 'ms');
+        this.createPopupItem_(
+            popupList, 'Event End Time', event.endTime - tableStart + 'ms');
+      }
+
+      this.createPopupItem_(
+          popupList, 'Source Start Time',
+          this.getStartTime() - tableStart + 'ms');
+      this.createPopupItem_(
+          popupList, 'Source End Time', this.getEndTime() - tableStart + 'ms');
+      this.createPopupItem_(
+          popupList, 'Source ID', this.sourceEntry_.getSourceId());
+      var urlListItem = this.createPopupItem_(
+          popupList, 'Source Description: ', this.description_);
+
+      var viewWidth = $(WaterfallView.MAIN_BOX_ID).offsetWidth;
+      // Controls the overflow of extremely long URLs by cropping to window.
+      if (urlListItem.offsetWidth > viewWidth) {
+        urlListItem.style.width = viewWidth + 'px';
+      }
+      urlListItem.classList.add('waterfall-view-popup-list-url-item');
+
+      this.createPopupItem_(
+          popupList, 'Has Error', this.sourceEntry_.isError());
+
+      // Fixes cases where the popup appears 'off-screen'.
+      var popupLeft = mouse.pageX + $(WaterfallView.MAIN_BOX_ID).scrollLeft;
+      var popupRight = popupLeft + newPopup.offsetWidth;
+      var viewRight = viewWidth + $(WaterfallView.MAIN_BOX_ID).scrollLeft;
+
+      if (viewRight - popupRight < 0) {
+        popupLeft = viewRight - newPopup.offsetWidth;
+      }
+      newPopup.style.left = popupLeft + 'px';
+
+      var popupTop = mouse.pageY + $(WaterfallView.MAIN_BOX_ID).scrollTop;
+      var popupBottom = popupTop + newPopup.offsetHeight;
+      var viewBottom = $(WaterfallView.MAIN_BOX_ID).offsetHeight +
+          $(WaterfallView.MAIN_BOX_ID).scrollTop;
+
+      if (viewBottom - popupBottom < 0) {
+        popupTop = viewBottom - newPopup.offsetHeight;
+      }
+      newPopup.style.top = popupTop + 'px';
+    },
+
+    createPopupItem_: function(parentPopup, key, popupInformation) {
+      var popupItem = addNode(parentPopup, 'li');
+      addTextNode(popupItem, key + ': ' + popupInformation);
+      return popupItem;
+    },
+
     createRow_: function() {
       // Create a row.
       var tr = addNode($(WaterfallView.TBODY_ID), 'tr');
       tr._id = this.sourceEntry_.getSourceId();
-      this.row_ = tr;
+      this.tableRow = tr;
 
       var idCell = addNode(tr, 'td');
       addTextNode(idCell, this.sourceEntry_.getSourceId());
@@ -103,22 +186,30 @@
       addTextNode(urlCell, this.description_);
       this.urlCell_ = urlCell;
 
-      // Creates the offset for where the color bar appears.
-      var barCell = addNode(tr, 'td');
-      barCell.classList.add('waterfall-view-row');
-      this.barCell_ = barCell;
+      // Creates the color bar.
 
-      this.updateRow();
+      var rowCell = addNode(tr, 'td');
+      rowCell.classList.add('waterfall-view-row');
+      this.rowCell_ = rowCell;
 
       var sourceTypeString = this.sourceEntry_.getSourceTypeString();
       this.type_ = eventTypeToCssClass_(sourceTypeString);
+
+      this.updateRow();
     },
 
     // Generates nodes.
-    createNode_: function(parentNode, durationScaled, eventType) {
+    createNode_: function(parentNode, duration, eventType, event) {
+      var scale = this.parentView_.getScaleFactor();
       var newNode = addNode(parentNode, 'div');
-      setNodeWidth(newNode, durationScaled);
-      newNode.classList.add('waterfall-view-row-' + eventType);
+      setNodeWidth(newNode, duration * scale);
+      newNode.classList.add(eventType);
+      newNode.addEventListener(
+          'mouseover',
+          this.createPopup_.bind(this, newNode, event, eventType, duration),
+          true);
+      newNode.addEventListener(
+          'mouseout', this.clearPopup_.bind(this, newNode), true);
       return newNode;
     },
 
@@ -135,24 +226,24 @@
       var startEntries = {};
       var entries = this.sourceEntry_.getLogEntries();
       for (var i = 0; i < entries.length; ++i) {
-        var type = entries[i].type;
+        var currentEntry = entries[i];
+        var type = currentEntry.type;
         if (typeList.indexOf(type) < 0) {
           continue;
         }
-        if (entries[i].phase == EventPhase.PHASE_BEGIN) {
-          startEntries[type] = entries[i];
+        if (currentEntry.phase == EventPhase.PHASE_BEGIN) {
+          startEntries[type] = currentEntry;
         }
-        if (startEntries[type] && entries[i].phase == EventPhase.PHASE_END) {
+        if (startEntries[type] && currentEntry.phase == EventPhase.PHASE_END) {
           var event = {
             startEntry: startEntries[type],
-            endEntry: entries[i],
+            endEntry: currentEntry,
           };
           matchingEventPairs.push(event);
         }
       }
       return matchingEventPairs;
     },
-
   };
 
   function eventTypeToCssClass_(rawEventType) {
diff --git a/chrome/browser/resources/net_internals/waterfall_view.css b/chrome/browser/resources/net_internals/waterfall_view.css
index 2d1b636..14a0f60c 100644
--- a/chrome/browser/resources/net_internals/waterfall_view.css
+++ b/chrome/browser/resources/net_internals/waterfall_view.css
@@ -3,6 +3,16 @@
  * found in the LICENSE file.
  */
 
+#waterfall-view-controls {
+  background-color: #FFF;
+  border-color: #000;
+  border-style: solid;
+  border-width: 1px;
+  padding-left: 5px;
+  position: fixed;
+  top: 40px;
+}
+
 .waterfall-view-url-cell {
   display: inline-block;
   overflow: hidden;
@@ -17,44 +27,101 @@
 
 .waterfall-view-row * {
   display: inline-block;
-  height: 15px;
-  opacity: 0.5;
   padding-top: 0;
 }
 
-.waterfall-view-row [class*='http-stream-request'] {
-  background-color: #000;
+.waterfall-view-bar > * {
+  height: 15px;
 }
 
-.waterfall-view-row [class*='http-transaction-read-headers'] {
-  background-color: rgb(255, 0, 0);
+.waterfall-view-popup-list {
+  background-color: rgba(255, 255, 255, 0.8);
+  border-color: #000;
+  border-style: solid;
+  border-width: 2px;
+  color: #000;
+  padding-right: 1em;
+  z-index: -1;
 }
 
-.waterfall-view-row [class*='url-request'] {
-  background-color: rgb(0, 0, 255);
+.waterfall-view-popup-list > li {
+  display: list-item;
+}
+.waterfall-view-popup-list-url-item {
+  text-overflow: ellipsis;
+  white-space: nowrap;
 }
 
-.waterfall-view-row [class*='http-stream-job'] {
-  background-color: rgb(0, 255, 0);
+.waterfall-view-bar.error {
+  border-color: rgba(255, 0, 0, 0.8);
+  border-style: solid;
+  border-width: 1px;
+  height: 18px;
 }
 
-.waterfall-view-row [class*='proxy-service'] {
-  background-color: rgb(122, 122, 0);
+.waterfall-view-row .http-stream-request {
+  background: -webkit-linear-gradient(top, #EEE, rgba(0, 0, 0, 0.5));
 }
 
-.waterfall-view-row [class*='socket-pool-connect-job'] {
-  background-color: rgb(0, 122, 122);
+.waterfall-view-row .http-stream-request-bound-to-job {
+  background: -webkit-linear-gradient(top, #EEE, rgba(200, 200, 200, 0.5));
 }
 
-.waterfall-view-row [class*='host-resolver-impl'] {
-  background-color: rgb(122, 0, 122);
+.waterfall-view-row .http-transaction-read-headers {
+  background: -webkit-linear-gradient(top, #EEE, rgba(255, 0, 0, 0.5));
 }
 
-.waterfall-view-row [class*='socket'] {
-  background-color: rgb(122, 178, 0);
+.waterfall-view-row .url-request {
+  background: -webkit-linear-gradient(top, #EEE, rgba(0, 0, 255, 0.5));
 }
 
-.waterfall-popup {
-  display: block;
-  font-size: 15px;
+.waterfall-view-row .http-stream-job {
+  background: -webkit-linear-gradient(top, #EEE, rgba(0, 255, 0, 0.5));
+}
+
+.waterfall-view-row .proxy-service {
+  background: -webkit-linear-gradient(top, #EEE, rgba(122, 122, 0, 0.5));
+}
+
+.waterfall-view-row .socket-pool-connect-job {
+  background: -webkit-linear-gradient(top, #EEE, rgba(0, 122, 122, 0.5));
+}
+
+.waterfall-view-row .host-resolver-impl {
+  background: -webkit-linear-gradient(top, #EEE, rgba(122, 0, 122, 0.5));
+}
+
+.waterfall-view-row .socket {
+  background: -webkit-linear-gradient(top, #EEE, rgba(122, 178, 0, 0.5));
+}
+
+.waterfall-view-row .tcp-connect {
+  background: -webkit-linear-gradient(top, #EEE, rgba(0, 178, 122, 0.5));
+}
+
+.waterfall-view-row .ssl-connect {
+  background: -webkit-linear-gradient(top, #EEE, rgba(55, 122, 178, 0.5));
+}
+
+.waterfall-view-popup {
+  display: inline-block;
+  position: absolute;
+}
+
+.waterfall-view-time-scale-row {
+  white-space: nowrap;
+}
+
+.waterfall-view-time-scale {
+  border-color: #000;
+  border-left-style: solid;
+  border-width: 1px;
+  box-sizing: border-box;
+  display: inline-block;
+  height: 15px;
+}
+
+/* Colors every fifth bar red. */
+.waterfall-view-time-scale-special {
+  border-color: rgb(255, 0, 0);
 }
diff --git a/chrome/browser/resources/net_internals/waterfall_view.html b/chrome/browser/resources/net_internals/waterfall_view.html
index d605122..ac88a7a 100644
--- a/chrome/browser/resources/net_internals/waterfall_view.html
+++ b/chrome/browser/resources/net_internals/waterfall_view.html
@@ -1,16 +1,18 @@
 <!-- =============== Events Waterfall View ================= -->
 <div id=waterfall-view-tab-content class=content-box>
   <div>
-    Information:
-    <p>Currently only captures URL Request events. Blue represents URL
-    Requests. Red represents Header Reads. Grey represents Stream Requests.
-    <input id=waterfall-view-time-scale type="button"
-        value="Scale To Fit Window">
+    <div id=waterfall-view-controls>
+      Start Time: <input id=waterfall-view-start-input type=number min=0 value=0>
+      End Time: <input id=waterfall-view-end-input type=number min=0>
+      <input id=waterfall-view-adjust-to-window type=button value="Fit Range in Window">
+    </div>
+    <p>
     <table id=waterfall-view-source-list-table>
       <thead>
       <tr>
         <td id=waterfall-view-source-id>ID</td>
         <td id=waterfall-view-source-header>Source</td>
+        <td id=waterfall-view-time-scale-labels></td>
       </tr>
       </thead>
       <!-- Events Waterfall table body: This is where request rows go into -->
diff --git a/chrome/browser/resources/net_internals/waterfall_view.js b/chrome/browser/resources/net_internals/waterfall_view.js
index 2f1b0ed..aac15b6 100644
--- a/chrome/browser/resources/net_internals/waterfall_view.js
+++ b/chrome/browser/resources/net_internals/waterfall_view.js
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// TODO(viona): Write a README document/instructions.
+
 /** This view displays the event waterfall. */
 var WaterfallView = (function() {
   'use strict';
@@ -22,7 +24,10 @@
 
     // For adjusting the range of view.
     $(WaterfallView.SCALE_ID).addEventListener(
-        'click', this.adjustToWindow_.bind(this), true);
+        'click', this.setStartEndTimes_.bind(this), true);
+
+    $(WaterfallView.MAIN_BOX_ID).addEventListener(
+        'mousewheel', this.scrollToZoom_.bind(this), true);
 
     this.initializeSourceList_();
   }
@@ -34,9 +39,22 @@
   // IDs for special HTML elements in events_waterfall_view.html.
   WaterfallView.MAIN_BOX_ID = 'waterfall-view-tab-content';
   WaterfallView.TBODY_ID = 'waterfall-view-source-list-tbody';
-  WaterfallView.SCALE_ID = 'waterfall-view-time-scale';
+  WaterfallView.SCALE_ID = 'waterfall-view-adjust-to-window';
   WaterfallView.ID_HEADER_ID = 'waterfall-view-source-id';
   WaterfallView.SOURCE_HEADER_ID = 'waterfall-view-source-header';
+  WaterfallView.TIME_SCALE_HEADER_ID = 'waterfall-view-time-scale-labels';
+  WaterfallView.TIME_RANGE_ID = 'waterfall-view-time-range-submit';
+  WaterfallView.START_TIME_ID = 'waterfall-view-start-input';
+  WaterfallView.END_TIME_ID = 'waterfall-view-end-input';
+
+  // The number of units mouse wheel deltas increase for each tick of the
+  // wheel.
+  var MOUSE_WHEEL_UNITS_PER_CLICK = 120;
+
+  // Amount we zoom for one vertical tick of the mouse wheel, as a ratio.
+  var MOUSE_WHEEL_ZOOM_RATE = 1.25;
+  // Amount we scroll for one horizontal tick of the mouse wheel, in pixels.
+  var MOUSE_WHEEL_SCROLL_RATE = MOUSE_WHEEL_UNITS_PER_CLICK;
 
   cr.addSingletonGetter(WaterfallView);
 
@@ -55,24 +73,29 @@
         this.startTime_ = timeutil.convertTimeTicksToTime(logEntries[0].time);
         // Initial scale factor.
         this.scaleFactor_ = 0.1;
+        this.eventsList_ = this.createEventsList_();
       }
       for (var i = 0; i < sourceEntries.length; ++i) {
         var sourceEntry = sourceEntries[i];
         var id = sourceEntry.getSourceId();
-        if (sourceEntry.getSourceType() == EventSourceType.URL_REQUEST) {
-          var row = this.sourceIdToRowMap_[id];
-          if (!row) {
-            var importantEventTypes = [
-                EventType.HTTP_STREAM_REQUEST,
-                EventType.HTTP_TRANSACTION_READ_HEADERS
-            ];
-            this.sourceIdToRowMap_[id] =
-                new WaterfallRow(this, sourceEntry, importantEventTypes);
-          } else {
-            row.onSourceUpdated();
+        for (var j = 0; j < this.eventsList_.length; ++j) {
+          var eventObject = this.eventsList_[j];
+          if (sourceEntry.getSourceType() == eventObject.mainEvent) {
+            var row = this.sourceIdToRowMap_[id];
+            if (!row) {
+              var newRow = new WaterfallRow(
+                  this, sourceEntry, eventObject.importantEventTypes);
+              if (newRow == undefined) {
+                console.log(sourceEntry);
+              }
+              this.sourceIdToRowMap_[id] = newRow;
+            } else {
+              row.onSourceUpdated();
+            }
           }
         }
       }
+      this.updateTimeScale_(this.scaleFactor_);
     },
 
     onAllSourceEntriesDeleted: function() {
@@ -103,28 +126,65 @@
     },
 
     /**
-     * Changes width of the bars such that horizontally, everything fits into
-     * the user's current window size.
-     * TODO(viona): Deal with the magic number.
+     * Changes scroll position of the window such that horizontally, everything
+     * within the specified range fits into the user's viewport.
+     * TODO(viona): Find a way to get rid of the magic number.
      */
-    adjustToWindow_: function() {
-      var usedWidth = $(WaterfallView.SOURCE_HEADER_ID).offsetWidth +
-          $(WaterfallView.ID_HEADER_ID).offsetWidth;
-      var availableWidth = ($(WaterfallView.MAIN_BOX_ID).offsetWidth -
-          usedWidth - 50);
-      if (availableWidth <= 0) {
-        availableWidth = 1;
-      }
+    adjustToWindow_: function(windowStart, windowEnd) {
+      var maxWidth = $(WaterfallView.MAIN_BOX_ID).offsetWidth - 50;
+      $(WaterfallView.TBODY_ID).width = maxWidth + 'px';
       var totalDuration = 0;
-      for (var id in this.sourceIdToRowMap_) {
-        var row = this.sourceIdToRowMap_[id];
-        var rowDuration = row.getEndTime() - this.startTime_;
-        if (totalDuration < rowDuration) {
-          totalDuration = rowDuration;
+      if (windowEnd != -1) {
+        totalDuration = windowEnd - windowStart;
+      } else {
+        for (var id in this.sourceIdToRowMap_) {
+          var row = this.sourceIdToRowMap_[id];
+          var rowDuration = row.getEndTime() - this.startTime_;
+          if (totalDuration < rowDuration && !row.hide) {
+            totalDuration = rowDuration;
+          }
         }
       }
-      var scaleFactor = availableWidth / totalDuration;
-      this.scaleAll_(scaleFactor);
+      if (totalDuration <= 0) {
+        return;
+      }
+      this.scaleAll_(maxWidth / totalDuration);
+      var waterfallLeft = $(WaterfallView.TIME_SCALE_HEADER_ID).offsetLeft;
+      $(WaterfallView.MAIN_BOX_ID).scrollLeft =
+          windowStart * this.scaleFactor_ + waterfallLeft;
+    },
+
+    // Updates the time tick indicators.
+    updateTimeScale_: function(scaleFactor) {
+      var timePerTick = 1;
+      var minTickDistance = 20;
+
+      $(WaterfallView.TIME_SCALE_HEADER_ID).innerHTML = '';
+
+      // Holder provides environment to prevent wrapping.
+      var timeTickRow = addNode($(WaterfallView.TIME_SCALE_HEADER_ID), 'div');
+      timeTickRow.classList.add('waterfall-view-time-scale-row');
+
+      var availableWidth = $(WaterfallView.TBODY_ID).clientWidth;
+      var tickDistance = scaleFactor * timePerTick;
+
+      while (tickDistance < minTickDistance) {
+        timePerTick = timePerTick * 10;
+        tickDistance = scaleFactor * timePerTick;
+      }
+
+      var tickCount = availableWidth / tickDistance;
+      for (var i = 0; i < tickCount; ++i) {
+        var timeCell = addNode(timeTickRow, 'div');
+        setNodeWidth(timeCell, tickDistance);
+        timeCell.classList.add('waterfall-view-time-scale');
+        timeCell.title = i * timePerTick + ' to ' +
+           (i + 1) * timePerTick + ' ms';
+        // Red marker for every 5th bar.
+        if (i % 5 == 0) {
+          timeCell.classList.add('waterfall-view-time-scale-special');
+        }
+      }
     },
 
     /**
@@ -136,6 +196,76 @@
         var row = this.sourceIdToRowMap_[id];
         row.updateRow();
       }
+      this.updateTimeScale_(scaleFactor);
+    },
+
+    scrollToZoom_: function(event) {
+      // To use scrolling to control zoom, hold down the alt key and scroll.
+      if ('wheelDelta' in event && event.altKey) {
+        var zoomFactor = Math.pow(MOUSE_WHEEL_ZOOM_RATE,
+             event.wheelDeltaY / MOUSE_WHEEL_UNITS_PER_CLICK);
+
+        var waterfallLeft = $(WaterfallView.TIME_SCALE_HEADER_ID).offsetLeft;
+        var oldCursorPosition = event.pageX +
+            $(WaterfallView.MAIN_BOX_ID).scrollLeft;
+        var oldCursorPositionInTable = oldCursorPosition - waterfallLeft;
+
+        this.scaleAll_(this.scaleFactor_ * zoomFactor);
+
+        // Shifts the view when scrolling. newScroll could be less than 0 or
+        // more than the maximum scroll position, but both cases are handled
+        // by the inbuilt scrollLeft implementation.
+        var newScroll =
+            oldCursorPositionInTable * zoomFactor - event.pageX + waterfallLeft;
+        $(WaterfallView.MAIN_BOX_ID).scrollLeft = newScroll;
+      }
+    },
+
+    // Parses user input, then calls adjustToWindow to shift that into view.
+    setStartEndTimes_: function() {
+      var windowStart = parseInt($(WaterfallView.START_TIME_ID).value);
+      var windowEnd = parseInt($(WaterfallView.END_TIME_ID).value);
+      if ($(WaterfallView.END_TIME_ID).value == '') {
+        windowEnd = -1;
+      }
+      if ($(WaterfallView.START_TIME_ID).value == '') {
+        windowStart = 0;
+      }
+      this.adjustToWindow_(windowStart, windowEnd);
+    },
+
+    // Provides a structure that can be used to define source entry types and
+    // the log entries that are of interest.
+    createEventsList_: function() {
+      var eventsList = [];
+      // Creating list of events.
+      // TODO(viona): This is hard-coded. Consider user-input.
+      //              Also, work on getting socket information inlined in the
+      //              relevant URL_REQUEST events.
+      var urlRequestEvents = [
+        EventType.HTTP_STREAM_REQUEST,
+        EventType.HTTP_STREAM_REQUEST_BOUND_TO_JOB,
+        EventType.HTTP_TRANSACTION_READ_HEADERS
+      ];
+
+      eventsList.push(this.createEventTypeObjects_(
+          EventSourceType.URL_REQUEST, urlRequestEvents));
+
+      var httpStreamJobEvents = [EventType.PROXY_SERVICE];
+      eventsList.push(this.createEventTypeObjects_(
+          EventSourceType.HTTP_STREAM_JOB, httpStreamJobEvents));
+
+      return eventsList;
+    },
+
+    // Creates objects that can be used to define source entry types and
+    // the log entries that are of interest.
+    createEventTypeObjects_: function(mainEventType, eventTypesList) {
+      var eventTypeObject = {
+        mainEvent: mainEventType,
+        importantEventTypes: eventTypesList
+      };
+      return eventTypeObject;
     },
   };
 
diff --git a/chrome/browser/resources/print_preview/print_preview.css b/chrome/browser/resources/print_preview/print_preview.css
index ed5424c..9369e1a 100644
--- a/chrome/browser/resources/print_preview/print_preview.css
+++ b/chrome/browser/resources/print_preview/print_preview.css
@@ -295,3 +295,9 @@
   height: 100%;
   position: relative;
 }
+
+html:not(.focus-outline-visible)
+:enabled:focus:-webkit-any(input[type='checkbox'],input[type='radio'],button) {
+  /* Cancel border-color for :focus specified in widgets.css. */
+  border-color: rgba(0,0,0,0.25);
+}
diff --git a/chrome/browser/resources/print_preview/print_preview.html b/chrome/browser/resources/print_preview/print_preview.html
index e246549..1133332 100644
--- a/chrome/browser/resources/print_preview/print_preview.html
+++ b/chrome/browser/resources/print_preview/print_preview.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html i18n-values="dir:textdirection;" id="print-preview">
+<html i18n-values="dir:textdirection;" id="print-preview" class="focus-outline-visible">
 
 <head>
   <meta charset="utf-8">
@@ -29,6 +29,8 @@
   <script src="chrome://print/strings.js"></script>
   <script src="chrome://resources/js/cr.js"></script>
   <script src="chrome://resources/js/cr/event_target.js"></script>
+  <script src="chrome://resources/js/cr/ui.js"></script>
+  <script src="chrome://resources/js/cr/ui/focus_outline_manager.js"></script>
   <script src="chrome://resources/js/event_tracker.js"></script>
   <script src="chrome://resources/js/local_strings.js"></script>
   <script src="chrome://resources/js/util.js"></script>
diff --git a/chrome/browser/resources/print_preview/print_preview.js b/chrome/browser/resources/print_preview/print_preview.js
index 0fc07b7..4f906bd 100644
--- a/chrome/browser/resources/print_preview/print_preview.js
+++ b/chrome/browser/resources/print_preview/print_preview.js
@@ -227,6 +227,7 @@
       }
       this.nativeLayer_.startGetInitialSettings();
       this.destinationStore_.startLoadLocalDestinations();
+      cr.ui.FocusOutlineManager.forDocument(document);
     },
 
     /** @override */
diff --git a/chrome/browser/safe_browsing/client_side_detection_host.cc b/chrome/browser/safe_browsing/client_side_detection_host.cc
index 5c5a781..1f67d5c 100644
--- a/chrome/browser/safe_browsing/client_side_detection_host.cc
+++ b/chrome/browser/safe_browsing/client_side_detection_host.cc
@@ -177,18 +177,22 @@
       return;
     }
 
+    bool malware_killswitch_on = database_manager_->IsMalwareKillSwitchOn();
+
     BrowserThread::PostTask(
         BrowserThread::UI,
         FROM_HERE,
-        base::Bind(&ShouldClassifyUrlRequest::CheckCache, this));
+        base::Bind(&ShouldClassifyUrlRequest::CheckCache, this,
+                   malware_killswitch_on));
   }
 
-  void CheckCache() {
+  void CheckCache(bool malware_killswitch_on) {
     DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
     if (canceled_) {
       return;
     }
 
+    host_->SetMalwareKillSwitch(malware_killswitch_on);
     // If result is cached, we don't want to run classification again
     bool is_phishing;
     if (csd_service_->GetValidCachedResult(params_.url, &is_phishing)) {
@@ -251,6 +255,7 @@
       csd_service_(NULL),
       weak_factory_(this),
       unsafe_unique_page_id_(-1),
+      malware_killswitch_on_(false),
       malware_report_enabled_(false) {
   DCHECK(tab);
   // Note: csd_service_ and sb_service will be NULL here in testing.
@@ -386,15 +391,16 @@
       browse_info_.get() &&
       verdict->ParseFromString(verdict_str) &&
       verdict->IsInitialized()) {
-    if (malware_report_enabled_) {
+    // We do the malware IP matching and request sending if the feature
+    // is enabled.
+    if (malware_report_enabled_ && !MalwareKillSwitchIsOn()) {
       scoped_ptr<ClientMalwareRequest> malware_verdict(
           new ClientMalwareRequest);
       // Start browser-side malware feature extraction.  Once we're done it will
       // send the malware client verdict request.
       malware_verdict->set_url(verdict->url());
       feature_extractor_->ExtractMalwareFeatures(
-          browse_info_.get(),
-          malware_verdict.get());
+          browse_info_.get(), malware_verdict.get());
       MalwareFeatureExtractionDone(malware_verdict.Pass());
     }
 
@@ -512,7 +518,8 @@
   DCHECK_EQ(type, content::NOTIFICATION_RESOURCE_RESPONSE_STARTED);
   const ResourceRequestDetails* req = content::Details<ResourceRequestDetails>(
       details).ptr();
-  if (req && browse_info_.get()) {
+  if (req && browse_info_.get() && malware_report_enabled_ &&
+      !MalwareKillSwitchIsOn()) {
     UpdateIPHostMap(req->socket_address.host() /* ip */,
                     req->url.host()  /* url host */);
   }
@@ -545,4 +552,14 @@
   database_manager_ = database_manager;
 }
 
+bool ClientSideDetectionHost::MalwareKillSwitchIsOn() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  return malware_killswitch_on_;
+}
+
+void ClientSideDetectionHost::SetMalwareKillSwitch(bool killswitch_on) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  malware_killswitch_on_ = killswitch_on;
+}
+
 }  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/client_side_detection_host.h b/chrome/browser/safe_browsing/client_side_detection_host.h
index 7329f52..7f3e93e 100644
--- a/chrome/browser/safe_browsing/client_side_detection_host.h
+++ b/chrome/browser/safe_browsing/client_side_detection_host.h
@@ -102,6 +102,10 @@
       SafeBrowsingUIManager* ui_manager,
       SafeBrowsingDatabaseManager* database_manager);
 
+  // Get/Set malware_killswitch_on_ value. These methods called on UI thread.
+  bool MalwareKillSwitchIsOn();
+  void SetMalwareKillSwitch(bool killswitch_on);
+
   // This pointer may be NULL if client-side phishing detection is disabled.
   ClientSideDetectionService* csd_service_;
   // These pointers may be NULL if SafeBrowsing is disabled.
@@ -137,8 +141,14 @@
   int unsafe_unique_page_id_;
   scoped_ptr<SafeBrowsingUIManager::UnsafeResource> unsafe_resource_;
 
+  // Whether the malware IP matching feature killswitch is on.
+  // This should be accessed from UI thread.
+  bool malware_killswitch_on_;
+
   // Whether the malware bad ip matching and report feature is enabled.
+  // This should be accessed from UI thread.
   bool malware_report_enabled_;
+
   DISALLOW_COPY_AND_ASSIGN(ClientSideDetectionHost);
 };
 
diff --git a/chrome/browser/safe_browsing/database_manager.cc b/chrome/browser/safe_browsing/database_manager.cc
index 47b238d..db0963a 100644
--- a/chrome/browser/safe_browsing/database_manager.cc
+++ b/chrome/browser/safe_browsing/database_manager.cc
@@ -306,6 +306,14 @@
   return database_->ContainsDownloadWhitelistedString(str);
 }
 
+bool SafeBrowsingDatabaseManager::IsMalwareKillSwitchOn() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  if (!enabled_ || !MakeDatabaseAvailable()) {
+    return true;
+  }
+  return database_->IsMalwareIPMatchKillSwitchOn();
+}
+
 bool SafeBrowsingDatabaseManager::CheckBrowseUrl(const GURL& url,
                                                  Client* client) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
diff --git a/chrome/browser/safe_browsing/database_manager.h b/chrome/browser/safe_browsing/database_manager.h
index 09f64bd..acc38ef 100644
--- a/chrome/browser/safe_browsing/database_manager.h
+++ b/chrome/browser/safe_browsing/database_manager.h
@@ -172,6 +172,9 @@
   // This method is expected to be called on the IO thread.
   virtual bool MatchDownloadWhitelistString(const std::string& str);
 
+  // Check if the CSD malware IP matching kill switch is turned on.
+  virtual bool IsMalwareKillSwitchOn();
+
   // Called on the IO thread to cancel a pending check if the result is no
   // longer needed.
   void CancelCheck(Client* client);
diff --git a/chrome/browser/safe_browsing/download_protection_service.cc b/chrome/browser/safe_browsing/download_protection_service.cc
index 62c12fa..6756bbf 100644
--- a/chrome/browser/safe_browsing/download_protection_service.cc
+++ b/chrome/browser/safe_browsing/download_protection_service.cc
@@ -10,6 +10,7 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram.h"
+#include "base/metrics/sparse_histogram.h"
 #include "base/sequenced_task_runner_helpers.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
@@ -388,6 +389,14 @@
             << item_->GetUrlChain().back() << ": success="
             << source->GetStatus().is_success() << " response_code="
             << source->GetResponseCode();
+    if (source->GetStatus().is_success()) {
+      UMA_HISTOGRAM_SPARSE_SLOWLY(
+          "SBClientDownload.DownloadRequestResponseCode",
+          source->GetResponseCode());
+    }
+    UMA_HISTOGRAM_SPARSE_SLOWLY(
+        "SBClientDownload.DownloadRequestNetError",
+        -source->GetStatus().error());
     DownloadCheckResultReason reason = REASON_SERVER_PING_FAILED;
     DownloadCheckResult result = SAFE;
     if (source->GetStatus().is_success() &&
diff --git a/chrome/browser/safe_browsing/safe_browsing_database.cc b/chrome/browser/safe_browsing/safe_browsing_database.cc
index 9f43ecd..b193f50 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_database.cc
@@ -12,6 +12,7 @@
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram.h"
 #include "base/metrics/stats_counters.h"
+#include "base/process/process.h"
 #include "base/process/process_metrics.h"
 #include "base/time/time.h"
 #include "chrome/browser/safe_browsing/prefix_set.h"
@@ -70,6 +71,12 @@
 const char kWhitelistKillSwitchUrl[] =
     "sb-ssl.google.com/safebrowsing/csd/killswitch";  // Don't change this!
 
+// If the hash of this exact expression is on a whitelist then the
+// malware IP blacklisting feature will be disabled in csd.
+// Don't change this!
+const char kMalwareIPKillSwitchUrl[] =
+    "sb-ssl.google.com/safebrowsing/csd/killswitch_malware";
+
 // To save space, the incoming |chunk_id| and |list_id| are combined
 // into an |encoded_chunk_id| for storage by shifting the |list_id|
 // into the low-order bits.  These functions decode that information.
@@ -1605,3 +1612,12 @@
     whitelist->first.swap(new_whitelist);
   }
 }
+
+bool SafeBrowsingDatabaseNew::IsMalwareIPMatchKillSwitchOn() {
+  SBFullHash malware_kill_switch;
+  crypto::SHA256HashString(kMalwareIPKillSwitchUrl, &malware_kill_switch,
+                           sizeof(malware_kill_switch));
+  std::vector<SBFullHash> full_hashes;
+  full_hashes.push_back(malware_kill_switch);
+  return ContainsWhitelistedHashes(csd_whitelist_, full_hashes);
+}
diff --git a/chrome/browser/safe_browsing/safe_browsing_database.h b/chrome/browser/safe_browsing/safe_browsing_database.h
index 219f1ea..6446e35 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database.h
+++ b/chrome/browser/safe_browsing/safe_browsing_database.h
@@ -171,6 +171,10 @@
       const std::vector<SBPrefix>& prefixes,
       const std::vector<SBFullHashResult>& full_hits) = 0;
 
+  // Returns true if the malware IP blacklisting killswitch URL is present
+  // in the csd whitelist.
+  virtual bool IsMalwareIPMatchKillSwitchOn() = 0;
+
   // The name of the bloom-filter file for the given database file.
   // NOTE(shess): OBSOLETE.  Present for deleting stale files.
   static base::FilePath BloomFilterForFilename(
@@ -297,6 +301,9 @@
       const std::vector<SBPrefix>& prefixes,
       const std::vector<SBFullHashResult>& full_hits) OVERRIDE;
 
+  // Returns the value of malware_kill_switch_;
+  virtual bool IsMalwareIPMatchKillSwitchOn() OVERRIDE;
+
  private:
   friend class SafeBrowsingDatabaseTest;
   FRIEND_TEST_ALL_PREFIXES(SafeBrowsingDatabaseTest, HashCaching);
@@ -368,8 +375,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_|,
-  // and |csd_whitelist_all_urls_|.
+  // |pending_browse_hashes_|, |prefix_miss_cache_|, |csd_whitelist_|.
   base::Lock lookup_lock_;
 
   // Underlying persistent store for chunk data.
diff --git a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
index ec50a66..7e934a9 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
@@ -1365,6 +1365,19 @@
   EXPECT_FALSE(database_->ContainsDownloadWhitelistedUrl(
       GURL(std::string("http://www.google.com/"))));
 
+  // Test only add the malware IP killswitch
+  csd_chunks.clear();
+  chunk.hosts.clear();
+  InsertAddChunkHostFullHashes(
+      &chunk, 15, "sb-ssl.google.com/",
+      "sb-ssl.google.com/safebrowsing/csd/killswitch_malware");
+  csd_chunks.push_back(chunk);
+  EXPECT_TRUE(database_->UpdateStarted(&lists));
+  database_->InsertChunks(safe_browsing_util::kCsdWhiteList, csd_chunks);
+  database_->UpdateFinished(true);
+
+  EXPECT_TRUE(database_->IsMalwareIPMatchKillSwitchOn());
+
   // Test that the kill-switch works as intended.
   csd_chunks.clear();
   download_chunks.clear();
@@ -1373,7 +1386,6 @@
   InsertAddChunkHostFullHashes(&chunk, 5, "sb-ssl.google.com/",
                                "sb-ssl.google.com/safebrowsing/csd/killswitch");
   csd_chunks.push_back(chunk);
-
   chunk.hosts.clear();
   InsertAddChunkHostFullHashes(&chunk, 5, "sb-ssl.google.com/",
                                "sb-ssl.google.com/safebrowsing/csd/killswitch");
@@ -1385,6 +1397,7 @@
                           download_chunks);
   database_->UpdateFinished(true);
 
+  EXPECT_TRUE(database_->IsMalwareIPMatchKillSwitchOn());
   EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl(
       GURL(std::string("https://") + kGood1Url2 + "/c.html")));
   EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl(
@@ -1413,6 +1426,12 @@
   csd_chunks.push_back(sub_chunk);
 
   sub_chunk.hosts.clear();
+  InsertSubChunkHostFullHash(
+      &sub_chunk, 10, 15, "sb-ssl.google.com/",
+      "sb-ssl.google.com/safebrowsing/csd/killswitch_malware");
+  csd_chunks.push_back(sub_chunk);
+
+  sub_chunk.hosts.clear();
   InsertSubChunkHostFullHash(&sub_chunk, 1, 5,
                              "sb-ssl.google.com/",
                              "sb-ssl.google.com/safebrowsing/csd/killswitch");
@@ -1424,6 +1443,7 @@
                           download_chunks);
   database_->UpdateFinished(true);
 
+  EXPECT_FALSE(database_->IsMalwareIPMatchKillSwitchOn());
   EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl(
       GURL(std::string("https://") + kGood1Url2 + "/c.html")));
   EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl(
diff --git a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
index 20543d5..c36e23f 100644
--- a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
@@ -143,6 +143,9 @@
       const std::vector<SBFullHashResult>& full_hits) OVERRIDE {
     // Do nothing for the cache.
   }
+  virtual bool IsMalwareIPMatchKillSwitchOn() OVERRIDE {
+    return false;
+  }
 
   // Fill up the database with test URL.
   void AddUrl(const GURL& url,
diff --git a/chrome/browser/search/search.cc b/chrome/browser/search/search.cc
index 883c43e..291fb08 100644
--- a/chrome/browser/search/search.cc
+++ b/chrome/browser/search/search.cc
@@ -161,6 +161,13 @@
        google_util::StartsWithCommandLineGoogleBaseURL(url));
 }
 
+// Returns true if |url| matches --instant-new-tab-url.
+bool IsCommandLineInstantNTPURL(const GURL& url) {
+  const GURL ntp_url(CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+      switches::kInstantNewTabURL));
+  return ntp_url.is_valid() && MatchesOriginAndPath(ntp_url, url);
+}
+
 // Returns true if |url| can be used as an Instant URL for |profile|.
 bool IsInstantURL(const GURL& url, Profile* profile) {
   if (!IsInstantExtendedAPIEnabled())
@@ -169,6 +176,9 @@
   if (!url.is_valid())
     return false;
 
+  if (IsCommandLineInstantNTPURL(url))
+    return true;
+
   TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile);
   if (!template_url)
     return false;
@@ -316,11 +326,16 @@
     return false;
 
   Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
-  return IsInstantExtendedAPIEnabled() &&
-         IsRenderedInInstantProcess(contents, profile) &&
-         (IsInstantURL(entry->GetVirtualURL(), profile) ||
-          entry->GetVirtualURL() == GetLocalInstantURL(profile)) &&
-         GetSearchTermsImpl(contents, entry).empty();
+  if (!IsInstantExtendedAPIEnabled() ||
+      !IsRenderedInInstantProcess(contents, profile))
+    return false;
+
+  if (IsInstantURL(entry->GetVirtualURL(), profile) ||
+      entry->GetVirtualURL() == GetLocalInstantURL(profile))
+    return GetSearchTermsImpl(contents, entry).empty();
+
+  return entry->GetVirtualURL() == GURL(chrome::kChromeUINewTabURL) &&
+      IsCommandLineInstantNTPURL(entry->GetURL());
 }
 
 bool IsSuggestPrefEnabled(Profile* profile) {
@@ -380,6 +395,12 @@
 }
 
 bool ShouldShowInstantNTP() {
+  // If the instant-new-tab-url flag is set, we'll always just load the NTP
+  // directly instead of preloading contents using InstantNTP.
+  const CommandLine* command_line = CommandLine::ForCurrentProcess();
+  if (command_line->HasSwitch(switches::kInstantNewTabURL))
+    return false;
+
   FieldTrialFlags flags;
   if (GetFieldTrialInfo(
           base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
@@ -478,6 +499,39 @@
   return false;
 }
 
+bool HandleNewTabURLRewrite(GURL* url,
+                            content::BrowserContext* browser_context) {
+  if (!IsInstantExtendedAPIEnabled())
+    return false;
+
+  if (!url->SchemeIs(chrome::kChromeUIScheme) ||
+      url->host() != chrome::kChromeUINewTabHost)
+    return false;
+
+  const GURL ntp_url(CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+      switches::kInstantNewTabURL));
+  if (!ntp_url.is_valid())
+    return false;
+
+  *url = ntp_url;
+  return true;
+}
+
+bool HandleNewTabURLReverseRewrite(GURL* url,
+                                   content::BrowserContext* browser_context) {
+  if (!IsInstantExtendedAPIEnabled())
+    return false;
+
+  const GURL ntp_url(CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+      switches::kInstantNewTabURL));
+  if (!MatchesOriginAndPath(ntp_url, *url))
+    return false;
+
+  *url = GURL(chrome::kChromeUINewTabURL);
+  return true;
+}
+
+
 void EnableInstantExtendedAPIForTesting() {
   CommandLine* cl = CommandLine::ForCurrentProcess();
   cl->AppendSwitch(switches::kEnableInstantExtendedAPI);
diff --git a/chrome/browser/search/search.h b/chrome/browser/search/search.h
index 7f1bf78..ef59f2d 100644
--- a/chrome/browser/search/search.h
+++ b/chrome/browser/search/search.h
@@ -18,6 +18,7 @@
 class TemplateURLRef;
 
 namespace content {
+class BrowserContext;
 class NavigationEntry;
 class WebContents;
 }
@@ -147,6 +148,17 @@
 // Returns true if |contents| corresponds to a preloaded instant extended NTP.
 bool IsPreloadedInstantExtendedNTP(const content::WebContents* contents);
 
+// Rewrites |url| if
+//   1. |url| is kChromeUINewTabURL,
+//   2. InstantExtended is enabled, and
+//   3. The --instant-new-tab-url switch is set to a valid URL.
+// |url| is rewritten to the value of --instant-new-tab-url.
+bool HandleNewTabURLRewrite(GURL* url,
+                            content::BrowserContext* browser_context);
+// Reverses the operation from HandleNewTabURLRewrite.
+bool HandleNewTabURLReverseRewrite(GURL* url,
+                                   content::BrowserContext* browser_context);
+
 // -----------------------------------------------------
 // The following APIs are exposed for use in tests only.
 // -----------------------------------------------------
diff --git a/chrome/browser/search/search_unittest.cc b/chrome/browser/search/search_unittest.cc
index c986500..925a56d 100644
--- a/chrome/browser/search/search_unittest.cc
+++ b/chrome/browser/search/search_unittest.cc
@@ -583,4 +583,23 @@
   EXPECT_EQ("http://www.bar.com/webhp?a=b&strk", instant_url.spec());
 }
 
+TEST_F(SearchTest, ShouldShowInstantNTP_Default) {
+  EnableInstantExtendedAPIForTesting();
+  EXPECT_TRUE(ShouldShowInstantNTP());
+}
+
+TEST_F(SearchTest, ShouldShowInstantNTP_DisabledViaFinch) {
+  EnableInstantExtendedAPIForTesting();
+  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended",
+                                                     "Group1 show_ntp:0"));
+  EXPECT_FALSE(ShouldShowInstantNTP());
+}
+
+TEST_F(SearchTest, ShouldShowInstantNTP_DisabledByInstantNewTabURLSwitch) {
+  EnableInstantExtendedAPIForTesting();
+  CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+      switches::kInstantNewTabURL, "http://example.com/newtab");
+  EXPECT_FALSE(ShouldShowInstantNTP());
+}
+
 }  // namespace chrome
diff --git a/chrome/browser/signin/oauth2_token_service.cc b/chrome/browser/signin/oauth2_token_service.cc
index 1790aea..1cc4e18 100644
--- a/chrome/browser/signin/oauth2_token_service.cc
+++ b/chrome/browser/signin/oauth2_token_service.cc
@@ -309,6 +309,14 @@
 scoped_ptr<OAuth2TokenService::Request> OAuth2TokenService::StartRequest(
     const OAuth2TokenService::ScopeSet& scopes,
     OAuth2TokenService::Consumer* consumer) {
+  return StartRequestWithContext(GetRequestContext(), scopes, consumer);
+}
+
+scoped_ptr<OAuth2TokenService::Request>
+OAuth2TokenService::StartRequestWithContext(
+    net::URLRequestContextGetter* getter,
+    const ScopeSet& scopes,
+    Consumer* consumer) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
 
   scoped_ptr<RequestImpl> request(new RequestImpl(consumer));
@@ -340,10 +348,7 @@
   }
 
   pending_fetchers_[fetch_parameters] =
-      Fetcher::CreateAndStart(this,
-                              GetRequestContext(),
-                              refresh_token,
-                              scopes,
+      Fetcher::CreateAndStart(this, getter, refresh_token, scopes,
                               request->AsWeakPtr());
   return request.PassAs<Request>();
 }
diff --git a/chrome/browser/signin/oauth2_token_service.h b/chrome/browser/signin/oauth2_token_service.h
index b40066e..d979fcf 100644
--- a/chrome/browser/signin/oauth2_token_service.h
+++ b/chrome/browser/signin/oauth2_token_service.h
@@ -117,6 +117,14 @@
   virtual scoped_ptr<Request> StartRequest(const ScopeSet& scopes,
                                            Consumer* consumer);
 
+  // This method does the same as |StartRequest| except it uses the request
+  // context given by |getter| instead of using the one returned by
+  // |GetRequestContext| implemented by derived classes.
+  virtual scoped_ptr<Request> StartRequestWithContext(
+      net::URLRequestContextGetter* getter,
+      const ScopeSet& scopes,
+      Consumer* consumer);
+
   // Returns true if a refresh token exists. If false, calls to
   // |StartRequest| will result in a Consumer::OnGetTokenFailure callback.
   virtual bool RefreshTokenIsAvailable();
diff --git a/chrome/browser/signin/signin_manager.cc b/chrome/browser/signin/signin_manager.cc
index f419d84..09a4862 100644
--- a/chrome/browser/signin/signin_manager.cc
+++ b/chrome/browser/signin/signin_manager.cc
@@ -125,18 +125,6 @@
     token_service->LoadTokensFromDB();
 }
 
-void SigninManager::CleanupNotificationRegistration() {
-  content::Source<TokenService> token_service(
-      TokenServiceFactory::GetForProfile(profile_));
-  if (registrar_.IsRegistered(this,
-                              chrome::NOTIFICATION_TOKEN_AVAILABLE,
-                              token_service)) {
-    registrar_.Remove(this,
-                      chrome::NOTIFICATION_TOKEN_AVAILABLE,
-                      token_service);
-  }
-}
-
 std::string SigninManager::SigninTypeToString(
     SigninManager::SigninType type) {
   switch (type) {
@@ -202,15 +190,6 @@
                                   login_token,
                                   login_captcha,
                                   GaiaAuthFetcher::HostedAccountsNotAllowed);
-
-  // Register for token availability.  The signin manager will pre-login the
-  // user when the GAIA service token is ready for use.
-  if (delegate_->AreSigninCookiesAllowed()) {
-    TokenService* token_service = TokenServiceFactory::GetForProfile(profile_);
-    registrar_.Add(this,
-                   chrome::NOTIFICATION_TOKEN_AVAILABLE,
-                   content::Source<TokenService>(token_service));
-  }
 }
 
 void SigninManager::ProvideSecondFactorAccessCode(
@@ -312,7 +291,6 @@
 void SigninManager::ClearTransientSigninData() {
   DCHECK(IsInitialized());
 
-  CleanupNotificationRegistration();
   client_login_.reset();
   last_result_ = ClientLoginResult();
   possibly_invalid_username_.clear();
@@ -409,6 +387,11 @@
   }
 }
 
+void SigninManager::Shutdown() {
+  local_state_pref_registrar_.RemoveAll();
+  SigninManagerBase::Shutdown();
+}
+
 void SigninManager::OnGoogleServicesUsernamePatternChanged() {
   if (!GetAuthenticatedUsername().empty() &&
       !IsAllowedUsername(GetAuthenticatedUsername())) {
@@ -651,60 +634,21 @@
   OnClientLoginFailure(error);
 }
 
-void SigninManager::OnUbertokenSuccess(const std::string& token) {
-  ubertoken_fetcher_.reset();
-  if (client_login_.get() == NULL) {
-    client_login_.reset(
-        new GaiaAuthFetcher(this,
-                            GaiaConstants::kChromeSource,
-                            profile_->GetRequestContext()));
-  }
-
-  client_login_->StartMergeSession(token);
-}
-
-void SigninManager::OnUbertokenFailure(const GoogleServiceAuthError& error) {
-  LOG(WARNING) << " Unable to login the user to the web: " << error.ToString();
-  ubertoken_fetcher_.reset();
-}
-
 void SigninManager::Observe(int type,
                             const content::NotificationSource& source,
                             const content::NotificationDetails& details) {
-  switch (type) {
-    case chrome::NOTIFICATION_TOKEN_AVAILABLE: {
-      TokenService::TokenAvailableDetails* tok_details =
-          content::Details<TokenService::TokenAvailableDetails>(
-              details).ptr();
+  DCHECK_EQ(content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, type);
 
-      // If a GAIA service token has become available, use it to pre-login the
-      // user to other services that depend on GAIA credentials.
-      if (tok_details->service() ==
-          GaiaConstants::kGaiaOAuth2LoginRefreshToken) {
-        ubertoken_fetcher_.reset(new UbertokenFetcher(profile_, this));
-        ubertoken_fetcher_->StartFetchingToken();
-
-        // We only want to do this once per sign-in.
-        CleanupNotificationRegistration();
-      }
-      break;
-    }
-    case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: {
-      // It's possible we're listening to a "stale" renderer because it was
-      // replaced with a new process by process-per-site. In either case,
-      // stop listening to it, but only reset signin_process_id_ tracking
-      // if this was from the current signin process.
-      registrar_.Remove(this,
-                        content::NOTIFICATION_RENDERER_PROCESS_TERMINATED,
-                        source);
-      if (signin_process_id_ ==
-          content::Source<content::RenderProcessHost>(source)->GetID()) {
-        signin_process_id_ = kInvalidProcessId;
-      }
-      break;
-    }
-    default:
-      NOTREACHED();
+  // It's possible we're listening to a "stale" renderer because it was
+  // replaced with a new process by process-per-site. In either case,
+  // stop listening to it, but only reset signin_process_id_ tracking
+  // if this was from the current signin process.
+  registrar_.Remove(this,
+                    content::NOTIFICATION_RENDERER_PROCESS_TERMINATED,
+                    source);
+  if (signin_process_id_ ==
+      content::Source<content::RenderProcessHost>(source)->GetID()) {
+    signin_process_id_ = kInvalidProcessId;
   }
 }
 
diff --git a/chrome/browser/signin/signin_manager.h b/chrome/browser/signin/signin_manager.h
index 1e84e0a..3c54c94 100644
--- a/chrome/browser/signin/signin_manager.h
+++ b/chrome/browser/signin/signin_manager.h
@@ -33,7 +33,6 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/signin_internals_util.h"
 #include "chrome/browser/signin/signin_manager_base.h"
-#include "chrome/browser/signin/ubertoken_fetcher.h"
 #include "components/browser_context_keyed_service/browser_context_keyed_service.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
@@ -50,7 +49,6 @@
 
 class SigninManager : public SigninManagerBase,
                       public GaiaAuthConsumer,
-                      public UbertokenConsumer,
                       public content::NotificationObserver {
  public:
   // The callback invoked once the OAuth token has been fetched during signin,
@@ -120,6 +118,7 @@
   // invalid username policy updates, we need to check this during
   // initialization and sign the user out.
   virtual void Initialize(Profile* profile, PrefService* local_state) OVERRIDE;
+  virtual void Shutdown() OVERRIDE;
 
   // Invoked from an OAuthTokenFetchedCallback to complete user signin.
   virtual void CompletePendingSignin();
@@ -161,10 +160,6 @@
   virtual void OnGetUserInfoFailure(
       const GoogleServiceAuthError& error) OVERRIDE;
 
-  // UbertokenConsumer
-  virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE;
-  virtual void OnUbertokenFailure(const GoogleServiceAuthError& error) OVERRIDE;
-
   // content::NotificationObserver
   virtual void Observe(int type,
                        const content::NotificationSource& source,
@@ -260,8 +255,6 @@
   std::string password_;  // This is kept empty whenever possible.
   bool had_two_factor_error_;
 
-  void CleanupNotificationRegistration();
-
   // Result of the last client login, kept pending the lookup of the
   // canonical email.
   ClientLoginResult last_result_;
@@ -272,9 +265,6 @@
   // Registrar for notifications from the TokenService.
   content::NotificationRegistrar registrar_;
 
-  // UbertokenFetcher to login to user to the web property.
-  scoped_ptr<UbertokenFetcher> ubertoken_fetcher_;
-
   // OAuth revocation fetcher for sign outs.
   scoped_ptr<GaiaAuthFetcher> revoke_token_fetcher_;
 
diff --git a/chrome/browser/signin/ubertoken_fetcher.cc b/chrome/browser/signin/ubertoken_fetcher.cc
index 01d9ad4..b726b70 100644
--- a/chrome/browser/signin/ubertoken_fetcher.cc
+++ b/chrome/browser/signin/ubertoken_fetcher.cc
@@ -7,15 +7,13 @@
 #include <vector>
 
 #include "base/logging.h"
-#include "base/strings/stringprintf.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/signin/token_service.h"
-#include "chrome/browser/signin/token_service_factory.h"
+#include "chrome/browser/signin/profile_oauth2_token_service.h"
+#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
+#include "google_apis/gaia/gaia_auth_fetcher.h"
 #include "google_apis/gaia/gaia_constants.h"
 #include "google_apis/gaia/gaia_urls.h"
 #include "google_apis/gaia/google_service_auth_error.h"
-#include "net/base/load_flags.h"
 
 UbertokenFetcher::UbertokenFetcher(Profile* profile,
                                    UbertokenConsumer* consumer)
@@ -28,86 +26,11 @@
 }
 
 void UbertokenFetcher::StartFetchingToken() {
-  TokenService* token_service = TokenServiceFactory::GetForProfile(profile_);
-  if (token_service->HasOAuthLoginToken()) {
-    StartFetchingUbertoken();
-  } else {
-    registrar_.Add(this,
-                   chrome::NOTIFICATION_TOKEN_AVAILABLE,
-                   content::Source<TokenService>(token_service));
-    registrar_.Add(this,
-                   chrome::NOTIFICATION_TOKEN_REQUEST_FAILED,
-                   content::Source<TokenService>(token_service));
-    token_service->StartFetchingTokens();
-  }
-}
-
-void UbertokenFetcher::StartFetchingUbertoken() {
-  TokenService* token_service = TokenServiceFactory::GetForProfile(profile_);
-  DCHECK(token_service->HasOAuthLoginToken());
-  gaia::OAuthClientInfo client_info;
-  GaiaUrls* urls = GaiaUrls::GetInstance();
-  client_info.client_id = urls->oauth2_chrome_client_id();
-  client_info.client_secret = urls->oauth2_chrome_client_secret();
-  gaia_oauth_client_.reset(new gaia::GaiaOAuthClient(
-      profile_->GetRequestContext()));
-  std::vector<std::string> empty_scope_list;  // (Use scope from refresh token.)
-  gaia_oauth_client_->RefreshToken(
-      client_info, token_service->GetOAuth2LoginRefreshToken(),
-      empty_scope_list, 1, this);
-}
-
-void UbertokenFetcher::Observe(int type,
-                               const content::NotificationSource& source,
-                               const content::NotificationDetails& details) {
-  DCHECK(type == chrome::NOTIFICATION_TOKEN_AVAILABLE ||
-         type == chrome::NOTIFICATION_TOKEN_REQUEST_FAILED);
-
-  if (type == chrome::NOTIFICATION_TOKEN_AVAILABLE) {
-    TokenService::TokenAvailableDetails* token_details =
-        content::Details<TokenService::TokenAvailableDetails>(details).ptr();
-    if (token_details->service() !=
-        GaiaConstants::kGaiaOAuth2LoginRefreshToken) {
-      return;
-    }
-    registrar_.RemoveAll();
-    StartFetchingUbertoken();
-  } else {
-    TokenService::TokenRequestFailedDetails* token_details =
-        content::Details<TokenService::TokenRequestFailedDetails>(details).
-            ptr();
-    if (token_details->service() == GaiaConstants::kLSOService ||
-        token_details->service() ==
-            GaiaConstants::kGaiaOAuth2LoginRefreshToken) {
-      consumer_->OnUbertokenFailure(token_details->error());
-    }
-  }
-}
-
-void UbertokenFetcher::OnGetTokensResponse(const std::string& refresh_token,
-                                           const std::string& access_token,
-                                           int expires_in_seconds) {
-  NOTREACHED();
-}
-
-void UbertokenFetcher::OnRefreshTokenResponse(const std::string& access_token,
-                                              int expires_in_seconds) {
-  gaia_auth_fetcher_.reset(new GaiaAuthFetcher(this,
-                                               GaiaConstants::kChromeSource,
-                                               profile_->GetRequestContext()));
-  gaia_auth_fetcher_->StartTokenFetchForUberAuthExchange(access_token);
-}
-
-void UbertokenFetcher::OnOAuthError() {
-  GoogleServiceAuthError error(
-      GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
-  consumer_->OnUbertokenFailure(error);
-}
-
-void UbertokenFetcher::OnNetworkError(int response_code) {
-  GoogleServiceAuthError error =
-      GoogleServiceAuthError::FromConnectionError(response_code);
-  consumer_->OnUbertokenFailure(error);
+  OAuth2TokenService::ScopeSet scopes;
+  scopes.insert(GaiaUrls::GetInstance()->oauth1_login_scope());
+  access_token_request_ =
+      ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)->
+          StartRequest(scopes, this);
 }
 
 void UbertokenFetcher::OnUberAuthTokenSuccess(const std::string& token) {
@@ -118,3 +41,21 @@
     const GoogleServiceAuthError& error) {
   consumer_->OnUbertokenFailure(error);
 }
+
+void UbertokenFetcher::OnGetTokenSuccess(
+    const OAuth2TokenService::Request* request,
+    const std::string& access_token,
+    const base::Time& expiration_time) {
+  access_token_request_.reset();
+  gaia_auth_fetcher_.reset(new GaiaAuthFetcher(this,
+                                               GaiaConstants::kChromeSource,
+                                               profile_->GetRequestContext()));
+  gaia_auth_fetcher_->StartTokenFetchForUberAuthExchange(access_token);
+}
+
+void UbertokenFetcher::OnGetTokenFailure(
+    const OAuth2TokenService::Request* request,
+    const GoogleServiceAuthError& error) {
+  access_token_request_.reset();
+  consumer_->OnUbertokenFailure(error);
+}
diff --git a/chrome/browser/signin/ubertoken_fetcher.h b/chrome/browser/signin/ubertoken_fetcher.h
index 3c4a516..b7dd6d0 100644
--- a/chrome/browser/signin/ubertoken_fetcher.h
+++ b/chrome/browser/signin/ubertoken_fetcher.h
@@ -6,24 +6,19 @@
 #define CHROME_BROWSER_SIGNIN_UBERTOKEN_FETCHER_H_
 
 #include "base/memory/scoped_ptr.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"
+#include "chrome/browser/signin/oauth2_token_service.h"
 #include "google_apis/gaia/gaia_auth_consumer.h"
-#include "google_apis/gaia/gaia_auth_fetcher.h"
-#include "google_apis/gaia/gaia_oauth_client.h"
 
 // Allow to retrieves an uber-auth token for the user. This class uses the
-// |TokenService| and considers that the user is already logged in. It will then
-// retrieve the OAuth2 refresh token, use it to generate an OAuth2 access token
-// and finally use this access token to generate the uber-auth token.
+// |OAuth2TokenService| and considers that the user is already logged in. It
+// will use the OAuth2 access token to generate the uber-auth token.
 //
 // This class should be used on a single thread, but it can be whichever thread
 // that you like.
 //
 // This class can handle one request at a time.
 
+class GaiaAuthFetcher;
 class GoogleServiceAuthError;
 class Profile;
 
@@ -37,9 +32,8 @@
 };
 
 // Allows to retrieve an uber-auth token.
-class UbertokenFetcher : public content::NotificationObserver,
-                         public gaia::GaiaOAuthClient::Delegate,
-                         public GaiaAuthConsumer {
+class UbertokenFetcher : public GaiaAuthConsumer,
+                         public OAuth2TokenService::Consumer {
  public:
   UbertokenFetcher(Profile* profile, UbertokenConsumer* consumer);
   virtual ~UbertokenFetcher();
@@ -47,33 +41,23 @@
   // Start fetching the token.
   void StartFetchingToken();
 
-  // Overriden from gaia::GaiaOAuthClient::Delegate:
-  virtual void OnGetTokensResponse(const std::string& refresh_token,
-                                   const std::string& access_token,
-                                   int expires_in_seconds) OVERRIDE;
-  virtual void OnRefreshTokenResponse(const std::string& access_token,
-                                      int expires_in_seconds) OVERRIDE;
-  virtual void OnOAuthError() OVERRIDE;
-  virtual void OnNetworkError(int response_code) OVERRIDE;
-
   // Overriden from GaiaAuthConsumer
   virtual void OnUberAuthTokenSuccess(const std::string& token) OVERRIDE;
   virtual void OnUberAuthTokenFailure(
       const GoogleServiceAuthError& error) OVERRIDE;
 
-  // Overriden from content::NotificationObserver:
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
+  // Overriden from OAuth2TokenService::Consumer:
+  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 StartFetchingUbertoken();
-
   Profile* profile_;
   UbertokenConsumer* consumer_;
-  content::NotificationRegistrar registrar_;
-  scoped_ptr<gaia::GaiaOAuthClient> gaia_oauth_client_;
   scoped_ptr<GaiaAuthFetcher> gaia_auth_fetcher_;
+  scoped_ptr<OAuth2TokenService::Request> access_token_request_;
 
   DISALLOW_COPY_AND_ASSIGN(UbertokenFetcher);
 };
diff --git a/chrome/browser/signin/ubertoken_fetcher_unittest.cc b/chrome/browser/signin/ubertoken_fetcher_unittest.cc
index ec752c7..90b1d78 100644
--- a/chrome/browser/signin/ubertoken_fetcher_unittest.cc
+++ b/chrome/browser/signin/ubertoken_fetcher_unittest.cc
@@ -4,13 +4,16 @@
 
 #include "chrome/browser/signin/ubertoken_fetcher.h"
 
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/signin/token_service.h"
+#include "base/memory/scoped_ptr.h"
+#include "chrome/browser/signin/profile_oauth2_token_service.h"
+#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/signin/token_service_unittest.h"
 #include "google_apis/gaia/gaia_constants.h"
 #include "net/url_request/test_url_fetcher_factory.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+namespace {
+
 class MockUbertokenConsumer : public UbertokenConsumer {
  public:
   MockUbertokenConsumer()
@@ -37,15 +40,40 @@
   int nb_error_;
 };
 
+class MockOAuth2TokenService : public ProfileOAuth2TokenService {
+  // OAuth2TokenService overrides:
+  virtual scoped_ptr<OAuth2TokenService::Request>
+      StartRequest(const OAuth2TokenService::ScopeSet& scopes,
+                   OAuth2TokenService::Consumer* consumer) OVERRIDE {
+    // Don't actually make a request.
+    scoped_ptr<OAuth2TokenService::Request> request;
+    return request.Pass();
+  }
+};
+
+
+BrowserContextKeyedService* Build(content::BrowserContext* profile) {
+  MockOAuth2TokenService* token_service = new MockOAuth2TokenService();
+  token_service->Initialize(static_cast<Profile*>(profile));
+  return token_service;
+}
+
+}  // namespace
+
 class UbertokenFetcherTest : public TokenServiceTestHarness {
  public:
   virtual void SetUp() OVERRIDE {
     TokenServiceTestHarness::SetUp();
+    profile()->CreateRequestContext(NULL);
+
+    ProfileOAuth2TokenServiceFactory::GetInstance()->
+        SetTestingFactoryAndUse(profile(), Build);
     UpdateCredentialsOnService();
     fetcher_.reset(new UbertokenFetcher(profile(), &consumer_));
   }
 
   virtual void TearDown() OVERRIDE {
+    fetcher_.reset();
     TokenServiceTestHarness::TearDown();
   }
 
@@ -55,50 +83,51 @@
   scoped_ptr<UbertokenFetcher> fetcher_;
 };
 
-TEST_F(UbertokenFetcherTest, TestSuccessWithoutRefreshToken) {
-  fetcher_->StartFetchingToken();
-  TokenService::TokenAvailableDetails
-      details(GaiaConstants::kGaiaOAuth2LoginRefreshToken, "refreshToken");
+TEST_F(UbertokenFetcherTest, Basic) {
+}
+
+TEST_F(UbertokenFetcherTest, Success) {
   service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
                                    "refreshToken");
-  fetcher_->Observe(chrome::NOTIFICATION_TOKEN_AVAILABLE,
-                    content::Source<TokenService>(service()),
-                    content::Details<const TokenService::TokenAvailableDetails>(
-                        &details));
-  fetcher_->OnRefreshTokenResponse("accessToken", 3600);
+  fetcher_->StartFetchingToken();
+  fetcher_->OnGetTokenSuccess(NULL, "accessToken", base::Time());
   fetcher_->OnUberAuthTokenSuccess("uberToken");
   EXPECT_EQ(0, consumer_.nb_error_);
   EXPECT_EQ(1, consumer_.nb_correct_token_);
   EXPECT_EQ("uberToken", consumer_.last_token_);
 }
 
-TEST_F(UbertokenFetcherTest, TestSuccessWithRefreshToken) {
-  service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
-                                   "refreshToken");
+TEST_F(UbertokenFetcherTest, NoRefreshToken) {
   fetcher_->StartFetchingToken();
-  fetcher_->OnRefreshTokenResponse("accessToken", 3600);
-  fetcher_->OnUberAuthTokenSuccess("uberToken");
-  EXPECT_EQ(0, consumer_.nb_error_);
-  EXPECT_EQ(1, consumer_.nb_correct_token_);
-  EXPECT_EQ("uberToken", consumer_.last_token_);
-}
-
-
-TEST_F(UbertokenFetcherTest, TestFailures) {
   GoogleServiceAuthError error(GoogleServiceAuthError::USER_NOT_SIGNED_UP);
-  EXPECT_EQ(0, consumer_.nb_error_);
-  TokenService::TokenRequestFailedDetails
-      details(GaiaConstants::kGaiaOAuth2LoginRefreshToken, error);
-  fetcher_->Observe(
-      chrome::NOTIFICATION_TOKEN_REQUEST_FAILED,
-      content::Source<TokenService>(service()),
-      content::Details<const TokenService::TokenRequestFailedDetails>(
-          &details));
+  fetcher_->OnGetTokenFailure(NULL, error);
   EXPECT_EQ(1, consumer_.nb_error_);
-  fetcher_->OnOAuthError();
-  EXPECT_EQ(2, consumer_.nb_error_);
-  fetcher_->OnNetworkError(401);
-  EXPECT_EQ(3, consumer_.nb_error_);
+  EXPECT_EQ(0, consumer_.nb_correct_token_);
+}
+
+TEST_F(UbertokenFetcherTest, FailureToGetAccessToken) {
+  GoogleServiceAuthError error(GoogleServiceAuthError::USER_NOT_SIGNED_UP);
+
+  service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
+                                   "refreshToken");
+  fetcher_->StartFetchingToken();
+  fetcher_->OnGetTokenFailure(NULL, error);
+
+  EXPECT_EQ(1, consumer_.nb_error_);
+  EXPECT_EQ(0, consumer_.nb_correct_token_);
+  EXPECT_EQ("", consumer_.last_token_);
+}
+
+TEST_F(UbertokenFetcherTest, FailureToGetUberToken) {
+  GoogleServiceAuthError error(GoogleServiceAuthError::USER_NOT_SIGNED_UP);
+
+  service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
+                                   "refreshToken");
+  fetcher_->StartFetchingToken();
+  fetcher_->OnGetTokenSuccess(NULL, "accessToken", base::Time());
   fetcher_->OnUberAuthTokenFailure(error);
-  EXPECT_EQ(4, consumer_.nb_error_);
+
+  EXPECT_EQ(1, consumer_.nb_error_);
+  EXPECT_EQ(0, consumer_.nb_correct_token_);
+  EXPECT_EQ("", consumer_.last_token_);
 }
diff --git a/chrome/browser/ui/app_list/search/webstore_provider.cc b/chrome/browser/ui/app_list/search/webstore_provider.cc
index 479ded0..761cee0 100644
--- a/chrome/browser/ui/app_list/search/webstore_provider.cc
+++ b/chrome/browser/ui/app_list/search/webstore_provider.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/metrics/field_trial.h"
+#include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
@@ -16,6 +17,7 @@
 #include "chrome/browser/ui/app_list/search/webstore_result.h"
 #include "chrome/browser/ui/app_list/search/webstore_search_fetcher.h"
 #include "chrome/common/extensions/extension_constants.h"
+#include "chrome/common/url_constants.h"
 #include "url/gurl.h"
 
 namespace app_list {
@@ -34,6 +36,49 @@
   return base::FieldTrialList::FindFullName(kFieldTrialName) == kEnable;
 }
 
+// Returns whether or not the user's input string, |query|, might contain any
+// sensitive information, based purely on its value and not where it came from.
+bool IsSensitiveInput(const string16& query) {
+  const GURL query_as_url(query);
+  if (!query_as_url.is_valid())
+    return false;
+
+  // The input can be interpreted as a URL. Check to see if it is potentially
+  // sensitive. (Code shamelessly copied from search_provider.cc's
+  // IsQuerySuitableForSuggest function.)
+
+  // First we check the scheme: if this looks like a URL with a scheme that is
+  // file, we shouldn't send it. Sending such things is a waste of time and a
+  // disclosure of potentially private, local data. If the scheme is OK, we
+  // still need to check other cases below.
+  if (LowerCaseEqualsASCII(query_as_url.scheme(), chrome::kFileScheme))
+    return true;
+
+  // Don't send URLs with usernames, queries or refs. Some of these are
+  // private, and the Suggest server is unlikely to have any useful results
+  // for any of them. Also don't send URLs with ports, as we may initially
+  // think that a username + password is a host + port (and we don't want to
+  // send usernames/passwords), and even if the port really is a port, the
+  // server is once again unlikely to have and useful results.
+  if (!query_as_url.username().empty() ||
+      !query_as_url.port().empty() ||
+      !query_as_url.query().empty() ||
+      !query_as_url.ref().empty()) {
+    return true;
+  }
+
+  // Don't send anything for https except the hostname. Hostnames are OK
+  // because they are visible when the TCP connection is established, but the
+  // specific path may reveal private information.
+  if (LowerCaseEqualsASCII(query_as_url.scheme(), chrome::kHttpsScheme) &&
+      !query_as_url.path().empty() &&
+      query_as_url.path() != "/") {
+    return true;
+  }
+
+  return false;
+}
+
 }  // namespace
 
 WebstoreProvider::WebstoreProvider(Profile* profile,
@@ -44,6 +89,13 @@
 WebstoreProvider::~WebstoreProvider() {}
 
 void WebstoreProvider::Start(const base::string16& query) {
+  ClearResults();
+
+  // If |query| contains sensitive data, bail out and do not create the place
+  // holder "search-web-store" result.
+  if (IsSensitiveInput(query))
+    return;
+
   const std::string query_utf8 = UTF16ToUTF8(query);
 
   if (UseWebstoreSearch()) {
@@ -59,7 +111,6 @@
 
   // Add a placeholder result which when clicked will run the user's query in a
   // browser. This placeholder is removed when the search results arrive.
-  ClearResults();
   Add(scoped_ptr<ChromeSearchResult>(
       new SearchWebstoreResult(profile_, query_utf8)).Pass());
 }
diff --git a/chrome/browser/ui/app_list/search/webstore_provider_browsertest.cc b/chrome/browser/ui/app_list/search/webstore_provider_browsertest.cc
index b60133a..ced21f4 100644
--- a/chrome/browser/ui/app_list/search/webstore_provider_browsertest.cc
+++ b/chrome/browser/ui/app_list/search/webstore_provider_browsertest.cc
@@ -189,5 +189,26 @@
   }
 }
 
+IN_PROC_BROWSER_TEST_F(WebstoreProviderTest, NoSearchForSensitiveData) {
+  // None of the following input strings should be accepted because they may
+  // contain private data.
+  const char* inputs[] = {
+    // file: scheme is bad.
+    "file://filename",
+    "FILE://filename",
+    // URLs with usernames, ports, queries or refs are bad.
+    "http://username:password@hostname/",
+    "http://www.example.com:1000",
+    "http://foo:1000",
+    "http://hostname/?query=q",
+    "http://hostname/path#ref",
+    // A https URL with path is bad.
+    "https://hostname/path",
+  };
+
+  for (size_t i = 0; i < arraysize(inputs); ++i)
+    EXPECT_EQ("", RunQuery(inputs[i], ""));
+}
+
 }  // namespace test
 }  // namespace app_list
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
index 2fe7f2f..38c6905 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
@@ -101,6 +101,9 @@
 // HSL shift to gray out an image.
 const color_utils::HSL kGrayImageShift = {-1, 0, 0.8};
 
+// Limit Wallet items refresh rate to at most once per minute.
+const int kWalletItemsRefreshRateSeconds = 60;
+
 // Returns true if |card_type| is supported by Wallet.
 bool IsWalletSupportedCard(const std::string& card_type) {
   return card_type == autofill::kVisaCard ||
@@ -643,6 +646,17 @@
     view_->Hide();
 }
 
+void AutofillDialogControllerImpl::TabActivated() {
+  // If the user switched away from this tab and then switched back, reload the
+  // Wallet items, in case they've changed.
+  int seconds_elapsed_since_last_refresh =
+      (base::TimeTicks::Now() - last_wallet_items_fetch_timestamp_).InSeconds();
+  if (IsPayingWithWallet() && wallet_items_ &&
+      seconds_elapsed_since_last_refresh >= kWalletItemsRefreshRateSeconds) {
+    GetWalletItems();
+  }
+}
+
 void AutofillDialogControllerImpl::OnAutocheckoutError() {
   DCHECK_EQ(AUTOCHECKOUT_IN_PROGRESS, autocheckout_state_);
   GetMetricLogger().LogAutocheckoutDuration(
@@ -901,7 +915,15 @@
 }
 
 void AutofillDialogControllerImpl::GetWalletItems() {
+  if (wallet_items_) {
+    previously_selected_instrument_id_ = ActiveInstrument()->object_id();
+    previously_selected_shipping_address_id_ =
+        ActiveShippingAddress()->object_id();
+  }
+
+  last_wallet_items_fetch_timestamp_ = base::TimeTicks::Now();
   wallet_items_.reset();
+
   // The "Loading..." page should be showing now, which should cause the
   // account chooser to hide.
   view_->UpdateAccountChooser();
@@ -2092,6 +2114,10 @@
       GURL settings_url(chrome::kChromeUISettingsURL);
       url = settings_url.Resolve(chrome::kAutofillSubPage);
     } else {
+      // Reset |last_wallet_items_fetch_timestamp_| to ensure that the Wallet
+      // data is refreshed as soon as the user switches back to this tab after
+      // potentially editing his data.
+      last_wallet_items_fetch_timestamp_ = base::TimeTicks();
       url = SectionForSuggestionsMenuModel(*model) == SECTION_SHIPPING ?
           wallet::GetManageAddressesUrl() : wallet::GetManageInstrumentsUrl();
     }
@@ -2489,9 +2515,14 @@
           addresses[i]->DisplayName(),
           addresses[i]->DisplayNameDetail());
 
-      if (addresses[i]->object_id() == wallet_items_->default_address_id())
+      const std::string default_shipping_address_id =
+          !previously_selected_shipping_address_id_.empty() ?
+              previously_selected_shipping_address_id_ :
+              wallet_items_->default_address_id();
+      if (addresses[i]->object_id() == default_shipping_address_id)
         suggested_shipping_.SetCheckedItem(key);
     }
+    previously_selected_shipping_address_id_.clear();
 
     if (!IsSubmitPausedOn(wallet::VERIFY_CVV)) {
       const std::vector<wallet::WalletItems::MaskedInstrument*>& instruments =
@@ -2519,12 +2550,16 @@
         if (allowed) {
           if (first_active_instrument_key.empty())
             first_active_instrument_key = key;
-          if (instruments[i]->object_id() ==
-              wallet_items_->default_instrument_id()) {
+
+          const std::string default_instrument_id =
+              !previously_selected_instrument_id_.empty() ?
+                  previously_selected_instrument_id_ :
+                  wallet_items_->default_instrument_id();
+          if (instruments[i]->object_id() == default_instrument_id)
             default_instrument_key = key;
-          }
         }
       }
+      previously_selected_instrument_id_.clear();
 
       // TODO(estade): this should have a URL sublabel.
       suggested_cc_billing_.AddKeyedItem(
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h
index 88e7429..7769189 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h
@@ -92,6 +92,10 @@
   void Show();
   void Hide();
 
+  // Called when the tab hosting this dialog is activated by a user gesture.
+  // Used to trigger a refresh of the user's Wallet data.
+  void TabActivated();
+
   // Adds a step in the flow to the Autocheckout UI.
   void AddAutocheckoutStep(AutocheckoutStepType step_type);
 
@@ -597,6 +601,15 @@
   scoped_ptr<wallet::WalletItems> wallet_items_;
   scoped_ptr<wallet::FullWallet> full_wallet_;
 
+  // The last active instrument and shipping address object ids. These
+  // variables are only set (i.e. non-empty) when the Wallet items are being
+  // re-fetched.
+  std::string previously_selected_instrument_id_;
+  std::string previously_selected_shipping_address_id_;
+
+  // When the Wallet items were last fetched.
+  base::TimeTicks last_wallet_items_fetch_timestamp_;
+
   // Local machine signals to pass along on each request to trigger (or
   // discourage) risk challenges; sent if the user is up to date on legal docs.
   std::string risk_data_;
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
index a647868..51f2d16 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
@@ -2284,4 +2284,59 @@
   controller()->ViewClosed();
 }
 
+TEST_F(AutofillDialogControllerTest, ReloadWalletItemsOnActivation) {
+  // Switch into Wallet mode and initialize some Wallet data.
+  SwitchToWallet();
+
+  scoped_ptr<wallet::WalletItems> wallet_items = wallet::GetTestWalletItems();
+  wallet_items->AddInstrument(wallet::GetTestMaskedInstrument());
+  wallet_items->AddInstrument(wallet::GetTestNonDefaultMaskedInstrument());
+  wallet_items->AddAddress(wallet::GetTestNonDefaultShippingAddress());
+  wallet_items->AddAddress(wallet::GetTestShippingAddress());
+  controller()->OnDidGetWalletItems(wallet_items.Pass());
+
+  // Initially, the default entries should be selected.
+  ui::MenuModel* cc_billing_model =
+      controller()->MenuModelForSection(SECTION_CC_BILLING);
+  ui::MenuModel* shipping_model =
+      controller()->MenuModelForSection(SECTION_SHIPPING);
+  // "add", "manage", and 2 suggestions.
+  ASSERT_EQ(4, cc_billing_model->GetItemCount());
+  EXPECT_TRUE(cc_billing_model->IsItemCheckedAt(0));
+  // "use billing", "add", "manage", and 2 suggestions.
+  ASSERT_EQ(5, shipping_model->GetItemCount());
+  EXPECT_TRUE(shipping_model->IsItemCheckedAt(2));
+
+  // Select entries other than the defaults.
+  cc_billing_model->ActivatedAt(1);
+  shipping_model->ActivatedAt(1);
+  // "add", "manage", and 2 suggestions.
+  ASSERT_EQ(4, cc_billing_model->GetItemCount());
+  EXPECT_TRUE(cc_billing_model->IsItemCheckedAt(1));
+  // "use billing", "add", "manage", and 2 suggestions.
+  ASSERT_EQ(5, shipping_model->GetItemCount());
+  EXPECT_TRUE(shipping_model-> IsItemCheckedAt(1));
+
+  // Simulate switching away from the tab and back.  This should issue a request
+  // for wallet items.
+  EXPECT_CALL(*controller()->GetTestingWalletClient(), GetWalletItems(_));
+  controller()->TabActivated();
+
+  // Simulate a response that includes different items.
+  wallet_items = wallet::GetTestWalletItems();
+  wallet_items->AddInstrument(wallet::GetTestMaskedInstrumentExpired());
+  wallet_items->AddInstrument(wallet::GetTestMaskedInstrument());
+  wallet_items->AddInstrument(wallet::GetTestNonDefaultMaskedInstrument());
+  wallet_items->AddAddress(wallet::GetTestNonDefaultShippingAddress());
+  controller()->OnDidGetWalletItems(wallet_items.Pass());
+
+  // The previously selected entries should still be selected.
+  // "add", "manage", and 3 suggestions.
+  ASSERT_EQ(5, cc_billing_model->GetItemCount());
+  EXPECT_TRUE(cc_billing_model->IsItemCheckedAt(2));
+  // "use billing", "add", "manage", and 1 suggestion.
+  ASSERT_EQ(4, shipping_model->GetItemCount());
+  EXPECT_TRUE(shipping_model->IsItemCheckedAt(1));
+}
+
 }  // namespace autofill
diff --git a/chrome/browser/ui/autofill/tab_autofill_manager_delegate.cc b/chrome/browser/ui/autofill/tab_autofill_manager_delegate.cc
index 44603d9..00007ba 100644
--- a/chrome/browser/ui/autofill/tab_autofill_manager_delegate.cc
+++ b/chrome/browser/ui/autofill/tab_autofill_manager_delegate.cc
@@ -19,6 +19,7 @@
 #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/tabs/tab_strip_model_observer.h"
 #include "chrome/common/url_constants.h"
 #include "components/autofill/content/browser/autofill_driver_impl.h"
 #include "components/autofill/core/common/autofill_pref_names.h"
@@ -46,6 +47,14 @@
   DCHECK(!popup_controller_);
 }
 
+void TabAutofillManagerDelegate::TabActivated(int reason) {
+  if (reason != TabStripModelObserver::CHANGE_REASON_USER_GESTURE)
+    return;
+
+  if (dialog_controller_.get())
+    dialog_controller_->TabActivated();
+}
+
 PersonalDataManager* TabAutofillManagerDelegate::GetPersonalDataManager() {
   Profile* profile =
       Profile::FromBrowserContext(web_contents_->GetBrowserContext());
diff --git a/chrome/browser/ui/autofill/tab_autofill_manager_delegate.h b/chrome/browser/ui/autofill/tab_autofill_manager_delegate.h
index 75879bd..004a0bb 100644
--- a/chrome/browser/ui/autofill/tab_autofill_manager_delegate.h
+++ b/chrome/browser/ui/autofill/tab_autofill_manager_delegate.h
@@ -37,6 +37,9 @@
  public:
   virtual ~TabAutofillManagerDelegate();
 
+  // Called when the tab corresponding to |this| instance is activated.
+  void TabActivated(int reason);
+
   // AutofillManagerDelegate implementation.
   virtual PersonalDataManager* GetPersonalDataManager() OVERRIDE;
   virtual PrefService* GetPrefs() OVERRIDE;
diff --git a/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc b/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
index c248a37..2c12189 100644
--- a/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
+++ b/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
@@ -262,10 +262,10 @@
 
   // Launch the blocked popup.
   EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
-  IDMap<chrome::NavigateParams, IDMapOwnPointer>::const_iterator iter(
-      &popup_blocker_helper->GetBlockedPopupRequests());
-  ASSERT_FALSE(iter.IsAtEnd());
-  popup_blocker_helper->ShowBlockedPopup(iter.GetCurrentKey());
+  std::map<int32, GURL> blocked_requests =
+      popup_blocker_helper->GetBlockedPopupRequests();
+  std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
+  popup_blocker_helper->ShowBlockedPopup(iter->first);
 
   observer.Wait();
 }
@@ -299,10 +299,10 @@
   PopupBlockerTabHelper* popup_blocker_helper =
       PopupBlockerTabHelper::FromWebContents(web_contents);
   EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
-  IDMap<chrome::NavigateParams, IDMapOwnPointer>::const_iterator iter(
-      &popup_blocker_helper->GetBlockedPopupRequests());
-  ASSERT_FALSE(iter.IsAtEnd());
-  popup_blocker_helper->ShowBlockedPopup(iter.GetCurrentKey());
+  std::map<int32, GURL> blocked_requests =
+      popup_blocker_helper->GetBlockedPopupRequests();
+  std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
+  popup_blocker_helper->ShowBlockedPopup(iter->first);
 
   observer.Wait();
 }
@@ -336,10 +336,10 @@
   PopupBlockerTabHelper* popup_blocker_helper =
       PopupBlockerTabHelper::FromWebContents(web_contents);
   EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
-  IDMap<chrome::NavigateParams, IDMapOwnPointer>::const_iterator iter(
-      &popup_blocker_helper->GetBlockedPopupRequests());
-  ASSERT_FALSE(iter.IsAtEnd());
-  popup_blocker_helper->ShowBlockedPopup(iter.GetCurrentKey());
+  std::map<int32, GURL> blocked_requests =
+      popup_blocker_helper->GetBlockedPopupRequests();
+  std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
+  popup_blocker_helper->ShowBlockedPopup(iter->first);
 
   observer.Wait();
   Browser* new_browser = browser_observer.WaitForSingleNewBrowser();
@@ -380,10 +380,54 @@
   PopupBlockerTabHelper* popup_blocker_helper =
       PopupBlockerTabHelper::FromWebContents(web_contents);
   EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
-  IDMap<chrome::NavigateParams, IDMapOwnPointer>::const_iterator iter(
-      &popup_blocker_helper->GetBlockedPopupRequests());
-  ASSERT_FALSE(iter.IsAtEnd());
-  popup_blocker_helper->ShowBlockedPopup(iter.GetCurrentKey());
+  std::map<int32, GURL> blocked_requests =
+      popup_blocker_helper->GetBlockedPopupRequests();
+  std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
+  popup_blocker_helper->ShowBlockedPopup(iter->first);
+
+  observer.Wait();
+  Browser* new_browser = browser_observer.WaitForSingleNewBrowser();
+
+  // Check that the referrer was correctly set.
+  web_contents = new_browser->tab_strip_model()->GetActiveWebContents();
+  base::string16 expected_title(base::ASCIIToUTF16("PASS"));
+  content::TitleWatcher title_watcher(web_contents, expected_title);
+  EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
+}
+
+IN_PROC_BROWSER_TEST_F(BetterPopupBlockerBrowserTest, WindowFeaturesBarProps) {
+  GURL url(ui_test_utils::GetTestUrl(
+      base::FilePath(kTestDir),
+      base::FilePath(FILE_PATH_LITERAL("popup-windowfeatures.html"))));
+
+  CountRenderViewHosts counter;
+
+  ui_test_utils::NavigateToURL(browser(), url);
+
+  // If the popup blocker blocked the blank post, there should be only one tab.
+  EXPECT_EQ(1u, chrome::GetBrowserCount(browser()->profile(),
+                                        browser()->host_desktop_type()));
+  EXPECT_EQ(1, browser()->tab_strip_model()->count());
+  WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  EXPECT_EQ(url, web_contents->GetURL());
+
+  // And no new RVH created.
+  EXPECT_EQ(0, counter.GetRenderViewHostCreatedCount());
+
+  content::WindowedNotificationObserver observer(
+      chrome::NOTIFICATION_TAB_ADDED,
+      content::NotificationService::AllSources());
+  ui_test_utils::BrowserAddedObserver browser_observer;
+
+  // Launch the blocked popup.
+  PopupBlockerTabHelper* popup_blocker_helper =
+      PopupBlockerTabHelper::FromWebContents(web_contents);
+  EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
+  std::map<int32, GURL> blocked_requests =
+      popup_blocker_helper->GetBlockedPopupRequests();
+  std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
+  popup_blocker_helper->ShowBlockedPopup(iter->first);
 
   observer.Wait();
   Browser* new_browser = browser_observer.WaitForSingleNewBrowser();
diff --git a/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.cc b/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.cc
index 41b36ff..cc8077c 100644
--- a/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.cc
+++ b/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.cc
@@ -9,14 +9,27 @@
 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser_navigator.h"
+#include "chrome/common/render_messages.h"
 #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/web_contents.h"
 #include "content/public/browser/web_contents_delegate.h"
+#include "third_party/WebKit/public/web/WebWindowFeatures.h"
+
+using WebKit::WebWindowFeatures;
 
 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PopupBlockerTabHelper);
 
+struct PopupBlockerTabHelper::BlockedRequest {
+  BlockedRequest(const chrome::NavigateParams& params,
+                 const WebWindowFeatures& window_features)
+      : params(params), window_features(window_features) {}
+
+  chrome::NavigateParams params;
+  WebWindowFeatures window_features;
+};
+
 PopupBlockerTabHelper::PopupBlockerTabHelper(
     content::WebContents* web_contents)
     : content::WebContentsObserver(web_contents) {
@@ -49,7 +62,8 @@
 }
 
 bool PopupBlockerTabHelper::MaybeBlockPopup(
-    const chrome::NavigateParams& params) {
+    const chrome::NavigateParams& params,
+    const WebWindowFeatures& window_features) {
   // A page can't spawn popups (or do anything else, either) until its load
   // commits, so when we reach here, the popup was spawned by the
   // NavigationController's last committed entry, not the active entry.  For
@@ -69,7 +83,7 @@
           CONTENT_SETTING_ALLOW) {
     return false;
   } else {
-    blocked_popups_.Add(new chrome::NavigateParams(params));
+    blocked_popups_.Add(new BlockedRequest(params, window_features));
     TabSpecificContentSettings::FromWebContents(web_contents())->
         OnContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS, std::string());
     return true;
@@ -77,10 +91,14 @@
 }
 
 void PopupBlockerTabHelper::ShowBlockedPopup(int32 id) {
-  chrome::NavigateParams* params = blocked_popups_.Lookup(id);
-  if (!params)
+  BlockedRequest* popup = blocked_popups_.Lookup(id);
+  if (!popup)
     return;
-  chrome::Navigate(params);
+  chrome::Navigate(&popup->params);
+  if (popup->params.target_contents) {
+    popup->params.target_contents->Send(new ChromeViewMsg_SetWindowFeatures(
+        popup->params.target_contents->GetRoutingID(), popup->window_features));
+  }
   blocked_popups_.Remove(id);
   if (blocked_popups_.IsEmpty())
     PopupNotificationVisibilityChanged(false);
@@ -90,7 +108,13 @@
   return blocked_popups_.size();
 }
 
-IDMap<chrome::NavigateParams, IDMapOwnPointer>&
-PopupBlockerTabHelper::GetBlockedPopupRequests() {
-  return blocked_popups_;
+std::map<int32, GURL> PopupBlockerTabHelper::GetBlockedPopupRequests() {
+  std::map<int32, GURL> result;
+  for (IDMap<BlockedRequest, IDMapOwnPointer>::const_iterator iter(
+           &blocked_popups_);
+       !iter.IsAtEnd();
+       iter.Advance()) {
+    result[iter.GetCurrentKey()] = iter.GetCurrentValue()->params.url;
+  }
+  return result;
 }
diff --git a/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h b/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h
index 1526054..9631742 100644
--- a/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h
+++ b/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h
@@ -5,13 +5,21 @@
 #ifndef CHROME_BROWSER_UI_BLOCKED_CONTENT_POPUP_BLOCKER_TAB_HELPER_H_
 #define CHROME_BROWSER_UI_BLOCKED_CONTENT_POPUP_BLOCKER_TAB_HELPER_H_
 
+#include <map>
+
 #include "base/id_map.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
 
 namespace chrome {
 struct NavigateParams;
-};
+}
+
+namespace WebKit {
+struct WebWindowFeatures;
+}
+
+class GURL;
 
 // Per-tab class to manage blocked popups.
 class PopupBlockerTabHelper
@@ -22,7 +30,8 @@
 
   // Returns true if the popup request defined by |params| should be blocked.
   // In that case, it is also added to the |blocked_contents_| container.
-  bool MaybeBlockPopup(const chrome::NavigateParams& params);
+  bool MaybeBlockPopup(const chrome::NavigateParams& params,
+                       const WebKit::WebWindowFeatures& window_features);
 
   // Creates the blocked popup with |popup_id|.
   void ShowBlockedPopup(int32 popup_id);
@@ -31,8 +40,7 @@
   size_t GetBlockedPopupsCount() const;
 
   // Returns the mapping from popup IDs to blocked popup requests.
-  IDMap<chrome::NavigateParams, IDMapOwnPointer>&
-  GetBlockedPopupRequests();
+  std::map<int32, GURL> GetBlockedPopupRequests();
 
   // content::WebContentsObserver overrides:
   virtual void DidNavigateMainFrame(
@@ -40,13 +48,15 @@
       const content::FrameNavigateParams& params) OVERRIDE;
 
  private:
-  explicit PopupBlockerTabHelper(content::WebContents* web_contents);
+  struct BlockedRequest;
   friend class content::WebContentsUserData<PopupBlockerTabHelper>;
 
+  explicit PopupBlockerTabHelper(content::WebContents* web_contents);
+
   // Called when the blocked popup notification is shown or hidden.
   void PopupNotificationVisibilityChanged(bool visible);
 
-  IDMap<chrome::NavigateParams, IDMapOwnPointer> blocked_popups_;
+  IDMap<BlockedRequest, IDMapOwnPointer> blocked_popups_;
 
   DISALLOW_COPY_AND_ASSIGN(PopupBlockerTabHelper);
 };
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 3020251..8fb374d 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -88,6 +88,7 @@
 #include "chrome/browser/themes/theme_service.h"
 #include "chrome/browser/themes/theme_service_factory.h"
 #include "chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.h"
+#include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h"
 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
 #include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h"
 #include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
@@ -1083,6 +1084,9 @@
   // This needs to be called after UpdateSearchState().
   if (instant_controller_)
     instant_controller_->ActiveTabChanged();
+
+  autofill::TabAutofillManagerDelegate::FromWebContents(new_contents)->
+      TabActivated(reason);
 }
 
 void Browser::TabMoved(WebContents* contents,
@@ -1289,8 +1293,10 @@
          params.disposition == NEW_BACKGROUND_TAB) &&
         !params.user_gesture && !CommandLine::ForCurrentProcess()->HasSwitch(
                                     switches::kDisablePopupBlocking)) {
-      if (popup_blocker_helper->MaybeBlockPopup(nav_params))
+      if (popup_blocker_helper->MaybeBlockPopup(nav_params,
+                                                WebWindowFeatures())) {
         return NULL;
+      }
     }
   }
 
@@ -1538,7 +1544,7 @@
     else
       nav_params.disposition = disposition;
 
-    return !popup_blocker_helper->MaybeBlockPopup(nav_params);
+    return !popup_blocker_helper->MaybeBlockPopup(nav_params, features);
   }
 
   return true;
diff --git a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
index b2bd578..c50ca8b 100644
--- a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
+++ b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
@@ -547,15 +547,13 @@
 void ContentSettingPopupBubbleModel::SetPopups() {
   if (CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kEnableBetterPopupBlocking)) {
-    IDMap<chrome::NavigateParams, IDMapOwnPointer>& blocked_popups =
+    std::map<int32, GURL> blocked_popups =
         PopupBlockerTabHelper::FromWebContents(web_contents())
             ->GetBlockedPopupRequests();
-    for (IDMap<chrome::NavigateParams, IDMapOwnPointer>::const_iterator
-             iter(&blocked_popups);
-         !iter.IsAtEnd();
-         iter.Advance()) {
-
-      std::string title(iter.GetCurrentValue()->url.spec());
+    for (std::map<int32, GURL>::const_iterator iter = blocked_popups.begin();
+         iter != blocked_popups.end();
+         ++iter) {
+      std::string title(iter->second.spec());
       // The popup may not have a valid URL.
       if (title.empty())
         title = l10n_util::GetStringUTF8(IDS_TAB_LOADING_TITLE);
@@ -563,7 +561,7 @@
           ui::ResourceBundle::GetSharedInstance().GetImageNamed(
               IDR_DEFAULT_FAVICON),
           title,
-          iter.GetCurrentKey());
+          iter->first);
       add_popup(popup_item);
     }
     return;
diff --git a/chrome/browser/ui/gesture_prefs_observer_factory_aura.cc b/chrome/browser/ui/gesture_prefs_observer_factory_aura.cc
index 7c593fa..73c59c8 100644
--- a/chrome/browser/ui/gesture_prefs_observer_factory_aura.cc
+++ b/chrome/browser/ui/gesture_prefs_observer_factory_aura.cc
@@ -55,7 +55,9 @@
       { prefs::kOverscrollVerticalThresholdComplete,
         OVERSCROLL_CONFIG_VERT_THRESHOLD_COMPLETE },
       { prefs::kOverscrollMinimumThresholdStart,
-        OVERSCROLL_CONFIG_MIN_THRESHOLD_START },
+        OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START },
+      { prefs::kOverscrollVerticalThresholdStart,
+        OVERSCROLL_CONFIG_VERT_THRESHOLD_START },
       { prefs::kOverscrollHorizontalResistThreshold,
         OVERSCROLL_CONFIG_HORIZ_RESIST_AFTER },
       { prefs::kOverscrollVerticalResistThreshold,
diff --git a/chrome/browser/ui/search/search_tab_helper.cc b/chrome/browser/ui/search/search_tab_helper.cc
index 1a226db..33e119b 100644
--- a/chrome/browser/ui/search/search_tab_helper.cc
+++ b/chrome/browser/ui/search/search_tab_helper.cc
@@ -195,8 +195,16 @@
 void SearchTabHelper::DetermineIfPageSupportsInstant() {
   Profile* profile =
       Profile::FromBrowserContext(web_contents_->GetBrowserContext());
-  if (!chrome::ShouldAssignURLToInstantRenderer(web_contents_->GetURL(),
-                                                profile)) {
+  // Use the underlying URL rather than the virtual URL when checking whether
+  // this navigation can land in the Instant process. Otherwise this check
+  // would fail if a URL like chrome://newtab is being rewritten to an Instant
+  // URL.
+  // TODO(samarth): actually check whether this WebContents is rendered in an
+  // Instant process rather than checking the URL.
+  const content::NavigationEntry* entry =
+      web_contents_->GetController().GetActiveEntry();
+  const GURL& current_url = entry ? entry->GetURL() : web_contents_->GetURL();
+  if (!chrome::ShouldAssignURLToInstantRenderer(current_url, profile)) {
     // The page is not in the Instant process. This page does not support
     // instant. If we send an IPC message to a page that is not in the Instant
     // process, it will never receive it and will never respond. Therefore,
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 918ae0f..072885c 100644
--- a/chrome/browser/ui/search_engines/template_url_table_model.cc
+++ b/chrome/browser/ui/search_engines/template_url_table_model.cc
@@ -252,14 +252,7 @@
   template_url_service_->RemoveObserver(this);
   TemplateURL* template_url = GetTemplateURL(index);
 
-  scoped_ptr<ModelEntry> entry(entries_[index]);
-  entries_.erase(entries_.begin() + index);
-  if (index < last_search_engine_index_)
-    --last_search_engine_index_;
-  if (index < last_other_engine_index_)
-    --last_other_engine_index_;
-  if (observer_)
-    observer_->OnItemsRemoved(index, 1);
+  scoped_ptr<ModelEntry> entry(RemoveEntry(index));
 
   // Make sure to remove from the table model first, otherwise the
   // TemplateURL would be freed.
@@ -280,13 +273,9 @@
   data.SetURL(url);
   TemplateURL* turl = new TemplateURL(template_url_service_->profile(), data);
   template_url_service_->Add(turl);
-  ModelEntry* entry = new ModelEntry(this, turl);
+  scoped_ptr<ModelEntry> entry(new ModelEntry(this, turl));
   template_url_service_->AddObserver(this);
-  entries_.insert(entries_.begin() + index, entry);
-  if (index <= last_other_engine_index_)
-    ++last_other_engine_index_;
-  if (observer_)
-    observer_->OnItemsAdded(index, 1);
+  AddEntry(index, entry.Pass());
 }
 
 void TemplateURLTableModel::ModifyTemplateURL(int index,
@@ -332,15 +321,9 @@
   if (index < last_search_engine_index_)
     return index;  // Already in the main group.
 
-  ModelEntry* current_entry = entries_[index];
-  entries_.erase(index + entries_.begin());
-  if (observer_)
-    observer_->OnItemsRemoved(index, 1);
-
+  scoped_ptr<ModelEntry> current_entry(RemoveEntry(index));
   const int new_index = last_search_engine_index_++;
-  entries_.insert(entries_.begin() + new_index, current_entry);
-  if (observer_)
-    observer_->OnItemsAdded(new_index, 1);
+  AddEntry(new_index, current_entry.Pass());
   return new_index;
 }
 
@@ -393,3 +376,23 @@
 void TemplateURLTableModel::OnTemplateURLServiceChanged() {
   Reload();
 }
+
+scoped_ptr<ModelEntry> TemplateURLTableModel::RemoveEntry(int index) {
+  scoped_ptr<ModelEntry> entry(entries_[index]);
+  entries_.erase(index + entries_.begin());
+  if (index < last_search_engine_index_)
+    --last_search_engine_index_;
+  if (index < last_other_engine_index_)
+    --last_other_engine_index_;
+  if (observer_)
+    observer_->OnItemsRemoved(index, 1);
+  return entry.Pass();
+}
+
+void TemplateURLTableModel::AddEntry(int index, scoped_ptr<ModelEntry> entry) {
+  entries_.insert(entries_.begin() + index, entry.release());
+  if (index <= last_other_engine_index_)
+    ++last_other_engine_index_;
+  if (observer_)
+    observer_->OnItemsAdded(index, 1);
+}
diff --git a/chrome/browser/ui/search_engines/template_url_table_model.h b/chrome/browser/ui/search_engines/template_url_table_model.h
index 5e00d97..864b48c 100644
--- a/chrome/browser/ui/search_engines/template_url_table_model.h
+++ b/chrome/browser/ui/search_engines/template_url_table_model.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "chrome/browser/search_engines/template_url_service_observer.h"
 #include "ui/base/models/table_model.h"
@@ -110,6 +111,12 @@
   // TemplateURLServiceObserver notification.
   virtual void OnTemplateURLServiceChanged() OVERRIDE;
 
+  // Removes the entry at |index| from |entries_| and returns the removed item.
+  scoped_ptr<ModelEntry> RemoveEntry(int index);
+
+  // Adds |entry| to |entries_| at |index| and takes ownership.
+  void AddEntry(int index, scoped_ptr<ModelEntry> entry);
+
   ui::TableModelObserver* observer_;
 
   // The entries.
diff --git a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
index a376e94..478abc6 100644
--- a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
+++ b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
@@ -33,6 +33,8 @@
 #include "ui/gfx/skia_util.h"
 #include "ui/views/background.h"
 #include "ui/views/border.h"
+#include "ui/views/bubble/bubble_border.h"
+#include "ui/views/bubble/bubble_frame_view.h"
 #include "ui/views/controls/button/blue_button.h"
 #include "ui/views/controls/button/checkbox.h"
 #include "ui/views/controls/button/image_button.h"
@@ -535,7 +537,6 @@
     : image_view_(new views::ImageView()),
       message_stack_(new views::View()),
       button_(new views::BlueButton(listener, string16())) {
-  set_border(views::Border::CreateEmptyBorder(12, 12, 12, 12));
   set_background(views::Background::CreateSolidBackground(GetNativeTheme()->
       GetSystemColor(ui::NativeTheme::kColorId_DialogBackground)));
 
@@ -620,8 +621,12 @@
   fade_out_.reset();
 }
 
+gfx::Insets AutofillDialogViews::OverlayView::GetInsets() const {
+  return gfx::Insets(12, 12, 12, 12);
+}
+
 void AutofillDialogViews::OverlayView::Layout() {
-  gfx::Rect bounds = GetContentsBounds();
+  gfx::Rect bounds = ContentBoundsSansBubbleBorder();
   if (!message_stack_->visible()) {
     image_view_->SetBoundsRect(bounds);
     return;
@@ -653,8 +658,9 @@
 void AutofillDialogViews::OverlayView::OnPaint(gfx::Canvas* canvas) {
   // BubbleFrameView doesn't mask the window, it just draws the border via
   // image assets. Match that rounding here.
-  static const SkScalar kCornerRadius = SkIntToScalar(2);
-  gfx::Rect rect = GetContentsBounds();
+  gfx::Rect rect = ContentBoundsSansBubbleBorder();
+  const SkScalar kCornerRadius = SkIntToScalar(
+      GetBubbleBorder() ? GetBubbleBorder()->GetBorderCornerRadius() : 2);
   gfx::Path window_mask;
   window_mask.addRoundRect(gfx::RectToSkRect(rect),
                            kCornerRadius, kCornerRadius);
@@ -706,6 +712,24 @@
   views::View::PaintChildren(canvas);
 }
 
+views::BubbleBorder* AutofillDialogViews::OverlayView::GetBubbleBorder() {
+  views::View* frame = GetWidget()->non_client_view()->frame_view();
+  std::string bubble_frame_view_name(views::BubbleFrameView::kViewClassName);
+  if (frame->GetClassName() == bubble_frame_view_name)
+    return static_cast<views::BubbleFrameView*>(frame)->bubble_border();
+  NOTREACHED();
+  return NULL;
+}
+
+gfx::Rect AutofillDialogViews::OverlayView::ContentBoundsSansBubbleBorder() {
+  gfx::Rect bounds = GetContentsBounds();
+  int bubble_width = 5;
+  if (GetBubbleBorder())
+    bubble_width = GetBubbleBorder()->GetBorderThickness();
+  bounds.Inset(bubble_width, bubble_width, bubble_width, bubble_width);
+  return bounds;
+}
+
 // AutofillDialogViews::NotificationArea ---------------------------------------
 
 AutofillDialogViews::NotificationArea::NotificationArea(
diff --git a/chrome/browser/ui/views/autofill/autofill_dialog_views.h b/chrome/browser/ui/views/autofill/autofill_dialog_views.h
index cae7ce1..27df407 100644
--- a/chrome/browser/ui/views/autofill/autofill_dialog_views.h
+++ b/chrome/browser/ui/views/autofill/autofill_dialog_views.h
@@ -35,6 +35,7 @@
 }
 
 namespace views {
+class BubbleBorder;
 class Checkbox;
 class Combobox;
 class FocusableBorder;
@@ -292,12 +293,19 @@
     virtual void AnimationEnded(const ui::Animation* animation) OVERRIDE;
 
     // views::View implementation:
+    virtual gfx::Insets GetInsets() const OVERRIDE;
     virtual void Layout() OVERRIDE;
     virtual const char* GetClassName() const OVERRIDE;
     virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
     virtual void PaintChildren(gfx::Canvas* canvas) OVERRIDE;
 
    private:
+    // Gets the border of the non-client frame view as a BubbleBorder.
+    views::BubbleBorder* GetBubbleBorder();
+
+    // Gets the bounds of this view without the frame view's bubble border.
+    gfx::Rect ContentBoundsSansBubbleBorder();
+
     // Child View. Front and center.
     views::ImageView* image_view_;
     // Child View. When visible, below |image_view_|.
diff --git a/chrome/browser/ui/views/avatar_menu_bubble_view.cc b/chrome/browser/ui/views/avatar_menu_bubble_view.cc
index 6119289..3089862 100644
--- a/chrome/browser/ui/views/avatar_menu_bubble_view.cc
+++ b/chrome/browser/ui/views/avatar_menu_bubble_view.cc
@@ -472,6 +472,7 @@
 
 // static
 AvatarMenuBubbleView* AvatarMenuBubbleView::avatar_bubble_ = NULL;
+bool AvatarMenuBubbleView::close_on_deactivate_ = true;
 
 // static
 void AvatarMenuBubbleView::ShowBubble(
@@ -487,6 +488,7 @@
   avatar_bubble_ = new AvatarMenuBubbleView(
       anchor_view, arrow, anchor_rect, browser);
   views::BubbleDelegateView::CreateBubble(avatar_bubble_);
+  avatar_bubble_->set_close_on_deactivate(close_on_deactivate_);
   avatar_bubble_->SetBackgroundColors();
   avatar_bubble_->SetAlignment(border_alignment);
   avatar_bubble_->GetWidget()->Show();
diff --git a/chrome/browser/ui/views/avatar_menu_bubble_view.h b/chrome/browser/ui/views/avatar_menu_bubble_view.h
index 29597b1..c49ae45 100644
--- a/chrome/browser/ui/views/avatar_menu_bubble_view.h
+++ b/chrome/browser/ui/views/avatar_menu_bubble_view.h
@@ -79,6 +79,13 @@
   virtual void OnAvatarMenuModelChanged(
       AvatarMenuModel* avatar_menu_model) OVERRIDE;
 
+  // We normally close the bubble any time it becomes inactive but this can lead
+  // to flaky tests where unexpected UI events are triggering this behavior.
+  // Tests should call this with "false" for more consistent operation.
+  static void set_close_on_deactiavte(bool close) {
+    close_on_deactivate_ = close;
+  }
+
  private:
   AvatarMenuBubbleView(views::View* anchor_view,
                        views::BubbleBorder::Arrow arrow,
@@ -118,6 +125,7 @@
   views::Link* switch_profile_link_;
 
   static AvatarMenuBubbleView* avatar_bubble_;
+  static bool close_on_deactivate_;
 
   // Is set to true if the managed user has clicked on Switch Users.
   bool expanded_;
diff --git a/chrome/browser/ui/views/avatar_menu_button_browsertest.cc b/chrome/browser/ui/views/avatar_menu_button_browsertest.cc
index c6e21b3..1a6c4ff1 100644
--- a/chrome/browser/ui/views/avatar_menu_button_browsertest.cc
+++ b/chrome/browser/ui/views/avatar_menu_button_browsertest.cc
@@ -96,6 +96,8 @@
   AvatarMenuButton* button = GetAvatarMenuButton();
   ASSERT_TRUE(button);
 
+  AvatarMenuBubbleView::set_close_on_deactiavte(false);
+  ProfileChooserView::set_close_on_deactiavte(false);
   static_cast<views::MenuButtonListener*>(button)->OnMenuButtonClicked(
       NULL, gfx::Point());
   base::MessageLoop::current()->RunUntilIdle();
diff --git a/chrome/browser/ui/views/profile_chooser_view.cc b/chrome/browser/ui/views/profile_chooser_view.cc
index f432e77..afcd69f 100644
--- a/chrome/browser/ui/views/profile_chooser_view.cc
+++ b/chrome/browser/ui/views/profile_chooser_view.cc
@@ -30,6 +30,7 @@
 
 // static
 ProfileChooserView* ProfileChooserView::profile_bubble_ = NULL;
+bool ProfileChooserView::close_on_deactivate_ = true;
 
 // static
 void ProfileChooserView::ShowBubble(
@@ -45,6 +46,7 @@
   profile_bubble_ = new ProfileChooserView(
       anchor_view, arrow, anchor_rect, browser);
   views::BubbleDelegateView::CreateBubble(profile_bubble_);
+  profile_bubble_->set_close_on_deactivate(close_on_deactivate_);
   profile_bubble_->SetAlignment(border_alignment);
   profile_bubble_->GetWidget()->Show();
 }
diff --git a/chrome/browser/ui/views/profile_chooser_view.h b/chrome/browser/ui/views/profile_chooser_view.h
index 54dcb43..eb33739 100644
--- a/chrome/browser/ui/views/profile_chooser_view.h
+++ b/chrome/browser/ui/views/profile_chooser_view.h
@@ -43,6 +43,13 @@
   static bool IsShowing();
   static void Hide();
 
+  // We normally close the bubble any time it becomes inactive but this can lead
+  // to flaky tests where unexpected UI events are triggering this behavior.
+  // Tests should call this with "false" for more consistent operation.
+  static void set_close_on_deactiavte(bool close) {
+    close_on_deactivate_ = close;
+  }
+
  private:
   friend class AvatarMenuButtonTest;
   FRIEND_TEST_ALL_PREFIXES(AvatarMenuButtonTest, NewSignOut);
@@ -72,6 +79,7 @@
       AvatarMenuModel* avatar_menu_model) OVERRIDE;
 
   static ProfileChooserView* profile_bubble_;
+  static bool close_on_deactivate_;
 
   views::View* CreateProfileImageView(const gfx::Image& icon, int side);
   views::View* CreateProfileCardView(size_t avatar_to_show);
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 bd4df7a..8abb284 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
@@ -87,7 +87,9 @@
 }
 
 void ChromeWebContentsViewDelegateViews::TakeFocus(bool reverse) {
-  GetFocusManager()->AdvanceFocus(reverse);
+  views::FocusManager* focus_manager = GetFocusManager();
+  if (focus_manager)
+    focus_manager->AdvanceFocus(reverse);
 }
 
 void ChromeWebContentsViewDelegateViews::StoreFocus() {
diff --git a/chrome/browser/ui/webui/chromeos/salsa_ui.cc b/chrome/browser/ui/webui/chromeos/salsa_ui.cc
index eb0bbf2..5d16335 100644
--- a/chrome/browser/ui/webui/chromeos/salsa_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/salsa_ui.cc
@@ -55,6 +55,7 @@
   prefs::kOverscrollHorizontalThresholdComplete,
   prefs::kOverscrollVerticalThresholdComplete,
   prefs::kOverscrollMinimumThresholdStart,
+  prefs::kOverscrollVerticalThresholdStart,
   prefs::kOverscrollHorizontalResistThreshold,
   prefs::kOverscrollVerticalResistThreshold,
   prefs::kImmersiveModeRevealDelayMs,
diff --git a/chrome/browser/ui/webui/identity_internals_ui.cc b/chrome/browser/ui/webui/identity_internals_ui.cc
index e575e49..3b0a167 100644
--- a/chrome/browser/ui/webui/identity_internals_ui.cc
+++ b/chrome/browser/ui/webui/identity_internals_ui.cc
@@ -19,6 +19,7 @@
 #include "content/public/browser/web_ui_controller.h"
 #include "content/public/browser/web_ui_data_source.h"
 #include "content/public/browser/web_ui_message_handler.h"
+#include "google_apis/gaia/gaia_auth_fetcher.h"
 #include "google_apis/gaia/gaia_constants.h"
 #include "grit/browser_resources.h"
 #include "grit/generated_resources.h"
diff --git a/chrome/browser/ui/webui/ntp/ntp_login_handler.cc b/chrome/browser/ui/webui/ntp/ntp_login_handler.cc
index a5c8050..f20351e 100644
--- a/chrome/browser/ui/webui/ntp/ntp_login_handler.cc
+++ b/chrome/browser/ui/webui/ntp/ntp_login_handler.cc
@@ -38,11 +38,11 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_ui.h"
+#include "content/public/common/page_zoom.h"
 #include "grit/chromium_strings.h"
 #include "grit/generated_resources.h"
 #include "net/base/escape.h"
 #include "skia/ext/image_operations.h"
-#include "third_party/WebKit/public/web/WebView.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/image/image.h"
@@ -164,8 +164,7 @@
     success = args->GetDouble(3, &height);
     DCHECK(success);
 
-    double zoom =
-        WebKit::WebView::zoomLevelToZoomFactor(web_contents->GetZoomLevel());
+    double zoom = content::ZoomLevelToZoomFactor(web_contents->GetZoomLevel());
     gfx::Rect rect(x * zoom, y * zoom, width * zoom, height * zoom);
 
     browser->window()->ShowAvatarBubble(web_ui()->GetWebContents(), rect);
diff --git a/chrome/browser/ui/webui/options/browser_options_handler.cc b/chrome/browser/ui/webui/options/browser_options_handler.cc
index 800b984..d6aed6a 100644
--- a/chrome/browser/ui/webui/options/browser_options_handler.cc
+++ b/chrome/browser/ui/webui/options/browser_options_handler.cc
@@ -79,7 +79,6 @@
 #include "grit/generated_resources.h"
 #include "grit/locale_settings.h"
 #include "grit/theme_resources.h"
-#include "third_party/WebKit/public/web/WebView.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/webui/web_ui_util.h"
@@ -1468,8 +1467,7 @@
 void BrowserOptionsHandler::HandleDefaultZoomFactor(const ListValue* args) {
   double zoom_factor;
   if (ExtractDoubleValue(args, &zoom_factor)) {
-    default_zoom_level_.SetValue(
-        WebKit::WebView::zoomFactorToZoomLevel(zoom_factor));
+    default_zoom_level_.SetValue(content::ZoomFactorToZoomLevel(zoom_factor));
   }
 }
 
@@ -1670,7 +1668,7 @@
   PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
   double default_zoom_level = pref_service->GetDouble(prefs::kDefaultZoomLevel);
   double default_zoom_factor =
-      WebKit::WebView::zoomLevelToZoomFactor(default_zoom_level);
+      content::ZoomLevelToZoomFactor(default_zoom_level);
 
   // Generate a vector of zoom factors from an array of known presets along with
   // the default factor added if necessary.
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 c8b991d..ad50697 100644
--- a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
+++ b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
@@ -1011,14 +1011,8 @@
 void InternetOptionsHandler::EnableCellularCallback(
     const base::ListValue* args) {
   NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler();
-  if (!handler->IsTechnologyEnabled(NetworkStateHandler::kMatchTypeMobile)) {
-    handler->SetTechnologyEnabled(
-        NetworkStateHandler::kMatchTypeMobile, true,
-        base::Bind(&ShillError, "EnableCellularCallback"));
-    return;
-  }
-  const DeviceState* device = handler->GetDeviceStateByType(
-      NetworkStateHandler::kMatchTypeMobile);
+  const DeviceState* device =
+      handler->GetDeviceStateByType(flimflam::kTypeCellular);
   if (!device) {
     LOG(ERROR) << "Mobile device not found.";
     return;
@@ -1028,6 +1022,12 @@
                                   SimDialogDelegate::SIM_DIALOG_UNLOCK);
     return;
   }
+  if (!handler->IsTechnologyEnabled(flimflam::kTypeCellular)) {
+    handler->SetTechnologyEnabled(
+        flimflam::kTypeCellular, true,
+        base::Bind(&ShillError, "EnableCellularCallback"));
+    return;
+  }
   if (device->IsSimAbsent()) {
     MobileConfig* config = MobileConfig::GetInstance();
     if (config->IsReady()) {
diff --git a/chrome/browser/ui/webui/options/reset_profile_settings_handler.cc b/chrome/browser/ui/webui/options/reset_profile_settings_handler.cc
index f28ec88..68ee2bb 100644
--- a/chrome/browser/ui/webui/options/reset_profile_settings_handler.cc
+++ b/chrome/browser/ui/webui/options/reset_profile_settings_handler.cc
@@ -28,6 +28,7 @@
 namespace options {
 
 ResetProfileSettingsHandler::ResetProfileSettingsHandler() {
+  google_util::GetBrand(&brandcode_);
 }
 
 ResetProfileSettingsHandler::~ResetProfileSettingsHandler() {
@@ -68,8 +69,8 @@
 
 void ResetProfileSettingsHandler::HandleResetProfileSettings(
     const ListValue* /*value*/) {
-  DCHECK(config_fetcher_);
-  if (config_fetcher_->IsActive()) {
+  DCHECK(brandcode_.empty() || config_fetcher_);
+  if (config_fetcher_ && config_fetcher_->IsActive()) {
     // Reset once the prefs are fetched.
     config_fetcher_->SetCallback(
         base::Bind(&ResetProfileSettingsHandler::ResetProfile,
@@ -84,11 +85,13 @@
 }
 
 void ResetProfileSettingsHandler::OnShowResetProfileDialog(const ListValue*) {
-  // TODO(vasilii): use a real request.
+  if (brandcode_.empty())
+    return;
   config_fetcher_.reset(new BrandcodeConfigFetcher(
       base::Bind(&ResetProfileSettingsHandler::OnSettingsFetched,
                  Unretained(this)),
-      GURL("https://tools.google.com/service/update2")));
+      GURL("https://tools.google.com/service/update2"),
+      brandcode_));
 }
 
 void ResetProfileSettingsHandler::OnSettingsFetched() {
@@ -100,13 +103,18 @@
 void ResetProfileSettingsHandler::ResetProfile() {
   DCHECK(resetter_);
   DCHECK(!resetter_->IsActive());
-  DCHECK(config_fetcher_);
-  DCHECK(!config_fetcher_->IsActive());
 
-  scoped_ptr<BrandcodedDefaultSettings> default_settings =
-      config_fetcher_->GetSettings();
-  config_fetcher_.reset();
-  // If we failed to fetch BrandcodedDefaultSettings, use default settings.
+  scoped_ptr<BrandcodedDefaultSettings> default_settings;
+  if (config_fetcher_) {
+    DCHECK(!config_fetcher_->IsActive());
+    default_settings = config_fetcher_->GetSettings();
+    config_fetcher_.reset();
+  } else {
+    DCHECK(brandcode_.empty());
+  }
+
+  // If failed to fetch BrandcodedDefaultSettings or this is an organic
+  // installation, use default settings.
   if (!default_settings)
     default_settings.reset(new BrandcodedDefaultSettings);
   resetter_->Reset(
diff --git a/chrome/browser/ui/webui/options/reset_profile_settings_handler.h b/chrome/browser/ui/webui/options/reset_profile_settings_handler.h
index 999b023..9431590 100644
--- a/chrome/browser/ui/webui/options/reset_profile_settings_handler.h
+++ b/chrome/browser/ui/webui/options/reset_profile_settings_handler.h
@@ -54,6 +54,9 @@
 
   scoped_ptr<BrandcodeConfigFetcher> config_fetcher_;
 
+  // Contains Chrome brand code; empty for organic Chrome.
+  std::string brandcode_;
+
   DISALLOW_COPY_AND_ASSIGN(ResetProfileSettingsHandler);
 };
 
diff --git a/chrome/browser/upgrade_detector_impl.cc b/chrome/browser/upgrade_detector_impl.cc
index 15602d4..0bfdbf5 100644
--- a/chrome/browser/upgrade_detector_impl.cc
+++ b/chrome/browser/upgrade_detector_impl.cc
@@ -14,6 +14,7 @@
 #include "base/memory/singleton.h"
 #include "base/metrics/field_trial.h"
 #include "base/path_service.h"
+#include "base/process/launch.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/browser_tests.isolate b/chrome/browser_tests.isolate
index 71bbb7b..9c9ad09 100644
--- a/chrome/browser_tests.isolate
+++ b/chrome/browser_tests.isolate
@@ -8,7 +8,7 @@
         'command': [
           '../testing/xvfb.py',
           '<(PRODUCT_DIR)',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '--use-less-jobs',
           '<(PRODUCT_DIR)/browser_tests<(EXECUTABLE_SUFFIX)',
         ],
@@ -41,6 +41,8 @@
         'isolate_dependency_tracked': [
           '../ppapi/tests/test_case.html',
           '../ppapi/tests/test_page.css',
+          '../tools/swarm_client/run_isolated.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '../testing/test_env.py',
           '<(PRODUCT_DIR)/browser_tests<(EXECUTABLE_SUFFIX)',
           '<(PRODUCT_DIR)/ppapi_nacl_tests_glibc.nmf',
@@ -68,7 +70,6 @@
           '../third_party/safe_browsing/',
           '../third_party/simplejson/',
           '../third_party/tlslite/',
-          '../tools/swarm_client/',
           '<(PRODUCT_DIR)/nacl_test_data/',
           '<(PRODUCT_DIR)/pnacl/',
           '<(PRODUCT_DIR)/pseudo_locales/',
@@ -125,7 +126,7 @@
       'variables': {
         'command': [
           '../testing/test_env.py',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '--use-less-jobs',
           '<(PRODUCT_DIR)/browser_tests<(EXECUTABLE_SUFFIX)',
         ],
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index 767a22a..b065db8 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -213,6 +213,7 @@
             '../third_party/icu/icu.gyp:icui18n',
             '../third_party/icu/icu.gyp:icuuc',
             '../third_party/leveldatabase/leveldatabase.gyp:leveldatabase',
+            '../third_party/libusb/libusb.gyp:libusb',
           ],
           'include_dirs': [
             '..',
@@ -247,6 +248,9 @@
               ],
             }],
             ['OS=="android"', {
+              'dependencies!': [
+                '../third_party/libusb/libusb.gyp:libusb',
+              ],
               'sources!': [
                 'browser/devtools/browser_list_tabcontents_provider.cc',
                 'browser/devtools/devtools_window.cc',
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 194f834..74ba444 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -320,6 +320,8 @@
         'browser/feedback/feedback_data.h',
         'browser/feedback/feedback_util.cc',
         'browser/feedback/feedback_util.h',
+        'browser/feedback/tracing_manager.cc',
+        'browser/feedback/tracing_manager.h',
         'browser/captive_portal/captive_portal_detector.cc',
         'browser/captive_portal/captive_portal_detector.h',
         'browser/captive_portal/captive_portal_login_detector.cc',
diff --git a/chrome/chrome_browser_chromeos.gypi b/chrome/chrome_browser_chromeos.gypi
index 3e713d7..0bdcfa9 100644
--- a/chrome/chrome_browser_chromeos.gypi
+++ b/chrome/chrome_browser_chromeos.gypi
@@ -320,6 +320,10 @@
         'browser/chromeos/extensions/default_app_order.h',
         'browser/chromeos/extensions/echo_private_api.cc',
         'browser/chromeos/extensions/echo_private_api.h',
+        'browser/chromeos/extensions/external_cache.cc',
+        'browser/chromeos/extensions/external_cache.h',
+        'browser/chromeos/extensions/external_pref_cache_loader.cc',
+        'browser/chromeos/extensions/external_pref_cache_loader.h',
         'browser/chromeos/extensions/file_manager/file_handler_util.cc',
         'browser/chromeos/extensions/file_manager/file_handler_util.h',
         'browser/chromeos/extensions/file_manager/file_manager_event_router.cc',
@@ -351,8 +355,6 @@
         'browser/chromeos/fileapi/file_system_backend.cc',
         'browser/chromeos/fileapi/file_system_backend.h',
         'browser/chromeos/fileapi/file_system_backend_delegate.h',
-        'browser/chromeos/fileapi/remote_file_system_operation.cc',
-        'browser/chromeos/fileapi/remote_file_system_operation.h',
         'browser/chromeos/imageburner/burn_controller.cc',
         'browser/chromeos/imageburner/burn_controller.h',
         'browser/chromeos/imageburner/burn_device_handler.cc',
@@ -856,12 +858,6 @@
             'browser/chromeos/extensions/input_method_api.h',
             'browser/chromeos/extensions/media_player_api.cc',
             'browser/chromeos/extensions/media_player_api.h',
-            'browser/chromeos/extensions/networking_private_api.cc',
-            'browser/chromeos/extensions/networking_private_api.h',
-            'browser/chromeos/extensions/networking_private_event_router.cc',
-            'browser/chromeos/extensions/networking_private_event_router.h',
-            'browser/chromeos/extensions/networking_private_event_router_factory.cc',
-            'browser/chromeos/extensions/networking_private_event_router_factory.h',
             'browser/chromeos/extensions/wallpaper_manager_util.cc',
             'browser/chromeos/extensions/wallpaper_manager_util.h',
             'browser/chromeos/extensions/wallpaper_private_api.cc',
diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi
index ba052bd..1d94b37 100644
--- a/chrome/chrome_browser_extensions.gypi
+++ b/chrome/chrome_browser_extensions.gypi
@@ -322,6 +322,13 @@
         'browser/extensions/api/music_manager_private/device_id_win.cc',
         'browser/extensions/api/music_manager_private/music_manager_private_api.cc',
         'browser/extensions/api/music_manager_private/music_manager_private_api.h',
+        'browser/extensions/api/networking_private/networking_private_api_chromeos.cc',
+        'browser/extensions/api/networking_private/networking_private_api_nonchromeos.cc',
+        'browser/extensions/api/networking_private/networking_private_api.h',
+        'browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc',
+        'browser/extensions/api/networking_private/networking_private_event_router.h',
+        'browser/extensions/api/networking_private/networking_private_event_router_factory.cc',
+        'browser/extensions/api/networking_private/networking_private_event_router_factory.h',
         'browser/extensions/api/notifications/notifications_api.cc',
         'browser/extensions/api/notifications/notifications_api.h',
         'browser/extensions/api/omnibox/omnibox_api.cc',
@@ -787,6 +794,7 @@
             'browser/extensions/api/audio/audio_service.cc',
             'browser/extensions/api/feedback_private/feedback_service_nonchromeos.cc',
             'browser/extensions/api/diagnostics/diagnostics_api_nonchromeos.cc',
+            'browser/extensions/api/networking_private/networking_private_api_nonchromeos.cc',
             'browser/extensions/default_apps.cc',
             'browser/extensions/default_apps.h',
           ],
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 84b38ff..e9f7274 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1201,7 +1201,6 @@
         'browser/chromeos/extensions/file_manager/file_manager_notifications_browsertest.cc',
         'browser/chromeos/extensions/info_private_apitest.cc',
         'browser/chromeos/extensions/input_method_apitest_chromeos.cc',
-        'browser/chromeos/extensions/networking_private_apitest.cc',
         'browser/chromeos/extensions/wallpaper_private_apitest.cc',
         'browser/chromeos/input_method/input_method_engine_ibus_browserttests.cc',
         'browser/chromeos/kiosk_mode/mock_kiosk_mode_settings.cc',
@@ -1316,6 +1315,7 @@
         'browser/extensions/api/metrics_private/metrics_apitest.cc',
         'browser/extensions/api/module/module_apitest.cc',
         'browser/extensions/api/music_manager_private/music_manager_private_browsertest.cc',
+        'browser/extensions/api/networking_private/networking_private_apitest.cc',
         'browser/extensions/api/notifications/notifications_apitest.cc',
         'browser/extensions/api/omnibox/omnibox_api_browsertest.cc',
         'browser/extensions/api/page_capture/page_capture_apitest.cc',
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 667c868..83d2ce9 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -302,6 +302,9 @@
 // Disables retrieval of PAC URLs from DHCP as per the WPAD standard.
 const char kDisableDhcpWpad[]               = "disable-dhcp-wpad";
 
+// Force-disables DNS probes on main frame DNS errors.
+const char kDisableDnsProbes[]              = "disable-dns-probes";
+
 // Disable extensions.
 const char kDisableExtensions[]             = "disable-extensions";
 
@@ -532,6 +535,10 @@
 // If true devtools experimental settings are enabled.
 const char kEnableDevToolsExperiments[]     = "enable-devtools-experiments";
 
+// Force-enables DNS probes on main frame DNS errors.  (The user must still
+// opt in to "Use web service to resolve navigation errors".)
+const char kEnableDnsProbes[]               = "enable-dns-probes";
+
 // Enables extensions to be easily installed from sites other than the web
 // store. Without this flag, they can still be installed, but must be manually
 // dragged onto chrome://extensions/.
@@ -865,6 +872,9 @@
 // app/extension ID given, and then prompt the user to download and install it.
 const char kInstallFromWebstore[]           = "install-from-webstore";
 
+// Causes Chrome to load this URL instead of chrome://newtab for New Tab pages.
+const char kInstantNewTabURL[]              = "instant-new-tab-url";
+
 // Marks a renderer as an Instant process.
 const char kInstantProcess[]                = "instant-process";
 
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 5b36cf6..9cb516b 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -94,6 +94,7 @@
 extern const char kDisableCustomJumpList[];
 extern const char kDisableDefaultApps[];
 extern const char kDisableDhcpWpad[];
+extern const char kDisableDnsProbes[];
 extern const char kDisableExtensionsFileAccessCheck[];
 extern const char kDisableExtensionsHttpThrottling[];
 extern const char kDisableExtensionsResourceWhitelist[];
@@ -157,6 +158,7 @@
 extern const char kEnableContacts[];
 extern const char kEnableDeviceDiscovery[];
 extern const char kEnableDevToolsExperiments[];
+extern const char kEnableDnsProbes[];
 extern const char kEnableExperimentalExtensionApis[];
 extern const char kEnableExtensionActivityLogging[];
 extern const char kEnableExtensionActivityLogTesting[];
@@ -239,6 +241,7 @@
 extern const char kIgnoreUrlFetcherCertRequests[];
 extern const char kIncognito[];
 extern const char kInstallFromWebstore[];
+extern const char kInstantNewTabURL[];
 extern const char kInstantProcess[];
 extern const char kKeepAliveForTest[];
 extern const char kKioskMode[];
diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/common/extensions/api/_permission_features.json
index 308af3c..b14833b 100644
--- a/chrome/common/extensions/api/_permission_features.json
+++ b/chrome/common/extensions/api/_permission_features.json
@@ -193,6 +193,10 @@
       "extension", "packaged_app"
     ]
   },
+  "downloads.open": {
+    "channel": "beta",
+    "extension_types": ["extension"]
+  },
   "dial": {
     "channel": "stable",
     "extension_types": ["extension"],
@@ -388,7 +392,7 @@
     ]
   },
   "musicManagerPrivate": {
-    "channel": "dev",
+    "channel": "stable",
     "extension_types": ["platform_app"],
     "whitelist": [
       "4B1D0E19C6C43C008C44A8278C8B5BFE15ABEB3C", // Music Manager
diff --git a/chrome/common/extensions/api/downloads.idl b/chrome/common/extensions/api/downloads.idl
index 75afceb..c427026 100644
--- a/chrome/common/extensions/api/downloads.idl
+++ b/chrome/common/extensions/api/downloads.idl
@@ -409,9 +409,10 @@
                             GetFileIconCallback callback);
 
     // Open the downloaded file now if the $ref:DownloadItem is complete;
-    // returns an error through $ref:runtime.lastError otherwise. An
-    // $ref:onChanged event will fire when the item is opened for the first
-    // time.
+    // returns an error through $ref:runtime.lastError otherwise. Requires the
+    // <code>"downloads.open"</code> permission in addition to the
+    // <code>"downloads"</code> permission. An $ref:onChanged event will fire
+    // when the item is opened for the first time.
     // |downloadId|: The identifier for the downloaded file.
     static void open(long downloadId);
 
diff --git a/chrome/common/extensions/api/networking_private.json b/chrome/common/extensions/api/networking_private.json
index 14640ef..39d0e97 100644
--- a/chrome/common/extensions/api/networking_private.json
+++ b/chrome/common/extensions/api/networking_private.json
@@ -7,9 +7,8 @@
     "namespace":"networkingPrivate",
     "description": "none",
     "compiler_options": {
-      "implemented_in": "chrome/browser/chromeos/extensions/networking_private_api.h"
+      "implemented_in": "chrome/browser/extensions/api/networking_private/networking_private_api.h"
     },
-    "platforms": ["chromeos"],
     "types" : [
       {
         "id": "NetworkProperties",
diff --git a/chrome/common/extensions/docs/templates/intros/downloads.html b/chrome/common/extensions/docs/templates/intros/downloads.html
index 552819e..1e576ba 100644
--- a/chrome/common/extensions/docs/templates/intros/downloads.html
+++ b/chrome/common/extensions/docs/templates/intros/downloads.html
@@ -1,27 +1,17 @@
 <h2 id='manifest'>Manifest</h2>
 
 <p> You must declare the 'downloads' permission in the <a
-href='manifest.html'>extension manifest</a> to use this API, along with <a
-href='declare_permissions.html'>host permissions</a> for any hosts that you
-may pass to $ref:downloads.download.</p>
+href='manifest.html'>extension manifest</a> to use this API.</p>
 
 <pre>{
   'name': 'My extension',
   ...
 <b>  'permissions': [
     'downloads',
-    '*://*.google.com'
   ]</b>,
   ...
 }</pre>
 
-<p>If the URL's hostname is not specified in the permissions, then 
-$ref:downloads.download will call its callback with a null
-<code>downloadId</code> and set the 
-$ref:runtime.lastError
-object to indicate that the extension does not have permission to access that
-hostname.</p>
-
 <h2 id='examples'>Examples</h2>
 
 <p>You can find simple examples of using the downloads module in the <a
diff --git a/chrome/common/extensions/permissions/api_permission.h b/chrome/common/extensions/permissions/api_permission.h
index d043f93..78e2238 100644
--- a/chrome/common/extensions/permissions/api_permission.h
+++ b/chrome/common/extensions/permissions/api_permission.h
@@ -68,6 +68,7 @@
     kDevtools,
     kDownloads,
     kDownloadsInternal,
+    kDownloadsOpen,
     kEchoPrivate,
     kEnterprisePlatformKeysPrivate,
     kExperimental,
diff --git a/chrome/common/extensions/permissions/chrome_api_permissions.cc b/chrome/common/extensions/permissions/chrome_api_permissions.cc
index a4558af..73779e8 100644
--- a/chrome/common/extensions/permissions/chrome_api_permissions.cc
+++ b/chrome/common/extensions/permissions/chrome_api_permissions.cc
@@ -50,6 +50,10 @@
     { APIPermission::kDownloads, "downloads", APIPermissionInfo::kFlagNone,
       IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS,
       PermissionMessage::kDownloads },
+    { APIPermission::kDownloadsOpen, "downloads.open",
+      APIPermissionInfo::kFlagNone,
+      IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS_OPEN,
+      PermissionMessage::kDownloadsOpen },
     { APIPermission::kIdentity, "identity" },
     { APIPermission::kExperimental, "experimental",
       APIPermissionInfo::kFlagCannotBeOptional },
diff --git a/chrome/common/extensions/permissions/permission_message.h b/chrome/common/extensions/permissions/permission_message.h
index 9098dc1..c87aaff 100644
--- a/chrome/common/extensions/permissions/permission_message.h
+++ b/chrome/common/extensions/permissions/permission_message.h
@@ -65,6 +65,7 @@
     kWebConnectable,
     kActivityLogPrivate,
     kBluetoothDevices,
+    kDownloadsOpen,
     kEnumBoundary,
   };
 
diff --git a/chrome/common/localized_error.cc b/chrome/common/localized_error.cc
index 136607a..3939e6f 100644
--- a/chrome/common/localized_error.cc
+++ b/chrome/common/localized_error.cc
@@ -529,6 +529,12 @@
   error_strings->SetString("heading",
       l10n_util::GetStringUTF16(options.heading_resource_id));
 
+  std::string icon_class = (error_code == net::ERR_INTERNET_DISCONNECTED &&
+                            error_domain == net::kErrorDomain)
+                               ? "icon-offline"
+                               : "icon-generic";
+  error_strings->SetString("iconClass", icon_class);
+
   base::DictionaryValue* summary = new base::DictionaryValue;
   summary->SetString("msg",
       l10n_util::GetStringUTF16(options.summary_resource_id));
diff --git a/chrome/common/net/net_error_info.cc b/chrome/common/net/net_error_info.cc
index e350b89..dd67c7d 100644
--- a/chrome/common/net/net_error_info.cc
+++ b/chrome/common/net/net_error_info.cc
@@ -2,8 +2,10 @@
 // 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/logging.h"
 #include "base/metrics/field_trial.h"
+#include "chrome/common/chrome_switches.h"
 #include "chrome/common/net/net_error_info.h"
 
 namespace chrome_common_net {
@@ -37,7 +39,14 @@
          status < DNS_PROBE_MAX;
 }
 
-bool DnsProbesEnabledByFieldTrial() {
+bool DnsProbesEnabled() {
+  CommandLine* command_line = CommandLine::ForCurrentProcess();
+
+  if (command_line->HasSwitch(switches::kDisableDnsProbes))
+    return false;
+  else if (command_line->HasSwitch(switches::kEnableDnsProbes))
+    return true;
+
   const char kDnsProbeFieldTrialName[] = "DnsProbe-Enable";
   const char kDnsProbeFieldTrialEnableGroupName[] = "enable";
 
diff --git a/chrome/common/net/net_error_info.h b/chrome/common/net/net_error_info.h
index ec9d816..44730c2 100644
--- a/chrome/common/net/net_error_info.h
+++ b/chrome/common/net/net_error_info.h
@@ -62,9 +62,10 @@
 // Returns true if |status| is one of the DNS_PROBE_FINISHED_* statuses.
 bool DnsProbeStatusIsFinished(DnsProbeStatus status);
 
-// Returns true if DNS probes are enabled (by the DnsProbe-Enable field trial),
-// or false if they are disabled or the field trial wasn't found.
-bool DnsProbesEnabledByFieldTrial();
+// Checks the --force-dns-probes command line option and the DnsProbe-Enable
+// field trial.  If the command-line option is found, return what it says,
+// otherwise return true if and only if the field trial has group "enabled".
+bool DnsProbesEnabled();
 
 // The error domain used to pass DNS probe statuses to the localized error
 // code.
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 1e8eaf7..56e3721 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -2455,6 +2455,8 @@
     "overscroll.vertical_threshold_complete";
 const char kOverscrollMinimumThresholdStart[] =
     "overscroll.minimum_threshold_start";
+const char kOverscrollVerticalThresholdStart[] =
+    "overscroll.vertical_threshold_start";
 const char kOverscrollHorizontalResistThreshold[] =
     "overscroll.horizontal_resist_threshold";
 const char kOverscrollVerticalResistThreshold[] =
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index e128646..f4c6cc6 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -904,6 +904,7 @@
 extern const char kOverscrollHorizontalThresholdComplete[];
 extern const char kOverscrollVerticalThresholdComplete[];
 extern const char kOverscrollMinimumThresholdStart[];
+extern const char kOverscrollVerticalThresholdStart[];
 extern const char kOverscrollHorizontalResistThreshold[];
 extern const char kOverscrollVerticalResistThreshold[];
 #endif
diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h
index b93e023..6001df2 100644
--- a/chrome/common/render_messages.h
+++ b/chrome/common/render_messages.h
@@ -374,6 +374,10 @@
                     content::TopControlsState /* current */,
                     bool /* animate */)
 
+// Updates the window features of the render view.
+IPC_MESSAGE_ROUTED1(ChromeViewMsg_SetWindowFeatures,
+                    WebKit::WebWindowFeatures /* window_features */)
+
 // JavaScript related messages -----------------------------------------------
 
 // Notify the JavaScript engine in the render to change its parameters
diff --git a/chrome/interactive_ui_tests.isolate b/chrome/interactive_ui_tests.isolate
index faaed83..554fdd0 100644
--- a/chrome/interactive_ui_tests.isolate
+++ b/chrome/interactive_ui_tests.isolate
@@ -8,7 +8,7 @@
         'command': [
           '../testing/xvfb.py',
           '<(PRODUCT_DIR)',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '-j1',
           '<(PRODUCT_DIR)/interactive_ui_tests<(EXECUTABLE_SUFFIX)',
         ],
@@ -33,8 +33,7 @@
           '../net/tools/testserver/testserver_base.py',
           '../testing/test_env.py',
           '../tools/swarm_client/run_isolated.py',
-          '../tools/swarm_client/run_test_cases.py',
-          '../tools/swarm_client/third_party/upload.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/interactive_ui_tests<(EXECUTABLE_SUFFIX)',
           '<(PRODUCT_DIR)/resources.pak',
         ],
@@ -44,9 +43,6 @@
           '../third_party/tlslite/tlslite/',
           'test/data/',
         ],
-        'isolate_dependency_touched': [
-          '../tools/swarm_client/third_party/__init__.py',
-        ],
       },
     }],
     ['OS=="linux" or OS=="win"', {
@@ -73,7 +69,7 @@
       'variables': {
         'command': [
           '../testing/test_env.py',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '-j1',
           '<(PRODUCT_DIR)/interactive_ui_tests<(EXECUTABLE_SUFFIX)',
         ],
diff --git a/chrome/renderer/chrome_render_process_observer.cc b/chrome/renderer/chrome_render_process_observer.cc
index f4a5f8b..282607c 100644
--- a/chrome/renderer/chrome_render_process_observer.cc
+++ b/chrome/renderer/chrome_render_process_observer.cc
@@ -18,7 +18,6 @@
 #include "base/metrics/statistics_recorder.h"
 #include "base/native_library.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/platform_thread.h"
 #include "chrome/common/child_process_logging.h"
diff --git a/chrome/renderer/chrome_render_view_observer.cc b/chrome/renderer/chrome_render_view_observer.cc
index fa9a76a..5d67159 100644
--- a/chrome/renderer/chrome_render_view_observer.cc
+++ b/chrome/renderer/chrome_render_view_observer.cc
@@ -72,6 +72,7 @@
 using WebKit::WebURLRequest;
 using WebKit::WebView;
 using WebKit::WebVector;
+using WebKit::WebWindowFeatures;
 using extensions::APIPermission;
 
 // Delay in milliseconds that we'll wait before capturing the page contents
@@ -221,6 +222,7 @@
     IPC_MESSAGE_HANDLER(ChromeViewMsg_UpdateTopControlsState,
                         OnUpdateTopControlsState)
 #endif
+    IPC_MESSAGE_HANDLER(ChromeViewMsg_SetWindowFeatures, OnSetWindowFeatures)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
 
@@ -297,6 +299,11 @@
 }
 #endif
 
+void ChromeRenderViewObserver::OnSetWindowFeatures(
+    const WebWindowFeatures& window_features) {
+  render_view()->GetWebView()->setWindowFeatures(window_features);
+}
+
 void ChromeRenderViewObserver::Navigate(const GURL& url) {
   // Execute cache clear operations that were postponed until a navigation
   // event (including tab reload).
diff --git a/chrome/renderer/chrome_render_view_observer.h b/chrome/renderer/chrome_render_view_observer.h
index ae1aac9..b97b6d4 100644
--- a/chrome/renderer/chrome_render_view_observer.h
+++ b/chrome/renderer/chrome_render_view_observer.h
@@ -33,6 +33,7 @@
 
 namespace WebKit {
 class WebView;
+struct WebWindowFeatures;
 }
 
 namespace safe_browsing {
@@ -138,6 +139,7 @@
                                 content::TopControlsState current,
                                 bool animate);
 #endif
+  void OnSetWindowFeatures(const WebKit::WebWindowFeatures& window_features);
 
   void CapturePageInfoLater(int page_id,
                             bool preliminary_capture,
diff --git a/chrome/renderer/media/chrome_webrtc_log_message_delegate_unittest.cc b/chrome/renderer/media/chrome_webrtc_log_message_delegate_unittest.cc
index 90fca67..e1f29a4 100644
--- a/chrome/renderer/media/chrome_webrtc_log_message_delegate_unittest.cc
+++ b/chrome/renderer/media/chrome_webrtc_log_message_delegate_unittest.cc
@@ -4,7 +4,7 @@
 
 #include <string>
 
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "chrome/common/partial_circular_buffer.h"
 #include "chrome/renderer/media/chrome_webrtc_log_message_delegate.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/renderer/net/net_error_helper.cc b/chrome/renderer/net/net_error_helper.cc
index 46a8e0e..5df8611 100644
--- a/chrome/renderer/net/net_error_helper.cc
+++ b/chrome/renderer/net/net_error_helper.cc
@@ -30,7 +30,6 @@
 using chrome_common_net::DnsProbeStatus;
 using chrome_common_net::DnsProbeStatusIsFinished;
 using chrome_common_net::DnsProbeStatusToString;
-using chrome_common_net::DnsProbesEnabledByFieldTrial;
 using content::RenderThread;
 using content::RenderView;
 using content::RenderViewObserver;
@@ -166,6 +165,7 @@
   return handled;
 }
 
+// static
 bool NetErrorHelper::GetErrorStringsForDnsProbe(
     WebKit::WebFrame* frame,
     const WebKit::WebURLError& error,
diff --git a/chrome/renderer/pepper/pepper_flash_drm_renderer_host.cc b/chrome/renderer/pepper/pepper_flash_drm_renderer_host.cc
index 26b6ef4..ca59c7e 100644
--- a/chrome/renderer/pepper/pepper_flash_drm_renderer_host.cc
+++ b/chrome/renderer/pepper/pepper_flash_drm_renderer_host.cc
@@ -5,7 +5,7 @@
 #include "chrome/renderer/pepper/pepper_flash_drm_renderer_host.h"
 
 #include "base/files/file_path.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "ppapi/c/pp_errors.h"
 #include "ppapi/host/dispatch_host_message.h"
@@ -46,7 +46,7 @@
 
 int32_t PepperFlashDRMRendererHost::OnGetVoucherFile(
     ppapi::host::HostMessageContext* context) {
-  webkit::ppapi::PluginInstance* plugin_instance =
+  content::PepperPluginInstance* plugin_instance =
       renderer_ppapi_host_->GetPluginInstance(pp_instance());
   if (!plugin_instance)
     return PP_ERROR_FAILED;
diff --git a/chrome/renderer/pepper/pepper_flash_fullscreen_host.cc b/chrome/renderer/pepper/pepper_flash_fullscreen_host.cc
index edeb06b..37bea81 100644
--- a/chrome/renderer/pepper/pepper_flash_fullscreen_host.cc
+++ b/chrome/renderer/pepper/pepper_flash_fullscreen_host.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/renderer/pepper/pepper_flash_fullscreen_host.h"
 
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "ppapi/c/pp_errors.h"
 #include "ppapi/host/dispatch_host_message.h"
@@ -39,7 +39,7 @@
 int32_t PepperFlashFullscreenHost::OnSetFullscreen(
     ppapi::host::HostMessageContext* context,
     bool fullscreen) {
-  webkit::ppapi::PluginInstance* plugin_instance =
+  content::PepperPluginInstance* plugin_instance =
       renderer_ppapi_host_->GetPluginInstance(pp_instance());
   if (plugin_instance) {
     plugin_instance->FlashSetFullscreen(fullscreen, true);
diff --git a/chrome/renderer/pepper/pepper_flash_renderer_host.cc b/chrome/renderer/pepper/pepper_flash_renderer_host.cc
index 37561ae..e305946 100644
--- a/chrome/renderer/pepper/pepper_flash_renderer_host.cc
+++ b/chrome/renderer/pepper/pepper_flash_renderer_host.cc
@@ -7,7 +7,7 @@
 #include <vector>
 
 #include "chrome/renderer/pepper/ppb_pdf_impl.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "ipc/ipc_message_macros.h"
@@ -89,7 +89,7 @@
 int32_t PepperFlashRendererHost::OnSetInstanceAlwaysOnTop(
     ppapi::host::HostMessageContext* host_context,
     bool on_top) {
-  webkit::ppapi::PluginInstance* plugin_instance =
+  content::PepperPluginInstance* plugin_instance =
       host_->GetPluginInstance(pp_instance());
   if (plugin_instance)
     plugin_instance->SetAlwaysOnTop(on_top);
@@ -206,8 +206,8 @@
     const ppapi::URLRequestInfoData& data,
     const std::string& target,
     bool from_user_action) {
-  // If our PluginInstance is already destroyed, just return a failure.
-  webkit::ppapi::PluginInstance* plugin_instance =
+  // If our PepperPluginInstance is already destroyed, just return a failure.
+  content::PepperPluginInstance* plugin_instance =
       host_->GetPluginInstance(pp_instance());
   if (!plugin_instance)
     return PP_ERROR_FAILED;
@@ -242,7 +242,7 @@
 int32_t PepperFlashRendererHost::OnIsRectTopmost(
     ppapi::host::HostMessageContext* host_context,
     const PP_Rect& rect) {
-  webkit::ppapi::PluginInstance* plugin_instance =
+  content::PepperPluginInstance* plugin_instance =
       host_->GetPluginInstance(pp_instance());
   if (plugin_instance && plugin_instance->IsRectTopmost(
       gfx::Rect(rect.point.x, rect.point.y,rect.size.width, rect.size.height)))
diff --git a/chrome/renderer/pepper/pepper_pdf_host.cc b/chrome/renderer/pepper/pepper_pdf_host.cc
index debaf9c..172b1bc 100644
--- a/chrome/renderer/pepper/pepper_pdf_host.cc
+++ b/chrome/renderer/pepper/pepper_pdf_host.cc
@@ -8,7 +8,7 @@
 #include "chrome/common/render_messages.h"
 #include "chrome/renderer/printing/print_web_view_helper.h"
 #include "content/public/common/referrer.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
@@ -38,8 +38,6 @@
 #include "ui/gfx/image/image_skia_rep.h"
 #include "ui/gfx/point.h"
 
-using webkit::ppapi::PluginInstance;
-
 namespace chrome {
 
 namespace {
@@ -179,7 +177,8 @@
 
 int32_t PepperPDFHost::OnHostMsgDidStartLoading(
     ppapi::host::HostMessageContext* context) {
-  PluginInstance* instance = host_->GetPluginInstance(pp_instance());
+  content::PepperPluginInstance* instance =
+      host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
   instance->GetRenderView()->DidStartLoading();
@@ -188,7 +187,8 @@
 
 int32_t PepperPDFHost::OnHostMsgDidStopLoading(
     ppapi::host::HostMessageContext* context) {
-  PluginInstance* instance = host_->GetPluginInstance(pp_instance());
+  content::PepperPluginInstance* instance =
+      host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
   instance->GetRenderView()->DidStopLoading();
@@ -197,7 +197,8 @@
 
 int32_t PepperPDFHost::OnHostMsgSetContentRestriction(
     ppapi::host::HostMessageContext* context, int restrictions) {
-  PluginInstance* instance = host_->GetPluginInstance(pp_instance());
+  content::PepperPluginInstance* instance =
+      host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
   instance->GetRenderView()->Send(
@@ -226,7 +227,8 @@
 
 int32_t PepperPDFHost::OnHostMsgHasUnsupportedFeature(
     ppapi::host::HostMessageContext* context) {
-  PluginInstance* instance = host_->GetPluginInstance(pp_instance());
+  content::PepperPluginInstance* instance =
+      host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
 
@@ -245,7 +247,8 @@
 int32_t PepperPDFHost::OnHostMsgPrint(
     ppapi::host::HostMessageContext* context) {
 #if defined(ENABLE_PRINTING)
-  PluginInstance* instance = host_->GetPluginInstance(pp_instance());
+  content::PepperPluginInstance* instance =
+      host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
 
@@ -265,7 +268,8 @@
 
 int32_t PepperPDFHost::OnHostMsgSaveAs(
     ppapi::host::HostMessageContext* context) {
-  PluginInstance* instance = host_->GetPluginInstance(pp_instance());
+  content::PepperPluginInstance* instance =
+      host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
   GURL url = instance->GetPluginURL();
diff --git a/chrome/renderer/pepper/pepper_shared_memory_message_filter.cc b/chrome/renderer/pepper/pepper_shared_memory_message_filter.cc
index a3af8ea..8aafd70 100644
--- a/chrome/renderer/pepper/pepper_shared_memory_message_filter.cc
+++ b/chrome/renderer/pepper/pepper_shared_memory_message_filter.cc
@@ -6,9 +6,9 @@
 
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/shared_memory.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "content/public/common/content_client.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "ppapi/host/ppapi_host.h"
@@ -55,7 +55,7 @@
 
   base::SharedMemoryHandle host_shm_handle;
   shm->ShareToProcess(base::GetCurrentProcessHandle(), &host_shm_handle);
-  *host_handle_id = webkit::ppapi::PluginInstance::Get(instance)->
+  *host_handle_id = content::PepperPluginInstance::Get(instance)->
       GetVarTracker()->TrackSharedMemoryHandle(instance, host_shm_handle, size);
 
   base::PlatformFile host_handle =
diff --git a/chrome/renderer/pepper/ppb_nacl_private_impl.cc b/chrome/renderer/pepper/ppb_nacl_private_impl.cc
index 7ffe277..2c8d603 100644
--- a/chrome/renderer/pepper/ppb_nacl_private_impl.cc
+++ b/chrome/renderer/pepper/ppb_nacl_private_impl.cc
@@ -18,7 +18,7 @@
 #include "content/public/common/content_client.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/common/sandbox_init.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
@@ -159,8 +159,8 @@
   InstanceInfo instance_info = it->second;
   map.erase(it);
 
-  webkit::ppapi::PluginInstance* plugin_instance =
-      webkit::ppapi::PluginInstance::Get(instance);
+  content::PepperPluginInstance* plugin_instance =
+      content::PepperPluginInstance::Get(instance);
   if (!plugin_instance) {
     DLOG(ERROR) << "GetInstance() failed";
     return PP_EXTERNAL_PLUGIN_ERROR_MODULE;
diff --git a/chrome/renderer/pepper/ppb_pdf_impl.cc b/chrome/renderer/pepper/ppb_pdf_impl.cc
index 0ac88b2..85e92e1 100644
--- a/chrome/renderer/pepper/ppb_pdf_impl.cc
+++ b/chrome/renderer/pepper/ppb_pdf_impl.cc
@@ -14,7 +14,7 @@
 #include "chrome/renderer/printing/print_web_view_helper.h"
 #include "content/public/common/child_process_sandbox_support_linux.h"
 #include "content/public/common/referrer.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
 #include "grit/webkit_resources.h"
@@ -38,7 +38,6 @@
 #include "ui/base/resource/resource_bundle.h"
 
 using ppapi::PpapiGlobals;
-using webkit::ppapi::PluginInstance;
 using WebKit::WebElement;
 using WebKit::WebView;
 using content::RenderThread;
@@ -134,7 +133,8 @@
 #if defined(ENABLE_PRINTING)
 
 WebKit::WebElement GetWebElement(PP_Instance instance_id) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return WebKit::WebElement();
   return instance->GetContainer()->element();
@@ -167,7 +167,8 @@
 
 PP_Var GetLocalizedString(PP_Instance instance_id,
                           PP_ResourceString string_id) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return PP_MakeUndefined();
 
@@ -193,7 +194,7 @@
     PP_PrivateFontCharset charset) {
 #if defined(OS_LINUX) || defined(OS_OPENBSD)
   // Validate the instance before using it below.
-  if (!PluginInstance::Get(instance_id))
+  if (!content::PepperPluginInstance::Get(instance_id))
     return 0;
 
   scoped_refptr<ppapi::StringVar> face_name(ppapi::StringVar::FromPPVar(
@@ -287,21 +288,24 @@
 }
 
 void DidStartLoading(PP_Instance instance_id) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return;
   instance->GetRenderView()->DidStartLoading();
 }
 
 void DidStopLoading(PP_Instance instance_id) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return;
   instance->GetRenderView()->DidStopLoading();
 }
 
 void SetContentRestriction(PP_Instance instance_id, int restrictions) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return;
   instance->GetRenderView()->Send(
@@ -321,7 +325,8 @@
 }
 
 void HasUnsupportedFeature(PP_Instance instance_id) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return;
 
@@ -336,7 +341,8 @@
 }
 
 void SaveAs(PP_Instance instance_id) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return;
   GURL url = instance->GetPluginURL();
@@ -373,7 +379,8 @@
     return 0;
 
   // Validate the instance.
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return 0;
 
diff --git a/chrome/renderer/printing/print_web_view_helper.cc b/chrome/renderer/printing/print_web_view_helper.cc
index 4e8d94b..5d68beb 100644
--- a/chrome/renderer/printing/print_web_view_helper.cc
+++ b/chrome/renderer/printing/print_web_view_helper.cc
@@ -12,7 +12,7 @@
 #include "base/logging.h"
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/renderer/printing/print_web_view_helper_linux.cc b/chrome/renderer/printing/print_web_view_helper_linux.cc
index 9b6b5c4..3bdf60c 100644
--- a/chrome/renderer/printing/print_web_view_helper_linux.cc
+++ b/chrome/renderer/printing/print_web_view_helper_linux.cc
@@ -19,7 +19,7 @@
 #include "third_party/WebKit/public/web/WebFrame.h"
 
 #if !defined(OS_CHROMEOS)
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #endif  // !defined(OS_CHROMEOS)
 
 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 d2a6da4..f2203f2 100644
--- a/chrome/renderer/printing/print_web_view_helper_win.cc
+++ b/chrome/renderer/printing/print_web_view_helper_win.cc
@@ -7,7 +7,7 @@
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/metrics/histogram.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/win/scoped_gdi_object.h"
 #include "base/win/scoped_hdc.h"
 #include "base/win/scoped_select_object.h"
diff --git a/chrome/renderer/resources/extensions/searchbox_api.js b/chrome/renderer/resources/extensions/searchbox_api.js
index 1acb05a..6bdb5ea 100644
--- a/chrome/renderer/resources/extensions/searchbox_api.js
+++ b/chrome/renderer/resources/extensions/searchbox_api.js
@@ -83,16 +83,24 @@
       function GetMostVisitedItemsWrapper() {
         var mostVisitedItems = GetMostVisitedItems();
         for (var i = 0, item; item = mostVisitedItems[i]; ++i) {
+          item.faviconUrl = GenerateFaviconURL(item.renderViewId, item.rid);
           // These properties are private data and should not be returned to
           // the page. They are only accessible via getMostVisitedItemData().
           item.url = null;
           item.title = null;
           item.domain = null;
           item.direction = null;
+          item.renderViewId = null;
         }
         return mostVisitedItems;
       }
 
+      function GenerateFaviconURL(renderViewId, rid) {
+        return "chrome-search://favicon/size/16@" +
+            window.devicePixelRatio + "x/" +
+            renderViewId + "/" + rid;
+      }
+
       // =======================================================================
       //                           Exported functions
       // =======================================================================
diff --git a/chrome/renderer/resources/extensions/web_view.js b/chrome/renderer/resources/extensions/web_view.js
index 2d1a083..6b4d3c9 100644
--- a/chrome/renderer/resources/extensions/web_view.js
+++ b/chrome/renderer/resources/extensions/web_view.js
@@ -15,9 +15,7 @@
     'minwidth', 'maxheight', 'maxwidth'];
 
 var WEB_VIEW_EVENTS = {
-  'responsive' : ['processId'],
   'sizechanged': ['oldHeight', 'oldWidth', 'newHeight', 'newWidth'],
-  'unresponsive' : ['processId']
 };
 
 var createEvent = function(name) {
@@ -69,6 +67,14 @@
   'loadstop': {
     evt: createEvent('webview.onLoadStop'),
     fields: []
+  },
+  'responsive': {
+    evt: createEvent('webview.onResponsive'),
+    fields: ['processId']
+  },
+  'unresponsive': {
+    evt: createEvent('webview.onUnresponsive'),
+    fields: ['processId']
   }
 };
 
diff --git a/chrome/renderer/resources/neterror.html b/chrome/renderer/resources/neterror.html
index 41c80c8..1117dfe 100644
--- a/chrome/renderer/resources/neterror.html
+++ b/chrome/renderer/resources/neterror.html
@@ -55,7 +55,11 @@
   text-decoration: none;
 }
 
-.error-img {
+.icon {
+  -webkit-user-select: none;
+}
+
+.icon-generic {
   /**
    * Can't access chrome://theme/IDR_ERROR_NETWORK_GENERIC from an untrusted
    * renderer process, so embed the resource manually.
@@ -63,7 +67,12 @@
   content: -webkit-image-set(
       url('../../app/theme/default_100_percent/common/error_network_generic.png') 1x,
       url('../../app/theme/default_200_percent/common/error_network_generic.png') 2x);
-  -webkit-user-select: none;
+}
+
+.icon-offline {
+  content: -webkit-image-set(
+      url('../../app/theme/default_100_percent/common/error_network_offline.png') 1x,
+      url('../../app/theme/default_200_percent/common/error_network_offline.png') 2x);
 }
 
 #content-top {
@@ -320,7 +329,7 @@
  <div id="box">
   <div id="content-top">
     <h1>
-     <div><img class="error-img"></div>
+     <div><img class="icon" jseval="this.classList.add(iconClass)"></div>
      <span i18n-content="heading"></span>
     </h1>
 
@@ -347,7 +356,7 @@
 <div id="sub-frame-error">
   <!-- Show details when hovering over the icon, in case the details are
        hidden because they're too large. -->
-  <img class="error-img" jsvalues=".title:errorDetails">
+  <img class="icon" jseval="this.classList.add(iconClass)" jsvalues=".title:errorDetails">
   <div id="sub-frame-error-details" jsvalues=".innerHTML:errorDetails"></div>
 </div>
 </body>
diff --git a/chrome/renderer/searchbox/searchbox.cc b/chrome/renderer/searchbox/searchbox.cc
index b0f7fbf..e184eab 100644
--- a/chrome/renderer/searchbox/searchbox.cc
+++ b/chrome/renderer/searchbox/searchbox.cc
@@ -10,6 +10,8 @@
 #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"
@@ -49,21 +51,18 @@
 
 namespace internal {  // for testing
 
-// Parses |url| and fills in |id| with the InstantRestrictedID obtained from the
-// |url|. |render_view_id| is the ID of the associated RenderView.
+// Parses |path| and fills in |id| with the InstantRestrictedID obtained from
+// the |path|. |render_view_id| is the ID of the associated RenderView.
 //
-// Valid |url| forms:
-// chrome-search://favicon/<view_id>/<restricted_id>
-// chrome-search://thumb/<view_id>/<restricted_id>
+// |path| is a pair of |render_view_id| and |restricted_id|, and it is
+// contained in Instant Extended URLs. A valid |path| is in the form:
+// <render_view_id>/<restricted_id>
 //
-// If the |url| is valid, returns true and fills in |id| with restricted_id
-// value. If the |url| is invalid, returns false and |id| is not set.
-bool GetInstantRestrictedIDFromURL(int render_view_id,
-                                   const GURL& url,
-                                   InstantRestrictedID* id) {
-  // Strip leading path.
-  std::string path = url.path().substr(1);
-
+// If the |path| is valid, returns true and fills in |id| with restricted_id
+// value. If the |path| is invalid, returns false and |id| is not set.
+bool GetInstantRestrictedIDFromPath(int render_view_id,
+                                    const std::string& path,
+                                    InstantRestrictedID* id) {
   // Check that the path is of Most visited item ID form.
   std::vector<std::string> tokens;
   if (Tokenize(path, "/", &tokens) != 2)
@@ -75,6 +74,70 @@
   return base::StringToInt(tokens[1], id);
 }
 
+bool GetRestrictedIDFromFaviconUrl(int render_view_id,
+                                   const GURL& url,
+                                   std::string* favicon_params,
+                                   InstantRestrictedID* rid) {
+  // Strip leading slash.
+  std::string raw_path = url.path();
+  DCHECK_GT(raw_path.length(), (size_t) 0);
+  DCHECK_EQ(raw_path[0], '/');
+  raw_path = raw_path.substr(1);
+
+  chrome::ParsedFaviconPath parsed;
+  if (!chrome::ParseFaviconPath(raw_path, chrome::FAVICON, &parsed))
+    return false;
+
+  // The part of the URL which details the favicon parameters should be returned
+  // so the favicon URL can be reconstructed, by replacing the restricted_id
+  // with the actual URL from which the favicon is being requested.
+  *favicon_params = raw_path.substr(0, parsed.path_index);
+
+  // The part of the favicon URL which is supposed to contain the URL from
+  // which the favicon is being requested (i.e., the page's URL) actually
+  // contains a pair in the format "<view_id>/<restricted_id>". If the page's
+  // URL is not in the expected format then the execution must be stopped,
+  // returning |true|, indicating that the favicon URL should be translated
+  // without the page's URL part, to prevent search providers from spoofing
+  // the user's browsing history. For example, the following favicon URL
+  // "chrome-search://favicon/http://www.secretsite.com" it is not in the
+  // expected format "chrome-search://favicon/<view_id>/<restricted_id>" so
+  // the pages's URL part ("http://www.secretsite.com") should be removed
+  // entirely from the translated URL otherwise the search engine would know
+  // if the user has visited that page (by verifying whether the favicon URL
+  // returns an image for a particular page's URL); the translated URL in this
+  // case would be "chrome-search://favicon/" which would simply return the
+  // default favicon.
+  std::string id_part = raw_path.substr(parsed.path_index);
+  InstantRestrictedID id;
+  if (!GetInstantRestrictedIDFromPath(render_view_id, id_part, &id))
+    return true;
+
+  *rid = id;
+  return true;
+}
+
+// Parses a thumbnail |url| and fills in |id| with the InstantRestrictedID
+// obtained from the |url|. |render_view_id| is the ID of the associated
+// RenderView.
+//
+// Valid |url| forms:
+// chrome-search://thumb/<view_id>/<restricted_id>
+//
+// If the |url| is valid, returns true and fills in |id| with restricted_id
+// value. If the |url| is invalid, returns false and |id| is not set.
+bool GetRestrictedIDFromThumbnailUrl(int render_view_id,
+                                     const GURL& url,
+                                     InstantRestrictedID* id) {
+  // Strip leading slash.
+  std::string path = url.path();
+  DCHECK_GT(path.length(), (size_t) 0);
+  DCHECK_EQ(path[0], '/');
+  path = path.substr(1);
+
+  return GetInstantRestrictedIDFromPath(render_view_id, path, id);
+}
+
 }  // namespace internal
 
 SearchBox::SearchBox(content::RenderView* render_view)
@@ -109,25 +172,29 @@
 
 bool SearchBox::GenerateFaviconURLFromTransientURL(const GURL& transient_url,
                                                    GURL* url) const {
-  InstantRestrictedID rid = 0;
-  if (!internal::GetInstantRestrictedIDFromURL(render_view()->GetRoutingID(),
-                                               transient_url, &rid)) {
+  std::string favicon_params;
+  InstantRestrictedID rid = -1;
+  bool success = internal::GetRestrictedIDFromFaviconUrl(
+      render_view()->GetRoutingID(), transient_url, &favicon_params, &rid);
+  if (!success)
     return false;
-  }
 
-  GURL most_visited_item_url(GetURLForMostVisitedItem(rid));
-  if (most_visited_item_url.is_empty())
-    return false;
-  *url = GURL(base::StringPrintf("chrome-search://favicon/%s",
-                                 most_visited_item_url.spec().c_str()));
+  InstantMostVisitedItem item;
+  std::string item_url;
+  if (rid != -1 && GetMostVisitedItemWithID(rid, &item))
+    item_url = item.url.spec();
+
+  *url = GURL(base::StringPrintf("chrome-search://favicon/%s%s",
+                                 favicon_params.c_str(),
+                                 item_url.c_str()));
   return true;
 }
 
 bool SearchBox::GenerateThumbnailURLFromTransientURL(const GURL& transient_url,
                                                      GURL* url) const {
   InstantRestrictedID rid = 0;
-  if (!internal::GetInstantRestrictedIDFromURL(render_view()->GetRoutingID(),
-                                               transient_url, &rid)) {
+  if (!internal::GetRestrictedIDFromThumbnailUrl(render_view()->GetRoutingID(),
+                                                 transient_url, &rid)) {
     return false;
   }
 
diff --git a/chrome/renderer/searchbox/searchbox.h b/chrome/renderer/searchbox/searchbox.h
index e1a7737..b4743c9 100644
--- a/chrome/renderer/searchbox/searchbox.h
+++ b/chrome/renderer/searchbox/searchbox.h
@@ -36,11 +36,13 @@
 
   // Generates the favicon URL of the most visited item specified by the
   // |transient_url|. If the |transient_url| is valid, returns true and fills in
-  // |url|. If the |transient_url| is invalid, returns false  and |url| is not
-  // set.
+  // |url|. If the |transient_url| is invalid, returns true and |url| is set to
+  // "chrome-search://favicon/" in order to prevent the invalid URL to be
+  // requested.
   //
-  // Valid form of |transient_url|:
-  //    chrome-search://favicon/<render_view_id>/<most_visited_item_id>
+  // Valid forms of |transient_url|:
+  //    chrome-search://favicon/<view_id>/<restricted_id>
+  //    chrome-search://favicon/<favicon_parameters>/<view_id>/<restricted_id>
   bool GenerateFaviconURLFromTransientURL(const GURL& transient_url,
                                           GURL* url) const;
 
diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc
index 4beae50..3eacc3c 100644
--- a/chrome/renderer/searchbox/searchbox_extension.cc
+++ b/chrome/renderer/searchbox/searchbox_extension.cc
@@ -30,7 +30,8 @@
 namespace {
 
 const char kCSSBackgroundImageFormat[] = "-webkit-image-set("
-    "url(chrome-search://theme/IDR_THEME_NTP_BACKGROUND?%s) 1x)";
+    "url(chrome-search://theme/IDR_THEME_NTP_BACKGROUND?%s) 1x, "
+    "url(chrome-search://theme/IDR_THEME_NTP_BACKGROUND@2x?%s) 2x)";
 
 const char kCSSBackgroundColorFormat[] = "rgba(%d,%d,%d,%s)";
 
@@ -45,8 +46,9 @@
 const char kCSSBackgroundRepeatY[] = "repeat-y";
 const char kCSSBackgroundRepeat[] = "repeat";
 
-const char kThemeAttributionFormat[] =
-    "chrome-search://theme/IDR_THEME_NTP_ATTRIBUTION?%s";
+const char kThemeAttributionFormat[] = "-webkit-image-set("
+    "url(chrome-search://theme/IDR_THEME_NTP_ATTRIBUTION?%s) 1x, "
+    "url(chrome-search://theme/IDR_THEME_NTP_ATTRIBUTION@2x?%s) 2x)";
 
 const char kLTRHtmlTextDirection[] = "ltr";
 const char kRTLHtmlTextDirection[] = "rtl";
@@ -80,14 +82,6 @@
                                            most_visited_item_id));
 }
 
-v8::Handle<v8::String> GenerateFaviconURL(
-    int render_view_id,
-    InstantRestrictedID most_visited_item_id) {
-  return UTF8ToV8String(base::StringPrintf("chrome-search://favicon/%d/%d",
-                                           render_view_id,
-                                           most_visited_item_id));
-}
-
 // Populates a Javascript MostVisitedItem object from |mv_item|.
 // NOTE: Includes "url", "title" and "domain" which are private data, so should
 // not be returned to the Instant page. These should be erased before returning
@@ -118,11 +112,10 @@
     title = UTF8ToUTF16(mv_item.url.spec());
 
   v8::Handle<v8::Object> obj = v8::Object::New();
+  obj->Set(v8::String::New("renderViewId"), v8::Int32::New(render_view_id));
   obj->Set(v8::String::New("rid"), v8::Int32::New(restricted_id));
   obj->Set(v8::String::New("thumbnailUrl"),
            GenerateThumbnailURL(render_view_id, restricted_id));
-  obj->Set(v8::String::New("faviconUrl"),
-           GenerateFaviconURL(render_view_id, restricted_id));
   obj->Set(v8::String::New("title"), UTF16ToV8String(title));
   obj->Set(v8::String::New("domain"), UTF8ToV8String(mv_item.url.host()));
   obj->Set(v8::String::New("direction"), UTF8ToV8String(direction));
@@ -692,14 +685,15 @@
   info->Set(v8::String::New("alternateLogo"),
             v8::Boolean::New(theme_info.logo_alternate));
 
-  // The theme background image url is of format
-  // "-webkit-image-set(url(chrome://theme/IDR_THEME_BACKGROUND?<theme_id>) 1x)"
-  // where <theme_id> is the id that identifies the theme.
+  // The theme background image url is of format kCSSBackgroundImageFormat
+  // where both instances of "%s" are replaced with the id that identifies the
+  // theme.
   // This is the CSS "background-image" format.
   // Value is only valid if there's a custom theme background image.
   if (extensions::Extension::IdIsValid(theme_info.theme_id)) {
     info->Set(v8::String::New("imageUrl"), UTF8ToV8String(
         base::StringPrintf(kCSSBackgroundImageFormat,
+                           theme_info.theme_id.c_str(),
                            theme_info.theme_id.c_str())));
 
     // The theme background image horizontal alignment is one of "left",
@@ -761,6 +755,7 @@
     if (theme_info.has_attribution) {
       info->Set(v8::String::New("attributionUrl"), UTF8ToV8String(
           base::StringPrintf(kThemeAttributionFormat,
+                             theme_info.theme_id.c_str(),
                              theme_info.theme_id.c_str())));
     }
   }
diff --git a/chrome/renderer/searchbox/searchbox_unittest.cc b/chrome/renderer/searchbox/searchbox_unittest.cc
index bfc7384..3cd3108 100644
--- a/chrome/renderer/searchbox/searchbox_unittest.cc
+++ b/chrome/renderer/searchbox/searchbox_unittest.cc
@@ -9,10 +9,16 @@
 
 namespace internal {
 
-// Defined in searchbox_extension.cc
-bool GetInstantRestrictedIDFromURL(int render_view_id,
+// Defined in searchbox.cc
+bool GetRestrictedIDFromThumbnailUrl(int render_view_id,
+                                     const GURL& url,
+                                     InstantRestrictedID* id);
+
+// Defined in searchbox.cc
+bool GetRestrictedIDFromFaviconUrl(int render_view_id,
                                    const GURL& url,
-                                   InstantRestrictedID* id);
+                                   std::string* favicon_params,
+                                   InstantRestrictedID* rid);
 
 TEST(SearchBoxUtilTest, GetInstantRestrictedIDFromTransientURL) {
   const int kInvalidRenderViewID = 920;
@@ -49,7 +55,7 @@
 
   InstantRestrictedID rid = 0;
   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
-    bool return_val = GetInstantRestrictedIDFromURL(
+    bool return_val = GetRestrictedIDFromThumbnailUrl(
         test_cases[i].render_view_id, test_cases[i].transient_url, &rid);
     EXPECT_EQ(test_cases[i].expected_return_val, return_val);
     EXPECT_EQ(test_cases[i].expected_rid, rid);
@@ -57,4 +63,171 @@
   }
 }
 
+TEST(SearchBoxUtilTest, ParseRestrictedFaviconTransientUrl) {
+  const int kInvalidRenderViewID = 920;
+  const int kValidRenderViewID = 1;
+
+  const struct {
+    int render_view_id;
+    GURL transient_url;
+    std::string expected_favicon_params;
+    InstantRestrictedID expected_rid;
+    bool expected_return_val;
+  } test_cases[] = {
+    // RenderView ID matches the view id specified in the transient url.
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/1/2"),
+      "",
+      2,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x/1/2"),
+      "size/16@2x/",
+      2,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/largest/1/2"),
+      "largest/",
+      2,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/origin/1/2"),
+      "origin/",
+      2,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/iconurl/1/2"),
+      "iconurl/",
+      2,
+      true
+    },
+
+    // RenderView ID does not match the view id specified in the transient url.
+    {
+      kInvalidRenderViewID,
+      GURL("chrome-search://favicon/1/2"),
+      "",
+      0,
+      true
+    },
+    {
+      kInvalidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x/1/2"),
+      "size/16@2x/",
+      0,
+      true
+    },
+    {
+      kInvalidRenderViewID,
+      GURL("chrome-search://favicon/largest/1/2"),
+      "largest/",
+      0,
+      true
+    },
+    {
+      kInvalidRenderViewID,
+      GURL("chrome-search://favicon/origin/1/2"),
+      "origin/",
+      0,
+      true
+    },
+    {
+      kInvalidRenderViewID,
+      GURL("chrome-search://favicon/iconurl/1/2"),
+      "iconurl/",
+      0,
+      true
+    },
+
+    // Invalid transient urls.
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon"),
+      "",
+      0,
+      false
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/"),
+      "",
+      0,
+      false
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x"),
+      "",
+      0,
+      false
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size"),
+      "",
+      0,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x/123"),
+      "size/16@2x/",
+      0,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x/xyz"),
+      "size/16@2x/",
+      0,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x/123/"),
+      "size/16@2x/",
+      0,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x/123/xyz"),
+      "size/16@2x/",
+      0,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/invalidparameter/16@2x/1/2"),
+      "",
+      0,
+      true
+    }
+  };
+
+  std::string favicon_params = "";
+  InstantRestrictedID rid = 0;
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
+    bool return_val = GetRestrictedIDFromFaviconUrl(
+        test_cases[i].render_view_id,
+        test_cases[i].transient_url,
+        &favicon_params,
+        &rid);
+    EXPECT_EQ(test_cases[i].expected_return_val, return_val);
+    EXPECT_EQ(test_cases[i].expected_favicon_params, favicon_params);
+    EXPECT_EQ(test_cases[i].expected_rid, rid);
+    favicon_params = "";
+    rid = 0;
+  }
+}
+
 }  // namespace internal
diff --git a/chrome/sync_integration_tests.isolate b/chrome/sync_integration_tests.isolate
index 76cf74e..30fd0a5 100644
--- a/chrome/sync_integration_tests.isolate
+++ b/chrome/sync_integration_tests.isolate
@@ -8,7 +8,7 @@
         'command': [
           '../testing/xvfb.py',
           '<(PRODUCT_DIR)',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/sync_integration_tests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_tracked': [
@@ -44,8 +44,11 @@
     }],
     ['OS=="linux" or OS=="mac" or OS=="win"', {
       'variables': {
+        'isolate_dependency_tracked': [
+          '../tools/swarm_client/run_isolated.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
+        ],
         'isolate_dependency_untracked': [
-          '../tools/swarm_client/',
           '<(PRODUCT_DIR)/pyproto/',
         ],
       },
@@ -53,7 +56,7 @@
     ['OS=="mac"', {
       'variables': {
         'command': [
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/sync_integration_tests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_tracked': [
diff --git a/chrome/tools/build/mac/dump_product_syms b/chrome/tools/build/mac/dump_product_syms
index ca96e2a..b05e568 100755
--- a/chrome/tools/build/mac/dump_product_syms
+++ b/chrome/tools/build/mac/dump_product_syms
@@ -92,6 +92,14 @@
   SRC_NAMES[${#SRC_NAMES[@]}]="PDF.plugin"
 fi
 
+# libpeerconnection.so is optional. Currently only built when branding=Chrome
+# but will in the future also be built for Chromium, so we do a simple check.
+# TODO(tommi): Remove this check and move libpeerconnection.so into the required
+# section when libpeerconnection.so is built for all configs.
+if [[ -e "${BUILT_PRODUCTS_DIR}/libpeerconnection.so" ]]; then
+  SRC_NAMES[${#SRC_NAMES[@]}]="libpeerconnection.so"
+fi
+
 for SRC_NAME in "${SRC_NAMES[@]}"; do
   # SRC_STEM is the name of the file within the DWARF directory of the .dSYM
   # bundle, which comes from the on-disk name of an executable or dylib within
diff --git a/chrome/tools/convert_dict/convert_dict.cc b/chrome/tools/convert_dict/convert_dict.cc
index 39830e0..91082f6 100644
--- a/chrome/tools/convert_dict/convert_dict.cc
+++ b/chrome/tools/convert_dict/convert_dict.cc
@@ -18,7 +18,7 @@
 #include "base/files/file_path.h"
 #include "base/i18n/icu_util.h"
 #include "base/logging.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
 #include "base/strings/string_util.h"
 #include "chrome/tools/convert_dict/aff_reader.h"
 #include "chrome/tools/convert_dict/dic_reader.h"
diff --git a/chrome/tools/ipclist/ipcfuzz.cc b/chrome/tools/ipclist/ipcfuzz.cc
index da6ca4a..40845d7 100644
--- a/chrome/tools/ipclist/ipcfuzz.cc
+++ b/chrome/tools/ipclist/ipcfuzz.cc
@@ -13,7 +13,6 @@
 #include "base/memory/singleton.h"
 #include "base/message_loop/message_loop.h"
 #include "base/pickle.h"
-#include "base/process_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/tools/perf/flush_cache/flush_cache.cc b/chrome/tools/perf/flush_cache/flush_cache.cc
index f13a3e5..60f99ce 100644
--- a/chrome/tools/perf/flush_cache/flush_cache.cc
+++ b/chrome/tools/perf/flush_cache/flush_cache.cc
@@ -6,7 +6,7 @@
 // It's useful for testing Chrome with a cold database.
 
 #include "base/files/file_path.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/test/test_file_util.h"
diff --git a/chrome/unit_tests.isolate b/chrome/unit_tests.isolate
index 96e982b..59b789d 100644
--- a/chrome/unit_tests.isolate
+++ b/chrome/unit_tests.isolate
@@ -44,7 +44,7 @@
         'command': [
           '../testing/xvfb.py',
           '<(PRODUCT_DIR)',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/unit_tests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_tracked': [
@@ -62,6 +62,8 @@
       'variables': {
         'isolate_dependency_tracked': [
           '../testing/test_env.py',
+          '../tools/swarm_client/run_isolated.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/unit_tests<(EXECUTABLE_SUFFIX)',
           'browser/safe_browsing/two_phase_testserver.py',
         ],
@@ -70,7 +72,6 @@
           '../third_party/pyftpdlib/',
           '../third_party/pywebsocket/',
           '../third_party/tlslite/',
-          '../tools/swarm_client/',
           '<(PRODUCT_DIR)/pyproto/',
         ],
       },
@@ -89,7 +90,7 @@
       'variables': {
         'command': [
           '../testing/test_env.py',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/unit_tests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_untracked': [
diff --git a/chrome/utility/importer/firefox_importer_unittest_utils.h b/chrome/utility/importer/firefox_importer_unittest_utils.h
index 5bdbfa7..3bff323 100644
--- a/chrome/utility/importer/firefox_importer_unittest_utils.h
+++ b/chrome/utility/importer/firefox_importer_unittest_utils.h
@@ -7,7 +7,7 @@
 
 #include "base/basictypes.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "chrome/utility/importer/nss_decryptor.h"
 
 class FFDecryptorServerChannelListener;
diff --git a/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc b/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc
index ff4ee5e..5e8cb9d 100644
--- a/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc
+++ b/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc
@@ -10,6 +10,8 @@
 #include "base/file_util.h"
 #include "base/files/file_path.h"
 #include "base/message_loop/message_loop.h"
+#include "base/process/kill.h"
+#include "base/process/launch.h"
 #include "base/test/test_timeouts.h"
 #include "chrome/common/importer/firefox_importer_utils.h"
 #include "ipc/ipc_channel.h"
diff --git a/chromeos/dbus/debug_daemon_client.cc b/chromeos/dbus/debug_daemon_client.cc
index e14abf8..50d5d4b 100644
--- a/chromeos/dbus/debug_daemon_client.cc
+++ b/chromeos/dbus/debug_daemon_client.cc
@@ -230,6 +230,18 @@
                    callback));
   }
 
+  virtual void GetWiMaxStatus(const GetWiMaxStatusCallback& callback)
+      OVERRIDE {
+    dbus::MethodCall method_call(debugd::kDebugdInterface,
+                                 debugd::kGetWiMaxStatus);
+    debugdaemon_proxy_->CallMethod(
+        &method_call,
+        dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+        base::Bind(&DebugDaemonClientImpl::OnGetWiMaxStatus,
+                   weak_ptr_factory_.GetWeakPtr(),
+                   callback));
+  }
+
   virtual void GetNetworkInterfaces(
       const GetNetworkInterfacesCallback& callback) OVERRIDE {
     dbus::MethodCall method_call(debugd::kDebugdInterface,
@@ -459,6 +471,15 @@
       callback.Run(false, "");
   }
 
+  void OnGetWiMaxStatus(const GetWiMaxStatusCallback& callback,
+                        dbus::Response* response) {
+    std::string status;
+    if (response && dbus::MessageReader(response).PopString(&status))
+      callback.Run(true, status);
+    else
+      callback.Run(false, "");
+  }
+
   void OnGetNetworkInterfaces(const GetNetworkInterfacesCallback& callback,
                               dbus::Response* response) {
     std::string status;
@@ -618,6 +639,11 @@
     base::MessageLoop::current()->PostTask(FROM_HERE,
                                            base::Bind(callback, false, ""));
   }
+  virtual void GetWiMaxStatus(const GetWiMaxStatusCallback& callback)
+      OVERRIDE {
+    base::MessageLoop::current()->PostTask(FROM_HERE,
+                                           base::Bind(callback, false, ""));
+  }
   virtual void GetNetworkInterfaces(
       const GetNetworkInterfacesCallback& callback) OVERRIDE {
     base::MessageLoop::current()->PostTask(FROM_HERE,
diff --git a/chromeos/dbus/debug_daemon_client.h b/chromeos/dbus/debug_daemon_client.h
index af332d5..92652e3 100644
--- a/chromeos/dbus/debug_daemon_client.h
+++ b/chromeos/dbus/debug_daemon_client.h
@@ -68,6 +68,13 @@
   // Gets information about modem status as json.
   virtual void GetModemStatus(const GetModemStatusCallback& callback) = 0;
 
+  // Called once GetWiMaxStatus() is complete.
+  typedef base::Callback<void(bool succeeded, const std::string& status)>
+      GetWiMaxStatusCallback;
+
+  // Gets information about WiMAX status as json.
+  virtual void GetWiMaxStatus(const GetWiMaxStatusCallback& callback) = 0;
+
   // Called once GetNetworkInterfaces() is complete. Takes two parameters:
   // - succeeded: information was obtained successfully.
   // - status: network interfaces information in json. For details, please refer
diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc
index 45f4547..4e6a450 100644
--- a/chromeos/network/network_state_handler.cc
+++ b/chromeos/network/network_state_handler.cc
@@ -497,9 +497,10 @@
       OnNetworkConnectionStateChanged(network);
   } else {
     if (network->path() == default_network_path_ &&
-        key != flimflam::kSignalStrengthProperty) {
-      // WiFi signal strength updates are too noisy, so don't
-      // trigger default network updates for those changes.
+        key != flimflam::kSignalStrengthProperty &&
+        key != shill::kWifiFrequencyListProperty) {
+      // WiFi SignalStrength and WifiFrequencyList updates are too noisy, so
+      // don't trigger default network updates for those changes.
       OnDefaultNetworkChanged();
     }
     std::string detail = network->name() + "." + key;
diff --git a/components/autofill_core_common.target.darwin-arm.mk b/components/autofill_core_common.target.darwin-arm.mk
index 3f9e9cd..d9da718 100644
--- a/components/autofill_core_common.target.darwin-arm.mk
+++ b/components/autofill_core_common.target.darwin-arm.mk
@@ -113,6 +113,7 @@
 	$(gyp_shared_intermediate_dir)/autofill \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
@@ -203,6 +204,7 @@
 	$(gyp_shared_intermediate_dir)/autofill \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
diff --git a/components/autofill_core_common.target.darwin-mips.mk b/components/autofill_core_common.target.darwin-mips.mk
index 7d35385..de96c60 100644
--- a/components/autofill_core_common.target.darwin-mips.mk
+++ b/components/autofill_core_common.target.darwin-mips.mk
@@ -112,6 +112,7 @@
 	$(gyp_shared_intermediate_dir)/autofill \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
@@ -201,6 +202,7 @@
 	$(gyp_shared_intermediate_dir)/autofill \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
diff --git a/components/autofill_core_common.target.darwin-x86.mk b/components/autofill_core_common.target.darwin-x86.mk
index 926e027..8334da3 100644
--- a/components/autofill_core_common.target.darwin-x86.mk
+++ b/components/autofill_core_common.target.darwin-x86.mk
@@ -114,6 +114,7 @@
 	$(gyp_shared_intermediate_dir)/autofill \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
@@ -206,6 +207,7 @@
 	$(gyp_shared_intermediate_dir)/autofill \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
diff --git a/components/autofill_core_common.target.linux-arm.mk b/components/autofill_core_common.target.linux-arm.mk
index 3f9e9cd..d9da718 100644
--- a/components/autofill_core_common.target.linux-arm.mk
+++ b/components/autofill_core_common.target.linux-arm.mk
@@ -113,6 +113,7 @@
 	$(gyp_shared_intermediate_dir)/autofill \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
@@ -203,6 +204,7 @@
 	$(gyp_shared_intermediate_dir)/autofill \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
diff --git a/components/autofill_core_common.target.linux-mips.mk b/components/autofill_core_common.target.linux-mips.mk
index 7d35385..de96c60 100644
--- a/components/autofill_core_common.target.linux-mips.mk
+++ b/components/autofill_core_common.target.linux-mips.mk
@@ -112,6 +112,7 @@
 	$(gyp_shared_intermediate_dir)/autofill \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
@@ -201,6 +202,7 @@
 	$(gyp_shared_intermediate_dir)/autofill \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
diff --git a/components/autofill_core_common.target.linux-x86.mk b/components/autofill_core_common.target.linux-x86.mk
index 926e027..8334da3 100644
--- a/components/autofill_core_common.target.linux-x86.mk
+++ b/components/autofill_core_common.target.linux-x86.mk
@@ -114,6 +114,7 @@
 	$(gyp_shared_intermediate_dir)/autofill \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
@@ -206,6 +207,7 @@
 	$(gyp_shared_intermediate_dir)/autofill \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH)/v8/include \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
diff --git a/components/nacl/common/nacl_types.h b/components/nacl/common/nacl_types.h
index c1f6943..b3fee25 100644
--- a/components/nacl/common/nacl_types.h
+++ b/components/nacl/common/nacl_types.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/basictypes.h"
-#include "base/process.h"
+#include "base/process/process_handle.h"
 #include "build/build_config.h"
 #include "ipc/ipc_channel.h"
 
diff --git a/content/app/content_main_runner.cc b/content/app/content_main_runner.cc
index d736a28..a91d6d3 100644
--- a/content/app/content_main_runner.cc
+++ b/content/app/content_main_runner.cc
@@ -18,7 +18,9 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/metrics/stats_table.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
+#include "base/process/launch.h"
+#include "base/process/memory.h"
+#include "base/process/process_handle.h"
 #include "base/profiler/alternate_timer.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
diff --git a/content/browser/DEPS b/content/browser/DEPS
index 4322368..0327aa7 100644
--- a/content/browser/DEPS
+++ b/content/browser/DEPS
@@ -66,7 +66,6 @@
   "!third_party/WebKit/public/web/WebBindings.h",
   "!third_party/WebKit/public/web/WebKit.h",
   "!third_party/WebKit/public/web/WebSecurityOrigin.h",
-  "!third_party/WebKit/public/web/WebView.h",
   "!third_party/WebKit/public/web/android/WebInputEventFactory.h",
   "!third_party/WebKit/public/web/gtk/WebInputEventFactory.h",
   "!third_party/WebKit/public/web/linux/WebFontInfo.h",
diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
index ca1ae40..067833e 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.cc
+++ b/content/browser/browser_plugin/browser_plugin_guest.cc
@@ -731,19 +731,17 @@
 }
 
 void BrowserPluginGuest::RendererUnresponsive(WebContents* source) {
-  int process_id =
-      GetWebContents()->GetRenderProcessHost()->GetID();
-  SendMessageToEmbedder(
-      new BrowserPluginMsg_GuestUnresponsive(instance_id(), process_id));
   RecordAction(UserMetricsAction("BrowserPlugin.Guest.Hung"));
+  if (!delegate_)
+    return;
+  delegate_->RendererUnresponsive();
 }
 
 void BrowserPluginGuest::RendererResponsive(WebContents* source) {
-  int process_id =
-      GetWebContents()->GetRenderProcessHost()->GetID();
-  SendMessageToEmbedder(
-      new BrowserPluginMsg_GuestResponsive(instance_id(), process_id));
   RecordAction(UserMetricsAction("BrowserPlugin.Guest.Responsive"));
+  if (!delegate_)
+    return;
+  delegate_->RendererResponsive();
 }
 
 void BrowserPluginGuest::RunFileChooser(WebContents* web_contents,
diff --git a/content/browser/browser_plugin/browser_plugin_host_browsertest.cc b/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
index a1c0613..5e6d887 100644
--- a/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
+++ b/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
@@ -377,68 +377,6 @@
   DISALLOW_COPY_AND_ASSIGN(BrowserPluginHostTest);
 };
 
-// This test loads a guest that has a busy loop, and therefore it hangs the
-// guest.
-//
-// Disabled on Windows and Linux since it is flaky. crbug.com/164812
-// THIS TEST IS ALWAYS FLAKY. DO NOT ENABLE AGAIN WITHOUT REWRITING.
-#if defined(OS_WIN) || defined(OS_LINUX)
-#define MAYBE_GuestUnresponsive DISABLED_GuestUnresponsive
-#else
-#define MAYBE_GuestUnresponsive GuestUnresponsive
-#endif
-IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest,
-                       MAYBE_GuestUnresponsive) {
-  // Override the hang timeout for guest to be very small.
-  content::BrowserPluginGuest::set_factory_for_testing(
-      TestShortHangTimeoutGuestFactory::GetInstance());
-  const char kEmbedderURL[] =
-      "/browser_plugin_embedder_guest_unresponsive.html";
-  StartBrowserPluginTest(
-      kEmbedderURL, kHTMLForGuestBusyLoop, true, std::string());
-  // Wait until the busy loop starts.
-  {
-    const string16 expected_title = ASCIIToUTF16("start");
-    content::TitleWatcher title_watcher(test_guest()->web_contents(),
-                                        expected_title);
-    // Hang the guest for a length of time.
-    int spin_time = 10 * TestTimeouts::tiny_timeout().InMilliseconds();
-    ExecuteSyncJSFunction(
-        test_guest()->web_contents()->GetRenderViewHost(),
-        base::StringPrintf("StartPauseMs(%d);", spin_time).c_str());
-
-    string16 actual_title = title_watcher.WaitAndGetTitle();
-    EXPECT_EQ(expected_title, actual_title);
-  }
-  {
-    const string16 expected_title = ASCIIToUTF16("done");
-    content::TitleWatcher title_watcher(test_embedder()->web_contents(),
-                                        expected_title);
-
-    // Send a mouse event to the guest.
-    SimulateMouseClick(test_embedder()->web_contents(), 0,
-        WebKit::WebMouseEvent::ButtonLeft);
-
-    string16 actual_title = title_watcher.WaitAndGetTitle();
-    EXPECT_EQ(expected_title, actual_title);
-  }
-
-  // Verify that the embedder has received the 'unresponsive' and 'responsive'
-  // events.
-  RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
-      test_embedder()->web_contents()->GetRenderViewHost());
-  scoped_ptr<base::Value> value =
-      content::ExecuteScriptAndGetValue(rvh, "unresponsiveCalled");
-  bool result = false;
-  ASSERT_TRUE(value->GetAsBoolean(&result));
-  EXPECT_TRUE(result);
-
-  value = content::ExecuteScriptAndGetValue(rvh, "responsiveCalled");
-  result = false;
-  ASSERT_TRUE(value->GetAsBoolean(&result));
-  EXPECT_TRUE(result);
-}
-
 // This test ensures that if guest isn't there and we resize the guest (from
 // js), it remembers the size correctly.
 //
diff --git a/content/browser/child_process_launcher.cc b/content/browser/child_process_launcher.cc
index ce0f626..b5bb3f4 100644
--- a/content/browser/child_process_launcher.cc
+++ b/content/browser/child_process_launcher.cc
@@ -12,6 +12,7 @@
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/metrics/histogram.h"
+#include "base/process/process.h"
 #include "base/synchronization/lock.h"
 #include "base/threading/thread.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/content/browser/fileapi/browser_file_system_helper.cc b/content/browser/fileapi/browser_file_system_helper.cc
index e8e81ce..a03417d 100644
--- a/content/browser/fileapi/browser_file_system_helper.cc
+++ b/content/browser/fileapi/browser_file_system_helper.cc
@@ -63,12 +63,12 @@
           BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO).get(),
           file_task_runner.get()));
 
-  // Setting up additional mount point providers.
-  ScopedVector<fileapi::FileSystemBackend> additional_providers;
+  // Setting up additional filesystem backends.
+  ScopedVector<fileapi::FileSystemBackend> additional_backends;
   GetContentClient()->browser()->GetAdditionalFileSystemBackends(
       browser_context,
       profile_path,
-      &additional_providers);
+      &additional_backends);
 
   scoped_refptr<fileapi::FileSystemContext> file_system_context =
       new fileapi::FileSystemContext(
@@ -76,7 +76,7 @@
           BrowserContext::GetMountPoints(browser_context),
           browser_context->GetSpecialStoragePolicy(),
           quota_manager_proxy,
-          additional_providers.Pass(),
+          additional_backends.Pass(),
           profile_path,
           CreateBrowserFileSystemOptions(is_incognito));
 
@@ -104,9 +104,7 @@
     return false;
   }
 
-  fileapi::FileSystemBackend* mount_point_provider =
-      context->GetFileSystemBackend(url.type());
-  if (!mount_point_provider) {
+  if (!context->GetFileSystemBackend(url.type())) {
     *error = base::PLATFORM_FILE_ERROR_INVALID_URL;
     return false;
   }
diff --git a/content/browser/renderer_host/input/web_input_event_builders_win.cc b/content/browser/renderer_host/input/web_input_event_builders_win.cc
index b529bf5..6e693a7 100644
--- a/content/browser/renderer_host/input/web_input_event_builders_win.cc
+++ b/content/browser/renderer_host/input/web_input_event_builders_win.cc
@@ -255,14 +255,14 @@
   // This differs slightly from the WebKit code in WebKit/win/WebView.cpp
   // where their original code looks buggy.
   static int last_click_position_x;
-  static int last_click_position_Y;
+  static int last_click_position_y;
   static WebMouseEvent::Button last_click_button = WebMouseEvent::ButtonLeft;
 
   double current_time = result.timeStampSeconds;
   bool cancel_previous_click =
       (abs(last_click_position_x - result.x) >
           (::GetSystemMetrics(SM_CXDOUBLECLK) / 2))
-      || (abs(last_click_position_x - result.y) >
+      || (abs(last_click_position_y - result.y) >
           (::GetSystemMetrics(SM_CYDOUBLECLK) / 2))
       || ((current_time - g_last_click_time) * 1000.0 > ::GetDoubleClickTime());
 
@@ -272,7 +272,7 @@
     } else {
       g_last_click_count = 1;
       last_click_position_x = result.x;
-      last_click_position_x = result.y;
+      last_click_position_y = result.y;
     }
     g_last_click_time = current_time;
     last_click_button = result.button;
@@ -281,7 +281,7 @@
     if (cancel_previous_click) {
       g_last_click_count = 0;
       last_click_position_x = 0;
-      last_click_position_x = 0;
+      last_click_position_y = 0;
       g_last_click_time = 0;
     }
   }
diff --git a/content/browser/renderer_host/media/midi_host.cc b/content/browser/renderer_host/media/midi_host.cc
index 116511f..aeb481c 100644
--- a/content/browser/renderer_host/media/midi_host.cc
+++ b/content/browser/renderer_host/media/midi_host.cc
@@ -26,7 +26,7 @@
 
 MIDIHost::~MIDIHost() {
   if (midi_manager_)
-    midi_manager_->ReleaseAccess(this);
+    midi_manager_->EndSession(this);
 }
 
 void MIDIHost::OnChannelClosing() {
@@ -45,7 +45,7 @@
                                  bool* message_was_ok) {
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP_EX(MIDIHost, message, *message_was_ok)
-    IPC_MESSAGE_HANDLER(MIDIHostMsg_RequestAccess, OnRequestAccess)
+    IPC_MESSAGE_HANDLER(MIDIHostMsg_StartSession, OnStartSession)
     IPC_MESSAGE_HANDLER(MIDIHostMsg_SendData, OnSendData)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP_EX()
@@ -53,24 +53,23 @@
   return handled;
 }
 
-void MIDIHost::OnRequestAccess(int client_id, int access) {
+void MIDIHost::OnStartSession(int client_id) {
   MIDIPortInfoList input_ports;
   MIDIPortInfoList output_ports;
 
-  // Ask permission and register to receive MIDI data.
-  bool approved = false;
+  // Initialize devices and register to receive MIDI data.
+  bool success = false;
   if (midi_manager_) {
-    approved = midi_manager_->RequestAccess(this, access);
-    if (approved) {
+    success = midi_manager_->StartSession(this);
+    if (success) {
       input_ports = midi_manager_->input_ports();
       output_ports = midi_manager_->output_ports();
     }
   }
 
-  Send(new MIDIMsg_AccessApproved(
+  Send(new MIDIMsg_SessionStarted(
        client_id,
-       access,
-       approved,
+       success,
        input_ports,
        output_ports));
 }
diff --git a/content/browser/renderer_host/media/midi_host.h b/content/browser/renderer_host/media/midi_host.h
index e46ed53..db9d937 100644
--- a/content/browser/renderer_host/media/midi_host.h
+++ b/content/browser/renderer_host/media/midi_host.h
@@ -38,8 +38,8 @@
       size_t length,
       double timestamp) OVERRIDE;
 
-  // Request access to MIDI hardware.
-  void OnRequestAccess(int client_id, int access);
+  // Start session to access MIDI hardware.
+  void OnStartSession(int client_id);
 
   // Data to be sent to a MIDI output port.
   void OnSendData(int port,
diff --git a/content/browser/renderer_host/overscroll_configuration.cc b/content/browser/renderer_host/overscroll_configuration.cc
index 8d35269..77585e5 100644
--- a/content/browser/renderer_host/overscroll_configuration.cc
+++ b/content/browser/renderer_host/overscroll_configuration.cc
@@ -11,7 +11,8 @@
 float g_horiz_threshold_complete = 0.25f;
 float g_vert_threshold_complete = 0.20f;
 
-float g_min_threshold_start = 50.f;
+float g_horiz_threshold_start = 50.f;
+float g_vert_threshold_start = 0.f;
 
 float g_horiz_resist_after = 30.f;
 float g_vert_resist_after = 30.f;
@@ -30,8 +31,12 @@
       g_vert_threshold_complete = value;
       break;
 
-    case OVERSCROLL_CONFIG_MIN_THRESHOLD_START:
-      g_min_threshold_start = value;
+    case OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START:
+      g_horiz_threshold_start = value;
+      break;
+
+    case OVERSCROLL_CONFIG_VERT_THRESHOLD_START:
+      g_vert_threshold_start = value;
       break;
 
     case OVERSCROLL_CONFIG_HORIZ_RESIST_AFTER:
@@ -56,8 +61,11 @@
     case OVERSCROLL_CONFIG_VERT_THRESHOLD_COMPLETE:
       return g_vert_threshold_complete;
 
-    case OVERSCROLL_CONFIG_MIN_THRESHOLD_START:
-      return g_min_threshold_start;
+    case OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START:
+      return g_horiz_threshold_start;
+
+    case OVERSCROLL_CONFIG_VERT_THRESHOLD_START:
+      return g_vert_threshold_start;
 
     case OVERSCROLL_CONFIG_HORIZ_RESIST_AFTER:
       return g_horiz_resist_after;
diff --git a/content/browser/renderer_host/overscroll_controller.cc b/content/browser/renderer_host/overscroll_controller.cc
index 37f9e37..3fed4c3 100644
--- a/content/browser/renderer_host/overscroll_controller.cc
+++ b/content/browser/renderer_host/overscroll_controller.cc
@@ -277,14 +277,16 @@
 }
 
 void OverscrollController::ProcessOverscroll(float delta_x, float delta_y) {
-  if (scroll_state_ == STATE_CONTENT_SCROLLING)
-    return;
-  overscroll_delta_x_ += delta_x;
+  if (scroll_state_ != STATE_CONTENT_SCROLLING)
+    overscroll_delta_x_ += delta_x;
   overscroll_delta_y_ += delta_y;
 
-  float threshold = GetOverscrollConfig(OVERSCROLL_CONFIG_MIN_THRESHOLD_START);
-  if (fabs(overscroll_delta_x_) < threshold &&
-      fabs(overscroll_delta_y_) < threshold) {
+  float horiz_threshold = GetOverscrollConfig(
+      OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START);
+  float vert_threshold = GetOverscrollConfig(
+      OVERSCROLL_CONFIG_VERT_THRESHOLD_START);
+  if (fabs(overscroll_delta_x_) <= horiz_threshold &&
+      fabs(overscroll_delta_y_) <= vert_threshold) {
     SetOverscrollMode(OVERSCROLL_NONE);
     return;
   }
@@ -294,17 +296,20 @@
   // to make sure that subsequent scroll events go through to the page first.
   OverscrollMode new_mode = OVERSCROLL_NONE;
   const float kMinRatio = 2.5;
-  if (fabs(overscroll_delta_x_) > fabs(overscroll_delta_y_) * kMinRatio)
+  if (fabs(overscroll_delta_x_) > horiz_threshold &&
+      fabs(overscroll_delta_x_) > fabs(overscroll_delta_y_) * kMinRatio)
     new_mode = overscroll_delta_x_ > 0.f ? OVERSCROLL_EAST : OVERSCROLL_WEST;
-  else if (fabs(overscroll_delta_y_) > fabs(overscroll_delta_x_) * kMinRatio)
+  else if (fabs(overscroll_delta_y_) > vert_threshold &&
+           fabs(overscroll_delta_y_) > fabs(overscroll_delta_x_) * kMinRatio)
     new_mode = overscroll_delta_y_ > 0.f ? OVERSCROLL_SOUTH : OVERSCROLL_NORTH;
 
-  if (overscroll_mode_ == OVERSCROLL_NONE) {
+  if (overscroll_mode_ == OVERSCROLL_NONE)
     SetOverscrollMode(new_mode);
-  } else if (new_mode != overscroll_mode_) {
+  else if (new_mode != overscroll_mode_)
     SetOverscrollMode(OVERSCROLL_NONE);
+
+  if (overscroll_mode_ == OVERSCROLL_NONE)
     return;
-  }
 
   // Tell the delegate about the overscroll update so that it can update
   // the display accordingly (e.g. show history preview etc.).
@@ -312,21 +317,21 @@
     // Do not include the threshold amount when sending the deltas to the
     // delegate.
     float delegate_delta_x = overscroll_delta_x_;
-    if (fabs(delegate_delta_x) > threshold) {
+    if (fabs(delegate_delta_x) > horiz_threshold) {
       if (delegate_delta_x < 0)
-        delegate_delta_x += threshold;
+        delegate_delta_x += horiz_threshold;
       else
-        delegate_delta_x -= threshold;
+        delegate_delta_x -= horiz_threshold;
     } else {
       delegate_delta_x = 0.f;
     }
 
     float delegate_delta_y = overscroll_delta_y_;
-    if (fabs(delegate_delta_y) > threshold) {
+    if (fabs(delegate_delta_y) > vert_threshold) {
       if (delegate_delta_y < 0)
-        delegate_delta_y += threshold;
+        delegate_delta_y += vert_threshold;
       else
-        delegate_delta_y -= threshold;
+        delegate_delta_y -= vert_threshold;
     } else {
       delegate_delta_y = 0.f;
     }
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
index 5853786..d804e8d 100644
--- a/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -3154,8 +3154,8 @@
   process_->sink().ClearMessages();
 
   // Simulate wheel events.
-  SimulateWheelEvent(0, -5, 0, true);  // sent directly
-  SimulateWheelEvent(0, -1, 0, true);  // enqueued
+  SimulateWheelEvent(-5, 0, 0, true);  // sent directly
+  SimulateWheelEvent(-1, 1, 0, true);  // enqueued
   SimulateWheelEvent(-10, -3, 0, true);  // coalesced into previous event
   SimulateWheelEvent(-15, -1, 0, true);  // coalesced into previous event
   SimulateWheelEvent(-30, -3, 0, true);  // coalesced into previous event
@@ -3182,8 +3182,8 @@
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
   EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_mode());
   EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_delegate()->current_mode());
-  EXPECT_EQ(-75.f, host_->overscroll_delta_x());
-  EXPECT_EQ(-25.f, host_->overscroll_delegate()->delta_x());
+  EXPECT_EQ(-81.f, host_->overscroll_delta_x());
+  EXPECT_EQ(-31.f, host_->overscroll_delegate()->delta_x());
   EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y());
   EXPECT_EQ(0U, process_->sink().message_count());
 
@@ -3194,14 +3194,14 @@
 }
 
 // Tests that if some scroll events are consumed towards the start, then
-// subsequent scrolls do not overscroll.
-TEST_F(RenderWidgetHostTest, WheelScrollConsumedDoNotOverscroll) {
+// subsequent scrolls do not horizontal overscroll.
+TEST_F(RenderWidgetHostTest, WheelScrollConsumedDoNotHorizOverscroll) {
   host_->SetupForOverscrollControllerTest();
   process_->sink().ClearMessages();
 
   // Simulate wheel events.
-  SimulateWheelEvent(0, -5, 0, true);  // sent directly
-  SimulateWheelEvent(0, -1, 0, true);  // enqueued
+  SimulateWheelEvent(-5, 0, 0, true);  // sent directly
+  SimulateWheelEvent(-1, -1, 0, true);  // enqueued
   SimulateWheelEvent(-10, -3, 0, true);  // coalesced into previous event
   SimulateWheelEvent(-15, -1, 0, true);  // coalesced into previous event
   SimulateWheelEvent(-30, -3, 0, true);  // coalesced into previous event
@@ -3225,7 +3225,7 @@
   SendInputEventACK(WebInputEvent::MouseWheel,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
   EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode());
-  EXPECT_EQ(1U, process_->sink().message_count());
+  EXPECT_EQ(0U, process_->sink().message_count());
 
   process_->sink().ClearMessages();
   SendInputEventACK(WebInputEvent::MouseWheel,
@@ -3269,7 +3269,7 @@
 
   // Send a wheel event. ACK the event as not processed. This should not
   // initiate an overscroll gesture since it doesn't cross the threshold yet.
-  SimulateWheelEvent(10, -5, 0, true);
+  SimulateWheelEvent(10, 0, 0, true);
   EXPECT_EQ(1U, process_->sink().message_count());
   SendInputEventACK(WebInputEvent::MouseWheel,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
@@ -3278,7 +3278,7 @@
   process_->sink().ClearMessages();
 
   // Scroll some more so as to not overscroll.
-  SimulateWheelEvent(10, -4, 0, true);
+  SimulateWheelEvent(10, 0, 0, true);
   EXPECT_EQ(1U, process_->sink().message_count());
   SendInputEventACK(WebInputEvent::MouseWheel,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
@@ -3287,7 +3287,7 @@
   process_->sink().ClearMessages();
 
   // Scroll some more to initiate an overscroll.
-  SimulateWheelEvent(40, -4, 0, true);
+  SimulateWheelEvent(40, 0, 0, true);
   EXPECT_EQ(1U, process_->sink().message_count());
   SendInputEventACK(WebInputEvent::MouseWheel,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
@@ -3299,13 +3299,13 @@
   process_->sink().ClearMessages();
 
   // Scroll in the reverse direction enough to abort the overscroll.
-  SimulateWheelEvent(-20, -4, 0, true);
+  SimulateWheelEvent(-20, 0, 0, true);
   EXPECT_EQ(0U, process_->sink().message_count());
   EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode());
   EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode());
 
   // Continue to scroll in the reverse direction.
-  SimulateWheelEvent(-20, 4, 0, true);
+  SimulateWheelEvent(-20, 0, 0, true);
   EXPECT_EQ(1U, process_->sink().message_count());
   SendInputEventACK(WebInputEvent::MouseWheel,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
@@ -3315,7 +3315,7 @@
 
   // Continue to scroll in the reverse direction enough to initiate overscroll
   // in that direction.
-  SimulateWheelEvent(-55, -2, 0, true);
+  SimulateWheelEvent(-55, 0, 0, true);
   EXPECT_EQ(1U, process_->sink().message_count());
   SendInputEventACK(WebInputEvent::MouseWheel,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
@@ -3332,7 +3332,7 @@
 
   // Send a wheel event. ACK the event as not processed. This should not
   // initiate an overscroll gesture since it doesn't cross the threshold yet.
-  SimulateWheelEvent(10, -5, 0, true);
+  SimulateWheelEvent(10, 0, 0, true);
   EXPECT_EQ(1U, process_->sink().message_count());
   SendInputEventACK(WebInputEvent::MouseWheel,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
@@ -3341,7 +3341,7 @@
   process_->sink().ClearMessages();
 
   // Scroll some more so as to not overscroll.
-  SimulateWheelEvent(20, -4, 0, true);
+  SimulateWheelEvent(20, 0, 0, true);
   EXPECT_EQ(1U, process_->sink().message_count());
   SendInputEventACK(WebInputEvent::MouseWheel,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
@@ -3350,7 +3350,7 @@
   process_->sink().ClearMessages();
 
   // Scroll some more to initiate an overscroll.
-  SimulateWheelEvent(30, -4, 0, true);
+  SimulateWheelEvent(30, 0, 0, true);
   EXPECT_EQ(1U, process_->sink().message_count());
   SendInputEventACK(WebInputEvent::MouseWheel,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
@@ -3379,7 +3379,7 @@
 
   // Send a wheel event. ACK the event as not processed. This should not
   // initiate an overscroll gesture since it doesn't cross the threshold yet.
-  SimulateWheelEvent(10, -5, 0, true);
+  SimulateWheelEvent(10, 0, 0, true);
   EXPECT_EQ(1U, process_->sink().message_count());
   SendInputEventACK(WebInputEvent::MouseWheel,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
@@ -3388,7 +3388,7 @@
   process_->sink().ClearMessages();
 
   // Scroll some more so as to not overscroll.
-  SimulateWheelEvent(20, -4, 0, true);
+  SimulateWheelEvent(20, 0, 0, true);
   EXPECT_EQ(1U, process_->sink().message_count());
   SendInputEventACK(WebInputEvent::MouseWheel,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
@@ -3397,7 +3397,7 @@
   process_->sink().ClearMessages();
 
   // Scroll some more to initiate an overscroll.
-  SimulateWheelEvent(30, -4, 0, true);
+  SimulateWheelEvent(30, 0, 0, true);
   EXPECT_EQ(1U, process_->sink().message_count());
   SendInputEventACK(WebInputEvent::MouseWheel,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
@@ -3496,7 +3496,7 @@
   EXPECT_EQ(55.f, host_->overscroll_delta_x());
   EXPECT_EQ(-5.f, host_->overscroll_delta_y());
   EXPECT_EQ(5.f, host_->overscroll_delegate()->delta_x());
-  EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y());
+  EXPECT_EQ(-5.f, host_->overscroll_delegate()->delta_y());
   EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
   process_->sink().ClearMessages();
 
@@ -3509,7 +3509,7 @@
   EXPECT_EQ(65.f, host_->overscroll_delta_x());
   EXPECT_EQ(-10.f, host_->overscroll_delta_y());
   EXPECT_EQ(15.f, host_->overscroll_delegate()->delta_x());
-  EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y());
+  EXPECT_EQ(-10.f, host_->overscroll_delegate()->delta_y());
   EXPECT_EQ(0U, process_->sink().message_count());
   EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
 
@@ -3525,9 +3525,9 @@
 }
 
 // Tests that if the page is scrolled because of a scroll-gesture, then that
-// particular scroll sequence never generates overscroll, even if there is no
-// content to scroll on the page anymore.
-TEST_F(RenderWidgetHostTest, GestureScrollConsumedDoNotOverscroll) {
+// particular scroll sequence never generates overscroll if the scroll direction
+// is horizontal.
+TEST_F(RenderWidgetHostTest, GestureScrollConsumedHorizontal) {
   // Turn off debounce handling for test isolation.
   host_->SetupForOverscrollControllerTest();
   host_->set_debounce_interval_time_ms(0);
@@ -3535,9 +3535,9 @@
 
   SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
                        WebGestureEvent::Touchscreen);
-  SimulateGestureScrollUpdateEvent(8, -5, 0);
+  SimulateGestureScrollUpdateEvent(10, 0, 0);
 
-  // ACK both events as being processed.
+  // Start scrolling on content. ACK both events as being processed.
   SendInputEventACK(WebInputEvent::GestureScrollBegin,
                     INPUT_EVENT_ACK_STATE_CONSUMED);
   SendInputEventACK(WebInputEvent::GestureScrollUpdate,
@@ -3548,12 +3548,47 @@
   // Send another gesture event and ACK as not being processed. This should
   // not initiate overscroll because the beginning of the scroll event did
   // scroll some content on the page.
-  SimulateGestureScrollUpdateEvent(55, -5, 0);
+  SimulateGestureScrollUpdateEvent(55, 0, 0);
   SendInputEventACK(WebInputEvent::GestureScrollUpdate,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
   EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode());
 }
 
+// Tests that if the page is scrolled because of a scroll-gesture, then that
+// particular scroll sequence never generates overscroll if the scroll direction
+// is vertical.
+TEST_F(RenderWidgetHostTest, GestureScrollConsumedVertical) {
+  // Turn off debounce handling for test isolation.
+  host_->SetupForOverscrollControllerTest();
+  host_->set_debounce_interval_time_ms(0);
+  process_->sink().ClearMessages();
+
+  SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
+                       WebGestureEvent::Touchscreen);
+  SimulateGestureScrollUpdateEvent(0, -1, 0);
+
+  // Start scrolling on content. ACK both events as being processed.
+  SendInputEventACK(WebInputEvent::GestureScrollBegin,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  SendInputEventACK(WebInputEvent::GestureScrollUpdate,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode());
+  EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode());
+
+  // Send another gesture event and ACK as not being processed. This should
+  // initiate overscroll because the scroll was in the vertical direction even
+  // though the beginning of the scroll did scroll content.
+  SimulateGestureScrollUpdateEvent(0, -50, 0);
+  SendInputEventACK(WebInputEvent::GestureScrollUpdate,
+                    INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+  EXPECT_EQ(OVERSCROLL_NORTH, host_->overscroll_mode());
+
+  // Changing direction of scroll to be horizontal to test that this causes the
+  // vertical overscroll to stop.
+  SimulateGestureScrollUpdateEvent(500, 0, 0);
+  EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode());
+}
+
 // Tests that the overscroll controller plays nice with touch-scrolls and the
 // gesture event filter with debounce filtering turned on.
 TEST_F(RenderWidgetHostTest, GestureScrollDebounceOverscrolls) {
@@ -3570,7 +3605,7 @@
                     INPUT_EVENT_ACK_STATE_CONSUMED);
 
   // Send update events.
-  SimulateGestureScrollUpdateEvent(25, -5, 0);
+  SimulateGestureScrollUpdateEvent(25, 0, 0);
   EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
   EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize());
   EXPECT_TRUE(host_->ScrollingInProgress());
@@ -3592,7 +3627,7 @@
   EXPECT_EQ(2U, host_->GestureEventDebouncingQueueSize());
 
   // Send another update event. This should get into the queue.
-  SimulateGestureScrollUpdateEvent(30, 5, 0);
+  SimulateGestureScrollUpdateEvent(30, 0, 0);
   EXPECT_EQ(0U, process_->sink().message_count());
   EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
   EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize());
@@ -3612,7 +3647,7 @@
   process_->sink().ClearMessages();
 
   // Send another update event. This should get into the queue.
-  SimulateGestureScrollUpdateEvent(10, 5, 0);
+  SimulateGestureScrollUpdateEvent(10, 0, 0);
   EXPECT_EQ(0U, process_->sink().message_count());
   EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
   EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize());
@@ -3650,7 +3685,7 @@
                     INPUT_EVENT_ACK_STATE_CONSUMED);
 
   // Send update events.
-  SimulateGestureScrollUpdateEvent(55, -5, 0);
+  SimulateGestureScrollUpdateEvent(55, 0, 0);
   EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
   EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize());
   EXPECT_TRUE(host_->ScrollingInProgress());
@@ -3725,7 +3760,7 @@
 
   SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
                        WebGestureEvent::Touchscreen);
-  SimulateGestureScrollUpdateEvent(20, 4, 0);
+  SimulateGestureScrollUpdateEvent(20, 0, 0);
   SendInputEventACK(WebInputEvent::GestureScrollBegin,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
   SendInputEventACK(WebInputEvent::GestureScrollUpdate,
@@ -3743,7 +3778,7 @@
 
   SendInputEventACK(WebInputEvent::TouchMove,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
-  SimulateGestureScrollUpdateEvent(45, 5, 0);
+  SimulateGestureScrollUpdateEvent(45, 0, 0);
   SendInputEventACK(WebInputEvent::GestureScrollUpdate,
                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
   EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode());
@@ -3865,7 +3900,7 @@
   EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode());
   EXPECT_EQ(55.f, host_->overscroll_delta_x());
   EXPECT_EQ(5.f, host_->overscroll_delegate()->delta_x());
-  EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y());
+  EXPECT_EQ(-5.f, host_->overscroll_delegate()->delta_y());
 
   // Send end event.
   SimulateGestureEvent(WebKit::WebInputEvent::GestureScrollEnd,
@@ -3923,7 +3958,7 @@
   EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode());
   EXPECT_EQ(235.f, host_->overscroll_delta_x());
   EXPECT_EQ(185.f, host_->overscroll_delegate()->delta_x());
-  EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y());
+  EXPECT_EQ(-5.f, host_->overscroll_delegate()->delta_y());
 
   // Send end event.
   SimulateGestureEvent(WebKit::WebInputEvent::GestureScrollEnd,
@@ -4028,8 +4063,8 @@
   view_->set_bounds(gfx::Rect(0, 0, 400, 200));
   view_->Show();
 
-  SimulateWheelEvent(0, -5, 0, true);  // sent directly
-  SimulateWheelEvent(0, -1, 0, true);  // enqueued
+  SimulateWheelEvent(5, 0, 0, true);  // sent directly
+  SimulateWheelEvent(-1, 0, 0, true);  // enqueued
   SimulateWheelEvent(-10, -3, 0, true);  // coalesced into previous event
   SimulateWheelEvent(-15, -1, 0, true);  // coalesced into previous event
   SimulateWheelEvent(-30, -3, 0, true);  // coalesced into previous event
@@ -4146,9 +4181,9 @@
   EXPECT_TRUE(host_->ScrollStateIsUnknown());
   EXPECT_EQ(0U, process_->sink().message_count());
 
-  SimulateWheelEvent(0, -5, 0, true);  // sent directly
-  SimulateWheelEvent(-60, -1, 0, true);  // enqueued
-  SimulateWheelEvent(-100, -3, 0, true);  // coalesced into previous event
+  SimulateWheelEvent(-5, 0, 0, true);  // sent directly
+  SimulateWheelEvent(-60, 0, 0, true);  // enqueued
+  SimulateWheelEvent(-100, 0, 0, true);  // coalesced into previous event
   EXPECT_EQ(1U, process_->sink().message_count());
   EXPECT_TRUE(host_->ScrollStateIsUnknown());
   process_->sink().ClearMessages();
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc
index a5e1aa1..ec092d2 100644
--- a/content/browser/storage_partition_impl.cc
+++ b/content/browser/storage_partition_impl.cc
@@ -26,233 +26,132 @@
 
 namespace {
 
-int GenerateQuotaClientMask(uint32 remove_mask) {
-  int quota_client_mask = 0;
-
-  if (remove_mask & StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS)
-    quota_client_mask |= quota::QuotaClient::kFileSystem;
-  if (remove_mask & StoragePartition::REMOVE_DATA_MASK_WEBSQL)
-    quota_client_mask |= quota::QuotaClient::kDatabase;
-  if (remove_mask & StoragePartition::REMOVE_DATA_MASK_APPCACHE)
-    quota_client_mask |= quota::QuotaClient::kAppcache;
-  if (remove_mask & StoragePartition::REMOVE_DATA_MASK_INDEXEDDB)
-    quota_client_mask |= quota::QuotaClient::kIndexedDatabase;
-
-  return quota_client_mask;
+void DoNothingStatusCallback(quota::QuotaStatusCode status) {
+  // Do nothing.
 }
 
-void OnClearedCookies(const base::Closure& callback, int num_deleted) {
-  // The final callback needs to happen from UI thread.
-  if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
-    BrowserThread::PostTask(
-        BrowserThread::UI, FROM_HERE,
-        base::Bind(&OnClearedCookies, callback, num_deleted));
-    return;
-  }
-
-  callback.Run();
-}
-
-void ClearCookiesOnIOThread(
-    const scoped_refptr<net::URLRequestContextGetter>& rq_context,
-    const base::Time begin,
-    const base::Time end,
-    const base::Closure& callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-  net::CookieStore* cookie_store = rq_context->
-      GetURLRequestContext()->cookie_store();
-  cookie_store->DeleteAllCreatedBetweenAsync(begin, end,
-      base::Bind(&OnClearedCookies, callback));
-}
-
-void OnQuotaManagedOriginDeleted(const GURL& origin,
-                                 quota::StorageType type,
-                                 size_t* origins_to_delete_count,
-                                 const base::Closure& callback,
-                                 quota::QuotaStatusCode status) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-  DCHECK_GT(*origins_to_delete_count, 0u);
-  if (status != quota::kQuotaStatusOk) {
-    DLOG(ERROR) << "Couldn't remove data of type " << type << " for origin "
-                << origin << ". Status: " << status;
-  }
-
-  (*origins_to_delete_count)--;
-  if (*origins_to_delete_count == 0) {
-    delete origins_to_delete_count;
-    callback.Run();
-  }
-}
-
-void ClearQuotaManagedOriginsOnIOThread(quota::QuotaManager* quota_manager,
-                                        uint32 remove_mask,
-                                        const base::Closure& callback,
-                                        const std::set<GURL>& origins,
-                                        quota::StorageType quota_storage_type) {
+void ClearQuotaManagedOriginsOnIOThread(
+    const scoped_refptr<quota::QuotaManager>& quota_manager,
+    const std::set<GURL>& origins,
+    quota::StorageType quota_storage_type) {
   // The QuotaManager manages all storage other than cookies, LocalStorage,
   // and SessionStorage. This loop wipes out most HTML5 storage for the given
   // origins.
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
-  if (!origins.size()) {
-    // No origins to clear.
-    callback.Run();
-    return;
-  }
-
   std::set<GURL>::const_iterator origin;
-  size_t* origins_to_delete_count = new size_t(origins.size());
   for (std::set<GURL>::const_iterator origin = origins.begin();
        origin != origins.end(); ++origin) {
-    quota_manager->DeleteOriginData(
-        *origin, quota_storage_type,
-        GenerateQuotaClientMask(remove_mask),
-        base::Bind(&OnQuotaManagedOriginDeleted,
-                   origin->GetOrigin(), quota_storage_type,
-                   origins_to_delete_count, callback));
+    quota_manager->DeleteOriginData(*origin, quota_storage_type,
+                                    quota::QuotaClient::kAllClientsMask,
+                                    base::Bind(&DoNothingStatusCallback));
   }
 }
 
-void ClearShaderCacheOnIOThread(const base::FilePath& path,
-                                const base::Time begin,
-                                const base::Time end,
-                                const base::Closure& callback) {
+void ClearOriginOnIOThread(
+    uint32 storage_mask,
+    const GURL& storage_origin,
+    const scoped_refptr<net::URLRequestContextGetter>& request_context,
+    const scoped_refptr<quota::QuotaManager>& quota_manager) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-  ShaderCacheFactory::GetInstance()->ClearByPath(path, begin, end, callback);
+
+  if (storage_mask & StoragePartition::kCookies) {
+    // Handle the cookies.
+    net::CookieMonster* cookie_monster =
+        request_context->GetURLRequestContext()->cookie_store()->
+            GetCookieMonster();
+    if (cookie_monster)
+      cookie_monster->DeleteAllForHostAsync(
+          storage_origin, net::CookieMonster::DeleteCallback());
+  }
+
+  // Handle all HTML5 storage other than DOMStorageContext.
+  std::set<GURL> origins;
+  origins.insert(storage_origin);
+  if (storage_mask & StoragePartition::kQuotaManagedTemporaryStorage) {
+    ClearQuotaManagedOriginsOnIOThread(quota_manager,
+                                       origins,
+                                       quota::kStorageTypeTemporary);
+  }
+  if (storage_mask & StoragePartition::kQuotaManagedPersistentStorage) {
+    ClearQuotaManagedOriginsOnIOThread(quota_manager,
+                                       origins,
+                                       quota::kStorageTypePersistent);
+  }
+  if (storage_mask & StoragePartition::kQuotaManagedSyncableStorage) {
+    ClearQuotaManagedOriginsOnIOThread(quota_manager,
+                                       origins,
+                                       quota::kStorageTypeSyncable);
+  }
+}
+
+void ClearAllDataOnIOThread(
+    uint32 storage_mask,
+    const scoped_refptr<net::URLRequestContextGetter>& request_context,
+    const scoped_refptr<quota::QuotaManager>& quota_manager) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+  if (storage_mask & StoragePartition::kCookies) {
+    // Handle the cookies.
+    net::CookieMonster* cookie_monster =
+        request_context->GetURLRequestContext()->cookie_store()->
+            GetCookieMonster();
+    if (cookie_monster)
+      cookie_monster->DeleteAllAsync(net::CookieMonster::DeleteCallback());
+  }
+
+  // Handle all HTML5 storage other than DOMStorageContext.
+  if (storage_mask & StoragePartition::kQuotaManagedTemporaryStorage) {
+    quota_manager->GetOriginsModifiedSince(
+        quota::kStorageTypeTemporary, base::Time(),
+        base::Bind(&ClearQuotaManagedOriginsOnIOThread, quota_manager));
+  }
+  if (storage_mask & StoragePartition::kQuotaManagedPersistentStorage) {
+    quota_manager->GetOriginsModifiedSince(
+        quota::kStorageTypePersistent, base::Time(),
+        base::Bind(&ClearQuotaManagedOriginsOnIOThread, quota_manager));
+  }
+  if (storage_mask & StoragePartition::kQuotaManagedSyncableStorage) {
+    quota_manager->GetOriginsModifiedSince(
+        quota::kStorageTypeSyncable, base::Time(),
+        base::Bind(&ClearQuotaManagedOriginsOnIOThread, quota_manager));
+  }
+}
+
+void ClearedShaderCacheOnIOThread(base::Closure callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback);
+}
+
+void ClearShaderCacheOnIOThread(base::FilePath path,
+    base::Time begin, base::Time end, base::Closure callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  ShaderCacheFactory::GetInstance()->ClearByPath(
+      path, begin, end,
+      base::Bind(&ClearedShaderCacheOnIOThread, callback));
 }
 
 void OnLocalStorageUsageInfo(
     const scoped_refptr<DOMStorageContextImpl>& dom_storage_context,
-    const base::Time delete_begin,
-    const base::Time delete_end,
-    const base::Closure& callback,
     const std::vector<dom_storage::LocalStorageUsageInfo>& infos) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
   for (size_t i = 0; i < infos.size(); ++i) {
-    if (infos[i].last_modified >= delete_begin &&
-        infos[i].last_modified <= delete_end) {
-      dom_storage_context->DeleteLocalStorage(infos[i].origin);
-    }
+    dom_storage_context->DeleteLocalStorage(infos[i].origin);
   }
-  callback.Run();
 }
 
 void OnSessionStorageUsageInfo(
     const scoped_refptr<DOMStorageContextImpl>& dom_storage_context,
-    const base::Closure& callback,
     const std::vector<dom_storage::SessionStorageUsageInfo>& infos) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
-  for (size_t i = 0; i < infos.size(); ++i)
+  for (size_t i = 0; i < infos.size(); ++i) {
     dom_storage_context->DeleteSessionStorage(infos[i]);
-
-  callback.Run();
-}
-
-void ClearLocalStorageOnUIThread(
-    const scoped_refptr<DOMStorageContextImpl>& dom_storage_context,
-    const GURL& remove_origin,
-    const base::Time begin,
-    const base::Time end,
-    const base::Closure& callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
-  if (!remove_origin.is_empty()) {
-    dom_storage_context->DeleteLocalStorage(remove_origin);
-    callback.Run();
-    return;
   }
-
-  dom_storage_context->GetLocalStorageUsage(
-      base::Bind(&OnLocalStorageUsageInfo,
-                 dom_storage_context, begin, end, callback));
-}
-
-void ClearSessionStorageOnUIThread(
-    const scoped_refptr<DOMStorageContextImpl>& dom_storage_context,
-    const base::Closure& callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
-  dom_storage_context->GetSessionStorageUsage(
-      base::Bind(&OnSessionStorageUsageInfo, dom_storage_context, callback));
 }
 
 }  // namespace
 
-// Helper for deleting quota managed data from a partition.
-//
-// Most of the operations in this class are done on IO thread.
-struct StoragePartitionImpl::QuotaManagedDataDeletionHelper {
-  QuotaManagedDataDeletionHelper(const base::Closure& callback)
-      : callback(callback), task_count(0) {
-  }
-
-  void IncrementTaskCountOnIO();
-  void DecrementTaskCountOnIO();
-
-  void ClearDataOnIOThread(
-      const scoped_refptr<quota::QuotaManager>& quota_manager,
-      const base::Time begin,
-      uint32 remove_mask,
-      uint32 quota_storage_remove_mask,
-      const GURL& remove_origin);
-
-  // Accessed on IO thread.
-  const base::Closure callback;
-  // Accessed on IO thread.
-  int task_count;
-};
-
-// Helper for deleting all sorts of data from a partition, keeps track of
-// deletion status.
-//
-// StoragePartitionImpl creates an instance of this class to keep track of
-// data deletion progress. Deletion requires deleting multiple bits of data
-// (e.g. cookies, local storage, session storage etc.) and hopping between UI
-// and IO thread. An instance of this class is created in the beginning of
-// deletion process (StoragePartitionImpl::ClearDataImpl) and the instance is
-// forwarded and updated on each (sub) deletion's callback. The instance is
-// finally destroyed when deletion completes (and |callback| is invoked).
-struct StoragePartitionImpl::DataDeletionHelper {
-  DataDeletionHelper(const base::Closure& callback)
-      : callback(callback), task_count(0) {
-  }
-
-  void IncrementTaskCountOnUI();
-  void DecrementTaskCountOnUI();
-
-  void ClearDataOnUIThread(uint32 remove_mask,
-                           uint32 quota_storage_remove_mask,
-                           const GURL& remove_origin,
-                           const base::FilePath& path,
-                           net::URLRequestContextGetter* rq_context,
-                           DOMStorageContextImpl* dom_storage_context,
-                           quota::QuotaManager* quota_manager,
-                           const base::Time begin,
-                           const base::Time end);
-
-  // Accessed on UI thread.
-  const base::Closure callback;
-  // Accessed on UI thread.
-  int task_count;
-};
-
-void ClearQuotaManagedDataOnIOThread(
-    const scoped_refptr<quota::QuotaManager>& quota_manager,
-    const base::Time begin,
-    uint32 remove_mask,
-    uint32 quota_storage_remove_mask,
-    const GURL& remove_origin,
-    const base::Closure& callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
-  StoragePartitionImpl::QuotaManagedDataDeletionHelper* helper =
-      new StoragePartitionImpl::QuotaManagedDataDeletionHelper(callback);
-  helper->ClearDataOnIOThread(quota_manager, begin,
-      remove_mask, quota_storage_remove_mask, remove_origin);
-}
-
 StoragePartitionImpl::StoragePartitionImpl(
     const base::FilePath& partition_path,
     quota::QuotaManager* quota_manager,
@@ -394,221 +293,59 @@
   return indexed_db_context_.get();
 }
 
-void StoragePartitionImpl::ClearDataImpl(
-    uint32 remove_mask,
-    uint32 quota_storage_remove_mask,
-    const GURL& remove_origin,
-    net::URLRequestContextGetter* rq_context,
-    const base::Time begin,
-    const base::Time end,
-    const base::Closure& callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DataDeletionHelper* helper = new DataDeletionHelper(callback);
-  // |helper| deletes itself when done in
-  // DataDeletionHelper::DecrementTaskCountOnUI().
-  helper->ClearDataOnUIThread(
-      remove_mask, quota_storage_remove_mask, remove_origin,
-      GetPath(), rq_context, dom_storage_context_, quota_manager_, begin, end);
-}
-
-void StoragePartitionImpl::
-    QuotaManagedDataDeletionHelper::IncrementTaskCountOnIO() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-  ++task_count;
-}
-
-void StoragePartitionImpl::
-    QuotaManagedDataDeletionHelper::DecrementTaskCountOnIO() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-  DCHECK_GT(task_count, 0);
-  --task_count;
-  if (task_count)
-    return;
-
-  callback.Run();
-  delete this;
-}
-
-void StoragePartitionImpl::QuotaManagedDataDeletionHelper::ClearDataOnIOThread(
-    const scoped_refptr<quota::QuotaManager>& quota_manager,
-    const base::Time begin,
-    uint32 remove_mask,
-    uint32 quota_storage_remove_mask,
-    const GURL& remove_origin) {
-  std::set<GURL> origins;
-  if (!remove_origin.is_empty())
-    origins.insert(remove_origin);
-
-  IncrementTaskCountOnIO();
-  base::Closure decrement_callback = base::Bind(
-      &QuotaManagedDataDeletionHelper::DecrementTaskCountOnIO,
-      base::Unretained(this));
-
-  if (quota_storage_remove_mask & kQuotaManagedPersistentStorage) {
-    IncrementTaskCountOnIO();
-    if (origins.empty()) {  // Remove for all origins.
-      // Ask the QuotaManager for all origins with temporary quota modified
-      // within the user-specified timeframe, and deal with the resulting set in
-      // ClearQuotaManagedOriginsOnIOThread().
-      quota_manager->GetOriginsModifiedSince(
-          quota::kStorageTypePersistent, begin,
-          base::Bind(&ClearQuotaManagedOriginsOnIOThread,
-                     quota_manager, remove_mask, decrement_callback));
-    } else {
-      ClearQuotaManagedOriginsOnIOThread(
-          quota_manager, remove_mask, decrement_callback,
-          origins, quota::kStorageTypePersistent);
-    }
-  }
-
-  // Do the same for temporary quota.
-  if (quota_storage_remove_mask & kQuotaManagedTemporaryStorage) {
-    IncrementTaskCountOnIO();
-    if (origins.empty()) {  // Remove for all origins.
-      quota_manager->GetOriginsModifiedSince(
-          quota::kStorageTypeTemporary, begin,
-          base::Bind(&ClearQuotaManagedOriginsOnIOThread,
-                     quota_manager, remove_mask, decrement_callback));
-    } else {
-      ClearQuotaManagedOriginsOnIOThread(
-          quota_manager, remove_mask, decrement_callback,
-          origins, quota::kStorageTypeTemporary);
-    }
-  }
-
-  // Do the same for syncable quota.
-  if (quota_storage_remove_mask & kQuotaManagedSyncableStorage) {
-    IncrementTaskCountOnIO();
-    if (origins.empty()) {  // Remove for all origins.
-      quota_manager->GetOriginsModifiedSince(
-          quota::kStorageTypeSyncable, begin,
-          base::Bind(&ClearQuotaManagedOriginsOnIOThread,
-                     quota_manager, remove_mask, decrement_callback));
-    } else {
-      ClearQuotaManagedOriginsOnIOThread(
-          quota_manager, remove_mask, decrement_callback,
-          origins, quota::kStorageTypeSyncable);
-    }
-  }
-
-  DecrementTaskCountOnIO();
-}
-
-void StoragePartitionImpl::DataDeletionHelper::IncrementTaskCountOnUI() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  ++task_count;
-}
-
-void StoragePartitionImpl::DataDeletionHelper::DecrementTaskCountOnUI() {
-  if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
-    BrowserThread::PostTask(
-        BrowserThread::UI, FROM_HERE,
-        base::Bind(&DataDeletionHelper::DecrementTaskCountOnUI,
-                   base::Unretained(this)));
-    return;
-  }
-  DCHECK_GT(task_count, 0);
-  --task_count;
-  if (!task_count) {
-    callback.Run();
-    delete this;
-  }
-}
-
-void StoragePartitionImpl::DataDeletionHelper::ClearDataOnUIThread(
-    uint32 remove_mask,
-    uint32 quota_storage_remove_mask,
-    const GURL& remove_origin,
-    const base::FilePath& path,
-    net::URLRequestContextGetter* rq_context,
-    DOMStorageContextImpl* dom_storage_context,
-    quota::QuotaManager* quota_manager,
-    const base::Time begin,
-    const base::Time end) {
-  DCHECK_NE(remove_mask, 0u);
-  DCHECK(!callback.is_null());
-
-  IncrementTaskCountOnUI();
-  base::Closure decrement_callback = base::Bind(
-      &DataDeletionHelper::DecrementTaskCountOnUI, base::Unretained(this));
-
-  if (remove_mask & REMOVE_DATA_MASK_COOKIES) {
-    // Handle the cookies.
-    IncrementTaskCountOnUI();
-    BrowserThread::PostTask(
-        BrowserThread::IO, FROM_HERE,
-        base::Bind(&ClearCookiesOnIOThread,
-                   make_scoped_refptr(rq_context), begin, end,
-                   decrement_callback));
-  }
-
-  if (remove_mask & REMOVE_DATA_MASK_INDEXEDDB ||
-      remove_mask & REMOVE_DATA_MASK_WEBSQL ||
-      remove_mask & REMOVE_DATA_MASK_APPCACHE ||
-      remove_mask & REMOVE_DATA_MASK_FILE_SYSTEMS) {
-    IncrementTaskCountOnUI();
-    BrowserThread::PostTask(
-        BrowserThread::IO, FROM_HERE,
-        base::Bind(&ClearQuotaManagedDataOnIOThread,
-                   make_scoped_refptr(quota_manager), begin,
-                   remove_mask, quota_storage_remove_mask, remove_origin,
-                   decrement_callback));
-  }
-
-  if (remove_mask & REMOVE_DATA_MASK_LOCAL_STORAGE) {
-    IncrementTaskCountOnUI();
-    ClearLocalStorageOnUIThread(
-        make_scoped_refptr(dom_storage_context),
-        remove_origin, begin, end, decrement_callback);
-
-    // ClearDataImpl cannot clear session storage data when a particular origin
-    // is specified. Therefore we ignore clearing session storage in this case.
-    // TODO(lazyboy): Fix.
-    if (remove_origin.is_empty()) {
-      IncrementTaskCountOnUI();
-      ClearSessionStorageOnUIThread(
-          make_scoped_refptr(dom_storage_context), decrement_callback);
-    }
-  }
-
-  if (remove_mask & REMOVE_DATA_MASK_SHADER_CACHE) {
-    IncrementTaskCountOnUI();
-    BrowserThread::PostTask(
-        BrowserThread::IO, FROM_HERE,
-        base::Bind(&ClearShaderCacheOnIOThread,
-                   path, begin, end, decrement_callback));
-  }
-
-  DecrementTaskCountOnUI();
-}
-
-
-void StoragePartitionImpl::ClearDataForOrigin(
-    uint32 remove_mask,
-    uint32 quota_storage_remove_mask,
+void StoragePartitionImpl::AsyncClearDataForOrigin(
+    uint32 storage_mask,
     const GURL& storage_origin,
     net::URLRequestContextGetter* request_context_getter) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  ClearDataImpl(remove_mask, quota_storage_remove_mask, storage_origin,
-                request_context_getter, base::Time(), base::Time::Max(),
-                base::Bind(&base::DoNothing));
+
+  BrowserThread::PostTask(
+      BrowserThread::IO, FROM_HERE,
+      base::Bind(&ClearOriginOnIOThread,
+                 storage_mask,
+                 storage_origin,
+                 make_scoped_refptr(request_context_getter),
+                 quota_manager_));
+
+  if (storage_mask & kLocalDomStorage)
+    GetDOMStorageContext()->DeleteLocalStorage(storage_origin);
 }
 
-void StoragePartitionImpl::ClearDataForUnboundedRange(
-    uint32 remove_mask,
-    uint32 quota_storage_remove_mask) {
-  ClearDataImpl(remove_mask, quota_storage_remove_mask, GURL(),
-                GetURLRequestContext(), base::Time(), base::Time::Max(),
-                base::Bind(&base::DoNothing));
+void StoragePartitionImpl::AsyncClearData(uint32 storage_mask) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+  // We ignore the media request context because it shares the same cookie store
+  // as the main request context.
+  BrowserThread::PostTask(
+      BrowserThread::IO, FROM_HERE,
+      base::Bind(&ClearAllDataOnIOThread,
+                 storage_mask,
+                 url_request_context_,
+                 quota_manager_));
+
+  if (storage_mask & kLocalDomStorage) {
+    dom_storage_context_->GetLocalStorageUsage(
+        base::Bind(&OnLocalStorageUsageInfo, dom_storage_context_));
+  }
+
+  if (storage_mask & kSessionDomStorage) {
+    dom_storage_context_->GetSessionStorageUsage(
+        base::Bind(&OnSessionStorageUsageInfo, dom_storage_context_));
+  }
 }
 
-void StoragePartitionImpl::ClearDataForRange(uint32 remove_mask,
-                                             uint32 quota_storage_remove_mask,
-                                             const base::Time& begin,
-                                             const base::Time& end,
-                                             const base::Closure& callback) {
-  ClearDataImpl(remove_mask, quota_storage_remove_mask, GURL(),
-                GetURLRequestContext(), begin, end, callback);
+void StoragePartitionImpl::AsyncClearDataBetween(uint32 storage_mask,
+      const base::Time& begin, const base::Time& end,
+      const base::Closure& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK(storage_mask == kShaderStorage);
+
+  if (storage_mask & kShaderStorage) {
+    BrowserThread::PostTask(
+        BrowserThread::IO, FROM_HERE,
+        base::Bind(&ClearShaderCacheOnIOThread, GetPath(), begin, end,
+            callback));
+  }
 }
 
 WebRTCIdentityStore* StoragePartitionImpl::GetWebRTCIdentityStore() {
diff --git a/content/browser/storage_partition_impl.h b/content/browser/storage_partition_impl.h
index 0410f4d..9dcdfec 100644
--- a/content/browser/storage_partition_impl.h
+++ b/content/browser/storage_partition_impl.h
@@ -31,26 +31,19 @@
   virtual webkit_database::DatabaseTracker* GetDatabaseTracker() OVERRIDE;
   virtual DOMStorageContextImpl* GetDOMStorageContext() OVERRIDE;
   virtual IndexedDBContextImpl* GetIndexedDBContext() OVERRIDE;
-
-  virtual void ClearDataForOrigin(
-      uint32 remove_mask,
-      uint32 quota_storage_remove_mask,
+  virtual void AsyncClearDataForOrigin(
+      uint32 storage_mask,
       const GURL& storage_origin,
       net::URLRequestContextGetter* request_context_getter) OVERRIDE;
-  virtual void ClearDataForUnboundedRange(
-      uint32 remove_mask,
-      uint32 quota_storage_remove_mask) OVERRIDE;
-  virtual void ClearDataForRange(uint32 remove_mask,
-                                 uint32 quota_storage_remove_mask,
-                                 const base::Time& begin,
-                                 const base::Time& end,
-                                 const base::Closure& callback) OVERRIDE;
+  virtual void AsyncClearData(uint32 storage_mask) OVERRIDE;
+  virtual void AsyncClearDataBetween(
+      uint32 storage_mask,
+      const base::Time& begin,
+      const base::Time& end,
+      const base::Closure& callback) OVERRIDE;
 
   WebRTCIdentityStore* GetWebRTCIdentityStore();
 
-  struct DataDeletionHelper;
-  struct QuotaManagedDataDeletionHelper;
-
  private:
   friend class StoragePartitionImplMap;
   FRIEND_TEST_ALL_PREFIXES(StoragePartitionShaderClearTest, ClearShaderCache);
@@ -65,10 +58,6 @@
                                       bool in_memory,
                                       const base::FilePath& profile_path);
 
-  // Quota managed data uses a different bitmask for types than
-  // StoragePartition uses. This method generates that mask.
-  static int GenerateQuotaClientMask(uint32 remove_mask);
-
   CONTENT_EXPORT StoragePartitionImpl(
       const base::FilePath& partition_path,
       quota::QuotaManager* quota_manager,
@@ -79,14 +68,6 @@
       IndexedDBContextImpl* indexed_db_context,
       scoped_ptr<WebRTCIdentityStore> webrtc_identity_store);
 
-  void ClearDataImpl(uint32 remove_mask,
-                     uint32 quota_storage_remove_mask,
-                     const GURL& remove_origin,
-                     net::URLRequestContextGetter* rq_context,
-                     const base::Time begin,
-                     const base::Time end,
-                     const base::Closure& callback);
-
   // Used by StoragePartitionImplMap.
   //
   // TODO(ajwong): These should be taken in the constructor and in Create() but
diff --git a/content/browser/storage_partition_impl_map.cc b/content/browser/storage_partition_impl_map.cc
index da7e88f..8b6556e 100644
--- a/content/browser/storage_partition_impl_map.cc
+++ b/content/browser/storage_partition_impl_map.cc
@@ -496,9 +496,7 @@
        ++it) {
     const StoragePartitionConfig& config = it->first;
     if (config.partition_domain == partition_domain) {
-      it->second->ClearDataForUnboundedRange(
-          StoragePartition::REMOVE_DATA_MASK_ALL,
-          StoragePartition::kAllStorage);
+      it->second->AsyncClearData(StoragePartition::kAllStorage);
       if (!config.in_memory) {
         paths_to_keep.push_back(it->second->GetPath());
       }
diff --git a/content/browser/storage_partition_impl_unittest.cc b/content/browser/storage_partition_impl_unittest.cc
index 0492335..36af638 100644
--- a/content/browser/storage_partition_impl_unittest.cc
+++ b/content/browser/storage_partition_impl_unittest.cc
@@ -98,10 +98,8 @@
 void ClearData(content::StoragePartitionImpl* sp,
                const base::Closure& cb) {
   base::Time time;
-  sp->ClearDataForRange(
-      StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE,
-      StoragePartition::kAllStorage,
-      time, time, cb);
+  sp->AsyncClearDataBetween(content::StoragePartition::kShaderStorage,
+                           time, time, cb);
 }
 
 TEST_F(StoragePartitionShaderClearTest, ClearShaderCache) {
diff --git a/content/browser/web_contents/aura/window_slider.cc b/content/browser/web_contents/aura/window_slider.cc
index 8b94cd0..7afd32d 100644
--- a/content/browser/web_contents/aura/window_slider.cc
+++ b/content/browser/web_contents/aura/window_slider.cc
@@ -58,8 +58,8 @@
       owner_(owner),
       delta_x_(0.f),
       weak_factory_(this),
-      min_start_threshold_(content::GetOverscrollConfig(
-          content::OVERSCROLL_CONFIG_MIN_THRESHOLD_START)),
+      horiz_start_threshold_(content::GetOverscrollConfig(
+          content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START)),
       complete_threshold_(content::GetOverscrollConfig(
           content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE)) {
   event_window_->AddPreTargetHandler(this);
@@ -89,7 +89,7 @@
 }
 
 bool WindowSlider::IsSlideInProgress() const {
-  return fabs(delta_x_) >= min_start_threshold_ || slider_.get() ||
+  return fabs(delta_x_) >= horiz_start_threshold_ || slider_.get() ||
       weak_factory_.HasWeakPtrs();
 }
 
@@ -107,7 +107,7 @@
 void WindowSlider::UpdateForScroll(float x_offset, float y_offset) {
   float old_delta = delta_x_;
   delta_x_ += x_offset;
-  if (fabs(delta_x_) < min_start_threshold_ && !slider_.get())
+  if (fabs(delta_x_) < horiz_start_threshold_ && !slider_.get())
     return;
 
   if ((old_delta < 0 && delta_x_ > 0) ||
@@ -127,13 +127,13 @@
     SetupSliderLayer();
   }
 
-  if (delta_x_ <= -min_start_threshold_) {
+  if (delta_x_ <= -horiz_start_threshold_) {
     translate = owner_->bounds().width() +
-        std::max(delta_x_ + min_start_threshold_,
+        std::max(delta_x_ + horiz_start_threshold_,
                  static_cast<float>(-owner_->bounds().width()));
     translate_layer = slider_.get();
-  } else if (delta_x_ >= min_start_threshold_) {
-    translate = std::min(delta_x_ - min_start_threshold_,
+  } else if (delta_x_ >= horiz_start_threshold_) {
+    translate = std::min(delta_x_ - horiz_start_threshold_,
                          static_cast<float>(owner_->bounds().width()));
     translate_layer = owner_->layer();
   } else {
@@ -153,7 +153,7 @@
     return;
 
   int width = owner_->bounds().width();
-  float ratio = (fabs(delta_x_) - min_start_threshold_) / width;
+  float ratio = (fabs(delta_x_) - horiz_start_threshold_) / width;
   if (ratio < complete_threshold_) {
     ResetScroll();
     return;
diff --git a/content/browser/web_contents/aura/window_slider.h b/content/browser/web_contents/aura/window_slider.h
index 03ec2df..227ad1b 100644
--- a/content/browser/web_contents/aura/window_slider.h
+++ b/content/browser/web_contents/aura/window_slider.h
@@ -120,7 +120,7 @@
 
   base::WeakPtrFactory<WindowSlider> weak_factory_;
 
-  const float min_start_threshold_;
+  const float horiz_start_threshold_;
   const float complete_threshold_;
 
   DISALLOW_COPY_AND_ASSIGN(WindowSlider);
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 71dc1df..fe34bc0 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -73,12 +73,12 @@
 #include "content/public/common/bindings_policy.h"
 #include "content/public/common/content_constants.h"
 #include "content/public/common/content_switches.h"
+#include "content/public/common/page_zoom.h"
 #include "content/public/common/url_constants.h"
 #include "net/base/mime_util.h"
 #include "net/base/net_util.h"
 #include "net/base/network_change_notifier.h"
 #include "net/url_request/url_request_context_getter.h"
-#include "third_party/WebKit/public/web/WebView.h"
 #include "ui/base/layout.h"
 #include "ui/base/touch/touch_device.h"
 #include "ui/base/ui_base_switches.h"
@@ -2053,7 +2053,7 @@
   // Calculate the zoom percent from the factor. Round up to the nearest whole
   // number.
   int percent = static_cast<int>(
-      WebKit::WebView::zoomLevelToZoomFactor(GetZoomLevel()) * 100 + 0.5);
+      ZoomLevelToZoomFactor(GetZoomLevel()) * 100 + 0.5);
   *enable_decrement = percent > minimum_zoom_percent_;
   *enable_increment = percent < maximum_zoom_percent_;
   return percent;
diff --git a/ppapi/proxy/browser_font_resource_trusted.cc b/content/child/browser_font_resource_trusted.cc
similarity index 97%
rename from ppapi/proxy/browser_font_resource_trusted.cc
rename to content/child/browser_font_resource_trusted.cc
index b8bc875..d31ede0 100644
--- a/ppapi/proxy/browser_font_resource_trusted.cc
+++ b/content/child/browser_font_resource_trusted.cc
@@ -2,11 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ppapi/proxy/browser_font_resource_trusted.h"
+#include "content/child/browser_font_resource_trusted.h"
 
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "ppapi/c/dev/ppb_font_dev.h"
+#include "ppapi/proxy/connection.h"
 #include "ppapi/shared_impl/ppapi_preferences.h"
 #include "ppapi/shared_impl/var.h"
 #include "ppapi/thunk/enter.h"
@@ -34,8 +35,7 @@
 using WebKit::WebTextRun;
 using WebKit::WebCanvas;
 
-namespace ppapi {
-namespace proxy {
+namespace content {
 
 namespace {
 
@@ -143,7 +143,7 @@
 // Assumes the given PP_FontDescription has been validated.
 WebFontDescription PPFontDescToWebFontDesc(
     const PP_BrowserFont_Trusted_Description& font,
-    const Preferences& prefs) {
+    const ppapi::Preferences& prefs) {
   // Verify that the enums match so we can just static cast.
   COMPILE_ASSERT(static_cast<int>(WebFontDescription::Weight100) ==
                  static_cast<int>(PP_BROWSERFONT_TRUSTED_WEIGHT_100),
@@ -248,10 +248,10 @@
 }
 
 BrowserFontResource_Trusted::BrowserFontResource_Trusted(
-    Connection connection,
+    ppapi::proxy::Connection connection,
     PP_Instance instance,
     const PP_BrowserFont_Trusted_Description& desc,
-    const Preferences& prefs)
+    const ppapi::Preferences& prefs)
     : PluginResource(connection, instance),
       font_(WebFont::create(PPFontDescToWebFontDesc(desc, prefs))) {
 }
@@ -259,7 +259,7 @@
 BrowserFontResource_Trusted::~BrowserFontResource_Trusted() {
 }
 
-thunk::PPB_BrowserFont_Trusted_API*
+ppapi::thunk::PPB_BrowserFont_Trusted_API*
 BrowserFontResource_Trusted::AsPPB_BrowserFont_Trusted_API() {
   return this;
 }
@@ -425,5 +425,4 @@
   }
 }
 
-}  // namespace proxy
-}  // namespace ppapi
+}  // namespace content
diff --git a/ppapi/proxy/browser_font_resource_trusted.h b/content/child/browser_font_resource_trusted.h
similarity index 82%
rename from ppapi/proxy/browser_font_resource_trusted.h
rename to content/child/browser_font_resource_trusted.h
index a3b9a70..23a4344 100644
--- a/ppapi/proxy/browser_font_resource_trusted.h
+++ b/content/child/browser_font_resource_trusted.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 PPAPI_PROXY_BROWSER_FONT_TRUSTED_RESOURCE_H_
-#define PPAPI_PROXY_BROWSER_FONT_TRUSTED_RESOURCE_H_
+#ifndef CONTENT_CHILD_BROWSER_FONT_RESOURCE_TRUSTED_H_
+#define CONTENT_CHILD_BROWSER_FONT_RESOURCE_TRUSTED_H_
 
 #include <string>
 
@@ -14,7 +14,6 @@
 #include "ppapi/c/pp_resource.h"
 #include "ppapi/c/pp_stdint.h"
 #include "ppapi/proxy/plugin_resource.h"
-#include "ppapi/proxy/ppapi_proxy_export.h"
 #include "ppapi/shared_impl/ppapi_preferences.h"
 #include "ppapi/thunk/ppb_browser_font_trusted_api.h"
 
@@ -24,19 +23,16 @@
 class WebFont;
 }
 
-namespace ppapi {
-namespace proxy {
+namespace content {
 
-class PPAPI_PROXY_EXPORT BrowserFontResource_Trusted
-    : public PluginResource,
-      public thunk::PPB_BrowserFont_Trusted_API {
+class BrowserFontResource_Trusted
+    : public ppapi::proxy::PluginResource,
+      public ppapi::thunk::PPB_BrowserFont_Trusted_API {
  public:
-  BrowserFontResource_Trusted(Connection connection,
+  BrowserFontResource_Trusted(ppapi::proxy::Connection connection,
                               PP_Instance instance,
                               const PP_BrowserFont_Trusted_Description& desc,
-                              const Preferences& prefs);
-
-  virtual ~BrowserFontResource_Trusted();
+                              const ppapi::Preferences& prefs);
 
   // Validates the parameters in thee description. Can be called on any thread.
   static bool IsPPFontDescriptionValid(
@@ -65,6 +61,8 @@
       uint32_t char_offset) OVERRIDE;
 
  private:
+  virtual ~BrowserFontResource_Trusted();
+
   // Internal version of DrawTextAt that takes a mapped PlatformCanvas.
   void DrawTextToCanvas(SkCanvas* destination,
                         const PP_BrowserFont_Trusted_TextRun& text,
@@ -79,7 +77,6 @@
   DISALLOW_COPY_AND_ASSIGN(BrowserFontResource_Trusted);
 };
 
-}  // namespace proxy
-}  // namespace ppapi
+}  // namespace content
 
-#endif  // PPAPI_PROXY_BROWSER_FONT_TRUSTED_RESOURCE_H_
+#endif  // CONTENT_CHILD_BROWSER_FONT_RESOURCE_TRUSTED_H_
diff --git a/content/child/child_process.cc b/content/child/child_process.cc
index 68eef19..837ab02 100644
--- a/content/child/child_process.cc
+++ b/content/child/child_process.cc
@@ -11,7 +11,7 @@
 #include "base/lazy_instance.h"
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/statistics_recorder.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/thread.h"
diff --git a/content/child/child_thread.cc b/content/child/child_thread.cc
index 16bfae2..eefa4c5 100644
--- a/content/child/child_thread.cc
+++ b/content/child/child_thread.cc
@@ -9,8 +9,8 @@
 #include "base/command_line.h"
 #include "base/lazy_instance.h"
 #include "base/message_loop/message_loop.h"
-#include "base/process.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
+#include "base/process/process_handle.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_local.h"
 #include "base/tracked_objects.h"
diff --git a/content/child/fileapi/file_system_dispatcher.cc b/content/child/fileapi/file_system_dispatcher.cc
index 5c7d7c9..f2ba527 100644
--- a/content/child/fileapi/file_system_dispatcher.cc
+++ b/content/child/fileapi/file_system_dispatcher.cc
@@ -6,7 +6,7 @@
 
 #include "base/callback.h"
 #include "base/file_util.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "content/child/child_thread.h"
 #include "content/common/fileapi/file_system_messages.h"
 
diff --git a/content/child/fileapi/file_system_dispatcher.h b/content/child/fileapi/file_system_dispatcher.h
index a8fc624..4a8ced4 100644
--- a/content/child/fileapi/file_system_dispatcher.h
+++ b/content/child/fileapi/file_system_dispatcher.h
@@ -11,7 +11,7 @@
 #include "base/basictypes.h"
 #include "base/callback_forward.h"
 #include "base/id_map.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "ipc/ipc_listener.h"
 #include "ipc/ipc_platform_file.h"
 #include "webkit/common/fileapi/file_system_types.h"
diff --git a/content/child/npapi/np_channel_base.h b/content/child/npapi/np_channel_base.h
index f0a9466..4b5a369 100644
--- a/content/child/npapi/np_channel_base.h
+++ b/content/child/npapi/np_channel_base.h
@@ -11,7 +11,7 @@
 #include "base/containers/hash_tables.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "content/child/npapi/npobject_base.h"
 #include "content/common/message_router.h"
 #include "ipc/ipc_channel_handle.h"
diff --git a/content/child/npapi/webplugin_delegate_impl.cc b/content/child/npapi/webplugin_delegate_impl.cc
index f05d59d..b7334aa 100644
--- a/content/child/npapi/webplugin_delegate_impl.cc
+++ b/content/child/npapi/webplugin_delegate_impl.cc
@@ -9,7 +9,7 @@
 
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/strings/string_util.h"
 #include "content/child/npapi/plugin_instance.h"
 #include "content/child/npapi/plugin_lib.h"
diff --git a/content/child/resource_dispatcher_unittest.cc b/content/child/resource_dispatcher_unittest.cc
index 2959c08..6b5eb40 100644
--- a/content/child/resource_dispatcher_unittest.cc
+++ b/content/child/resource_dispatcher_unittest.cc
@@ -7,8 +7,8 @@
 
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
-#include "base/process.h"
-#include "base/process_util.h"
+#include "base/process/process.h"
+#include "base/process/process_handle.h"
 #include "content/child/request_extra_data.h"
 #include "content/child/resource_dispatcher.h"
 #include "content/common/resource_messages.h"
diff --git a/content/child/socket_stream_dispatcher.cc b/content/child/socket_stream_dispatcher.cc
index 9997f35..87f299f 100644
--- a/content/child/socket_stream_dispatcher.cc
+++ b/content/child/socket_stream_dispatcher.cc
@@ -19,8 +19,8 @@
 #include "content/common/socket_stream_messages.h"
 #include "net/base/net_errors.h"
 #include "url/gurl.h"
+#include "webkit/child/websocketstreamhandle_bridge.h"
 #include "webkit/child/websocketstreamhandle_delegate.h"
-#include "webkit/glue/websocketstreamhandle_bridge.h"
 
 namespace content {
 
diff --git a/content/common/android/surface_texture_peer.h b/content/common/android/surface_texture_peer.h
index 0e1fbcc..9be032d 100644
--- a/content/common/android/surface_texture_peer.h
+++ b/content/common/android/surface_texture_peer.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_COMMON_ANDROID_SURFACE_TEXTURE_PEER_H_
 #define CONTENT_COMMON_ANDROID_SURFACE_TEXTURE_PEER_H_
 
-#include "base/process.h"
+#include "base/process/process.h"
 #include "ui/gl/android/surface_texture_bridge.h"
 
 namespace content {
diff --git a/content/common/browser_plugin/browser_plugin_messages.h b/content/common/browser_plugin/browser_plugin_messages.h
index a91f92f..5c921ac 100644
--- a/content/common/browser_plugin/browser_plugin_messages.h
+++ b/content/common/browser_plugin/browser_plugin_messages.h
@@ -8,7 +8,7 @@
 
 #include "base/basictypes.h"
 #include "base/memory/shared_memory.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/values.h"
 #include "cc/output/compositor_frame.h"
 #include "cc/output/compositor_frame_ack.h"
@@ -312,18 +312,6 @@
 IPC_MESSAGE_CONTROL1(BrowserPluginMsg_GuestGone,
                      int /* instance_id */)
 
-// When the guest is unresponsive, the browser process informs the embedder
-// through this message.
-IPC_MESSAGE_CONTROL2(BrowserPluginMsg_GuestUnresponsive,
-                     int /* instance_id */,
-                     int /* process_id */)
-
-// When the guest begins responding again, the browser process informs the
-// embedder through this message.
-IPC_MESSAGE_CONTROL2(BrowserPluginMsg_GuestResponsive,
-                     int /* instance_id */,
-                     int /* process_id */)
-
 // When the user tabs to the end of the tab stops of a guest, the browser
 // process informs the embedder to tab out of the browser plugin.
 IPC_MESSAGE_CONTROL2(BrowserPluginMsg_AdvanceFocus,
diff --git a/content/common/child_process_host_impl.cc b/content/common/child_process_host_impl.cc
index 2dfab2f..8b022e5 100644
--- a/content/common/child_process_host_impl.cc
+++ b/content/common/child_process_host_impl.cc
@@ -12,7 +12,7 @@
 #include "base/logging.h"
 #include "base/metrics/histogram.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
+#include "base/process/process_metrics.h"
 #include "base/rand_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/third_party/dynamic_annotations/dynamic_annotations.h"
diff --git a/content/common/gpu/client/command_buffer_proxy_impl.cc b/content/common/gpu/client/command_buffer_proxy_impl.cc
index c220e2a..1056939 100644
--- a/content/common/gpu/client/command_buffer_proxy_impl.cc
+++ b/content/common/gpu/client/command_buffer_proxy_impl.cc
@@ -8,7 +8,6 @@
 #include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/shared_memory.h"
-#include "base/process_util.h"
 #include "base/stl_util.h"
 #include "content/common/child_process_messages.h"
 #include "content/common/gpu/client/gpu_channel_host.h"
diff --git a/content/common/gpu/client/gpu_channel_host.h b/content/common/gpu/client/gpu_channel_host.h
index c06989d..6decd17 100644
--- a/content/common/gpu/client/gpu_channel_host.h
+++ b/content/common/gpu/client/gpu_channel_host.h
@@ -13,8 +13,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
-#include "base/process.h"
-#include "base/process_util.h"
+#include "base/process/process.h"
 #include "base/synchronization/lock.h"
 #include "content/common/content_export.h"
 #include "content/common/gpu/gpu_process_launch_causes.h"
diff --git a/content/common/gpu/gpu_channel.cc b/content/common/gpu/gpu_channel.cc
index d00b670..5fe111e 100644
--- a/content/common/gpu/gpu_channel.cc
+++ b/content/common/gpu/gpu_channel.cc
@@ -15,7 +15,6 @@
 #include "base/command_line.h"
 #include "base/debug/trace_event.h"
 #include "base/message_loop/message_loop_proxy.h"
-#include "base/process_util.h"
 #include "base/rand_util.h"
 #include "base/strings/string_util.h"
 #include "base/timer/timer.h"
diff --git a/content/common/gpu/gpu_channel.h b/content/common/gpu/gpu_channel.h
index 854a859..8d775f0 100644
--- a/content/common/gpu/gpu_channel.h
+++ b/content/common/gpu/gpu_channel.h
@@ -12,7 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "build/build_config.h"
 #include "content/common/gpu/gpu_command_buffer_stub.h"
 #include "content/common/gpu/gpu_memory_manager.h"
diff --git a/content/common/gpu/gpu_memory_manager.cc b/content/common/gpu/gpu_memory_manager.cc
index ee2b2b6..21d5163 100644
--- a/content/common/gpu/gpu_memory_manager.cc
+++ b/content/common/gpu/gpu_memory_manager.cc
@@ -10,7 +10,7 @@
 #include "base/command_line.h"
 #include "base/debug/trace_event.h"
 #include "base/message_loop/message_loop.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/strings/string_number_conversions.h"
 #include "content/common/gpu/gpu_channel_manager.h"
 #include "content/common/gpu/gpu_memory_allocation.h"
diff --git a/content/common/gpu/gpu_memory_tracking.h b/content/common/gpu/gpu_memory_tracking.h
index b27b605..bd0b400 100644
--- a/content/common/gpu/gpu_memory_tracking.h
+++ b/content/common/gpu/gpu_memory_tracking.h
@@ -6,7 +6,7 @@
 #define CONTENT_COMMON_GPU_GPU_MEMORY_TRACKING_H_
 
 #include "base/basictypes.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "content/common/content_export.h"
 #include "gpu/command_buffer/service/memory_tracking.h"
 
diff --git a/content/common/gpu/media/dxva_video_decode_accelerator.cc b/content/common/gpu/media/dxva_video_decode_accelerator.cc
index 138dca1..f999070 100644
--- a/content/common/gpu/media/dxva_video_decode_accelerator.cc
+++ b/content/common/gpu/media/dxva_video_decode_accelerator.cc
@@ -23,7 +23,6 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/shared_memory.h"
 #include "base/message_loop/message_loop.h"
-#include "base/process_util.h"
 #include "media/video/video_decode_accelerator.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_surface_egl.h"
diff --git a/content/common/gpu/media/video_decode_accelerator_unittest.cc b/content/common/gpu/media/video_decode_accelerator_unittest.cc
index ec1ab8b..5e1768d 100644
--- a/content/common/gpu/media/video_decode_accelerator_unittest.cc
+++ b/content/common/gpu/media/video_decode_accelerator_unittest.cc
@@ -32,7 +32,7 @@
 #include "base/format_macros.h"
 #include "base/md5.h"
 #include "base/platform_file.h"
-#include "base/process_util.h"
+#include "base/process/process.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
diff --git a/content/common/handle_enumerator_win.cc b/content/common/handle_enumerator_win.cc
index 90401ed..98e232e 100644
--- a/content/common/handle_enumerator_win.cc
+++ b/content/common/handle_enumerator_win.cc
@@ -9,8 +9,7 @@
 
 #include "base/command_line.h"
 #include "base/logging.h"
-#include "base/process.h"
-#include "base/process_util.h"
+#include "base/process/process.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/win/windows_version.h"
 #include "content/public/common/content_switches.h"
diff --git a/content/common/handle_enumerator_win.h b/content/common/handle_enumerator_win.h
index 4a749e1..5fd4981 100644
--- a/content/common/handle_enumerator_win.h
+++ b/content/common/handle_enumerator_win.h
@@ -6,7 +6,7 @@
 #define CONTENT_COMMON_HANDLE_ENUMERATOR_WIN_H_
 
 #include "base/memory/ref_counted.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/strings/string16.h"
 
 namespace content {
diff --git a/content/common/media/midi_messages.h b/content/common/media/midi_messages.h
index de3cca6..d88216c 100644
--- a/content/common/media/midi_messages.h
+++ b/content/common/media/midi_messages.h
@@ -22,9 +22,8 @@
 IPC_STRUCT_TRAITS_END()
 
 // Renderer request to browser for access to MIDI services.
-IPC_MESSAGE_CONTROL2(MIDIHostMsg_RequestAccess,
-                     int /* client id */,
-                     int /* access */)
+IPC_MESSAGE_CONTROL1(MIDIHostMsg_StartSession,
+                     int /* client id */)
 
 IPC_MESSAGE_CONTROL3(MIDIHostMsg_SendData,
                      int /* port */,
@@ -33,9 +32,8 @@
 
 // Messages sent from the browser to the renderer.
 
-IPC_MESSAGE_CONTROL5(MIDIMsg_AccessApproved,
+IPC_MESSAGE_CONTROL4(MIDIMsg_SessionStarted,
                      int /* client id */,
-                     int /* access */,
                      bool /* success */,
                      media::MIDIPortInfoList /* input ports */,
                      media::MIDIPortInfoList /* output ports */)
diff --git a/content/common/page_zoom.cc b/content/common/page_zoom.cc
index 889d2e4..af448aa 100644
--- a/content/common/page_zoom.cc
+++ b/content/common/page_zoom.cc
@@ -11,9 +11,18 @@
 const double kMinimumZoomFactor = 0.25;
 const double kMaximumZoomFactor = 5.0;
 const double kEpsilon = 0.001;
+const double kTextSizeMultiplierRatio = 1.2;
 
 bool ZoomValuesEqual(double value_a, double value_b) {
   return (std::fabs(value_a - value_b) <= kEpsilon);
 }
 
+double ZoomLevelToZoomFactor(double zoom_level) {
+  return std::pow(kTextSizeMultiplierRatio, zoom_level);
+}
+
+double ZoomFactorToZoomLevel(double factor) {
+  return std::log(factor) / std::log(kTextSizeMultiplierRatio);
+}
+
 }  // namespace content
diff --git a/content/common/resource_messages.h b/content/common/resource_messages.h
index f982e11..0cf7bc8 100644
--- a/content/common/resource_messages.h
+++ b/content/common/resource_messages.h
@@ -8,7 +8,7 @@
 
 // Multiply-included message file, hence no include guard.
 #include "base/memory/shared_memory.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "content/common/content_param_traits_macros.h"
 #include "content/public/common/common_param_traits.h"
 #include "content/public/common/resource_response.h"
diff --git a/content/common/sandbox_mac_diraccess_unittest.mm b/content/common/sandbox_mac_diraccess_unittest.mm
index ad86e58..c8611df 100644
--- a/content/common/sandbox_mac_diraccess_unittest.mm
+++ b/content/common/sandbox_mac_diraccess_unittest.mm
@@ -11,6 +11,7 @@
 
 #include "base/file_util.h"
 #include "base/files/file_path.h"
+#include "base/process/kill.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/multiprocess_test.h"
diff --git a/content/common/sandbox_mac_unittest_helper.mm b/content/common/sandbox_mac_unittest_helper.mm
index 4c64b55..0a8d3c1 100644
--- a/content/common/sandbox_mac_unittest_helper.mm
+++ b/content/common/sandbox_mac_unittest_helper.mm
@@ -13,6 +13,7 @@
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/process/kill.h"
 #include "content/common/sandbox_mac.h"
 #include "content/test/test_content_client.h"
 #include "testing/multiprocess_func_list.h"
diff --git a/content/common/sandbox_util.h b/content/common/sandbox_util.h
index c6d2fce..54814df 100644
--- a/content/common/sandbox_util.h
+++ b/content/common/sandbox_util.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_COMMON_SANDBOX_UTIL_H_
 #define CONTENT_COMMON_SANDBOX_UTIL_H_
 
-#include "base/process.h"
+#include "base/process/process.h"
 #include "ipc/ipc_platform_file.h"
 
 // This file contains cross-platform sandbox code internal to content.
diff --git a/content/common/sandbox_win.cc b/content/common/sandbox_win.cc
index acd3f9a..83f3f72 100644
--- a/content/common/sandbox_win.cc
+++ b/content/common/sandbox_win.cc
@@ -14,7 +14,7 @@
 #include "base/file_util.h"
 #include "base/hash.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
+#include "base/process/launch.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/win/iat_patch_function.h"
diff --git a/content/common/set_process_title.cc b/content/common/set_process_title.cc
index 7d7b057..6fde51b 100644
--- a/content/common/set_process_title.cc
+++ b/content/common/set_process_title.cc
@@ -21,7 +21,7 @@
 
 #include "base/file_util.h"
 #include "base/files/file_path.h"
-#include "base/process_util.h"
+#include "base/process/process_metrics.h"
 #include "base/strings/string_util.h"
 // Linux/glibc doesn't natively have setproctitle().
 #include "content/common/set_process_title_linux.h"
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index a34bc69..e977349 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -6,7 +6,7 @@
 // Multiply-included message file, hence no include guard.
 
 #include "base/memory/shared_memory.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/strings/string16.h"
 #include "cc/output/begin_frame_args.h"
 #include "cc/output/compositor_frame.h"
@@ -49,7 +49,6 @@
 #include "third_party/WebKit/public/web/WebPopupType.h"
 #include "third_party/WebKit/public/web/WebScreenInfo.h"
 #include "third_party/WebKit/public/web/WebTextDirection.h"
-#include "third_party/WebKit/public/web/WebWindowFeatures.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/base/ime/text_input_mode.h"
 #include "ui/base/ime/text_input_type.h"
@@ -314,25 +313,6 @@
   IPC_STRUCT_TRAITS_MEMBER(total_scroll_update_latency)
 IPC_STRUCT_TRAITS_END()
 
-IPC_STRUCT_TRAITS_BEGIN(WebKit::WebWindowFeatures)
-  IPC_STRUCT_TRAITS_MEMBER(x)
-  IPC_STRUCT_TRAITS_MEMBER(xSet)
-  IPC_STRUCT_TRAITS_MEMBER(y)
-  IPC_STRUCT_TRAITS_MEMBER(ySet)
-  IPC_STRUCT_TRAITS_MEMBER(width)
-  IPC_STRUCT_TRAITS_MEMBER(widthSet)
-  IPC_STRUCT_TRAITS_MEMBER(height)
-  IPC_STRUCT_TRAITS_MEMBER(heightSet)
-  IPC_STRUCT_TRAITS_MEMBER(menuBarVisible)
-  IPC_STRUCT_TRAITS_MEMBER(statusBarVisible)
-  IPC_STRUCT_TRAITS_MEMBER(toolBarVisible)
-  IPC_STRUCT_TRAITS_MEMBER(locationBarVisible)
-  IPC_STRUCT_TRAITS_MEMBER(scrollbarsVisible)
-  IPC_STRUCT_TRAITS_MEMBER(resizable)
-  IPC_STRUCT_TRAITS_MEMBER(fullscreen)
-  IPC_STRUCT_TRAITS_MEMBER(dialog)
-IPC_STRUCT_TRAITS_END()
-
 IPC_STRUCT_BEGIN(ViewHostMsg_CreateWindow_Params)
   // Routing ID of the view initiating the open.
   IPC_STRUCT_MEMBER(int, opener_id)
diff --git a/content/content_browsertests.isolate b/content/content_browsertests.isolate
index 4c31a24..55b0f56 100644
--- a/content/content_browsertests.isolate
+++ b/content/content_browsertests.isolate
@@ -26,10 +26,11 @@
         'command': [
           '../testing/xvfb.py',
           '<(PRODUCT_DIR)',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/content_browsertests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_tracked': [
+          '../testing/xvfb.py',
           '<(PRODUCT_DIR)/content_shell.pak',
           '<(PRODUCT_DIR)/fonts.conf',
           '<(PRODUCT_DIR)/libclearkeycdm.so',
@@ -43,6 +44,9 @@
     ['OS=="linux" or OS=="mac" or OS=="win"', {
       'variables': {
         'isolate_dependency_tracked': [
+          '../testing/test_env.py',
+          '../tools/swarm_client/run_isolated.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/content_browsertests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_untracked': [
@@ -73,7 +77,7 @@
       'variables': {
         'command': [
           '../testing/test_env.py',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/content_browsertests<(EXECUTABLE_SUFFIX)',
         ],
       },
diff --git a/content/content_child.gypi b/content/content_child.gypi
index ffca557..72d48b1 100644
--- a/content/content_child.gypi
+++ b/content/content_child.gypi
@@ -6,6 +6,7 @@
   'dependencies': [
     '../base/base.gyp:base',
     '../components/tracing.gyp:tracing',
+    '../skia/skia.gyp:skia',
     '../ui/ui.gyp:ui',
     '../url/url.gyp:url_lib',
   ],
@@ -130,6 +131,12 @@
         '../build/android/cpufeatures.gypi',
       ],
     }],
+    ['enable_plugins==1', {
+      'sources': [
+        'child/browser_font_resource_trusted.cc',
+        'child/browser_font_resource_trusted.h',
+      ],
+    }],
     ['OS=="ios"', {
       'sources/': [
         # iOS only needs a small portion of content; exclude all the
diff --git a/content/content_child.target.darwin-arm.mk b/content/content_child.target.darwin-arm.mk
index 69bbd0c..19d850d 100644
--- a/content/content_child.target.darwin-arm.mk
+++ b/content/content_child.target.darwin-arm.mk
@@ -11,10 +11,11 @@
 
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_ui_gyp)/ui_ui_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp)/content_resources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp)/blink.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a \
 	$(call intermediates-dir-for,GYP,third_party_npapi_npapi_gyp)/npapi.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,webkit_support_glue_child_gyp)/webkit_support_glue_child_gyp.a
 
@@ -125,14 +126,14 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
-	'-DPOSIX_AVOID_MMAP' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DUSE_CHROMIUM_SKIA' \
 	'-DSK_USE_POSIX_THREADS' \
+	'-DPOSIX_AVOID_MMAP' \
+	'-DU_USING_ICU_NAMESPACE=0' \
 	'-D__STDC_CONSTANT_MACROS' \
 	'-D__STDC_FORMAT_MACROS' \
 	'-DANDROID' \
@@ -153,10 +154,6 @@
 	$(LOCAL_PATH) \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(gyp_shared_intermediate_dir)/content \
-	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/third_party/skia/src/core \
 	$(LOCAL_PATH)/skia/config \
 	$(LOCAL_PATH)/third_party/skia/include/config \
@@ -171,6 +168,10 @@
 	$(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 \
+	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/v8/include \
 	$(LOCAL_PATH)/third_party/npapi \
 	$(LOCAL_PATH)/third_party/npapi/bindings \
@@ -239,14 +240,14 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
-	'-DPOSIX_AVOID_MMAP' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DUSE_CHROMIUM_SKIA' \
 	'-DSK_USE_POSIX_THREADS' \
+	'-DPOSIX_AVOID_MMAP' \
+	'-DU_USING_ICU_NAMESPACE=0' \
 	'-D__STDC_CONSTANT_MACROS' \
 	'-D__STDC_FORMAT_MACROS' \
 	'-DANDROID' \
@@ -268,10 +269,6 @@
 	$(LOCAL_PATH) \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(gyp_shared_intermediate_dir)/content \
-	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/third_party/skia/src/core \
 	$(LOCAL_PATH)/skia/config \
 	$(LOCAL_PATH)/third_party/skia/include/config \
@@ -286,6 +283,10 @@
 	$(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 \
+	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/v8/include \
 	$(LOCAL_PATH)/third_party/npapi \
 	$(LOCAL_PATH)/third_party/npapi/bindings \
@@ -349,8 +350,8 @@
 
 LOCAL_STATIC_LIBRARIES := \
 	cpufeatures \
-	ui_ui_gyp \
 	skia_skia_library_gyp \
+	ui_ui_gyp \
 	webkit_support_glue_child_gyp
 
 # Enable grouping to fix circular references
diff --git a/content/content_child.target.darwin-mips.mk b/content/content_child.target.darwin-mips.mk
index b9f3ece..dd6b241 100644
--- a/content/content_child.target.darwin-mips.mk
+++ b/content/content_child.target.darwin-mips.mk
@@ -11,10 +11,11 @@
 
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_ui_gyp)/ui_ui_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp)/content_resources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp)/blink.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a \
 	$(call intermediates-dir-for,GYP,third_party_npapi_npapi_gyp)/npapi.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,webkit_support_glue_child_gyp)/webkit_support_glue_child_gyp.a
 
@@ -124,14 +125,14 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
-	'-DPOSIX_AVOID_MMAP' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DUSE_CHROMIUM_SKIA' \
 	'-DSK_USE_POSIX_THREADS' \
+	'-DPOSIX_AVOID_MMAP' \
+	'-DU_USING_ICU_NAMESPACE=0' \
 	'-D__STDC_CONSTANT_MACROS' \
 	'-D__STDC_FORMAT_MACROS' \
 	'-DANDROID' \
@@ -152,10 +153,6 @@
 	$(LOCAL_PATH) \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(gyp_shared_intermediate_dir)/content \
-	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/third_party/skia/src/core \
 	$(LOCAL_PATH)/skia/config \
 	$(LOCAL_PATH)/third_party/skia/include/config \
@@ -170,6 +167,10 @@
 	$(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 \
+	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/v8/include \
 	$(LOCAL_PATH)/third_party/npapi \
 	$(LOCAL_PATH)/third_party/npapi/bindings \
@@ -237,14 +238,14 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
-	'-DPOSIX_AVOID_MMAP' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DUSE_CHROMIUM_SKIA' \
 	'-DSK_USE_POSIX_THREADS' \
+	'-DPOSIX_AVOID_MMAP' \
+	'-DU_USING_ICU_NAMESPACE=0' \
 	'-D__STDC_CONSTANT_MACROS' \
 	'-D__STDC_FORMAT_MACROS' \
 	'-DANDROID' \
@@ -266,10 +267,6 @@
 	$(LOCAL_PATH) \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(gyp_shared_intermediate_dir)/content \
-	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/third_party/skia/src/core \
 	$(LOCAL_PATH)/skia/config \
 	$(LOCAL_PATH)/third_party/skia/include/config \
@@ -284,6 +281,10 @@
 	$(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 \
+	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/v8/include \
 	$(LOCAL_PATH)/third_party/npapi \
 	$(LOCAL_PATH)/third_party/npapi/bindings \
@@ -343,8 +344,8 @@
 
 LOCAL_STATIC_LIBRARIES := \
 	cpufeatures \
-	ui_ui_gyp \
 	skia_skia_library_gyp \
+	ui_ui_gyp \
 	webkit_support_glue_child_gyp
 
 # Enable grouping to fix circular references
diff --git a/content/content_child.target.darwin-x86.mk b/content/content_child.target.darwin-x86.mk
index 33d662e..234a321 100644
--- a/content/content_child.target.darwin-x86.mk
+++ b/content/content_child.target.darwin-x86.mk
@@ -11,10 +11,11 @@
 
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_ui_gyp)/ui_ui_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp)/content_resources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp)/blink.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a \
 	$(call intermediates-dir-for,GYP,third_party_npapi_npapi_gyp)/npapi.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,webkit_support_glue_child_gyp)/webkit_support_glue_child_gyp.a
 
@@ -127,13 +128,13 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DUSE_CHROMIUM_SKIA' \
 	'-DSK_USE_POSIX_THREADS' \
+	'-DU_USING_ICU_NAMESPACE=0' \
 	'-D__STDC_CONSTANT_MACROS' \
 	'-D__STDC_FORMAT_MACROS' \
 	'-DANDROID' \
@@ -154,10 +155,6 @@
 	$(LOCAL_PATH) \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(gyp_shared_intermediate_dir)/content \
-	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/third_party/skia/src/core \
 	$(LOCAL_PATH)/skia/config \
 	$(LOCAL_PATH)/third_party/skia/include/config \
@@ -172,6 +169,10 @@
 	$(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 \
+	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/v8/include \
 	$(LOCAL_PATH)/third_party/npapi \
 	$(LOCAL_PATH)/third_party/npapi/bindings \
@@ -243,13 +244,13 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DUSE_CHROMIUM_SKIA' \
 	'-DSK_USE_POSIX_THREADS' \
+	'-DU_USING_ICU_NAMESPACE=0' \
 	'-D__STDC_CONSTANT_MACROS' \
 	'-D__STDC_FORMAT_MACROS' \
 	'-DANDROID' \
@@ -271,10 +272,6 @@
 	$(LOCAL_PATH) \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(gyp_shared_intermediate_dir)/content \
-	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/third_party/skia/src/core \
 	$(LOCAL_PATH)/skia/config \
 	$(LOCAL_PATH)/third_party/skia/include/config \
@@ -289,6 +286,10 @@
 	$(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 \
+	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/v8/include \
 	$(LOCAL_PATH)/third_party/npapi \
 	$(LOCAL_PATH)/third_party/npapi/bindings \
@@ -347,8 +348,8 @@
 
 LOCAL_STATIC_LIBRARIES := \
 	cpufeatures \
-	ui_ui_gyp \
 	skia_skia_library_gyp \
+	ui_ui_gyp \
 	webkit_support_glue_child_gyp
 
 # Enable grouping to fix circular references
diff --git a/content/content_child.target.linux-arm.mk b/content/content_child.target.linux-arm.mk
index 69bbd0c..19d850d 100644
--- a/content/content_child.target.linux-arm.mk
+++ b/content/content_child.target.linux-arm.mk
@@ -11,10 +11,11 @@
 
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_ui_gyp)/ui_ui_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp)/content_resources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp)/blink.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a \
 	$(call intermediates-dir-for,GYP,third_party_npapi_npapi_gyp)/npapi.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,webkit_support_glue_child_gyp)/webkit_support_glue_child_gyp.a
 
@@ -125,14 +126,14 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
-	'-DPOSIX_AVOID_MMAP' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DUSE_CHROMIUM_SKIA' \
 	'-DSK_USE_POSIX_THREADS' \
+	'-DPOSIX_AVOID_MMAP' \
+	'-DU_USING_ICU_NAMESPACE=0' \
 	'-D__STDC_CONSTANT_MACROS' \
 	'-D__STDC_FORMAT_MACROS' \
 	'-DANDROID' \
@@ -153,10 +154,6 @@
 	$(LOCAL_PATH) \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(gyp_shared_intermediate_dir)/content \
-	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/third_party/skia/src/core \
 	$(LOCAL_PATH)/skia/config \
 	$(LOCAL_PATH)/third_party/skia/include/config \
@@ -171,6 +168,10 @@
 	$(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 \
+	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/v8/include \
 	$(LOCAL_PATH)/third_party/npapi \
 	$(LOCAL_PATH)/third_party/npapi/bindings \
@@ -239,14 +240,14 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
-	'-DPOSIX_AVOID_MMAP' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DUSE_CHROMIUM_SKIA' \
 	'-DSK_USE_POSIX_THREADS' \
+	'-DPOSIX_AVOID_MMAP' \
+	'-DU_USING_ICU_NAMESPACE=0' \
 	'-D__STDC_CONSTANT_MACROS' \
 	'-D__STDC_FORMAT_MACROS' \
 	'-DANDROID' \
@@ -268,10 +269,6 @@
 	$(LOCAL_PATH) \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(gyp_shared_intermediate_dir)/content \
-	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/third_party/skia/src/core \
 	$(LOCAL_PATH)/skia/config \
 	$(LOCAL_PATH)/third_party/skia/include/config \
@@ -286,6 +283,10 @@
 	$(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 \
+	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/v8/include \
 	$(LOCAL_PATH)/third_party/npapi \
 	$(LOCAL_PATH)/third_party/npapi/bindings \
@@ -349,8 +350,8 @@
 
 LOCAL_STATIC_LIBRARIES := \
 	cpufeatures \
-	ui_ui_gyp \
 	skia_skia_library_gyp \
+	ui_ui_gyp \
 	webkit_support_glue_child_gyp
 
 # Enable grouping to fix circular references
diff --git a/content/content_child.target.linux-mips.mk b/content/content_child.target.linux-mips.mk
index b9f3ece..dd6b241 100644
--- a/content/content_child.target.linux-mips.mk
+++ b/content/content_child.target.linux-mips.mk
@@ -11,10 +11,11 @@
 
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_ui_gyp)/ui_ui_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp)/content_resources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp)/blink.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a \
 	$(call intermediates-dir-for,GYP,third_party_npapi_npapi_gyp)/npapi.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,webkit_support_glue_child_gyp)/webkit_support_glue_child_gyp.a
 
@@ -124,14 +125,14 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
-	'-DPOSIX_AVOID_MMAP' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DUSE_CHROMIUM_SKIA' \
 	'-DSK_USE_POSIX_THREADS' \
+	'-DPOSIX_AVOID_MMAP' \
+	'-DU_USING_ICU_NAMESPACE=0' \
 	'-D__STDC_CONSTANT_MACROS' \
 	'-D__STDC_FORMAT_MACROS' \
 	'-DANDROID' \
@@ -152,10 +153,6 @@
 	$(LOCAL_PATH) \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(gyp_shared_intermediate_dir)/content \
-	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/third_party/skia/src/core \
 	$(LOCAL_PATH)/skia/config \
 	$(LOCAL_PATH)/third_party/skia/include/config \
@@ -170,6 +167,10 @@
 	$(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 \
+	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/v8/include \
 	$(LOCAL_PATH)/third_party/npapi \
 	$(LOCAL_PATH)/third_party/npapi/bindings \
@@ -237,14 +238,14 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
-	'-DPOSIX_AVOID_MMAP' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DUSE_CHROMIUM_SKIA' \
 	'-DSK_USE_POSIX_THREADS' \
+	'-DPOSIX_AVOID_MMAP' \
+	'-DU_USING_ICU_NAMESPACE=0' \
 	'-D__STDC_CONSTANT_MACROS' \
 	'-D__STDC_FORMAT_MACROS' \
 	'-DANDROID' \
@@ -266,10 +267,6 @@
 	$(LOCAL_PATH) \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(gyp_shared_intermediate_dir)/content \
-	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/third_party/skia/src/core \
 	$(LOCAL_PATH)/skia/config \
 	$(LOCAL_PATH)/third_party/skia/include/config \
@@ -284,6 +281,10 @@
 	$(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 \
+	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/v8/include \
 	$(LOCAL_PATH)/third_party/npapi \
 	$(LOCAL_PATH)/third_party/npapi/bindings \
@@ -343,8 +344,8 @@
 
 LOCAL_STATIC_LIBRARIES := \
 	cpufeatures \
-	ui_ui_gyp \
 	skia_skia_library_gyp \
+	ui_ui_gyp \
 	webkit_support_glue_child_gyp
 
 # Enable grouping to fix circular references
diff --git a/content/content_child.target.linux-x86.mk b/content/content_child.target.linux-x86.mk
index 33d662e..234a321 100644
--- a/content/content_child.target.linux-x86.mk
+++ b/content/content_child.target.linux-x86.mk
@@ -11,10 +11,11 @@
 
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_ui_gyp)/ui_ui_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp)/content_resources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp)/blink.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a \
 	$(call intermediates-dir-for,GYP,third_party_npapi_npapi_gyp)/npapi.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,webkit_support_glue_child_gyp)/webkit_support_glue_child_gyp.a
 
@@ -127,13 +128,13 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DUSE_CHROMIUM_SKIA' \
 	'-DSK_USE_POSIX_THREADS' \
+	'-DU_USING_ICU_NAMESPACE=0' \
 	'-D__STDC_CONSTANT_MACROS' \
 	'-D__STDC_FORMAT_MACROS' \
 	'-DANDROID' \
@@ -154,10 +155,6 @@
 	$(LOCAL_PATH) \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(gyp_shared_intermediate_dir)/content \
-	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/third_party/skia/src/core \
 	$(LOCAL_PATH)/skia/config \
 	$(LOCAL_PATH)/third_party/skia/include/config \
@@ -172,6 +169,10 @@
 	$(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 \
+	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/v8/include \
 	$(LOCAL_PATH)/third_party/npapi \
 	$(LOCAL_PATH)/third_party/npapi/bindings \
@@ -243,13 +244,13 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DUSE_CHROMIUM_SKIA' \
 	'-DSK_USE_POSIX_THREADS' \
+	'-DU_USING_ICU_NAMESPACE=0' \
 	'-D__STDC_CONSTANT_MACROS' \
 	'-D__STDC_FORMAT_MACROS' \
 	'-DANDROID' \
@@ -271,10 +272,6 @@
 	$(LOCAL_PATH) \
 	$(LOCAL_PATH)/third_party/khronos \
 	$(LOCAL_PATH)/gpu \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(gyp_shared_intermediate_dir)/content \
-	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/third_party/skia/src/core \
 	$(LOCAL_PATH)/skia/config \
 	$(LOCAL_PATH)/third_party/skia/include/config \
@@ -289,6 +286,10 @@
 	$(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 \
+	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/third_party/WebKit \
 	$(LOCAL_PATH)/v8/include \
 	$(LOCAL_PATH)/third_party/npapi \
 	$(LOCAL_PATH)/third_party/npapi/bindings \
@@ -347,8 +348,8 @@
 
 LOCAL_STATIC_LIBRARIES := \
 	cpufeatures \
-	ui_ui_gyp \
 	skia_skia_library_gyp \
+	ui_ui_gyp \
 	webkit_support_glue_child_gyp
 
 # Enable grouping to fix circular references
diff --git a/content/content_common.target.darwin-arm.mk b/content/content_common.target.darwin-arm.mk
index e93b795..af8978d 100644
--- a/content/content_common.target.darwin-arm.mk
+++ b/content/content_common.target.darwin-arm.mk
@@ -230,6 +230,7 @@
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/frameworks/wilhelm/include \
@@ -345,6 +346,7 @@
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/frameworks/wilhelm/include \
diff --git a/content/content_common.target.darwin-mips.mk b/content/content_common.target.darwin-mips.mk
index 0e3f8ec..c4e7f04 100644
--- a/content/content_common.target.darwin-mips.mk
+++ b/content/content_common.target.darwin-mips.mk
@@ -229,6 +229,7 @@
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/frameworks/wilhelm/include \
@@ -343,6 +344,7 @@
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/frameworks/wilhelm/include \
diff --git a/content/content_common.target.darwin-x86.mk b/content/content_common.target.darwin-x86.mk
index ec24faf..cba49ee 100644
--- a/content/content_common.target.darwin-x86.mk
+++ b/content/content_common.target.darwin-x86.mk
@@ -231,6 +231,7 @@
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/frameworks/wilhelm/include \
@@ -348,6 +349,7 @@
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/frameworks/wilhelm/include \
diff --git a/content/content_common.target.linux-arm.mk b/content/content_common.target.linux-arm.mk
index e93b795..af8978d 100644
--- a/content/content_common.target.linux-arm.mk
+++ b/content/content_common.target.linux-arm.mk
@@ -230,6 +230,7 @@
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/frameworks/wilhelm/include \
@@ -345,6 +346,7 @@
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/frameworks/wilhelm/include \
diff --git a/content/content_common.target.linux-mips.mk b/content/content_common.target.linux-mips.mk
index 0e3f8ec..c4e7f04 100644
--- a/content/content_common.target.linux-mips.mk
+++ b/content/content_common.target.linux-mips.mk
@@ -229,6 +229,7 @@
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/frameworks/wilhelm/include \
@@ -343,6 +344,7 @@
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/frameworks/wilhelm/include \
diff --git a/content/content_common.target.linux-x86.mk b/content/content_common.target.linux-x86.mk
index ec24faf..cba49ee 100644
--- a/content/content_common.target.linux-x86.mk
+++ b/content/content_common.target.linux-x86.mk
@@ -231,6 +231,7 @@
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/frameworks/wilhelm/include \
@@ -348,6 +349,7 @@
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
 	$(gyp_shared_intermediate_dir)/content \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/frameworks/wilhelm/include \
diff --git a/content/content_renderer.gypi b/content/content_renderer.gypi
index f60d010..4f4ddf5 100644
--- a/content/content_renderer.gypi
+++ b/content/content_renderer.gypi
@@ -5,6 +5,7 @@
 {
   'dependencies': [
     '../jingle/jingle.gyp:jingle_glue',
+    '../media/media.gyp:media',
     '../net/net.gyp:net',
     '../skia/skia.gyp:skia',
     '../third_party/WebKit/public/blink.gyp:blink',
@@ -46,7 +47,7 @@
     'public/renderer/navigation_state.cc',
     'public/renderer/navigation_state.h',
     'public/renderer/password_form_conversion_utils.h',
-    'public/renderer/ppapi_plugin_instance.h',
+    'public/renderer/pepper_plugin_instance.h',
     'public/renderer/renderer_ppapi_host.h',
     'public/renderer/render_frame.h',
     'public/renderer/render_process_observer.cc',
@@ -200,6 +201,8 @@
     'renderer/media/media_stream_dispatcher.h',
     'renderer/media/media_stream_dispatcher_eventhandler.h',
     'renderer/media/media_stream_impl.h',
+    'renderer/media/midi_dispatcher.cc',
+    'renderer/media/midi_dispatcher.h',
     'renderer/media/midi_message_filter.cc',
     'renderer/media/midi_message_filter.h',
     'renderer/media/pepper_platform_video_decoder_impl.cc',
@@ -318,6 +321,8 @@
     'renderer/pepper/pepper_platform_video_capture_impl.h',
     'renderer/pepper/pepper_plugin_delegate_impl.cc',
     'renderer/pepper/pepper_plugin_delegate_impl.h',
+    'renderer/pepper/pepper_plugin_instance_impl.cc',
+    'renderer/pepper/pepper_plugin_instance_impl.h',
     'renderer/pepper/pepper_plugin_registry.cc',
     'renderer/pepper/pepper_plugin_registry.h',
     'renderer/pepper/pepper_proxy_channel_delegate_impl.cc',
@@ -333,6 +338,8 @@
     'renderer/pepper/pepper_url_loader_host.h',
     'renderer/pepper/pepper_video_capture_host.cc',
     'renderer/pepper/pepper_video_capture_host.h',
+    'renderer/pepper/pepper_webplugin_impl.cc',
+    'renderer/pepper/pepper_webplugin_impl.h',
     'renderer/pepper/pepper_websocket_host.cc',
     'renderer/pepper/pepper_websocket_host.h',
     'renderer/pepper/plugin_delegate.h',
@@ -340,12 +347,6 @@
     'renderer/pepper/plugin_module.h',
     'renderer/pepper/plugin_object.cc',
     'renderer/pepper/plugin_object.h',
-    'renderer/pepper/ppapi_interface_factory.cc',
-    'renderer/pepper/ppapi_interface_factory.h',
-    'renderer/pepper/ppapi_plugin_instance_impl.cc',
-    'renderer/pepper/ppapi_plugin_instance_impl.h',
-    'renderer/pepper/ppapi_webplugin_impl.cc',
-    'renderer/pepper/ppapi_webplugin_impl.h',
     'renderer/pepper/ppb_audio_impl.cc',
     'renderer/pepper/ppb_audio_impl.h',
     'renderer/pepper/ppb_broker_impl.cc',
diff --git a/content/content_renderer.target.darwin-arm.mk b/content/content_renderer.target.darwin-arm.mk
index ba9df3b..867f65e 100644
--- a/content/content_renderer.target.darwin-arm.mk
+++ b/content/content_renderer.target.darwin-arm.mk
@@ -107,6 +107,7 @@
 	content/renderer/media/crypto/key_systems.cc \
 	content/renderer/media/crypto/key_systems_info.cc \
 	content/renderer/media/crypto/proxy_decryptor.cc \
+	content/renderer/media/midi_dispatcher.cc \
 	content/renderer/media/midi_message_filter.cc \
 	content/renderer/media/pepper_platform_video_decoder_impl.cc \
 	content/renderer/media/render_media_log.cc \
@@ -236,6 +237,7 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
@@ -377,6 +379,7 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
diff --git a/content/content_renderer.target.darwin-mips.mk b/content/content_renderer.target.darwin-mips.mk
index f388456..b9a9cbc 100644
--- a/content/content_renderer.target.darwin-mips.mk
+++ b/content/content_renderer.target.darwin-mips.mk
@@ -107,6 +107,7 @@
 	content/renderer/media/crypto/key_systems.cc \
 	content/renderer/media/crypto/key_systems_info.cc \
 	content/renderer/media/crypto/proxy_decryptor.cc \
+	content/renderer/media/midi_dispatcher.cc \
 	content/renderer/media/midi_message_filter.cc \
 	content/renderer/media/pepper_platform_video_decoder_impl.cc \
 	content/renderer/media/render_media_log.cc \
@@ -235,6 +236,7 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
@@ -375,6 +377,7 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
diff --git a/content/content_renderer.target.darwin-x86.mk b/content/content_renderer.target.darwin-x86.mk
index 5950770..fdaff3a 100644
--- a/content/content_renderer.target.darwin-x86.mk
+++ b/content/content_renderer.target.darwin-x86.mk
@@ -107,6 +107,7 @@
 	content/renderer/media/crypto/key_systems.cc \
 	content/renderer/media/crypto/key_systems_info.cc \
 	content/renderer/media/crypto/proxy_decryptor.cc \
+	content/renderer/media/midi_dispatcher.cc \
 	content/renderer/media/midi_message_filter.cc \
 	content/renderer/media/pepper_platform_video_decoder_impl.cc \
 	content/renderer/media/render_media_log.cc \
@@ -238,6 +239,7 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
@@ -381,6 +383,7 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
diff --git a/content/content_renderer.target.linux-arm.mk b/content/content_renderer.target.linux-arm.mk
index ba9df3b..867f65e 100644
--- a/content/content_renderer.target.linux-arm.mk
+++ b/content/content_renderer.target.linux-arm.mk
@@ -107,6 +107,7 @@
 	content/renderer/media/crypto/key_systems.cc \
 	content/renderer/media/crypto/key_systems_info.cc \
 	content/renderer/media/crypto/proxy_decryptor.cc \
+	content/renderer/media/midi_dispatcher.cc \
 	content/renderer/media/midi_message_filter.cc \
 	content/renderer/media/pepper_platform_video_decoder_impl.cc \
 	content/renderer/media/render_media_log.cc \
@@ -236,6 +237,7 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
@@ -377,6 +379,7 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
diff --git a/content/content_renderer.target.linux-mips.mk b/content/content_renderer.target.linux-mips.mk
index f388456..b9a9cbc 100644
--- a/content/content_renderer.target.linux-mips.mk
+++ b/content/content_renderer.target.linux-mips.mk
@@ -107,6 +107,7 @@
 	content/renderer/media/crypto/key_systems.cc \
 	content/renderer/media/crypto/key_systems_info.cc \
 	content/renderer/media/crypto/proxy_decryptor.cc \
+	content/renderer/media/midi_dispatcher.cc \
 	content/renderer/media/midi_message_filter.cc \
 	content/renderer/media/pepper_platform_video_decoder_impl.cc \
 	content/renderer/media/render_media_log.cc \
@@ -235,6 +236,7 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
@@ -375,6 +377,7 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
diff --git a/content/content_renderer.target.linux-x86.mk b/content/content_renderer.target.linux-x86.mk
index 5950770..fdaff3a 100644
--- a/content/content_renderer.target.linux-x86.mk
+++ b/content/content_renderer.target.linux-x86.mk
@@ -107,6 +107,7 @@
 	content/renderer/media/crypto/key_systems.cc \
 	content/renderer/media/crypto/key_systems_info.cc \
 	content/renderer/media/crypto/proxy_decryptor.cc \
+	content/renderer/media/midi_dispatcher.cc \
 	content/renderer/media/midi_message_filter.cc \
 	content/renderer/media/pepper_platform_video_decoder_impl.cc \
 	content/renderer/media/render_media_log.cc \
@@ -238,6 +239,7 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
@@ -381,6 +383,7 @@
 	'-DENABLE_GPU=1' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
 	'-DSK_ENABLE_INST_COUNT=0' \
 	'-DSK_SUPPORT_GPU=1' \
 	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
diff --git a/content/content_shell.gypi b/content/content_shell.gypi
index 129c2a2..4d120af 100644
--- a/content/content_shell.gypi
+++ b/content/content_shell.gypi
@@ -356,6 +356,7 @@
         'content_shell_lib',
         'content_shell_pak',
         '../third_party/mesa/mesa.gyp:osmesa',
+        '../tools/imagediff/image_diff.gyp:image_diff',
       ],
       'include_dirs': [
         '..',
@@ -484,6 +485,16 @@
             },
           ],
         }],  # OS=="mac"
+        ['OS=="android"', {
+          'dependencies!': [
+            '../tools/imagediff/image_diff.gyp:image_diff',
+          ],
+        }],  # OS=="android"
+        ['OS=="android" and android_webview_build==0', {
+          'dependencies': [
+            '../tools/imagediff/image_diff.gyp:image_diff#host',
+          ],
+        }],  # OS=="android" and android_webview_build==0
       ],
     },
     {
diff --git a/content/content_tests.gypi b/content/content_tests.gypi
index dd31481..6e69912 100644
--- a/content/content_tests.gypi
+++ b/content/content_tests.gypi
@@ -437,7 +437,7 @@
         'renderer/pepper/mock_plugin_delegate.cc',
         'renderer/pepper/mock_plugin_delegate.h',
         'renderer/pepper/mock_resource.h',
-        'renderer/pepper/ppapi_plugin_instance_unittest.cc',
+        'renderer/pepper/pepper_plugin_instance_unittest.cc',
         'renderer/pepper/ppapi_unittest.cc',
         'renderer/pepper/ppapi_unittest.h',
         'renderer/pepper/quota_file_io_unittest.cc',
diff --git a/content/content_unittests.isolate b/content/content_unittests.isolate
index a3bd8e8..9a9def4 100644
--- a/content/content_unittests.isolate
+++ b/content/content_unittests.isolate
@@ -27,7 +27,7 @@
         'command': [
           '../testing/xvfb.py',
           '<(PRODUCT_DIR)',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/content_unittests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_tracked': [
@@ -56,7 +56,7 @@
       'variables': {
         'command': [
           '../testing/test_env.py',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/content_unittests<(EXECUTABLE_SUFFIX)',
         ],
       },
diff --git a/content/gpu/gpu_watchdog_thread.cc b/content/gpu/gpu_watchdog_thread.cc
index 09e710e..e823edd 100644
--- a/content/gpu/gpu_watchdog_thread.cc
+++ b/content/gpu/gpu_watchdog_thread.cc
@@ -12,8 +12,7 @@
 #include "base/bind_helpers.h"
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
-#include "base/process_util.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "build/build_config.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/common/result_codes.h"
diff --git a/content/plugin/plugin_channel.cc b/content/plugin/plugin_channel.cc
index 0556f82..31cba22 100644
--- a/content/plugin/plugin_channel.cc
+++ b/content/plugin/plugin_channel.cc
@@ -6,7 +6,7 @@
 
 #include "base/bind.h"
 #include "base/command_line.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/strings/string_util.h"
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
diff --git a/content/plugin/plugin_channel.h b/content/plugin/plugin_channel.h
index a5844e3..8af63b9 100644
--- a/content/plugin/plugin_channel.h
+++ b/content/plugin/plugin_channel.h
@@ -8,7 +8,7 @@
 #include <vector>
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_handle.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "build/build_config.h"
 #include "content/child/npapi/np_channel_base.h"
 #include "content/plugin/webplugin_delegate_stub.h"
diff --git a/content/plugin/plugin_thread.cc b/content/plugin/plugin_thread.cc
index 5faeb74..e6b477f 100644
--- a/content/plugin/plugin_thread.cc
+++ b/content/plugin/plugin_thread.cc
@@ -18,7 +18,8 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/lazy_instance.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
+#include "base/process/process_handle.h"
 #include "base/threading/thread_local.h"
 #include "content/child/child_process.h"
 #include "content/child/npapi/npobject_util.h"
diff --git a/content/port/browser/render_widget_host_view_port.h b/content/port/browser/render_widget_host_view_port.h
index 7cccbb1..a6d3164 100644
--- a/content/port/browser/render_widget_host_view_port.h
+++ b/content/port/browser/render_widget_host_view_port.h
@@ -6,7 +6,7 @@
 #define CONTENT_PORT_BROWSER_RENDER_WIDGET_HOST_VIEW_PORT_H_
 
 #include "base/callback.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
 #include "base/strings/string16.h"
 #include "cc/output/compositor_frame.h"
 #include "content/common/content_export.h"
diff --git a/content/ppapi_plugin/ppapi_thread.cc b/content/ppapi_plugin/ppapi_thread.cc
index c228bf6..370e465 100644
--- a/content/ppapi_plugin/ppapi_thread.cc
+++ b/content/ppapi_plugin/ppapi_thread.cc
@@ -10,12 +10,12 @@
 #include "base/debug/crash_logging.h"
 #include "base/logging.h"
 #include "base/metrics/histogram.h"
-#include "base/process_util.h"
 #include "base/rand_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/platform_thread.h"
 #include "base/time/time.h"
+#include "content/child/browser_font_resource_trusted.h"
 #include "content/child/child_process.h"
 #include "content/common/child_process_messages.h"
 #include "content/common/sandbox_util.h"
@@ -210,6 +210,17 @@
   GetContentClient()->SetActiveURL(GURL(url));
 }
 
+PP_Resource PpapiThread::CreateBrowserFont(
+    ppapi::proxy::Connection connection,
+    PP_Instance instance,
+    const PP_BrowserFont_Trusted_Description& desc,
+    const ppapi::Preferences& prefs) {
+  if (!BrowserFontResource_Trusted::IsPPFontDescriptionValid(desc))
+    return 0;
+  return (new BrowserFontResource_Trusted(
+        connection, instance, desc, prefs))->GetReference();
+}
+
 uint32 PpapiThread::Register(ppapi::proxy::PluginDispatcher* plugin_dispatcher) {
   if (!plugin_dispatcher ||
       plugin_dispatchers_.size() >= std::numeric_limits<uint32>::max()) {
diff --git a/content/ppapi_plugin/ppapi_thread.h b/content/ppapi_plugin/ppapi_thread.h
index 7726a98..d1ca550 100644
--- a/content/ppapi_plugin/ppapi_thread.h
+++ b/content/ppapi_plugin/ppapi_thread.h
@@ -11,7 +11,7 @@
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/scoped_native_library.h"
 #include "build/build_config.h"
 #include "content/child/child_thread.h"
@@ -19,6 +19,7 @@
 #include "ipc/ipc_listener.h"
 #include "ppapi/c/pp_module.h"
 #include "ppapi/c/trusted/ppp_broker.h"
+#include "ppapi/proxy/connection.h"
 #include "ppapi/proxy/plugin_dispatcher.h"
 #include "ppapi/proxy/plugin_globals.h"
 #include "ppapi/proxy/plugin_proxy_delegate.h"
@@ -101,6 +102,11 @@
   virtual std::string GetUILanguage() OVERRIDE;
   virtual void PreCacheFont(const void* logfontw) OVERRIDE;
   virtual void SetActiveURL(const std::string& url) OVERRIDE;
+  virtual PP_Resource CreateBrowserFont(
+      ppapi::proxy::Connection connection,
+      PP_Instance instance,
+      const PP_BrowserFont_Trusted_Description& desc,
+      const ppapi::Preferences& prefs) OVERRIDE;
 
   // Message handlers.
   void OnLoadPlugin(const base::FilePath& path,
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
index f1cc5b0..4c02999 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
@@ -167,7 +167,7 @@
         return;
     }
 
-    // Represents an invalid process handle; same as base/process.h kNullProcessHandle.
+    // Represents an invalid process handle; same as base/process/process.h kNullProcessHandle.
     private static final int NULL_PROCESS_HANDLE = 0;
 
     // Map from pid to ChildService connection.
diff --git a/content/public/browser/browser_child_process_host.h b/content/public/browser/browser_child_process_host.h
index d2b4fc5..7553478 100644
--- a/content/public/browser/browser_child_process_host.h
+++ b/content/public/browser/browser_child_process_host.h
@@ -5,7 +5,10 @@
 #ifndef CONTENT_PUBLIC_BROWSER_BROWSER_CHILD_PROCESS_HOST_H_
 #define CONTENT_PUBLIC_BROWSER_BROWSER_CHILD_PROCESS_HOST_H_
 
-#include "base/process_util.h"
+#include "base/process/kill.h"
+#include "base/process/launch.h"
+#include "base/process/process_handle.h"
+#include "base/process/process_metrics.h"
 #include "base/strings/string16.h"
 #include "build/build_config.h"
 #include "content/common/content_export.h"
diff --git a/content/public/browser/browser_message_filter.cc b/content/public/browser/browser_message_filter.cc
index e3c43a4..53c0f87 100644
--- a/content/public/browser/browser_message_filter.cc
+++ b/content/public/browser/browser_message_filter.cc
@@ -7,8 +7,8 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/logging.h"
-#include "base/process.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
+#include "base/process/process_handle.h"
 #include "base/task_runner.h"
 #include "content/public/browser/user_metrics.h"
 #include "content/public/common/result_codes.h"
diff --git a/content/public/browser/browser_message_filter.h b/content/public/browser/browser_message_filter.h
index 52c802a..c997cc6 100644
--- a/content/public/browser/browser_message_filter.h
+++ b/content/public/browser/browser_message_filter.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_PUBLIC_BROWSER_BROWSER_MESSAGE_FILTER_H_
 #define CONTENT_PUBLIC_BROWSER_BROWSER_MESSAGE_FILTER_H_
 
-#include "base/process.h"
+#include "base/process/process.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/browser_thread.h"
 #include "ipc/ipc_channel_proxy.h"
diff --git a/content/public/browser/browser_plugin_guest_delegate.h b/content/public/browser/browser_plugin_guest_delegate.h
index 21c4419..df98e4f 100644
--- a/content/public/browser/browser_plugin_guest_delegate.h
+++ b/content/public/browser/browser_plugin_guest_delegate.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_PUBLIC_BROWSER_BROWSER_PLUGIN_GUEST_DELEGATE_H_
 #define CONTENT_PUBLIC_BROWSER_BROWSER_PLUGIN_GUEST_DELEGATE_H_
 
-#include "base/process_util.h"
+#include "base/process/kill.h"
 #include "base/strings/string16.h"
 #include "content/common/content_export.h"
 
@@ -35,6 +35,12 @@
   virtual void GuestProcessGone(base::TerminationStatus status) {}
 
   virtual bool HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
+
+  // Notification that the guest is no longer hung.
+  virtual void RendererResponsive() {}
+
+  // Notification that the guest is hung.
+  virtual void RendererUnresponsive() {}
 };
 
 }  // namespace content
diff --git a/content/public/browser/browser_ppapi_host.h b/content/public/browser/browser_ppapi_host.h
index 47edee7..1ad0d17 100644
--- a/content/public/browser/browser_ppapi_host.h
+++ b/content/public/browser/browser_ppapi_host.h
@@ -6,7 +6,7 @@
 #define CONTENT_PUBLIC_BROWSER_BROWSER_PPAPI_HOST_H_
 
 #include "base/callback_forward.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/render_view_host.h"
 #include "ppapi/c/pp_instance.h"
diff --git a/content/public/browser/child_process_data.h b/content/public/browser/child_process_data.h
index 31798dc..b669305 100644
--- a/content/public/browser/child_process_data.h
+++ b/content/public/browser/child_process_data.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_PUBLIC_BROWSER_CHILD_PROCESS_DATA_H_
 #define CONTENT_PUBLIC_BROWSER_CHILD_PROCESS_DATA_H_
 
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/strings/string16.h"
 #include "content/common/content_export.h"
 
diff --git a/content/public/browser/gpu_data_manager.h b/content/public/browser/gpu_data_manager.h
index 20657ea..8f15be3 100644
--- a/content/public/browser/gpu_data_manager.h
+++ b/content/public/browser/gpu_data_manager.h
@@ -9,7 +9,7 @@
 #include <string>
 
 #include "base/callback_forward.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "content/common/content_export.h"
 
 class GURL;
diff --git a/content/public/browser/gpu_data_manager_observer.h b/content/public/browser/gpu_data_manager_observer.h
index da08181..d52e668 100644
--- a/content/public/browser/gpu_data_manager_observer.h
+++ b/content/public/browser/gpu_data_manager_observer.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_PUBLIC_BROWSER_GPU_DATA_MANAGER_OBSERVER_H_
 #define CONTENT_PUBLIC_BROWSER_GPU_DATA_MANAGER_OBSERVER_H_
 
-#include "base/process_util.h"
+#include "base/process/kill.h"
 #include "content/common/content_export.h"
 #include "content/public/common/gpu_memory_stats.h"
 #include "content/public/common/three_d_api_types.h"
diff --git a/content/public/browser/overscroll_configuration.h b/content/public/browser/overscroll_configuration.h
index a8ca931..5335733 100644
--- a/content/public/browser/overscroll_configuration.h
+++ b/content/public/browser/overscroll_configuration.h
@@ -15,7 +15,8 @@
   OVERSCROLL_CONFIG_NONE,
   OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE,
   OVERSCROLL_CONFIG_VERT_THRESHOLD_COMPLETE,
-  OVERSCROLL_CONFIG_MIN_THRESHOLD_START,
+  OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START,
+  OVERSCROLL_CONFIG_VERT_THRESHOLD_START,
   OVERSCROLL_CONFIG_HORIZ_RESIST_AFTER,
   OVERSCROLL_CONFIG_VERT_RESIST_AFTER,
   OVERSCROLL_CONFIG_COUNT
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h
index 4b78a88..ccc1e72 100644
--- a/content/public/browser/render_process_host.h
+++ b/content/public/browser/render_process_host.h
@@ -7,8 +7,8 @@
 
 #include "base/basictypes.h"
 #include "base/id_map.h"
-#include "base/process.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
+#include "base/process/process_handle.h"
 #include "content/common/content_export.h"
 #include "ipc/ipc_channel_proxy.h"
 #include "ipc/ipc_sender.h"
diff --git a/content/public/browser/storage_partition.h b/content/public/browser/storage_partition.h
index a8e451c..bd7f90c 100644
--- a/content/public/browser/storage_partition.h
+++ b/content/public/browser/storage_partition.h
@@ -56,63 +56,56 @@
   virtual DOMStorageContext* GetDOMStorageContext() = 0;
   virtual IndexedDBContext* GetIndexedDBContext() = 0;
 
-  enum RemoveDataMask {
-    REMOVE_DATA_MASK_APPCACHE = 1 << 0,
-    REMOVE_DATA_MASK_COOKIES = 1 << 1,
-    REMOVE_DATA_MASK_FILE_SYSTEMS = 1 << 2,
-    REMOVE_DATA_MASK_INDEXEDDB = 1 << 3,
-    REMOVE_DATA_MASK_LOCAL_STORAGE = 1 << 4,
-    REMOVE_DATA_MASK_SHADER_CACHE = 1 << 5,
-    REMOVE_DATA_MASK_WEBSQL = 1 << 6,
+  enum StorageMask {
+    kCookies = 1 << 0,
 
-    REMOVE_DATA_MASK_ALL = -1
-  };
-
-  // TODO(lazyboy): Value in the enum should start with the enum prefix
-  // (QUOTA_MANAGED_STORAGE_MASK_*).
-  enum QuotaManagedStorageMask {
     // Corresponds to quota::kStorageTypeTemporary.
-    kQuotaManagedTemporaryStorage = 1 << 0,
+    kQuotaManagedTemporaryStorage = 1 << 1,
 
     // Corresponds to quota::kStorageTypePersistent.
-    kQuotaManagedPersistentStorage = 1 << 1,
+    kQuotaManagedPersistentStorage = 1 << 2,
+
+    // Local dom storage.
+    kLocalDomStorage = 1 << 3,
+    kSessionDomStorage = 1 << 4,
+
+    // Local shader storage.
+    kShaderStorage = 1 << 5,
 
     // Corresponds to quota::kStorageTypeSyncable.
-    kQuotaManagedSyncableStorage = 1 << 2,
+    kQuotaManagedSyncableStorage = 1 << 6,
 
-    kAllStorage = -1
+    kAllStorage = -1,
   };
 
   // Starts an asynchronous task that does a best-effort clear the data
-  // corresponding to the given |remove_mask| and |quota_storage_remove_mask|
-  // inside this StoragePartition for the given |storage_origin|.
-  // Note session dom storage is not cleared even if you specify
-  // REMOVE_DATA_MASK_LOCAL_STORAGE.
+  // corresonding to the given |storage_mask| inside this StoragePartition for
+  // the given |storage_origin|. Note kSessionDomStorage is not cleared and the
+  // mask is ignored.
   //
   // TODO(ajwong): Right now, the embedder may have some
   // URLRequestContextGetter objects that the StoragePartition does not know
   // about.  This will no longer be the case when we resolve
   // http://crbug.com/159193. Remove |request_context_getter| when that bug
   // is fixed.
-  virtual void ClearDataForOrigin(uint32 remove_mask,
-                                  uint32 quota_storage_remove_mask,
-                                  const GURL& storage_origin,
-                                  net::URLRequestContextGetter* rq_context) = 0;
+  virtual void AsyncClearDataForOrigin(
+      uint32 storage_mask,
+      const GURL& storage_origin,
+      net::URLRequestContextGetter* request_context_getter) = 0;
 
-  // Similar to ClearDataForOrigin(), but deletes all data out of the
+  // Similar to AsyncClearDataForOrigin(), but deletes all data out of the
   // StoragePartition rather than just the data related to this origin.
-  virtual void ClearDataForUnboundedRange(uint32 remove_mask,
-                                          uint32 quota_storage_remove_mask) = 0;
+  virtual void AsyncClearData(uint32 storage_mask) = 0;
 
-  // Similar to ClearDataForOrigin(), but deletes all the data out of the
+  // Similar to AsyncClearDataForOrigin(), but deletes all the data out of the
   // StoragePartion from between the given |begin| and |end| dates rather
   // then just the data related to this origin.
-  virtual void ClearDataForRange(uint32 remove_mask,
-                                 uint32 quota_storage_remove_mask,
-                                 const base::Time& begin,
-                                 const base::Time& end,
-                                 const base::Closure& callback) = 0;
-
+  //
+  // Note: This currently only supports the shader cache.
+  virtual void AsyncClearDataBetween(uint32 storage_mask,
+                                     const base::Time& begin,
+                                     const base::Time& end,
+                                     const base::Closure& callback) = 0;
  protected:
   virtual ~StoragePartition() {}
 };
diff --git a/content/public/browser/utility_process_host.h b/content/public/browser/utility_process_host.h
index efd06b8..4c7e192 100644
--- a/content/public/browser/utility_process_host.h
+++ b/content/public/browser/utility_process_host.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_PUBLIC_BROWSER_UTILITY_PROCESS_HOST_H_
 #define CONTENT_PUBLIC_BROWSER_UTILITY_PROCESS_HOST_H_
 
-#include "base/process_util.h"
+#include "base/process/launch.h"
 #include "content/common/content_export.h"
 #include "ipc/ipc_sender.h"
 
diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h
index 414067b..b7f67e4 100644
--- a/content/public/browser/web_contents.h
+++ b/content/public/browser/web_contents.h
@@ -5,9 +5,12 @@
 #ifndef CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_H_
 #define CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_H_
 
+#include <set>
+
 #include "base/basictypes.h"
 #include "base/callback_forward.h"
-#include "base/process_util.h"
+#include "base/files/file_path.h"
+#include "base/process/kill.h"
 #include "base/strings/string16.h"
 #include "base/supports_user_data.h"
 #include "content/common/content_export.h"
diff --git a/content/public/browser/web_contents_observer.h b/content/public/browser/web_contents_observer.h
index b6d2e9b..241a74b 100644
--- a/content/public/browser/web_contents_observer.h
+++ b/content/public/browser/web_contents_observer.h
@@ -5,8 +5,8 @@
 #ifndef CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_OBSERVER_H_
 #define CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_OBSERVER_H_
 
-#include "base/process.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
+#include "base/process/process_handle.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/common/page_transition_types.h"
diff --git a/content/public/browser/web_contents_view.h b/content/public/browser/web_contents_view.h
index 7e91bfa..d0594b7 100644
--- a/content/public/browser/web_contents_view.h
+++ b/content/public/browser/web_contents_view.h
@@ -8,7 +8,7 @@
 #include <string>
 
 #include "base/basictypes.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
 #include "content/common/content_export.h"
 #include "ui/gfx/native_widget_types.h"
 #include "ui/gfx/rect.h"
diff --git a/content/public/browser/worker_service.h b/content/public/browser/worker_service.h
index 0b066e3..10740fa 100644
--- a/content/public/browser/worker_service.h
+++ b/content/public/browser/worker_service.h
@@ -7,7 +7,7 @@
 
 #include <vector>
 
-#include "base/process.h"
+#include "base/process/process.h"
 #include "content/common/content_export.h"
 #include "url/gurl.h"
 
diff --git a/content/public/browser/worker_service_observer.h b/content/public/browser/worker_service_observer.h
index dbdebff..ff6c8ef 100644
--- a/content/public/browser/worker_service_observer.h
+++ b/content/public/browser/worker_service_observer.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_PUBLIC_BROWSER_WORKER_SERVICE_OBSERVER_H_
 #define CONTENT_PUBLIC_BROWSER_WORKER_SERVICE_OBSERVER_H_
 
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/strings/string16.h"
 
 class GURL;
diff --git a/content/public/browser/zygote_host_linux.h b/content/public/browser/zygote_host_linux.h
index 2dd1f80..a9798de 100644
--- a/content/public/browser/zygote_host_linux.h
+++ b/content/public/browser/zygote_host_linux.h
@@ -7,7 +7,7 @@
 
 #include <unistd.h>
 
-#include "base/process.h"
+#include "base/process/process.h"
 #include "content/common/content_export.h"
 
 namespace content {
diff --git a/content/public/common/common_param_traits_macros.h b/content/public/common/common_param_traits_macros.h
index e66daa7..a77c4c4 100644
--- a/content/public/common/common_param_traits_macros.h
+++ b/content/public/common/common_param_traits_macros.h
@@ -20,6 +20,7 @@
 #include "third_party/WebKit/public/platform/WebRect.h"
 #include "third_party/WebKit/public/platform/WebReferrerPolicy.h"
 #include "third_party/WebKit/public/platform/WebURLRequest.h"
+#include "third_party/WebKit/public/web/WebWindowFeatures.h"
 #include "ui/base/window_open_disposition.h"
 #include "webkit/common/webpreferences.h"
 
@@ -204,4 +205,23 @@
 #endif
 IPC_STRUCT_TRAITS_END()
 
+IPC_STRUCT_TRAITS_BEGIN(WebKit::WebWindowFeatures)
+  IPC_STRUCT_TRAITS_MEMBER(x)
+  IPC_STRUCT_TRAITS_MEMBER(xSet)
+  IPC_STRUCT_TRAITS_MEMBER(y)
+  IPC_STRUCT_TRAITS_MEMBER(ySet)
+  IPC_STRUCT_TRAITS_MEMBER(width)
+  IPC_STRUCT_TRAITS_MEMBER(widthSet)
+  IPC_STRUCT_TRAITS_MEMBER(height)
+  IPC_STRUCT_TRAITS_MEMBER(heightSet)
+  IPC_STRUCT_TRAITS_MEMBER(menuBarVisible)
+  IPC_STRUCT_TRAITS_MEMBER(statusBarVisible)
+  IPC_STRUCT_TRAITS_MEMBER(toolBarVisible)
+  IPC_STRUCT_TRAITS_MEMBER(locationBarVisible)
+  IPC_STRUCT_TRAITS_MEMBER(scrollbarsVisible)
+  IPC_STRUCT_TRAITS_MEMBER(resizable)
+  IPC_STRUCT_TRAITS_MEMBER(fullscreen)
+  IPC_STRUCT_TRAITS_MEMBER(dialog)
+IPC_STRUCT_TRAITS_END()
+
 #endif  // CONTENT_PUBLIC_COMMON_COMMON_PARAM_TRAITS_MACROS_H_
diff --git a/content/public/common/gpu_memory_stats.h b/content/public/common/gpu_memory_stats.h
index e5e22f8..feb9ded 100644
--- a/content/public/common/gpu_memory_stats.h
+++ b/content/public/common/gpu_memory_stats.h
@@ -11,7 +11,7 @@
 #include <map>
 
 #include "base/basictypes.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "content/common/content_export.h"
 
 namespace content {
diff --git a/content/public/common/page_zoom.h b/content/public/common/page_zoom.h
index 8b0634d..aa5e56a 100644
--- a/content/public/common/page_zoom.h
+++ b/content/public/common/page_zoom.h
@@ -35,6 +35,10 @@
 // considered equal.
 CONTENT_EXPORT bool ZoomValuesEqual(double value_a, double value_b);
 
+// Converts between zoom factors and levels.
+CONTENT_EXPORT double ZoomLevelToZoomFactor(double zoom_level);
+CONTENT_EXPORT double ZoomFactorToZoomLevel(double factor);
+
 }  // namespace content
 
 #endif  // CONTENT_PUBLIC_COMMON_PAGE_ZOOM_H_
diff --git a/content/public/common/sandbox_init.h b/content/public/common/sandbox_init.h
index 7ae6dc4..8604322 100644
--- a/content/public/common/sandbox_init.h
+++ b/content/public/common/sandbox_init.h
@@ -6,7 +6,7 @@
 #define CONTENT_PUBLIC_COMMON_SANDBOX_INIT_H_
 
 #include "base/callback_forward.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "build/build_config.h"
 #include "content/common/content_export.h"
 
diff --git a/content/public/common/sandboxed_process_launcher_delegate.h b/content/public/common/sandboxed_process_launcher_delegate.h
index 5430f95..6357211 100644
--- a/content/public/common/sandboxed_process_launcher_delegate.h
+++ b/content/public/common/sandboxed_process_launcher_delegate.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_PUBLIC_COMMON_SANDBOXED_PROCESS_LAUNCHER_DELEGATE_H_
 #define CONTENT_PUBLIC_COMMON_SANDBOXED_PROCESS_LAUNCHER_DELEGATE_H_
 
-#include "base/process.h"
+#include "base/process/process.h"
 
 namespace base {
 class FilePath;
diff --git a/content/public/renderer/content_renderer_client.cc b/content/public/renderer/content_renderer_client.cc
index 1d37ed4..1f9e45a 100644
--- a/content/public/renderer/content_renderer_client.cc
+++ b/content/public/renderer/content_renderer_client.cc
@@ -83,6 +83,10 @@
   return NULL;
 }
 
+WebKit::WebCrypto* ContentRendererClient::OverrideWebCrypto() {
+  return NULL;
+}
+
 bool ContentRendererClient::RunIdleHandlerWhenWidgetsHidden() {
   return true;
 }
diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h
index 080d5ca..e12d39b 100644
--- a/content/public/renderer/content_renderer_client.h
+++ b/content/public/renderer/content_renderer_client.h
@@ -28,6 +28,7 @@
 namespace WebKit {
 class WebAudioDevice;
 class WebClipboard;
+class WebCrypto;
 class WebFrame;
 class WebHyphenator;
 class WebMIDIAccessor;
@@ -158,6 +159,10 @@
   virtual WebKit::WebSpeechSynthesizer* OverrideSpeechSynthesizer(
       WebKit::WebSpeechSynthesizerClient* client);
 
+  // Allows the embedder to override the WebCrypto used.
+  // If it returns NULL the content layer will handle crypto.
+  virtual WebKit::WebCrypto* OverrideWebCrypto();
+
   // Returns true if the renderer process should schedule the idle handler when
   // all widgets are hidden.
   virtual bool RunIdleHandlerWhenWidgetsHidden();
diff --git a/content/public/renderer/ppapi_plugin_instance.h b/content/public/renderer/pepper_plugin_instance.h
similarity index 82%
rename from content/public/renderer/ppapi_plugin_instance.h
rename to content/public/renderer/pepper_plugin_instance.h
index 1e56e4c..211752d 100644
--- a/content/public/renderer/ppapi_plugin_instance.h
+++ b/content/public/renderer/pepper_plugin_instance.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 CONTENT_PUBLIC_PPAPI_PLUGIN_INSTANCE_H_
-#define CONTENT_PUBLIC_PPAPI_PLUGIN_INSTANCE_H_
+#ifndef CONTENT_PUBLIC_RENDERER_PEPPER_PLUGIN_INSTANCE_H_
+#define CONTENT_PUBLIC_RENDERER_PEPPER_PLUGIN_INSTANCE_H_
 
 #include "base/basictypes.h"
 #include "base/process/process_handle.h"
@@ -17,10 +17,6 @@
 class FilePath;
 }
 
-namespace content {
-class RenderView;
-}
-
 namespace gfx {
 class ImageSkia;
 class Rect;
@@ -40,20 +36,20 @@
 class WebPluginContainer;
 }
 
-namespace webkit {
-namespace ppapi {
+namespace content {
+class RenderView;
 
-class PluginInstance {
+class PepperPluginInstance {
  public:
-  static CONTENT_EXPORT PluginInstance* Get(PP_Instance instance_id);
+  static CONTENT_EXPORT PepperPluginInstance* Get(PP_Instance instance_id);
 
-  virtual ~PluginInstance() {}
+  virtual ~PepperPluginInstance() {}
 
   virtual content::RenderView* GetRenderView() = 0;
 
   virtual WebKit::WebPluginContainer* GetContainer() = 0;
 
-  virtual ::ppapi::VarTracker* GetVarTracker() = 0;
+  virtual ppapi::VarTracker* GetVarTracker() = 0;
 
   virtual const GURL& GetPluginURL() = 0;
 
@@ -72,7 +68,7 @@
   // Switches this instance with one that uses the out of process IPC proxy.
   virtual PP_ExternalPluginResult SwitchToOutOfProcessProxy(
       const base::FilePath& file_path,
-      ::ppapi::PpapiPermissions permissions,
+      ppapi::PpapiPermissions permissions,
       const IPC::ChannelHandle& channel_handle,
       base::ProcessId plugin_pid,
       int plugin_child_id) = 0;
@@ -93,13 +89,12 @@
 
   virtual bool IsRectTopmost(const gfx::Rect& rect) = 0;
 
-  virtual int32_t Navigate(const ::ppapi::URLRequestInfoData& request,
+  virtual int32_t Navigate(const ppapi::URLRequestInfoData& request,
                            const char* target,
                            bool from_user_action) = 0;
 
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
-#endif  // CONTENT_PUBLIC_PPAPI_PLUGIN_INSTANCE_H_
+#endif  // CONTENT_PUBLIC_RENDERER_PEPPER_PLUGIN_INSTANCE_H_
diff --git a/content/public/renderer/renderer_ppapi_host.h b/content/public/renderer/renderer_ppapi_host.h
index 5f3caac..329961e 100644
--- a/content/public/renderer/renderer_ppapi_host.h
+++ b/content/public/renderer/renderer_ppapi_host.h
@@ -8,7 +8,7 @@
 #include "base/callback_forward.h"
 #include "base/memory/ref_counted.h"
 #include "base/platform_file.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "content/common/content_export.h"
 #include "ipc/ipc_platform_file.h"
 #include "ppapi/c/pp_instance.h"
@@ -35,14 +35,8 @@
 class WebPluginContainer;
 }
 
-namespace webkit {
-namespace ppapi {
-class PluginInstance;
-}
-}
-
 namespace content {
-
+class PepperPluginInstance;
 class RenderView;
 
 // Interface that allows components in the embedder app to talk to the
@@ -66,7 +60,7 @@
   // Returns the PluginInstance for the given PP_Instance, or NULL if the
   // PP_Instance is invalid (the common case this will be invalid is during
   // plugin teardown when resource hosts are being force-freed).
-  virtual webkit::ppapi::PluginInstance* GetPluginInstance(
+  virtual PepperPluginInstance* GetPluginInstance(
       PP_Instance instance) const = 0;
 
   // Returns the RenderView for the given plugin instance, or NULL if the
diff --git a/content/public/test/browser_test_base.cc b/content/public/test/browser_test_base.cc
index 66918ab..d15e54b 100644
--- a/content/public/test/browser_test_base.cc
+++ b/content/public/test/browser_test_base.cc
@@ -7,7 +7,6 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/debug/stack_trace.h"
-#include "base/process_util.h"
 #include "content/browser/renderer_host/render_process_host_impl.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/common/content_switches.h"
@@ -15,6 +14,10 @@
 #include "content/public/test/test_utils.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 
+#if defined(OS_POSIX)
+#include "base/process/process_handle.h"
+#endif
+
 #if defined(OS_MACOSX)
 #include "base/mac/mac_util.h"
 #include "base/power_monitor/power_monitor.h"
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc
index e64a7ab..c801cd5 100644
--- a/content/public/test/browser_test_utils.cc
+++ b/content/public/test/browser_test_utils.cc
@@ -7,7 +7,7 @@
 #include "base/command_line.h"
 #include "base/json/json_reader.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h
index 83f3985..ece2805 100644
--- a/content/public/test/browser_test_utils.h
+++ b/content/public/test/browser_test_utils.h
@@ -13,7 +13,7 @@
 #include "base/compiler_specific.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/ref_counted.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/strings/string16.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
diff --git a/content/public/test/mock_render_thread.cc b/content/public/test/mock_render_thread.cc
index be1caf2..ae10d82 100644
--- a/content/public/test/mock_render_thread.cc
+++ b/content/public/test/mock_render_thread.cc
@@ -5,7 +5,6 @@
 #include "content/public/test/mock_render_thread.h"
 
 #include "base/message_loop/message_loop_proxy.h"
-#include "base/process_util.h"
 #include "content/common/view_messages.h"
 #include "ipc/ipc_message_utils.h"
 #include "ipc/ipc_sync_message.h"
diff --git a/content/public/test/render_view_fake_resources_test.cc b/content/public/test/render_view_fake_resources_test.cc
index 20e96f5..3b9d35b 100644
--- a/content/public/test/render_view_fake_resources_test.cc
+++ b/content/public/test/render_view_fake_resources_test.cc
@@ -8,7 +8,7 @@
 
 #include "base/command_line.h"
 #include "base/memory/shared_memory.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/run_loop.h"
 #include "base/time/time.h"
 #include "content/common/resource_messages.h"
diff --git a/content/public/test/test_launcher.cc b/content/public/test/test_launcher.cc
index ae5abbd..0c3e355 100644
--- a/content/public/test/test_launcher.cc
+++ b/content/public/test/test_launcher.cc
@@ -15,7 +15,6 @@
 #include "base/logging.h"
 #include "base/memory/linked_ptr.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/process_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/content/renderer/browser_plugin/browser_plugin.cc b/content/renderer/browser_plugin/browser_plugin.cc
index 4483c58..835a24e 100644
--- a/content/renderer/browser_plugin/browser_plugin.cc
+++ b/content/renderer/browser_plugin/browser_plugin.cc
@@ -148,8 +148,6 @@
     IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestContentWindowReady,
                         OnGuestContentWindowReady)
     IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestGone, OnGuestGone)
-    IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestResponsive, OnGuestResponsive)
-    IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestUnresponsive, OnGuestUnresponsive)
     IPC_MESSAGE_HANDLER(BrowserPluginMsg_RequestPermission, OnRequestPermission)
     IPC_MESSAGE_HANDLER(BrowserPluginMsg_SetCursor, OnSetCursor)
     IPC_MESSAGE_HANDLER(BrowserPluginMsg_SetMouseLock, OnSetMouseLock)
@@ -485,18 +483,6 @@
                  weak_ptr_factory_.GetWeakPtr()));
 }
 
-void BrowserPlugin::OnGuestResponsive(int guest_instance_id, int process_id) {
-  std::map<std::string, base::Value*> props;
-  props[browser_plugin::kProcessId] = new base::FundamentalValue(process_id);
-  TriggerEvent(browser_plugin::kEventResponsive, &props);
-}
-
-void BrowserPlugin::OnGuestUnresponsive(int guest_instance_id, int process_id) {
-  std::map<std::string, base::Value*> props;
-  props[browser_plugin::kProcessId] = new base::FundamentalValue(process_id);
-  TriggerEvent(browser_plugin::kEventUnresponsive, &props);
-}
-
 void BrowserPlugin::OnRequestPermission(
     int guest_instance_id,
     BrowserPluginPermissionType permission_type,
@@ -1168,8 +1154,6 @@
     case BrowserPluginMsg_CompositorFrameSwapped::ID:
     case BrowserPluginMsg_GuestContentWindowReady::ID:
     case BrowserPluginMsg_GuestGone::ID:
-    case BrowserPluginMsg_GuestResponsive::ID:
-    case BrowserPluginMsg_GuestUnresponsive::ID:
     case BrowserPluginMsg_RequestPermission::ID:
     case BrowserPluginMsg_SetCursor::ID:
     case BrowserPluginMsg_SetMouseLock::ID:
diff --git a/content/renderer/media/crypto/content_decryption_module_factory.cc b/content/renderer/media/crypto/content_decryption_module_factory.cc
index 3138be2..3ce22f3 100644
--- a/content/renderer/media/crypto/content_decryption_module_factory.cc
+++ b/content/renderer/media/crypto/content_decryption_module_factory.cc
@@ -10,8 +10,8 @@
 
 #if defined(ENABLE_PEPPER_CDMS)
 #include "content/renderer/media/crypto/ppapi_decryptor.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
-#include "content/renderer/pepper/ppapi_webplugin_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_webplugin_impl.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebMediaPlayerClient.h"
@@ -23,10 +23,10 @@
 namespace content {
 
 #if defined(ENABLE_PEPPER_CDMS)
-// Returns the PluginInstanceImpl associated with the Helper Plugin.
+// Returns the PepperPluginInstanceImpl associated with the Helper Plugin.
 // If a non-NULL pointer is returned, the caller must call closeHelperPlugin()
 // when the Helper Plugin is no longer needed.
-static scoped_refptr<webkit::ppapi::PluginInstanceImpl> CreateHelperPlugin(
+static scoped_refptr<PepperPluginInstanceImpl> CreateHelperPlugin(
     const std::string& plugin_type,
     WebKit::WebMediaPlayerClient* web_media_player_client,
     WebKit::WebFrame* web_frame) {
@@ -40,8 +40,8 @@
 
   DCHECK(!web_plugin->isPlaceholder());  // Prevented by Blink.
   // Only Pepper plugins are supported, so it must be a ppapi object.
-  webkit::ppapi::WebPluginImpl* ppapi_plugin =
-      static_cast<webkit::ppapi::WebPluginImpl*>(web_plugin);
+  PepperWebPluginImpl* ppapi_plugin =
+      static_cast<PepperWebPluginImpl*>(web_plugin);
   return ppapi_plugin->instance();
 }
 
@@ -58,7 +58,7 @@
 
   std::string plugin_type = GetPepperType(key_system);
   DCHECK(!plugin_type.empty());
-  const scoped_refptr<webkit::ppapi::PluginInstanceImpl>& plugin_instance =
+  const scoped_refptr<PepperPluginInstanceImpl>& plugin_instance =
       CreateHelperPlugin(plugin_type, web_media_player_client, web_frame);
   if (!plugin_instance.get()) {
     DLOG(ERROR) << "ProxyDecryptor: plugin instance creation failed.";
diff --git a/content/renderer/media/crypto/ppapi_decryptor.cc b/content/renderer/media/crypto/ppapi_decryptor.cc
index 7bf2aab..8d5bdf9 100644
--- a/content/renderer/media/crypto/ppapi_decryptor.cc
+++ b/content/renderer/media/crypto/ppapi_decryptor.cc
@@ -13,7 +13,7 @@
 #include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_loop_proxy.h"
 #include "content/renderer/pepper/content_decryptor_delegate.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "media/base/audio_decoder_config.h"
 #include "media/base/data_buffer.h"
 #include "media/base/decoder_buffer.h"
@@ -24,12 +24,12 @@
 
 scoped_ptr<PpapiDecryptor> PpapiDecryptor::Create(
     const std::string& key_system,
-    const scoped_refptr<webkit::ppapi::PluginInstanceImpl>& plugin_instance,
+    const scoped_refptr<PepperPluginInstanceImpl>& plugin_instance,
     const media::KeyAddedCB& key_added_cb,
     const media::KeyErrorCB& key_error_cb,
     const media::KeyMessageCB& key_message_cb,
     const base::Closure& destroy_plugin_cb) {
-  webkit::ppapi::ContentDecryptorDelegate* plugin_cdm_delegate =
+  ContentDecryptorDelegate* plugin_cdm_delegate =
       plugin_instance->GetContentDecryptorDelegate();
   if (!plugin_cdm_delegate) {
     DVLOG(1) << "PpapiDecryptor: plugin cdm delegate creation failed.";
@@ -47,8 +47,8 @@
 }
 
 PpapiDecryptor::PpapiDecryptor(
-    const scoped_refptr<webkit::ppapi::PluginInstanceImpl>& plugin_instance,
-    webkit::ppapi::ContentDecryptorDelegate* plugin_cdm_delegate,
+    const scoped_refptr<PepperPluginInstanceImpl>& plugin_instance,
+    ContentDecryptorDelegate* plugin_cdm_delegate,
     const media::KeyAddedCB& key_added_cb,
     const media::KeyErrorCB& key_error_cb,
     const media::KeyMessageCB& key_message_cb,
diff --git a/content/renderer/media/crypto/ppapi_decryptor.h b/content/renderer/media/crypto/ppapi_decryptor.h
index 39c84af..327ecc6 100644
--- a/content/renderer/media/crypto/ppapi_decryptor.h
+++ b/content/renderer/media/crypto/ppapi_decryptor.h
@@ -19,14 +19,9 @@
 class MessageLoopProxy;
 }
 
-namespace webkit {
-namespace ppapi {
-class ContentDecryptorDelegate;
-class PluginInstanceImpl;
-}
-}
-
 namespace content {
+class ContentDecryptorDelegate;
+class PepperPluginInstanceImpl;
 
 // PpapiDecryptor implements media::Decryptor and forwards all calls to the
 // PluginInstance.
@@ -36,7 +31,7 @@
   static scoped_ptr<PpapiDecryptor> Create(
       // TODO(ddorwin): Remove after updating the delegate.
       const std::string& key_system,
-      const scoped_refptr<webkit::ppapi::PluginInstanceImpl>& plugin_instance,
+      const scoped_refptr<PepperPluginInstanceImpl>& plugin_instance,
       const media::KeyAddedCB& key_added_cb,
       const media::KeyErrorCB& key_error_cb,
       const media::KeyMessageCB& key_message_cb,
@@ -76,8 +71,8 @@
 
  private:
   PpapiDecryptor(
-      const scoped_refptr<webkit::ppapi::PluginInstanceImpl>& plugin_instance,
-      webkit::ppapi::ContentDecryptorDelegate* plugin_cdm_delegate,
+      const scoped_refptr<PepperPluginInstanceImpl>& plugin_instance,
+      ContentDecryptorDelegate* plugin_cdm_delegate,
       const media::KeyAddedCB& key_added_cb,
       const media::KeyErrorCB& key_error_cb,
       const media::KeyMessageCB& key_message_cb,
@@ -99,9 +94,9 @@
   // Hold a reference of the plugin instance to make sure the plugin outlives
   // the |plugin_cdm_delegate_|. This is needed because |plugin_cdm_delegate_|
   // is owned by the |plugin_instance_|.
-  scoped_refptr<webkit::ppapi::PluginInstanceImpl> plugin_instance_;
+  scoped_refptr<PepperPluginInstanceImpl> plugin_instance_;
 
-  webkit::ppapi::ContentDecryptorDelegate* plugin_cdm_delegate_;
+  ContentDecryptorDelegate* plugin_cdm_delegate_;
 
   // Callbacks for firing key events.
   media::KeyAddedCB key_added_cb_;
diff --git a/content/renderer/media/midi_dispatcher.cc b/content/renderer/media/midi_dispatcher.cc
new file mode 100644
index 0000000..f3485b4
--- /dev/null
+++ b/content/renderer/media/midi_dispatcher.cc
@@ -0,0 +1,58 @@
+// 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/renderer/media/midi_dispatcher.h"
+
+#include "base/bind.h"
+#include "base/message_loop/message_loop.h"
+#include "content/common/media/midi_messages.h"
+#include "content/renderer/render_view_impl.h"
+#include "third_party/WebKit/public/web/WebMIDIPermissionRequest.h"
+
+using WebKit::WebMIDIPermissionRequest;
+
+namespace content {
+
+MIDIDispatcher::MIDIDispatcher(RenderViewImpl* render_view)
+    : RenderViewObserver(render_view) {
+}
+
+MIDIDispatcher::~MIDIDispatcher() {}
+
+bool MIDIDispatcher::OnMessageReceived(const IPC::Message& message) {
+  // TODO(toyoshim): Handle MIDIMsg_SysExPermissionApproved.
+  return false;
+}
+
+void MIDIDispatcher::requestSysExPermission(
+      const WebMIDIPermissionRequest& request) {
+  // TODO(toyoshim): Send a message to MIDIDispatcherHost to handle correctly.
+  int client_id = requests_.Add(new WebMIDIPermissionRequest(request));
+  base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(
+      &MIDIDispatcher::OnSysExPermissionApproved,
+      base::Unretained(this), client_id, false));
+}
+
+void MIDIDispatcher::cancelSysExPermissionRequest(
+    const WebMIDIPermissionRequest& request) {
+  for (IDMap<WebMIDIPermissionRequest>::iterator it(&requests_);
+       !it.IsAtEnd();
+       it.Advance()) {
+    WebMIDIPermissionRequest* value = it.GetCurrentValue();
+    if (!value->equals(request))
+      continue;
+    requests_.Remove(it.GetCurrentKey());
+  }
+}
+
+void MIDIDispatcher::OnSysExPermissionApproved(int client_id, bool is_allowed) {
+  // |request| can be NULL when the request is canceled.
+  WebMIDIPermissionRequest* request = requests_.Lookup(client_id);
+  if (!request)
+    return;
+  request->setIsAllowed(is_allowed);
+  requests_.Remove(client_id);
+}
+
+}  // namespace content
diff --git a/content/renderer/media/midi_dispatcher.h b/content/renderer/media/midi_dispatcher.h
new file mode 100644
index 0000000..143d706
--- /dev/null
+++ b/content/renderer/media/midi_dispatcher.h
@@ -0,0 +1,54 @@
+// 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_MEDIA_MIDI_DISPATCHER_H_
+#define CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_
+
+#include "base/id_map.h"
+#include "content/public/renderer/render_view_observer.h"
+#include "third_party/WebKit/public/web/WebMIDIClient.h"
+
+namespace WebKit {
+class WebMIDIPermissionRequest;
+}
+
+namespace content {
+
+class RenderViewImpl;
+
+// MIDIDispatcher implements WebMIDIClient to handle permissions for using
+// system exclusive messages.
+// It works as RenderViewObserver to handle IPC messages between
+// MIDIDispatcherHost owned by RenderViewHost since permissions are managed in
+// the browser process.
+class MIDIDispatcher : public RenderViewObserver,
+                       public WebKit::WebMIDIClient {
+ public:
+  explicit MIDIDispatcher(RenderViewImpl* render_view);
+  virtual ~MIDIDispatcher();
+
+ private:
+  // RenderView::Observer implementation.
+  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
+
+  // WebKit::WebMIDIClient implementation.
+  virtual void requestSysExPermission(
+      const WebKit::WebMIDIPermissionRequest& request) OVERRIDE;
+  virtual void cancelSysExPermissionRequest(
+      const WebKit::WebMIDIPermissionRequest& request) OVERRIDE;
+
+  // Permission for using system exclusive messages has been set.
+  void OnSysExPermissionApproved(int client_id, bool is_allowed);
+
+  // Each WebMIDIPermissionRequest object is valid until
+  // cancelSysExPermissionRequest() is called with the object, or used to call
+  // WebMIDIPermissionRequest::setIsAllowed().
+  IDMap<WebKit::WebMIDIPermissionRequest> requests_;
+
+  DISALLOW_COPY_AND_ASSIGN(MIDIDispatcher);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_
diff --git a/content/renderer/media/midi_message_filter.cc b/content/renderer/media/midi_message_filter.cc
index 73b261d..3586d30 100644
--- a/content/renderer/media/midi_message_filter.cc
+++ b/content/renderer/media/midi_message_filter.cc
@@ -40,7 +40,7 @@
   DCHECK(io_message_loop_->BelongsToCurrentThread());
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP(MIDIMessageFilter, message)
-    IPC_MESSAGE_HANDLER(MIDIMsg_AccessApproved, OnAccessApproved)
+    IPC_MESSAGE_HANDLER(MIDIMsg_SessionStarted, OnSessionStarted)
     IPC_MESSAGE_HANDLER(MIDIMsg_DataReceived, OnDataReceived)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
@@ -65,8 +65,7 @@
   channel_ = NULL;
 }
 
-void MIDIMessageFilter::RequestAccess(
-    WebKit::WebMIDIAccessorClient* client, int access) {
+void MIDIMessageFilter::StartSession(WebKit::WebMIDIAccessorClient* client) {
   // Generate and keep track of a "client id" which is sent to the browser
   // to ask permission to talk to MIDI hardware.
   // This id is handed back when we receive the answer in OnAccessApproved().
@@ -75,13 +74,13 @@
     clients_[client] = client_id;
 
     io_message_loop_->PostTask(FROM_HERE,
-        base::Bind(&MIDIMessageFilter::RequestAccessOnIOThread, this,
-                   client_id, access));
+        base::Bind(&MIDIMessageFilter::StartSessionOnIOThread, this,
+                   client_id));
   }
 }
 
-void MIDIMessageFilter::RequestAccessOnIOThread(int client_id, int access) {
-  Send(new MIDIHostMsg_RequestAccess(client_id, access));
+void MIDIMessageFilter::StartSessionOnIOThread(int client_id) {
+  Send(new MIDIHostMsg_StartSession(client_id));
 }
 
 void MIDIMessageFilter::RemoveClient(WebKit::WebMIDIAccessorClient* client) {
@@ -92,22 +91,20 @@
 
 // Received from browser.
 
-void MIDIMessageFilter::OnAccessApproved(
+void MIDIMessageFilter::OnSessionStarted(
     int client_id,
-    int access,
     bool success,
     MIDIPortInfoList inputs,
     MIDIPortInfoList outputs) {
   // Handle on the main JS thread.
   main_message_loop_->PostTask(
       FROM_HERE,
-      base::Bind(&MIDIMessageFilter::HandleAccessApproved, this,
-                 client_id, access, success, inputs, outputs));
+      base::Bind(&MIDIMessageFilter::HandleSessionStarted, this,
+                 client_id, success, inputs, outputs));
 }
 
-void MIDIMessageFilter::HandleAccessApproved(
+void MIDIMessageFilter::HandleSessionStarted(
     int client_id,
-    int access,
     bool success,
     MIDIPortInfoList inputs,
     MIDIPortInfoList outputs) {
@@ -133,11 +130,10 @@
           UTF8ToUTF16(outputs[i].version));
     }
   }
-
-  if (success)
-    client->didAllowAccess();
-  else
-    client->didBlockAccess();
+  // TODO(toyoshim): Reports device initialization failure to JavaScript as
+  // "NotSupportedError" or something when |success| is false.
+  // http://crbug.com/260315
+  client->didStartSession();
 }
 
 WebKit::WebMIDIAccessorClient*
diff --git a/content/renderer/media/midi_message_filter.h b/content/renderer/media/midi_message_filter.h
index c34ce53..0daceb0 100644
--- a/content/renderer/media/midi_message_filter.h
+++ b/content/renderer/media/midi_message_filter.h
@@ -32,7 +32,7 @@
   // If permission is granted, then the client's
   // addInputPort() and addOutputPort() methods will be called,
   // giving the client access to receive and send data.
-  void RequestAccess(WebKit::WebMIDIAccessorClient* client, int access);
+  void StartSession(WebKit::WebMIDIAccessorClient* client);
   void RemoveClient(WebKit::WebMIDIAccessorClient* client);
 
   // A client will only be able to call this method if it has a suitable
@@ -62,8 +62,7 @@
 
   // Called when the browser process has approved (or denied) access to
   // MIDI hardware.
-  void OnAccessApproved(int client_id,
-                        int access,
+  void OnSessionStarted(int client_id,
                         bool success,
                         media::MIDIPortInfoList inputs,
                         media::MIDIPortInfoList outputs);
@@ -74,8 +73,7 @@
                       const std::vector<uint8>& data,
                       double timestamp);
 
-  void HandleAccessApproved(int client_id,
-                            int access,
+  void HandleSessionStarted(int client_id,
                             bool success,
                             media::MIDIPortInfoList inputs,
                             media::MIDIPortInfoList outputs);
@@ -84,7 +82,7 @@
                           const std::vector<uint8>& data,
                           double timestamp);
 
-  void RequestAccessOnIOThread(int client_id, int access);
+  void StartSessionOnIOThread(int client_id);
 
   void SendMIDIDataOnIOThread(int port,
                               const std::vector<uint8>& data,
diff --git a/content/renderer/media/pepper_platform_video_decoder_impl.h b/content/renderer/media/pepper_platform_video_decoder_impl.h
index d3fc9a9..b63fdcd 100644
--- a/content/renderer/media/pepper_platform_video_decoder_impl.h
+++ b/content/renderer/media/pepper_platform_video_decoder_impl.h
@@ -16,7 +16,7 @@
 namespace content {
 
 class PlatformVideoDecoderImpl
-    : public webkit::ppapi::PluginDelegate::PlatformVideoDecoder,
+    : public PluginDelegate::PlatformVideoDecoder,
       public media::VideoDecodeAccelerator::Client {
  public:
   PlatformVideoDecoderImpl(
diff --git a/content/renderer/media/renderer_webmidiaccessor_impl.cc b/content/renderer/media/renderer_webmidiaccessor_impl.cc
index 0a8b68f..de9db93 100644
--- a/content/renderer/media/renderer_webmidiaccessor_impl.cc
+++ b/content/renderer/media/renderer_webmidiaccessor_impl.cc
@@ -20,8 +20,8 @@
   midi_message_filter()->RemoveClient(client_);
 }
 
-void RendererWebMIDIAccessorImpl::requestAccess(bool access) {
-  midi_message_filter()->RequestAccess(client_, access ? 1 : 0);
+void RendererWebMIDIAccessorImpl::startSession() {
+  midi_message_filter()->StartSession(client_);
 }
 
 void RendererWebMIDIAccessorImpl::sendMIDIData(
diff --git a/content/renderer/media/renderer_webmidiaccessor_impl.h b/content/renderer/media/renderer_webmidiaccessor_impl.h
index a6a07c9..7032943 100644
--- a/content/renderer/media/renderer_webmidiaccessor_impl.h
+++ b/content/renderer/media/renderer_webmidiaccessor_impl.h
@@ -22,11 +22,11 @@
   virtual ~RendererWebMIDIAccessorImpl();
 
   // WebKit::WebMIDIAccessor implementation.
-  virtual void requestAccess(bool access) OVERRIDE;
+  virtual void startSession();
   virtual void sendMIDIData(unsigned port_index,
                             const unsigned char* data,
                             size_t length,
-                            double timestamp) OVERRIDE;
+                            double timestamp);
 
  private:
   WebKit::WebMIDIAccessorClient* client_;
diff --git a/content/renderer/media/video_destination_handler.cc b/content/renderer/media/video_destination_handler.cc
index 81ab07f..7438c49 100644
--- a/content/renderer/media/video_destination_handler.cc
+++ b/content/renderer/media/video_destination_handler.cc
@@ -18,7 +18,6 @@
 
 using cricket::CaptureState;
 using cricket::VideoFormat;
-using webkit::ppapi::PPB_ImageData_Impl;
 using webrtc::VideoTrackInterface;
 using webrtc::VideoTrackVector;
 
@@ -100,7 +99,7 @@
     LOG(ERROR) << "PpFrameWriter::PutFrame - Called with NULL image_data.";
     return;
   }
-  webkit::ppapi::ImageDataAutoMapper mapper(image_data);
+  ImageDataAutoMapper mapper(image_data);
   if (!mapper.is_valid()) {
     LOG(ERROR) << "PpFrameWriter::PutFrame - "
                << "The image could not be mapped and is unusable.";
@@ -148,7 +147,7 @@
 
   virtual ~PpFrameWriterProxy() {}
 
-  virtual void PutFrame(webkit::ppapi::PPB_ImageData_Impl* image_data,
+  virtual void PutFrame(PPB_ImageData_Impl* image_data,
                         int64 time_stamp_ns) OVERRIDE {
     writer_->PutFrame(image_data, time_stamp_ns);
   }
diff --git a/content/renderer/media/video_destination_handler.h b/content/renderer/media/video_destination_handler.h
index 68b1a6c..087d3ac 100644
--- a/content/renderer/media/video_destination_handler.h
+++ b/content/renderer/media/video_destination_handler.h
@@ -13,16 +13,11 @@
 #include "content/common/content_export.h"
 #include "third_party/libjingle/source/talk/media/base/videocapturer.h"
 
-namespace webkit {
-namespace ppapi {
-class PPB_ImageData_Impl;
-}
-}
-
 namespace content {
 
 class MediaStreamDependencyFactory;
 class MediaStreamRegistryInterface;
+class PPB_ImageData_Impl;
 
 // Interface used by the effects pepper plugin to output the processed frame
 // to the video track.
@@ -30,7 +25,7 @@
  public:
   // The ownership of the |image_data| deosn't transfer. So the implementation
   // of this interface should make a copy of the |image_data| before return.
-  virtual void PutFrame(webkit::ppapi::PPB_ImageData_Impl* image_data,
+  virtual void PutFrame(PPB_ImageData_Impl* image_data,
                         int64 time_stamp_ns) = 0;
   virtual ~FrameWriterInterface() {}
 };
@@ -59,7 +54,7 @@
 
   // FrameWriterInterface implementation.
   // This method will be called by the Pepper host from render thread.
-  virtual void PutFrame(webkit::ppapi::PPB_ImageData_Impl* image_data,
+  virtual void PutFrame(PPB_ImageData_Impl* image_data,
                         int64 time_stamp_ns) OVERRIDE;
 
  private:
diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
index dac94c6..7cece16 100644
--- a/content/renderer/media/webmediaplayer_impl.cc
+++ b/content/renderer/media/webmediaplayer_impl.cc
@@ -28,7 +28,7 @@
 #include "content/renderer/media/webmediaplayer_params.h"
 #include "content/renderer/media/webmediaplayer_util.h"
 #include "content/renderer/media/webmediasourceclient_impl.h"
-#include "content/renderer/pepper/ppapi_webplugin_impl.h"
+#include "content/renderer/pepper/pepper_webplugin_impl.h"
 #include "gpu/GLES2/gl2extchromium.h"
 #include "media/audio/null_audio_sink.h"
 #include "media/base/bind_to_loop.h"
diff --git a/content/renderer/pepper/audio_helper.cc b/content/renderer/pepper/audio_helper.cc
index 7eb0d87..8197d7a 100644
--- a/content/renderer/pepper/audio_helper.cc
+++ b/content/renderer/pepper/audio_helper.cc
@@ -10,8 +10,7 @@
 
 using ppapi::TrackedCallback;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // AudioHelper -----------------------------------------------------------------
 
@@ -84,5 +83,4 @@
   create_callback_ = create_callback;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
\ No newline at end of file
diff --git a/content/renderer/pepper/audio_helper.h b/content/renderer/pepper/audio_helper.h
index 854ac9a..7ffeb24 100644
--- a/content/renderer/pepper/audio_helper.h
+++ b/content/renderer/pepper/audio_helper.h
@@ -15,8 +15,7 @@
 #include "ppapi/shared_impl/scoped_pp_resource.h"
 #include "ppapi/shared_impl/tracked_callback.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class AudioHelper : public PluginDelegate::PlatformAudioOutputClient {
  public:
@@ -57,7 +56,6 @@
   DISALLOW_COPY_AND_ASSIGN(AudioHelper);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_AUDIO_HELPER_H_
diff --git a/content/renderer/pepper/common.h b/content/renderer/pepper/common.h
index ed51b62..9b440bf 100644
--- a/content/renderer/pepper/common.h
+++ b/content/renderer/pepper/common.h
@@ -8,8 +8,7 @@
 #include "ppapi/c/pp_bool.h"
 #include "ppapi/c/pp_var.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 inline PP_Bool BoolToPPBool(bool value) {
   return value ? PP_TRUE : PP_FALSE;
@@ -19,8 +18,7 @@
   return (PP_TRUE == value);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_COMMON_H_
 
diff --git a/content/renderer/pepper/content_decryptor_delegate.cc b/content/renderer/pepper/content_decryptor_delegate.cc
index 79d9cff..22c3aff 100644
--- a/content/renderer/pepper/content_decryptor_delegate.cc
+++ b/content/renderer/pepper/content_decryptor_delegate.cc
@@ -33,8 +33,7 @@
 using ppapi::thunk::EnterResourceNoLock;
 using ppapi::thunk::PPB_Buffer_API;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -1047,5 +1046,4 @@
   return true;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/content_decryptor_delegate.h b/content/renderer/pepper/content_decryptor_delegate.h
index 8f7ad31..ca54d98 100644
--- a/content/renderer/pepper/content_decryptor_delegate.h
+++ b/content/renderer/pepper/content_decryptor_delegate.h
@@ -25,8 +25,7 @@
 class VideoDecoderConfig;
 }
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_Buffer_Impl;
 
@@ -189,7 +188,6 @@
   DISALLOW_COPY_AND_ASSIGN(ContentDecryptorDelegate);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_
diff --git a/content/renderer/pepper/content_renderer_pepper_host_factory.cc b/content/renderer/pepper/content_renderer_pepper_host_factory.cc
index d7872c9..983e185 100644
--- a/content/renderer/pepper/content_renderer_pepper_host_factory.cc
+++ b/content/renderer/pepper/content_renderer_pepper_host_factory.cc
@@ -33,9 +33,10 @@
 using ppapi::proxy::SerializedTrueTypeFontDesc;
 using ppapi::UnpackMessage;
 
+namespace content {
 namespace {
 
-bool CanUseMediaStreamAPI(const content::RendererPpapiHost* host,
+bool CanUseMediaStreamAPI(const RendererPpapiHost* host,
                           PP_Instance instance) {
   WebKit::WebPluginContainer* container =
       host->GetContainerForInstance(instance);
@@ -43,15 +44,13 @@
     return false;
 
   GURL document_url = container->element().document().url();
-  content::ContentRendererClient* content_renderer_client =
-      content::GetContentClient()->renderer();
+  ContentRendererClient* content_renderer_client =
+      GetContentClient()->renderer();
   return content_renderer_client->AllowPepperMediaStreamAPI(document_url);
 }
 
 }
 
-namespace content {
-
 ContentRendererPepperHostFactory::ContentRendererPepperHostFactory(
     RendererPpapiHostImpl* host)
     : host_(host) {
diff --git a/content/renderer/pepper/event_conversion.cc b/content/renderer/pepper/event_conversion.cc
index f912ae5..8020d5a 100644
--- a/content/renderer/pepper/event_conversion.cc
+++ b/content/renderer/pepper/event_conversion.cc
@@ -35,8 +35,7 @@
 using WebKit::WebTouchPoint;
 using WebKit::WebUChar;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -731,5 +730,4 @@
   }
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/event_conversion.h b/content/renderer/pepper/event_conversion.h
index 0fa849c..05bdda8 100644
--- a/content/renderer/pepper/event_conversion.h
+++ b/content/renderer/pepper/event_conversion.h
@@ -22,8 +22,7 @@
 class WebInputEvent;
 }
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // Converts the given WebKit event to one or possibly multiple PP_InputEvents.
 // The generated events will be filled into the given vector. On failure, no
@@ -48,7 +47,6 @@
 // type should not be "Undefined" since there's no corresponding PPAPI class.
 PP_InputEvent_Class ClassifyInputEvent(WebKit::WebInputEvent::Type type);
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_EVENT_CONVERSION_H_
diff --git a/content/renderer/pepper/fullscreen_container.h b/content/renderer/pepper/fullscreen_container.h
index 805c187..e3c030f 100644
--- a/content/renderer/pepper/fullscreen_container.h
+++ b/content/renderer/pepper/fullscreen_container.h
@@ -13,8 +13,7 @@
 struct WebRect;
 }  // namespace WebKit
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // This class is like a lightweight WebPluginContainer for fullscreen PPAPI
 // plugins, that only handles painting.
@@ -42,7 +41,6 @@
   virtual ~FullscreenContainer() {}
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_FULLSCREEN_CONTAINER_IMPL_H_
diff --git a/content/renderer/pepper/gfx_conversion.h b/content/renderer/pepper/gfx_conversion.h
index 77e7001..3b504ba 100644
--- a/content/renderer/pepper/gfx_conversion.h
+++ b/content/renderer/pepper/gfx_conversion.h
@@ -15,8 +15,7 @@
 // Conversions for graphics types between our gfx library and PPAPI.
 // The style of naming is to match the PP_Bool conversions.
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 inline gfx::Point PP_ToGfxPoint(const PP_Point& p) {
   return gfx::Point(p.x, p.y);
@@ -42,7 +41,6 @@
   return PP_MakeSize(s.width(), s.height());
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_GFX_CONVERSION_H_
diff --git a/content/renderer/pepper/host_array_buffer_var.cc b/content/renderer/pepper/host_array_buffer_var.cc
index 565db42..e8d349e 100644
--- a/content/renderer/pepper/host_array_buffer_var.cc
+++ b/content/renderer/pepper/host_array_buffer_var.cc
@@ -9,17 +9,16 @@
 
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "content/renderer/pepper/host_globals.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "ppapi/c/pp_instance.h"
 
 using ppapi::ArrayBufferVar;
 using WebKit::WebArrayBuffer;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 HostArrayBufferVar::HostArrayBufferVar(uint32 size_in_bytes)
     : buffer_(WebArrayBuffer::create(size_in_bytes, 1 /* element_size */)),
@@ -63,8 +62,7 @@
     PP_Instance instance,
     int* host_shm_handle_id,
     base::SharedMemoryHandle* plugin_shm_handle) {
-  webkit::ppapi::PluginInstanceImpl* i =
-      webkit::ppapi::HostGlobals::Get()->GetInstance(instance);
+  PepperPluginInstanceImpl* i = HostGlobals::Get()->GetInstance(instance);
   scoped_ptr<base::SharedMemory> shm(i->delegate()->CreateAnonymousSharedMemory(
       ByteLength()));
   if (!shm)
@@ -99,5 +97,4 @@
   return true;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/host_array_buffer_var.h b/content/renderer/pepper/host_array_buffer_var.h
index b1bd16a..9388c4e 100644
--- a/content/renderer/pepper/host_array_buffer_var.h
+++ b/content/renderer/pepper/host_array_buffer_var.h
@@ -11,8 +11,7 @@
 #include "ppapi/shared_impl/var.h"
 #include "third_party/WebKit/public/platform/WebArrayBuffer.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // Represents a host-side ArrayBufferVar.
 class HostArrayBufferVar : public ::ppapi::ArrayBufferVar {
@@ -43,7 +42,6 @@
   DISALLOW_COPY_AND_ASSIGN(HostArrayBufferVar);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // PPAPI_CONTENT_RENDERER_PEPPER_HOST_ARRAY_BUFFER_VAR_H_
diff --git a/content/renderer/pepper/host_globals.cc b/content/renderer/pepper/host_globals.cc
index ccc9f84..78790e1 100644
--- a/content/renderer/pepper/host_globals.cc
+++ b/content/renderer/pepper/host_globals.cc
@@ -11,8 +11,8 @@
 #include "base/rand_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task_runner.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "ppapi/shared_impl/api_id.h"
 #include "ppapi/shared_impl/id_assignment.h"
 #include "third_party/WebKit/public/platform/WebString.h"
@@ -30,8 +30,7 @@
 using WebKit::WebConsoleMessage;
 using WebKit::WebString;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -119,14 +118,14 @@
 
 ::ppapi::thunk::ResourceCreationAPI* HostGlobals::GetResourceCreationAPI(
     PP_Instance pp_instance) {
-  PluginInstanceImpl* instance = GetInstance(pp_instance);
+  PepperPluginInstanceImpl* instance = GetInstance(pp_instance);
   if (!instance)
     return NULL;
   return &instance->resource_creation();
 }
 
 PP_Module HostGlobals::GetModuleForInstance(PP_Instance instance) {
-  PluginInstanceImpl* inst = GetInstance(instance);
+  PepperPluginInstanceImpl* inst = GetInstance(instance);
   if (!inst)
     return 0;
   return inst->module()->pp_module();
@@ -150,7 +149,7 @@
                                 PP_LogLevel level,
                                 const std::string& source,
                                 const std::string& value) {
-  PluginInstanceImpl* instance_object =
+  PepperPluginInstanceImpl* instance_object =
       HostGlobals::Get()->GetInstance(instance);
   if (instance_object) {
     instance_object->container()->element().document().frame()->
@@ -186,7 +185,8 @@
 }
 
 base::TaskRunner* HostGlobals::GetFileTaskRunner(PP_Instance instance) {
-  scoped_refptr<PluginInstanceImpl> plugin_instance = GetInstance(instance);
+  scoped_refptr<PepperPluginInstanceImpl> plugin_instance =
+      GetInstance(instance);
   DCHECK(plugin_instance.get());
   scoped_refptr<base::MessageLoopProxy> message_loop =
       plugin_instance->delegate()->GetFileThreadMessageLoopProxy();
@@ -236,7 +236,7 @@
   return found->second;
 }
 
-PP_Instance HostGlobals::AddInstance(PluginInstanceImpl* instance) {
+PP_Instance HostGlobals::AddInstance(PepperPluginInstanceImpl* instance) {
   DCHECK(instance_map_.find(instance->pp_instance()) == instance_map_.end());
 
   // Use a random number for the instance ID. This helps prevent some
@@ -268,7 +268,7 @@
   host_var_tracker_.DidDeleteInstance(instance);
 }
 
-PluginInstanceImpl* HostGlobals::GetInstance(PP_Instance instance) {
+PepperPluginInstanceImpl* HostGlobals::GetInstance(PP_Instance instance) {
   DLOG_IF(ERROR, !CheckIdType(instance, ::ppapi::PP_ID_TYPE_INSTANCE))
       << instance << " is not a PP_Instance.";
   InstanceMap::iterator found = instance_map_.find(instance);
@@ -281,5 +281,4 @@
   return true;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/host_globals.h b/content/renderer/pepper/host_globals.h
index 1689259..f48eb05 100644
--- a/content/renderer/pepper/host_globals.h
+++ b/content/renderer/pepper/host_globals.h
@@ -12,10 +12,9 @@
 #include "ppapi/shared_impl/resource_tracker.h"
 #include "ppapi/shared_impl/var_tracker.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
-class PluginInstanceImpl;
+class PepperPluginInstanceImpl;
 class PluginModule;
 
 class HostGlobals : public ::ppapi::PpapiGlobals {
@@ -78,7 +77,7 @@
 
   // Adds a new plugin instance to the list of tracked instances, and returns a
   // new instance handle to identify it.
-  PP_Instance AddInstance(PluginInstanceImpl* instance);
+  PP_Instance AddInstance(PepperPluginInstanceImpl* instance);
 
   // Called when a plugin instance was deleted and should no longer be tracked.
   // The given handle should be one generated by AddInstance.
@@ -89,7 +88,7 @@
   // Returns a pointer to the plugin instance object associated with the given
   // instance handle. The return value will be NULL if the handle is invalid or
   // if the instance has crashed.
-  PluginInstanceImpl* GetInstance(PP_Instance instance);
+  PepperPluginInstanceImpl* GetInstance(PP_Instance instance);
 
  private:
   // PpapiGlobals overrides.
@@ -101,7 +100,7 @@
   HostVarTracker host_var_tracker_;
 
   // Tracks all live instances and their associated object.
-  typedef std::map<PP_Instance, PluginInstanceImpl*> InstanceMap;
+  typedef std::map<PP_Instance, PepperPluginInstanceImpl*> InstanceMap;
   InstanceMap instance_map_;
 
   // Tracks all live modules. The pointers are non-owning, the PluginModule
@@ -112,7 +111,6 @@
   DISALLOW_COPY_AND_ASSIGN(HostGlobals);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif   // CONTENT_RENDERER_PEPPER_HOST_GLOBALS_H_
diff --git a/content/renderer/pepper/host_var_tracker.cc b/content/renderer/pepper/host_var_tracker.cc
index b61af73..9b9ebda 100644
--- a/content/renderer/pepper/host_var_tracker.cc
+++ b/content/renderer/pepper/host_var_tracker.cc
@@ -7,14 +7,13 @@
 #include "base/logging.h"
 #include "content/renderer/pepper/host_array_buffer_var.h"
 #include "content/renderer/pepper/npobject_var.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "ppapi/c/pp_var.h"
 
 using ppapi::ArrayBufferVar;
 using ppapi::NPObjectVar;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 HostVarTracker::HostVarTracker()
   : VarTracker(SINGLE_THREADED),
@@ -169,5 +168,4 @@
   return true;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/host_var_tracker.h b/content/renderer/pepper/host_var_tracker.h
index 9ff0dbd..290e858 100644
--- a/content/renderer/pepper/host_var_tracker.h
+++ b/content/renderer/pepper/host_var_tracker.h
@@ -27,8 +27,7 @@
 class Var;
 }
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // Adds NPObject var tracking to the standard PPAPI VarTracker for use in the
 // renderer.
@@ -104,7 +103,6 @@
   DISALLOW_COPY_AND_ASSIGN(HostVarTracker);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_HOST_VAR_TRACKER_H_
diff --git a/content/renderer/pepper/host_var_tracker_unittest.cc b/content/renderer/pepper/host_var_tracker_unittest.cc
index 037f059..a5a1c18 100644
--- a/content/renderer/pepper/host_var_tracker_unittest.cc
+++ b/content/renderer/pepper/host_var_tracker_unittest.cc
@@ -11,7 +11,7 @@
 #include "content/renderer/pepper/mock_resource.h"
 #include "content/renderer/pepper/npapi_glue.h"
 #include "content/renderer/pepper/npobject_var.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "ppapi/c/pp_var.h"
 #include "ppapi/c/ppp_instance.h"
 #include "third_party/npapi/bindings/npruntime.h"
@@ -19,8 +19,7 @@
 
 using ppapi::NPObjectVar;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -84,8 +83,9 @@
 
 TEST_F(HostVarTrackerTest, DeleteObjectVarWithInstance) {
   // Make a second instance (the test harness already creates & manages one).
-  scoped_refptr<PluginInstanceImpl> instance2(
-      PluginInstanceImpl::Create(delegate(), NULL, module(), NULL, GURL()));
+  scoped_refptr<PepperPluginInstanceImpl> instance2(
+      PepperPluginInstanceImpl::Create(
+          delegate(), NULL, module(), NULL, GURL()));
   PP_Instance pp_instance2 = instance2->pp_instance();
 
   // Make an object var.
@@ -134,5 +134,4 @@
   var_tracker->ReleaseVar(static_cast<int32_t>(pp_object3.value.as_id));
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/message_channel.cc b/content/renderer/pepper/message_channel.cc
index ea3bdf5..7cd7430 100644
--- a/content/renderer/pepper/message_channel.cc
+++ b/content/renderer/pepper/message_channel.cc
@@ -12,8 +12,8 @@
 #include "base/message_loop/message_loop.h"
 #include "content/renderer/pepper/host_array_buffer_var.h"
 #include "content/renderer/pepper/npapi_glue.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "content/renderer/pepper/v8_var_converter.h"
 #include "ppapi/shared_impl/ppapi_globals.h"
 #include "ppapi/shared_impl/var.h"
@@ -38,9 +38,7 @@
 using WebKit::WebPluginContainer;
 using WebKit::WebSerializedScriptValue;
 
-namespace webkit {
-
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -328,7 +326,7 @@
 
 MessageChannel::MessageChannelNPObject::~MessageChannelNPObject() {}
 
-MessageChannel::MessageChannel(PluginInstanceImpl* instance)
+MessageChannel::MessageChannel(PepperPluginInstanceImpl* instance)
     : instance_(instance),
       passthrough_object_(NULL),
       np_object_(NULL),
@@ -405,7 +403,7 @@
 
 void MessageChannel::StopQueueingJavaScriptMessages() {
   // We PostTask here instead of draining the message queue directly
-  // since we haven't finished initializing the WebPluginImpl yet, so
+  // since we haven't finished initializing the PepperWebPluginImpl yet, so
   // the plugin isn't available in the DOM.
   early_message_queue_state_ = DRAIN_PENDING;
   base::MessageLoop::current()->PostTask(
@@ -425,7 +423,7 @@
   // Take a reference on the PluginInstance. This is because JavaScript code
   // may delete the plugin, which would destroy the PluginInstance and its
   // corresponding MessageChannel.
-  scoped_refptr<PluginInstanceImpl> instance_ref(instance_);
+  scoped_refptr<PepperPluginInstanceImpl> instance_ref(instance_);
 
   if (early_message_queue_state_ == DRAIN_CANCELLED) {
     early_message_queue_state_ = QUEUE_MESSAGES;
@@ -516,5 +514,4 @@
   passthrough_object_ = passthrough;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/message_channel.h b/content/renderer/pepper/message_channel.h
index 322c4b4..b377b51 100644
--- a/content/renderer/pepper/message_channel.h
+++ b/content/renderer/pepper/message_channel.h
@@ -14,10 +14,9 @@
 
 struct PP_Var;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
-class PluginInstanceImpl;
+class PepperPluginInstanceImpl;
 
 // MessageChannel implements bidirectional postMessage functionality, allowing
 // calls from JavaScript to plugins and vice-versa. See
@@ -45,7 +44,7 @@
     base::WeakPtr<MessageChannel> message_channel;
   };
 
-  explicit MessageChannel(PluginInstanceImpl* instance);
+  explicit MessageChannel(PepperPluginInstanceImpl* instance);
   ~MessageChannel();
 
   // Post a message to the onmessage handler for this channel's instance
@@ -66,7 +65,7 @@
 
   NPObject* np_object() { return np_object_; }
 
-  PluginInstanceImpl* instance() {
+  PepperPluginInstanceImpl* instance() {
     return instance_;
   }
 
@@ -77,7 +76,7 @@
   void StopQueueingJavaScriptMessages();
 
  private:
-  PluginInstanceImpl* instance_;
+  PepperPluginInstanceImpl* instance_;
 
   // We pass all non-postMessage calls through to the passthrough_object_.
   // This way, a plugin can use PPB_Class or PPP_Class_Deprecated and also
@@ -104,7 +103,7 @@
   base::WeakPtrFactory<MessageChannel> weak_ptr_factory_;
 
   // TODO(teravest): Remove all the tricky DRAIN_CANCELLED logic once
-  // webkit::ppapi::PluginInstance::ResetAsProxied() is gone.
+  // PluginInstance::ResetAsProxied() is gone.
   std::deque<WebKit::WebSerializedScriptValue> early_message_queue_;
   enum EarlyMessageQueueState {
     QUEUE_MESSAGES,       // Queue JS messages.
@@ -117,7 +116,6 @@
   DISALLOW_COPY_AND_ASSIGN(MessageChannel);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_MESSAGE_CHANNEL_H_
diff --git a/content/renderer/pepper/mock_platform_image_2d.cc b/content/renderer/pepper/mock_platform_image_2d.cc
index 2aba190..3a170be 100644
--- a/content/renderer/pepper/mock_platform_image_2d.cc
+++ b/content/renderer/pepper/mock_platform_image_2d.cc
@@ -6,8 +6,7 @@
 
 #include "skia/ext/platform_canvas.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 MockPlatformImage2D::MockPlatformImage2D(int width, int height)
   : width_(width),
@@ -30,5 +29,4 @@
   return NULL;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/mock_platform_image_2d.h b/content/renderer/pepper/mock_platform_image_2d.h
index eedd4af..19b8202 100644
--- a/content/renderer/pepper/mock_platform_image_2d.h
+++ b/content/renderer/pepper/mock_platform_image_2d.h
@@ -8,8 +8,7 @@
 #include "content/renderer/pepper/plugin_delegate.h"
 #include "skia/ext/platform_canvas.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class MockPlatformImage2D : public PluginDelegate::PlatformImage2D {
  public:
@@ -26,7 +25,6 @@
   int height_;
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_MOCK_PLATFORM_IMAGE_2D_H_
diff --git a/content/renderer/pepper/mock_plugin_delegate.cc b/content/renderer/pepper/mock_plugin_delegate.cc
index aae195e..69bb2d5 100644
--- a/content/renderer/pepper/mock_plugin_delegate.cc
+++ b/content/renderer/pepper/mock_plugin_delegate.cc
@@ -7,16 +7,15 @@
 #include "base/logging.h"
 #include "base/message_loop/message_loop_proxy.h"
 #include "content/renderer/pepper/mock_platform_image_2d.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_delegate.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "ppapi/c/pp_errors.h"
 #include "ppapi/shared_impl/ppapi_permissions.h"
 #include "ppapi/shared_impl/ppapi_preferences.h"
 #include "third_party/WebKit/public/platform/WebGamepads.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 MockPluginDelegate::MockPluginDelegate() {
 }
@@ -24,23 +23,24 @@
 MockPluginDelegate::~MockPluginDelegate() {
 }
 
-void MockPluginDelegate::PluginFocusChanged(PluginInstanceImpl* instance,
+void MockPluginDelegate::PluginFocusChanged(PepperPluginInstanceImpl* instance,
                                             bool focused) {
 }
 
 void MockPluginDelegate::PluginTextInputTypeChanged(
-    PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
 }
 
 void MockPluginDelegate::PluginCaretPositionChanged(
-    PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
 }
 
 void MockPluginDelegate::PluginRequestedCancelComposition(
-    PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
 }
 
-void MockPluginDelegate::PluginSelectionChanged(PluginInstanceImpl* instance) {
+void MockPluginDelegate::PluginSelectionChanged(
+    PepperPluginInstanceImpl* instance) {
 }
 
 void MockPluginDelegate::SimulateImeSetComposition(
@@ -54,17 +54,18 @@
     const base::string16& text) {
 }
 
-void MockPluginDelegate::PluginCrashed(PluginInstanceImpl* instance) {
+void MockPluginDelegate::PluginCrashed(PepperPluginInstanceImpl* instance) {
 }
 
-void MockPluginDelegate::InstanceCreated(PluginInstanceImpl* instance) {
+void MockPluginDelegate::InstanceCreated(PepperPluginInstanceImpl* instance) {
 }
 
-void MockPluginDelegate::InstanceDeleted(PluginInstanceImpl* instance) {
+void MockPluginDelegate::InstanceDeleted(PepperPluginInstanceImpl* instance) {
 }
 
 scoped_ptr< ::ppapi::thunk::ResourceCreationAPI>
-MockPluginDelegate::CreateResourceCreationAPI(PluginInstanceImpl* instance) {
+    MockPluginDelegate::CreateResourceCreationAPI(
+        PepperPluginInstanceImpl* instance) {
   return scoped_ptr< ::ppapi::thunk::ResourceCreationAPI>();
 }
 
@@ -84,7 +85,7 @@
 }
 
 PluginDelegate::PlatformGraphics2D* MockPluginDelegate::GetGraphics2D(
-    PluginInstanceImpl* instance,
+    PepperPluginInstanceImpl* instance,
     PP_Resource graphics_2d) {
   return NULL;
 }
@@ -223,17 +224,6 @@
     const StatusCallback& error_callback) {
 }
 
-void MockPluginDelegate::QueryAvailableSpace(
-    const GURL& origin, quota::StorageType type,
-    const AvailableSpaceCallback& callback) {
-}
-
-void MockPluginDelegate::WillUpdateFile(const GURL& file_path) {
-}
-
-void MockPluginDelegate::DidUpdateFile(const GURL& file_path, int64_t delta) {
-}
-
 void MockPluginDelegate::SyncGetFileSystemPlatformPath(
     const GURL& url,
     base::FilePath* platform_path) {
@@ -321,7 +311,7 @@
 }
 
 FullscreenContainer* MockPluginDelegate::CreateFullscreenContainer(
-    PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   return NULL;
 }
 
@@ -346,22 +336,23 @@
   return ::ppapi::Preferences();
 }
 
-bool MockPluginDelegate::LockMouse(PluginInstanceImpl* instance) {
+bool MockPluginDelegate::LockMouse(PepperPluginInstanceImpl* instance) {
   return false;
 }
 
-void MockPluginDelegate::UnlockMouse(PluginInstanceImpl* instance) {
+void MockPluginDelegate::UnlockMouse(PepperPluginInstanceImpl* instance) {
 }
 
-bool MockPluginDelegate::IsMouseLocked(PluginInstanceImpl* instance) {
+bool MockPluginDelegate::IsMouseLocked(PepperPluginInstanceImpl* instance) {
   return false;
 }
 
-void MockPluginDelegate::DidChangeCursor(PluginInstanceImpl* instance,
+void MockPluginDelegate::DidChangeCursor(PepperPluginInstanceImpl* instance,
                                          const WebKit::WebCursorInfo& cursor) {
 }
 
-void MockPluginDelegate::DidReceiveMouseEvent(PluginInstanceImpl* instance) {
+void MockPluginDelegate::DidReceiveMouseEvent(
+    PepperPluginInstanceImpl* instance) {
 }
 
 void MockPluginDelegate::SampleGamepads(WebKit::WebGamepads* data) {
@@ -397,11 +388,11 @@
 }
 
 void MockPluginDelegate::HandleDocumentLoad(
-    PluginInstanceImpl* instance,
+    PepperPluginInstanceImpl* instance,
     const WebKit::WebURLResponse& response) {
 }
 
-content::RendererPpapiHost* MockPluginDelegate::CreateExternalPluginModule(
+RendererPpapiHost* MockPluginDelegate::CreateExternalPluginModule(
     scoped_refptr<PluginModule> module,
     const base::FilePath& path,
     ::ppapi::PpapiPermissions permissions,
@@ -411,5 +402,4 @@
   return NULL;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/mock_plugin_delegate.h b/content/renderer/pepper/mock_plugin_delegate.h
index 8631dd7..248572a 100644
--- a/content/renderer/pepper/mock_plugin_delegate.h
+++ b/content/renderer/pepper/mock_plugin_delegate.h
@@ -10,23 +10,23 @@
 struct PP_NetAddress_Private;
 namespace ppapi { class PPB_X509Certificate_Fields; }
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class MockPluginDelegate : public PluginDelegate {
  public:
   MockPluginDelegate();
   virtual ~MockPluginDelegate();
 
-  virtual void PluginFocusChanged(PluginInstanceImpl* instance,
+  virtual void PluginFocusChanged(PepperPluginInstanceImpl* instance,
                                   bool focused) OVERRIDE;
   virtual void PluginTextInputTypeChanged(
-      PluginInstanceImpl* instance) OVERRIDE;
+      PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual void PluginCaretPositionChanged(
-      PluginInstanceImpl* instance) OVERRIDE;
+      PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual void PluginRequestedCancelComposition(
-      PluginInstanceImpl* instance) OVERRIDE;
-  virtual void PluginSelectionChanged(PluginInstanceImpl* instance) OVERRIDE;
+      PepperPluginInstanceImpl* instance) OVERRIDE;
+  virtual void PluginSelectionChanged(
+      PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual void SimulateImeSetComposition(
       const base::string16& text,
       const std::vector<WebKit::WebCompositionUnderline>& underlines,
@@ -34,16 +34,16 @@
       int selection_end) OVERRIDE;
   virtual void SimulateImeConfirmComposition(
       const base::string16& text) OVERRIDE;
-  virtual void PluginCrashed(PluginInstanceImpl* instance) OVERRIDE;
-  virtual void InstanceCreated(PluginInstanceImpl* instance) OVERRIDE;
-  virtual void InstanceDeleted(PluginInstanceImpl* instance) OVERRIDE;
+  virtual void PluginCrashed(PepperPluginInstanceImpl* instance) OVERRIDE;
+  virtual void InstanceCreated(PepperPluginInstanceImpl* instance) OVERRIDE;
+  virtual void InstanceDeleted(PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual scoped_ptr< ::ppapi::thunk::ResourceCreationAPI>
-      CreateResourceCreationAPI(PluginInstanceImpl* instance) OVERRIDE;
+      CreateResourceCreationAPI(PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual SkBitmap* GetSadPluginBitmap() OVERRIDE;
   virtual WebKit::WebPlugin* CreatePluginReplacement(
       const base::FilePath& file_path) OVERRIDE;
   virtual PlatformImage2D* CreateImage2D(int width, int height) OVERRIDE;
-  virtual PlatformGraphics2D* GetGraphics2D(PluginInstanceImpl* instance,
+  virtual PlatformGraphics2D* GetGraphics2D(PepperPluginInstanceImpl* instance,
                                             PP_Resource graphics_2d) OVERRIDE;
   virtual PlatformContext3D* CreateContext3D() OVERRIDE;
   virtual PlatformVideoDecoder* CreateVideoDecoder(
@@ -111,12 +111,6 @@
       const GURL& directory_path,
       const ReadDirectoryCallback& success_callback,
       const StatusCallback& error_callback) OVERRIDE;
-  virtual void QueryAvailableSpace(
-      const GURL& origin,
-      quota::StorageType type,
-      const AvailableSpaceCallback& callback) OVERRIDE;
-  virtual void WillUpdateFile(const GURL& file_path) OVERRIDE;
-  virtual void DidUpdateFile(const GURL& file_path, int64_t delta) OVERRIDE;
   virtual void SyncGetFileSystemPlatformPath(
       const GURL& url,
       base::FilePath* platform_path) OVERRIDE;
@@ -162,19 +156,20 @@
       const std::vector<char>& der,
       ::ppapi::PPB_X509Certificate_Fields* fields) OVERRIDE;
   virtual FullscreenContainer* CreateFullscreenContainer(
-      PluginInstanceImpl* instance) OVERRIDE;
+      PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual gfx::Size GetScreenSize() OVERRIDE;
   virtual std::string GetDefaultEncoding() OVERRIDE;
   virtual void ZoomLimitsChanged(double minimum_factor,
                                  double maximum_factor) OVERRIDE;
   virtual base::SharedMemory* CreateAnonymousSharedMemory(size_t size) OVERRIDE;
   virtual ::ppapi::Preferences GetPreferences() OVERRIDE;
-  virtual bool LockMouse(PluginInstanceImpl* instance) OVERRIDE;
-  virtual void UnlockMouse(PluginInstanceImpl* instance) OVERRIDE;
-  virtual bool IsMouseLocked(PluginInstanceImpl* instance) OVERRIDE;
-  virtual void DidChangeCursor(PluginInstanceImpl* instance,
+  virtual bool LockMouse(PepperPluginInstanceImpl* instance) OVERRIDE;
+  virtual void UnlockMouse(PepperPluginInstanceImpl* instance) OVERRIDE;
+  virtual bool IsMouseLocked(PepperPluginInstanceImpl* instance) OVERRIDE;
+  virtual void DidChangeCursor(PepperPluginInstanceImpl* instance,
                                const WebKit::WebCursorInfo& cursor) OVERRIDE;
-  virtual void DidReceiveMouseEvent(PluginInstanceImpl* instance) OVERRIDE;
+  virtual void DidReceiveMouseEvent(
+      PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual void SampleGamepads(WebKit::WebGamepads* data) OVERRIDE;
   virtual bool IsInFullscreenMode() OVERRIDE;
   virtual bool IsPageVisible() const OVERRIDE;
@@ -188,9 +183,9 @@
       bool should_close_source) const OVERRIDE;
   virtual bool IsRunningInProcess(PP_Instance instance) const OVERRIDE;
   virtual void HandleDocumentLoad(
-      PluginInstanceImpl* instance,
+      PepperPluginInstanceImpl* instance,
       const WebKit::WebURLResponse& response) OVERRIDE;
-  virtual content::RendererPpapiHost* CreateExternalPluginModule(
+  virtual RendererPpapiHost* CreateExternalPluginModule(
       scoped_refptr<PluginModule> module,
       const base::FilePath& path,
       ::ppapi::PpapiPermissions permissions,
@@ -199,7 +194,6 @@
       int plugin_child_id) OVERRIDE;
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_MOCK_PLUGIN_DELEGATE_H_
diff --git a/content/renderer/pepper/mock_renderer_ppapi_host.cc b/content/renderer/pepper/mock_renderer_ppapi_host.cc
index 5a2da54..e1de551 100644
--- a/content/renderer/pepper/mock_renderer_ppapi_host.cc
+++ b/content/renderer/pepper/mock_renderer_ppapi_host.cc
@@ -28,7 +28,7 @@
   return instance == pp_instance_;
 }
 
-webkit::ppapi::PluginInstance* MockRendererPpapiHost::GetPluginInstance(
+PepperPluginInstance* MockRendererPpapiHost::GetPluginInstance(
     PP_Instance instance) const {
   NOTIMPLEMENTED();
   return NULL;
diff --git a/content/renderer/pepper/mock_renderer_ppapi_host.h b/content/renderer/pepper/mock_renderer_ppapi_host.h
index 3194d3f..7a18ad2 100644
--- a/content/renderer/pepper/mock_renderer_ppapi_host.h
+++ b/content/renderer/pepper/mock_renderer_ppapi_host.h
@@ -11,14 +11,8 @@
 #include "ppapi/host/ppapi_host.h"
 #include "ppapi/proxy/resource_message_test_sink.h"
 
-namespace webkit {
-namespace ppapi {
-class PluginInstance;
-class PluginModule;
-}
-}
-
 namespace content {
+class PluginModule;
 
 // A mock RendererPpapiHost for testing resource hosts. Messages sent by
 // resources through this will get added to the test sink.
@@ -39,7 +33,7 @@
   // RendererPpapiHost.
   virtual ppapi::host::PpapiHost* GetPpapiHost() OVERRIDE;
   virtual bool IsValidInstance(PP_Instance instance) const OVERRIDE;
-  virtual webkit::ppapi::PluginInstance* GetPluginInstance(
+  virtual PepperPluginInstance* GetPluginInstance(
       PP_Instance instance) const OVERRIDE;
   virtual RenderView* GetRenderViewForInstance(
       PP_Instance instance) const OVERRIDE;
diff --git a/content/renderer/pepper/mock_resource.h b/content/renderer/pepper/mock_resource.h
index 60531f0..fc6d0a8 100644
--- a/content/renderer/pepper/mock_resource.h
+++ b/content/renderer/pepper/mock_resource.h
@@ -7,8 +7,7 @@
 
 #include "ppapi/shared_impl/resource.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // Tests can derive from this to implement special test-specific resources.
 // It's assumed that a test will only need one mock resource, so it can
@@ -22,7 +21,6 @@
   virtual ~MockResource() {}
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_MOCK_RESOURCE_H_
diff --git a/content/renderer/pepper/npapi_glue.cc b/content/renderer/pepper/npapi_glue.cc
index f8b0c52..96e0bb0 100644
--- a/content/renderer/pepper/npapi_glue.cc
+++ b/content/renderer/pepper/npapi_glue.cc
@@ -11,9 +11,9 @@
 #include "content/renderer/pepper/host_globals.h"
 #include "content/renderer/pepper/host_var_tracker.h"
 #include "content/renderer/pepper/npobject_var.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
 #include "content/renderer/pepper/plugin_object.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "ppapi/c/pp_var.h"
 #include "third_party/npapi/bindings/npapi.h"
 #include "third_party/npapi/bindings/npruntime.h"
@@ -32,14 +32,13 @@
 using WebKit::WebBindings;
 using WebKit::WebPluginContainer;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
 const char kInvalidPluginValue[] = "Error: Plugin returned invalid value.";
 
-PP_Var NPObjectToPPVarImpl(PluginInstanceImpl* instance,
+PP_Var NPObjectToPPVarImpl(PepperPluginInstanceImpl* instance,
                            NPObject* object,
                            v8::Local<v8::Context> context) {
   DCHECK(object);
@@ -122,7 +121,7 @@
   return true;
 }
 
-PP_Var NPVariantToPPVar(PluginInstanceImpl* instance,
+PP_Var NPVariantToPPVar(PepperPluginInstanceImpl* instance,
                         const NPVariant* variant) {
   switch (variant->type) {
     case NPVariantType_Void:
@@ -172,7 +171,7 @@
   return PP_MakeInt32(int_value);
 }
 
-PP_Var NPObjectToPPVar(PluginInstanceImpl* instance, NPObject* object) {
+PP_Var NPObjectToPPVar(PepperPluginInstanceImpl* instance, NPObject* object) {
   WebPluginContainer* container = instance->container();
   // It's possible that container() is NULL if the plugin has been removed from
   // the DOM (but the PluginInstance is not destroyed yet).
@@ -184,7 +183,8 @@
   return NPObjectToPPVarImpl(instance, object, context);
 }
 
-PP_Var NPObjectToPPVarForTest(PluginInstanceImpl* instance, NPObject* object) {
+PP_Var NPObjectToPPVarForTest(PepperPluginInstanceImpl* instance,
+                              NPObject* object) {
   v8::Isolate* test_isolate = v8::Isolate::New();
   PP_Var result = PP_MakeUndefined();
   {
@@ -280,7 +280,7 @@
 // PPVarArrayFromNPVariantArray ------------------------------------------------
 
 PPVarArrayFromNPVariantArray::PPVarArrayFromNPVariantArray(
-    PluginInstanceImpl* instance,
+    PepperPluginInstanceImpl* instance,
     size_t size,
     const NPVariant* variants)
     : size_(size) {
@@ -299,7 +299,7 @@
 
 // PPVarFromNPObject -----------------------------------------------------------
 
-PPVarFromNPObject::PPVarFromNPObject(PluginInstanceImpl* instance,
+PPVarFromNPObject::PPVarFromNPObject(PepperPluginInstanceImpl* instance,
                                      NPObject* object)
     : var_(NPObjectToPPVar(instance, object)) {
 }
@@ -353,5 +353,4 @@
   static_cast<TryCatch*>(self)->SetException(message);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/npapi_glue.h b/content/renderer/pepper/npapi_glue.h
index 5cc745b..c2d23c8 100644
--- a/content/renderer/pepper/npapi_glue.h
+++ b/content/renderer/pepper/npapi_glue.h
@@ -15,10 +15,9 @@
 typedef struct _NPVariant NPVariant;
 typedef void* NPIdentifier;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
-class PluginInstanceImpl;
+class PepperPluginInstanceImpl;
 class PluginObject;
 
 // Utilities -------------------------------------------------------------------
@@ -38,7 +37,8 @@
 //
 // The returned PP_Var will have a refcount of 1, this passing ownership of
 // the reference to the caller. This is suitable for returning to a plugin.
-PP_Var NPVariantToPPVar(PluginInstanceImpl* instance, const NPVariant* variant);
+PP_Var NPVariantToPPVar(PepperPluginInstanceImpl* instance,
+                        const NPVariant* variant);
 
 // Returns a NPIdentifier that corresponds to the given PP_Var. The contents
 // of the PP_Var will be copied. Returns 0 if the given PP_Var is not a a
@@ -64,13 +64,13 @@
 // Note: this could easily be changed to take a PP_Instance instead if that
 // makes certain calls in the future easier. Currently all callers have a
 // PluginInstance so that's what we use here.
-CONTENT_EXPORT PP_Var NPObjectToPPVar(PluginInstanceImpl* instance,
+CONTENT_EXPORT PP_Var NPObjectToPPVar(PepperPluginInstanceImpl* instance,
                                       NPObject* object);
 
 // This version creates a default v8::Context rather than using the one from
 // the container of |instance|. It is only for use in unit tests, where we don't
 // have a real container for |instance|.
-CONTENT_EXPORT PP_Var NPObjectToPPVarForTest(PluginInstanceImpl* instance,
+CONTENT_EXPORT PP_Var NPObjectToPPVarForTest(PepperPluginInstanceImpl* instance,
                                              NPObject* object);
 
 // PPResultAndExceptionToNPResult ----------------------------------------------
@@ -152,7 +152,7 @@
 // WebKit to the plugin.
 class PPVarArrayFromNPVariantArray {
  public:
-  PPVarArrayFromNPVariantArray(PluginInstanceImpl* instance,
+  PPVarArrayFromNPVariantArray(PepperPluginInstanceImpl* instance,
                                size_t size,
                                const NPVariant* variants);
   ~PPVarArrayFromNPVariantArray();
@@ -172,7 +172,7 @@
 // is used when converting 'this' pointer from WebKit to the plugin.
 class PPVarFromNPObject {
  public:
-  PPVarFromNPObject(PluginInstanceImpl* instance, NPObject* object);
+  PPVarFromNPObject(PepperPluginInstanceImpl* instance, NPObject* object);
   ~PPVarFromNPObject();
 
   PP_Var var() const { return var_; }
@@ -259,7 +259,6 @@
   PP_Var* exception_;
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_NPAPI_GLUE_H_
diff --git a/content/renderer/pepper/npobject_var.cc b/content/renderer/pepper/npobject_var.cc
index 0ab1755..690dd22 100644
--- a/content/renderer/pepper/npobject_var.cc
+++ b/content/renderer/pepper/npobject_var.cc
@@ -10,7 +10,6 @@
 #include "ppapi/c/pp_var.h"
 #include "third_party/WebKit/public/web/WebBindings.h"
 
-using webkit::ppapi::HostGlobals;
 using WebKit::WebBindings;
 
 namespace ppapi {
@@ -22,12 +21,12 @@
     : pp_instance_(instance),
       np_object_(np_object) {
   WebBindings::retainObject(np_object_);
-  HostGlobals::Get()->host_var_tracker()->AddNPObjectVar(this);
+  content::HostGlobals::Get()->host_var_tracker()->AddNPObjectVar(this);
 }
 
 NPObjectVar::~NPObjectVar() {
   if (pp_instance())
-    HostGlobals::Get()->host_var_tracker()->RemoveNPObjectVar(this);
+    content::HostGlobals::Get()->host_var_tracker()->RemoveNPObjectVar(this);
   WebBindings::releaseObject(np_object_);
 }
 
@@ -41,7 +40,7 @@
 
 void NPObjectVar::InstanceDeleted() {
   DCHECK(pp_instance_);
-  HostGlobals::Get()->host_var_tracker()->RemoveNPObjectVar(this);
+  content::HostGlobals::Get()->host_var_tracker()->RemoveNPObjectVar(this);
   pp_instance_ = 0;
 }
 
diff --git a/content/renderer/pepper/npobject_var.h b/content/renderer/pepper/npobject_var.h
index 6cafbb4..68f9097 100644
--- a/content/renderer/pepper/npobject_var.h
+++ b/content/renderer/pepper/npobject_var.h
@@ -66,6 +66,6 @@
   DISALLOW_COPY_AND_ASSIGN(NPObjectVar);
 };
 
-}  // namespace
+}  // ppapi
 
 #endif  // CONTENT_RENDERER_PEPPER_NPOBJECT_VAR_H_
diff --git a/content/renderer/pepper/pepper_audio_input_host.cc b/content/renderer/pepper/pepper_audio_input_host.cc
index 6e74126..a4056d2 100644
--- a/content/renderer/pepper/pepper_audio_input_host.cc
+++ b/content/renderer/pepper/pepper_audio_input_host.cc
@@ -6,7 +6,7 @@
 
 #include "base/logging.h"
 #include "build/build_config.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/renderer_ppapi_host_impl.h"
 #include "ipc/ipc_message.h"
 #include "media/audio/shared_memory_util.h"
@@ -83,8 +83,8 @@
                  base::SyncSocket::kInvalidHandle);
 }
 
-webkit::ppapi::PluginDelegate* PepperAudioInputHost::GetPluginDelegate() {
-  webkit::ppapi::PluginInstanceImpl* instance =
+PluginDelegate* PepperAudioInputHost::GetPluginDelegate() {
+  PepperPluginInstanceImpl* instance =
       renderer_ppapi_host_->GetPluginInstanceImpl(pp_instance());
   if (instance)
     return instance->delegate();
@@ -101,11 +101,11 @@
   if (audio_input_)
     return PP_ERROR_FAILED;
 
-  webkit::ppapi::PluginDelegate* plugin_delegate = GetPluginDelegate();
+  PluginDelegate* plugin_delegate = GetPluginDelegate();
   if (!plugin_delegate)
     return PP_ERROR_FAILED;
 
-  webkit::ppapi::PluginInstanceImpl* instance =
+  PepperPluginInstanceImpl* instance =
       renderer_ppapi_host_->GetPluginInstanceImpl(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
diff --git a/content/renderer/pepper/pepper_audio_input_host.h b/content/renderer/pepper/pepper_audio_input_host.h
index 8316ec8..f142197 100644
--- a/content/renderer/pepper/pepper_audio_input_host.h
+++ b/content/renderer/pepper/pepper_audio_input_host.h
@@ -25,7 +25,7 @@
 
 class PepperAudioInputHost
     : public ppapi::host::ResourceHost,
-      public webkit::ppapi::PluginDelegate::PlatformAudioInputClient,
+      public PluginDelegate::PlatformAudioInputClient,
       public PepperDeviceEnumerationHostHelper::Delegate {
  public:
   PepperAudioInputHost(RendererPpapiHostImpl* host,
@@ -44,7 +44,7 @@
   virtual void StreamCreationFailed() OVERRIDE;
 
   // PepperDeviceEnumerationHostHelper::Delegate implementation.
-  virtual webkit::ppapi::PluginDelegate* GetPluginDelegate() OVERRIDE;
+  virtual PluginDelegate* GetPluginDelegate() OVERRIDE;
 
  private:
   int32_t OnOpen(ppapi::host::HostMessageContext* context,
@@ -75,7 +75,7 @@
 
   // PluginDelegate audio input object that we delegate audio IPC through.
   // We don't own this pointer but are responsible for calling Shutdown on it.
-  webkit::ppapi::PluginDelegate::PlatformAudioInput* audio_input_;
+  PluginDelegate::PlatformAudioInput* audio_input_;
 
   PepperDeviceEnumerationHostHelper enumeration_helper_;
 
diff --git a/content/renderer/pepper/pepper_broker_impl.cc b/content/renderer/pepper/pepper_broker_impl.cc
index aca9f32..a245885 100644
--- a/content/renderer/pepper/pepper_broker_impl.cc
+++ b/content/renderer/pepper/pepper_broker_impl.cc
@@ -79,7 +79,7 @@
     return false;
   }
   dispatcher_->channel()->SetRestrictDispatchChannelGroup(
-      content::kRendererRestrictDispatchGroup_Pepper);
+      kRendererRestrictDispatchGroup_Pepper);
   return true;
 }
 
@@ -107,7 +107,7 @@
   return result;
 }
 
-PepperBrokerImpl::PepperBrokerImpl(webkit::ppapi::PluginModule* plugin_module,
+PepperBrokerImpl::PepperBrokerImpl(PluginModule* plugin_module,
                                    PepperPluginDelegateImpl* delegate)
     : plugin_module_(plugin_module),
       delegate_(delegate->AsWeakPtr()) {
@@ -124,8 +124,7 @@
 }
 
 // If the channel is not ready, queue the connection.
-void PepperBrokerImpl::AddPendingConnect(
-    webkit::ppapi::PPB_Broker_Impl* client) {
+void PepperBrokerImpl::AddPendingConnect(PPB_Broker_Impl* client) {
   DCHECK(pending_connects_.find(client) == pending_connects_.end())
       << "Connect was already called for this client";
 
@@ -141,7 +140,7 @@
   pending_connects_[client].client = client->AsWeakPtr();
 }
 
-void PepperBrokerImpl::Disconnect(webkit::ppapi::PPB_Broker_Impl* client) {
+void PepperBrokerImpl::Disconnect(PPB_Broker_Impl* client) {
   // Remove the pending connect if one exists. This class will not call client's
   // callback.
   pending_connects_.erase(client);
@@ -190,8 +189,7 @@
   // Process all pending channel requests from the plugins.
   for (ClientMap::iterator i = pending_connects_.begin();
        i != pending_connects_.end();) {
-    base::WeakPtr<webkit::ppapi::PPB_Broker_Impl>& weak_ptr =
-        i->second.client;
+    base::WeakPtr<PPB_Broker_Impl>& weak_ptr = i->second.client;
     if (!i->second.is_authorized) {
       ++i;
       continue;
@@ -204,9 +202,8 @@
   }
 }
 
-void PepperBrokerImpl::OnBrokerPermissionResult(
-    webkit::ppapi::PPB_Broker_Impl* client,
-    bool result) {
+void PepperBrokerImpl::OnBrokerPermissionResult(PPB_Broker_Impl* client,
+                                                bool result) {
   ClientMap::iterator entry = pending_connects_.find(client);
   if (entry == pending_connects_.end())
     return;
@@ -249,8 +246,7 @@
   DCHECK_NE(PP_OK, error_code);
   for (ClientMap::iterator i = pending_connects_.begin();
        i != pending_connects_.end(); ++i) {
-    base::WeakPtr<webkit::ppapi::PPB_Broker_Impl>& weak_ptr =
-        i->second.client;
+    base::WeakPtr<PPB_Broker_Impl>& weak_ptr = i->second.client;
     if (weak_ptr.get()) {
       weak_ptr->BrokerConnected(
           ppapi::PlatformFileToInt(base::kInvalidPlatformFileValue),
@@ -260,8 +256,7 @@
   pending_connects_.clear();
 }
 
-void PepperBrokerImpl::ConnectPluginToBroker(
-    webkit::ppapi::PPB_Broker_Impl* client) {
+void PepperBrokerImpl::ConnectPluginToBroker(PPB_Broker_Impl* client) {
   base::SyncSocket::Handle plugin_handle = base::kInvalidPlatformFileValue;
   int32_t result = PP_OK;
 
diff --git a/content/renderer/pepper/pepper_broker_impl.h b/content/renderer/pepper/pepper_broker_impl.h
index ce81d96..a9c1411 100644
--- a/content/renderer/pepper/pepper_broker_impl.h
+++ b/content/renderer/pepper/pepper_broker_impl.h
@@ -22,15 +22,10 @@
 }
 }
 
-namespace webkit {
-namespace ppapi {
-class PluginModule;
-}
-}
-
 namespace content {
 
 class PepperPluginDelegateImpl;
+class PluginModule;
 
 // This object is NOT thread-safe.
 class CONTENT_EXPORT PepperBrokerDispatcherWrapper {
@@ -49,17 +44,17 @@
   scoped_ptr<ppapi::proxy::ProxyChannel::Delegate> dispatcher_delegate_;
 };
 
-class PepperBrokerImpl : public webkit::ppapi::PluginDelegate::Broker,
+class PepperBrokerImpl : public PluginDelegate::Broker,
                          public base::RefCountedThreadSafe<PepperBrokerImpl>{
  public:
-  PepperBrokerImpl(webkit::ppapi::PluginModule* plugin_module,
+  PepperBrokerImpl(PluginModule* plugin_module,
                    PepperPluginDelegateImpl* delegate_);
 
-  // webkit::ppapi::PluginDelegate::Broker implementation.
-  virtual void Disconnect(webkit::ppapi::PPB_Broker_Impl* client) OVERRIDE;
+  // PluginDelegate::Broker implementation.
+  virtual void Disconnect(PPB_Broker_Impl* client) OVERRIDE;
 
   // Adds a pending connection to the broker. Balances out Disconnect() calls.
-  void AddPendingConnect(webkit::ppapi::PPB_Broker_Impl* client);
+  void AddPendingConnect(PPB_Broker_Impl* client);
 
   // Called when the channel to the broker has been established.
   void OnBrokerChannelConnected(base::ProcessId broker_pid,
@@ -67,7 +62,7 @@
 
   // Called when we know whether permission to access the PPAPI broker was
   // granted.
-  void OnBrokerPermissionResult(webkit::ppapi::PPB_Broker_Impl* client,
+  void OnBrokerPermissionResult(PPB_Broker_Impl* client,
                                 bool result);
 
  private:
@@ -78,7 +73,7 @@
     ~PendingConnection();
 
     bool is_authorized;
-    base::WeakPtr<webkit::ppapi::PPB_Broker_Impl> client;
+    base::WeakPtr<PPB_Broker_Impl> client;
   };
 
   virtual ~PepperBrokerImpl();
@@ -87,20 +82,19 @@
   void ReportFailureToClients(int error_code);
 
   // Connects the plugin to the broker via a pipe.
-  void ConnectPluginToBroker(webkit::ppapi::PPB_Broker_Impl* client);
+  void ConnectPluginToBroker(PPB_Broker_Impl* client);
 
   scoped_ptr<PepperBrokerDispatcherWrapper> dispatcher_;
 
   // A map of pointers to objects that have requested a connection to the weak
   // pointer we can use to reference them. The mapping is needed so we can clean
   // up entries for objects that may have been deleted.
-  typedef std::map<webkit::ppapi::PPB_Broker_Impl*, PendingConnection>
-      ClientMap;
+  typedef std::map<PPB_Broker_Impl*, PendingConnection> ClientMap;
   ClientMap pending_connects_;
 
   // Pointer to the associated plugin module.
   // Always set and cleared at the same time as the module's pointer to this.
-  webkit::ppapi::PluginModule* plugin_module_;
+  PluginModule* plugin_module_;
 
   base::WeakPtr<PepperPluginDelegateImpl> delegate_;
 
diff --git a/content/renderer/pepper/pepper_device_enumeration_event_handler.cc b/content/renderer/pepper/pepper_device_enumeration_event_handler.cc
index 7f662a1..8828fee 100644
--- a/content/renderer/pepper/pepper_device_enumeration_event_handler.cc
+++ b/content/renderer/pepper/pepper_device_enumeration_event_handler.cc
@@ -32,7 +32,7 @@
 }
 
 int PepperDeviceEnumerationEventHandler::RegisterEnumerateDevicesCallback(
-    const webkit::ppapi::PluginDelegate::EnumerateDevicesCallback& callback) {
+    const PluginDelegate::EnumerateDevicesCallback& callback) {
   enumerate_callbacks_[next_id_] = callback;
   return next_id_++;
 }
@@ -129,8 +129,7 @@
     return;
   }
 
-  webkit::ppapi::PluginDelegate::EnumerateDevicesCallback callback =
-      iter->second;
+  PluginDelegate::EnumerateDevicesCallback callback = iter->second;
 
   std::vector<ppapi::DeviceRefData> devices;
   if (succeeded) {
diff --git a/content/renderer/pepper/pepper_device_enumeration_event_handler.h b/content/renderer/pepper/pepper_device_enumeration_event_handler.h
index 543bcdb..05835ed 100644
--- a/content/renderer/pepper/pepper_device_enumeration_event_handler.h
+++ b/content/renderer/pepper/pepper_device_enumeration_event_handler.h
@@ -22,7 +22,7 @@
   virtual ~PepperDeviceEnumerationEventHandler();
 
   int RegisterEnumerateDevicesCallback(
-      const webkit::ppapi::PluginDelegate::EnumerateDevicesCallback& callback);
+      const PluginDelegate::EnumerateDevicesCallback& callback);
   void UnregisterEnumerateDevicesCallback(int request_id);
 
   int RegisterOpenDeviceCallback(
@@ -62,8 +62,7 @@
 
   int next_id_;
 
-  typedef std::map<int,
-                   webkit::ppapi::PluginDelegate::EnumerateDevicesCallback>
+  typedef std::map<int, PluginDelegate::EnumerateDevicesCallback>
       EnumerateCallbackMap;
   EnumerateCallbackMap enumerate_callbacks_;
 
diff --git a/content/renderer/pepper/pepper_device_enumeration_host_helper.cc b/content/renderer/pepper/pepper_device_enumeration_host_helper.cc
index 136c946..ba281ea 100644
--- a/content/renderer/pepper/pepper_device_enumeration_host_helper.cc
+++ b/content/renderer/pepper/pepper_device_enumeration_host_helper.cc
@@ -19,7 +19,6 @@
 #include "ppapi/shared_impl/ppb_device_ref_shared.h"
 
 using ppapi::host::HostMessageContext;
-using webkit::ppapi::PluginDelegate;
 
 namespace content {
 
diff --git a/content/renderer/pepper/pepper_device_enumeration_host_helper.h b/content/renderer/pepper/pepper_device_enumeration_host_helper.h
index 0781f58..d7e92c7 100644
--- a/content/renderer/pepper/pepper_device_enumeration_host_helper.h
+++ b/content/renderer/pepper/pepper_device_enumeration_host_helper.h
@@ -26,13 +26,8 @@
 class Message;
 }
 
-namespace webkit {
-namespace ppapi {
-class PluginDelegate;
-}
-}
-
 namespace content {
+class PluginDelegate;
 
 // Resource hosts that support device enumeration can use this class to filter
 // and process PpapiHostMsg_DeviceEnumeration_* messages.
@@ -47,7 +42,7 @@
 
     // TODO(yzshen): Move the relevant functionality out of PluginDelegate and
     // get rid of this method.
-    virtual webkit::ppapi::PluginDelegate* GetPluginDelegate() = 0;
+    virtual PluginDelegate* GetPluginDelegate() = 0;
   };
 
   // |resource_host| and |delegate| must outlive this object.
diff --git a/content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc b/content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc
index f4e5714..a6ff34b 100644
--- a/content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc
+++ b/content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc
@@ -24,7 +24,7 @@
 
 namespace {
 
-class TestPluginDelegate : public webkit::ppapi::MockPluginDelegate {
+class TestPluginDelegate : public MockPluginDelegate {
  public:
   TestPluginDelegate() : last_used_id_(0) {
   }
@@ -79,19 +79,19 @@
   TestResourceHost(ppapi::host::PpapiHost* host,
                    PP_Instance instance,
                    PP_Resource resource,
-                   webkit::ppapi::PluginDelegate* delegate)
+                   PluginDelegate* delegate)
       : ResourceHost(host, instance, resource),
         delegate_(delegate) {
   }
 
   virtual ~TestResourceHost() {}
 
-  virtual webkit::ppapi::PluginDelegate* GetPluginDelegate() OVERRIDE {
+  virtual PluginDelegate* GetPluginDelegate() OVERRIDE {
     return delegate_;
   }
 
  private:
-  webkit::ppapi::PluginDelegate* delegate_;
+  PluginDelegate* delegate_;
 
   DISALLOW_COPY_AND_ASSIGN(TestResourceHost);
 };
diff --git a/content/renderer/pepper/pepper_file_chooser_host.cc b/content/renderer/pepper/pepper_file_chooser_host.cc
index 8eecb07..1229d17 100644
--- a/content/renderer/pepper/pepper_file_chooser_host.cc
+++ b/content/renderer/pepper/pepper_file_chooser_host.cc
@@ -106,8 +106,7 @@
     base::FilePath file_path(files[i].path);
 #endif
 
-    webkit::ppapi::PPB_FileRef_Impl* ref =
-        webkit::ppapi::PPB_FileRef_Impl::CreateExternal(
+    PPB_FileRef_Impl* ref = PPB_FileRef_Impl::CreateExternal(
         pp_instance(), file_path, files[i].display_name);
     ppapi::PPB_FileRef_CreateInfo create_info;
     ppapi::proxy::PPB_FileRef_Proxy::SerializeFileRef(ref->GetReference(),
diff --git a/content/renderer/pepper/pepper_file_io_host.cc b/content/renderer/pepper/pepper_file_io_host.cc
index 96f0e82..74b4c3d 100644
--- a/content/renderer/pepper/pepper_file_io_host.cc
+++ b/content/renderer/pepper/pepper_file_io_host.cc
@@ -9,12 +9,16 @@
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_util_proxy.h"
+#include "content/child/child_thread.h"
+#include "content/child/quota_dispatcher.h"
+#include "content/common/fileapi/file_system_messages.h"
 #include "content/public/common/content_client.h"
 #include "content/public/renderer/content_renderer_client.h"
 #include "content/renderer/pepper/host_globals.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/ppb_file_ref_impl.h"
 #include "content/renderer/pepper/quota_file_io.h"
+#include "content/renderer/render_thread_impl.h"
 #include "ppapi/c/pp_errors.h"
 #include "ppapi/host/dispatch_host_message.h"
 #include "ppapi/host/ppapi_host.h"
@@ -31,8 +35,6 @@
 using ppapi::host::ReplyMessageContext;
 using ppapi::thunk::EnterResourceNoLock;
 using ppapi::thunk::PPB_FileRef_API;
-using webkit::ppapi::PPB_FileRef_Impl;
-using webkit::ppapi::PluginDelegate;
 
 namespace {
 
@@ -52,6 +54,48 @@
   return pp_error == PP_OK ? byte_number : pp_error;
 }
 
+class QuotaCallbackTranslator : public QuotaDispatcher::Callback {
+ public:
+  typedef QuotaFileIO::Delegate::AvailableSpaceCallback PluginCallback;
+  explicit QuotaCallbackTranslator(const PluginCallback& cb) : callback_(cb) {}
+  virtual void DidQueryStorageUsageAndQuota(int64 usage, int64 quota) OVERRIDE {
+    callback_.Run(std::max(static_cast<int64>(0), quota - usage));
+  }
+  virtual void DidGrantStorageQuota(int64 granted_quota) OVERRIDE {
+    NOTREACHED();
+  }
+  virtual void DidFail(quota::QuotaStatusCode error) OVERRIDE {
+    callback_.Run(0);
+  }
+ private:
+  PluginCallback callback_;
+};
+
+class QuotaFileIODelegate : public QuotaFileIO::Delegate {
+ public:
+  QuotaFileIODelegate() {}
+  virtual ~QuotaFileIODelegate() {}
+
+  virtual void QueryAvailableSpace(
+      const GURL& origin,
+      quota::StorageType type,
+      const AvailableSpaceCallback& callback) OVERRIDE {
+    ChildThread::current()->quota_dispatcher()->QueryStorageUsageAndQuota(
+        origin, type, new QuotaCallbackTranslator(callback));
+  }
+  virtual void WillUpdateFile(const GURL& file_path) OVERRIDE {
+    ChildThread::current()->Send(new FileSystemHostMsg_WillUpdate(file_path));
+  }
+  virtual void DidUpdateFile(const GURL& file_path, int64_t delta) OVERRIDE {
+    ChildThread::current()->Send(new FileSystemHostMsg_DidUpdate(
+        file_path, delta));
+  }
+  virtual scoped_refptr<base::MessageLoopProxy>
+      GetFileThreadMessageLoopProxy() OVERRIDE {
+    return RenderThreadImpl::current()->GetFileThreadMessageLoopProxy();
+  }
+};
+
 }  // namespace
 
 PepperFileIOHost::PepperFileIOHost(RendererPpapiHost* host,
@@ -66,8 +110,8 @@
       open_flags_(0),
       weak_factory_(this) {
   // TODO(victorhsieh): eliminate plugin_delegate_ as it's no longer needed.
-  webkit::ppapi::PluginInstanceImpl* plugin_instance =
-      webkit::ppapi::HostGlobals::Get()->GetInstance(instance);
+  PepperPluginInstanceImpl* plugin_instance =
+      HostGlobals::Get()->GetInstance(instance);
   plugin_delegate_ = plugin_instance ? plugin_instance->delegate() : NULL;
 }
 
@@ -480,8 +524,8 @@
   if (file_ != base::kInvalidPlatformFileValue &&
       (file_system_type_ == PP_FILESYSTEMTYPE_LOCALTEMPORARY ||
        file_system_type_ == PP_FILESYSTEMTYPE_LOCALPERSISTENT)) {
-    quota_file_io_.reset(new webkit::ppapi::QuotaFileIO(
-        pp_instance(), file_, file_system_url_, file_system_type_));
+    quota_file_io_.reset(new QuotaFileIO(
+        new QuotaFileIODelegate, file_, file_system_url_, file_system_type_));
   }
 
   reply_context.params.set_result(pp_error);
diff --git a/content/renderer/pepper/pepper_file_io_host.h b/content/renderer/pepper/pepper_file_io_host.h
index 89e70f7..7efc0af 100644
--- a/content/renderer/pepper/pepper_file_io_host.h
+++ b/content/renderer/pepper/pepper_file_io_host.h
@@ -18,15 +18,9 @@
 #include "ppapi/thunk/ppb_file_ref_api.h"
 
 using ppapi::host::ReplyMessageContext;
-using webkit::ppapi::PluginDelegate;
-
-namespace webkit {
-namespace ppapi {
-class QuotaFileIO;
-}  // namespace ppapi
-}  // namespace webkit
 
 namespace content {
+class QuotaFileIO;
 
 class PepperFileIOHost : public ppapi::host::ResourceHost,
                          public base::SupportsWeakPtr<PepperFileIOHost> {
@@ -97,7 +91,7 @@
                                     int bytes_written);
 
   // TODO(victorhsieh): eliminate plugin_delegate_ as it's no longer needed.
-  webkit::ppapi::PluginDelegate* plugin_delegate_;  // Not owned.
+  PluginDelegate* plugin_delegate_;  // Not owned.
 
   base::PlatformFile file_;
 
@@ -117,7 +111,7 @@
 
   // Pointer to a QuotaFileIO instance, which is valid only while a file
   // of type PP_FILESYSTEMTYPE_LOCAL{PERSISTENT,TEMPORARY} is opened.
-  scoped_ptr<webkit::ppapi::QuotaFileIO> quota_file_io_;
+  scoped_ptr<QuotaFileIO> quota_file_io_;
 
   bool is_running_in_process_;
 
diff --git a/content/renderer/pepper/pepper_file_system_host.cc b/content/renderer/pepper/pepper_file_system_host.cc
index 3e60dfe..f4c469a 100644
--- a/content/renderer/pepper/pepper_file_system_host.cc
+++ b/content/renderer/pepper/pepper_file_system_host.cc
@@ -8,9 +8,9 @@
 #include "base/callback.h"
 #include "content/child/child_thread.h"
 #include "content/child/fileapi/file_system_dispatcher.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/public/renderer/render_view.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "ppapi/c/pp_errors.h"
 #include "ppapi/host/dispatch_host_message.h"
 #include "ppapi/host/ppapi_host.h"
@@ -117,7 +117,7 @@
       return PP_ERROR_FAILED;
   }
 
-  webkit::ppapi::PluginInstance* plugin_instance =
+  PepperPluginInstance* plugin_instance =
       renderer_ppapi_host_->GetPluginInstance(pp_instance());
   if (!plugin_instance)
     return PP_ERROR_FAILED;
diff --git a/content/renderer/pepper/pepper_graphics_2d_host.cc b/content/renderer/pepper/pepper_graphics_2d_host.cc
index ca4d524..7dbde94 100644
--- a/content/renderer/pepper/pepper_graphics_2d_host.cc
+++ b/content/renderer/pepper/pepper_graphics_2d_host.cc
@@ -11,7 +11,7 @@
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "content/renderer/pepper/common.h"
 #include "content/renderer/pepper/gfx_conversion.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/ppb_image_data_impl.h"
 #include "content/renderer/pepper/resource_helper.h"
 #include "ppapi/c/pp_bool.h"
@@ -41,8 +41,6 @@
 
 using ppapi::thunk::EnterResourceNoLock;
 using ppapi::thunk::PPB_ImageData_API;
-using webkit::ppapi::ImageDataAutoMapper;
-using webkit::ppapi::PPB_ImageData_Impl;
 
 namespace content {
 
@@ -296,7 +294,7 @@
 }
 
 bool PepperGraphics2DHost::BindToInstance(
-    webkit::ppapi::PluginInstanceImpl* new_instance) {
+    PepperPluginInstanceImpl* new_instance) {
   if (new_instance && new_instance->pp_instance() != pp_instance())
     return false;  // Can't bind other instance's contexts.
   if (bound_instance_ == new_instance)
@@ -338,7 +336,7 @@
   gfx::Size image_size = gfx::ToFlooredSize(
       gfx::ScaleSize(pixel_image_size, scale_));
 
-  webkit::ppapi::PluginInstance* plugin_instance =
+  PepperPluginInstance* plugin_instance =
       renderer_ppapi_host_->GetPluginInstance(pp_instance());
   if (!plugin_instance)
     return;
@@ -413,7 +411,7 @@
   return is_always_opaque_;
 }
 
-webkit::ppapi::PPB_ImageData_Impl* PepperGraphics2DHost::ImageData() {
+PPB_ImageData_Impl* PepperGraphics2DHost::ImageData() {
   return image_data_.get();
 }
 
@@ -602,8 +600,7 @@
         operation.type = QueuedOperation::PAINT;
       }
 
-      gfx::Rect clip = webkit::ppapi::PP_ToGfxRect(
-          bound_instance_->view_data().clip_rect);
+      gfx::Rect clip = PP_ToGfxRect(bound_instance_->view_data().clip_rect);
       is_plugin_visible = !clip.IsEmpty();
 
       // Set |no_update_visible| to false if the change overlaps the visible
diff --git a/content/renderer/pepper/pepper_graphics_2d_host.h b/content/renderer/pepper/pepper_graphics_2d_host.h
index a582f2e..af379bf 100644
--- a/content/renderer/pepper/pepper_graphics_2d_host.h
+++ b/content/renderer/pepper/pepper_graphics_2d_host.h
@@ -22,22 +22,15 @@
 class Rect;
 }
 
-namespace webkit {
-namespace ppapi {
-class PPB_ImageData_Impl;
-class PluginInstanceImpl;
-}  // namespace ppapi
-}  // namespace webkit
-
-using webkit::ppapi::PPB_ImageData_Impl;
-
 namespace content {
-
+  
+class PepperPluginInstanceImpl;
+class PPB_ImageData_Impl;
 class RendererPpapiHost;
 
 class CONTENT_EXPORT PepperGraphics2DHost
     : public ppapi::host::ResourceHost,
-      public webkit::ppapi::PluginDelegate::PlatformGraphics2D,
+      public PluginDelegate::PlatformGraphics2D,
       public base::SupportsWeakPtr<PepperGraphics2DHost> {
  public:
   static PepperGraphics2DHost* Create(RendererPpapiHost* host,
@@ -57,8 +50,7 @@
   // PlatformGraphics2D overrides.
   virtual bool ReadImageData(PP_Resource image,
                              const PP_Point* top_left) OVERRIDE;
-  virtual bool BindToInstance(
-      webkit::ppapi::PluginInstanceImpl* new_instance) OVERRIDE;
+  virtual bool BindToInstance(PepperPluginInstanceImpl* new_instance) OVERRIDE;
   virtual void Paint(WebKit::WebCanvas* canvas,
                      const gfx::Rect& plugin_rect,
                      const gfx::Rect& paint_rect) OVERRIDE;
@@ -142,7 +134,7 @@
 
   // Non-owning pointer to the plugin instance this context is currently bound
   // to, if any. If the context is currently unbound, this will be NULL.
-  webkit::ppapi::PluginInstanceImpl* bound_instance_;
+  PepperPluginInstanceImpl* bound_instance_;
 
   // Keeps track of all drawing commands queued before a Flush call.
   struct QueuedOperation;
diff --git a/content/renderer/pepper/pepper_in_process_resource_creation.cc b/content/renderer/pepper/pepper_in_process_resource_creation.cc
index f9713c4..3732583 100644
--- a/content/renderer/pepper/pepper_in_process_resource_creation.cc
+++ b/content/renderer/pepper/pepper_in_process_resource_creation.cc
@@ -8,14 +8,14 @@
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
 #include "base/message_loop/message_loop.h"
+#include "content/child/browser_font_resource_trusted.h"
 #include "content/renderer/pepper/pepper_in_process_router.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/renderer_ppapi_host_impl.h"
 #include "content/renderer/render_view_impl.h"
 #include "ipc/ipc_message.h"
 #include "ipc/ipc_message_macros.h"
 #include "ppapi/host/ppapi_host.h"
-#include "ppapi/proxy/browser_font_resource_trusted.h"
 #include "ppapi/proxy/ext_crx_file_system_private_resource.h"
 #include "ppapi/proxy/file_chooser_resource.h"
 #include "ppapi/proxy/file_io_resource.h"
@@ -42,7 +42,7 @@
 
 PepperInProcessResourceCreation::PepperInProcessResourceCreation(
     RendererPpapiHostImpl* host_impl,
-    webkit::ppapi::PluginInstanceImpl* instance)
+    PepperPluginInstanceImpl* instance)
     : ResourceCreationImpl(instance),
       host_impl_(host_impl) {
 }
@@ -53,12 +53,11 @@
 PP_Resource PepperInProcessResourceCreation::CreateBrowserFont(
     PP_Instance instance,
     const PP_BrowserFont_Trusted_Description* description) {
-  if (!ppapi::proxy::BrowserFontResource_Trusted::IsPPFontDescriptionValid(
-      *description))
+  if (!BrowserFontResource_Trusted::IsPPFontDescriptionValid(*description))
     return 0;
   ppapi::Preferences prefs(
       host_impl_->GetRenderViewForInstance(instance)->GetWebkitPreferences());
-  return (new ppapi::proxy::BrowserFontResource_Trusted(
+  return (new BrowserFontResource_Trusted(
       host_impl_->in_process_router()->GetPluginConnection(instance),
       instance,
       *description,
diff --git a/content/renderer/pepper/pepper_in_process_resource_creation.h b/content/renderer/pepper/pepper_in_process_resource_creation.h
index 72a5943..985ae09 100644
--- a/content/renderer/pepper/pepper_in_process_resource_creation.h
+++ b/content/renderer/pepper/pepper_in_process_resource_creation.h
@@ -34,11 +34,10 @@
 // When we convert all resources to use the new-style, we can just use the
 // ResourceCreationProxy for all resources. This class is just glue to manage
 // the temporary "two different cases."
-class PepperInProcessResourceCreation
-    : public webkit::ppapi::ResourceCreationImpl {
+class PepperInProcessResourceCreation : public ResourceCreationImpl {
  public:
   PepperInProcessResourceCreation(RendererPpapiHostImpl* host_impl,
-                                  webkit::ppapi::PluginInstanceImpl* instance);
+                                  PepperPluginInstanceImpl* instance);
   virtual ~PepperInProcessResourceCreation();
 
   // ResourceCreation_API implementation.
diff --git a/content/renderer/pepper/pepper_platform_audio_input_impl.cc b/content/renderer/pepper/pepper_platform_audio_input_impl.cc
index 436afc2..68ce940 100644
--- a/content/renderer/pepper/pepper_platform_audio_input_impl.cc
+++ b/content/renderer/pepper/pepper_platform_audio_input_impl.cc
@@ -25,7 +25,7 @@
     const GURL& document_url,
     int sample_rate,
     int frames_per_buffer,
-    webkit::ppapi::PluginDelegate::PlatformAudioInputClient* client) {
+    PluginDelegate::PlatformAudioInputClient* client) {
   scoped_refptr<PepperPlatformAudioInputImpl> audio_input(
       new PepperPlatformAudioInputImpl());
   if (audio_input->Initialize(plugin_delegate, device_id, document_url,
@@ -143,7 +143,7 @@
     const GURL& document_url,
     int sample_rate,
     int frames_per_buffer,
-    webkit::ppapi::PluginDelegate::PlatformAudioInputClient* client) {
+    PluginDelegate::PlatformAudioInputClient* client) {
   DCHECK(main_message_loop_proxy_->BelongsToCurrentThread());
 
   if (!plugin_delegate.get() || !client)
diff --git a/content/renderer/pepper/pepper_platform_audio_input_impl.h b/content/renderer/pepper/pepper_platform_audio_input_impl.h
index c5b3fb0..3c18e7c 100644
--- a/content/renderer/pepper/pepper_platform_audio_input_impl.h
+++ b/content/renderer/pepper/pepper_platform_audio_input_impl.h
@@ -35,7 +35,7 @@
 // I/O thread.
 
 class PepperPlatformAudioInputImpl
-    : public webkit::ppapi::PluginDelegate::PlatformAudioInput,
+    : public PluginDelegate::PlatformAudioInput,
       public media::AudioInputIPCDelegate,
       public base::RefCountedThreadSafe<PepperPlatformAudioInputImpl> {
  public:
@@ -47,7 +47,7 @@
       const GURL& document_url,
       int sample_rate,
       int frames_per_buffer,
-      webkit::ppapi::PluginDelegate::PlatformAudioInputClient* client);
+      PluginDelegate::PlatformAudioInputClient* client);
 
   // PlatformAudioInput implementation (called on main thread).
   virtual void StartCapture() OVERRIDE;
@@ -78,7 +78,7 @@
       const GURL& document_url,
       int sample_rate,
       int frames_per_buffer,
-      webkit::ppapi::PluginDelegate::PlatformAudioInputClient* client);
+      PluginDelegate::PlatformAudioInputClient* client);
 
   // I/O thread backends to above functions.
   void InitializeOnIOThread(int session_id);
@@ -94,7 +94,7 @@
 
   // The client to notify when the stream is created. THIS MUST ONLY BE
   // ACCESSED ON THE MAIN THREAD.
-  webkit::ppapi::PluginDelegate::PlatformAudioInputClient* client_;
+  PluginDelegate::PlatformAudioInputClient* client_;
 
   // Used to send/receive IPC. THIS MUST ONLY BE ACCESSED ON THE
   // I/O THREAD.
diff --git a/content/renderer/pepper/pepper_platform_audio_output_impl.cc b/content/renderer/pepper/pepper_platform_audio_output_impl.cc
index f4dde37..320d211 100644
--- a/content/renderer/pepper/pepper_platform_audio_output_impl.cc
+++ b/content/renderer/pepper/pepper_platform_audio_output_impl.cc
@@ -21,7 +21,7 @@
     int sample_rate,
     int frames_per_buffer,
     int source_render_view_id,
-    webkit::ppapi::PluginDelegate::PlatformAudioOutputClient* client) {
+    PluginDelegate::PlatformAudioOutputClient* client) {
   scoped_refptr<PepperPlatformAudioOutputImpl> audio_output(
       new PepperPlatformAudioOutputImpl());
   if (audio_output->Initialize(sample_rate, frames_per_buffer,
@@ -116,7 +116,7 @@
     int sample_rate,
     int frames_per_buffer,
     int source_render_view_id,
-    webkit::ppapi::PluginDelegate::PlatformAudioOutputClient* client) {
+    PluginDelegate::PlatformAudioOutputClient* client) {
   DCHECK(client);
   client_ = client;
 
diff --git a/content/renderer/pepper/pepper_platform_audio_output_impl.h b/content/renderer/pepper/pepper_platform_audio_output_impl.h
index d13aa62..af94e02 100644
--- a/content/renderer/pepper/pepper_platform_audio_output_impl.h
+++ b/content/renderer/pepper/pepper_platform_audio_output_impl.h
@@ -22,7 +22,7 @@
 namespace content {
 
 class PepperPlatformAudioOutputImpl
-    : public webkit::ppapi::PluginDelegate::PlatformAudioOutput,
+    : public PluginDelegate::PlatformAudioOutput,
       public media::AudioOutputIPCDelegate,
       public base::RefCountedThreadSafe<PepperPlatformAudioOutputImpl> {
  public:
@@ -32,7 +32,7 @@
       int sample_rate,
       int frames_per_buffer,
       int source_render_view_id,
-      webkit::ppapi::PluginDelegate::PlatformAudioOutputClient* client);
+      PluginDelegate::PlatformAudioOutputClient* client);
 
   // PlatformAudioOutput implementation (called on main thread).
   virtual bool StartPlayback() OVERRIDE;
@@ -59,7 +59,7 @@
       int sample_rate,
       int frames_per_buffer,
       int source_render_view_id,
-      webkit::ppapi::PluginDelegate::PlatformAudioOutputClient* client);
+      PluginDelegate::PlatformAudioOutputClient* client);
 
   // I/O thread backends to above functions.
   void InitializeOnIOThread(const media::AudioParameters& params);
@@ -69,7 +69,7 @@
 
   // The client to notify when the stream is created. THIS MUST ONLY BE
   // ACCESSED ON THE MAIN THREAD.
-  webkit::ppapi::PluginDelegate::PlatformAudioOutputClient* client_;
+  PluginDelegate::PlatformAudioOutputClient* client_;
 
   // Used to send/receive IPC. THIS MUST ONLY BE ACCESSED ON THE
   // I/O thread except to send messages and get the message loop.
diff --git a/content/renderer/pepper/pepper_platform_context_3d_impl.h b/content/renderer/pepper/pepper_platform_context_3d_impl.h
index c975453..609cdcc 100644
--- a/content/renderer/pepper/pepper_platform_context_3d_impl.h
+++ b/content/renderer/pepper/pepper_platform_context_3d_impl.h
@@ -24,8 +24,7 @@
 class ContextProviderCommandBuffer;
 class GpuChannelHost;
 
-class PlatformContext3DImpl
-    : public webkit::ppapi::PluginDelegate::PlatformContext3D {
+class PlatformContext3DImpl : public PluginDelegate::PlatformContext3D {
  public:
   explicit PlatformContext3DImpl();
   virtual ~PlatformContext3DImpl();
diff --git a/content/renderer/pepper/pepper_platform_image_2d_impl.h b/content/renderer/pepper/pepper_platform_image_2d_impl.h
index 5ad75e1..3ff8de4 100644
--- a/content/renderer/pepper/pepper_platform_image_2d_impl.h
+++ b/content/renderer/pepper/pepper_platform_image_2d_impl.h
@@ -11,8 +11,7 @@
 namespace content {
 
 // Implements the Image2D using a TransportDIB.
-class PepperPlatformImage2DImpl
-    : public webkit::ppapi::PluginDelegate::PlatformImage2D {
+class PepperPlatformImage2DImpl : public PluginDelegate::PlatformImage2D {
  public:
   virtual ~PepperPlatformImage2DImpl();
 
diff --git a/content/renderer/pepper/pepper_platform_video_capture_impl.cc b/content/renderer/pepper/pepper_platform_video_capture_impl.cc
index c922c03..fd121a6 100644
--- a/content/renderer/pepper/pepper_platform_video_capture_impl.cc
+++ b/content/renderer/pepper/pepper_platform_video_capture_impl.cc
@@ -19,7 +19,7 @@
     const base::WeakPtr<PepperPluginDelegateImpl>& plugin_delegate,
     const std::string& device_id,
     const GURL& document_url,
-    webkit::ppapi::PluginDelegate::PlatformVideoCaptureEventHandler* handler)
+    PluginDelegate::PlatformVideoCaptureEventHandler* handler)
     : plugin_delegate_(plugin_delegate),
       device_id_(device_id),
       session_id_(0),
diff --git a/content/renderer/pepper/pepper_platform_video_capture_impl.h b/content/renderer/pepper/pepper_platform_video_capture_impl.h
index 58101e5..40dc8e0 100644
--- a/content/renderer/pepper/pepper_platform_video_capture_impl.h
+++ b/content/renderer/pepper/pepper_platform_video_capture_impl.h
@@ -26,16 +26,16 @@
 class PepperPluginDelegateImpl;
 
 class PepperPlatformVideoCaptureImpl
-    : public webkit::ppapi::PluginDelegate::PlatformVideoCapture,
+    : public PluginDelegate::PlatformVideoCapture,
       public media::VideoCapture::EventHandler {
  public:
   PepperPlatformVideoCaptureImpl(
       const base::WeakPtr<PepperPluginDelegateImpl>& plugin_delegate,
       const std::string& device_id,
       const GURL& document_url,
-      webkit::ppapi::PluginDelegate::PlatformVideoCaptureEventHandler* handler);
+      PluginDelegate::PlatformVideoCaptureEventHandler* handler);
 
-  // webkit::ppapi::PluginDelegate::PlatformVideoCapture implementation.
+  // PluginDelegate::PlatformVideoCapture implementation.
   virtual void StartCapture(
       media::VideoCapture::EventHandler* handler,
       const media::VideoCaptureCapability& capability) OVERRIDE;
@@ -77,7 +77,7 @@
 
   scoped_ptr<media::VideoCaptureHandlerProxy> handler_proxy_;
 
-  webkit::ppapi::PluginDelegate::PlatformVideoCaptureEventHandler* handler_;
+  PluginDelegate::PlatformVideoCaptureEventHandler* handler_;
 
   media::VideoCapture* video_capture_;
 
diff --git a/content/renderer/pepper/pepper_plugin_delegate_impl.cc b/content/renderer/pepper/pepper_plugin_delegate_impl.cc
index 9eaa2ab..55c3e12 100644
--- a/content/renderer/pepper/pepper_plugin_delegate_impl.cc
+++ b/content/renderer/pepper/pepper_plugin_delegate_impl.cc
@@ -19,10 +19,8 @@
 #include "base/sync_socket.h"
 #include "base/time/time.h"
 #include "content/child/child_process.h"
-#include "content/child/child_thread.h"
 #include "content/child/fileapi/file_system_dispatcher.h"
 #include "content/child/npapi/webplugin.h"
-#include "content/child/quota_dispatcher.h"
 #include "content/common/child_process_messages.h"
 #include "content/common/fileapi/file_system_messages.h"
 #include "content/common/gpu/client/context_provider_command_buffer.h"
@@ -33,6 +31,8 @@
 #include "content/public/common/content_switches.h"
 #include "content/public/common/context_menu_params.h"
 #include "content/public/common/media_stream_request.h"
+#include "content/public/common/page_zoom.h"
+#include "content/public/common/referrer.h"
 #include "content/public/common/webplugininfo.h"
 #include "content/public/renderer/content_renderer_client.h"
 #include "content/public/renderer/renderer_restrict_dispatch_group.h"
@@ -54,12 +54,12 @@
 #include "content/renderer/pepper/pepper_platform_context_3d_impl.h"
 #include "content/renderer/pepper/pepper_platform_image_2d_impl.h"
 #include "content/renderer/pepper/pepper_platform_video_capture_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/pepper_plugin_registry.h"
 #include "content/renderer/pepper/pepper_proxy_channel_delegate_impl.h"
 #include "content/renderer/pepper/pepper_url_loader_host.h"
+#include "content/renderer/pepper/pepper_webplugin_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
-#include "content/renderer/pepper/ppapi_webplugin_impl.h"
 #include "content/renderer/pepper/ppb_tcp_server_socket_private_impl.h"
 #include "content/renderer/pepper/ppb_tcp_socket_private_impl.h"
 #include "content/renderer/pepper/renderer_ppapi_host_impl.h"
@@ -102,7 +102,6 @@
 #include "ui/gfx/size.h"
 #include "url/gurl.h"
 
-using WebKit::WebView;
 using WebKit::WebFrame;
 
 namespace content {
@@ -112,10 +111,9 @@
 // This class wraps a dispatcher and has the same lifetime. A dispatcher has
 // the same lifetime as a plugin module, which is longer than any particular
 // RenderView or plugin instance.
-class HostDispatcherWrapper
-    : public webkit::ppapi::PluginDelegate::OutOfProcessProxy {
+class HostDispatcherWrapper : public PluginDelegate::OutOfProcessProxy {
  public:
-  HostDispatcherWrapper(webkit::ppapi::PluginModule* module,
+  HostDispatcherWrapper(PluginModule* module,
                         base::ProcessId peer_pid,
                         int plugin_child_id,
                         const ppapi::PpapiPermissions& perms,
@@ -174,8 +172,7 @@
     // isn't true for browser tag support.
     if (host) {
       RenderView* render_view = host->GetRenderViewForInstance(instance);
-      webkit::ppapi::PluginInstance* plugin_instance =
-          host->GetPluginInstance(instance);
+      PepperPluginInstance* plugin_instance = host->GetPluginInstance(instance);
       render_view->Send(new ViewHostMsg_DidCreateOutOfProcessPepperInstance(
           plugin_child_id_,
           instance,
@@ -212,7 +209,7 @@
   ppapi::proxy::HostDispatcher* dispatcher() { return dispatcher_.get(); }
 
  private:
-  webkit::ppapi::PluginModule* module_;
+  PluginModule* module_;
 
   base::ProcessId peer_pid_;
 
@@ -228,26 +225,9 @@
   scoped_ptr<ppapi::proxy::ProxyChannel::Delegate> dispatcher_delegate_;
 };
 
-class QuotaCallbackTranslator : public QuotaDispatcher::Callback {
- public:
-  typedef webkit::ppapi::PluginDelegate::AvailableSpaceCallback PluginCallback;
-  explicit QuotaCallbackTranslator(const PluginCallback& cb) : callback_(cb) {}
-  virtual void DidQueryStorageUsageAndQuota(int64 usage, int64 quota) OVERRIDE {
-    callback_.Run(std::max(static_cast<int64>(0), quota - usage));
-  }
-  virtual void DidGrantStorageQuota(int64 granted_quota) OVERRIDE {
-    NOTREACHED();
-  }
-  virtual void DidFail(quota::QuotaStatusCode error) OVERRIDE {
-    callback_.Run(0);
-  }
- private:
-  PluginCallback callback_;
-};
-
 class PluginInstanceLockTarget : public MouseLockDispatcher::LockTarget {
  public:
-  PluginInstanceLockTarget(webkit::ppapi::PluginInstanceImpl* plugin)
+  PluginInstanceLockTarget(PepperPluginInstanceImpl* plugin)
       : plugin_(plugin) {}
 
   virtual void OnLockMouseACK(bool succeeded) OVERRIDE {
@@ -265,7 +245,7 @@
   }
 
  private:
-  webkit::ppapi::PluginInstanceImpl* plugin_;
+  PepperPluginInstanceImpl* plugin_;
 };
 
 void DoNotifyCloseFile(int file_open_id, base::PlatformFileError /* unused */) {
@@ -274,8 +254,7 @@
 }
 
 void DidOpenFileSystemURL(
-    const webkit::ppapi::PluginDelegate::AsyncOpenFileSystemURLCallback&
-        callback,
+    const PluginDelegate::AsyncOpenFileSystemURLCallback& callback,
     base::PlatformFile file,
     int file_open_id,
     quota::QuotaLimitType quota_policy) {
@@ -293,18 +272,17 @@
 }
 
 void DidFailOpenFileSystemURL(
-    const webkit::ppapi::PluginDelegate::AsyncOpenFileSystemURLCallback&
-        callback,
+    const PluginDelegate::AsyncOpenFileSystemURLCallback& callback,
     base::PlatformFileError error_code) {
   base::PlatformFile invalid_file = base::kInvalidPlatformFileValue;
   callback.Run(error_code,
                base::PassPlatformFile(&invalid_file),
                quota::kQuotaLimitTypeUnknown,
-               webkit::ppapi::PluginDelegate::NotifyCloseFileCallback());
+               PluginDelegate::NotifyCloseFileCallback());
 }
 
 void CreateHostForInProcessModule(RenderViewImpl* render_view,
-                                  webkit::ppapi::PluginModule* module,
+                                  PluginModule* module,
                                   const WebPluginInfo& webplugin_info) {
   // First time an in-process plugin was used, make a host for it.
   const PepperPluginInfo* info =
@@ -349,28 +327,27 @@
     const WebPluginInfo& webplugin_info,
     const WebKit::WebPluginParams& params) {
   bool pepper_plugin_was_registered = false;
-  scoped_refptr<webkit::ppapi::PluginModule> pepper_module(
+  scoped_refptr<PluginModule> pepper_module(
       CreatePepperPluginModule(webplugin_info, &pepper_plugin_was_registered));
 
   if (pepper_plugin_was_registered) {
     if (!pepper_module.get())
       return NULL;
-    return new webkit::ppapi::WebPluginImpl(
+    return new PepperWebPluginImpl(
         pepper_module.get(), params, AsWeakPtr(), render_view_->AsWeakPtr());
   }
 
   return NULL;
 }
 
-scoped_refptr<webkit::ppapi::PluginModule>
-PepperPluginDelegateImpl::CreatePepperPluginModule(
+scoped_refptr<PluginModule> PepperPluginDelegateImpl::CreatePepperPluginModule(
     const WebPluginInfo& webplugin_info,
     bool* pepper_plugin_was_registered) {
   *pepper_plugin_was_registered = true;
 
   // See if a module has already been loaded for this plugin.
   base::FilePath path(webplugin_info.path);
-  scoped_refptr<webkit::ppapi::PluginModule> module =
+  scoped_refptr<PluginModule> module =
       PepperPluginRegistry::GetInstance()->GetLiveModule(path);
   if (module.get()) {
     if (!module->GetEmbedderState()) {
@@ -389,10 +366,10 @@
       PepperPluginRegistry::GetInstance()->GetInfoForPlugin(webplugin_info);
   if (!info) {
     *pepper_plugin_was_registered = false;
-    return scoped_refptr<webkit::ppapi::PluginModule>();
+    return scoped_refptr<PluginModule>();
   } else if (!info->is_out_of_process) {
     // In-process plugin not preloaded, it probably couldn't be initialized.
-    return scoped_refptr<webkit::ppapi::PluginModule>();
+    return scoped_refptr<PluginModule>();
   }
 
   ppapi::PpapiPermissions permissions =
@@ -406,14 +383,12 @@
       path, &channel_handle, &peer_pid, &plugin_child_id));
   if (channel_handle.name.empty()) {
     // Couldn't be initialized.
-    return scoped_refptr<webkit::ppapi::PluginModule>();
+    return scoped_refptr<PluginModule>();
   }
 
   // AddLiveModule must be called before any early returns since the
   // module's destructor will remove itself.
-  module = new webkit::ppapi::PluginModule(
-      info->name, path,
-      permissions);
+  module = new PluginModule(info->name, path, permissions);
   PepperPluginRegistry::GetInstance()->AddLiveModule(path, module.get());
 
   if (!CreateOutOfProcessModule(module.get(),
@@ -423,13 +398,13 @@
                                 peer_pid,
                                 plugin_child_id,
                                 false))  // is_external = false
-    return scoped_refptr<webkit::ppapi::PluginModule>();
+    return scoped_refptr<PluginModule>();
 
   return module;
 }
 
 scoped_refptr<PepperBrokerImpl> PepperPluginDelegateImpl::CreateBroker(
-    webkit::ppapi::PluginModule* plugin_module) {
+    PluginModule* plugin_module) {
   DCHECK(plugin_module);
   DCHECK(!plugin_module->GetBroker());
 
@@ -456,7 +431,7 @@
 }
 
 RendererPpapiHost* PepperPluginDelegateImpl::CreateOutOfProcessModule(
-    webkit::ppapi::PluginModule* module,
+    PluginModule* module,
     const base::FilePath& path,
     ppapi::PpapiPermissions permissions,
     const IPC::ChannelHandle& channel_handle,
@@ -475,7 +450,7 @@
                                 is_external));
   if (!dispatcher->Init(
           channel_handle,
-          webkit::ppapi::PluginModule::GetLocalGetInterfaceFunc(),
+          PluginModule::GetLocalGetInterfaceFunc(),
           GetPreferences(),
           hung_filter.get()))
     return NULL;
@@ -529,7 +504,7 @@
   // Notify all of our instances that we started painting. This is used for
   // internal bookkeeping only, so we know that the set can not change under
   // us.
-  for (std::set<webkit::ppapi::PluginInstanceImpl*>::iterator i =
+  for (std::set<PepperPluginInstanceImpl*>::iterator i =
            active_instances_.begin();
        i != active_instances_.end(); ++i)
     (*i)->ViewWillInitiatePaint();
@@ -539,9 +514,8 @@
   // Notify all instances that we painted.  The same caveats apply as for
   // ViewFlushedPaint regarding instances closing themselves, so we take
   // similar precautions.
-  std::set<webkit::ppapi::PluginInstanceImpl*> plugins = active_instances_;
-  for (std::set<webkit::ppapi::PluginInstanceImpl*>::iterator i =
-          plugins.begin();
+  std::set<PepperPluginInstanceImpl*> plugins = active_instances_;
+  for (std::set<PepperPluginInstanceImpl*>::iterator i = plugins.begin();
        i != plugins.end(); ++i) {
     if (active_instances_.find(*i) != active_instances_.end())
       (*i)->ViewInitiatedPaint();
@@ -553,9 +527,8 @@
   // we it may ask to close itself as a result. This will, in turn, modify our
   // set, possibly invalidating the iterator. So we iterate on a copy that
   // won't change out from under us.
-  std::set<webkit::ppapi::PluginInstanceImpl*> plugins = active_instances_;
-  for (std::set<webkit::ppapi::PluginInstanceImpl*>::iterator i =
-           plugins.begin();
+  std::set<PepperPluginInstanceImpl*> plugins = active_instances_;
+  for (std::set<PepperPluginInstanceImpl*>::iterator i = plugins.begin();
        i != plugins.end(); ++i) {
     // The copy above makes sure our iterator is never invalid if some plugins
     // are destroyed. But some plugin may decide to close all of its views in
@@ -578,17 +551,17 @@
   }
 }
 
-webkit::ppapi::PluginInstanceImpl*
-PepperPluginDelegateImpl::GetBitmapForOptimizedPluginPaint(
-    const gfx::Rect& paint_bounds,
-    TransportDIB** dib,
-    gfx::Rect* location,
-    gfx::Rect* clip,
-    float* scale_factor) {
-  for (std::set<webkit::ppapi::PluginInstanceImpl*>::iterator i =
+PepperPluginInstanceImpl* PepperPluginDelegateImpl::
+    GetBitmapForOptimizedPluginPaint(
+        const gfx::Rect& paint_bounds,
+        TransportDIB** dib,
+        gfx::Rect* location,
+        gfx::Rect* clip,
+        float* scale_factor) {
+  for (std::set<PepperPluginInstanceImpl*>::iterator i =
            active_instances_.begin();
        i != active_instances_.end(); ++i) {
-    webkit::ppapi::PluginInstanceImpl* instance = *i;
+    PepperPluginInstanceImpl* instance = *i;
     // In Flash fullscreen , the plugin contents should be painted onto the
     // fullscreen widget instead of the web page.
     if (!instance->FlashIsFullscreenOrPending() &&
@@ -600,7 +573,7 @@
 }
 
 void PepperPluginDelegateImpl::PluginFocusChanged(
-    webkit::ppapi::PluginInstanceImpl* instance,
+    PepperPluginInstanceImpl* instance,
     bool focused) {
   if (focused)
     focused_plugin_ = instance;
@@ -611,25 +584,25 @@
 }
 
 void PepperPluginDelegateImpl::PluginTextInputTypeChanged(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   if (focused_plugin_ == instance && render_view_)
     render_view_->PpapiPluginTextInputTypeChanged();
 }
 
 void PepperPluginDelegateImpl::PluginCaretPositionChanged(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   if (focused_plugin_ == instance && render_view_)
     render_view_->PpapiPluginCaretPositionChanged();
 }
 
 void PepperPluginDelegateImpl::PluginRequestedCancelComposition(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   if (focused_plugin_ == instance && render_view_)
     render_view_->PpapiPluginCancelComposition();
 }
 
 void PepperPluginDelegateImpl::PluginSelectionChanged(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   if (focused_plugin_ == instance && render_view_)
     render_view_->PpapiPluginSelectionChanged();
 }
@@ -740,14 +713,14 @@
 }
 
 void PepperPluginDelegateImpl::PluginCrashed(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   render_view_->PluginCrashed(instance->module()->path(),
                               instance->module()->GetPeerProcessId());
   UnSetAndDeleteLockTargetAdapter(instance);
 }
 
 void PepperPluginDelegateImpl::InstanceCreated(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   active_instances_.insert(instance);
 
   // Set the initial focus.
@@ -755,7 +728,7 @@
 }
 
 void PepperPluginDelegateImpl::InstanceDeleted(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   active_instances_.erase(instance);
   UnSetAndDeleteLockTargetAdapter(instance);
 
@@ -767,7 +740,7 @@
 
 scoped_ptr< ::ppapi::thunk::ResourceCreationAPI>
 PepperPluginDelegateImpl::CreateResourceCreationAPI(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   RendererPpapiHostImpl* host_impl = static_cast<RendererPpapiHostImpl*>(
       instance->module()->GetEmbedderState());
   return host_impl->CreateInProcessResourceCreationAPI(instance);
@@ -783,15 +756,15 @@
       render_view_, file_path);
 }
 
-webkit::ppapi::PluginDelegate::PlatformImage2D*
+PluginDelegate::PlatformImage2D*
 PepperPluginDelegateImpl::CreateImage2D(int width, int height) {
   return PepperPlatformImage2DImpl::Create(width, height);
 }
 
-webkit::ppapi::PluginDelegate::PlatformGraphics2D*
-PepperPluginDelegateImpl::GetGraphics2D(
-    webkit::ppapi::PluginInstanceImpl* instance,
-    PP_Resource resource) {
+PluginDelegate::PlatformGraphics2D*
+    PepperPluginDelegateImpl::GetGraphics2D(
+        PepperPluginInstanceImpl* instance,
+        PP_Resource resource) {
   ppapi::host::ResourceHost* host =
       GetRendererResourceHost(instance->pp_instance(), resource);
   if (!host)
@@ -801,7 +774,7 @@
   return result;
 }
 
-webkit::ppapi::PluginDelegate::PlatformContext3D*
+PluginDelegate::PlatformContext3D*
     PepperPluginDelegateImpl::CreateContext3D() {
   // If accelerated compositing of plugins is disabled, fail to create a 3D
   // context, because it won't be visible. This allows graceful fallback in the
@@ -812,19 +785,19 @@
   return new PlatformContext3DImpl;
 }
 
-webkit::ppapi::PluginDelegate::PlatformVideoCapture*
-PepperPluginDelegateImpl::CreateVideoCapture(
-    const std::string& device_id,
-    const GURL& document_url,
-    PlatformVideoCaptureEventHandler* handler) {
+PluginDelegate::PlatformVideoCapture*
+    PepperPluginDelegateImpl::CreateVideoCapture(
+        const std::string& device_id,
+        const GURL& document_url,
+        PlatformVideoCaptureEventHandler* handler) {
   return new PepperPlatformVideoCaptureImpl(AsWeakPtr(), device_id,
                                             document_url, handler);
 }
 
-webkit::ppapi::PluginDelegate::PlatformVideoDecoder*
-PepperPluginDelegateImpl::CreateVideoDecoder(
-    media::VideoDecodeAccelerator::Client* client,
-    int32 command_buffer_route_id) {
+PluginDelegate::PlatformVideoDecoder*
+    PepperPluginDelegateImpl::CreateVideoDecoder(
+        media::VideoDecodeAccelerator::Client* client,
+        int32 command_buffer_route_id) {
   return new PlatformVideoDecoderImpl(client, command_buffer_route_id);
 }
 
@@ -850,36 +823,33 @@
   return thread->GetAudioHardwareConfig()->GetOutputBufferSize();
 }
 
-webkit::ppapi::PluginDelegate::PlatformAudioOutput*
-PepperPluginDelegateImpl::CreateAudioOutput(
-    uint32_t sample_rate,
-    uint32_t sample_count,
-    webkit::ppapi::PluginDelegate::PlatformAudioOutputClient* client) {
+PluginDelegate::PlatformAudioOutput*
+    PepperPluginDelegateImpl::CreateAudioOutput(
+        uint32_t sample_rate,
+        uint32_t sample_count,
+        PluginDelegate::PlatformAudioOutputClient* client) {
   return PepperPlatformAudioOutputImpl::Create(
       static_cast<int>(sample_rate), static_cast<int>(sample_count),
       GetRoutingID(), client);
 }
 
-webkit::ppapi::PluginDelegate::PlatformAudioInput*
-PepperPluginDelegateImpl::CreateAudioInput(
+PluginDelegate::PlatformAudioInput* PepperPluginDelegateImpl::CreateAudioInput(
     const std::string& device_id,
     const GURL& document_url,
     uint32_t sample_rate,
     uint32_t sample_count,
-    webkit::ppapi::PluginDelegate::PlatformAudioInputClient* client) {
+    PluginDelegate::PlatformAudioInputClient* client) {
   return PepperPlatformAudioInputImpl::Create(
       AsWeakPtr(), device_id, document_url, static_cast<int>(sample_rate),
       static_cast<int>(sample_count), client);
 }
 
 // If a broker has not already been created for this plugin, creates one.
-webkit::ppapi::PluginDelegate::Broker*
-PepperPluginDelegateImpl::ConnectToBroker(
-    webkit::ppapi::PPB_Broker_Impl* client) {
+PluginDelegate::Broker* PepperPluginDelegateImpl::ConnectToBroker(
+    PPB_Broker_Impl* client) {
   DCHECK(client);
 
-  webkit::ppapi::PluginModule* plugin_module =
-      webkit::ppapi::ResourceHelper::GetPluginModule(client);
+  PluginModule* plugin_module = ResourceHelper::GetPluginModule(client);
   if (!plugin_module)
     return NULL;
 
@@ -892,7 +862,7 @@
   }
 
   int request_id = pending_permission_requests_.Add(
-      new base::WeakPtr<webkit::ppapi::PPB_Broker_Impl>(client->AsWeakPtr()));
+      new base::WeakPtr<PPB_Broker_Impl>(client->AsWeakPtr()));
   if (!render_view_->Send(
           new ViewHostMsg_RequestPpapiBrokerPermission(
               render_view_->routing_id(),
@@ -912,16 +882,15 @@
 void PepperPluginDelegateImpl::OnPpapiBrokerPermissionResult(
     int request_id,
     bool result) {
-  scoped_ptr<base::WeakPtr<webkit::ppapi::PPB_Broker_Impl> > client_ptr(
+  scoped_ptr<base::WeakPtr<PPB_Broker_Impl> > client_ptr(
       pending_permission_requests_.Lookup(request_id));
   DCHECK(client_ptr.get());
   pending_permission_requests_.Remove(request_id);
-  base::WeakPtr<webkit::ppapi::PPB_Broker_Impl> client = *client_ptr;
+  base::WeakPtr<PPB_Broker_Impl> client = *client_ptr;
   if (!client.get())
     return;
 
-  webkit::ppapi::PluginModule* plugin_module =
-      webkit::ppapi::ResourceHelper::GetPluginModule(client.get());
+  PluginModule* plugin_module = ResourceHelper::GetPluginModule(client.get());
   if (!plugin_module)
     return;
 
@@ -959,14 +928,14 @@
 }
 
 void PepperPluginDelegateImpl::OnSetFocus(bool has_focus) {
-  for (std::set<webkit::ppapi::PluginInstanceImpl*>::iterator i =
+  for (std::set<PepperPluginInstanceImpl*>::iterator i =
            active_instances_.begin();
        i != active_instances_.end(); ++i)
     (*i)->SetContentAreaFocus(has_focus);
 }
 
 void PepperPluginDelegateImpl::PageVisibilityChanged(bool is_visible) {
-  for (std::set<webkit::ppapi::PluginInstanceImpl*>::iterator i =
+  for (std::set<PepperPluginInstanceImpl*>::iterator i =
            active_instances_.begin();
        i != active_instances_.end(); ++i)
     (*i)->PageVisibilityChanged(is_visible);
@@ -1091,21 +1060,6 @@
       directory_path, success_callback, error_callback);
 }
 
-void PepperPluginDelegateImpl::QueryAvailableSpace(
-    const GURL& origin, quota::StorageType type,
-    const AvailableSpaceCallback& callback) {
-  ChildThread::current()->quota_dispatcher()->QueryStorageUsageAndQuota(
-      origin, type, new QuotaCallbackTranslator(callback));
-}
-
-void PepperPluginDelegateImpl::WillUpdateFile(const GURL& path) {
-  ChildThread::current()->Send(new FileSystemHostMsg_WillUpdate(path));
-}
-
-void PepperPluginDelegateImpl::DidUpdateFile(const GURL& path, int64_t delta) {
-  ChildThread::current()->Send(new FileSystemHostMsg_DidUpdate(path, delta));
-}
-
 void PepperPluginDelegateImpl::AsyncOpenFileSystemURL(
     const GURL& path,
     int flags,
@@ -1140,7 +1094,7 @@
 }
 
 void PepperPluginDelegateImpl::TCPSocketConnect(
-    webkit::ppapi::PPB_TCPSocket_Private_Impl* socket,
+    PPB_TCPSocket_Private_Impl* socket,
     uint32 socket_id,
     const std::string& host,
     uint16_t port) {
@@ -1151,7 +1105,7 @@
 }
 
 void PepperPluginDelegateImpl::TCPSocketConnectWithNetAddress(
-      webkit::ppapi::PPB_TCPSocket_Private_Impl* socket,
+      PPB_TCPSocket_Private_Impl* socket,
       uint32 socket_id,
       const PP_NetAddress_Private& addr) {
   RegisterTCPSocket(socket, socket_id);
@@ -1202,7 +1156,7 @@
 }
 
 void PepperPluginDelegateImpl::RegisterTCPSocket(
-    webkit::ppapi::PPB_TCPSocket_Private_Impl* socket,
+    PPB_TCPSocket_Private_Impl* socket,
     uint32 socket_id) {
   tcp_sockets_.AddWithID(socket, socket_id);
 }
@@ -1265,9 +1219,8 @@
   return succeeded;
 }
 
-webkit::ppapi::FullscreenContainer*
-PepperPluginDelegateImpl::CreateFullscreenContainer(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+FullscreenContainer* PepperPluginDelegateImpl::CreateFullscreenContainer(
+    PepperPluginInstanceImpl* instance) {
   return render_view_->CreatePepperFullscreenContainer(instance);
 }
 
@@ -1282,13 +1235,13 @@
 
 void PepperPluginDelegateImpl::ZoomLimitsChanged(double minimum_factor,
                                                  double maximum_factor) {
-  double minimum_level = WebView::zoomFactorToZoomLevel(minimum_factor);
-  double maximum_level = WebView::zoomFactorToZoomLevel(maximum_factor);
+  double minimum_level = ZoomFactorToZoomLevel(minimum_factor);
+  double maximum_level = ZoomFactorToZoomLevel(maximum_factor);
   render_view_->webview()->zoomLimitsChanged(minimum_level, maximum_level);
 }
 
 void PepperPluginDelegateImpl::HandleDocumentLoad(
-    webkit::ppapi::PluginInstanceImpl* instance,
+    PepperPluginInstanceImpl* instance,
     const WebKit::WebURLResponse& response) {
   DCHECK(!instance->document_loader());
 
@@ -1346,7 +1299,7 @@
 }
 
 RendererPpapiHost* PepperPluginDelegateImpl::CreateExternalPluginModule(
-    scoped_refptr<webkit::ppapi::PluginModule> module,
+    scoped_refptr<PluginModule> module,
     const base::FilePath& path,
     ppapi::PpapiPermissions permissions,
     const IPC::ChannelHandle& channel_handle,
@@ -1372,26 +1325,24 @@
   return ppapi::Preferences(render_view_->webkit_preferences());
 }
 
-bool PepperPluginDelegateImpl::LockMouse(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+bool PepperPluginDelegateImpl::LockMouse(PepperPluginInstanceImpl* instance) {
   return GetMouseLockDispatcher(instance)->LockMouse(
       GetOrCreateLockTargetAdapter(instance));
 }
 
-void PepperPluginDelegateImpl::UnlockMouse(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+void PepperPluginDelegateImpl::UnlockMouse(PepperPluginInstanceImpl* instance) {
   GetMouseLockDispatcher(instance)->UnlockMouse(
       GetOrCreateLockTargetAdapter(instance));
 }
 
 bool PepperPluginDelegateImpl::IsMouseLocked(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   return GetMouseLockDispatcher(instance)->IsMouseLockedTo(
       GetOrCreateLockTargetAdapter(instance));
 }
 
 void PepperPluginDelegateImpl::DidChangeCursor(
-    webkit::ppapi::PluginInstanceImpl* instance,
+    PepperPluginInstanceImpl* instance,
     const WebKit::WebCursorInfo& cursor) {
   // Update the cursor appearance immediately if the requesting plugin is the
   // one which receives the last mouse event. Otherwise, the new cursor won't be
@@ -1403,7 +1354,7 @@
 }
 
 void PepperPluginDelegateImpl::DidReceiveMouseEvent(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   last_mouse_event_target_ = instance;
 }
 
@@ -1496,8 +1447,7 @@
     int32_t result,
     const PP_NetAddress_Private& local_addr,
     const PP_NetAddress_Private& remote_addr) {
-  webkit::ppapi::PPB_TCPSocket_Private_Impl* socket =
-      tcp_sockets_.Lookup(socket_id);
+  PPB_TCPSocket_Private_Impl* socket = tcp_sockets_.Lookup(socket_id);
   if (socket)
     socket->OnConnectCompleted(result, local_addr, remote_addr);
   if (result != PP_OK)
@@ -1509,8 +1459,7 @@
     uint32 socket_id,
     bool succeeded,
     const ppapi::PPB_X509Certificate_Fields& certificate_fields) {
-  webkit::ppapi::PPB_TCPSocket_Private_Impl* socket =
-      tcp_sockets_.Lookup(socket_id);
+  PPB_TCPSocket_Private_Impl* socket = tcp_sockets_.Lookup(socket_id);
   if (socket)
     socket->OnSSLHandshakeCompleted(succeeded, certificate_fields);
 }
@@ -1519,8 +1468,7 @@
                                                   uint32 socket_id,
                                                   int32_t result,
                                                   const std::string& data) {
-  webkit::ppapi::PPB_TCPSocket_Private_Impl* socket =
-      tcp_sockets_.Lookup(socket_id);
+  PPB_TCPSocket_Private_Impl* socket = tcp_sockets_.Lookup(socket_id);
   if (socket)
     socket->OnReadCompleted(result, data);
 }
@@ -1528,8 +1476,7 @@
 void PepperPluginDelegateImpl::OnTCPSocketWriteACK(uint32 plugin_dispatcher_id,
                                                    uint32 socket_id,
                                                    int32_t result) {
-  webkit::ppapi::PPB_TCPSocket_Private_Impl* socket =
-      tcp_sockets_.Lookup(socket_id);
+  PPB_TCPSocket_Private_Impl* socket = tcp_sockets_.Lookup(socket_id);
   if (socket)
     socket->OnWriteCompleted(result);
 }
@@ -1538,8 +1485,7 @@
     uint32 plugin_dispatcher_id,
     uint32 socket_id,
     int32_t result) {
-  webkit::ppapi::PPB_TCPSocket_Private_Impl* socket =
-      tcp_sockets_.Lookup(socket_id);
+  PPB_TCPSocket_Private_Impl* socket = tcp_sockets_.Lookup(socket_id);
   if (socket)
     socket->OnSetOptionCompleted(result);
 }
@@ -1649,7 +1595,7 @@
 
 MouseLockDispatcher::LockTarget*
     PepperPluginDelegateImpl::GetOrCreateLockTargetAdapter(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   MouseLockDispatcher::LockTarget* target = mouse_lock_instances_[instance];
   if (target)
     return target;
@@ -1659,7 +1605,7 @@
 }
 
 void PepperPluginDelegateImpl::UnSetAndDeleteLockTargetAdapter(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   LockTargetMap::iterator it = mouse_lock_instances_.find(instance);
   if (it != mouse_lock_instances_.end()) {
     MouseLockDispatcher::LockTarget* target = it->second;
@@ -1670,7 +1616,7 @@
 }
 
 MouseLockDispatcher* PepperPluginDelegateImpl::GetMouseLockDispatcher(
-    webkit::ppapi::PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   if (instance->flash_fullscreen()) {
     RenderWidgetFullscreenPepper* container =
         static_cast<RenderWidgetFullscreenPepper*>(
diff --git a/content/renderer/pepper/pepper_plugin_delegate_impl.h b/content/renderer/pepper/pepper_plugin_delegate_impl.h
index 5a0f977..cb5ab8b 100644
--- a/content/renderer/pepper/pepper_plugin_delegate_impl.h
+++ b/content/renderer/pepper/pepper_plugin_delegate_impl.h
@@ -35,12 +35,6 @@
 class PPB_X509Certificate_Fields;
 }
 
-namespace webkit {
-namespace ppapi {
-class PluginModule;
-}
-}
-
 namespace WebKit {
 class WebGamepads;
 struct WebCompositionUnderline;
@@ -51,11 +45,12 @@
 class GamepadSharedMemoryReader;
 class PepperBrokerImpl;
 class PepperDeviceEnumerationEventHandler;
+class PluginModule;
 class RenderViewImpl;
 struct WebPluginInfo;
 
 class PepperPluginDelegateImpl
-    : public webkit::ppapi::PluginDelegate,
+    : public PluginDelegate,
       public RenderViewPepperHelper,
       public base::SupportsWeakPtr<PepperPluginDelegateImpl>,
       public RenderViewObserver {
@@ -103,7 +98,7 @@
   virtual void ViewWillInitiatePaint() OVERRIDE;
   virtual void ViewInitiatedPaint() OVERRIDE;
   virtual void ViewFlushedPaint() OVERRIDE;
-  virtual webkit::ppapi::PluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
+  virtual PepperPluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
       const gfx::Rect& paint_bounds,
       TransportDIB** dib,
       gfx::Rect* location,
@@ -136,31 +131,27 @@
   virtual void WillHandleMouseEvent() OVERRIDE;
 
   // PluginDelegate implementation.
-  virtual void PluginFocusChanged(webkit::ppapi::PluginInstanceImpl* instance,
+  virtual void PluginFocusChanged(PepperPluginInstanceImpl* instance,
                                   bool focused) OVERRIDE;
   virtual void PluginTextInputTypeChanged(
-      webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
+      PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual void PluginCaretPositionChanged(
-      webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
+      PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual void PluginRequestedCancelComposition(
-      webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
+      PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual void PluginSelectionChanged(
-      webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
+      PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual void SimulateImeSetComposition(
       const string16& text,
       const std::vector<WebKit::WebCompositionUnderline>& underlines,
       int selection_start,
       int selection_end) OVERRIDE;
   virtual void SimulateImeConfirmComposition(const string16& text) OVERRIDE;
-  virtual void PluginCrashed(
-      webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
-  virtual void InstanceCreated(
-      webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
-  virtual void InstanceDeleted(
-      webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
+  virtual void PluginCrashed(PepperPluginInstanceImpl* instance) OVERRIDE;
+  virtual void InstanceCreated(PepperPluginInstanceImpl* instance) OVERRIDE;
+  virtual void InstanceDeleted(PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual scoped_ptr< ::ppapi::thunk::ResourceCreationAPI>
-      CreateResourceCreationAPI(
-          webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
+      CreateResourceCreationAPI(PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual SkBitmap* GetSadPluginBitmap() OVERRIDE;
   virtual WebKit::WebPlugin* CreatePluginReplacement(
       const base::FilePath& file_path) OVERRIDE;
@@ -178,7 +169,7 @@
       PlatformAudioInputClient* client) OVERRIDE;
   virtual PlatformImage2D* CreateImage2D(int width, int height) OVERRIDE;
   virtual PlatformGraphics2D* GetGraphics2D(
-      webkit::ppapi::PluginInstanceImpl* instance,
+      PepperPluginInstanceImpl* instance,
       PP_Resource resource) OVERRIDE;
   virtual PlatformContext3D* CreateContext3D() OVERRIDE;
   virtual PlatformVideoCapture* CreateVideoCapture(
@@ -188,8 +179,7 @@
   virtual PlatformVideoDecoder* CreateVideoDecoder(
       media::VideoDecodeAccelerator::Client* client,
       int32 command_buffer_route_id) OVERRIDE;
-  virtual Broker* ConnectToBroker(
-      webkit::ppapi::PPB_Broker_Impl* client) OVERRIDE;
+  virtual Broker* ConnectToBroker(PPB_Broker_Impl* client) OVERRIDE;
   virtual void NumberOfFindResultsChanged(int identifier,
                                           int total,
                                           bool final_result) OVERRIDE;
@@ -240,25 +230,18 @@
       const GURL& directory_path,
       const ReadDirectoryCallback& success_callback,
       const StatusCallback& error_callback) OVERRIDE;
-  virtual void QueryAvailableSpace(
-      const GURL& origin,
-      quota::StorageType type,
-      const AvailableSpaceCallback& callback) OVERRIDE;
-  virtual void WillUpdateFile(const GURL& file_path) OVERRIDE;
-  virtual void DidUpdateFile(const GURL& file_path, int64_t delta) OVERRIDE;
   virtual void SyncGetFileSystemPlatformPath(
       const GURL& url,
       base::FilePath* platform_path) OVERRIDE;
   virtual scoped_refptr<base::MessageLoopProxy>
       GetFileThreadMessageLoopProxy() OVERRIDE;
   virtual uint32 TCPSocketCreate() OVERRIDE;
-  virtual void TCPSocketConnect(
-      webkit::ppapi::PPB_TCPSocket_Private_Impl* socket,
-      uint32 socket_id,
-      const std::string& host,
-      uint16_t port) OVERRIDE;
+  virtual void TCPSocketConnect(PPB_TCPSocket_Private_Impl* socket,
+                                uint32 socket_id,
+                                const std::string& host,
+                                uint16_t port) OVERRIDE;
   virtual void TCPSocketConnectWithNetAddress(
-      webkit::ppapi::PPB_TCPSocket_Private_Impl* socket,
+      PPB_TCPSocket_Private_Impl* socket,
       uint32 socket_id,
       const PP_NetAddress_Private& addr) OVERRIDE;
   virtual void TCPSocketSSLHandshake(
@@ -275,9 +258,8 @@
       uint32 socket_id,
       PP_TCPSocket_Option name,
       const ppapi::SocketOptionData& value) OVERRIDE;
-  virtual void RegisterTCPSocket(
-      webkit::ppapi::PPB_TCPSocket_Private_Impl* socket,
-      uint32 socket_id) OVERRIDE;
+  virtual void RegisterTCPSocket(PPB_TCPSocket_Private_Impl* socket,
+                                 uint32 socket_id) OVERRIDE;
   virtual void TCPServerSocketListen(
       PP_Resource socket_resource,
       const PP_NetAddress_Private& addr,
@@ -293,9 +275,8 @@
   virtual bool X509CertificateParseDER(
       const std::vector<char>& der,
       ppapi::PPB_X509Certificate_Fields* fields) OVERRIDE;
-  virtual webkit::ppapi::FullscreenContainer*
-      CreateFullscreenContainer(
-          webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
+  virtual FullscreenContainer* CreateFullscreenContainer(
+      PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual gfx::Size GetScreenSize() OVERRIDE;
   virtual std::string GetDefaultEncoding() OVERRIDE;
   virtual void ZoomLimitsChanged(double minimum_factor, double maximum_factor)
@@ -303,15 +284,13 @@
   virtual base::SharedMemory* CreateAnonymousSharedMemory(size_t size)
       OVERRIDE;
   virtual ::ppapi::Preferences GetPreferences() OVERRIDE;
-  virtual bool LockMouse(webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
-  virtual void UnlockMouse(
-      webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
-  virtual bool IsMouseLocked(
-      webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
-  virtual void DidChangeCursor(webkit::ppapi::PluginInstanceImpl* instance,
+  virtual bool LockMouse(PepperPluginInstanceImpl* instance) OVERRIDE;
+  virtual void UnlockMouse(PepperPluginInstanceImpl* instance) OVERRIDE;
+  virtual bool IsMouseLocked(PepperPluginInstanceImpl* instance) OVERRIDE;
+  virtual void DidChangeCursor(PepperPluginInstanceImpl* instance,
                                const WebKit::WebCursorInfo& cursor) OVERRIDE;
   virtual void DidReceiveMouseEvent(
-      webkit::ppapi::PluginInstanceImpl* instance) OVERRIDE;
+      PepperPluginInstanceImpl* instance) OVERRIDE;
   virtual bool IsInFullscreenMode() OVERRIDE;
   virtual void SampleGamepads(WebKit::WebGamepads* data) OVERRIDE;
   virtual bool IsPageVisible() const OVERRIDE;
@@ -320,10 +299,10 @@
       const EnumerateDevicesCallback& callback) OVERRIDE;
   virtual void StopEnumerateDevices(int request_id) OVERRIDE;
   virtual void HandleDocumentLoad(
-      webkit::ppapi::PluginInstanceImpl* instance,
+      PepperPluginInstanceImpl* instance,
       const WebKit::WebURLResponse& response) OVERRIDE;
-  virtual content::RendererPpapiHost* CreateExternalPluginModule(
-      scoped_refptr<webkit::ppapi::PluginModule> module,
+  virtual RendererPpapiHost* CreateExternalPluginModule(
+      scoped_refptr<PluginModule> module,
       const base::FilePath& path,
       ::ppapi::PpapiPermissions permissions,
       const IPC::ChannelHandle& channel_handle,
@@ -374,18 +353,17 @@
   // the second is that the plugin failed to initialize. In this case,
   // |*pepper_plugin_was_registered| will be set to true and the caller should
   // not fall back on any other plugin types.
-  scoped_refptr<webkit::ppapi::PluginModule>
-  CreatePepperPluginModule(const WebPluginInfo& webplugin_info,
-                           bool* pepper_plugin_was_registered);
+  scoped_refptr<PluginModule> CreatePepperPluginModule(
+      const WebPluginInfo& webplugin_info,
+      bool* pepper_plugin_was_registered);
 
   // Asynchronously attempts to create a PPAPI broker for the given plugin.
-  scoped_refptr<PepperBrokerImpl> CreateBroker(
-      webkit::ppapi::PluginModule* plugin_module);
+  scoped_refptr<PepperBrokerImpl> CreateBroker(PluginModule* plugin_module);
 
   // Create a new HostDispatcher for proxying, hook it to the PluginModule,
   // and perform other common initialization.
   RendererPpapiHost* CreateOutOfProcessModule(
-      webkit::ppapi::PluginModule* module,
+      PluginModule* module,
       const base::FilePath& path,
       ppapi::PpapiPermissions permissions,
       const IPC::ChannelHandle& channel_handle,
@@ -394,12 +372,11 @@
       bool is_external);
 
   MouseLockDispatcher::LockTarget* GetOrCreateLockTargetAdapter(
-      webkit::ppapi::PluginInstanceImpl* instance);
-  void UnSetAndDeleteLockTargetAdapter(
-      webkit::ppapi::PluginInstanceImpl* instance);
+      PepperPluginInstanceImpl* instance);
+  void UnSetAndDeleteLockTargetAdapter(PepperPluginInstanceImpl* instance);
 
   MouseLockDispatcher* GetMouseLockDispatcher(
-      webkit::ppapi::PluginInstanceImpl* instance);
+      PepperPluginInstanceImpl* instance);
 
   // Share a given handle with the target process.
   virtual IPC::PlatformFileForTransit ShareHandleWithRemote(
@@ -416,26 +393,25 @@
   // the browser.
   PepperBrowserConnection pepper_browser_connection_;
 
-  std::set<webkit::ppapi::PluginInstanceImpl*> active_instances_;
-  typedef std::map<webkit::ppapi::PluginInstanceImpl*,
+  std::set<PepperPluginInstanceImpl*> active_instances_;
+  typedef std::map<PepperPluginInstanceImpl*,
                    MouseLockDispatcher::LockTarget*> LockTargetMap;
   LockTargetMap mouse_lock_instances_;
 
   IDMap<AsyncOpenFileCallback> pending_async_open_files_;
 
-  IDMap<webkit::ppapi::PPB_TCPSocket_Private_Impl> tcp_sockets_;
+  IDMap<PPB_TCPSocket_Private_Impl> tcp_sockets_;
 
   IDMap<ppapi::PPB_TCPServerSocket_Shared> tcp_server_sockets_;
 
   typedef IDMap<scoped_refptr<PepperBrokerImpl>, IDMapOwnPointer> BrokerMap;
   BrokerMap pending_connect_broker_;
 
-  typedef IDMap<base::WeakPtr<webkit::ppapi::PPB_Broker_Impl> >
-      PermissionRequestMap;
+  typedef IDMap<base::WeakPtr<PPB_Broker_Impl> > PermissionRequestMap;
   PermissionRequestMap pending_permission_requests_;
 
   // Whether or not the focus is on a PPAPI plugin
-  webkit::ppapi::PluginInstanceImpl* focused_plugin_;
+  PepperPluginInstanceImpl* focused_plugin_;
 
   // Current text input composition text. Empty if no composition is in
   // progress.
@@ -445,7 +421,7 @@
   // if the last mouse event went to elements other than Pepper plugins.
   // |last_mouse_event_target_| is not owned by this class. We can know about
   // when it is destroyed via InstanceDeleted().
-  webkit::ppapi::PluginInstanceImpl* last_mouse_event_target_;
+  PepperPluginInstanceImpl* last_mouse_event_target_;
 
   scoped_ptr<GamepadSharedMemoryReader> gamepad_shared_memory_reader_;
 
diff --git a/content/renderer/pepper/ppapi_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc
similarity index 82%
rename from content/renderer/pepper/ppapi_plugin_instance_impl.cc
rename to content/renderer/pepper/pepper_plugin_instance_impl.cc
index 229c31e..da6467a 100644
--- a/content/renderer/pepper/ppapi_plugin_instance_impl.cc
+++ b/content/renderer/pepper/pepper_plugin_instance_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 "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
@@ -16,6 +16,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "cc/layers/texture_layer.h"
+#include "content/public/common/page_zoom.h"
 #include "content/renderer/pepper/common.h"
 #include "content/renderer/pepper/content_decryptor_delegate.h"
 #include "content/renderer/pepper/event_conversion.h"
@@ -150,8 +151,7 @@
 using WebKit::WebUserGestureToken;
 using WebKit::WebView;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 #if defined(OS_WIN)
 // Exported by pdf.dll
@@ -293,7 +293,8 @@
 // unchanged.
 bool SecurityOriginForInstance(PP_Instance instance_id,
                                WebKit::WebSecurityOrigin* security_origin) {
-  PluginInstanceImpl* instance = HostGlobals::Get()->GetInstance(instance_id);
+  PepperPluginInstanceImpl* instance =
+      HostGlobals::Get()->GetInstance(instance_id);
   if (!instance)
     return false;
 
@@ -316,29 +317,31 @@
 }  // namespace
 
 // static
-PluginInstanceImpl* PluginInstanceImpl::Create(PluginDelegate* delegate,
-                                               content::RenderView* render_view,
-                                               PluginModule* module,
-                                               WebPluginContainer* container,
-                                               const GURL& plugin_url) {
+PepperPluginInstanceImpl* PepperPluginInstanceImpl::Create(
+    PluginDelegate* delegate,
+    RenderView* render_view,
+    PluginModule* module,
+    WebPluginContainer* container,
+    const GURL& plugin_url) {
   base::Callback<const void*(const char*)> get_plugin_interface_func =
       base::Bind(&PluginModule::GetPluginInterface, module);
   PPP_Instance_Combined* ppp_instance_combined =
       PPP_Instance_Combined::Create(get_plugin_interface_func);
   if (!ppp_instance_combined)
     return NULL;
-  return new PluginInstanceImpl(delegate, render_view, module,
-                                ppp_instance_combined, container, plugin_url);
+  return new PepperPluginInstanceImpl(delegate, render_view, module,
+                                      ppp_instance_combined, container,
+                                      plugin_url);
 }
 
-PluginInstanceImpl::NaClDocumentLoader::NaClDocumentLoader()
+PepperPluginInstanceImpl::NaClDocumentLoader::NaClDocumentLoader()
     : finished_loading_(false) {
 }
 
-PluginInstanceImpl::NaClDocumentLoader::~NaClDocumentLoader(){
+PepperPluginInstanceImpl::NaClDocumentLoader::~NaClDocumentLoader(){
 }
 
-void PluginInstanceImpl::NaClDocumentLoader::ReplayReceivedData(
+void PepperPluginInstanceImpl::NaClDocumentLoader::ReplayReceivedData(
     WebURLLoaderClient* document_loader) {
   for (std::list<std::string>::iterator it = data_.begin();
        it != data_.end(); ++it) {
@@ -354,7 +357,7 @@
   }
 }
 
-void PluginInstanceImpl::NaClDocumentLoader::didReceiveData(
+void PepperPluginInstanceImpl::NaClDocumentLoader::didReceiveData(
     WebURLLoader* loader,
     const char* data,
     int data_length,
@@ -362,43 +365,44 @@
   data_.push_back(std::string(data, data_length));
 }
 
-void PluginInstanceImpl::NaClDocumentLoader::didFinishLoading(
+void PepperPluginInstanceImpl::NaClDocumentLoader::didFinishLoading(
     WebURLLoader* loader,
     double finish_time) {
   DCHECK(!finished_loading_);
   finished_loading_ = true;
 }
 
-void PluginInstanceImpl::NaClDocumentLoader::didFail(
+void PepperPluginInstanceImpl::NaClDocumentLoader::didFail(
     WebURLLoader* loader,
     const WebURLError& error) {
   DCHECK(!error_.get());
   error_.reset(new WebURLError(error));
 }
 
-PluginInstanceImpl::GamepadImpl::GamepadImpl(PluginDelegate* delegate)
+PepperPluginInstanceImpl::GamepadImpl::GamepadImpl(PluginDelegate* delegate)
     : Resource(::ppapi::Resource::Untracked()),
       delegate_(delegate) {
 }
 
-PluginInstanceImpl::GamepadImpl::~GamepadImpl() {
+PepperPluginInstanceImpl::GamepadImpl::~GamepadImpl() {
 }
 
-PPB_Gamepad_API* PluginInstanceImpl::GamepadImpl::AsPPB_Gamepad_API() {
+PPB_Gamepad_API* PepperPluginInstanceImpl::GamepadImpl::AsPPB_Gamepad_API() {
   return this;
 }
 
-void PluginInstanceImpl::GamepadImpl::Sample(PP_Instance instance,
-                                             PP_GamepadsSampleData* data) {
+void PepperPluginInstanceImpl::GamepadImpl::Sample(
+    PP_Instance instance,
+    PP_GamepadsSampleData* data) {
   WebKit::WebGamepads webkit_data;
   delegate_->SampleGamepads(&webkit_data);
   ConvertWebKitGamepadData(
       *reinterpret_cast<const ::ppapi::WebKitGamepads*>(&webkit_data), data);
 }
 
-PluginInstanceImpl::PluginInstanceImpl(
+PepperPluginInstanceImpl::PepperPluginInstanceImpl(
     PluginDelegate* delegate,
-    content::RenderView* render_view,
+    RenderView* render_view,
     PluginModule* module,
     ::ppapi::PPP_Instance_Combined* instance_interface,
     WebPluginContainer* container,
@@ -468,7 +472,7 @@
     nacl_document_load_ = true;
 }
 
-PluginInstanceImpl::~PluginInstanceImpl() {
+PepperPluginInstanceImpl::~PepperPluginInstanceImpl() {
   DCHECK(!fullscreen_container_);
 
   // Force-unbind any Graphics. In the case of Graphics2D, if the plugin
@@ -503,13 +507,13 @@
 
 // NOTE: Any of these methods that calls into the plugin needs to take into
 // account that the plugin may use Var to remove the <embed> from the DOM, which
-// will make the WebPluginImpl drop its reference, usually the last one. If a
-// method needs to access a member of the instance after the call has returned,
-// then it needs to keep its own reference on the stack.
+// will make the PepperWebPluginImpl drop its reference, usually the last one.
+// If a method needs to access a member of the instance after the call has
+// returned, then it needs to keep its own reference on the stack.
 
-void PluginInstanceImpl::Delete() {
+void PepperPluginInstanceImpl::Delete() {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   // Force the MessageChannel to release its "passthrough object" which should
   // release our last reference to the "InstanceObject" and will probably
   // destroy it. We want to do this prior to calling DidDestroy in case the
@@ -535,9 +539,9 @@
   container_ = NULL;
 }
 
-void PluginInstanceImpl::Paint(WebCanvas* canvas,
-                               const gfx::Rect& plugin_rect,
-                               const gfx::Rect& paint_rect) {
+void PepperPluginInstanceImpl::Paint(WebCanvas* canvas,
+                                     const gfx::Rect& plugin_rect,
+                                     const gfx::Rect& paint_rect) {
   TRACE_EVENT0("ppapi", "PluginInstance::Paint");
   if (module()->is_crashed()) {
     // Crashed plugin painting.
@@ -553,7 +557,7 @@
     bound_graphics_2d->Paint(canvas, plugin_rect, paint_rect);
 }
 
-void PluginInstanceImpl::InvalidateRect(const gfx::Rect& rect) {
+void PepperPluginInstanceImpl::InvalidateRect(const gfx::Rect& rect) {
   if (fullscreen_container_) {
     if (rect.IsEmpty())
       fullscreen_container_->Invalidate();
@@ -570,7 +574,9 @@
   }
 }
 
-void PluginInstanceImpl::ScrollRect(int dx, int dy, const gfx::Rect& rect) {
+void PepperPluginInstanceImpl::ScrollRect(int dx,
+                                          int dy,
+                                          const gfx::Rect& rect) {
   if (fullscreen_container_) {
     fullscreen_container_->ScrollRect(dx, dy, rect);
   } else {
@@ -585,12 +591,12 @@
   }
 }
 
-void PluginInstanceImpl::CommitBackingTexture() {
+void PepperPluginInstanceImpl::CommitBackingTexture() {
   if (texture_layer_.get())
     texture_layer_->SetNeedsDisplay();
 }
 
-void PluginInstanceImpl::InstanceCrashed() {
+void PepperPluginInstanceImpl::InstanceCrashed() {
   // Force free all resources and vars.
   HostGlobals::Get()->InstanceCrashed(pp_instance());
 
@@ -635,9 +641,10 @@
 #endif
 }
 
-bool PluginInstanceImpl::Initialize(const std::vector<std::string>& arg_names,
-                                    const std::vector<std::string>& arg_values,
-                                    bool full_frame) {
+bool PepperPluginInstanceImpl::Initialize(
+    const std::vector<std::string>& arg_names,
+    const std::vector<std::string>& arg_values,
+    bool full_frame) {
   message_channel_.reset(new MessageChannel(this));
 
   full_frame_ = full_frame;
@@ -660,7 +667,7 @@
   return success;
 }
 
-bool PluginInstanceImpl::HandleDocumentLoad(
+bool PepperPluginInstanceImpl::HandleDocumentLoad(
     const WebKit::WebURLResponse& response) {
   DCHECK(!document_loader_);
   if (!nacl_document_load_) {
@@ -683,7 +690,7 @@
   return true;
 }
 
-bool PluginInstanceImpl::SendCompositionEventToPlugin(
+bool PepperPluginInstanceImpl::SendCompositionEventToPlugin(
     PP_InputEvent_Type type, const base::string16& text) {
   std::vector<WebKit::WebCompositionUnderline> empty;
   return SendCompositionEventWithUnderlineInformationToPlugin(
@@ -691,14 +698,15 @@
       static_cast<int>(text.size()));
 }
 
-bool PluginInstanceImpl::SendCompositionEventWithUnderlineInformationToPlugin(
-    PP_InputEvent_Type type,
-    const base::string16& text,
-    const std::vector<WebKit::WebCompositionUnderline>& underlines,
-    int selection_start,
-    int selection_end) {
+bool PepperPluginInstanceImpl::
+    SendCompositionEventWithUnderlineInformationToPlugin(
+        PP_InputEvent_Type type,
+        const base::string16& text,
+        const std::vector<WebKit::WebCompositionUnderline>& underlines,
+        int selection_start,
+        int selection_end) {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
 
   if (!LoadInputEventInterface())
     return false;
@@ -767,19 +775,21 @@
   return handled;
 }
 
-void PluginInstanceImpl::RequestInputEventsHelper(uint32_t event_classes) {
+void PepperPluginInstanceImpl::RequestInputEventsHelper(
+    uint32_t event_classes) {
   if (event_classes & PP_INPUTEVENT_CLASS_TOUCH)
     UpdateTouchEventRequest();
   if (event_classes & PP_INPUTEVENT_CLASS_WHEEL)
     container_->setWantsWheelEvents(IsAcceptingWheelEvents());
 }
 
-bool PluginInstanceImpl::HandleCompositionStart(const base::string16& text) {
+bool PepperPluginInstanceImpl::HandleCompositionStart(
+    const base::string16& text) {
   return SendCompositionEventToPlugin(PP_INPUTEVENT_TYPE_IME_COMPOSITION_START,
                                       text);
 }
 
-bool PluginInstanceImpl::HandleCompositionUpdate(
+bool PepperPluginInstanceImpl::HandleCompositionUpdate(
     const base::string16& text,
     const std::vector<WebKit::WebCompositionUnderline>& underlines,
     int selection_start,
@@ -789,18 +799,19 @@
       text, underlines, selection_start, selection_end);
 }
 
-bool PluginInstanceImpl::HandleCompositionEnd(const base::string16& text) {
+bool PepperPluginInstanceImpl::HandleCompositionEnd(
+    const base::string16& text) {
   return SendCompositionEventToPlugin(PP_INPUTEVENT_TYPE_IME_COMPOSITION_END,
                                       text);
 }
 
-bool PluginInstanceImpl::HandleTextInput(const base::string16& text) {
+bool PepperPluginInstanceImpl::HandleTextInput(const base::string16& text) {
   return SendCompositionEventToPlugin(PP_INPUTEVENT_TYPE_IME_TEXT,
                                       text);
 }
 
-void PluginInstanceImpl::GetSurroundingText(base::string16* text,
-                                            ui::Range* range) const {
+void PepperPluginInstanceImpl::GetSurroundingText(base::string16* text,
+                                                  ui::Range* range) const {
   std::vector<size_t> offsets;
   offsets.push_back(selection_anchor_);
   offsets.push_back(selection_caret_);
@@ -811,12 +822,12 @@
                                                     : offsets[1]);
 }
 
-bool PluginInstanceImpl::IsPluginAcceptingCompositionEvents() const {
+bool PepperPluginInstanceImpl::IsPluginAcceptingCompositionEvents() const {
   return (filtered_input_event_mask_ & PP_INPUTEVENT_CLASS_IME) ||
       (input_event_mask_ & PP_INPUTEVENT_CLASS_IME);
 }
 
-gfx::Rect PluginInstanceImpl::GetCaretBounds() const {
+gfx::Rect PepperPluginInstanceImpl::GetCaretBounds() const {
   if (!text_input_caret_set_) {
     // If it is never set by the plugin, use the bottom left corner.
     return gfx::Rect(view_data_.rect.point.x,
@@ -834,9 +845,10 @@
   return caret;
 }
 
-bool PluginInstanceImpl::HandleInputEvent(const WebKit::WebInputEvent& event,
-                                          WebCursorInfo* cursor_info) {
-  TRACE_EVENT0("ppapi", "PluginInstanceImpl::HandleInputEvent");
+bool PepperPluginInstanceImpl::HandleInputEvent(
+    const WebKit::WebInputEvent& event,
+    WebCursorInfo* cursor_info) {
+  TRACE_EVENT0("ppapi", "PepperPluginInstanceImpl::HandleInputEvent");
 
   if (WebInputEvent::isMouseEventType(event.type))
     delegate()->DidReceiveMouseEvent(this);
@@ -846,7 +858,7 @@
     return false;
 
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
 
   bool rv = false;
   if (LoadInputEventInterface()) {
@@ -892,18 +904,18 @@
   return rv;
 }
 
-void PluginInstanceImpl::HandleMessage(PP_Var message) {
-  TRACE_EVENT0("ppapi", "PluginInstanceImpl::HandleMessage");
+void PepperPluginInstanceImpl::HandleMessage(PP_Var message) {
+  TRACE_EVENT0("ppapi", "PepperPluginInstanceImpl::HandleMessage");
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   if (!LoadMessagingInterface())
     return;
   plugin_messaging_interface_->HandleMessage(pp_instance(), message);
 }
 
-PP_Var PluginInstanceImpl::GetInstanceObject() {
+PP_Var PepperPluginInstanceImpl::GetInstanceObject() {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
 
   // If the plugin supports the private instance interface, try to retrieve its
   // instance object.
@@ -912,7 +924,7 @@
   return PP_MakeUndefined();
 }
 
-void PluginInstanceImpl::ViewChanged(
+void PepperPluginInstanceImpl::ViewChanged(
     const gfx::Rect& position,
     const gfx::Rect& clip,
     const std::vector<gfx::Rect>& cut_outs_rects) {
@@ -965,7 +977,7 @@
   SendDidChangeView();
 }
 
-void PluginInstanceImpl::SetWebKitFocus(bool has_focus) {
+void PepperPluginInstanceImpl::SetWebKitFocus(bool has_focus) {
   if (has_webkit_focus_ == has_focus)
     return;
 
@@ -975,7 +987,7 @@
     SendFocusChangeNotification();
 }
 
-void PluginInstanceImpl::SetContentAreaFocus(bool has_focus) {
+void PepperPluginInstanceImpl::SetContentAreaFocus(bool has_focus) {
   if (has_content_area_focus_ == has_focus)
     return;
 
@@ -985,44 +997,44 @@
     SendFocusChangeNotification();
 }
 
-void PluginInstanceImpl::PageVisibilityChanged(bool is_visible) {
+void PepperPluginInstanceImpl::PageVisibilityChanged(bool is_visible) {
   if (is_visible == view_data_.is_page_visible)
     return;  // Nothing to do.
   view_data_.is_page_visible = is_visible;
 
   // If the initial DidChangeView notification hasn't been sent to the plugin,
   // let it pass the visibility state for us, instead of sending a notification
-  // immediately. It is possible that PluginInstanceImpl::ViewChanged() hasn't
-  // been called for the first time. In that case, most of the fields in
+  // immediately. It is possible that PepperPluginInstanceImpl::ViewChanged()
+  // hasn't been called for the first time. In that case, most of the fields in
   // |view_data_| haven't been properly initialized.
   if (sent_initial_did_change_view_)
     SendDidChangeView();
 }
 
-void PluginInstanceImpl::ViewWillInitiatePaint() {
+void PepperPluginInstanceImpl::ViewWillInitiatePaint() {
   if (GetBoundGraphics2D())
     GetBoundGraphics2D()->ViewWillInitiatePaint();
   else if (bound_graphics_3d_.get())
     bound_graphics_3d_->ViewWillInitiatePaint();
 }
 
-void PluginInstanceImpl::ViewInitiatedPaint() {
+void PepperPluginInstanceImpl::ViewInitiatedPaint() {
   if (GetBoundGraphics2D())
     GetBoundGraphics2D()->ViewInitiatedPaint();
   else if (bound_graphics_3d_.get())
     bound_graphics_3d_->ViewInitiatedPaint();
 }
 
-void PluginInstanceImpl::ViewFlushedPaint() {
+void PepperPluginInstanceImpl::ViewFlushedPaint() {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   if (GetBoundGraphics2D())
     GetBoundGraphics2D()->ViewFlushedPaint();
   else if (bound_graphics_3d_.get())
     bound_graphics_3d_->ViewFlushedPaint();
 }
 
-bool PluginInstanceImpl::GetBitmapForOptimizedPluginPaint(
+bool PepperPluginInstanceImpl::GetBitmapForOptimizedPluginPaint(
     const gfx::Rect& paint_bounds,
     TransportDIB** dib,
     gfx::Rect* location,
@@ -1079,9 +1091,9 @@
   return true;
 }
 
-base::string16 PluginInstanceImpl::GetSelectedText(bool html) {
+base::string16 PepperPluginInstanceImpl::GetSelectedText(bool html) {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   if (!LoadSelectionInterface())
     return base::string16();
 
@@ -1096,9 +1108,10 @@
   return selection;
 }
 
-base::string16 PluginInstanceImpl::GetLinkAtPosition(const gfx::Point& point) {
+base::string16 PepperPluginInstanceImpl::GetLinkAtPosition(
+    const gfx::Point& point) {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   if (!LoadPdfInterface())
     return base::string16();
 
@@ -1115,29 +1128,29 @@
   return link;
 }
 
-void PluginInstanceImpl::RequestSurroundingText(
+void PepperPluginInstanceImpl::RequestSurroundingText(
     size_t desired_number_of_characters) {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   if (!LoadTextInputInterface())
     return;
   plugin_textinput_interface_->RequestSurroundingText(
       pp_instance(), desired_number_of_characters);
 }
 
-void PluginInstanceImpl::Zoom(double factor, bool text_only) {
+void PepperPluginInstanceImpl::Zoom(double factor, bool text_only) {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   if (!LoadZoomInterface())
     return;
   plugin_zoom_interface_->Zoom(pp_instance(), factor, PP_FromBool(text_only));
 }
 
-bool PluginInstanceImpl::StartFind(const base::string16& search_text,
-                                   bool case_sensitive,
-                                   int identifier) {
+bool PepperPluginInstanceImpl::StartFind(const base::string16& search_text,
+                                         bool case_sensitive,
+                                         int identifier) {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   if (!LoadFindInterface())
     return false;
   find_identifier_ = identifier;
@@ -1148,24 +1161,24 @@
           PP_FromBool(case_sensitive)));
 }
 
-void PluginInstanceImpl::SelectFindResult(bool forward) {
+void PepperPluginInstanceImpl::SelectFindResult(bool forward) {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   if (LoadFindInterface())
     plugin_find_interface_->SelectFindResult(pp_instance(),
                                              PP_FromBool(forward));
 }
 
-void PluginInstanceImpl::StopFind() {
+void PepperPluginInstanceImpl::StopFind() {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   if (!LoadFindInterface())
     return;
   find_identifier_ = -1;
   plugin_find_interface_->StopFind(pp_instance());
 }
 
-bool PluginInstanceImpl::LoadFindInterface() {
+bool PepperPluginInstanceImpl::LoadFindInterface() {
   if (!plugin_find_interface_) {
     plugin_find_interface_ =
         static_cast<const PPP_Find_Dev*>(module_->GetPluginInterface(
@@ -1175,7 +1188,7 @@
   return !!plugin_find_interface_;
 }
 
-bool PluginInstanceImpl::LoadInputEventInterface() {
+bool PepperPluginInstanceImpl::LoadInputEventInterface() {
   if (!checked_for_plugin_input_event_interface_) {
     checked_for_plugin_input_event_interface_ = true;
     plugin_input_event_interface_ =
@@ -1185,7 +1198,7 @@
   return !!plugin_input_event_interface_;
 }
 
-bool PluginInstanceImpl::LoadMessagingInterface() {
+bool PepperPluginInstanceImpl::LoadMessagingInterface() {
   if (!checked_for_plugin_messaging_interface_) {
     checked_for_plugin_messaging_interface_ = true;
     plugin_messaging_interface_ =
@@ -1195,7 +1208,7 @@
   return !!plugin_messaging_interface_;
 }
 
-bool PluginInstanceImpl::LoadMouseLockInterface() {
+bool PepperPluginInstanceImpl::LoadMouseLockInterface() {
   if (!plugin_mouse_lock_interface_) {
     plugin_mouse_lock_interface_ =
         static_cast<const PPP_MouseLock*>(module_->GetPluginInterface(
@@ -1205,7 +1218,7 @@
   return !!plugin_mouse_lock_interface_;
 }
 
-bool PluginInstanceImpl::LoadPdfInterface() {
+bool PepperPluginInstanceImpl::LoadPdfInterface() {
   if (!checked_for_plugin_pdf_interface_) {
     checked_for_plugin_pdf_interface_ = true;
     plugin_pdf_interface_ =
@@ -1216,7 +1229,7 @@
   return !!plugin_pdf_interface_;
 }
 
-bool PluginInstanceImpl::LoadPrintInterface() {
+bool PepperPluginInstanceImpl::LoadPrintInterface() {
   // Only check for the interface if the plugin has dev permission.
   if (!module_->permissions().HasPermission(::ppapi::PERMISSION_DEV))
     return false;
@@ -1227,7 +1240,7 @@
   return !!plugin_print_interface_;
 }
 
-bool PluginInstanceImpl::LoadPrivateInterface() {
+bool PepperPluginInstanceImpl::LoadPrivateInterface() {
   // Only check for the interface if the plugin has private permission.
   if (!module_->permissions().HasPermission(::ppapi::PERMISSION_PRIVATE))
     return false;
@@ -1239,7 +1252,7 @@
   return !!plugin_private_interface_;
 }
 
-bool PluginInstanceImpl::LoadSelectionInterface() {
+bool PepperPluginInstanceImpl::LoadSelectionInterface() {
   if (!plugin_selection_interface_) {
     plugin_selection_interface_ =
         static_cast<const PPP_Selection_Dev*>(module_->GetPluginInterface(
@@ -1248,7 +1261,7 @@
   return !!plugin_selection_interface_;
 }
 
-bool PluginInstanceImpl::LoadTextInputInterface() {
+bool PepperPluginInstanceImpl::LoadTextInputInterface() {
   if (!plugin_textinput_interface_) {
     plugin_textinput_interface_ =
         static_cast<const PPP_TextInput_Dev*>(module_->GetPluginInterface(
@@ -1258,7 +1271,7 @@
   return !!plugin_textinput_interface_;
 }
 
-bool PluginInstanceImpl::LoadZoomInterface() {
+bool PepperPluginInstanceImpl::LoadZoomInterface() {
   if (!plugin_zoom_interface_) {
     plugin_zoom_interface_ =
         static_cast<const PPP_Zoom_Dev*>(module_->GetPluginInterface(
@@ -1268,13 +1281,13 @@
   return !!plugin_zoom_interface_;
 }
 
-bool PluginInstanceImpl::PluginHasFocus() const {
+bool PepperPluginInstanceImpl::PluginHasFocus() const {
   return flash_fullscreen_ || (has_webkit_focus_ && has_content_area_focus_);
 }
 
-void PluginInstanceImpl::SendFocusChangeNotification() {
-  // This call can happen during PluginInstanceImpl destruction, because WebKit
-  // informs the plugin it's losing focus. See crbug.com/236574
+void PepperPluginInstanceImpl::SendFocusChangeNotification() {
+  // This call can happen during PepperPluginInstanceImpl destruction, because
+  // WebKit informs the plugin it's losing focus. See crbug.com/236574
   if (!delegate_ || !instance_interface_)
     return;
   bool has_focus = PluginHasFocus();
@@ -1282,7 +1295,7 @@
   instance_interface_->DidChangeFocus(pp_instance(), PP_FromBool(has_focus));
 }
 
-void PluginInstanceImpl::UpdateTouchEventRequest() {
+void PepperPluginInstanceImpl::UpdateTouchEventRequest() {
   bool raw_touch = (filtered_input_event_mask_ & PP_INPUTEVENT_CLASS_TOUCH) ||
                    (input_event_mask_ & PP_INPUTEVENT_CLASS_TOUCH);
   container_->requestTouchEventType(raw_touch ?
@@ -1290,21 +1303,21 @@
       WebKit::WebPluginContainer::TouchEventRequestTypeSynthesizedMouse);
 }
 
-bool PluginInstanceImpl::IsAcceptingWheelEvents() const {
+bool PepperPluginInstanceImpl::IsAcceptingWheelEvents() const {
   return (filtered_input_event_mask_ & PP_INPUTEVENT_CLASS_WHEEL) ||
       (input_event_mask_ & PP_INPUTEVENT_CLASS_WHEEL);
 }
 
-void PluginInstanceImpl::ScheduleAsyncDidChangeView() {
+void PepperPluginInstanceImpl::ScheduleAsyncDidChangeView() {
   if (view_change_weak_ptr_factory_.HasWeakPtrs())
     return;  // Already scheduled.
   base::MessageLoop::current()->PostTask(
       FROM_HERE,
-      base::Bind(&PluginInstanceImpl::SendAsyncDidChangeView,
+      base::Bind(&PepperPluginInstanceImpl::SendAsyncDidChangeView,
                  view_change_weak_ptr_factory_.GetWeakPtr()));
 }
 
-void PluginInstanceImpl::SendAsyncDidChangeView() {
+void PepperPluginInstanceImpl::SendAsyncDidChangeView() {
   // The bound callback that owns the weak pointer is still valid until after
   // this function returns. SendDidChangeView checks HasWeakPtrs, so we need to
   // invalidate them here.
@@ -1314,7 +1327,7 @@
   SendDidChangeView();
 }
 
-void PluginInstanceImpl::SendDidChangeView() {
+void PepperPluginInstanceImpl::SendDidChangeView() {
   // Don't send DidChangeView to crashed plugins.
   if (module()->is_crashed())
     return;
@@ -1346,7 +1359,7 @@
                                      &view_data_.clip_rect);
 }
 
-void PluginInstanceImpl::ReportGeometry() {
+void PepperPluginInstanceImpl::ReportGeometry() {
   // If this call was delayed, we may have transitioned back to fullscreen in
   // the mean time, so only report the geometry if we are actually in normal
   // mode.
@@ -1354,10 +1367,10 @@
     container_->reportGeometry();
 }
 
-bool PluginInstanceImpl::GetPreferredPrintOutputFormat(
+bool PepperPluginInstanceImpl::GetPreferredPrintOutputFormat(
     PP_PrintOutputFormat_Dev* format) {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   if (!LoadPrintInterface())
     return false;
   uint32_t supported_formats =
@@ -1369,21 +1382,21 @@
   return false;
 }
 
-bool PluginInstanceImpl::SupportsPrintInterface() {
+bool PepperPluginInstanceImpl::SupportsPrintInterface() {
   PP_PrintOutputFormat_Dev format;
   return GetPreferredPrintOutputFormat(&format);
 }
 
-bool PluginInstanceImpl::IsPrintScalingDisabled() {
+bool PepperPluginInstanceImpl::IsPrintScalingDisabled() {
   DCHECK(plugin_print_interface_);
   if (!plugin_print_interface_)
     return false;
   return plugin_print_interface_->IsScalingDisabled(pp_instance()) == PP_TRUE;
 }
 
-int PluginInstanceImpl::PrintBegin(const WebPrintParams& print_params) {
+int PepperPluginInstanceImpl::PrintBegin(const WebPrintParams& print_params) {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   PP_PrintOutputFormat_Dev format;
   if (!GetPreferredPrintOutputFormat(&format)) {
     // PrintBegin should not have been called since SupportsPrintInterface
@@ -1412,7 +1425,8 @@
   return num_pages;
 }
 
-bool PluginInstanceImpl::PrintPage(int page_number, WebKit::WebCanvas* canvas) {
+bool PepperPluginInstanceImpl::PrintPage(int page_number,
+                                         WebKit::WebCanvas* canvas) {
 #if defined(ENABLE_PRINTING)
   DCHECK(plugin_print_interface_);
   PP_PrintPageNumberRange_Dev page_range;
@@ -1435,12 +1449,12 @@
 #endif
 }
 
-bool PluginInstanceImpl::PrintPageHelper(
+bool PepperPluginInstanceImpl::PrintPageHelper(
     PP_PrintPageNumberRange_Dev* page_ranges,
     int num_ranges,
     WebKit::WebCanvas* canvas) {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   DCHECK(plugin_print_interface_);
   if (!plugin_print_interface_)
     return false;
@@ -1460,9 +1474,9 @@
   return ret;
 }
 
-void PluginInstanceImpl::PrintEnd() {
+void PepperPluginInstanceImpl::PrintEnd() {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   if (!ranges_.empty())
     PrintPageHelper(&(ranges_.front()), ranges_.size(), canvas_.get());
   canvas_.clear();
@@ -1478,14 +1492,14 @@
 #endif  // defined(OS_MACOSX)
 }
 
-bool PluginInstanceImpl::CanRotateView() {
+bool PepperPluginInstanceImpl::CanRotateView() {
   if (!LoadPdfInterface())
     return false;
 
   return true;
 }
 
-void PluginInstanceImpl::SetBoundGraphics2DForTest(
+void PepperPluginInstanceImpl::SetBoundGraphics2DForTest(
     PluginDelegate::PlatformGraphics2D* graphics) {
   BindGraphics(pp_instance(), 0);  // Unbind any old stuff.
   if (graphics) {
@@ -1494,7 +1508,7 @@
   }
 }
 
-void PluginInstanceImpl::RotateView(WebPlugin::RotationType type) {
+void PepperPluginInstanceImpl::RotateView(WebPlugin::RotationType type) {
   if (!LoadPdfInterface())
     return;
   PP_PrivatePageTransformType transform_type =
@@ -1505,17 +1519,17 @@
   // NOTE: plugin instance may have been deleted.
 }
 
-bool PluginInstanceImpl::FlashIsFullscreenOrPending() {
+bool PepperPluginInstanceImpl::FlashIsFullscreenOrPending() {
   return fullscreen_container_ != NULL;
 }
 
-bool PluginInstanceImpl::IsFullscreenOrPending() {
+bool PepperPluginInstanceImpl::IsFullscreenOrPending() {
   return desired_fullscreen_state_;
 }
 
-bool PluginInstanceImpl::SetFullscreen(bool fullscreen) {
+bool PepperPluginInstanceImpl::SetFullscreen(bool fullscreen) {
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
 
   // Check whether we are trying to switch to the state we're already going
   // to (i.e. if we're already switching to fullscreen but the fullscreen
@@ -1549,7 +1563,8 @@
   return true;
 }
 
-void PluginInstanceImpl::UpdateFlashFullscreenState(bool flash_fullscreen) {
+void PepperPluginInstanceImpl::UpdateFlashFullscreenState(
+    bool flash_fullscreen) {
   bool is_mouselock_pending = TrackedCallback::IsPending(lock_mouse_callback_);
 
   if (flash_fullscreen == flash_fullscreen_) {
@@ -1583,7 +1598,7 @@
     SendFocusChangeNotification();
 }
 
-bool PluginInstanceImpl::IsViewAccelerated() {
+bool PepperPluginInstanceImpl::IsViewAccelerated() {
   if (!container_)
     return false;
 
@@ -1598,12 +1613,12 @@
   return view->isAcceleratedCompositingActive();
 }
 
-PluginDelegate::PlatformContext3D* PluginInstanceImpl::CreateContext3D() {
+PluginDelegate::PlatformContext3D* PepperPluginInstanceImpl::CreateContext3D() {
   return delegate_->CreateContext3D();
 }
 
-bool PluginInstanceImpl::PrintPDFOutput(PP_Resource print_output,
-                                        WebKit::WebCanvas* canvas) {
+bool PepperPluginInstanceImpl::PrintPDFOutput(PP_Resource print_output,
+                                              WebKit::WebCanvas* canvas) {
 #if defined(ENABLE_PRINTING)
   ::ppapi::thunk::EnterResourceNoLock<PPB_Buffer_API> enter(print_output, true);
   if (enter.failed())
@@ -1695,13 +1710,13 @@
 }
 
 PluginDelegate::PlatformGraphics2D*
-    PluginInstanceImpl::GetBoundGraphics2D() const {
+    PepperPluginInstanceImpl::GetBoundGraphics2D() const {
   return bound_graphics_2d_platform_;
 }
 
 static void IgnoreCallback(unsigned, bool) {}
 
-void PluginInstanceImpl::UpdateLayer() {
+void PepperPluginInstanceImpl::UpdateLayer() {
   if (!container_)
     return;
 
@@ -1745,19 +1760,19 @@
   layer_bound_to_fullscreen_ = !!fullscreen_container_;
 }
 
-void PluginInstanceImpl::AddPluginObject(PluginObject* plugin_object) {
+void PepperPluginInstanceImpl::AddPluginObject(PluginObject* plugin_object) {
   DCHECK(live_plugin_objects_.find(plugin_object) ==
          live_plugin_objects_.end());
   live_plugin_objects_.insert(plugin_object);
 }
 
-void PluginInstanceImpl::RemovePluginObject(PluginObject* plugin_object) {
+void PepperPluginInstanceImpl::RemovePluginObject(PluginObject* plugin_object) {
   // Don't actually verify that the object is in the set since during module
   // deletion we'll be in the process of freeing them.
   live_plugin_objects_.erase(plugin_object);
 }
 
-bool PluginInstanceImpl::IsProcessingUserGesture() {
+bool PepperPluginInstanceImpl::IsProcessingUserGesture() {
   PP_TimeTicks now =
       ::ppapi::TimeTicksToPPTimeTicks(base::TimeTicks::Now());
   // Give a lot of slack so tests won't be flaky.
@@ -1766,30 +1781,31 @@
          (now - pending_user_gesture_ < kUserGestureDurationInSeconds);
 }
 
-WebUserGestureToken PluginInstanceImpl::CurrentUserGestureToken() {
+WebUserGestureToken PepperPluginInstanceImpl::CurrentUserGestureToken() {
   if (!IsProcessingUserGesture())
     pending_user_gesture_token_ = WebUserGestureToken();
   return pending_user_gesture_token_;
 }
 
-void PluginInstanceImpl::OnLockMouseACK(bool succeeded) {
+void PepperPluginInstanceImpl::OnLockMouseACK(bool succeeded) {
   if (TrackedCallback::IsPending(lock_mouse_callback_))
     lock_mouse_callback_->Run(succeeded ? PP_OK : PP_ERROR_FAILED);
 }
 
-void PluginInstanceImpl::OnMouseLockLost() {
+void PepperPluginInstanceImpl::OnMouseLockLost() {
   if (LoadMouseLockInterface())
     plugin_mouse_lock_interface_->MouseLockLost(pp_instance());
 }
 
-void PluginInstanceImpl::HandleMouseLockedInputEvent(
+void PepperPluginInstanceImpl::HandleMouseLockedInputEvent(
     const WebKit::WebMouseEvent& event) {
   // |cursor_info| is ignored since it is hidden when the mouse is locked.
   WebKit::WebCursorInfo cursor_info;
   HandleInputEvent(event, &cursor_info);
 }
 
-void PluginInstanceImpl::SimulateInputEvent(const InputEventData& input_event) {
+void PepperPluginInstanceImpl::SimulateInputEvent(
+    const InputEventData& input_event) {
   WebView* web_view = container()->element().document().frame()->view();
   if (!web_view) {
     NOTREACHED();
@@ -1811,7 +1827,8 @@
   }
 }
 
-bool PluginInstanceImpl::SimulateIMEEvent(const InputEventData& input_event) {
+bool PepperPluginInstanceImpl::SimulateIMEEvent(
+    const InputEventData& input_event) {
   switch (input_event.event_type) {
     case PP_INPUTEVENT_TYPE_IME_COMPOSITION_START:
     case PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE:
@@ -1831,7 +1848,7 @@
   return true;
 }
 
-void PluginInstanceImpl::SimulateImeSetCompositionEvent(
+void PepperPluginInstanceImpl::SimulateImeSetCompositionEvent(
     const InputEventData& input_event) {
   std::vector<size_t> offsets;
   offsets.push_back(input_event.composition_selection_start);
@@ -1857,7 +1874,8 @@
       utf16_text, underlines, offsets[0], offsets[1]);
 }
 
-ContentDecryptorDelegate* PluginInstanceImpl::GetContentDecryptorDelegate() {
+ContentDecryptorDelegate*
+    PepperPluginInstanceImpl::GetContentDecryptorDelegate() {
   if (content_decryptor_delegate_)
     return content_decryptor_delegate_.get();
 
@@ -1873,9 +1891,9 @@
   return content_decryptor_delegate_.get();
 }
 
-PP_Bool PluginInstanceImpl::BindGraphics(PP_Instance instance,
-                                         PP_Resource device) {
-  TRACE_EVENT0("ppapi", "PluginInstanceImpl::BindGraphics");
+PP_Bool PepperPluginInstanceImpl::BindGraphics(PP_Instance instance,
+                                               PP_Resource device) {
+  TRACE_EVENT0("ppapi", "PepperPluginInstanceImpl::BindGraphics");
   // The Graphics3D instance can't be destroyed until we call
   // UpdateLayer().
   scoped_refptr< ::ppapi::Resource> old_graphics = bound_graphics_3d_.get();
@@ -1928,19 +1946,19 @@
   return PP_FALSE;
 }
 
-PP_Bool PluginInstanceImpl::IsFullFrame(PP_Instance instance) {
+PP_Bool PepperPluginInstanceImpl::IsFullFrame(PP_Instance instance) {
   return PP_FromBool(full_frame());
 }
 
-const ViewData* PluginInstanceImpl::GetViewData(PP_Instance instance) {
+const ViewData* PepperPluginInstanceImpl::GetViewData(PP_Instance instance) {
   return &view_data_;
 }
 
-PP_Bool PluginInstanceImpl::FlashIsFullscreen(PP_Instance instance) {
+PP_Bool PepperPluginInstanceImpl::FlashIsFullscreen(PP_Instance instance) {
   return PP_FromBool(flash_fullscreen_);
 }
 
-PP_Var PluginInstanceImpl::GetWindowObject(PP_Instance instance) {
+PP_Var PepperPluginInstanceImpl::GetWindowObject(PP_Instance instance) {
   if (!container_)
     return PP_MakeUndefined();
 
@@ -1951,19 +1969,19 @@
   return NPObjectToPPVar(this, frame->windowObject());
 }
 
-PP_Var PluginInstanceImpl::GetOwnerElementObject(PP_Instance instance) {
+PP_Var PepperPluginInstanceImpl::GetOwnerElementObject(PP_Instance instance) {
   if (!container_)
     return PP_MakeUndefined();
   return NPObjectToPPVar(this, container_->scriptableObjectForElement());
 }
 
-PP_Var PluginInstanceImpl::ExecuteScript(PP_Instance instance,
-                                         PP_Var script,
-                                         PP_Var* exception) {
+PP_Var PepperPluginInstanceImpl::ExecuteScript(PP_Instance instance,
+                                               PP_Var script,
+                                               PP_Var* exception) {
   // Executing the script may remove the plugin from the DOM, so we need to keep
   // a reference to ourselves so that we can still process the result after the
   // WebBindings::evaluate() below.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
   TryCatch try_catch(exception);
   if (try_catch.has_exception())
     return PP_MakeUndefined();
@@ -2008,17 +2026,17 @@
   return ret;
 }
 
-uint32_t PluginInstanceImpl::GetAudioHardwareOutputSampleRate(
+uint32_t PepperPluginInstanceImpl::GetAudioHardwareOutputSampleRate(
     PP_Instance instance) {
   return delegate()->GetAudioHardwareOutputSampleRate();
 }
 
-uint32_t PluginInstanceImpl::GetAudioHardwareOutputBufferSize(
+uint32_t PepperPluginInstanceImpl::GetAudioHardwareOutputBufferSize(
     PP_Instance instance) {
   return delegate()->GetAudioHardwareOutputBufferSize();
 }
 
-PP_Var PluginInstanceImpl::GetDefaultCharSet(PP_Instance instance) {
+PP_Var PepperPluginInstanceImpl::GetDefaultCharSet(PP_Instance instance) {
   std::string encoding = delegate()->GetDefaultEncoding();
   return StringVar::StringToPPVar(encoding);
 }
@@ -2027,45 +2045,46 @@
 // PPP_ContentDecryptor_Private calls made on |content_decryptor_delegate_|.
 // Therefore, |content_decryptor_delegate_| must have been initialized when
 // the following methods are called.
-void PluginInstanceImpl::NeedKey(PP_Instance instance,
-                                 PP_Var key_system_var,
-                                 PP_Var session_id_var,
-                                 PP_Var init_data_var) {
+void PepperPluginInstanceImpl::NeedKey(PP_Instance instance,
+                                       PP_Var key_system_var,
+                                       PP_Var session_id_var,
+                                       PP_Var init_data_var) {
   content_decryptor_delegate_->NeedKey(
       key_system_var, session_id_var, init_data_var);
 }
 
-void PluginInstanceImpl::KeyAdded(PP_Instance instance,
-                                  PP_Var key_system_var,
-                                  PP_Var session_id_var) {
+void PepperPluginInstanceImpl::KeyAdded(PP_Instance instance,
+                                        PP_Var key_system_var,
+                                        PP_Var session_id_var) {
   content_decryptor_delegate_->KeyAdded(key_system_var, session_id_var);
 }
 
-void PluginInstanceImpl::KeyMessage(PP_Instance instance,
-                                    PP_Var key_system_var,
-                                    PP_Var session_id_var,
-                                    PP_Var message_var,
-                                    PP_Var default_url_var) {
+void PepperPluginInstanceImpl::KeyMessage(PP_Instance instance,
+                                          PP_Var key_system_var,
+                                          PP_Var session_id_var,
+                                          PP_Var message_var,
+                                          PP_Var default_url_var) {
   content_decryptor_delegate_->KeyMessage(
       key_system_var, session_id_var, message_var, default_url_var);
 }
 
-void PluginInstanceImpl::KeyError(PP_Instance instance,
-                                  PP_Var key_system_var,
-                                  PP_Var session_id_var,
-                                  int32_t media_error,
-                                  int32_t system_code) {
+void PepperPluginInstanceImpl::KeyError(PP_Instance instance,
+                                        PP_Var key_system_var,
+                                        PP_Var session_id_var,
+                                        int32_t media_error,
+                                        int32_t system_code) {
   content_decryptor_delegate_->KeyError(
       key_system_var, session_id_var, media_error, system_code);
 }
 
-void PluginInstanceImpl::DeliverBlock(PP_Instance instance,
-                                      PP_Resource decrypted_block,
-                                      const PP_DecryptedBlockInfo* block_info) {
+void PepperPluginInstanceImpl::DeliverBlock(
+    PP_Instance instance,
+    PP_Resource decrypted_block,
+    const PP_DecryptedBlockInfo* block_info) {
   content_decryptor_delegate_->DeliverBlock(decrypted_block, block_info);
 }
 
-void PluginInstanceImpl::DecoderInitializeDone(
+void PepperPluginInstanceImpl::DecoderInitializeDone(
     PP_Instance instance,
     PP_DecryptorStreamType decoder_type,
     uint32_t request_id,
@@ -2074,7 +2093,7 @@
       decoder_type, request_id, success);
 }
 
-void PluginInstanceImpl::DecoderDeinitializeDone(
+void PepperPluginInstanceImpl::DecoderDeinitializeDone(
     PP_Instance instance,
     PP_DecryptorStreamType decoder_type,
     uint32_t request_id) {
@@ -2082,56 +2101,60 @@
                                                        request_id);
 }
 
-void PluginInstanceImpl::DecoderResetDone(PP_Instance instance,
-                                          PP_DecryptorStreamType decoder_type,
-                                          uint32_t request_id) {
+void PepperPluginInstanceImpl::DecoderResetDone(
+    PP_Instance instance,
+    PP_DecryptorStreamType decoder_type,
+    uint32_t request_id) {
   content_decryptor_delegate_->DecoderResetDone(decoder_type, request_id);
 }
 
 
-void PluginInstanceImpl::DeliverFrame(PP_Instance instance,
-                                      PP_Resource decrypted_frame,
-                                      const PP_DecryptedFrameInfo* frame_info) {
+void PepperPluginInstanceImpl::DeliverFrame(
+    PP_Instance instance,
+    PP_Resource decrypted_frame,
+    const PP_DecryptedFrameInfo* frame_info) {
   content_decryptor_delegate_->DeliverFrame(decrypted_frame, frame_info);
 }
 
-void PluginInstanceImpl::DeliverSamples(
+void PepperPluginInstanceImpl::DeliverSamples(
     PP_Instance instance,
     PP_Resource audio_frames,
     const PP_DecryptedBlockInfo* block_info) {
   content_decryptor_delegate_->DeliverSamples(audio_frames, block_info);
 }
 
-void PluginInstanceImpl::NumberOfFindResultsChanged(PP_Instance instance,
-                                                    int32_t total,
-                                                    PP_Bool final_result) {
+void PepperPluginInstanceImpl::NumberOfFindResultsChanged(
+    PP_Instance instance,
+    int32_t total,
+    PP_Bool final_result) {
   DCHECK_NE(find_identifier_, -1);
   delegate_->NumberOfFindResultsChanged(find_identifier_, total,
                                         PP_ToBool(final_result));
 }
 
-void PluginInstanceImpl::SelectedFindResultChanged(PP_Instance instance,
-                                                   int32_t index) {
+void PepperPluginInstanceImpl::SelectedFindResultChanged(PP_Instance instance,
+                                                         int32_t index) {
   DCHECK_NE(find_identifier_, -1);
   delegate_->SelectedFindResultChanged(find_identifier_, index);
 }
 
-PP_Bool PluginInstanceImpl::IsFullscreen(PP_Instance instance) {
+PP_Bool PepperPluginInstanceImpl::IsFullscreen(PP_Instance instance) {
   return PP_FromBool(view_data_.is_fullscreen);
 }
 
-PP_Bool PluginInstanceImpl::SetFullscreen(PP_Instance instance,
-                                          PP_Bool fullscreen) {
+PP_Bool PepperPluginInstanceImpl::SetFullscreen(PP_Instance instance,
+                                                PP_Bool fullscreen) {
   return PP_FromBool(SetFullscreen(PP_ToBool(fullscreen)));
 }
 
-PP_Bool PluginInstanceImpl::GetScreenSize(PP_Instance instance, PP_Size* size) {
+PP_Bool PepperPluginInstanceImpl::GetScreenSize(PP_Instance instance,
+                                                PP_Size* size) {
   gfx::Size screen_size = delegate()->GetScreenSize();
   *size = PP_MakeSize(screen_size.width(), screen_size.height());
   return PP_TRUE;
 }
 
-::ppapi::Resource* PluginInstanceImpl::GetSingletonResource(
+::ppapi::Resource* PepperPluginInstanceImpl::GetSingletonResource(
     PP_Instance instance,
     ::ppapi::SingletonResourceID id) {
   // Flash APIs and some others aren't implemented in-process.
@@ -2157,15 +2180,15 @@
   return NULL;
 }
 
-int32_t PluginInstanceImpl::RequestInputEvents(PP_Instance instance,
-                                               uint32_t event_classes) {
+int32_t PepperPluginInstanceImpl::RequestInputEvents(PP_Instance instance,
+                                                     uint32_t event_classes) {
   input_event_mask_ |= event_classes;
   filtered_input_event_mask_ &= ~(event_classes);
   RequestInputEventsHelper(event_classes);
   return ValidateRequestInputEvents(false, event_classes);
 }
 
-int32_t PluginInstanceImpl::RequestFilteringInputEvents(
+int32_t PepperPluginInstanceImpl::RequestFilteringInputEvents(
     PP_Instance instance,
     uint32_t event_classes) {
   filtered_input_event_mask_ |= event_classes;
@@ -2174,24 +2197,25 @@
   return ValidateRequestInputEvents(true, event_classes);
 }
 
-void PluginInstanceImpl::ClearInputEventRequest(PP_Instance instance,
-                                                uint32_t event_classes) {
+void PepperPluginInstanceImpl::ClearInputEventRequest(PP_Instance instance,
+                                                      uint32_t event_classes) {
   input_event_mask_ &= ~(event_classes);
   filtered_input_event_mask_ &= ~(event_classes);
   RequestInputEventsHelper(event_classes);
 }
 
-void PluginInstanceImpl::ZoomChanged(PP_Instance instance, double factor) {
+void PepperPluginInstanceImpl::ZoomChanged(PP_Instance instance,
+                                           double factor) {
   // We only want to tell the page to change its zoom if the whole page is the
   // plugin.  If we're in an iframe, then don't do anything.
   if (!IsFullPagePlugin())
     return;
-  container()->zoomLevelChanged(WebView::zoomFactorToZoomLevel(factor));
+  container()->zoomLevelChanged(content::ZoomFactorToZoomLevel(factor));
 }
 
-void PluginInstanceImpl::ZoomLimitsChanged(PP_Instance instance,
-                                           double minimum_factor,
-                                           double maximium_factor) {
+void PepperPluginInstanceImpl::ZoomLimitsChanged(PP_Instance instance,
+                                                 double minimum_factor,
+                                                 double maximium_factor) {
   if (minimum_factor > maximium_factor) {
     NOTREACHED();
     return;
@@ -2199,14 +2223,15 @@
   delegate()->ZoomLimitsChanged(minimum_factor, maximium_factor);
 }
 
-void PluginInstanceImpl::PostMessage(PP_Instance instance, PP_Var message) {
+void PepperPluginInstanceImpl::PostMessage(PP_Instance instance,
+                                           PP_Var message) {
   message_channel_->PostMessageToJavaScript(message);
 }
 
-PP_Bool PluginInstanceImpl::SetCursor(PP_Instance instance,
-                                      PP_MouseCursor_Type type,
-                                      PP_Resource image,
-                                      const PP_Point* hot_spot) {
+PP_Bool PepperPluginInstanceImpl::SetCursor(PP_Instance instance,
+                                            PP_MouseCursor_Type type,
+                                            PP_Resource image,
+                                            const PP_Point* hot_spot) {
   if (!ValidateSetCursorParams(type, image, hot_spot))
     return PP_FALSE;
 
@@ -2242,8 +2267,9 @@
   return PP_TRUE;
 }
 
-int32_t PluginInstanceImpl::LockMouse(PP_Instance instance,
-                                      scoped_refptr<TrackedCallback> callback) {
+int32_t PepperPluginInstanceImpl::LockMouse(
+    PP_Instance instance,
+    scoped_refptr<TrackedCallback> callback) {
   if (TrackedCallback::IsPending(lock_mouse_callback_))
     return PP_ERROR_INPROGRESS;
 
@@ -2271,12 +2297,12 @@
   return PP_OK_COMPLETIONPENDING;
 }
 
-void PluginInstanceImpl::UnlockMouse(PP_Instance instance) {
+void PepperPluginInstanceImpl::UnlockMouse(PP_Instance instance) {
   delegate()->UnlockMouse(this);
 }
 
-void PluginInstanceImpl::SetTextInputType(PP_Instance instance,
-                                          PP_TextInput_Type type) {
+void PepperPluginInstanceImpl::SetTextInputType(PP_Instance instance,
+                                                PP_TextInput_Type type) {
   int itype = type;
   if (itype < 0 || itype > ui::TEXT_INPUT_TYPE_URL)
     itype = ui::TEXT_INPUT_TYPE_NONE;
@@ -2284,20 +2310,21 @@
   delegate()->PluginTextInputTypeChanged(this);
 }
 
-void PluginInstanceImpl::UpdateCaretPosition(PP_Instance instance,
-                                             const PP_Rect& caret,
-                                             const PP_Rect& bounding_box) {
+void PepperPluginInstanceImpl::UpdateCaretPosition(
+    PP_Instance instance,
+    const PP_Rect& caret,
+    const PP_Rect& bounding_box) {
   text_input_caret_ = PP_ToGfxRect(caret);
   text_input_caret_bounds_ = PP_ToGfxRect(bounding_box);
   text_input_caret_set_ = true;
   delegate()->PluginCaretPositionChanged(this);
 }
 
-void PluginInstanceImpl::CancelCompositionText(PP_Instance instance) {
+void PepperPluginInstanceImpl::CancelCompositionText(PP_Instance instance) {
   delegate()->PluginRequestedCancelComposition(this);
 }
 
-void PluginInstanceImpl::SelectionChanged(PP_Instance instance) {
+void PepperPluginInstanceImpl::SelectionChanged(PP_Instance instance) {
   // TODO(kinaba): currently the browser always calls RequestSurroundingText.
   // It can be optimized so that it won't call it back until the information
   // is really needed.
@@ -2308,22 +2335,22 @@
   // lifetime of the instance.
   base::MessageLoop::current()->PostTask(
       FROM_HERE,
-      base::Bind(&PluginInstanceImpl::RequestSurroundingText,
+      base::Bind(&PepperPluginInstanceImpl::RequestSurroundingText,
                  AsWeakPtr(),
                  static_cast<size_t>(kExtraCharsForTextInput)));
 }
 
-void PluginInstanceImpl::UpdateSurroundingText(PP_Instance instance,
-                                               const char* text,
-                                               uint32_t caret,
-                                               uint32_t anchor) {
+void PepperPluginInstanceImpl::UpdateSurroundingText(PP_Instance instance,
+                                                     const char* text,
+                                                     uint32_t caret,
+                                                     uint32_t anchor) {
   surrounding_text_ = text;
   selection_caret_ = caret;
   selection_anchor_ = anchor;
   delegate()->PluginSelectionChanged(this);
 }
 
-PP_Var PluginInstanceImpl::ResolveRelativeToDocument(
+PP_Var PepperPluginInstanceImpl::ResolveRelativeToDocument(
     PP_Instance instance,
     PP_Var relative,
     PP_URLComponents_Dev* components) {
@@ -2338,8 +2365,8 @@
       components);
 }
 
-PP_Bool PluginInstanceImpl::DocumentCanRequest(PP_Instance instance,
-                                               PP_Var url) {
+PP_Bool PepperPluginInstanceImpl::DocumentCanRequest(PP_Instance instance,
+                                                     PP_Var url) {
   StringVar* url_string = StringVar::FromPPVar(url);
   if (!url_string)
     return PP_FALSE;
@@ -2355,8 +2382,9 @@
   return BoolToPPBool(security_origin.canRequest(gurl));
 }
 
-PP_Bool PluginInstanceImpl::DocumentCanAccessDocument(PP_Instance instance,
-                                                      PP_Instance target) {
+PP_Bool PepperPluginInstanceImpl::DocumentCanAccessDocument(
+    PP_Instance instance,
+    PP_Instance target) {
   WebKit::WebSecurityOrigin our_origin;
   if (!SecurityOriginForInstance(instance, &our_origin))
     return PP_FALSE;
@@ -2368,21 +2396,22 @@
   return BoolToPPBool(our_origin.canAccess(target_origin));
 }
 
-PP_Var PluginInstanceImpl::GetDocumentURL(PP_Instance instance,
-                                          PP_URLComponents_Dev* components) {
+PP_Var PepperPluginInstanceImpl::GetDocumentURL(
+    PP_Instance instance,
+    PP_URLComponents_Dev* components) {
   WebKit::WebDocument document = container()->element().document();
   return ::ppapi::PPB_URLUtil_Shared::GenerateURLReturn(document.url(),
                                                         components);
 }
 
-PP_Var PluginInstanceImpl::GetPluginInstanceURL(
+PP_Var PepperPluginInstanceImpl::GetPluginInstanceURL(
     PP_Instance instance,
     PP_URLComponents_Dev* components) {
   return ::ppapi::PPB_URLUtil_Shared::GenerateURLReturn(plugin_url_,
                                                         components);
 }
 
-PP_ExternalPluginResult PluginInstanceImpl::ResetAsProxied(
+PP_ExternalPluginResult PepperPluginInstanceImpl::ResetAsProxied(
     scoped_refptr<PluginModule> module) {
   // Save the original module and switch over to the new one now that this
   // plugin is using the IPC-based proxy.
@@ -2453,54 +2482,53 @@
   return PP_EXTERNAL_PLUGIN_OK;
 }
 
-bool PluginInstanceImpl::IsValidInstanceOf(PluginModule* module) {
+bool PepperPluginInstanceImpl::IsValidInstanceOf(PluginModule* module) {
   DCHECK(module);
   return module == module_.get() ||
          module == original_module_.get();
 }
 
-NPP PluginInstanceImpl::instanceNPP() {
+NPP PepperPluginInstanceImpl::instanceNPP() {
   return npp_.get();
 }
 
-v8::Isolate* PluginInstanceImpl::GetIsolate() const {
+v8::Isolate* PepperPluginInstanceImpl::GetIsolate() const {
   return isolate_;
 }
 
-PluginInstance* PluginInstance::Get(PP_Instance instance_id) {
+PepperPluginInstance* PepperPluginInstance::Get(PP_Instance instance_id) {
   return HostGlobals::Get()->GetInstance(instance_id);
 }
 
-content::RenderView* PluginInstanceImpl::GetRenderView() {
+RenderView* PepperPluginInstanceImpl::GetRenderView() {
   return render_view_;
 }
 
-WebKit::WebPluginContainer* PluginInstanceImpl::GetContainer() {
+WebKit::WebPluginContainer* PepperPluginInstanceImpl::GetContainer() {
   return container_;
 }
 
-::ppapi::VarTracker* PluginInstanceImpl::GetVarTracker() {
+::ppapi::VarTracker* PepperPluginInstanceImpl::GetVarTracker() {
   return HostGlobals::Get()->GetVarTracker();
 }
 
-const GURL& PluginInstanceImpl::GetPluginURL() {
+const GURL& PepperPluginInstanceImpl::GetPluginURL() {
   return plugin_url_;
 }
 
-base::FilePath PluginInstanceImpl::GetModulePath() {
+base::FilePath PepperPluginInstanceImpl::GetModulePath() {
   return module_->path();
 }
 
-PP_Resource PluginInstanceImpl::CreateExternalFileReference(
+PP_Resource PepperPluginInstanceImpl::CreateExternalFileReference(
     const base::FilePath& external_file_path) {
-  webkit::ppapi::PPB_FileRef_Impl* ref =
-      webkit::ppapi::PPB_FileRef_Impl::CreateExternal(
-          pp_instance(), external_file_path, "");
+  PPB_FileRef_Impl* ref = PPB_FileRef_Impl::CreateExternal(
+      pp_instance(), external_file_path, "");
   return ref->GetReference();
 }
 
-PP_Resource PluginInstanceImpl::CreateImage(gfx::ImageSkia* source_image,
-                                            float scale) {
+PP_Resource PepperPluginInstanceImpl::CreateImage(gfx::ImageSkia* source_image,
+                                                  float scale) {
   ui::ScaleFactor scale_factor = ui::GetScaleFactorFromScale(scale);
   gfx::ImageSkiaRep image_skia_rep = source_image->GetRepresentation(
       scale_factor);
@@ -2508,19 +2536,18 @@
   if (image_skia_rep.is_null() || image_skia_rep.scale_factor() != scale_factor)
     return 0;
 
-  scoped_refptr<webkit::ppapi::PPB_ImageData_Impl> image_data(
-      new webkit::ppapi::PPB_ImageData_Impl(
-          pp_instance(),
-          webkit::ppapi::PPB_ImageData_Impl::PLATFORM));
+  scoped_refptr<PPB_ImageData_Impl> image_data(new PPB_ImageData_Impl(
+      pp_instance(),
+      PPB_ImageData_Impl::PLATFORM));
   if (!image_data->Init(
-          webkit::ppapi::PPB_ImageData_Impl::GetNativeImageDataFormat(),
+          PPB_ImageData_Impl::GetNativeImageDataFormat(),
           image_skia_rep.pixel_width(),
           image_skia_rep.pixel_height(),
           false)) {
     return 0;
   }
 
-  webkit::ppapi::ImageDataAutoMapper mapper(image_data.get());
+  ImageDataAutoMapper mapper(image_data.get());
   if (!mapper.is_valid())
     return 0;
 
@@ -2532,7 +2559,7 @@
   return image_data->GetReference();
 }
 
-PP_ExternalPluginResult PluginInstanceImpl::SwitchToOutOfProcessProxy(
+PP_ExternalPluginResult PepperPluginInstanceImpl::SwitchToOutOfProcessProxy(
     const base::FilePath& file_path,
     ::ppapi::PpapiPermissions permissions,
     const IPC::ChannelHandle& channel_handle,
@@ -2542,10 +2569,10 @@
   // the IPC based out-of-process proxy. We can't use the existing module,
   // because it is configured for the in-process plugin, and we must keep it
   // that way to allow the page to create other instances.
-  scoped_refptr<webkit::ppapi::PluginModule> external_plugin_module(
+  scoped_refptr<PluginModule> external_plugin_module(
       module_->CreateModuleForExternalPluginInstance());
 
-  content::RendererPpapiHost* renderer_ppapi_host =
+  RendererPpapiHost* renderer_ppapi_host =
       delegate_->CreateExternalPluginModule(
           external_plugin_module,
           file_path,
@@ -2562,11 +2589,11 @@
   return external_plugin_module->InitAsProxiedExternalPlugin(this);
 }
 
-void PluginInstanceImpl::SetAlwaysOnTop(bool on_top) {
+void PepperPluginInstanceImpl::SetAlwaysOnTop(bool on_top) {
   always_on_top_ = on_top;
 }
 
-void PluginInstanceImpl::DoSetCursor(WebCursorInfo* cursor) {
+void PepperPluginInstanceImpl::DoSetCursor(WebCursorInfo* cursor) {
   cursor_.reset(cursor);
   if (fullscreen_container_) {
     fullscreen_container_->DidChangeCursor(*cursor);
@@ -2575,16 +2602,16 @@
   }
 }
 
-bool PluginInstanceImpl::IsFullPagePlugin() {
+bool PepperPluginInstanceImpl::IsFullPagePlugin() {
   WebFrame* frame = container()->element().document().frame();
   return frame->view()->mainFrame()->document().isPluginDocument();
 }
 
-void PluginInstanceImpl::FlashSetFullscreen(bool fullscreen,
-                                            bool delay_report) {
-  TRACE_EVENT0("ppapi", "PluginInstanceImpl::FlashSetFullscreen");
+void PepperPluginInstanceImpl::FlashSetFullscreen(bool fullscreen,
+                                                  bool delay_report) {
+  TRACE_EVENT0("ppapi", "PepperPluginInstanceImpl::FlashSetFullscreen");
   // Keep a reference on the stack. See NOTE above.
-  scoped_refptr<PluginInstanceImpl> ref(this);
+  scoped_refptr<PepperPluginInstanceImpl> ref(this);
 
   // We check whether we are trying to switch to the state we're already going
   // to (i.e. if we're already switching to fullscreen but the fullscreen
@@ -2607,21 +2634,23 @@
       ReportGeometry();
     } else {
       base::MessageLoop::current()->PostTask(
-          FROM_HERE, base::Bind(&PluginInstanceImpl::ReportGeometry, this));
+          FROM_HERE,
+          base::Bind(&PepperPluginInstanceImpl::ReportGeometry, this));
     }
   }
 }
 
-bool PluginInstanceImpl::IsRectTopmost(const gfx::Rect& rect) {
+bool PepperPluginInstanceImpl::IsRectTopmost(const gfx::Rect& rect) {
   if (flash_fullscreen_)
     return true;
 
   return container_->isRectTopmost(rect);
 }
 
-int32_t PluginInstanceImpl::Navigate(const ::ppapi::URLRequestInfoData& request,
-                                     const char* target,
-                                     bool from_user_action) {
+int32_t PepperPluginInstanceImpl::Navigate(
+    const ::ppapi::URLRequestInfoData& request,
+    const char* target,
+    bool from_user_action) {
   if (!container_)
     return PP_ERROR_FAILED;
 
@@ -2663,7 +2692,7 @@
   return PP_OK;
 }
 
-bool PluginInstanceImpl::CanAccessMainFrame() const {
+bool PepperPluginInstanceImpl::CanAccessMainFrame() const {
   if (!container_)
     return false;
   WebKit::WebDocument containing_document = container_->element().document();
@@ -2680,7 +2709,7 @@
       main_document.securityOrigin());
 }
 
-void PluginInstanceImpl::KeepSizeAttributesBeforeFullscreen() {
+void PepperPluginInstanceImpl::KeepSizeAttributesBeforeFullscreen() {
   WebElement element = container_->element();
   width_before_fullscreen_ = element.getAttribute(WebString::fromUTF8(kWidth));
   height_before_fullscreen_ =
@@ -2690,7 +2719,7 @@
   style_before_fullscreen_ = element.getAttribute(WebString::fromUTF8(kStyle));
 }
 
-void PluginInstanceImpl::SetSizeAttributesForFullscreen() {
+void PepperPluginInstanceImpl::SetSizeAttributesForFullscreen() {
   screen_size_for_fullscreen_ = delegate()->GetScreenSize();
   std::string width = StringPrintf("%d", screen_size_for_fullscreen_.width());
   std::string height = StringPrintf("%d", screen_size_for_fullscreen_.height());
@@ -2713,7 +2742,7 @@
   container_->element().setAttribute(kStyle, WebString::fromUTF8(style));
 }
 
-void PluginInstanceImpl::ResetSizeAttributesAfterFullscreen() {
+void PepperPluginInstanceImpl::ResetSizeAttributesAfterFullscreen() {
   screen_size_for_fullscreen_ = gfx::Size();
   WebElement element = container_->element();
   element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_);
@@ -2722,5 +2751,4 @@
   element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppapi_plugin_instance_impl.h b/content/renderer/pepper/pepper_plugin_instance_impl.h
similarity index 95%
rename from content/renderer/pepper/ppapi_plugin_instance_impl.h
rename to content/renderer/pepper/pepper_plugin_instance_impl.h
index c5d22c4..9b01645 100644
--- a/content/renderer/pepper/ppapi_plugin_instance_impl.h
+++ b/content/renderer/pepper/pepper_plugin_instance_impl.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 CONTENT_RENDERER_PEPPER_PPAPI_PLUGIN_INSTANCE_IMPL_H_
-#define CONTENT_RENDERER_PEPPER_PPAPI_PLUGIN_INSTANCE_IMPL_H_
+#ifndef CONTENT_RENDERER_PEPPER_PEPPER_PLUGIN_INSTANCE_IMPL_H_
+#define CONTENT_RENDERER_PEPPER_PEPPER_PLUGIN_INSTANCE_IMPL_H_
 
 #include <set>
 #include <string>
@@ -16,7 +16,7 @@
 #include "base/strings/string16.h"
 #include "cc/layers/texture_layer_client.h"
 #include "content/common/content_export.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/renderer/pepper/plugin_delegate.h"
 #include "content/renderer/pepper/ppp_pdf.h"
 #include "ppapi/c/dev/pp_cursor_type_dev.h"
@@ -92,8 +92,7 @@
 class Isolate;
 }
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class ContentDecryptorDelegate;
 class FullscreenContainer;
@@ -107,21 +106,21 @@
 
 // Represents one time a plugin appears on one web page.
 //
-// Note: to get from a PP_Instance to a PluginInstance*, use the
+// Note: to get from a PP_Instance to a PepperPluginInstance*, use the
 // ResourceTracker.
-class CONTENT_EXPORT PluginInstanceImpl
-    : public base::RefCounted<PluginInstanceImpl>,
-      public base::SupportsWeakPtr<PluginInstanceImpl>,
-      public NON_EXPORTED_BASE(PluginInstance),
+class CONTENT_EXPORT PepperPluginInstanceImpl
+    : public base::RefCounted<PepperPluginInstanceImpl>,
+      public base::SupportsWeakPtr<PepperPluginInstanceImpl>,
+      public NON_EXPORTED_BASE(PepperPluginInstance),
       public ::ppapi::PPB_Instance_Shared {
  public:
-  // Create and return a PluginInstanceImpl object which supports the most
+  // Create and return a PepperPluginInstanceImpl object which supports the most
   // recent version of PPP_Instance possible by querying the given
   // get_plugin_interface function. If the plugin does not support any valid
   // PPP_Instance interface, returns NULL.
-  static PluginInstanceImpl* Create(
+  static PepperPluginInstanceImpl* Create(
       PluginDelegate* delegate,
-      content::RenderView* render_view,
+      RenderView* render_view,
       PluginModule* module,
       WebKit::WebPluginContainer* container,
       const GURL& plugin_url);
@@ -352,8 +351,8 @@
 
   ContentDecryptorDelegate* GetContentDecryptorDelegate();
 
-  // webkit::ppapi::PluginInstance implementation
-  virtual content::RenderView* GetRenderView() OVERRIDE;
+  // PluginInstance implementation
+  virtual RenderView* GetRenderView() OVERRIDE;
   virtual WebKit::WebPluginContainer* GetContainer() OVERRIDE;
   virtual ::ppapi::VarTracker* GetVarTracker() OVERRIDE;
   virtual const GURL& GetPluginURL() OVERRIDE;
@@ -508,11 +507,11 @@
   v8::Isolate* GetIsolate() const;
 
  private:
-  friend class base::RefCounted<PluginInstanceImpl>;
+  friend class base::RefCounted<PepperPluginInstanceImpl>;
   friend class PpapiUnittest;
 
   // Delete should be called by the WebPlugin before this destructor.
-  virtual ~PluginInstanceImpl();
+  virtual ~PepperPluginInstanceImpl();
 
   // Class to record document load notifications and play them back once the
   // real document loader becomes available. Used only by NaCl instances.
@@ -540,7 +539,7 @@
   };
 
   // Implements PPB_Gamepad_API. This is just to avoid having an excessive
-  // number of interfaces implemented by PluginInstanceImpl.
+  // number of interfaces implemented by PepperPluginInstanceImpl.
   class GamepadImpl : public ::ppapi::thunk::PPB_Gamepad_API,
                       public ::ppapi::Resource {
    public:
@@ -554,16 +553,16 @@
     PluginDelegate* delegate_;
   };
 
-  // See the static Create functions above for creating PluginInstanceImpl
+  // See the static Create functions above for creating PepperPluginInstanceImpl
   // objects. This constructor is private so that we can hide the
   // PPP_Instance_Combined details while still having 1 constructor to maintain
   // for member initialization.
-  PluginInstanceImpl(PluginDelegate* delegate,
-                     content::RenderView* render_view,
-                     PluginModule* module,
-                     ::ppapi::PPP_Instance_Combined* instance_interface,
-                     WebKit::WebPluginContainer* container,
-                     const GURL& plugin_url);
+  PepperPluginInstanceImpl(PluginDelegate* delegate,
+                           RenderView* render_view,
+                           PluginModule* module,
+                           ::ppapi::PPP_Instance_Combined* instance_interface,
+                           WebKit::WebPluginContainer* container,
+                           const GURL& plugin_url);
 
   bool LoadFindInterface();
   bool LoadInputEventInterface();
@@ -649,7 +648,7 @@
   void ResetSizeAttributesAfterFullscreen();
 
   PluginDelegate* delegate_;
-  content::RenderView* render_view_;
+  RenderView* render_view_;
   scoped_refptr<PluginModule> module_;
   scoped_ptr< ::ppapi::PPP_Instance_Combined> instance_interface_;
   // If this is the NaCl plugin, we create a new module when we switch to the
@@ -689,7 +688,7 @@
   // already a weak ptr pending (HasWeakPtrs is true), code should update the
   // view_data_ but not send updates. This also allows us to cancel scheduled
   // view change events.
-  base::WeakPtrFactory<PluginInstanceImpl> view_change_weak_ptr_factory_;
+  base::WeakPtrFactory<PepperPluginInstanceImpl> view_change_weak_ptr_factory_;
 
   // The current device context for painting in 2D and 3D.
   scoped_refptr<PPB_Graphics3D_Impl> bound_graphics_3d_;
@@ -855,10 +854,9 @@
   v8::Isolate* isolate_;
 
   friend class PpapiPluginInstanceTest;
-  DISALLOW_COPY_AND_ASSIGN(PluginInstanceImpl);
+  DISALLOW_COPY_AND_ASSIGN(PepperPluginInstanceImpl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
-#endif  // CONTENT_RENDERER_PEPPER_PPAPI_PLUGIN_INSTANCE_IMPL_H_
+#endif  // CONTENT_RENDERER_PEPPER_PEPPER_PLUGIN_INSTANCE_IMPL_H_
diff --git a/content/renderer/pepper/ppapi_plugin_instance_unittest.cc b/content/renderer/pepper/pepper_plugin_instance_unittest.cc
similarity index 94%
rename from content/renderer/pepper/ppapi_plugin_instance_unittest.cc
rename to content/renderer/pepper/pepper_plugin_instance_unittest.cc
index ceaac04..5aa6e4a 100644
--- a/content/renderer/pepper/ppapi_plugin_instance_unittest.cc
+++ b/content/renderer/pepper/pepper_plugin_instance_unittest.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 "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 
 #include "base/basictypes.h"
 #include "base/memory/ref_counted.h"
@@ -13,8 +13,7 @@
 #include "ui/gfx/rect.h"
 #include "ui/gfx/safe_integer_conversions.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -41,7 +40,7 @@
                              const PP_Point* top_left) OVERRIDE {
     return false;
   }
-  virtual bool BindToInstance(PluginInstanceImpl* new_instance) OVERRIDE {
+  virtual bool BindToInstance(PepperPluginInstanceImpl* new_instance) OVERRIDE {
     bound_instance_ = new_instance;
     return true;
   }
@@ -62,7 +61,7 @@
  private:
   PPB_ImageData_Impl* image_data_;
   float scale_;
-  PluginInstanceImpl* bound_instance_;
+  PepperPluginInstanceImpl* bound_instance_;
 
   DISALLOW_COPY_AND_ASSIGN(MockPlatformGraphics2D);
 };
@@ -123,5 +122,4 @@
   EXPECT_EQ(scale, bitmap_scale);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/pepper_plugin_registry.cc b/content/renderer/pepper/pepper_plugin_registry.cc
index 96634d1..a5ae346 100644
--- a/content/renderer/pepper/pepper_plugin_registry.cc
+++ b/content/renderer/pepper/pepper_plugin_registry.cc
@@ -40,8 +40,7 @@
   return &plugin_list_[plugin_list_.size() - 1];
 }
 
-webkit::ppapi::PluginModule* PepperPluginRegistry::GetLiveModule(
-    const base::FilePath& path) {
+PluginModule* PepperPluginRegistry::GetLiveModule(const base::FilePath& path) {
   NonOwningModuleMap::iterator it = live_modules_.find(path);
   if (it == live_modules_.end())
     return NULL;
@@ -49,13 +48,12 @@
 }
 
 void PepperPluginRegistry::AddLiveModule(const base::FilePath& path,
-                                         webkit::ppapi::PluginModule* module) {
+                                         PluginModule* module) {
   DCHECK(live_modules_.find(path) == live_modules_.end());
   live_modules_[path] = module;
 }
 
-void PepperPluginRegistry::PluginModuleDead(
-    webkit::ppapi::PluginModule* dead_module) {
+void PepperPluginRegistry::PluginModuleDead(PluginModule* dead_module) {
   // DANGER: Don't dereference the dead_module pointer! It may be in the
   // process of being deleted.
 
@@ -92,9 +90,9 @@
     if (current.is_out_of_process)
       continue;  // Out of process plugins need no special pre-initialization.
 
-    scoped_refptr<webkit::ppapi::PluginModule> module =
-        new webkit::ppapi::PluginModule(current.name, current.path,
-            ppapi::PpapiPermissions(current.permissions));
+    scoped_refptr<PluginModule> module = new PluginModule(
+        current.name, current.path,
+        ppapi::PpapiPermissions(current.permissions));
     AddLiveModule(current.path, module.get());
     if (current.is_internal) {
       if (!module->InitAsInternalPlugin(current.internal_entry_points)) {
diff --git a/content/renderer/pepper/pepper_plugin_registry.h b/content/renderer/pepper/pepper_plugin_registry.h
index ee8fd7c..7bd6ff9 100644
--- a/content/renderer/pepper/pepper_plugin_registry.h
+++ b/content/renderer/pepper/pepper_plugin_registry.h
@@ -11,13 +11,8 @@
 #include "base/memory/ref_counted.h"
 #include "content/public/common/pepper_plugin_info.h"
 
-namespace webkit {
-namespace ppapi {
-class PluginModule;
-}
-}
-
 namespace content {
+class PluginModule;
 
 // This class holds references to all of the known pepper plugin modules.
 //
@@ -40,16 +35,15 @@
   // both preloaded in-process or currently active (non crashed) out-of-process
   // plugins matching the given name. Returns NULL if the plugin hasn't been
   // loaded.
-  webkit::ppapi::PluginModule* GetLiveModule(const base::FilePath& path);
+  PluginModule* GetLiveModule(const base::FilePath& path);
 
   // Notifies the registry that a new non-preloaded module has been created.
   // This is normally called for out-of-process plugins. Once this is called,
   // the module is available to be returned by GetModule(). The module will
   // automatically unregister itself by calling PluginModuleDestroyed().
-  void AddLiveModule(const base::FilePath& path,
-                     webkit::ppapi::PluginModule* module);
+  void AddLiveModule(const base::FilePath& path, PluginModule* module);
 
-  void PluginModuleDead(webkit::ppapi::PluginModule* dead_module);
+  void PluginModuleDead(PluginModule* dead_module);
 
  private:
   PepperPluginRegistry();
@@ -59,8 +53,7 @@
 
   // Plugins that have been preloaded so they can be executed in-process in
   // the renderer (the sandbox prevents on-demand loading).
-  typedef std::map<base::FilePath,
-                   scoped_refptr<webkit::ppapi::PluginModule> >
+  typedef std::map<base::FilePath, scoped_refptr<PluginModule> >
       OwningModuleMap;
   OwningModuleMap preloaded_modules_;
 
@@ -70,8 +63,7 @@
   // non-crashed modules. If an out-of-process module crashes, it may
   // continue as long as there are WebKit references to it, but it will not
   // appear in this list.
-  typedef std::map<base::FilePath, webkit::ppapi::PluginModule*>
-      NonOwningModuleMap;
+  typedef std::map<base::FilePath, PluginModule*> NonOwningModuleMap;
   NonOwningModuleMap live_modules_;
 
   DISALLOW_COPY_AND_ASSIGN(PepperPluginRegistry);
diff --git a/content/renderer/pepper/pepper_truetype_font_linux.cc b/content/renderer/pepper/pepper_truetype_font_linux.cc
index 2e3326a..53abf13 100644
--- a/content/renderer/pepper/pepper_truetype_font_linux.cc
+++ b/content/renderer/pepper/pepper_truetype_font_linux.cc
@@ -65,11 +65,11 @@
     }
   }
 
-  fd_ = content::MatchFontWithFallback(
-            desc_.family.c_str(),
-            desc_.weight >= PP_TRUETYPEFONTWEIGHT_BOLD,
-            desc_.style & PP_TRUETYPEFONTSTYLE_ITALIC,
-            desc_.charset);
+  fd_ = MatchFontWithFallback(
+      desc_.family.c_str(),
+      desc_.weight >= PP_TRUETYPEFONTWEIGHT_BOLD,
+      desc_.style & PP_TRUETYPEFONTSTYLE_ITALIC,
+      desc_.charset);
 }
 
 PepperTrueTypeFontLinux::~PepperTrueTypeFontLinux() {
@@ -89,11 +89,11 @@
   // Get the 2 byte numTables field at an offset of 4 in the font.
   uint8_t num_tables_buf[2];
   size_t output_length = sizeof(num_tables_buf);
-  if (!content::GetFontTable(fd_,
-                             0 /* tag */,
-                             4 /* offset */,
-                             reinterpret_cast<uint8_t*>(&num_tables_buf),
-                             &output_length))
+  if (!GetFontTable(fd_,
+                    0 /* tag */,
+                    4 /* offset */,
+                    reinterpret_cast<uint8_t*>(&num_tables_buf),
+                    &output_length))
     return PP_ERROR_FAILED;
   DCHECK(output_length == sizeof(num_tables_buf));
   // Font data is stored in big-endian order.
@@ -105,11 +105,11 @@
   output_length = num_tables * kTableEntrySize;
   scoped_ptr<uint8_t[]> table_entries(new uint8_t[output_length]);
   // Get the table directory entries, which follow the font header.
-  if (!content::GetFontTable(fd_,
-                             0 /* tag */,
-                             kFontHeaderSize /* offset */,
-                             table_entries.get(),
-                             &output_length))
+  if (!GetFontTable(fd_,
+                    0 /* tag */,
+                    kFontHeaderSize /* offset */,
+                    table_entries.get(),
+                    &output_length))
     return PP_ERROR_FAILED;
   DCHECK(output_length == num_tables * kTableEntrySize);
 
@@ -134,14 +134,14 @@
   size_t table_size = 0;
   // Tags are byte swapped on Linux.
   table_tag = base::ByteSwap(table_tag);
-  if (!content::GetFontTable(fd_, table_tag, offset, NULL, &table_size))
+  if (!GetFontTable(fd_, table_tag, offset, NULL, &table_size))
     return PP_ERROR_FAILED;
   // Only retrieve as much as the caller requested.
   table_size = std::min(table_size, static_cast<size_t>(max_data_length));
   data->resize(table_size);
-  if (!content::GetFontTable(fd_, table_tag, offset,
-                             reinterpret_cast<uint8_t*>(&(*data)[0]),
-                             &table_size))
+  if (!GetFontTable(fd_, table_tag, offset,
+                    reinterpret_cast<uint8_t*>(&(*data)[0]),
+                    &table_size))
     return PP_ERROR_FAILED;
 
   return base::checked_numeric_cast<int32_t>(table_size);
diff --git a/content/renderer/pepper/pepper_truetype_font_win.cc b/content/renderer/pepper/pepper_truetype_font_win.cc
index 95da297..e515bd1 100644
--- a/content/renderer/pepper/pepper_truetype_font_win.cc
+++ b/content/renderer/pepper/pepper_truetype_font_win.cc
@@ -152,7 +152,7 @@
     LOGFONTW logfont;
     if (!::GetObject(font_, sizeof(LOGFONTW), &logfont))
       return GDI_ERROR;
-    content::RenderThread* render_thread = content::RenderThread::Get();
+    RenderThread* render_thread = RenderThread::Get();
     if (!render_thread)
       return GDI_ERROR;
     render_thread->PreCacheFont(logfont);
diff --git a/content/renderer/pepper/pepper_url_loader_host.cc b/content/renderer/pepper/pepper_url_loader_host.cc
index 3087ebc..e60096a 100644
--- a/content/renderer/pepper/pepper_url_loader_host.cc
+++ b/content/renderer/pepper/pepper_url_loader_host.cc
@@ -4,7 +4,7 @@
 
 #include "content/renderer/pepper/pepper_url_loader_host.h"
 
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/renderer_ppapi_host_impl.h"
 #include "content/renderer/pepper/url_request_info_util.h"
 #include "content/renderer/pepper/url_response_info_util.h"
@@ -83,7 +83,7 @@
   // will get queued inside WebKit.
   if (main_document_loader_) {
     // The PluginInstance has a non-owning pointer to us.
-    webkit::ppapi::PluginInstanceImpl* instance_object =
+    PepperPluginInstanceImpl* instance_object =
         renderer_ppapi_host_->GetPluginInstanceImpl(pp_instance());
     if (instance_object) {
       DCHECK(instance_object->document_loader() == this);
@@ -235,8 +235,7 @@
   // the file refs.
   ppapi::URLRequestInfoData filled_in_request_data = request_data;
 
-  if (webkit::ppapi::URLRequestRequiresUniversalAccess(
-          filled_in_request_data) &&
+  if (URLRequestRequiresUniversalAccess(filled_in_request_data) &&
       !has_universal_access_) {
     ppapi::PpapiGlobals::Get()->LogWithSource(
         pp_instance(), PP_LOGLEVEL_ERROR, std::string(),
@@ -254,8 +253,7 @@
   if (!frame)
     return PP_ERROR_FAILED;
   WebURLRequest web_request;
-  if (!webkit::ppapi::CreateWebURLRequest(&filled_in_request_data, frame,
-                                          &web_request))
+  if (!CreateWebURLRequest(&filled_in_request_data, frame, &web_request))
     return PP_ERROR_FAILED;
   web_request.setRequestorProcessID(renderer_ppapi_host_->GetPluginPID());
 
@@ -331,7 +329,7 @@
 }
 
 WebKit::WebFrame* PepperURLLoaderHost::GetFrame() {
-  webkit::ppapi::PluginInstance* instance_object =
+  PepperPluginInstance* instance_object =
       renderer_ppapi_host_->GetPluginInstance(pp_instance());
   if (!instance_object)
     return NULL;
diff --git a/content/renderer/pepper/pepper_url_request_unittest.cc b/content/renderer/pepper/pepper_url_request_unittest.cc
index 08cae5a..20e7f92 100644
--- a/content/renderer/pepper/pepper_url_request_unittest.cc
+++ b/content/renderer/pepper/pepper_url_request_unittest.cc
@@ -51,10 +51,9 @@
 using ppapi::proxy::URLRequestInfoResource;
 using ppapi::URLRequestInfoData;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
-class URLRequestInfoTest : public content::RenderViewTest {
+class URLRequestInfoTest : public RenderViewTest {
  public:
   URLRequestInfoTest() : pp_instance_(1234) {
   }
@@ -253,5 +252,4 @@
 
 // TODO(bbudge) Unit tests for AppendDataToBody, AppendFileToBody.
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/pepper_video_capture_host.cc b/content/renderer/pepper/pepper_video_capture_host.cc
index cef1e88..b1aa2e8 100644
--- a/content/renderer/pepper/pepper_video_capture_host.cc
+++ b/content/renderer/pepper/pepper_video_capture_host.cc
@@ -5,7 +5,7 @@
 #include "content/renderer/pepper/pepper_video_capture_host.h"
 
 #include "content/renderer/pepper/host_globals.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/renderer_ppapi_host_impl.h"
 #include "ppapi/host/dispatch_host_message.h"
 #include "ppapi/host/ppapi_host.h"
@@ -22,8 +22,6 @@
 using ppapi::TrackedCallback;
 using ppapi::thunk::EnterResourceNoLock;
 using ppapi::thunk::PPB_Buffer_API;
-using webkit::ppapi::HostGlobals;
-using webkit::ppapi::PPB_Buffer_Impl;
 
 namespace {
 
@@ -241,8 +239,8 @@
           info, buffer_host_resources, size)));
 }
 
-webkit::ppapi::PluginDelegate* PepperVideoCaptureHost::GetPluginDelegate() {
-  webkit::ppapi::PluginInstanceImpl* instance =
+PluginDelegate* PepperVideoCaptureHost::GetPluginDelegate() {
+  PepperPluginInstanceImpl* instance =
       renderer_ppapi_host_->GetPluginInstanceImpl(pp_instance());
   if (instance)
     return instance->delegate();
@@ -257,13 +255,13 @@
   if (platform_video_capture_.get())
     return PP_ERROR_FAILED;
 
-  webkit::ppapi::PluginDelegate* plugin_delegate = GetPluginDelegate();
+  PluginDelegate* plugin_delegate = GetPluginDelegate();
   if (!plugin_delegate)
     return PP_ERROR_FAILED;
 
   SetRequestedInfo(requested_info, buffer_count);
 
-  webkit::ppapi::PluginInstance* instance =
+  PepperPluginInstance* instance =
       renderer_ppapi_host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
diff --git a/content/renderer/pepper/pepper_video_capture_host.h b/content/renderer/pepper/pepper_video_capture_host.h
index 9fdc299..e01c1b1 100644
--- a/content/renderer/pepper/pepper_video_capture_host.h
+++ b/content/renderer/pepper/pepper_video_capture_host.h
@@ -22,7 +22,7 @@
 
 class PepperVideoCaptureHost
   : public ppapi::host::ResourceHost,
-    public webkit::ppapi::PluginDelegate::PlatformVideoCaptureEventHandler,
+    public PluginDelegate::PlatformVideoCaptureEventHandler,
     public PepperDeviceEnumerationHostHelper::Delegate {
  public:
   PepperVideoCaptureHost(RendererPpapiHostImpl* host,
@@ -53,7 +53,7 @@
       const media::VideoCaptureParams& device_info) OVERRIDE;
 
   // PepperDeviceEnumerationHostHelper::Delegate implementation.
-  virtual webkit::ppapi::PluginDelegate* GetPluginDelegate() OVERRIDE;
+  virtual PluginDelegate* GetPluginDelegate() OVERRIDE;
 
  private:
   int32_t OnOpen(ppapi::host::HostMessageContext* context,
@@ -78,8 +78,7 @@
 
   bool SetStatus(PP_VideoCaptureStatus_Dev status, bool forced);
 
-  scoped_refptr<webkit::ppapi::PluginDelegate::PlatformVideoCapture>
-      platform_video_capture_;
+  scoped_refptr<PluginDelegate::PlatformVideoCapture> platform_video_capture_;
 
   // Buffers of video frame.
   struct BufferInfo {
@@ -88,7 +87,7 @@
 
     bool in_use;
     void* data;
-    scoped_refptr<webkit::ppapi::PPB_Buffer_Impl> buffer;
+    scoped_refptr<PPB_Buffer_Impl> buffer;
   };
 
   RendererPpapiHostImpl* renderer_ppapi_host_;
diff --git a/content/renderer/pepper/pepper_video_destination_host.cc b/content/renderer/pepper/pepper_video_destination_host.cc
index 2ab0657..4c19b90 100644
--- a/content/renderer/pepper/pepper_video_destination_host.cc
+++ b/content/renderer/pepper/pepper_video_destination_host.cc
@@ -53,7 +53,7 @@
   if (!gurl.is_valid())
     return PP_ERROR_BADARGUMENT;
 
-  content::FrameWriterInterface* frame_writer = NULL;
+  FrameWriterInterface* frame_writer = NULL;
   if (!VideoDestinationHandler::Open(NULL /* factory */,
                                      NULL /* registry */,
                                      gurl.spec(),
@@ -76,10 +76,10 @@
       image_data_resource.host_resource(), true);
   if (enter.failed())
     return PP_ERROR_BADRESOURCE;
-  webkit::ppapi::PPB_ImageData_Impl* image_data_impl =
-      static_cast<webkit::ppapi::PPB_ImageData_Impl*>(enter.object());
+  PPB_ImageData_Impl* image_data_impl =
+      static_cast<PPB_ImageData_Impl*>(enter.object());
 
-  if (!webkit::ppapi::PPB_ImageData_Impl::IsImageDataFormatSupported(
+  if (!PPB_ImageData_Impl::IsImageDataFormatSupported(
           image_data_impl->format()))
     return PP_ERROR_BADARGUMENT;
 
diff --git a/content/renderer/pepper/pepper_video_destination_host.h b/content/renderer/pepper/pepper_video_destination_host.h
index d65c489..fd5cfe7 100644
--- a/content/renderer/pepper/pepper_video_destination_host.h
+++ b/content/renderer/pepper/pepper_video_destination_host.h
@@ -42,7 +42,7 @@
 
   base::WeakPtrFactory<PepperVideoDestinationHost> weak_factory_;
 
-  scoped_ptr<content::FrameWriterInterface> frame_writer_;
+  scoped_ptr<FrameWriterInterface> frame_writer_;
 
   DISALLOW_COPY_AND_ASSIGN(PepperVideoDestinationHost);
 };
diff --git a/content/renderer/pepper/pepper_video_source_host.cc b/content/renderer/pepper/pepper_video_source_host.cc
index 165c5c0..eb37144 100644
--- a/content/renderer/pepper/pepper_video_source_host.cc
+++ b/content/renderer/pepper/pepper_video_source_host.cc
@@ -66,7 +66,7 @@
     : ResourceHost(host->GetPpapiHost(), instance, resource),
       renderer_ppapi_host_(host),
       weak_factory_(this),
-      source_handler_(new content::VideoSourceHandler(NULL)),
+      source_handler_(new VideoSourceHandler(NULL)),
       frame_receiver_(new FrameReceiver(weak_factory_.GetWeakPtr())),
       get_frame_pending_(false) {
 }
@@ -160,9 +160,9 @@
     return;
   }
 
-  webkit::ppapi::PPB_ImageData_Impl* image_data =
-      static_cast<webkit::ppapi::PPB_ImageData_Impl*>(enter_resource.object());
-  webkit::ppapi::ImageDataAutoMapper mapper(image_data);
+  PPB_ImageData_Impl* image_data =
+      static_cast<PPB_ImageData_Impl*>(enter_resource.object());
+  ImageDataAutoMapper mapper(image_data);
   if (!mapper.is_valid()) {
     SendGetFrameErrorReply(PP_ERROR_FAILED);
     return;
diff --git a/content/renderer/pepper/pepper_video_source_host.h b/content/renderer/pepper/pepper_video_source_host.h
index 355f43b..e5fbaa8 100644
--- a/content/renderer/pepper/pepper_video_source_host.h
+++ b/content/renderer/pepper/pepper_video_source_host.h
@@ -36,12 +36,12 @@
  private:
   // This helper object receives frames on a video worker thread and passes
   // them on to us.
-  class FrameReceiver : public content::FrameReaderInterface,
+  class FrameReceiver : public FrameReaderInterface,
                         public base::RefCountedThreadSafe<FrameReceiver> {
    public:
     explicit FrameReceiver(const base::WeakPtr<PepperVideoSourceHost>& host);
 
-    // content::FrameReaderInterface implementation.
+    // FrameReaderInterface implementation.
     virtual bool GotFrame(cricket::VideoFrame* frame) OVERRIDE;
 
     void OnGotFrame(scoped_ptr<cricket::VideoFrame> frame);
@@ -75,7 +75,7 @@
 
   ppapi::host::ReplyMessageContext reply_context_;
 
-  scoped_ptr<content::VideoSourceHandler> source_handler_;
+  scoped_ptr<VideoSourceHandler> source_handler_;
   scoped_refptr<FrameReceiver> frame_receiver_;
   std::string stream_url_;
   scoped_ptr<cricket::VideoFrame> last_frame_;
diff --git a/content/renderer/pepper/ppapi_webplugin_impl.cc b/content/renderer/pepper/pepper_webplugin_impl.cc
similarity index 72%
rename from content/renderer/pepper/ppapi_webplugin_impl.cc
rename to content/renderer/pepper/pepper_webplugin_impl.cc
index a3bca36..e32ae38 100644
--- a/content/renderer/pepper/ppapi_webplugin_impl.cc
+++ b/content/renderer/pepper/pepper_webplugin_impl.cc
@@ -2,16 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/renderer/pepper/ppapi_webplugin_impl.h"
+#include "content/renderer/pepper/pepper_webplugin_impl.h"
 
 #include <cmath>
 
 #include "base/debug/crash_logging.h"
 #include "base/message_loop/message_loop.h"
+#include "content/public/common/page_zoom.h"
 #include "content/renderer/pepper/message_channel.h"
 #include "content/renderer/pepper/npobject_var.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "ppapi/shared_impl/ppapi_globals.h"
 #include "ppapi/shared_impl/var_tracker.h"
 #include "third_party/WebKit/public/platform/WebPoint.h"
@@ -26,7 +27,6 @@
 #include "third_party/WebKit/public/web/WebPluginParams.h"
 #include "third_party/WebKit/public/web/WebPrintParams.h"
 #include "third_party/WebKit/public/web/WebPrintScalingOption.h"
-#include "third_party/WebKit/public/web/WebView.h"
 #include "url/gurl.h"
 
 using ppapi::NPObjectVar;
@@ -41,25 +41,23 @@
 using WebKit::WebString;
 using WebKit::WebURL;
 using WebKit::WebVector;
-using WebKit::WebView;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
-struct WebPluginImpl::InitData {
+struct PepperWebPluginImpl::InitData {
   scoped_refptr<PluginModule> module;
   base::WeakPtr<PluginDelegate> delegate;
-  base::WeakPtr<content::RenderView> render_view;
+  base::WeakPtr<RenderView> render_view;
   std::vector<std::string> arg_names;
   std::vector<std::string> arg_values;
   GURL url;
 };
 
-WebPluginImpl::WebPluginImpl(
+PepperWebPluginImpl::PepperWebPluginImpl(
     PluginModule* plugin_module,
     const WebPluginParams& params,
     const base::WeakPtr<PluginDelegate>& plugin_delegate,
-    const base::WeakPtr<content::RenderView>& render_view)
+    const base::WeakPtr<RenderView>& render_view)
     : init_data_(new InitData()),
       full_frame_(params.loadManually),
       instance_object_(PP_MakeUndefined()),
@@ -78,14 +76,14 @@
   base::debug::SetCrashKeyValue("subresource_url", init_data_->url.spec());
 }
 
-WebPluginImpl::~WebPluginImpl() {
+PepperWebPluginImpl::~PepperWebPluginImpl() {
 }
 
-WebKit::WebPluginContainer* WebPluginImpl::container() const {
+WebKit::WebPluginContainer* PepperWebPluginImpl::container() const {
   return container_;
 }
 
-bool WebPluginImpl::initialize(WebPluginContainer* container) {
+bool PepperWebPluginImpl::initialize(WebPluginContainer* container) {
   // The plugin delegate may have gone away.
   if (!init_data_->delegate.get())
     return false;
@@ -121,7 +119,7 @@
   return true;
 }
 
-void WebPluginImpl::destroy() {
+void PepperWebPluginImpl::destroy() {
   // Tell |container_| to clear references to this plugin's script objects.
   if (container_)
     container_->clearScriptObjects();
@@ -136,7 +134,7 @@
   base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
 }
 
-NPObject* WebPluginImpl::scriptableObject() {
+NPObject* PepperWebPluginImpl::scriptableObject() {
   // Call through the plugin to get its instance object. The plugin should pass
   // us a reference which we release in destroy().
   if (instance_object_.type == PP_VARTYPE_UNDEFINED)
@@ -158,20 +156,20 @@
   return message_channel_np_object;
 }
 
-NPP WebPluginImpl::pluginNPP() {
+NPP PepperWebPluginImpl::pluginNPP() {
   return instance_->instanceNPP();
 }
 
-bool WebPluginImpl::getFormValue(WebString& value) {
+bool PepperWebPluginImpl::getFormValue(WebString& value) {
   return false;
 }
 
-void WebPluginImpl::paint(WebCanvas* canvas, const WebRect& rect) {
+void PepperWebPluginImpl::paint(WebCanvas* canvas, const WebRect& rect) {
   if (!instance_->FlashIsFullscreenOrPending())
     instance_->Paint(canvas, plugin_rect_, rect);
 }
 
-void WebPluginImpl::updateGeometry(
+void PepperWebPluginImpl::updateGeometry(
     const WebRect& window_rect,
     const WebRect& clip_rect,
     const WebVector<WebRect>& cut_outs_rects,
@@ -185,124 +183,124 @@
   }
 }
 
-void WebPluginImpl::updateFocus(bool focused) {
+void PepperWebPluginImpl::updateFocus(bool focused) {
   instance_->SetWebKitFocus(focused);
 }
 
-void WebPluginImpl::updateVisibility(bool visible) {
+void PepperWebPluginImpl::updateVisibility(bool visible) {
 }
 
-bool WebPluginImpl::acceptsInputEvents() {
+bool PepperWebPluginImpl::acceptsInputEvents() {
   return true;
 }
 
-bool WebPluginImpl::handleInputEvent(const WebKit::WebInputEvent& event,
-                                     WebKit::WebCursorInfo& cursor_info) {
+bool PepperWebPluginImpl::handleInputEvent(const WebKit::WebInputEvent& event,
+                                           WebKit::WebCursorInfo& cursor_info) {
   if (instance_->FlashIsFullscreenOrPending())
     return false;
   return instance_->HandleInputEvent(event, &cursor_info);
 }
 
-void WebPluginImpl::didReceiveResponse(
+void PepperWebPluginImpl::didReceiveResponse(
     const WebKit::WebURLResponse& response) {
   DCHECK(!instance_->document_loader());
   instance_->HandleDocumentLoad(response);
 }
 
-void WebPluginImpl::didReceiveData(const char* data, int data_length) {
+void PepperWebPluginImpl::didReceiveData(const char* data, int data_length) {
   WebKit::WebURLLoaderClient* document_loader = instance_->document_loader();
   if (document_loader)
     document_loader->didReceiveData(NULL, data, data_length, 0);
 }
 
-void WebPluginImpl::didFinishLoading() {
+void PepperWebPluginImpl::didFinishLoading() {
   WebKit::WebURLLoaderClient* document_loader = instance_->document_loader();
   if (document_loader)
     document_loader->didFinishLoading(NULL, 0.0);
 }
 
-void WebPluginImpl::didFailLoading(const WebKit::WebURLError& error) {
+void PepperWebPluginImpl::didFailLoading(const WebKit::WebURLError& error) {
   WebKit::WebURLLoaderClient* document_loader = instance_->document_loader();
   if (document_loader)
     document_loader->didFail(NULL, error);
 }
 
-void WebPluginImpl::didFinishLoadingFrameRequest(const WebKit::WebURL& url,
-                                                 void* notify_data) {
+void PepperWebPluginImpl::didFinishLoadingFrameRequest(
+    const WebKit::WebURL& url,
+    void* notify_data) {
 }
 
-void WebPluginImpl::didFailLoadingFrameRequest(
+void PepperWebPluginImpl::didFailLoadingFrameRequest(
     const WebKit::WebURL& url,
     void* notify_data,
     const WebKit::WebURLError& error) {
 }
 
-bool WebPluginImpl::hasSelection() const {
+bool PepperWebPluginImpl::hasSelection() const {
   return !selectionAsText().isEmpty();
 }
 
-WebString WebPluginImpl::selectionAsText() const {
+WebString PepperWebPluginImpl::selectionAsText() const {
   return instance_->GetSelectedText(false);
 }
 
-WebString WebPluginImpl::selectionAsMarkup() const {
+WebString PepperWebPluginImpl::selectionAsMarkup() const {
   return instance_->GetSelectedText(true);
 }
 
-WebURL WebPluginImpl::linkAtPosition(const WebPoint& position) const {
+WebURL PepperWebPluginImpl::linkAtPosition(const WebPoint& position) const {
   return GURL(instance_->GetLinkAtPosition(position));
 }
 
-void WebPluginImpl::setZoomLevel(double level, bool text_only) {
-  instance_->Zoom(WebView::zoomLevelToZoomFactor(level), text_only);
+void PepperWebPluginImpl::setZoomLevel(double level, bool text_only) {
+  instance_->Zoom(content::ZoomLevelToZoomFactor(level), text_only);
 }
 
-bool WebPluginImpl::startFind(const WebKit::WebString& search_text,
-                              bool case_sensitive,
-                              int identifier) {
+bool PepperWebPluginImpl::startFind(const WebKit::WebString& search_text,
+                                    bool case_sensitive,
+                                    int identifier) {
   return instance_->StartFind(search_text, case_sensitive, identifier);
 }
 
-void WebPluginImpl::selectFindResult(bool forward) {
+void PepperWebPluginImpl::selectFindResult(bool forward) {
   instance_->SelectFindResult(forward);
 }
 
-void WebPluginImpl::stopFind() {
+void PepperWebPluginImpl::stopFind() {
   instance_->StopFind();
 }
 
-bool WebPluginImpl::supportsPaginatedPrint() {
+bool PepperWebPluginImpl::supportsPaginatedPrint() {
   return instance_->SupportsPrintInterface();
 }
 
-bool WebPluginImpl::isPrintScalingDisabled() {
+bool PepperWebPluginImpl::isPrintScalingDisabled() {
   return instance_->IsPrintScalingDisabled();
 }
 
-int WebPluginImpl::printBegin(const WebPrintParams& print_params) {
+int PepperWebPluginImpl::printBegin(const WebPrintParams& print_params) {
   return instance_->PrintBegin(print_params);
 }
 
-bool WebPluginImpl::printPage(int page_number,
-                              WebKit::WebCanvas* canvas) {
+bool PepperWebPluginImpl::printPage(int page_number,
+                                    WebKit::WebCanvas* canvas) {
   return instance_->PrintPage(page_number, canvas);
 }
 
-void WebPluginImpl::printEnd() {
+void PepperWebPluginImpl::printEnd() {
   return instance_->PrintEnd();
 }
 
-bool WebPluginImpl::canRotateView() {
+bool PepperWebPluginImpl::canRotateView() {
   return instance_->CanRotateView();
 }
 
-void WebPluginImpl::rotateView(RotationType type) {
+void PepperWebPluginImpl::rotateView(RotationType type) {
   instance_->RotateView(type);
 }
 
-bool WebPluginImpl::isPlaceholder() {
+bool PepperWebPluginImpl::isPlaceholder() {
   return false;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppapi_webplugin_impl.h b/content/renderer/pepper/pepper_webplugin_impl.h
similarity index 80%
rename from content/renderer/pepper/ppapi_webplugin_impl.h
rename to content/renderer/pepper/pepper_webplugin_impl.h
index ed26b75..11bd750 100644
--- a/content/renderer/pepper/ppapi_webplugin_impl.h
+++ b/content/renderer/pepper/pepper_webplugin_impl.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 CONTENT_RENDERER_PEPPER_PPAPI_WEBPLUGIN_IMPL_H_
-#define CONTENT_RENDERER_PEPPER_PPAPI_WEBPLUGIN_IMPL_H_
+#ifndef CONTENT_RENDERER_PEPPER_PPEPPER_WEBPLUGIN_IMPL_H_
+#define CONTENT_RENDERER_PEPPER_PPEPPER_WEBPLUGIN_IMPL_H_
 
 #include <string>
 #include <vector>
@@ -26,22 +26,21 @@
 struct WebPrintParams;
 }
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
+class PepperPluginInstanceImpl;
 class PluginDelegate;
-class PluginInstanceImpl;
 class PluginModule;
 class PPB_URLLoader_Impl;
 
-class WebPluginImpl : public WebKit::WebPlugin {
+class PepperWebPluginImpl : public WebKit::WebPlugin {
  public:
-  WebPluginImpl(PluginModule* module,
-                const WebKit::WebPluginParams& params,
-                const base::WeakPtr<PluginDelegate>& plugin_delegate,
-                const base::WeakPtr<content::RenderView>& render_view);
+  PepperWebPluginImpl(PluginModule* module,
+                      const WebKit::WebPluginParams& params,
+                      const base::WeakPtr<PluginDelegate>& plugin_delegate,
+                      const base::WeakPtr<RenderView>& render_view);
 
-  PluginInstanceImpl* instance() { return instance_.get(); }
+  PepperPluginInstanceImpl* instance() { return instance_.get(); }
 
   // WebKit::WebPlugin implementation.
   virtual WebKit::WebPluginContainer* container() const;
@@ -92,24 +91,23 @@
   virtual bool isPlaceholder() OVERRIDE;
 
  private:
-  friend class base::DeleteHelper<WebPluginImpl>;
+  friend class base::DeleteHelper<PepperWebPluginImpl>;
 
-  virtual ~WebPluginImpl();
+  virtual ~PepperWebPluginImpl();
   struct InitData;
 
   scoped_ptr<InitData> init_data_;  // Cleared upon successful initialization.
   // True if the instance represents the entire document in a frame instead of
   // being an embedded resource.
   bool full_frame_;
-  scoped_refptr<PluginInstanceImpl> instance_;
+  scoped_refptr<PepperPluginInstanceImpl> instance_;
   gfx::Rect plugin_rect_;
   PP_Var instance_object_;
   WebKit::WebPluginContainer* container_;
 
-  DISALLOW_COPY_AND_ASSIGN(WebPluginImpl);
+  DISALLOW_COPY_AND_ASSIGN(PepperWebPluginImpl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
-#endif  // CONTENT_RENDERER_PEPPER_PPAPI_WEBPLUGIN_IMPL_H_
+#endif  // CONTENT_RENDERER_PEPPER_PPEPPER_WEBPLUGIN_IMPL_H_
diff --git a/content/renderer/pepper/plugin_delegate.h b/content/renderer/pepper/plugin_delegate.h
index e5f2118..deb5d04 100644
--- a/content/renderer/pepper/plugin_delegate.h
+++ b/content/renderer/pepper/plugin_delegate.h
@@ -13,7 +13,7 @@
 #include "base/memory/shared_memory.h"
 #include "base/message_loop/message_loop_proxy.h"
 #include "base/platform_file.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/sync_socket.h"
 #include "base/time/time.h"
 #include "content/common/content_export.h"
@@ -105,13 +105,11 @@
 class NetworkListObserver;
 }  // namespace webkit_glue
 
-namespace webkit {
-
-namespace ppapi {
+namespace content {
 
 class FileIO;
 class FullscreenContainer;
-class PluginInstanceImpl;
+class PepperPluginInstanceImpl;
 class PluginModule;
 class PPB_Broker_Impl;
 class PPB_Flash_Menu_Impl;
@@ -183,7 +181,7 @@
     // to clear the existing device. Returns true on success. In this case, a
     // repaint of the page will also be scheduled. Failure means that the device
     // is already bound to a different instance, and nothing will happen.
-    virtual bool BindToInstance(PluginInstanceImpl* new_instance) = 0;
+    virtual bool BindToInstance(PepperPluginInstanceImpl* new_instance) = 0;
 
     // Paints the current backing store to the web page.
     virtual void Paint(WebKit::WebCanvas* canvas,
@@ -334,27 +332,26 @@
     // When there are no more references, this renderer's dispatcher is
     // destroyed, allowing the broker to shutdown if appropriate.
     // Callers should not reference this object after calling Disconnect().
-    virtual void Disconnect(webkit::ppapi::PPB_Broker_Impl* client) = 0;
+    virtual void Disconnect(PPB_Broker_Impl* client) = 0;
 
    protected:
     virtual ~Broker() {}
   };
 
   // Notification that the given plugin is focused or unfocused.
-  virtual void PluginFocusChanged(webkit::ppapi::PluginInstanceImpl* instance,
+  virtual void PluginFocusChanged(PepperPluginInstanceImpl* instance,
                                   bool focused) = 0;
   // Notification that the text input status of the given plugin is changed.
   virtual void PluginTextInputTypeChanged(
-      webkit::ppapi::PluginInstanceImpl* instance) = 0;
+      PepperPluginInstanceImpl* instance) = 0;
   // Notification that the caret position in the given plugin is changed.
   virtual void PluginCaretPositionChanged(
-      webkit::ppapi::PluginInstanceImpl* instance) = 0;
+      PepperPluginInstanceImpl* instance) = 0;
   // Notification that the plugin requested to cancel the current composition.
   virtual void PluginRequestedCancelComposition(
-      webkit::ppapi::PluginInstanceImpl* instance) = 0;
+      PepperPluginInstanceImpl* instance) = 0;
   // Notification that the text selection in the given plugin is changed.
-  virtual void PluginSelectionChanged(
-      webkit::ppapi::PluginInstanceImpl* instance) = 0;
+  virtual void PluginSelectionChanged(PepperPluginInstanceImpl* instance) = 0;
   // Requests simulating IME events for testing purpose.
   virtual void SimulateImeSetComposition(
       const base::string16& text,
@@ -366,19 +363,19 @@
   // Notification that the given plugin has crashed. When a plugin crashes, all
   // instances associated with that plugin will notify that they've crashed via
   // this function.
-  virtual void PluginCrashed(PluginInstanceImpl* instance) = 0;
+  virtual void PluginCrashed(PepperPluginInstanceImpl* instance) = 0;
 
   // Indicates that the given instance has been created.
-  virtual void InstanceCreated(PluginInstanceImpl* instance) = 0;
+  virtual void InstanceCreated(PepperPluginInstanceImpl* instance) = 0;
 
   // Indicates that the given instance is being destroyed. This is called from
   // the destructor, so it's important that the instance is not dereferenced
   // from this call.
-  virtual void InstanceDeleted(PluginInstanceImpl* instance) = 0;
+  virtual void InstanceDeleted(PepperPluginInstanceImpl* instance) = 0;
 
   // Creates the resource creation API for the given instance.
   virtual scoped_ptr< ::ppapi::thunk::ResourceCreationAPI>
-      CreateResourceCreationAPI(PluginInstanceImpl* instance) = 0;
+      CreateResourceCreationAPI(PepperPluginInstanceImpl* instance) = 0;
 
   // Returns a pointer (ownership not transferred) to the bitmap to paint the
   // sad plugin screen with. Returns NULL on failure.
@@ -393,7 +390,7 @@
   virtual PlatformImage2D* CreateImage2D(int width, int height) = 0;
 
   // Returns the internal PlatformGraphics2D implementation.
-  virtual PlatformGraphics2D* GetGraphics2D(PluginInstanceImpl* instance,
+  virtual PlatformGraphics2D* GetGraphics2D(PepperPluginInstanceImpl* instance,
                                             PP_Resource graphics_2d) = 0;
 
   // The caller will own the pointer returned from this.
@@ -441,7 +438,7 @@
   // BrokerConnected has been called.
   // The caller is responsible for calling Disconnect() on the returned pointer
   // to clean up the corresponding resources allocated during this call.
-  virtual Broker* ConnectToBroker(webkit::ppapi::PPB_Broker_Impl* client) = 0;
+  virtual Broker* ConnectToBroker(PPB_Broker_Impl* client) = 0;
 
   // Notifies that the number of find results has changed.
   virtual void NumberOfFindResultsChanged(int identifier,
@@ -524,14 +521,6 @@
       const ReadDirectoryCallback& success_callback,
       const StatusCallback& error_callback) = 0;
 
-  // For quota handlings for FileIO API.
-  typedef base::Callback<void (int64)> AvailableSpaceCallback;
-  virtual void QueryAvailableSpace(const GURL& origin,
-                                   quota::StorageType type,
-                                   const AvailableSpaceCallback& callback) = 0;
-  virtual void WillUpdateFile(const GURL& file_path) = 0;
-  virtual void DidUpdateFile(const GURL& file_path, int64_t delta) = 0;
-
   // Synchronously returns the platform file path for a filesystem URL.
   virtual void SyncGetFileSystemPlatformPath(const GURL& url,
                                              base::FilePath* platform_path) = 0;
@@ -589,7 +578,7 @@
   // Create a fullscreen container for a plugin instance. This effectively
   // switches the plugin to fullscreen.
   virtual FullscreenContainer* CreateFullscreenContainer(
-      PluginInstanceImpl* instance) = 0;
+      PepperPluginInstanceImpl* instance) = 0;
 
   // Gets the size of the screen. The fullscreen window will be created at that
   // size.
@@ -613,7 +602,7 @@
   // possible. If true is returned then the lock is pending. Success or
   // failure will be delivered asynchronously via
   // PluginInstance::OnLockMouseACK().
-  virtual bool LockMouse(PluginInstanceImpl* instance) = 0;
+  virtual bool LockMouse(PepperPluginInstanceImpl* instance) = 0;
 
   // Unlocks the mouse if |instance| currently owns the mouse lock. Whenever an
   // plugin instance has lost the mouse lock, it will be notified by
@@ -621,19 +610,19 @@
   // the only cause of losing mouse lock. For example, a user may press the Esc
   // key to quit the mouse lock mode, which also results in an OnMouseLockLost()
   // call to the current mouse lock owner.
-  virtual void UnlockMouse(PluginInstanceImpl* instance) = 0;
+  virtual void UnlockMouse(PepperPluginInstanceImpl* instance) = 0;
 
   // Returns true iff |instance| currently owns the mouse lock.
-  virtual bool IsMouseLocked(PluginInstanceImpl* instance) = 0;
+  virtual bool IsMouseLocked(PepperPluginInstanceImpl* instance) = 0;
 
   // Notifies that |instance| has changed the cursor.
   // This will update the cursor appearance if it is currently over the plugin
   // instance.
-  virtual void DidChangeCursor(PluginInstanceImpl* instance,
+  virtual void DidChangeCursor(PepperPluginInstanceImpl* instance,
                                const WebKit::WebCursorInfo& cursor) = 0;
 
   // Notifies that |instance| has received a mouse event.
-  virtual void DidReceiveMouseEvent(PluginInstanceImpl* instance) = 0;
+  virtual void DidReceiveMouseEvent(PepperPluginInstanceImpl* instance) = 0;
 
   // Determines if the browser entered fullscreen mode.
   virtual bool IsInFullscreenMode() = 0;
@@ -672,12 +661,12 @@
   //
   // The loader object should set itself on the PluginInstance as the document
   // loader using set_document_loader.
-  virtual void HandleDocumentLoad(PluginInstanceImpl* instance,
+  virtual void HandleDocumentLoad(PepperPluginInstanceImpl* instance,
                                   const WebKit::WebURLResponse& response) = 0;
 
   // Sets up the renderer host and out-of-process proxy for an external plugin
   // module. Returns the renderer host, or NULL if it couldn't be created.
-  virtual content::RendererPpapiHost* CreateExternalPluginModule(
+  virtual RendererPpapiHost* CreateExternalPluginModule(
       scoped_refptr<PluginModule> module,
       const base::FilePath& path,
       ::ppapi::PpapiPermissions permissions,
@@ -686,7 +675,6 @@
       int plugin_child_id) = 0;
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PLUGIN_DELEGATE_H_
diff --git a/content/renderer/pepper/plugin_module.cc b/content/renderer/pepper/plugin_module.cc
index 44253b2..43af78c 100644
--- a/content/renderer/pepper/plugin_module.cc
+++ b/content/renderer/pepper/plugin_module.cc
@@ -13,11 +13,11 @@
 #include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_loop_proxy.h"
 #include "base/time/time.h"
+#include "content/public/renderer/content_renderer_client.h"
 #include "content/renderer/pepper/common.h"
 #include "content/renderer/pepper/host_globals.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/pepper_plugin_registry.h"
-#include "content/renderer/pepper/ppapi_interface_factory.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "content/renderer/pepper/ppb_gpu_blacklist_private_impl.h"
 #include "content/renderer/pepper/ppb_image_data_impl.h"
 #include "content/renderer/pepper/ppb_proxy_impl.h"
@@ -141,8 +141,7 @@
 using ppapi::thunk::PPB_Graphics2D_API;
 using ppapi::thunk::PPB_InputEvent_API;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -155,7 +154,7 @@
 // TODO(raymes): I'm not sure if it is completely necessary to leak the
 // HostGlobals. Figure out the shutdown sequence and find a way to do this
 // more elegantly.
-webkit::ppapi::HostGlobals* host_globals = NULL;
+HostGlobals* host_globals = NULL;
 
 // Maintains all currently loaded plugin libs for validating PP_Module
 // identifiers.
@@ -240,7 +239,8 @@
 }
 
 void SimulateInputEvent(PP_Instance instance, PP_Resource input_event) {
-  PluginInstanceImpl* plugin_instance = host_globals->GetInstance(instance);
+  PepperPluginInstanceImpl* plugin_instance =
+      host_globals->GetInstance(instance);
   if (!plugin_instance)
     return;
 
@@ -253,7 +253,8 @@
 }
 
 PP_Var GetDocumentURL(PP_Instance instance, PP_URLComponents_Dev* components) {
-  PluginInstanceImpl* plugin_instance = host_globals->GetInstance(instance);
+  PepperPluginInstanceImpl* plugin_instance =
+      host_globals->GetInstance(instance);
   if (!plugin_instance)
     return PP_MakeUndefined();
   return plugin_instance->GetDocumentURL(instance, components);
@@ -291,7 +292,7 @@
 const void* InternalGetInterface(const char* name) {
   // Allow custom interface factories first stab at the GetInterface call.
   const void* custom_interface =
-      PpapiInterfaceFactoryManager::GetInstance()->GetInterface(name);
+      GetContentClient()->renderer()->CreatePPAPIInterface(name);
   if (custom_interface)
     return custom_interface;
 
@@ -343,9 +344,9 @@
 // given structure. Returns true on success.
 bool LoadEntryPointsFromLibrary(
     const base::NativeLibrary& library,
-    content::PepperPluginInfo::EntryPoints* entry_points) {
+    PepperPluginInfo::EntryPoints* entry_points) {
   entry_points->get_interface =
-      reinterpret_cast<content::PepperPluginInfo::GetInterfaceFunc>(
+      reinterpret_cast<PepperPluginInfo::GetInterfaceFunc>(
           base::GetFunctionPointerFromNativeLibrary(library,
                                                     "PPP_GetInterface"));
   if (!entry_points->get_interface) {
@@ -354,7 +355,7 @@
   }
 
   entry_points->initialize_module =
-      reinterpret_cast<content::PepperPluginInfo::PPP_InitializeModuleFunc>(
+      reinterpret_cast<PepperPluginInfo::PPP_InitializeModuleFunc>(
           base::GetFunctionPointerFromNativeLibrary(library,
                                                     "PPP_InitializeModule"));
   if (!entry_points->initialize_module) {
@@ -365,7 +366,7 @@
   // It's okay for PPP_ShutdownModule to not be defined and shutdown_module to
   // be NULL.
   entry_points->shutdown_module =
-      reinterpret_cast<content::PepperPluginInfo::PPP_ShutdownModuleFunc>(
+      reinterpret_cast<PepperPluginInfo::PPP_ShutdownModuleFunc>(
           base::GetFunctionPointerFromNativeLibrary(library,
                                                     "PPP_ShutdownModule"));
 
@@ -426,7 +427,7 @@
   if (!is_crashed_) {
     // When the plugin crashes, we immediately tell the lifetime delegate that
     // we're gone, so we don't want to tell it again.
-    content::PepperPluginRegistry::GetInstance()->PluginModuleDead(this);
+    PepperPluginRegistry::GetInstance()->PluginModuleDead(this);
   }
 
   // Don't add stuff here, the two notifications that the module object has
@@ -444,7 +445,7 @@
 }
 
 bool PluginModule::InitAsInternalPlugin(
-    const content::PepperPluginInfo::EntryPoints& entry_points) {
+    const PepperPluginInfo::EntryPoints& entry_points) {
   if (InitializeModule(entry_points)) {
     entry_points_ = entry_points;
     return true;
@@ -457,7 +458,7 @@
   if (!library)
     return false;
 
-  content::PepperPluginInfo::EntryPoints entry_points;
+  PepperPluginInfo::EntryPoints entry_points;
 
   if (!LoadEntryPointsFromLibrary(library, &entry_points) ||
       !InitializeModule(entry_points)) {
@@ -487,7 +488,7 @@
 }
 
 PP_ExternalPluginResult PluginModule::InitAsProxiedExternalPlugin(
-    PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   DCHECK(out_of_process_proxy_.get());
   // InitAsProxied (for the trusted/out-of-process case) initializes only the
   // module, and one or more instances are added later. In this case, the
@@ -522,8 +523,7 @@
 }
 
 // static
-content::PepperPluginInfo::GetInterfaceFunc
-    PluginModule::GetLocalGetInterfaceFunc() {
+PepperPluginInfo::GetInterfaceFunc PluginModule::GetLocalGetInterfaceFunc() {
   return &GetInterface;
 }
 
@@ -532,12 +532,12 @@
   return !!InternalGetInterface(name);
 }
 
-PluginInstanceImpl* PluginModule::CreateInstance(
+PepperPluginInstanceImpl* PluginModule::CreateInstance(
     PluginDelegate* delegate,
-    content::RenderView* render_view,
+    RenderView* render_view,
     WebKit::WebPluginContainer* container,
     const GURL& plugin_url) {
-  PluginInstanceImpl* instance = PluginInstanceImpl::Create(
+  PepperPluginInstanceImpl* instance = PepperPluginInstanceImpl::Create(
       delegate, render_view, this, container, plugin_url);
   if (!instance) {
     LOG(WARNING) << "Plugin doesn't support instance interface, failing.";
@@ -548,7 +548,7 @@
   return instance;
 }
 
-PluginInstanceImpl* PluginModule::GetSomeInstance() const {
+PepperPluginInstanceImpl* PluginModule::GetSomeInstance() const {
   // This will generally crash later if there is not actually any instance to
   // return, so we force a crash now to make bugs easier to track down.
   CHECK(!instances_.empty());
@@ -565,11 +565,11 @@
   return entry_points_.get_interface(name);
 }
 
-void PluginModule::InstanceCreated(PluginInstanceImpl* instance) {
+void PluginModule::InstanceCreated(PepperPluginInstanceImpl* instance) {
   instances_.insert(instance);
 }
 
-void PluginModule::InstanceDeleted(PluginInstanceImpl* instance) {
+void PluginModule::InstanceDeleted(PepperPluginInstanceImpl* instance) {
   if (out_of_process_proxy_)
     out_of_process_proxy_->RemoveInstance(instance->pp_instance());
   instances_.erase(instance);
@@ -588,7 +588,7 @@
        i != instances_.end(); ++i)
     (*i)->InstanceCrashed();
 
-  content::PepperPluginRegistry::GetInstance()->PluginModuleDead(this);
+  PepperPluginRegistry::GetInstance()->PluginModuleDead(this);
 }
 
 void PluginModule::SetReserveInstanceIDCallback(
@@ -619,7 +619,7 @@
 }
 
 bool PluginModule::InitializeModule(
-    const content::PepperPluginInfo::EntryPoints& entry_points) {
+    const PepperPluginInfo::EntryPoints& entry_points) {
   DCHECK(!out_of_process_proxy_.get()) << "Don't call for proxied modules.";
   DCHECK(entry_points.initialize_module != NULL);
   int retval = entry_points.initialize_module(pp_module(), &GetInterface);
@@ -630,5 +630,4 @@
   return true;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/plugin_module.h b/content/renderer/pepper/plugin_module.h
index c4f3527..05835f5 100644
--- a/content/renderer/pepper/plugin_module.h
+++ b/content/renderer/pepper/plugin_module.h
@@ -15,7 +15,7 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/native_library.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "content/common/content_export.h"
 #include "content/public/common/pepper_plugin_info.h"
 #include "content/renderer/pepper/plugin_delegate.h"
@@ -44,16 +44,15 @@
 class WebPluginContainer;
 }  // namespace WebKit
 
-namespace webkit {
-namespace ppapi {
-
+namespace content {
+  
+class PepperPluginInstanceImpl;
 class PluginDelegate;
-class PluginInstanceImpl;
 
 // Represents one plugin library loaded into one renderer. This library may
 // have multiple instances.
 //
-// Note: to get from a PP_Instance to a PluginInstance*, use the
+// Note: to get from a PP_Instance to a PepperPluginInstance*, use the
 // ResourceTracker.
 class CONTENT_EXPORT PluginModule :
     public base::RefCounted<PluginModule>,
@@ -67,7 +66,7 @@
     virtual ~EmbedderState() {}
   };
 
-  typedef std::set<PluginInstanceImpl*> PluginInstanceSet;
+  typedef std::set<PepperPluginInstanceImpl*> PluginInstanceSet;
 
   // You must call one of the Init functions after the constructor to create a
   // module of the type you desire.
@@ -90,8 +89,7 @@
   // Initializes this module as an internal plugin with the given entrypoints.
   // This is used for "plugins" compiled into Chrome. Returns true on success.
   // False means that the plugin can not be used.
-  bool InitAsInternalPlugin(
-      const content::PepperPluginInfo::EntryPoints& entry_points);
+  bool InitAsInternalPlugin(const PepperPluginInfo::EntryPoints& entry_points);
 
   // Initializes this module using the given library path as the plugin.
   // Returns true on success. False means that the plugin can not be used.
@@ -111,7 +109,7 @@
   // Returns a result code indicating whether the proxy started successfully or
   // there was an error.
   PP_ExternalPluginResult InitAsProxiedExternalPlugin(
-      PluginInstanceImpl* instance);
+      PepperPluginInstanceImpl* instance);
 
   bool IsProxied() const;
 
@@ -130,13 +128,13 @@
 
   // Returns a pointer to the local GetInterface function for retrieving
   // PPB interfaces.
-  static content::PepperPluginInfo::GetInterfaceFunc GetLocalGetInterfaceFunc();
+  static PepperPluginInfo::GetInterfaceFunc GetLocalGetInterfaceFunc();
 
   // Returns whether an interface is supported. This method can be called from
   // the browser process and used for interface matching before plugin
   // registration.
-  // NOTE: those custom interfaces provided by PpapiInterfaceFactoryManager
-  // will not be considered when called on the browser process.
+  // NOTE: those custom interfaces provided by ContentRendererClient will not be
+  // considered when called on the browser process.
   static bool SupportsInterface(const char* name);
 
   // Returns the module handle. This may be used before Init() is called (the
@@ -147,16 +145,17 @@
   const base::FilePath& path() const { return path_; }
   const ::ppapi::PpapiPermissions& permissions() const { return permissions_; }
 
-  PluginInstanceImpl* CreateInstance(PluginDelegate* delegate,
-                                     content::RenderView* render_view,
-                                     WebKit::WebPluginContainer* container,
-                                     const GURL& plugin_url);
+  PepperPluginInstanceImpl* CreateInstance(
+      PluginDelegate* delegate,
+      RenderView* render_view,
+      WebKit::WebPluginContainer* container,
+      const GURL& plugin_url);
 
   // Returns "some" plugin instance associated with this module. This is not
   // guaranteed to be any one in particular. This is normally used to execute
   // callbacks up to the browser layer that are not inherently per-instance,
   // but the delegate lives only on the plugin instance so we need one of them.
-  PluginInstanceImpl* GetSomeInstance() const;
+  PepperPluginInstanceImpl* GetSomeInstance() const;
 
   const PluginInstanceSet& GetAllInstances() const { return instances_; }
 
@@ -167,8 +166,8 @@
   // This module is associated with a set of instances. The PluginInstance
   // object declares its association with this module in its destructor and
   // releases us in its destructor.
-  void InstanceCreated(PluginInstanceImpl* instance);
-  void InstanceDeleted(PluginInstanceImpl* instance);
+  void InstanceCreated(PepperPluginInstanceImpl* instance);
+  void InstanceDeleted(PepperPluginInstanceImpl* instance);
 
   scoped_refptr< ::ppapi::CallbackTracker> GetCallbackTracker();
 
@@ -207,8 +206,7 @@
   // Calls the InitializeModule entrypoint. The entrypoint must have been
   // set and the plugin must not be out of process (we don't maintain
   // entrypoints in that case).
-  bool InitializeModule(
-      const content::PepperPluginInfo::EntryPoints& entry_points);
+  bool InitializeModule(const PepperPluginInfo::EntryPoints& entry_points);
 
   // See EmbedderState above.
   scoped_ptr<EmbedderState> embedder_state_;
@@ -244,7 +242,7 @@
   // Contains pointers to the entry points of the actual plugin implementation.
   // These will be NULL for out-of-process plugins, which is indicated by the
   // presence of the out_of_process_proxy_ value.
-  content::PepperPluginInfo::EntryPoints entry_points_;
+  PepperPluginInfo::EntryPoints entry_points_;
 
   // The name and file location of the module.
   const std::string name_;
@@ -261,7 +259,6 @@
   DISALLOW_COPY_AND_ASSIGN(PluginModule);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PLUGIN_MODULE_H_
diff --git a/content/renderer/pepper/plugin_object.cc b/content/renderer/pepper/plugin_object.cc
index 9955d0c..62346f5 100644
--- a/content/renderer/pepper/plugin_object.cc
+++ b/content/renderer/pepper/plugin_object.cc
@@ -10,8 +10,8 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "content/renderer/pepper/npapi_glue.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "ppapi/c/dev/ppb_var_deprecated.h"
 #include "ppapi/c/dev/ppp_class_deprecated.h"
 #include "ppapi/c/pp_resource.h"
@@ -29,8 +29,7 @@
 using ppapi::Var;
 using WebKit::WebBindings;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -83,8 +82,7 @@
   // object to ensure that it is not destroyed courtsey an incoming
   // ExecuteScript call which destroys the plugin module and in turn the
   // dispatcher.
-  scoped_refptr<webkit::ppapi::PluginModule> ref(
-      accessor.object()->instance()->module());
+  scoped_refptr<PluginModule> ref(accessor.object()->instance()->module());
 
   return result_converter.SetResult(accessor.object()->ppp_class()->Call(
       accessor.object()->ppp_class_data(), accessor.identifier(),
@@ -104,8 +102,7 @@
   // object to ensure that it is not destroyed courtsey an incoming
   // ExecuteScript call which destroys the plugin module and in turn the
   // dispatcher.
-  scoped_refptr<webkit::ppapi::PluginModule> ref(
-      obj->instance()->module());
+  scoped_refptr<PluginModule> ref(obj->instance()->module());
 
   result_converter.SetResult(obj->ppp_class()->Call(
       obj->ppp_class_data(), PP_MakeUndefined(), argc, args.array(),
@@ -265,7 +262,7 @@
   PluginObject* obj;
 };
 
-PluginObject::PluginObject(PluginInstanceImpl* instance,
+PluginObject::PluginObject(PepperPluginInstanceImpl* instance,
                            NPObjectWrapper* object_wrapper,
                            const PPP_Class_Deprecated* ppp_class,
                            void* ppp_class_data)
@@ -290,7 +287,7 @@
   instance_->RemovePluginObject(this);
 }
 
-PP_Var PluginObject::Create(PluginInstanceImpl* instance,
+PP_Var PluginObject::Create(PepperPluginInstanceImpl* instance,
                             const PPP_Class_Deprecated* ppp_class,
                             void* ppp_class_data) {
   // This will internally end up calling our AllocateObjectWrapper via the
@@ -355,6 +352,5 @@
   return wrapper;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
diff --git a/content/renderer/pepper/plugin_object.h b/content/renderer/pepper/plugin_object.h
index c222e50..362979a 100644
--- a/content/renderer/pepper/plugin_object.h
+++ b/content/renderer/pepper/plugin_object.h
@@ -14,10 +14,9 @@
 typedef struct NPObject NPObject;
 typedef struct _NPVariant NPVariant;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
-class PluginInstanceImpl;
+class PepperPluginInstanceImpl;
 
 // A PluginObject is a JS-accessible object implemented by the plugin.
 //
@@ -29,11 +28,11 @@
 
   // Allocates a new PluginObject and returns it as a PP_Var with a
   // refcount of 1.
-  static PP_Var Create(PluginInstanceImpl* instance,
+  static PP_Var Create(PepperPluginInstanceImpl* instance,
                        const PPP_Class_Deprecated* ppp_class,
                        void* ppp_class_data);
 
-  PluginInstanceImpl* instance() const { return instance_; }
+  PepperPluginInstanceImpl* instance() const { return instance_; }
 
   const PPP_Class_Deprecated* ppp_class() { return ppp_class_; }
   void* ppp_class_data() { return ppp_class_data_; };
@@ -68,12 +67,12 @@
   //
   // The NPObjectWrapper (an NPObject) should already have the reference
   // incremented on it, and this class will take ownership of that reference.
-  PluginObject(PluginInstanceImpl* instance,
+  PluginObject(PepperPluginInstanceImpl* instance,
                NPObjectWrapper* object_wrapper,
                const PPP_Class_Deprecated* ppp_class,
                void* ppp_class_data);
 
-  PluginInstanceImpl* instance_;
+  PepperPluginInstanceImpl* instance_;
 
   // Holds a pointer to the NPObject wrapper backing the var. This class
   // derives from NPObject and we hold a reference to it, so it must be
@@ -89,7 +88,6 @@
   DISALLOW_COPY_AND_ASSIGN(PluginObject);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PLUGIN_OBJECT_H_
diff --git a/content/renderer/pepper/ppapi_interface_factory.cc b/content/renderer/pepper/ppapi_interface_factory.cc
deleted file mode 100644
index acb6858..0000000
--- a/content/renderer/pepper/ppapi_interface_factory.cc
+++ /dev/null
@@ -1,62 +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 "content/renderer/pepper/ppapi_interface_factory.h"
-
-#include <algorithm>
-
-#include "base/logging.h"
-
-namespace webkit {
-namespace ppapi {
-
-base::LazyInstance<PpapiInterfaceFactoryManager>
-    g_ppapi_interface_factory_manager = LAZY_INSTANCE_INITIALIZER;
-
-PpapiInterfaceFactoryManager::PpapiInterfaceFactoryManager() {
-}
-
-PpapiInterfaceFactoryManager::~PpapiInterfaceFactoryManager() {
-}
-
-void PpapiInterfaceFactoryManager::RegisterFactory(InterfaceFactory* factory) {
-  DCHECK(std::find(interface_factory_list_.begin(),
-                   interface_factory_list_.end(), factory) ==
-         interface_factory_list_.end());
-  interface_factory_list_.push_back(factory);
-}
-
-void PpapiInterfaceFactoryManager::UnregisterFactory(
-    InterfaceFactory* factory) {
-  FactoryList::iterator index =
-      std::find(interface_factory_list_.begin(), interface_factory_list_.end(),
-                factory);
-  if (index != interface_factory_list_.end())
-    interface_factory_list_.erase(index);
-}
-
-const void* PpapiInterfaceFactoryManager::GetInterface(
-    const std::string& interface_name) {
-  FactoryList::iterator index;
-
-  const void* ppapi_interface = NULL;
-
-  for (index = interface_factory_list_.begin();
-       index != interface_factory_list_.end();
-       ++index) {
-    ppapi_interface = (*index)(interface_name);
-    if (ppapi_interface)
-      break;
-  }
-  return ppapi_interface;
-}
-
-// static
-PpapiInterfaceFactoryManager* PpapiInterfaceFactoryManager::GetInstance() {
-  return &g_ppapi_interface_factory_manager.Get();
-}
-
-}  // namespace ppapi
-}  // namespace webkit
-
diff --git a/content/renderer/pepper/ppapi_interface_factory.h b/content/renderer/pepper/ppapi_interface_factory.h
deleted file mode 100644
index 6654f61..0000000
--- a/content/renderer/pepper/ppapi_interface_factory.h
+++ /dev/null
@@ -1,56 +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 CONTENT_RENDERER_PEPPER_PLUGIN_INTERFACE_FACTORY_H_
-#define CONTENT_RENDERER_PEPPER_PLUGIN_INTERFACE_FACTORY_H_
-
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/lazy_instance.h"
-#include "content/common/content_export.h"
-
-namespace webkit {
-namespace ppapi {
-
-// This class provides functionality to manage custom PPAPI interface
-// factories.
-class PpapiInterfaceFactoryManager {
- public:
-  typedef const void* (InterfaceFactory)(const std::string& interface_name);
-
-  // Registers a custom PPAPI interface factory.
-  CONTENT_EXPORT void RegisterFactory(InterfaceFactory* factory);
-
-  // Unregisters the custom PPAPI interface factory passed in.
-  CONTENT_EXPORT void UnregisterFactory(InterfaceFactory* factory);
-
-  // Returns a pointer to the interface identified by the name passed in.
-  // Returns NULL if no factory handles this interface.
-  const void* GetInterface(const std::string& interface_name);
-
-  // Returns a pointer to the global instance of the
-  // PpapiInterfaceFactoryManager class.
-  CONTENT_EXPORT static PpapiInterfaceFactoryManager* GetInstance();
-
- private:
-  friend struct base::DefaultLazyInstanceTraits<PpapiInterfaceFactoryManager>;
-
-  PpapiInterfaceFactoryManager();
-  ~PpapiInterfaceFactoryManager();
-
-  typedef std::vector<InterfaceFactory*> FactoryList;
-
-  // List of registered factories.
-  FactoryList interface_factory_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(PpapiInterfaceFactoryManager);
-};
-
-}  // namespace ppapi
-}  // namespace webkit
-
-#endif  // CONTENT_RENDERER_PEPPER_PLUGIN_INTERFACE_FACTORY_H_
-
diff --git a/content/renderer/pepper/ppapi_unittest.cc b/content/renderer/pepper/ppapi_unittest.cc
index e6edf94..2503072 100644
--- a/content/renderer/pepper/ppapi_unittest.cc
+++ b/content/renderer/pepper/ppapi_unittest.cc
@@ -8,16 +8,14 @@
 #include "content/renderer/pepper/gfx_conversion.h"
 #include "content/renderer/pepper/host_globals.h"
 #include "content/renderer/pepper/mock_plugin_delegate.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_interface_factory.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "ppapi/c/pp_var.h"
 #include "ppapi/c/ppp_instance.h"
 #include "ppapi/shared_impl/ppapi_globals.h"
 #include "ppapi/shared_impl/ppapi_permissions.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -78,19 +76,19 @@
 
 void PpapiUnittest::SetUp() {
   message_loop_.reset(new base::MessageLoop());
-  delegate_.reset(NewPluginDelegate());
+  delegate_.reset(new MockPluginDelegate());
 
   // Initialize the mock module.
   module_ = new PluginModule("Mock plugin", base::FilePath(),
                              ::ppapi::PpapiPermissions());
   ::ppapi::PpapiGlobals::Get()->ResetMainThreadMessageLoopForTesting();
-  content::PepperPluginInfo::EntryPoints entry_points;
+  PepperPluginInfo::EntryPoints entry_points;
   entry_points.get_interface = &MockGetInterface;
   entry_points.initialize_module = &MockInitializeModule;
   ASSERT_TRUE(module_->InitAsInternalPlugin(entry_points));
 
   // Initialize the mock instance.
-  instance_ = PluginInstanceImpl::Create(
+  instance_ = PepperPluginInstanceImpl::Create(
       delegate_.get(), NULL, module(), NULL, GURL());
 }
 
@@ -101,10 +99,6 @@
   PluginModule::ResetHostGlobalsForTest();
 }
 
-MockPluginDelegate* PpapiUnittest::NewPluginDelegate() {
-  return new MockPluginDelegate;
-}
-
 const void* PpapiUnittest::GetMockInterface(const char* interface_name) const {
   if (strcmp(interface_name, PPP_INSTANCE_INTERFACE_1_0) == 0)
     return &mock_instance_interface;
@@ -123,47 +117,4 @@
   instance_->view_data_.clip_rect = instance_->view_data_.rect;
 }
 
-// Tests whether custom PPAPI interface factories are called when PPAPI
-// interfaces are requested.
-class PpapiCustomInterfaceFactoryTest : public PpapiUnittest {
- public:
-  PpapiCustomInterfaceFactoryTest() {}
-  virtual ~PpapiCustomInterfaceFactoryTest() {}
-
-  bool result() {
-    return result_;
-  }
-
-  void reset_result() {
-    result_ = false;
-  }
-
-  static const void* InterfaceFactory(const std::string& interface_name) {
-    result_ = true;
-    return NULL;
-  }
-
- private:
-  static bool result_;
-};
-
-bool PpapiCustomInterfaceFactoryTest::result_ = false;
-
-// This test validates whether custom PPAPI interface factories are invoked in
-// response to PluginModule::GetPluginInterface calls.
-TEST_F(PpapiCustomInterfaceFactoryTest, BasicFactoryTest) {
-  PpapiInterfaceFactoryManager::GetInstance()->RegisterFactory(
-      PpapiCustomInterfaceFactoryTest::InterfaceFactory);
-  (*PluginModule::GetLocalGetInterfaceFunc())("DummyInterface");
-  EXPECT_TRUE(result());
-
-  reset_result();
-  PpapiInterfaceFactoryManager::GetInstance()->UnregisterFactory(
-      PpapiCustomInterfaceFactoryTest::InterfaceFactory);
-
-  (*PluginModule::GetLocalGetInterfaceFunc())("DummyInterface");
-  EXPECT_FALSE(result());
-}
-
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppapi_unittest.h b/content/renderer/pepper/ppapi_unittest.h
index e7fd8f2..49a0dbf 100644
--- a/content/renderer/pepper/ppapi_unittest.h
+++ b/content/renderer/pepper/ppapi_unittest.h
@@ -15,11 +15,10 @@
 class MessageLoop;
 }
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class MockPluginDelegate;
-class PluginInstanceImpl;
+class PepperPluginInstanceImpl;
 class PluginModule;
 
 class PpapiUnittest : public testing::Test {
@@ -32,7 +31,7 @@
 
   MockPluginDelegate* delegate() { return delegate_.get(); }
   PluginModule* module() const { return module_.get(); }
-  PluginInstanceImpl* instance() const { return instance_.get(); }
+  PepperPluginInstanceImpl* instance() const { return instance_.get(); }
 
   // Provides access to the interfaces implemented by the test. The default one
   // implements PPP_INSTANCE.
@@ -44,22 +43,18 @@
   // Sets the view size of the plugin instance.
   void SetViewSize(int width, int height) const;
 
- protected:
-  virtual MockPluginDelegate* NewPluginDelegate();
-
  private:
   scoped_ptr<MockPluginDelegate> delegate_;
 
   // Note: module must be declared first since we want it to get destroyed last.
   scoped_refptr<PluginModule> module_;
-  scoped_refptr<PluginInstanceImpl> instance_;
+  scoped_refptr<PepperPluginInstanceImpl> instance_;
 
   scoped_ptr<base::MessageLoop> message_loop_;
 
   DISALLOW_COPY_AND_ASSIGN(PpapiUnittest);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPAPI_UNITTEST_H_
diff --git a/content/renderer/pepper/ppb_audio_impl.cc b/content/renderer/pepper/ppb_audio_impl.cc
index 5263826..d971888 100644
--- a/content/renderer/pepper/ppb_audio_impl.cc
+++ b/content/renderer/pepper/ppb_audio_impl.cc
@@ -22,8 +22,7 @@
 using ppapi::thunk::PPB_AudioConfig_API;
 using ppapi::TrackedCallback;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // PPB_Audio_Impl --------------------------------------------------------------
 
@@ -157,5 +156,4 @@
                 socket_handle, sample_frame_count_);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_audio_impl.h b/content/renderer/pepper/ppb_audio_impl.h
index 49146cb..4c30974 100644
--- a/content/renderer/pepper/ppb_audio_impl.h
+++ b/content/renderer/pepper/ppb_audio_impl.h
@@ -19,8 +19,7 @@
 #include "ppapi/shared_impl/resource.h"
 #include "ppapi/shared_impl/scoped_pp_resource.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // Some of the backend functionality of this class is implemented by the
 // PPB_Audio_Shared so it can be shared with the proxy.
@@ -80,7 +79,6 @@
   DISALLOW_COPY_AND_ASSIGN(PPB_Audio_Impl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_AUDIO_IMPL_H_
diff --git a/content/renderer/pepper/ppb_broker_impl.cc b/content/renderer/pepper/ppb_broker_impl.cc
index 7401b28..4ba2f88 100644
--- a/content/renderer/pepper/ppb_broker_impl.cc
+++ b/content/renderer/pepper/ppb_broker_impl.cc
@@ -6,8 +6,8 @@
 
 #include "base/logging.h"
 #include "content/renderer/pepper/common.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "content/renderer/pepper/resource_helper.h"
 #include "ppapi/shared_impl/platform_file.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
@@ -18,8 +18,7 @@
 using ppapi::thunk::PPB_Broker_API;
 using ppapi::TrackedCallback;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // PPB_Broker_Impl ------------------------------------------------------
 
@@ -53,7 +52,8 @@
     return PP_ERROR_FAILED;
   }
 
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   if (!plugin_instance)
     return PP_ERROR_FAILED;
 
@@ -80,7 +80,8 @@
 }
 
 GURL PPB_Broker_Impl::GetDocumentUrl() {
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   return plugin_instance->container()->element().document().url();
 }
 
@@ -99,5 +100,4 @@
   connect_callback_->Run(result);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_broker_impl.h b/content/renderer/pepper/ppb_broker_impl.h
index 0c7a76f..1257d75 100644
--- a/content/renderer/pepper/ppb_broker_impl.h
+++ b/content/renderer/pepper/ppb_broker_impl.h
@@ -15,8 +15,7 @@
 #include "ppapi/shared_impl/tracked_callback.h"
 #include "ppapi/thunk/ppb_broker_api.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_Broker_Impl : public ::ppapi::Resource,
                         public ::ppapi::thunk::PPB_Broker_API,
@@ -54,7 +53,6 @@
   DISALLOW_COPY_AND_ASSIGN(PPB_Broker_Impl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_BROKER_IMPL_H_
diff --git a/content/renderer/pepper/ppb_buffer_impl.cc b/content/renderer/pepper/ppb_buffer_impl.cc
index 24599e7..808ebfb 100644
--- a/content/renderer/pepper/ppb_buffer_impl.cc
+++ b/content/renderer/pepper/ppb_buffer_impl.cc
@@ -17,8 +17,7 @@
 
 using ::ppapi::thunk::PPB_Buffer_API;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 PPB_Buffer_Impl::PPB_Buffer_Impl(PP_Instance instance)
     : Resource(::ppapi::OBJECT_IS_IMPL, instance),
@@ -109,5 +108,4 @@
     api_->Unmap();
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_buffer_impl.h b/content/renderer/pepper/ppb_buffer_impl.h
index 5da2c72..ba042d6 100644
--- a/content/renderer/pepper/ppb_buffer_impl.h
+++ b/content/renderer/pepper/ppb_buffer_impl.h
@@ -12,8 +12,7 @@
 #include "ppapi/shared_impl/resource.h"
 #include "ppapi/thunk/ppb_buffer_api.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_Buffer_Impl : public ::ppapi::Resource,
                         public ::ppapi::thunk::PPB_Buffer_API {
@@ -74,7 +73,6 @@
   DISALLOW_COPY_AND_ASSIGN(BufferAutoMapper);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_BUFFER_IMPL_H_
diff --git a/content/renderer/pepper/ppb_file_ref_impl.cc b/content/renderer/pepper/ppb_file_ref_impl.cc
index 9a97bed..e0e2edc 100644
--- a/content/renderer/pepper/ppb_file_ref_impl.cc
+++ b/content/renderer/pepper/ppb_file_ref_impl.cc
@@ -9,9 +9,9 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "content/renderer/pepper/common.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_delegate.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "content/renderer/pepper/resource_helper.h"
 #include "net/base/escape.h"
 #include "ppapi/c/pp_errors.h"
@@ -33,8 +33,7 @@
 using ppapi::thunk::PPB_FileRef_API;
 using ppapi::thunk::PPB_FileSystem_API;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -232,7 +231,7 @@
 PPB_FileRef_Impl* PPB_FileRef_Impl::CreateInternal(PP_Instance instance,
                                                    PP_Resource pp_file_system,
                                                    const std::string& path) {
-  PluginInstanceImpl* plugin_instance =
+  PepperPluginInstanceImpl* plugin_instance =
       ResourceHelper::PPInstanceToPluginInstance(instance);
   if (!plugin_instance || !plugin_instance->delegate())
     return 0;
@@ -309,7 +308,8 @@
   if (!IsValidNonExternalFileSystem())
     return PP_ERROR_NOACCESS;
 
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   if (!plugin_instance)
     return PP_ERROR_FAILED;
   plugin_instance->delegate()->MakeDirectory(
@@ -324,7 +324,8 @@
   if (!IsValidNonExternalFileSystem())
     return PP_ERROR_NOACCESS;
 
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   if (!plugin_instance)
     return PP_ERROR_FAILED;
   plugin_instance->delegate()->Touch(
@@ -339,7 +340,8 @@
   if (!IsValidNonExternalFileSystem())
     return PP_ERROR_NOACCESS;
 
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   if (!plugin_instance)
     return PP_ERROR_FAILED;
   plugin_instance->delegate()->Delete(
@@ -362,7 +364,8 @@
 
   // TODO(viettrungluu): Also cancel when the new file ref is destroyed?
   // http://crbug.com/67624
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   if (!plugin_instance)
     return PP_ERROR_FAILED;
   plugin_instance->delegate()->Rename(
@@ -405,7 +408,8 @@
   // We need to trim off the '/' before calling Resolve, as FileSystem URLs
   // start with a storage type identifier that looks like a path segment.
 
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   PluginDelegate* delegate =
       plugin_instance ? plugin_instance->delegate() : NULL;
   if (!delegate)
@@ -415,7 +419,8 @@
 }
 
 bool PPB_FileRef_Impl::IsValidNonExternalFileSystem() const {
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   PluginDelegate* delegate =
       plugin_instance ? plugin_instance->delegate() : NULL;
   return delegate &&
@@ -425,7 +430,8 @@
 }
 
 bool PPB_FileRef_Impl::HasValidFileSystem() const {
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   PluginDelegate* delegate =
       plugin_instance ? plugin_instance->delegate() : NULL;
   return delegate && delegate->IsFileSystemOpened(pp_instance(), file_system_);
@@ -440,7 +446,7 @@
 int32_t PPB_FileRef_Impl::QueryInHost(
     linked_ptr<PP_FileInfo> info,
     scoped_refptr<TrackedCallback> callback) {
-  scoped_refptr<PluginInstanceImpl> plugin_instance =
+  scoped_refptr<PepperPluginInstanceImpl> plugin_instance =
       ResourceHelper::GetPluginInstance(this);
   if (!plugin_instance.get())
     return PP_ERROR_FAILED;
@@ -462,7 +468,7 @@
     if (!HasValidFileSystem())
       return PP_ERROR_NOACCESS;
 
-    PluginInstanceImpl* plugin_instance =
+    PepperPluginInstanceImpl* plugin_instance =
         ResourceHelper::GetPluginInstance(this);
     PluginDelegate* delegate =
         plugin_instance ? plugin_instance->delegate() : NULL;
@@ -493,7 +499,8 @@
   if (!IsValidNonExternalFileSystem())
     return PP_ERROR_NOACCESS;
 
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   if (!plugin_instance)
     return PP_ERROR_FAILED;
 
@@ -507,5 +514,4 @@
   return PP_OK_COMPLETIONPENDING;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_file_ref_impl.h b/content/renderer/pepper/ppb_file_ref_impl.h
index 30612cd..75dda3e 100644
--- a/content/renderer/pepper/ppb_file_ref_impl.h
+++ b/content/renderer/pepper/ppb_file_ref_impl.h
@@ -17,8 +17,7 @@
 #include "ppapi/shared_impl/var.h"
 #include "url/gurl.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 using ::ppapi::StringVar;
 
@@ -120,7 +119,6 @@
   DISALLOW_COPY_AND_ASSIGN(PPB_FileRef_Impl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_FILE_REF_IMPL_H_
diff --git a/content/renderer/pepper/ppb_flash_message_loop_impl.cc b/content/renderer/pepper/ppb_flash_message_loop_impl.cc
index 105c5a0..c13ecb8 100644
--- a/content/renderer/pepper/ppb_flash_message_loop_impl.cc
+++ b/content/renderer/pepper/ppb_flash_message_loop_impl.cc
@@ -10,8 +10,7 @@
 
 using ppapi::thunk::PPB_Flash_MessageLoop_API;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_Flash_MessageLoop_Impl::State
     : public base::RefCounted<PPB_Flash_MessageLoop_Impl::State> {
@@ -112,5 +111,4 @@
     state_->run_callback().Run(result);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_flash_message_loop_impl.h b/content/renderer/pepper/ppb_flash_message_loop_impl.h
index ef6903c..4bd303d 100644
--- a/content/renderer/pepper/ppb_flash_message_loop_impl.h
+++ b/content/renderer/pepper/ppb_flash_message_loop_impl.h
@@ -11,8 +11,7 @@
 #include "ppapi/shared_impl/resource.h"
 #include "ppapi/thunk/ppb_flash_message_loop_api.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_Flash_MessageLoop_Impl
     : public ::ppapi::Resource,
@@ -48,7 +47,6 @@
   DISALLOW_COPY_AND_ASSIGN(PPB_Flash_MessageLoop_Impl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_FLASH_MESSAGE_LOOP_IMPL_H_
diff --git a/content/renderer/pepper/ppb_gpu_blacklist_private_impl.cc b/content/renderer/pepper/ppb_gpu_blacklist_private_impl.cc
index 81c4292..7649cae 100644
--- a/content/renderer/pepper/ppb_gpu_blacklist_private_impl.cc
+++ b/content/renderer/pepper/ppb_gpu_blacklist_private_impl.cc
@@ -11,8 +11,7 @@
 // todo(nfullagar): Remove this private interface when the SRPC proxy is
 // permanently disabled.
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -35,6 +34,5 @@
   return &ppb_gpu_blacklist;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
diff --git a/content/renderer/pepper/ppb_gpu_blacklist_private_impl.h b/content/renderer/pepper/ppb_gpu_blacklist_private_impl.h
index 189afe3..7ff2e90 100644
--- a/content/renderer/pepper/ppb_gpu_blacklist_private_impl.h
+++ b/content/renderer/pepper/ppb_gpu_blacklist_private_impl.h
@@ -7,16 +7,14 @@
 
 #include "ppapi/c/private/ppb_gpu_blacklist_private.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_GpuBlacklist_Private_Impl {
  public:
   static const PPB_GpuBlacklist_Private* GetInterface();
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_GPU_BLACKLIST_PRIVATE_IMPL_H_
 
diff --git a/content/renderer/pepper/ppb_graphics_3d_impl.cc b/content/renderer/pepper/ppb_graphics_3d_impl.cc
index 26a7789..596febc 100644
--- a/content/renderer/pepper/ppb_graphics_3d_impl.cc
+++ b/content/renderer/pepper/ppb_graphics_3d_impl.cc
@@ -8,8 +8,8 @@
 #include "base/command_line.h"
 #include "base/message_loop/message_loop.h"
 #include "base/strings/utf_string_conversions.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "content/renderer/pepper/resource_helper.h"
 #include "gpu/command_buffer/client/gles2_implementation.h"
 #include "ppapi/c/ppp_graphics_3d.h"
@@ -29,8 +29,7 @@
 using WebKit::WebPluginContainer;
 using WebKit::WebString;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 const int32 kCommandBufferSize = 1024 * 1024;
@@ -236,7 +235,8 @@
 
 bool PPB_Graphics3D_Impl::InitRaw(PPB_Graphics3D_API* share_context,
                                   const int32_t* attrib_list) {
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   if (!plugin_instance)
     return false;
 
@@ -307,7 +307,7 @@
   // By the time we run this, the instance may have been deleted, or in the
   // process of being deleted. Even in the latter case, we don't want to send a
   // callback after DidDestroy.
-  PluginInstanceImpl* instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* instance = ResourceHelper::GetPluginInstance(this);
   if (!instance || !instance->container())
     return;
 
@@ -324,5 +324,4 @@
     ppp_graphics_3d->Graphics3DContextLost(this_pp_instance);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_graphics_3d_impl.h b/content/renderer/pepper/ppb_graphics_3d_impl.h
index e84a766..4d29bdc 100644
--- a/content/renderer/pepper/ppb_graphics_3d_impl.h
+++ b/content/renderer/pepper/ppb_graphics_3d_impl.h
@@ -10,8 +10,7 @@
 #include "ppapi/shared_impl/ppb_graphics_3d_shared.h"
 #include "ppapi/shared_impl/resource.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_Graphics3D_Impl : public ::ppapi::PPB_Graphics3D_Shared {
  public:
@@ -88,7 +87,6 @@
   DISALLOW_COPY_AND_ASSIGN(PPB_Graphics3D_Impl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_GRAPHICS_3D_IMPL_H_
diff --git a/content/renderer/pepper/ppb_image_data_impl.cc b/content/renderer/pepper/ppb_image_data_impl.cc
index e17b348..a7e9895 100644
--- a/content/renderer/pepper/ppb_image_data_impl.cc
+++ b/content/renderer/pepper/ppb_image_data_impl.cc
@@ -20,8 +20,7 @@
 
 using ::ppapi::thunk::PPB_ImageData_API;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 PPB_ImageData_Impl::PPB_ImageData_Impl(PP_Instance instance,
                                        PPB_ImageData_Shared::ImageDataType type)
@@ -274,5 +273,4 @@
   return &skia_bitmap_;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_image_data_impl.h b/content/renderer/pepper/ppb_image_data_impl.h
index 58cba82..95aecea 100644
--- a/content/renderer/pepper/ppb_image_data_impl.h
+++ b/content/renderer/pepper/ppb_image_data_impl.h
@@ -18,8 +18,7 @@
 class SkBitmap;
 class SkCanvas;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class CONTENT_EXPORT PPB_ImageData_Impl
     : public ::ppapi::Resource,
@@ -191,7 +190,6 @@
   DISALLOW_COPY_AND_ASSIGN(ImageDataAutoMapper);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_IMAGE_DATA_IMPL_H_
diff --git a/content/renderer/pepper/ppb_network_monitor_private_impl.cc b/content/renderer/pepper/ppb_network_monitor_private_impl.cc
index 75a8935..eb9d99e 100644
--- a/content/renderer/pepper/ppb_network_monitor_private_impl.cc
+++ b/content/renderer/pepper/ppb_network_monitor_private_impl.cc
@@ -11,8 +11,7 @@
 #include "net/base/ip_endpoint.h"
 #include "net/base/net_util.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 PPB_NetworkMonitor_Private_Impl::PPB_NetworkMonitor_Private_Impl(
     PP_Instance instance,
@@ -85,5 +84,4 @@
   callback_(user_data_, list_resource);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_network_monitor_private_impl.h b/content/renderer/pepper/ppb_network_monitor_private_impl.h
index c603eb1..3a6b481 100644
--- a/content/renderer/pepper/ppb_network_monitor_private_impl.h
+++ b/content/renderer/pepper/ppb_network_monitor_private_impl.h
@@ -13,8 +13,7 @@
 #include "ppapi/thunk/ppb_network_monitor_private_api.h"
 #include "webkit/glue/network_list_observer.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_NetworkMonitor_Private_Impl
     : public ::ppapi::Resource,
@@ -47,7 +46,6 @@
   DISALLOW_COPY_AND_ASSIGN(PPB_NetworkMonitor_Private_Impl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_NETWORK_MONITOR_PRIVATE_IMPL_H_
diff --git a/content/renderer/pepper/ppb_proxy_impl.cc b/content/renderer/pepper/ppb_proxy_impl.cc
index caf63f7..a9d99f3 100644
--- a/content/renderer/pepper/ppb_proxy_impl.cc
+++ b/content/renderer/pepper/ppb_proxy_impl.cc
@@ -14,8 +14,7 @@
 using ppapi::thunk::EnterResource;
 using ppapi::thunk::PPB_URLLoader_API;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -75,5 +74,4 @@
   return &ppb_proxy;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_proxy_impl.h b/content/renderer/pepper/ppb_proxy_impl.h
index 04e12fc..f7341c0 100644
--- a/content/renderer/pepper/ppb_proxy_impl.h
+++ b/content/renderer/pepper/ppb_proxy_impl.h
@@ -7,16 +7,14 @@
 
 struct PPB_Proxy_Private;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_Proxy_Impl {
  public:
   static const PPB_Proxy_Private* GetInterface();
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_PROXY_IMPL_H_
 
diff --git a/content/renderer/pepper/ppb_scrollbar_impl.cc b/content/renderer/pepper/ppb_scrollbar_impl.cc
index a326cad..9c6800a 100644
--- a/content/renderer/pepper/ppb_scrollbar_impl.cc
+++ b/content/renderer/pepper/ppb_scrollbar_impl.cc
@@ -9,8 +9,8 @@
 #include "base/message_loop/message_loop.h"
 #include "content/renderer/pepper/common.h"
 #include "content/renderer/pepper/event_conversion.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "content/renderer/pepper/ppb_image_data_impl.h"
 #include "content/renderer/pepper/resource_helper.h"
 #include "ppapi/c/dev/ppp_scrollbar_dev.h"
@@ -33,8 +33,7 @@
 using WebKit::WebScrollbar;
 using WebKit::WebPluginScrollbar;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // static
 PP_Resource PPB_Scrollbar_Impl::Create(PP_Instance instance,
@@ -54,7 +53,8 @@
 }
 
 void PPB_Scrollbar_Impl::Init(bool vertical) {
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   if (!plugin_instance)
     return;
   scrollbar_.reset(WebPluginScrollbar::createForPlugin(
@@ -247,5 +247,4 @@
   Invalidate(&pp_rect);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_scrollbar_impl.h b/content/renderer/pepper/ppb_scrollbar_impl.h
index eed236f..559c303 100644
--- a/content/renderer/pepper/ppb_scrollbar_impl.h
+++ b/content/renderer/pepper/ppb_scrollbar_impl.h
@@ -16,8 +16,7 @@
 #include "third_party/WebKit/public/web/WebPluginScrollbarClient.h"
 #include "ui/gfx/rect.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_Scrollbar_Impl : public PPB_Widget_Impl,
                            public ::ppapi::thunk::PPB_Scrollbar_API,
@@ -72,7 +71,6 @@
   DISALLOW_COPY_AND_ASSIGN(PPB_Scrollbar_Impl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_SCROLLBAR_IMPL_H_
diff --git a/content/renderer/pepper/ppb_tcp_server_socket_private_impl.cc b/content/renderer/pepper/ppb_tcp_server_socket_private_impl.cc
index 2e8ceda..5cc66fe 100644
--- a/content/renderer/pepper/ppb_tcp_server_socket_private_impl.cc
+++ b/content/renderer/pepper/ppb_tcp_server_socket_private_impl.cc
@@ -10,8 +10,7 @@
 #include "content/renderer/pepper/ppb_tcp_socket_private_impl.h"
 #include "content/renderer/pepper/resource_helper.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 PPB_TCPServerSocket_Private_Impl::PPB_TCPServerSocket_Private_Impl(
     PP_Instance instance)
@@ -78,5 +77,4 @@
   plugin_delegate->TCPServerSocketStopListening(pp_resource(), socket_id_);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_tcp_server_socket_private_impl.h b/content/renderer/pepper/ppb_tcp_server_socket_private_impl.h
index f048c7b..12db9ae 100644
--- a/content/renderer/pepper/ppb_tcp_server_socket_private_impl.h
+++ b/content/renderer/pepper/ppb_tcp_server_socket_private_impl.h
@@ -8,8 +8,7 @@
 #include "base/compiler_specific.h"
 #include "ppapi/shared_impl/private/ppb_tcp_server_socket_shared.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_TCPServerSocket_Private_Impl
     : public ::ppapi::PPB_TCPServerSocket_Shared {
@@ -34,7 +33,6 @@
   DISALLOW_COPY_AND_ASSIGN(PPB_TCPServerSocket_Private_Impl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_TCP_SERVER_SOCKET_PRIVATE_IMPL_H_
diff --git a/content/renderer/pepper/ppb_tcp_socket_private_impl.cc b/content/renderer/pepper/ppb_tcp_socket_private_impl.cc
index 7ebcc64..36e560b 100644
--- a/content/renderer/pepper/ppb_tcp_socket_private_impl.cc
+++ b/content/renderer/pepper/ppb_tcp_socket_private_impl.cc
@@ -5,13 +5,12 @@
 #include "content/renderer/pepper/ppb_tcp_socket_private_impl.h"
 
 #include "content/renderer/pepper/host_globals.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_delegate.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "content/renderer/pepper/resource_helper.h"
 #include "ppapi/shared_impl/socket_option_data.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 PPB_TCPSocket_Private_Impl::PPB_TCPSocket_Private_Impl(
     PP_Instance instance, uint32 socket_id)
@@ -123,12 +122,11 @@
 
 PluginDelegate* PPB_TCPSocket_Private_Impl::GetPluginDelegate(
     PP_Instance instance) {
-  PluginInstanceImpl* plugin_instance =
+  PepperPluginInstanceImpl* plugin_instance =
       HostGlobals::Get()->GetInstance(instance);
   if (!plugin_instance)
     return NULL;
   return plugin_instance->delegate();
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_tcp_socket_private_impl.h b/content/renderer/pepper/ppb_tcp_socket_private_impl.h
index 7295094..c90e1a7 100644
--- a/content/renderer/pepper/ppb_tcp_socket_private_impl.h
+++ b/content/renderer/pepper/ppb_tcp_socket_private_impl.h
@@ -10,8 +10,7 @@
 #include "base/compiler_specific.h"
 #include "ppapi/shared_impl/private/tcp_socket_private_impl.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PluginDelegate;
 
@@ -47,7 +46,6 @@
   DISALLOW_COPY_AND_ASSIGN(PPB_TCPSocket_Private_Impl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_TCP_SOCKET_PRIVATE_IMPL_H_
diff --git a/content/renderer/pepper/ppb_uma_private_impl.cc b/content/renderer/pepper/ppb_uma_private_impl.cc
index 8468dd7..c3c66a5 100644
--- a/content/renderer/pepper/ppb_uma_private_impl.cc
+++ b/content/renderer/pepper/ppb_uma_private_impl.cc
@@ -12,8 +12,7 @@
 
 using ppapi::StringVar;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -96,5 +95,4 @@
   return &ppb_uma;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_uma_private_impl.h b/content/renderer/pepper/ppb_uma_private_impl.h
index 55a94f4..91eae47 100644
--- a/content/renderer/pepper/ppb_uma_private_impl.h
+++ b/content/renderer/pepper/ppb_uma_private_impl.h
@@ -7,15 +7,13 @@
 
 #include "ppapi/c/private/ppb_uma_private.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_UMA_Private_Impl {
  public:
   static const PPB_UMA_Private* GetInterface();
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_UMA_PRIVATE_IMPL_H_
diff --git a/content/renderer/pepper/ppb_var_deprecated_impl.cc b/content/renderer/pepper/ppb_var_deprecated_impl.cc
index cbfc6f9..c5353cf 100644
--- a/content/renderer/pepper/ppb_var_deprecated_impl.cc
+++ b/content/renderer/pepper/ppb_var_deprecated_impl.cc
@@ -10,9 +10,9 @@
 #include "content/renderer/pepper/host_globals.h"
 #include "content/renderer/pepper/npapi_glue.h"
 #include "content/renderer/pepper/npobject_var.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
 #include "content/renderer/pepper/plugin_object.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "ppapi/c/dev/ppb_var_deprecated.h"
 #include "ppapi/c/ppb_var.h"
 #include "ppapi/c/pp_var.h"
@@ -26,8 +26,7 @@
 using ppapi::Var;
 using WebKit::WebBindings;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -119,7 +118,7 @@
 
   NPObjectVar* object() { return object_.get(); }
 
-  PluginInstanceImpl* GetPluginInstance() {
+  PepperPluginInstanceImpl* GetPluginInstance() {
     return HostGlobals::Get()->GetInstance(object()->pp_instance());
   }
 
@@ -332,7 +331,7 @@
   ObjectAccessorTryCatch accessor(var, exception);
   if (accessor.has_exception())
     return PP_MakeUndefined();
-  PluginInstanceImpl* plugin = accessor.GetPluginInstance();
+  PepperPluginInstanceImpl* plugin = accessor.GetPluginInstance();
   if (plugin && plugin->IsProcessingUserGesture()) {
     WebKit::WebScopedUserGesture user_gesture(
         plugin->CurrentUserGestureToken());
@@ -389,7 +388,8 @@
 PP_Var CreateObjectDeprecated(PP_Instance pp_instance,
                               const PPP_Class_Deprecated* ppp_class,
                               void* ppp_class_data) {
-  PluginInstanceImpl* instance = HostGlobals::Get()->GetInstance(pp_instance);
+  PepperPluginInstanceImpl* instance =
+      HostGlobals::Get()->GetInstance(pp_instance);
   if (!instance) {
     DLOG(ERROR) << "Create object passed an invalid instance.";
     return PP_MakeNull();
@@ -432,6 +432,5 @@
   return &var_deprecated_interface;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
diff --git a/content/renderer/pepper/ppb_var_deprecated_impl.h b/content/renderer/pepper/ppb_var_deprecated_impl.h
index 459acfa..0531200 100644
--- a/content/renderer/pepper/ppb_var_deprecated_impl.h
+++ b/content/renderer/pepper/ppb_var_deprecated_impl.h
@@ -7,15 +7,13 @@
 
 struct PPB_Var_Deprecated;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_Var_Deprecated_Impl {
  public:
   static const PPB_Var_Deprecated* GetVarDeprecatedInterface();
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_VAR_DEPRECATED_IMPL_H_
diff --git a/content/renderer/pepper/ppb_video_decoder_impl.cc b/content/renderer/pepper/ppb_video_decoder_impl.cc
index c71f618..c5dc8fc 100644
--- a/content/renderer/pepper/ppb_video_decoder_impl.cc
+++ b/content/renderer/pepper/ppb_video_decoder_impl.cc
@@ -90,8 +90,7 @@
 
 }  // namespace
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 PPB_VideoDecoder_Impl::PPB_VideoDecoder_Impl(PP_Instance instance)
     : PPB_VideoDecoder_Shared(instance),
@@ -299,5 +298,4 @@
   NOTREACHED() << "PlatformVideoDecoder::Initialize() is synchronous!";
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_video_decoder_impl.h b/content/renderer/pepper/ppb_video_decoder_impl.h
index d2d07b8..b15fa90 100644
--- a/content/renderer/pepper/ppb_video_decoder_impl.h
+++ b/content/renderer/pepper/ppb_video_decoder_impl.h
@@ -25,8 +25,7 @@
 }  // namespace gles2
 }  // namespace gpu
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_VideoDecoder_Impl : public ::ppapi::PPB_VideoDecoder_Shared,
                               public media::VideoDecodeAccelerator::Client {
@@ -82,7 +81,6 @@
   DISALLOW_COPY_AND_ASSIGN(PPB_VideoDecoder_Impl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_VIDEO_DECODER_IMPL_H_
diff --git a/content/renderer/pepper/ppb_widget_impl.cc b/content/renderer/pepper/ppb_widget_impl.cc
index 5854f01..39cdf4a 100644
--- a/content/renderer/pepper/ppb_widget_impl.cc
+++ b/content/renderer/pepper/ppb_widget_impl.cc
@@ -4,7 +4,7 @@
 
 #include "content/renderer/pepper/ppb_widget_impl.h"
 
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/ppb_image_data_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
 #include "content/renderer/pepper/resource_helper.h"
@@ -18,8 +18,7 @@
 using ppapi::thunk::PPB_InputEvent_API;
 using ppapi::thunk::PPB_Widget_API;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 PPB_Widget_Impl::PPB_Widget_Impl(PP_Instance instance)
     : Resource(::ppapi::OBJECT_IS_IMPL, instance),
@@ -65,7 +64,8 @@
 }
 
 void PPB_Widget_Impl::Invalidate(const PP_Rect* dirty) {
-  PluginInstanceImpl* plugin_instance = ResourceHelper::GetPluginInstance(this);
+  PepperPluginInstanceImpl* plugin_instance =
+      ResourceHelper::GetPluginInstance(this);
   if (!plugin_instance)
     return;
   const PPP_Widget_Dev* widget = static_cast<const PPP_Widget_Dev*>(
@@ -75,6 +75,5 @@
   widget->Invalidate(pp_instance(), pp_resource(), dirty);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
diff --git a/content/renderer/pepper/ppb_widget_impl.h b/content/renderer/pepper/ppb_widget_impl.h
index 7b1e950..5a5ef0d 100644
--- a/content/renderer/pepper/ppb_widget_impl.h
+++ b/content/renderer/pepper/ppb_widget_impl.h
@@ -18,8 +18,7 @@
 struct InputEventData;
 }
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_ImageData_Impl;
 
@@ -59,7 +58,6 @@
   DISALLOW_COPY_AND_ASSIGN(PPB_Widget_Impl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_WIDGET_IMPL_H_
diff --git a/content/renderer/pepper/ppb_x509_certificate_private_impl.cc b/content/renderer/pepper/ppb_x509_certificate_private_impl.cc
index 0b848d2..6b60a42 100644
--- a/content/renderer/pepper/ppb_x509_certificate_private_impl.cc
+++ b/content/renderer/pepper/ppb_x509_certificate_private_impl.cc
@@ -7,8 +7,7 @@
 #include "content/renderer/pepper/plugin_delegate.h"
 #include "content/renderer/pepper/resource_helper.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 PPB_X509Certificate_Private_Impl::PPB_X509Certificate_Private_Impl(
     PP_Instance instance) :
@@ -34,5 +33,4 @@
 PPB_X509Certificate_Private_Impl::~PPB_X509Certificate_Private_Impl() {
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/ppb_x509_certificate_private_impl.h b/content/renderer/pepper/ppb_x509_certificate_private_impl.h
index 6b8d856..76438c9 100644
--- a/content/renderer/pepper/ppb_x509_certificate_private_impl.h
+++ b/content/renderer/pepper/ppb_x509_certificate_private_impl.h
@@ -14,8 +14,7 @@
 class PPB_X509Certificate_Fields;
 }
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 class PPB_X509Certificate_Private_Impl :
     public ::ppapi::PPB_X509Certificate_Private_Shared {
@@ -31,7 +30,6 @@
   DISALLOW_COPY_AND_ASSIGN(PPB_X509Certificate_Private_Impl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_X509_CERTIFICATE_PRIVATE_IMPL_H_
diff --git a/content/renderer/pepper/quota_file_io.cc b/content/renderer/pepper/quota_file_io.cc
index 64d26a9..59000a2 100644
--- a/content/renderer/pepper/quota_file_io.cc
+++ b/content/renderer/pepper/quota_file_io.cc
@@ -13,15 +13,13 @@
 #include "base/stl_util.h"
 #include "base/task_runner_util.h"
 #include "content/renderer/pepper/host_globals.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "content/renderer/pepper/resource_helper.h"
 
 using base::PlatformFile;
 using base::PlatformFileError;
 using quota::StorageType;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 StorageType PPFileSystemTypeToQuotaStorageType(PP_FileSystemType type) {
@@ -101,14 +99,8 @@
     }
     DCHECK(buffer_.get());
 
-    PluginDelegate* plugin_delegate = quota_io_->GetPluginDelegate();
-    if (!plugin_delegate) {
-      DidFail(base::PLATFORM_FILE_ERROR_FAILED);
-      return;
-    }
-
     if (!base::PostTaskAndReplyWithResult(
-            plugin_delegate->GetFileThreadMessageLoopProxy().get(),
+            quota_io_->delegate()->GetFileThreadMessageLoopProxy().get(),
             FROM_HERE,
             base::Bind(&WriteAdapter,
                        quota_io_->file_,
@@ -191,14 +183,8 @@
       return;
     }
 
-    PluginDelegate* plugin_delegate = quota_io_->GetPluginDelegate();
-    if (!plugin_delegate) {
-      DidFail(base::PLATFORM_FILE_ERROR_FAILED);
-      return;
-    }
-
     if (!base::FileUtilProxy::Truncate(
-            plugin_delegate->GetFileThreadMessageLoopProxy().get(),
+            quota_io_->delegate()->GetFileThreadMessageLoopProxy().get(),
             quota_io_->file_,
             length_,
             base::Bind(&SetLengthOperation::DidFinish,
@@ -228,11 +214,11 @@
 // QuotaFileIO --------------------------------------------------------------
 
 QuotaFileIO::QuotaFileIO(
-    PP_Instance instance,
+    Delegate* delegate,
     PlatformFile file,
     const GURL& file_url,
     PP_FileSystemType type)
-    : pp_instance_(instance),
+    : delegate_(delegate),
       file_(file),
       file_url_(file_url),
       storage_type_(PPFileSystemTypeToQuotaStorageType(type)),
@@ -287,13 +273,6 @@
   return RegisterOperationForQuotaChecks(op);
 }
 
-PluginDelegate* QuotaFileIO::GetPluginDelegate() const {
-  PluginInstanceImpl* instance = HostGlobals::Get()->GetInstance(pp_instance_);
-  if (instance)
-    return instance->delegate();
-  return NULL;
-}
-
 bool QuotaFileIO::RegisterOperationForQuotaChecks(
     PendingOperationBase* op_ptr) {
   scoped_ptr<PendingOperationBase> op(op_ptr);
@@ -303,14 +282,10 @@
     outstanding_quota_queries_ = 0;
     outstanding_errors_ = 0;
 
-    PluginDelegate* plugin_delegate = GetPluginDelegate();
-    if (!plugin_delegate)
-      return false;
-
     // Query the file size.
     ++outstanding_quota_queries_;
     if (!base::FileUtilProxy::GetFileInfoFromPlatformFile(
-            plugin_delegate->GetFileThreadMessageLoopProxy().get(),
+            delegate_->GetFileThreadMessageLoopProxy().get(),
             file_,
             base::Bind(&QuotaFileIO::DidQueryInfoForQuota,
                        weak_factory_.GetWeakPtr()))) {
@@ -321,7 +296,7 @@
 
     // Query the current available space.
     ++outstanding_quota_queries_;
-    plugin_delegate->QueryAvailableSpace(
+    delegate_->QueryAvailableSpace(
         file_url_.GetOrigin(), storage_type_,
         base::Bind(&QuotaFileIO::DidQueryAvailableSpace,
                    weak_factory_.GetWeakPtr()));
@@ -371,9 +346,7 @@
 
 void QuotaFileIO::WillUpdate() {
   if (inflight_operations_++ == 0) {
-    PluginDelegate* plugin_delegate = GetPluginDelegate();
-    if (plugin_delegate)
-      plugin_delegate->WillUpdateFile(file_url_);
+    delegate_->WillUpdateFile(file_url_);
     DCHECK_EQ(0, max_written_offset_);
   }
 }
@@ -399,9 +372,7 @@
     int64_t growth = max_written_offset_ - cached_file_size_;
     growth = growth < 0 ? 0 : growth;
 
-    PluginDelegate* plugin_delegate = GetPluginDelegate();
-    if (plugin_delegate)
-      plugin_delegate->DidUpdateFile(file_url_, growth);
+    delegate_->DidUpdateFile(file_url_, growth);
     max_written_offset_ = 0;
   }
 }
@@ -413,12 +384,8 @@
   int64_t delta = (error != base::PLATFORM_FILE_OK) ? 0 :
       new_file_size - cached_file_size_;
 
-
-  PluginDelegate* plugin_delegate = GetPluginDelegate();
-  if (plugin_delegate)
-    plugin_delegate->DidUpdateFile(file_url_, delta);
+  delegate_->DidUpdateFile(file_url_, delta);
   inflight_operations_ = 0;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/quota_file_io.h b/content/renderer/pepper/quota_file_io.h
index 7c95464..8dbcd2a 100644
--- a/content/renderer/pepper/quota_file_io.h
+++ b/content/renderer/pepper/quota_file_io.h
@@ -7,29 +7,49 @@
 
 #include <deque>
 
+#include "base/callback_forward.h"
 #include "base/files/file_util_proxy.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/platform_file.h"
 #include "content/common/content_export.h"
 #include "ppapi/c/pp_file_info.h"
-#include "ppapi/c/pp_instance.h"
 #include "url/gurl.h"
 #include "webkit/common/quota/quota_types.h"
 
-namespace webkit {
-namespace ppapi {
+namespace base {
+class MessageLoopProxy;
+}
 
-class PluginDelegate;
+namespace content {
 
 // This class is created per PPB_FileIO_Impl instance and provides
 // write operations for quota-managed files (i.e. files of
 // PP_FILESYSTEMTYPE_LOCAL{PERSISTENT,TEMPORARY}).
 class QuotaFileIO {
  public:
+  // For quota handlings for FileIO API. This will be owned by QuotaFileIO.
+  class Delegate {
+   public:
+    virtual ~Delegate() {}
+    typedef base::Callback<void (int64)> AvailableSpaceCallback;
+    virtual void QueryAvailableSpace(
+        const GURL& origin,
+        quota::StorageType type,
+        const AvailableSpaceCallback& callback) = 0;
+    virtual void WillUpdateFile(const GURL& file_path) = 0;
+    virtual void DidUpdateFile(const GURL& file_path, int64_t delta) = 0;
+    // Returns a MessageLoopProxy instance associated with the message loop of
+    // the file thread in this renderer.
+    virtual scoped_refptr<base::MessageLoopProxy>
+        GetFileThreadMessageLoopProxy() = 0;
+  };
+
   typedef base::FileUtilProxy::WriteCallback WriteCallback;
   typedef base::FileUtilProxy::StatusCallback StatusCallback;
 
-  CONTENT_EXPORT QuotaFileIO(PP_Instance instance,
+  CONTENT_EXPORT QuotaFileIO(Delegate* delegate,
                              base::PlatformFile file,
                              const GURL& path_url,
                              PP_FileSystemType type);
@@ -58,9 +78,7 @@
   CONTENT_EXPORT bool WillSetLength(int64_t length,
                                     const StatusCallback& callback);
 
-  // Returns the plugin delegate or NULL if the resource has outlived the
-  // instance.
-  PluginDelegate* GetPluginDelegate() const;
+  Delegate* delegate() const { return delegate_.get(); }
 
  private:
   class PendingOperationBase;
@@ -78,8 +96,7 @@
   void DidQueryAvailableSpace(int64_t avail_space);
   void DidQueryForQuotaCheck();
 
-  // The plugin instance that owns this (via PPB_FileIO_Impl).
-  PP_Instance pp_instance_;
+  scoped_ptr<Delegate> delegate_;
 
   // The file information associated to this instance.
   base::PlatformFile file_;
@@ -111,7 +128,6 @@
   DISALLOW_COPY_AND_ASSIGN(QuotaFileIO);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_QUOTA_FILE_IO_H_
diff --git a/content/renderer/pepper/quota_file_io_unittest.cc b/content/renderer/pepper/quota_file_io_unittest.cc
index ad66e52..3d0df1c 100644
--- a/content/renderer/pepper/quota_file_io_unittest.cc
+++ b/content/renderer/pepper/quota_file_io_unittest.cc
@@ -13,8 +13,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/platform_file.h"
-#include "content/renderer/pepper/mock_plugin_delegate.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/ppapi_unittest.h"
 #include "content/renderer/pepper/quota_file_io.h"
 
@@ -22,26 +21,20 @@
 using base::PlatformFile;
 using base::PlatformFileError;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
-class QuotaMockPluginDelegate : public MockPluginDelegate {
+class QuotaMockDelegate : public QuotaFileIO::Delegate {
  public:
-  typedef PluginDelegate::AvailableSpaceCallback Callback;
+  typedef QuotaFileIO::Delegate::AvailableSpaceCallback Callback;
 
-  QuotaMockPluginDelegate()
+  QuotaMockDelegate()
       : available_space_(0),
         will_update_count_(0),
         file_thread_(MessageLoopProxy::current()),
         weak_factory_(this) {
   }
-  virtual ~QuotaMockPluginDelegate() {}
-
-  virtual scoped_refptr<MessageLoopProxy>
-      GetFileThreadMessageLoopProxy() OVERRIDE {
-    return file_thread_;
-  }
+  virtual ~QuotaMockDelegate() {}
 
   virtual void QueryAvailableSpace(
       const GURL& origin,
@@ -50,7 +43,7 @@
     DCHECK_EQ(false, callback.is_null());
     MessageLoopProxy::current()->PostTask(
         FROM_HERE, base::Bind(
-            &QuotaMockPluginDelegate::RunAvailableSpaceCallback,
+            &QuotaMockDelegate::RunAvailableSpaceCallback,
             weak_factory_.GetWeakPtr(), callback));
   }
 
@@ -66,6 +59,11 @@
     available_space_ -= delta;
   }
 
+  virtual scoped_refptr<base::MessageLoopProxy>
+        GetFileThreadMessageLoopProxy() OVERRIDE {
+    return file_thread_;
+  }
+
   void set_available_space(int64 available) { available_space_ = available; }
   int64_t available_space() const { return available_space_; }
 
@@ -78,14 +76,15 @@
   int will_update_count_;
   GURL file_path_;
   scoped_refptr<MessageLoopProxy> file_thread_;
-  base::WeakPtrFactory<QuotaMockPluginDelegate> weak_factory_;
+  base::WeakPtrFactory<QuotaMockDelegate> weak_factory_;
 };
 }  // namespace
 
 class QuotaFileIOTest : public PpapiUnittest {
  public:
   QuotaFileIOTest()
-      : weak_factory_(this) {}
+      : delegate_(NULL),
+        weak_factory_(this) {}
 
   virtual void SetUp() OVERRIDE {
     PpapiUnittest::SetUp();
@@ -103,9 +102,9 @@
     ASSERT_EQ(base::PLATFORM_FILE_OK, error);
     ASSERT_NE(base::kInvalidPlatformFileValue, file_);
     ASSERT_FALSE(created);
+    delegate_ = new QuotaMockDelegate;  // Owned by QuotaFileIO.
     quota_file_io_.reset(new QuotaFileIO(
-        instance()->pp_instance(), file_, GURL(),
-        PP_FILESYSTEMTYPE_LOCALTEMPORARY));
+        delegate_, file_, GURL(), PP_FILESYSTEMTYPE_LOCALTEMPORARY));
   }
 
   virtual void TearDown() OVERRIDE {
@@ -116,10 +115,6 @@
   }
 
  protected:
-  virtual MockPluginDelegate* NewPluginDelegate() OVERRIDE {
-    return static_cast<MockPluginDelegate*>(new QuotaMockPluginDelegate);
-  }
-
   void WriteTestBody(bool will_operation) {
     // Attempt to write zero bytes.
     EXPECT_FALSE(quota_file_io_->Write(
@@ -130,7 +125,7 @@
         0, "data", std::numeric_limits<int32_t>::min(),
         base::Bind(&QuotaFileIOTest::DidWrite, weak_factory_.GetWeakPtr())));
 
-    quota_plugin_delegate()->set_available_space(100);
+    delegate()->set_available_space(100);
     std::string read_buffer;
 
     // Write 8 bytes at offset 0 (-> length=8).
@@ -140,7 +135,7 @@
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(static_cast<int>(data.size()), bytes_written().front());
     EXPECT_EQ(base::PLATFORM_FILE_OK, status().front());
-    EXPECT_EQ(100 - 8, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(100 - 8, delegate()->available_space());
     reset_results();
 
     if (will_operation) {
@@ -161,7 +156,7 @@
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(static_cast<int>(data.size()), bytes_written().front());
     EXPECT_EQ(base::PLATFORM_FILE_OK, status().front());
-    EXPECT_EQ(100 - 10, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(100 - 10, delegate()->available_space());
     reset_results();
 
     if (will_operation) {
@@ -180,7 +175,7 @@
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(static_cast<int>(data.size()), bytes_written().front());
     EXPECT_EQ(base::PLATFORM_FILE_OK, status().front());
-    EXPECT_EQ(100 - 15, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(100 - 15, delegate()->available_space());
     reset_results();
 
     if (will_operation) {
@@ -199,7 +194,7 @@
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(static_cast<int>(data.size()), bytes_written().front());
     EXPECT_EQ(base::PLATFORM_FILE_OK, status().front());
-    EXPECT_EQ(100 - 15, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(100 - 15, delegate()->available_space());
     reset_results();
 
     if (will_operation) {
@@ -217,7 +212,7 @@
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(static_cast<int>(data.size()), bytes_written().front());
     EXPECT_EQ(base::PLATFORM_FILE_OK, status().front());
-    EXPECT_EQ(100 - 24, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(100 - 24, delegate()->available_space());
     reset_results();
 
     if (will_operation) {
@@ -229,7 +224,7 @@
       EXPECT_EQ(std::string("123355559012345\0\0\0\0\0XXXX", 24), read_buffer);
     }
 
-    quota_plugin_delegate()->set_available_space(5);
+    delegate()->set_available_space(5);
 
     // Quota error case.  Write 7 bytes at offset 23 (-> length is unchanged)
     data = "ABCDEFG";
@@ -237,7 +232,7 @@
     base::MessageLoop::current()->RunUntilIdle();
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status().front());
-    EXPECT_EQ(5, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(5, delegate()->available_space());
     reset_results();
 
     // Overlapping write.  Write 6 bytes at offset 2 (-> length is unchanged)
@@ -247,7 +242,7 @@
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(static_cast<int>(data.size()), bytes_written().front());
     EXPECT_EQ(base::PLATFORM_FILE_OK, status().front());
-    EXPECT_EQ(5, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(5, delegate()->available_space());
     reset_results();
 
     // Overlapping + extending the file size, but within the quota.
@@ -257,7 +252,7 @@
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(static_cast<int>(data.size()), bytes_written().front());
     EXPECT_EQ(base::PLATFORM_FILE_OK, status().front());
-    EXPECT_EQ(0, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(0, delegate()->available_space());
     reset_results();
 
     if (!will_operation) {
@@ -269,21 +264,21 @@
   }
 
   void SetLengthTestBody(bool will_operation) {
-    quota_plugin_delegate()->set_available_space(100);
+    delegate()->set_available_space(100);
 
     SetLength(0, will_operation);
     base::MessageLoop::current()->RunUntilIdle();
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(base::PLATFORM_FILE_OK, status().front());
     EXPECT_EQ(0, GetPlatformFileSize());
-    EXPECT_EQ(100, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(100, delegate()->available_space());
     reset_results();
 
     SetLength(8, will_operation);
     base::MessageLoop::current()->RunUntilIdle();
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(base::PLATFORM_FILE_OK, status().front());
-    EXPECT_EQ(100 - 8, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(100 - 8, delegate()->available_space());
     reset_results();
 
     if (will_operation) {
@@ -297,7 +292,7 @@
     base::MessageLoop::current()->RunUntilIdle();
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(base::PLATFORM_FILE_OK, status().front());
-    EXPECT_EQ(100 - 16, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(100 - 16, delegate()->available_space());
     reset_results();
 
     if (will_operation) {
@@ -311,7 +306,7 @@
     base::MessageLoop::current()->RunUntilIdle();
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(base::PLATFORM_FILE_OK, status().front());
-    EXPECT_EQ(100 - 4, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(100 - 4, delegate()->available_space());
     reset_results();
 
     if (will_operation) {
@@ -325,7 +320,7 @@
     base::MessageLoop::current()->RunUntilIdle();
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(base::PLATFORM_FILE_OK, status().front());
-    EXPECT_EQ(100, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(100, delegate()->available_space());
     reset_results();
 
     if (will_operation) {
@@ -335,19 +330,19 @@
       EXPECT_EQ(0, GetPlatformFileSize());
     }
 
-    quota_plugin_delegate()->set_available_space(5);
+    delegate()->set_available_space(5);
 
     // Quota error case.
     SetLength(7, will_operation);
     base::MessageLoop::current()->RunUntilIdle();
     ASSERT_EQ(1U, num_results());
     EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status().front());
-    EXPECT_EQ(5, quota_plugin_delegate()->available_space());
+    EXPECT_EQ(5, delegate()->available_space());
     reset_results();
   }
 
-  QuotaMockPluginDelegate* quota_plugin_delegate() {
-    return static_cast<QuotaMockPluginDelegate*>(delegate());
+  QuotaMockDelegate* delegate() {
+    return delegate_;
   }
 
   void Write(int64_t offset, const std::string& data, bool will_operation) {
@@ -429,6 +424,7 @@
   scoped_ptr<QuotaFileIO> quota_file_io_;
   std::deque<int> bytes_written_;
   std::deque<PlatformFileError> status_;
+  QuotaMockDelegate* delegate_;
   base::WeakPtrFactory<QuotaFileIOTest> weak_factory_;
 };
 
@@ -449,7 +445,7 @@
 }
 
 TEST_F(QuotaFileIOTest, ParallelWrites) {
-  quota_plugin_delegate()->set_available_space(22);
+  delegate()->set_available_space(22);
   std::string read_buffer;
 
   const std::string data1[] = {
@@ -469,7 +465,7 @@
     pop_result();
   }
 
-  EXPECT_EQ(22 - 15, quota_plugin_delegate()->available_space());
+  EXPECT_EQ(22 - 15, delegate()->available_space());
   EXPECT_EQ(15, GetPlatformFileSize());
   ReadPlatformFile(&read_buffer);
   EXPECT_EQ("123455559012345", read_buffer);
@@ -491,11 +487,10 @@
   EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status().front());
   pop_result();
 
-  EXPECT_EQ(22 - 15, quota_plugin_delegate()->available_space());
+  EXPECT_EQ(22 - 15, delegate()->available_space());
   EXPECT_EQ(15, GetPlatformFileSize());
   ReadPlatformFile(&read_buffer);
   EXPECT_EQ("123355559012345", read_buffer);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/renderer_ppapi_host_impl.cc b/content/renderer/pepper/renderer_ppapi_host_impl.cc
index 0d6768f..3d371bb 100644
--- a/content/renderer/pepper/renderer_ppapi_host_impl.cc
+++ b/content/renderer/pepper/renderer_ppapi_host_impl.cc
@@ -15,9 +15,9 @@
 #include "content/renderer/pepper/pepper_in_process_resource_creation.h"
 #include "content/renderer/pepper/pepper_in_process_router.h"
 #include "content/renderer/pepper/pepper_plugin_delegate_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_delegate.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "content/renderer/render_view_impl.h"
 #include "content/renderer/render_widget_fullscreen_pepper.h"
 #include "ipc/ipc_message.h"
@@ -29,11 +29,6 @@
 #include "third_party/WebKit/public/web/WebPluginContainer.h"
 #include "ui/gfx/point.h"
 
-using webkit::ppapi::HostGlobals;
-using webkit::ppapi::PluginInstance;
-using webkit::ppapi::PluginInstanceImpl;
-using webkit::ppapi::PluginModule;
-
 namespace content {
 // static
 CONTENT_EXPORT RendererPpapiHost*
@@ -113,7 +108,8 @@
 // static
 RendererPpapiHostImpl* RendererPpapiHostImpl::GetForPPInstance(
     PP_Instance pp_instance) {
-  PluginInstanceImpl* instance = HostGlobals::Get()->GetInstance(pp_instance);
+  PepperPluginInstanceImpl* instance =
+      HostGlobals::Get()->GetInstance(pp_instance);
   if (!instance)
     return NULL;
 
@@ -125,14 +121,14 @@
 
 scoped_ptr< ::ppapi::thunk::ResourceCreationAPI>
 RendererPpapiHostImpl::CreateInProcessResourceCreationAPI(
-    PluginInstanceImpl* instance) {
+    PepperPluginInstanceImpl* instance) {
   return scoped_ptr< ::ppapi::thunk::ResourceCreationAPI>(
       new PepperInProcessResourceCreation(this, instance));
 }
 
 PepperBrowserConnection*
 RendererPpapiHostImpl::GetBrowserConnection(PP_Instance instance) const {
-  PluginInstanceImpl* instance_object = GetAndValidateInstance(instance);
+  PepperPluginInstanceImpl* instance_object = GetAndValidateInstance(instance);
   if (!instance_object)
     return NULL;
 
@@ -146,7 +142,7 @@
   return delegate->pepper_browser_connection();
 }
 
-webkit::ppapi::PluginInstanceImpl* RendererPpapiHostImpl::GetPluginInstanceImpl(
+PepperPluginInstanceImpl* RendererPpapiHostImpl::GetPluginInstanceImpl(
     PP_Instance instance) const {
   return GetAndValidateInstance(instance);
 }
@@ -157,7 +153,7 @@
 
 RenderView* RendererPpapiHostImpl::GetRenderViewForInstance(
     PP_Instance instance) const {
-  PluginInstanceImpl* instance_object = GetAndValidateInstance(instance);
+  PepperPluginInstanceImpl* instance_object = GetAndValidateInstance(instance);
   if (!instance_object)
     return NULL;
 
@@ -171,14 +167,14 @@
   return !!GetAndValidateInstance(instance);
 }
 
-webkit::ppapi::PluginInstance* RendererPpapiHostImpl::GetPluginInstance(
+PepperPluginInstance* RendererPpapiHostImpl::GetPluginInstance(
     PP_Instance instance) const {
   return GetAndValidateInstance(instance);
 }
 
 WebKit::WebPluginContainer* RendererPpapiHostImpl::GetContainerForInstance(
       PP_Instance instance) const {
-  PluginInstanceImpl* instance_object = GetAndValidateInstance(instance);
+  PepperPluginInstanceImpl* instance_object = GetAndValidateInstance(instance);
   if (!instance_object)
     return NULL;
   return instance_object->container();
@@ -191,7 +187,7 @@
 }
 
 bool RendererPpapiHostImpl::HasUserGesture(PP_Instance instance) const {
-  PluginInstanceImpl* instance_object = GetAndValidateInstance(instance);
+  PepperPluginInstanceImpl* instance_object = GetAndValidateInstance(instance);
   if (!instance_object)
     return false;
 
@@ -202,13 +198,11 @@
 }
 
 int RendererPpapiHostImpl::GetRoutingIDForWidget(PP_Instance instance) const {
-  webkit::ppapi::PluginInstanceImpl* plugin_instance =
-      GetAndValidateInstance(instance);
+  PepperPluginInstanceImpl* plugin_instance = GetAndValidateInstance(instance);
   if (!plugin_instance)
     return 0;
   if (plugin_instance->flash_fullscreen()) {
-    webkit::ppapi::FullscreenContainer* container =
-        plugin_instance->fullscreen_container();
+    FullscreenContainer* container = plugin_instance->fullscreen_container();
     return static_cast<RenderWidgetFullscreenPepper*>(container)->routing_id();
   }
   return GetRenderViewForInstance(instance)->GetRoutingID();
@@ -217,8 +211,7 @@
 gfx::Point RendererPpapiHostImpl::PluginPointToRenderView(
     PP_Instance instance,
     const gfx::Point& pt) const {
-  webkit::ppapi::PluginInstanceImpl* plugin_instance =
-      GetAndValidateInstance(instance);
+  PepperPluginInstanceImpl* plugin_instance = GetAndValidateInstance(instance);
   if (!plugin_instance)
     return pt;
 
@@ -269,9 +262,10 @@
   }
 }
 
-PluginInstanceImpl* RendererPpapiHostImpl::GetAndValidateInstance(
+PepperPluginInstanceImpl* RendererPpapiHostImpl::GetAndValidateInstance(
     PP_Instance pp_instance) const {
-  PluginInstanceImpl* instance = HostGlobals::Get()->GetInstance(pp_instance);
+  PepperPluginInstanceImpl* instance =
+      HostGlobals::Get()->GetInstance(pp_instance);
   if (!instance)
     return NULL;
   if (!instance->IsValidInstanceOf(module_))
diff --git a/content/renderer/pepper/renderer_ppapi_host_impl.h b/content/renderer/pepper/renderer_ppapi_host_impl.h
index 6d576f7..c62009a 100644
--- a/content/renderer/pepper/renderer_ppapi_host_impl.h
+++ b/content/renderer/pepper/renderer_ppapi_host_impl.h
@@ -29,23 +29,17 @@
 
 }  // namespace ppapi
 
-namespace webkit {
-namespace ppapi {
-class PluginInstanceImpl;
-class PluginModule;
-}
-}
-
 namespace content {
 
 class PepperBrowserConnection;
 class PepperInProcessRouter;
+class PepperPluginInstanceImpl;
+class PluginModule;
 
 // This class is attached to a PluginModule via the module's embedder state.
 // The plugin module manages our lifetime.
-class RendererPpapiHostImpl
-    : public RendererPpapiHost,
-      public webkit::ppapi::PluginModule::EmbedderState {
+class RendererPpapiHostImpl : public RendererPpapiHost,
+                              public PluginModule::EmbedderState {
  public:
   virtual ~RendererPpapiHostImpl();
 
@@ -56,11 +50,11 @@
   // The module will take ownership of the new host impl. The returned value
   // does not pass ownership, it's just for the information of the caller.
   static RendererPpapiHostImpl* CreateOnModuleForOutOfProcess(
-      webkit::ppapi::PluginModule* module,
+      PluginModule* module,
       ppapi::proxy::HostDispatcher* dispatcher,
       const ppapi::PpapiPermissions& permissions);
   static RendererPpapiHostImpl* CreateOnModuleForInProcess(
-      webkit::ppapi::PluginModule* module,
+      PluginModule* module,
       const ppapi::PpapiPermissions& permissions);
 
   // Returns the RendererPpapiHostImpl associated with the given PP_Instance,
@@ -80,18 +74,16 @@
   // creation object is associated with the instance, this will generally
   // happen automatically.
   scoped_ptr< ::ppapi::thunk::ResourceCreationAPI>
-      CreateInProcessResourceCreationAPI(
-          webkit::ppapi::PluginInstanceImpl* instance);
+      CreateInProcessResourceCreationAPI(PepperPluginInstanceImpl* instance);
 
   PepperBrowserConnection* GetBrowserConnection(PP_Instance instance) const;
 
-  webkit::ppapi::PluginInstanceImpl* GetPluginInstanceImpl(
-      PP_Instance instance) const;
+  PepperPluginInstanceImpl* GetPluginInstanceImpl(PP_Instance instance) const;
 
   // RendererPpapiHost implementation.
   virtual ppapi::host::PpapiHost* GetPpapiHost() OVERRIDE;
   virtual bool IsValidInstance(PP_Instance instance) const OVERRIDE;
-  virtual webkit::ppapi::PluginInstance* GetPluginInstance(
+  virtual PepperPluginInstance* GetPluginInstance(
       PP_Instance instance) const OVERRIDE;
   virtual RenderView* GetRenderViewForInstance(
       PP_Instance instance) const OVERRIDE;
@@ -113,10 +105,10 @@
       const base::Callback<void(int)>& callback) const OVERRIDE;
 
  private:
-  RendererPpapiHostImpl(webkit::ppapi::PluginModule* module,
+  RendererPpapiHostImpl(PluginModule* module,
                         ppapi::proxy::HostDispatcher* dispatcher,
                         const ppapi::PpapiPermissions& permissions);
-  RendererPpapiHostImpl(webkit::ppapi::PluginModule* module,
+  RendererPpapiHostImpl(PluginModule* module,
                         const ppapi::PpapiPermissions& permissions);
 
   // Retrieves the plugin instance object associated with the given PP_Instance
@@ -125,10 +117,9 @@
   //
   // We use this to security check the PP_Instance values sent from a plugin to
   // make sure it's not trying to spoof another instance.
-  webkit::ppapi::PluginInstanceImpl* GetAndValidateInstance(
-      PP_Instance instance) const;
+  PepperPluginInstanceImpl* GetAndValidateInstance(PP_Instance instance) const;
 
-  webkit::ppapi::PluginModule* module_;  // Non-owning pointer.
+  PluginModule* module_;  // Non-owning pointer.
 
   // The dispatcher we use to send messagse when the plugin is out-of-process.
   // Will be null when running in-process. Non-owning pointer.
diff --git a/content/renderer/pepper/resource_creation_impl.cc b/content/renderer/pepper/resource_creation_impl.cc
index 63fbe35..cb8aa48 100644
--- a/content/renderer/pepper/resource_creation_impl.cc
+++ b/content/renderer/pepper/resource_creation_impl.cc
@@ -31,10 +31,9 @@
 using ppapi::PPB_ResourceArray_Shared;
 using ppapi::StringVar;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
-ResourceCreationImpl::ResourceCreationImpl(PluginInstanceImpl* instance) {
+ResourceCreationImpl::ResourceCreationImpl(PepperPluginInstanceImpl* instance) {
 }
 
 ResourceCreationImpl::~ResourceCreationImpl() {
@@ -313,5 +312,4 @@
   return PPB_X509Certificate_Private_Impl::CreateResource(instance);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/resource_creation_impl.h b/content/renderer/pepper/resource_creation_impl.h
index 8ed7ac4..7d09822 100644
--- a/content/renderer/pepper/resource_creation_impl.h
+++ b/content/renderer/pepper/resource_creation_impl.h
@@ -9,10 +9,9 @@
 #include "base/compiler_specific.h"
 #include "ppapi/thunk/resource_creation_api.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
-class PluginInstanceImpl;
+class PepperPluginInstanceImpl;
 
 // This is an abstract class.  ResourceCreationAPI functions that implement
 // "old-style" resources are handled here. See
@@ -20,7 +19,7 @@
 // that implement "new-style" resources.
 class ResourceCreationImpl : public ::ppapi::thunk::ResourceCreationAPI {
  public:
-  explicit ResourceCreationImpl(PluginInstanceImpl* instance);
+  explicit ResourceCreationImpl(PepperPluginInstanceImpl* instance);
   virtual ~ResourceCreationImpl();
 
   // ResourceCreationAPI implementation.
@@ -145,7 +144,6 @@
   DISALLOW_COPY_AND_ASSIGN(ResourceCreationImpl);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_RESOURCE_CREATION_IMPL_H_
diff --git a/content/renderer/pepper/resource_helper.cc b/content/renderer/pepper/resource_helper.cc
index c665223..0f4ebda 100644
--- a/content/renderer/pepper/resource_helper.cc
+++ b/content/renderer/pepper/resource_helper.cc
@@ -6,36 +6,34 @@
 
 #include "base/logging.h"
 #include "content/renderer/pepper/host_globals.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_module.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "ppapi/shared_impl/resource.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // static
-PluginInstanceImpl* ResourceHelper::GetPluginInstance(
+PepperPluginInstanceImpl* ResourceHelper::GetPluginInstance(
     const ::ppapi::Resource* resource) {
   return PPInstanceToPluginInstance(resource->pp_instance());
 }
 
-PluginInstanceImpl* ResourceHelper::PPInstanceToPluginInstance(
+PepperPluginInstanceImpl* ResourceHelper::PPInstanceToPluginInstance(
     PP_Instance instance) {
   return HostGlobals::Get()->GetInstance(instance);
 }
 
 PluginModule* ResourceHelper::GetPluginModule(
     const ::ppapi::Resource* resource) {
-  PluginInstanceImpl* instance = GetPluginInstance(resource);
+  PepperPluginInstanceImpl* instance = GetPluginInstance(resource);
   return instance ? instance->module() : NULL;
 }
 
 PluginDelegate* ResourceHelper::GetPluginDelegate(
     const ::ppapi::Resource* resource) {
-  PluginInstanceImpl* instance = GetPluginInstance(resource);
+  PepperPluginInstanceImpl* instance = GetPluginInstance(resource);
   return instance ? instance->delegate() : NULL;
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
diff --git a/content/renderer/pepper/resource_helper.h b/content/renderer/pepper/resource_helper.h
index fa8483f..2f855f6 100644
--- a/content/renderer/pepper/resource_helper.h
+++ b/content/renderer/pepper/resource_helper.h
@@ -13,10 +13,9 @@
 class Resource;
 }
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
-class PluginInstanceImpl;
+class PepperPluginInstanceImpl;
 class PluginModule;
 class PluginDelegate;
 
@@ -29,7 +28,7 @@
  public:
   // Returns the instance implementation object for the given resource, or NULL
   // if the resource has outlived its instance.
-  static PluginInstanceImpl* GetPluginInstance(
+  static PepperPluginInstanceImpl* GetPluginInstance(
       const ::ppapi::Resource* resource);
 
   // Returns the module for the given resource, or NULL if the resource has
@@ -41,13 +40,13 @@
   static PluginDelegate* GetPluginDelegate(const ::ppapi::Resource* resource);
 
   // Returns the instance implementation object for the pp_instance.
-  static PluginInstanceImpl* PPInstanceToPluginInstance(PP_Instance instance);
+  static PepperPluginInstanceImpl* PPInstanceToPluginInstance(
+      PP_Instance instance);
 
  private:
   DISALLOW_IMPLICIT_CONSTRUCTORS(ResourceHelper);
 };
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_RESOURCE_IMPL_HELPER_H_
diff --git a/content/renderer/pepper/url_request_info_util.cc b/content/renderer/pepper/url_request_info_util.cc
index 08fc076..d3c4506 100644
--- a/content/renderer/pepper/url_request_info_util.cc
+++ b/content/renderer/pepper/url_request_info_util.cc
@@ -35,8 +35,7 @@
 using WebKit::WebURL;
 using WebKit::WebURLRequest;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -201,5 +200,4 @@
       url_util::FindAndCompareScheme(data.url, "javascript", NULL);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/url_request_info_util.h b/content/renderer/pepper/url_request_info_util.h
index 88cabc8..4261535 100644
--- a/content/renderer/pepper/url_request_info_util.h
+++ b/content/renderer/pepper/url_request_info_util.h
@@ -17,8 +17,7 @@
 class WebURLRequest;
 }
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // Creates the WebKit URL request from the current request info. Returns true
 // on success, false if the request is invalid (in which case *dest may be
@@ -32,7 +31,6 @@
 CONTENT_EXPORT bool URLRequestRequiresUniversalAccess(
     const ::ppapi::URLRequestInfoData& data);
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_PPB_URL_REQUEST_INFO_UTIL_H_
diff --git a/content/renderer/pepper/url_response_info_util.cc b/content/renderer/pepper/url_response_info_util.cc
index f07a9b9..883f772 100644
--- a/content/renderer/pepper/url_response_info_util.cc
+++ b/content/renderer/pepper/url_response_info_util.cc
@@ -13,7 +13,6 @@
 #include "third_party/WebKit/public/platform/WebURL.h"
 #include "third_party/WebKit/public/platform/WebURLResponse.h"
 
-using webkit::ppapi::PPB_FileRef_Impl;
 using WebKit::WebHTTPHeaderVisitor;
 using WebKit::WebString;
 using WebKit::WebURLResponse;
diff --git a/content/renderer/pepper/usb_key_code_conversion.cc b/content/renderer/pepper/usb_key_code_conversion.cc
index 2640417..5ad8226 100644
--- a/content/renderer/pepper/usb_key_code_conversion.cc
+++ b/content/renderer/pepper/usb_key_code_conversion.cc
@@ -8,8 +8,7 @@
 
 using WebKit::WebKeyboardEvent;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 #if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_WIN)
 
@@ -19,5 +18,4 @@
 
 #endif
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/usb_key_code_conversion.h b/content/renderer/pepper/usb_key_code_conversion.h
index 459e662..22583cc 100644
--- a/content/renderer/pepper/usb_key_code_conversion.h
+++ b/content/renderer/pepper/usb_key_code_conversion.h
@@ -11,8 +11,7 @@
 class WebKeyboardEvent;
 }  // namespace WebKit
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 // Returns a 32-bit "USB Key Code" for the key identifier by the supplied
 // WebKeyboardEvent. The supplied event must be a KeyDown or KeyUp.
@@ -21,7 +20,6 @@
 // is returned.
 uint32_t UsbKeyCodeForKeyboardEvent(const WebKit::WebKeyboardEvent& key_event);
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_USB_KEY_CODE_CONVERSION_H_
diff --git a/content/renderer/pepper/usb_key_code_conversion_linux.cc b/content/renderer/pepper/usb_key_code_conversion_linux.cc
index fd5e2b1..4c41b91 100644
--- a/content/renderer/pepper/usb_key_code_conversion_linux.cc
+++ b/content/renderer/pepper/usb_key_code_conversion_linux.cc
@@ -9,8 +9,7 @@
 
 using WebKit::WebKeyboardEvent;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -28,5 +27,4 @@
   return NativeKeycodeToUsbKeycode(key_event.nativeKeyCode);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/usb_key_code_conversion_mac.cc b/content/renderer/pepper/usb_key_code_conversion_mac.cc
index 4f55366..2a7e3d7 100644
--- a/content/renderer/pepper/usb_key_code_conversion_mac.cc
+++ b/content/renderer/pepper/usb_key_code_conversion_mac.cc
@@ -9,8 +9,7 @@
 
 using WebKit::WebKeyboardEvent;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -24,5 +23,4 @@
   return NativeKeycodeToUsbKeycode(key_event.nativeKeyCode);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/usb_key_code_conversion_win.cc b/content/renderer/pepper/usb_key_code_conversion_win.cc
index 5ef1d81..126f3d6 100644
--- a/content/renderer/pepper/usb_key_code_conversion_win.cc
+++ b/content/renderer/pepper/usb_key_code_conversion_win.cc
@@ -9,8 +9,7 @@
 
 using WebKit::WebKeyboardEvent;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -29,5 +28,4 @@
   return NativeKeycodeToUsbKeycode(scancode);
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/v8_var_converter.cc b/content/renderer/pepper/v8_var_converter.cc
index 202a7cc..25f9b66 100644
--- a/content/renderer/pepper/v8_var_converter.cc
+++ b/content/renderer/pepper/v8_var_converter.cc
@@ -60,8 +60,7 @@
 #endif
 }  // namespace BASE_HASH_NAMESPACE
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 namespace V8VarConverter {
 
 namespace {
@@ -466,5 +465,4 @@
 }
 
 }  // namespace V8VarConverter
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/pepper/v8_var_converter.h b/content/renderer/pepper/v8_var_converter.h
index 2a07bfb..87a6b36 100644
--- a/content/renderer/pepper/v8_var_converter.h
+++ b/content/renderer/pepper/v8_var_converter.h
@@ -12,8 +12,7 @@
 #include "v8/include/v8.h"
 #include "content/common/content_export.h"
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 namespace V8VarConverter {
 
 // Converts the given PP_Var to a v8::Value. True is returned upon success.
@@ -29,7 +28,6 @@
                                 PP_Var* result);
 
 }  // namespace V8VarConverter
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
 
 #endif  // CONTENT_RENDERER_PEPPER_V8_VAR_CONVERTER_H
diff --git a/content/renderer/pepper/v8_var_converter_unittest.cc b/content/renderer/pepper/v8_var_converter_unittest.cc
index 794c665..3c3365d 100644
--- a/content/renderer/pepper/v8_var_converter_unittest.cc
+++ b/content/renderer/pepper/v8_var_converter_unittest.cc
@@ -35,8 +35,7 @@
 using ppapi::TestEqual;
 using ppapi::VarTracker;
 
-namespace webkit {
-namespace ppapi {
+namespace content {
 
 namespace {
 
@@ -383,5 +382,4 @@
   }
 }
 
-}  // namespace ppapi
-}  // namespace webkit
+}  // namespace content
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc
index 5e8e0c6..fedb2a2 100644
--- a/content/renderer/render_view_browsertest.cc
+++ b/content/renderer/render_view_browsertest.cc
@@ -12,6 +12,8 @@
 #include "content/public/browser/native_web_keyboard_event.h"
 #include "content/public/browser/web_ui_controller_factory.h"
 #include "content/public/common/bindings_policy.h"
+#include "content/public/common/page_zoom.h"
+#include "content/public/common/url_constants.h"
 #include "content/public/common/url_utils.h"
 #include "content/public/renderer/document_state.h"
 #include "content/public/renderer/history_item_serialization.h"
@@ -1830,10 +1832,8 @@
 #endif
 
 TEST_F(RenderViewImplTest, ZoomLimit) {
-  const double kMinZoomLevel =
-      WebKit::WebView::zoomFactorToZoomLevel(kMinimumZoomFactor);
-  const double kMaxZoomLevel =
-      WebKit::WebView::zoomFactorToZoomLevel(kMaximumZoomFactor);
+  const double kMinZoomLevel = ZoomFactorToZoomLevel(kMinimumZoomFactor);
+  const double kMaxZoomLevel = ZoomFactorToZoomLevel(kMaximumZoomFactor);
 
   ViewMsg_Navigate_Params params;
   params.page_id = -1;
@@ -1849,9 +1849,8 @@
   EXPECT_DOUBLE_EQ(kMinZoomLevel, view()->GetWebView()->zoomLevel());
 
   // It should work even when the zoom limit is temporarily changed in the page.
-  view()->GetWebView()->zoomLimitsChanged(
-      WebKit::WebView::zoomFactorToZoomLevel(1.0),
-      WebKit::WebView::zoomFactorToZoomLevel(1.0));
+  view()->GetWebView()->zoomLimitsChanged(ZoomFactorToZoomLevel(1.0),
+                                          ZoomFactorToZoomLevel(1.0));
   params.url = GURL("data:text/html,max_zoomlimit_test");
   view()->OnSetZoomLevelForLoadingURL(params.url, kMaxZoomLevel);
   view()->OnNavigate(params);
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index f924813..debf4ec 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -55,6 +55,7 @@
 #include "content/public/common/drop_data.h"
 #include "content/public/common/favicon_url.h"
 #include "content/public/common/file_chooser_params.h"
+#include "content/public/common/page_zoom.h"
 #include "content/public/common/ssl_status.h"
 #include "content/public/common/three_d_api_types.h"
 #include "content/public/common/url_constants.h"
@@ -97,6 +98,7 @@
 #include "content/renderer/media/media_stream_dependency_factory.h"
 #include "content/renderer/media/media_stream_dispatcher.h"
 #include "content/renderer/media/media_stream_impl.h"
+#include "content/renderer/media/midi_dispatcher.h"
 #include "content/renderer/media/render_media_log.h"
 #include "content/renderer/media/rtc_peer_connection_handler.h"
 #include "content/renderer/media/video_capture_impl_manager.h"
@@ -1862,9 +1864,8 @@
     // Reset the zoom limits in case a plugin had changed them previously. This
     // will also call us back which will cause us to send a message to
     // update WebContentsImpl.
-    webview()->zoomLimitsChanged(
-        WebView::zoomFactorToZoomLevel(kMinimumZoomFactor),
-        WebView::zoomFactorToZoomLevel(kMaximumZoomFactor));
+    webview()->zoomLimitsChanged(ZoomFactorToZoomLevel(kMinimumZoomFactor),
+                                 ZoomFactorToZoomLevel(kMaximumZoomFactor));
 
     // Set zoom level, but don't do it for full-page plugin since they don't use
     // the same zoom settings.
@@ -2234,7 +2235,7 @@
 }
 
 RenderWidgetFullscreenPepper* RenderViewImpl::CreatePepperFullscreenContainer(
-    webkit::ppapi::PluginInstanceImpl* plugin) {
+    PepperPluginInstanceImpl* plugin) {
 #if defined(ENABLE_PLUGINS)
   GURL active_url;
   if (webview() && webview()->mainFrame())
@@ -3970,6 +3971,12 @@
 
   gfx::Size size = webview()->contentsPreferredMinimumSize();
 
+  // In the presence of zoom, these sizes are still reported as if unzoomed,
+  // so we need to adjust.
+  double zoom_factor = ZoomLevelToZoomFactor(webview()->zoomLevel());
+  size.set_width(static_cast<int>(size.width() * zoom_factor));
+  size.set_height(static_cast<int>(size.height() * zoom_factor));
+
   if (size == preferred_size_)
     return;
 
@@ -5449,13 +5456,12 @@
   }
 }
 
-webkit::ppapi::PluginInstanceImpl*
-    RenderViewImpl::GetBitmapForOptimizedPluginPaint(
-        const gfx::Rect& paint_bounds,
-        TransportDIB** dib,
-        gfx::Rect* location,
-        gfx::Rect* clip,
-        float* scale_factor) {
+PepperPluginInstanceImpl* RenderViewImpl::GetBitmapForOptimizedPluginPaint(
+    const gfx::Rect& paint_bounds,
+    TransportDIB** dib,
+    gfx::Rect* location,
+    gfx::Rect* clip,
+    float* scale_factor) {
   return pepper_helper_->GetBitmapForOptimizedPluginPaint(
       paint_bounds, dib, location, clip, scale_factor);
 }
@@ -6029,9 +6035,9 @@
   bool remember = !webview()->mainFrame()->document().isPluginDocument();
 
   int minimum_percent = static_cast<int>(
-      WebView::zoomLevelToZoomFactor(minimum_level) * 100);
+      ZoomLevelToZoomFactor(minimum_level) * 100);
   int maximum_percent = static_cast<int>(
-      WebView::zoomLevelToZoomFactor(maximum_level) * 100);
+      ZoomLevelToZoomFactor(maximum_level) * 100);
 
   Send(new ViewHostMsg_UpdateZoomLimits(
       routing_id_, minimum_percent, maximum_percent, remember));
@@ -6050,6 +6056,14 @@
       GURL(webview()->mainFrame()->document().url())));
 }
 
+double RenderViewImpl::zoomLevelToZoomFactor(double zoom_level) const {
+  return ZoomLevelToZoomFactor(zoom_level);
+}
+
+double RenderViewImpl::zoomFactorToZoomLevel(double factor) const {
+  return ZoomFactorToZoomLevel(factor);
+}
+
 void RenderViewImpl::registerProtocolHandler(const WebString& scheme,
                                              const WebString& base_url,
                                              const WebString& url,
@@ -6084,6 +6098,12 @@
   return web_user_media_client_;
 }
 
+WebKit::WebMIDIClient* RenderViewImpl::webMIDIClient() {
+  if (!midi_dispatcher_)
+    midi_dispatcher_ = new MIDIDispatcher(this);
+  return midi_dispatcher_;
+}
+
 void RenderViewImpl::draggableRegionsChanged() {
   FOR_EACH_OBSERVER(
       RenderViewObserver,
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index d728cd4..e626f37 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -84,14 +84,6 @@
 struct SelectedFileInfo;
 }  // namespace ui
 
-namespace webkit {
-
-namespace ppapi {
-class PluginInstanceImpl;
-}  // namespace ppapi
-
-}  // namespace webkit
-
 namespace WebKit {
 class WebApplicationCacheHost;
 class WebApplicationCacheHostClient;
@@ -149,11 +141,13 @@
 class InputTagSpeechDispatcher;
 class JavaBridgeDispatcher;
 class LoadProgressTracker;
+class MIDIDispatcher;
 class MediaStreamClient;
 class MediaStreamDispatcher;
 class MouseLockDispatcher;
 class NavigationState;
 class NotificationProvider;
+class PepperPluginInstanceImpl;
 class RenderViewObserver;
 class RenderViewTest;
 class RendererAccessibility;
@@ -300,7 +294,7 @@
 
   // Creates a fullscreen container for a pepper plugin instance.
   RenderWidgetFullscreenPepper* CreatePepperFullscreenContainer(
-      webkit::ppapi::PluginInstanceImpl* plugin);
+      PepperPluginInstanceImpl* plugin);
 
   // Informs the render view that a PPAPI plugin has gained or lost focus.
   void PpapiPluginFocusChanged();
@@ -502,12 +496,15 @@
   virtual WebKit::WebDeviceOrientationClient* deviceOrientationClient();
   virtual void zoomLimitsChanged(double minimum_level, double maximum_level);
   virtual void zoomLevelChanged();
+  virtual double zoomLevelToZoomFactor(double zoom_level) const;
+  virtual double zoomFactorToZoomLevel(double factor) const;
   virtual void registerProtocolHandler(const WebKit::WebString& scheme,
                                        const WebKit::WebString& base_url,
                                        const WebKit::WebString& url,
                                        const WebKit::WebString& title);
   virtual WebKit::WebPageVisibilityState visibilityState() const;
   virtual WebKit::WebUserMediaClient* userMediaClient();
+  virtual WebKit::WebMIDIClient* webMIDIClient();
   virtual void draggableRegionsChanged();
 
 #if defined(OS_ANDROID)
@@ -755,7 +752,7 @@
   virtual void WillInitiatePaint() OVERRIDE;
   virtual void DidInitiatePaint() OVERRIDE;
   virtual void DidFlushPaint() OVERRIDE;
-  virtual webkit::ppapi::PluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
+  virtual PepperPluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
       const gfx::Rect& paint_bounds,
       TransportDIB** dib,
       gfx::Rect* location,
@@ -1415,6 +1412,9 @@
   MediaStreamClient* media_stream_client_;
   WebKit::WebUserMediaClient* web_user_media_client_;
 
+  // MIDIClient attached to this view; lazily initialized.
+  MIDIDispatcher* midi_dispatcher_;
+
   DevToolsAgent* devtools_agent_;
 
   // The current accessibility mode.
@@ -1535,9 +1535,9 @@
   // DOM automation bindings are enabled.
   scoped_ptr<DomAutomationController> dom_automation_controller_;
 
-   // Allows JS to read out a variety of internal various metrics. The JS object
-   // is only exposed when the stats collection bindings are enabled.
-   scoped_ptr<StatsCollectionController> stats_collection_controller_;
+  // Allows JS to read out a variety of internal various metrics. The JS object
+  // is only exposed when the stats collection bindings are enabled.
+  scoped_ptr<StatsCollectionController> stats_collection_controller_;
 
   // This field stores drag/drop related info for the event that is currently
   // being handled. If the current event results in starting a drag/drop
diff --git a/content/renderer/render_view_pepper_helper.cc b/content/renderer/render_view_pepper_helper.cc
index de27dfc..c98bcd1 100644
--- a/content/renderer/render_view_pepper_helper.cc
+++ b/content/renderer/render_view_pepper_helper.cc
@@ -17,13 +17,13 @@
   return NULL;
 }
 
-webkit::ppapi::PluginInstanceImpl*
-RenderViewPepperHelper::GetBitmapForOptimizedPluginPaint(
-    const gfx::Rect& paint_bounds,
-    TransportDIB** dib,
-    gfx::Rect* location,
-    gfx::Rect* clip,
-    float* scale_factor) {
+PepperPluginInstanceImpl*
+    RenderViewPepperHelper::GetBitmapForOptimizedPluginPaint(
+        const gfx::Rect& paint_bounds,
+        TransportDIB** dib,
+        gfx::Rect* location,
+        gfx::Rect* clip,
+        float* scale_factor) {
   return NULL;
 }
 
diff --git a/content/renderer/render_view_pepper_helper.h b/content/renderer/render_view_pepper_helper.h
index 4d13c3e..54d33d5 100644
--- a/content/renderer/render_view_pepper_helper.h
+++ b/content/renderer/render_view_pepper_helper.h
@@ -30,12 +30,6 @@
 class Range;
 }
 
-namespace webkit {
-namespace ppapi {
-class PluginInstanceImpl;
-}
-}
-
 namespace WebKit {
 struct WebCompositionUnderline;
 struct WebPluginParams;
@@ -43,6 +37,7 @@
 }
 
 namespace content {
+class PepperPluginInstanceImpl;
 struct WebPluginInfo;
 
 class CONTENT_EXPORT RenderViewPepperHelper {
@@ -56,7 +51,7 @@
 
   // Called by RenderView to implement the corresponding function in its base
   // class RenderWidget (see that for more).
-  virtual webkit::ppapi::PluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
+  virtual PepperPluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
       const gfx::Rect& paint_bounds,
       TransportDIB** dib,
       gfx::Rect* location,
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index fa49316..605bae5 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -31,7 +31,7 @@
 #include "content/renderer/gpu/mailbox_output_surface.h"
 #include "content/renderer/gpu/render_widget_compositor.h"
 #include "content/renderer/ime_event_guard.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/render_process.h"
 #include "content/renderer/render_process_visibility_manager.h"
 #include "content/renderer/render_thread_impl.h"
@@ -965,7 +965,7 @@
   TransportDIB* optimized_dib = NULL;
   gfx::Rect optimized_copy_rect, optimized_copy_location;
   float dib_scale_factor;
-  webkit::ppapi::PluginInstanceImpl* optimized_instance =
+  PepperPluginInstanceImpl* optimized_instance =
       GetBitmapForOptimizedPluginPaint(rect, &optimized_dib,
                                        &optimized_copy_location,
                                        &optimized_copy_rect,
@@ -2021,13 +2021,12 @@
   }
 }
 
-webkit::ppapi::PluginInstanceImpl*
-    RenderWidget::GetBitmapForOptimizedPluginPaint(
-        const gfx::Rect& paint_bounds,
-        TransportDIB** dib,
-        gfx::Rect* location,
-        gfx::Rect* clip,
-        float* scale_factor) {
+PepperPluginInstanceImpl* RenderWidget::GetBitmapForOptimizedPluginPaint(
+    const gfx::Rect& paint_bounds,
+    TransportDIB** dib,
+    gfx::Rect* location,
+    gfx::Rect* clip,
+    float* scale_factor) {
   // Bare RenderWidgets don't support optimized plugin painting.
   return NULL;
 }
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h
index 640b82b..4f20cc6 100644
--- a/content/renderer/render_widget.h
+++ b/content/renderer/render_widget.h
@@ -64,13 +64,8 @@
 class Range;
 }
 
-namespace webkit {
-namespace ppapi {
-class PluginInstanceImpl;
-}  // namespace ppapi
-}  // namespace webkit
-
 namespace content {
+class PepperPluginInstanceImpl;
 class RenderWidgetCompositor;
 class RenderWidgetTest;
 struct GpuRenderingStats;
@@ -381,7 +376,7 @@
   //
   // A return value of null means optimized painting can not be used and we
   // should continue with the normal painting code path.
-  virtual webkit::ppapi::PluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
+  virtual PepperPluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
       const gfx::Rect& paint_bounds,
       TransportDIB** dib,
       gfx::Rect* location,
diff --git a/content/renderer/render_widget_fullscreen_pepper.cc b/content/renderer/render_widget_fullscreen_pepper.cc
index 1eb0ff9..7a04ac7 100644
--- a/content/renderer/render_widget_fullscreen_pepper.cc
+++ b/content/renderer/render_widget_fullscreen_pepper.cc
@@ -14,8 +14,8 @@
 #include "content/public/common/content_switches.h"
 #include "content/renderer/gpu/render_widget_compositor.h"
 #include "content/renderer/pepper/pepper_platform_context_3d_impl.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/plugin_delegate.h"
-#include "content/renderer/pepper/ppapi_plugin_instance_impl.h"
 #include "content/renderer/render_thread_impl.h"
 #include "gpu/command_buffer/client/gles2_implementation.h"
 #include "skia/ext/platform_canvas.h"
@@ -348,7 +348,8 @@
 
 // static
 RenderWidgetFullscreenPepper* RenderWidgetFullscreenPepper::Create(
-    int32 opener_id, webkit::ppapi::PluginInstanceImpl* plugin,
+    int32 opener_id,
+    PepperPluginInstanceImpl* plugin,
     const GURL& active_url,
     const WebKit::WebScreenInfo& screen_info) {
   DCHECK_NE(MSG_ROUTING_NONE, opener_id);
@@ -360,7 +361,7 @@
 }
 
 RenderWidgetFullscreenPepper::RenderWidgetFullscreenPepper(
-    webkit::ppapi::PluginInstanceImpl* plugin,
+    PepperPluginInstanceImpl* plugin,
     const GURL& active_url,
     const WebKit::WebScreenInfo& screen_info)
     : RenderWidgetFullscreen(screen_info),
@@ -467,13 +468,13 @@
   RenderWidget::Close();
 }
 
-webkit::ppapi::PluginInstanceImpl*
-RenderWidgetFullscreenPepper::GetBitmapForOptimizedPluginPaint(
-    const gfx::Rect& paint_bounds,
-    TransportDIB** dib,
-    gfx::Rect* location,
-    gfx::Rect* clip,
-    float* scale_factor) {
+PepperPluginInstanceImpl*
+    RenderWidgetFullscreenPepper::GetBitmapForOptimizedPluginPaint(
+        const gfx::Rect& paint_bounds,
+        TransportDIB** dib,
+        gfx::Rect* location,
+        gfx::Rect* clip,
+        float* scale_factor) {
   if (plugin_ && plugin_->GetBitmapForOptimizedPluginPaint(
           paint_bounds, dib, location, clip, scale_factor)) {
     return plugin_;
diff --git a/content/renderer/render_widget_fullscreen_pepper.h b/content/renderer/render_widget_fullscreen_pepper.h
index 840a979..29980e8 100644
--- a/content/renderer/render_widget_fullscreen_pepper.h
+++ b/content/renderer/render_widget_fullscreen_pepper.h
@@ -11,30 +11,22 @@
 #include "content/renderer/render_widget_fullscreen.h"
 #include "third_party/WebKit/public/web/WebWidget.h"
 
-namespace webkit {
-namespace ppapi {
-
-class PluginInstanceImpl;
-
-}  // namespace ppapi
-}  // namespace webkit
-
 namespace WebKit {
 class WebLayer;
 }
 
 namespace content {
+class PepperPluginInstanceImpl;
 
 // A RenderWidget that hosts a fullscreen pepper plugin. This provides a
 // FullscreenContainer that the plugin instance can callback into to e.g.
 // invalidate rects.
-class RenderWidgetFullscreenPepper :
-    public RenderWidgetFullscreen,
-    public webkit::ppapi::FullscreenContainer {
+class RenderWidgetFullscreenPepper : public RenderWidgetFullscreen,
+                                     public FullscreenContainer {
  public:
   static RenderWidgetFullscreenPepper* Create(
       int32 opener_id,
-      webkit::ppapi::PluginInstanceImpl* plugin,
+      PepperPluginInstanceImpl* plugin,
       const GURL& active_url,
       const WebKit::WebScreenInfo& screen_info);
 
@@ -51,7 +43,7 @@
   virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
 
   // Could be NULL when this widget is closing.
-  webkit::ppapi::PluginInstanceImpl* plugin() const { return plugin_; }
+  PepperPluginInstanceImpl* plugin() const { return plugin_; }
 
   MouseLockDispatcher* mouse_lock_dispatcher() const {
     return mouse_lock_dispatcher_.get();
@@ -60,7 +52,7 @@
   bool is_compositing() const { return !!layer_; }
 
  protected:
-  RenderWidgetFullscreenPepper(webkit::ppapi::PluginInstanceImpl* plugin,
+  RenderWidgetFullscreenPepper(PepperPluginInstanceImpl* plugin,
                                const GURL& active_url,
                                const WebKit::WebScreenInfo& screen_info);
   virtual ~RenderWidgetFullscreenPepper();
@@ -70,7 +62,7 @@
   virtual void DidInitiatePaint() OVERRIDE;
   virtual void DidFlushPaint() OVERRIDE;
   virtual void Close() OVERRIDE;
-  virtual webkit::ppapi::PluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
+  virtual PepperPluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
       const gfx::Rect& paint_bounds,
       TransportDIB** dib,
       gfx::Rect* location,
@@ -90,7 +82,7 @@
   GURL active_url_;
 
   // The plugin instance this widget wraps.
-  webkit::ppapi::PluginInstanceImpl* plugin_;
+  PepperPluginInstanceImpl* plugin_;
 
   WebKit::WebLayer* layer_;
 
diff --git a/content/renderer/renderer_main.cc b/content/renderer/renderer_main.cc
index b179545..d1b7340 100644
--- a/content/renderer/renderer_main.cc
+++ b/content/renderer/renderer_main.cc
@@ -28,7 +28,6 @@
 #include "content/public/renderer/content_renderer_client.h"
 #include "content/renderer/browser_plugin/browser_plugin_manager_impl.h"
 #include "content/renderer/pepper/pepper_plugin_registry.h"
-#include "content/renderer/pepper/ppapi_interface_factory.h"
 #include "content/renderer/render_process_impl.h"
 #include "content/renderer/render_thread_impl.h"
 #include "content/renderer/renderer_main_platform_delegate.h"
@@ -108,11 +107,6 @@
   DISALLOW_COPY_AND_ASSIGN(MemoryObserver);
 };
 
-
-const void* ContentPPAPIInterfaceFactory(const std::string& interface_name) {
-  return GetContentClient()->renderer()->CreatePPAPIInterface(interface_name);
-}
-
 }  // namespace
 
 // mainline routine for running as the Renderer process
@@ -202,10 +196,6 @@
   }
 
 #if defined(ENABLE_PLUGINS)
-  webkit::ppapi::PpapiInterfaceFactoryManager* factory_manager =
-      webkit::ppapi::PpapiInterfaceFactoryManager::GetInstance();
-  factory_manager->RegisterFactory(ContentPPAPIInterfaceFactory);
-
   // Load pepper plugins before engaging the sandbox.
   PepperPluginRegistry::GetInstance();
 #endif
diff --git a/content/renderer/renderer_webkitplatformsupport_impl.cc b/content/renderer/renderer_webkitplatformsupport_impl.cc
index 211c567..5a868ce 100644
--- a/content/renderer/renderer_webkitplatformsupport_impl.cc
+++ b/content/renderer/renderer_webkitplatformsupport_impl.cc
@@ -1137,6 +1137,12 @@
 //------------------------------------------------------------------------------
 
 WebKit::WebCrypto* RendererWebKitPlatformSupportImpl::crypto() {
+  // Use a mock implementation for testing in-progress work.
+  WebKit::WebCrypto* crypto =
+      GetContentClient()->renderer()->OverrideWebCrypto();
+  if (crypto)
+    return crypto;
+
   if (!web_crypto_)
     web_crypto_.reset(new WebCryptoImpl());
   return web_crypto_.get();
diff --git a/content/renderer/webplugin_delegate_proxy.h b/content/renderer/webplugin_delegate_proxy.h
index c0838a2..46bf027 100644
--- a/content/renderer/webplugin_delegate_proxy.h
+++ b/content/renderer/webplugin_delegate_proxy.h
@@ -35,12 +35,6 @@
 class WaitableEvent;
 }
 
-namespace webkit {
-namespace npapi {
-class WebPlugin;
-}
-}
-
 namespace content {
 class NPObjectStub;
 class PluginChannelHost;
diff --git a/content/shell/renderer/shell_content_renderer_client.cc b/content/shell/renderer/shell_content_renderer_client.cc
index a1522b9..657426f 100644
--- a/content/shell/renderer/shell_content_renderer_client.cc
+++ b/content/shell/renderer/shell_content_renderer_client.cc
@@ -170,6 +170,14 @@
   return clipboard_.get();
 }
 
+WebKit::WebCrypto* ShellContentRendererClient::OverrideWebCrypto() {
+  if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
+    return NULL;
+  WebTestInterfaces* interfaces =
+      ShellRenderProcessObserver::GetInstance()->test_interfaces();
+  return interfaces->crypto();
+}
+
 WebHyphenator* ShellContentRendererClient::OverrideWebHyphenator() {
   if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
     return NULL;
diff --git a/content/shell/renderer/shell_content_renderer_client.h b/content/shell/renderer/shell_content_renderer_client.h
index ffac51d..768629c 100644
--- a/content/shell/renderer/shell_content_renderer_client.h
+++ b/content/shell/renderer/shell_content_renderer_client.h
@@ -57,6 +57,7 @@
   virtual WebKit::WebAudioDevice* OverrideCreateAudioDevice(
       double sample_rate) OVERRIDE;
   virtual WebKit::WebClipboard* OverrideWebClipboard() OVERRIDE;
+  virtual WebKit::WebCrypto* OverrideWebCrypto() OVERRIDE;
   virtual WebKit::WebHyphenator* OverrideWebHyphenator() OVERRIDE;
   virtual WebKit::WebThemeEngine* OverrideThemeEngine() OVERRIDE;
   virtual bool AllowBrowserPlugin(
diff --git a/content/shell/webkit_test_controller.cc b/content/shell/webkit_test_controller.cc
index 851bceb..8189db2 100644
--- a/content/shell/webkit_test_controller.cc
+++ b/content/shell/webkit_test_controller.cc
@@ -9,7 +9,6 @@
 #include "base/base64.h"
 #include "base/command_line.h"
 #include "base/message_loop/message_loop.h"
-#include "base/process_util.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
diff --git a/content/test/data/browser_plugin_embedder_guest_unresponsive.html b/content/test/data/browser_plugin_embedder_guest_unresponsive.html
deleted file mode 100644
index f6e819b..0000000
--- a/content/test/data/browser_plugin_embedder_guest_unresponsive.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<script type="text/javascript">
-var unresponsiveCalled = false;
-var responsiveCalled = false;
-function SetSrc(src) {
-  plugin = document.getElementById('plugin');
-  plugin.src = src;
-}
-function GuestUnresponsive(evt) {
-  unresponsiveCalled = true;
-}
-
-function GuestResponsive(evt) {
-  responsiveCalled = true;
-  document.title = "done";
-}
-</script>
-
-<!-- The plugin size is same as the browser's size -->
-<object id="plugin"
-    tabindex="0"
-    type="application/browser-plugin"
-    style="height: 100%; width: 100%; border: 0px"></object>
-
-<script>
-  var plugin = document.getElementById('plugin');
-  plugin.addEventListener('-internal-unresponsive', GuestUnresponsive);
-  plugin.addEventListener('-internal-responsive', GuestResponsive);
-  plugin.addEventListener('-internal-instanceid-allocated', function(e) {
-    plugin['-internal-attach']({});
-  });
-</script>
diff --git a/content/zygote/zygote_linux.cc b/content/zygote/zygote_linux.cc
index 8930022..abb52ae 100644
--- a/content/zygote/zygote_linux.cc
+++ b/content/zygote/zygote_linux.cc
@@ -19,7 +19,7 @@
 #include "base/posix/eintr_wrapper.h"
 #include "base/posix/global_descriptors.h"
 #include "base/posix/unix_domain_socket_linux.h"
-#include "base/process_util.h"
+#include "base/process/kill.h"
 #include "content/common/sandbox_linux.h"
 #include "content/common/set_process_title.h"
 #include "content/common/zygote_commands_linux.h"
diff --git a/content/zygote/zygote_linux.h b/content/zygote/zygote_linux.h
index d9e515a..3b175ac 100644
--- a/content/zygote/zygote_linux.h
+++ b/content/zygote/zygote_linux.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/containers/hash_tables.h"
-#include "base/process.h"
+#include "base/process/process.h"
 
 class Pickle;
 class PickleIterator;
diff --git a/content/zygote/zygote_main_linux.cc b/content/zygote/zygote_main_linux.cc
index 0df288f..1f0e9f5 100644
--- a/content/zygote/zygote_main_linux.cc
+++ b/content/zygote/zygote_main_linux.cc
@@ -24,7 +24,6 @@
 #include "base/pickle.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/posix/unix_domain_socket_linux.h"
-#include "base/process_util.h"
 #include "base/rand_util.h"
 #include "base/sys_info.h"
 #include "build/build_config.h"
diff --git a/media/midi/midi_manager.cc b/media/midi/midi_manager.cc
index f991865..3f74477 100644
--- a/media/midi/midi_manager.cc
+++ b/media/midi/midi_manager.cc
@@ -19,12 +19,7 @@
 
 MIDIManager::~MIDIManager() {}
 
-bool MIDIManager::RequestAccess(MIDIManagerClient* client, int access) {
-  // TODO(crogers): determine if user prompt is necessary here.
-  // For now, simply don't allow sysex.
-  if (access != kNoSystemExclusive)
-    return false;
-
+bool MIDIManager::StartSession(MIDIManagerClient* client) {
   // Lazily initialize the MIDI back-end.
   if (!initialized_)
     initialized_ = Initialize();
@@ -37,7 +32,7 @@
   return initialized_;
 }
 
-void MIDIManager::ReleaseAccess(MIDIManagerClient* client) {
+void MIDIManager::EndSession(MIDIManagerClient* client) {
   base::AutoLock auto_lock(clients_lock_);
   ClientList::iterator i = clients_.find(client);
   if (i != clients_.end())
diff --git a/media/midi/midi_manager.h b/media/midi/midi_manager.h
index 1df444f..e13b2c3 100644
--- a/media/midi/midi_manager.h
+++ b/media/midi/midi_manager.h
@@ -36,24 +36,19 @@
 // Manages access to all MIDI hardware.
 class MEDIA_EXPORT MIDIManager {
  public:
-  enum AccessType {
-    kNoSystemExclusive,
-    kSystemExclusive
-  };
-
   static MIDIManager* Create();
 
   MIDIManager();
   virtual ~MIDIManager();
 
-  // A client calls RequestAccess() to receive and send MIDI data.
-  // If access is approved, the MIDI system is lazily initialized
+  // A client calls StartSession() to receive and send MIDI data.
+  // If the session is ready to start, the MIDI system is lazily initialized
   // and the client is registered to receive MIDI data.
-  // Returns |true| if access is approved.
-  bool RequestAccess(MIDIManagerClient* client, int access);
+  // Returns |true| if the session succeeds to start.
+  bool StartSession(MIDIManagerClient* client);
 
-  // A client calls ReleaseAccess() to stop receiving MIDI data.
-  void ReleaseAccess(MIDIManagerClient* client);
+  // A client calls ReleaseSession() to stop receiving MIDI data.
+  void EndSession(MIDIManagerClient* client);
 
   // SendMIDIData() sends one or more messages at the given time.
   // |port_index| represents the specific output port from output_ports().
diff --git a/native_client_sdk/src/examples/api/websocket/index.html b/native_client_sdk/src/examples/api/websocket/index.html
index e7caa26..6ad6563 100644
--- a/native_client_sdk/src/examples/api/websocket/index.html
+++ b/native_client_sdk/src/examples/api/websocket/index.html
@@ -30,7 +30,7 @@
   <form id="sendForm">
     <input type="text" id="message" value="hello" style="width: 400px">
     <input type="submit" value="Send">
-    <input type="checkbox" id="type">as a binary message
+    <input type="checkbox" id="is_binary">as a binary message
   </form>
 
   <button id="closeButton">Close</button>
diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc b/native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc
index c326e1d..9cad2c1 100644
--- a/native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc
+++ b/native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc
@@ -3,15 +3,23 @@
 // found in the LICENSE file.
 
 #include <errno.h>
+
 #include "nacl_io/kernel_intercept.h"
 #include "nacl_io/kernel_proxy.h"
 #include "nacl_io/kernel_wrap.h"
+#include "nacl_io/osmman.h"
 #include "nacl_io/pepper_interface.h"
 #include "nacl_io/pepper_interface.h"
 #include "nacl_io/real_pepper_interface.h"
 
 using namespace nacl_io;
 
+#define ON_NOSYS_RETURN(x)    \
+  if (!ki_is_initialized()) { \
+    errno = ENOSYS;           \
+    return x;                 \
+  }
+
 static KernelProxy* s_kp;
 
 void ki_init(void* kp) {
@@ -38,10 +46,13 @@
 }
 
 void ki_uninit() {
+  kernel_wrap_uninit();
   s_kp = NULL;
 }
 
+
 int ki_chdir(const char* path) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->chdir(path);
 }
 
@@ -61,135 +72,162 @@
 }
 
 char* ki_getwd(char* buf) {
+  ON_NOSYS_RETURN(NULL);
   return s_kp->getwd(buf);
 }
 
 int ki_dup(int oldfd) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->dup(oldfd);
 }
 
 int ki_dup2(int oldfd, int newfd) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->dup2(oldfd, newfd);
 }
 
 int ki_chmod(const char *path, mode_t mode) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->chmod(path, mode);
 }
 
 int ki_stat(const char *path, struct stat *buf) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->stat(path, buf);
 }
 
 int ki_mkdir(const char *path, mode_t mode) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->mkdir(path, mode);
 }
 
 int ki_rmdir(const char *path) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->rmdir(path);
 }
 
 int ki_mount(const char *source, const char *target, const char *filesystemtype,
              unsigned long mountflags, const void *data) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->mount(source, target, filesystemtype, mountflags, data);
 }
 
 int ki_umount(const char *path) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->umount(path);
 }
 
 int ki_open(const char *path, int oflag) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->open(path, oflag);
 }
 
 ssize_t ki_read(int fd, void *buf, size_t nbyte) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->read(fd, buf, nbyte);
 }
 
 ssize_t ki_write(int fd, const void *buf, size_t nbyte) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->write(fd, buf, nbyte);
 }
 
 int ki_fstat(int fd, struct stat *buf){
+  ON_NOSYS_RETURN(-1);
   return s_kp->fstat(fd, buf);
 }
 
 int ki_getdents(int fd, void *buf, unsigned int count) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->getdents(fd, buf, count);
 }
 
 int ki_ftruncate(int fd, off_t length) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->ftruncate(fd, length);
 }
 
 int ki_fsync(int fd) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->fsync(fd);
 }
 
 int ki_isatty(int fd) {
-  if (!ki_is_initialized())
-    return 0;
+  ON_NOSYS_RETURN(0);
   return s_kp->isatty(fd);
 }
 
 int ki_close(int fd) {
-  if (!ki_is_initialized())
-    return 0;
+  ON_NOSYS_RETURN(-1);
   return s_kp->close(fd);
 }
 
 off_t ki_lseek(int fd, off_t offset, int whence) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->lseek(fd, offset, whence);
 }
 
 int ki_remove(const char* path) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->remove(path);
 }
 
 int ki_unlink(const char* path) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->unlink(path);
 }
 
 int ki_access(const char* path, int amode) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->access(path, amode);
 }
 
 int ki_link(const char* oldpath, const char* newpath) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->link(oldpath, newpath);
 }
 
 int ki_symlink(const char* oldpath, const char* newpath) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->symlink(oldpath, newpath);
 }
 
 void* ki_mmap(void* addr, size_t length, int prot, int flags, int fd,
               off_t offset) {
+  ON_NOSYS_RETURN(MAP_FAILED);
   return s_kp->mmap(addr, length, prot, flags, fd, offset);
 }
 
 int ki_munmap(void* addr, size_t length) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->munmap(addr, length);
 }
 
 int ki_open_resource(const char* file) {
-  return s_kp->open_resource(file);
+  ON_NOSYS_RETURN(-1);  return s_kp->open_resource(file);
 }
 
 int ki_ioctl(int d, int request, char* argp) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->ioctl(d, request, argp);
 }
 
 int ki_chown(const char* path, uid_t owner, gid_t group) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->chown(path, owner, group);
 }
 
 int ki_fchown(int fd, uid_t owner, gid_t group) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->fchown(fd, owner, group);
 }
 
 int ki_lchown(const char* path, uid_t owner, gid_t group) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->lchown(path, owner, group);
 }
 
 int ki_utime(const char* filename, const struct utimbuf* times) {
+  ON_NOSYS_RETURN(-1);
   return s_kp->utime(filename, times);
 }
diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_wrap.h b/native_client_sdk/src/libraries/nacl_io/kernel_wrap.h
index 105c107..3f62698 100644
--- a/native_client_sdk/src/libraries/nacl_io/kernel_wrap.h
+++ b/native_client_sdk/src/libraries/nacl_io/kernel_wrap.h
@@ -37,6 +37,7 @@
 EXTERN_C_BEGIN
 
 void kernel_wrap_init();
+void kernel_wrap_uninit();
 
 int NAME(access)(const char* path, int amode) NOTHROW;
 int NAME(chdir)(const char* path) NOTHROW;
diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc b/native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc
index c32c4b5..85d26ba 100644
--- a/native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc
+++ b/native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc
@@ -9,6 +9,7 @@
 #if defined(__native_client__) && defined(__GLIBC__)
 
 #include "nacl_io/kernel_wrap.h"
+
 #include <alloca.h>
 #include <dirent.h>
 #include <errno.h>
@@ -16,10 +17,11 @@
 #include <irt_syscalls.h>
 #include <nacl_stat.h>
 #include <string.h>
-#include <sys/mman.h>
 #include <sys/stat.h>
 #include <sys/time.h>
+
 #include "nacl_io/kernel_intercept.h"
+#include "nacl_io/osmman.h"
 
 
 namespace {
@@ -95,32 +97,45 @@
 
 EXTERN_C_BEGIN
 
+// Macro to get the REAL function pointer
 #define REAL(name) __nacl_irt_##name##_real
-#define WRAP(name) __nacl_irt_##name##_wrap
-#define MUX(name) __nacl_irt_##name
-#define DECLARE(name) typeof(MUX(name)) REAL(name);
-#define DO_WRAP(name) do { \
-    REAL(name) = MUX(name); \
-    MUX(name) = (typeof(REAL(name))) WRAP(name); \
-  } while (0)
 
-DECLARE(chdir)
-DECLARE(close)
-DECLARE(dup)
-DECLARE(dup2)
-DECLARE(fstat)
-DECLARE(getcwd)
-DECLARE(getdents)
-DECLARE(mkdir)
-DECLARE(open)
-DECLARE(read)
-DECLARE(rmdir)
-DECLARE(seek)
-DECLARE(stat)
-DECLARE(write)
-DECLARE(mmap)
-DECLARE(munmap)
-DECLARE(open_resource)
+// Macro to get the WRAP function
+#define WRAP(name) __nacl_irt_##name##_wrap
+
+// Declare REAL function pointer and assign it the REAL function.
+#define DECLARE_REAL_PTR(name) \
+  typeof(__nacl_irt_##name) REAL(name) = __nacl_irt_##name;
+
+// Switch IRT's pointer to the REAL pointer
+#define USE_REAL(name) \
+  __nacl_irt_##name = (typeof(__nacl_irt_##name)) REAL(name)
+
+// Switch IRT's pointer to the WRAP function
+#define USE_WRAP(name) \
+  __nacl_irt_##name = (typeof(__nacl_irt_##name)) WRAP(name)
+
+
+#define EXPAND_SYMBOL_LIST_OPERATION(OP) \
+  OP(chdir); \
+  OP(close); \
+  OP(dup); \
+  OP(dup2);  \
+  OP(fstat); \
+  OP(getcwd);  \
+  OP(getdents);  \
+  OP(mkdir); \
+  OP(open); \
+  OP(read); \
+  OP(rmdir); \
+  OP(seek); \
+  OP(stat); \
+  OP(write); \
+  OP(mmap); \
+  OP(munmap); \
+  OP(open_resource);
+
+EXPAND_SYMBOL_LIST_OPERATION(DECLARE_REAL_PTR);
 
 int access(const char* path, int amode) NOTHROW {
   return ki_access(path, amode);
@@ -430,28 +445,18 @@
   return tv.tv_usec + (tv.tv_sec * 1000000);
 }
 
+static bool s_wrapped = false;
 void kernel_wrap_init() {
-  static bool wrapped = false;
+  if (!s_wrapped) {
+    EXPAND_SYMBOL_LIST_OPERATION(USE_WRAP)
+    s_wrapped = true;
+  }
+}
 
-  if (!wrapped) {
-    wrapped = true;
-    DO_WRAP(chdir);
-    DO_WRAP(close);
-    DO_WRAP(dup);
-    DO_WRAP(dup2);
-    DO_WRAP(fstat);
-    DO_WRAP(getcwd);
-    DO_WRAP(getdents);
-    DO_WRAP(mkdir);
-    DO_WRAP(open);
-    DO_WRAP(read);
-    DO_WRAP(rmdir);
-    DO_WRAP(seek);
-    DO_WRAP(stat);
-    DO_WRAP(write);
-    DO_WRAP(mmap);
-    DO_WRAP(munmap);
-    DO_WRAP(open_resource);
+void kernel_wrap_uninit() {
+  if (s_wrapped) {
+    EXPAND_SYMBOL_LIST_OPERATION(USE_REAL)
+    s_wrapped = false;
   }
 }
 
diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_wrap_newlib.cc b/native_client_sdk/src/libraries/nacl_io/kernel_wrap_newlib.cc
index ff5896f..26a85e3 100644
--- a/native_client_sdk/src/libraries/nacl_io/kernel_wrap_newlib.cc
+++ b/native_client_sdk/src/libraries/nacl_io/kernel_wrap_newlib.cc
@@ -19,37 +19,47 @@
 
 EXTERN_C_BEGIN
 
+// Macro to get the REAL function pointer
 #define REAL(name) __nacl_irt_##name##_real
+
+// Macro to get the WRAP function
 #define WRAP(name) __nacl_irt_##name##_wrap
-#define STRUCT_NAME(group) __libnacl_irt_##group
-#define DECLARE_STRUCT(group) \
-  extern struct nacl_irt_##group STRUCT_NAME(group);
-#define DECLARE_STRUCT_VERSION(group, version) \
-  extern struct nacl_irt_##group##_##version STRUCT_NAME(group);
-#define MUX(group, name) STRUCT_NAME(group).name
-#define DECLARE(group, name) typeof(MUX(group, name)) REAL(name);
-#define DO_WRAP(group, name) do { \
-    REAL(name) = MUX(group, name); \
-    MUX(group, name) = (typeof(REAL(name))) WRAP(name); \
-  } while (0)
 
-DECLARE_STRUCT(fdio)
-DECLARE_STRUCT(filename)
-DECLARE_STRUCT(memory)
+// Declare REAL function pointer and assign it the REAL function.
+#define DECLARE_REAL_PTR(group, name) \
+  typeof(__libnacl_irt_##group.name) REAL(name) = __libnacl_irt_##group.name;
 
-DECLARE(fdio, close)
-DECLARE(fdio, dup)
-DECLARE(fdio, dup2)
-DECLARE(fdio, fstat)
-DECLARE(fdio, getdents)
-DECLARE(fdio, read)
-DECLARE(fdio, seek)
-DECLARE(fdio, write)
-DECLARE(filename, open)
-DECLARE(filename, stat)
-DECLARE(memory, mmap)
-DECLARE(memory, munmap)
+// Switch IRT's pointer to the REAL pointer
+#define USE_REAL(group, name) \
+  __libnacl_irt_##group.name = (typeof(REAL(name))) REAL(name); \
 
+// Switch the IRT's pointer to the WRAP function
+#define USE_WRAP(group, name) \
+  __libnacl_irt_##group.name = (typeof(REAL(name))) WRAP(name); \
+
+
+
+extern struct nacl_irt_fdio __libnacl_irt_fdio;
+extern struct nacl_irt_filename __libnacl_irt_filename;
+extern struct nacl_irt_memory __libnacl_irt_memory;
+
+// Create function pointers to the REAL implementation
+#define EXPAND_SYMBOL_LIST_OPERATION(OP) \
+  OP(fdio, close); \
+  OP(fdio, dup); \
+  OP(fdio, dup2); \
+  OP(fdio, fstat); \
+  OP(fdio, getdents); \
+  OP(fdio, read); \
+  OP(fdio, seek); \
+  OP(fdio, write); \
+  OP(filename, open); \
+  OP(filename, stat); \
+  OP(memory, mmap); \
+  OP(memory, munmap);
+
+
+EXPAND_SYMBOL_LIST_OPERATION(DECLARE_REAL_PTR);
 
 int access(const char* path, int amode) {
   return ki_access(path, amode);
@@ -268,26 +278,20 @@
   return tv.tv_usec + (tv.tv_sec * 1000000);
 }
 
+static bool s_wrapped = false;
 void kernel_wrap_init() {
-  static bool wrapped = false;
-
-  if (!wrapped) {
-    wrapped = true;
-    DO_WRAP(fdio, close);
-    DO_WRAP(fdio, dup);
-    DO_WRAP(fdio, dup2);
-    DO_WRAP(fdio, fstat);
-    DO_WRAP(fdio, getdents);
-    DO_WRAP(fdio, read);
-    DO_WRAP(fdio, seek);
-    DO_WRAP(fdio, write);
-    DO_WRAP(filename, open);
-    DO_WRAP(filename, stat);
-    DO_WRAP(memory, mmap);
-    DO_WRAP(memory, munmap);
+  if (!s_wrapped) {
+    EXPAND_SYMBOL_LIST_OPERATION(USE_WRAP);
+    s_wrapped = true;
   }
 }
 
+void kernel_wrap_uninit() {
+  if (s_wrapped) {
+    EXPAND_SYMBOL_LIST_OPERATION(USE_REAL);
+    s_wrapped = false;
+  }
+}
 
 EXTERN_C_END
 
diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_wrap_win.cc b/native_client_sdk/src/libraries/nacl_io/kernel_wrap_win.cc
index 77b8b60..89db245 100644
--- a/native_client_sdk/src/libraries/nacl_io/kernel_wrap_win.cc
+++ b/native_client_sdk/src/libraries/nacl_io/kernel_wrap_win.cc
@@ -325,6 +325,10 @@
 // Do nothing for Windows, we replace the library at link time.
 void kernel_wrap_init() {
 }
+
+void kernel_wrap_uninit() {
+}
+
 EXTERN_C_END
 
 #endif   // defined(WIN32)
diff --git a/native_client_sdk/src/libraries/nacl_io_test/event_test.cc b/native_client_sdk/src/libraries/nacl_io_test/event_test.cc
index 1a5d9bd..aca9d9e 100644
--- a/native_client_sdk/src/libraries/nacl_io_test/event_test.cc
+++ b/native_client_sdk/src/libraries/nacl_io_test/event_test.cc
@@ -74,9 +74,11 @@
 const int TIMEOUT_VERY_LONG = 1000;
 
 // We subtract TIMEOUT_SLOP from the expected minimum timed due to rounding
-// and clock drift converting between absolute and relative time.
-// 1 for LT comparison, 1 for rounding, etc...
-const int TIMEOUT_SLOP = 2;
+// and clock drift converting between absolute and relative time.  This should
+// only be 1 for Less Than, and 1 for rounding, but we use 10 since we don't
+// care about real precision, aren't testing of the underlying
+// implementations and don't want flakiness.
+const int TIMEOUT_SLOP = 10;
 
 TEST(EventTest, EmitterBasic) {
   ScopedRef<EventEmitterTester> emitter(new EventEmitterTester());
diff --git a/native_client_sdk/src/libraries/nacl_io_test/kernel_proxy_test.cc b/native_client_sdk/src/libraries/nacl_io_test/kernel_proxy_test.cc
index b572078..7b19f4a 100644
--- a/native_client_sdk/src/libraries/nacl_io_test/kernel_proxy_test.cc
+++ b/native_client_sdk/src/libraries/nacl_io_test/kernel_proxy_test.cc
@@ -136,8 +136,20 @@
   int fd1, fd2, fd3;
   int len;
 
+  // Fail to delete non existant "/foo"
+  EXPECT_EQ(-1, ki_rmdir("/foo"));
+  EXPECT_EQ(ENOENT, errno);
+
   // Create "/foo"
   EXPECT_EQ(0, ki_mkdir("/foo", S_IREAD | S_IWRITE));
+  EXPECT_EQ(-1, ki_mkdir("/foo", S_IREAD | S_IWRITE));
+  EXPECT_EQ(EEXIST, errno);
+
+  // Delete "/foo"
+  EXPECT_EQ(0, ki_rmdir("/foo"));
+
+  // Recreate "/foo"
+  EXPECT_EQ(0, ki_mkdir("/foo", S_IREAD | S_IWRITE));
 
   // Fail to open "/foo/bar"
   EXPECT_EQ(-1, ki_open("/foo/bar", O_RDONLY));
diff --git a/net/http/transport_security_state_static.h b/net/http/transport_security_state_static.h
index 10d7909..9967dac 100644
--- a/net/http/transport_security_state_static.h
+++ b/net/http/transport_security_state_static.h
@@ -829,6 +829,8 @@
   {26, true, "\005forum\016quantifiedself\003com", true, kNoPins, DOMAIN_NOT_PINNED },
   {11, true, "\006shodan\002io", true, kNoPins, DOMAIN_NOT_PINNED },
   {18, true, "\015rapidresearch\002me", true, kNoPins, DOMAIN_NOT_PINNED },
+  {14, true, "\010surkatty\003com", true, kNoPins, DOMAIN_NOT_PINNED },
+  {21, true, "\017securityheaders\003com", 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 0a039ab..91db9d9 100644
--- a/net/http/transport_security_state_static.json
+++ b/net/http/transport_security_state_static.json
@@ -619,6 +619,8 @@
     { "name": "forum.quantifiedself.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "shodan.io", "include_subdomains": true, "mode": "force-https" },
     { "name": "rapidresearch.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "surkatty.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "securityheaders.com", "include_subdomains": true, "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/net_unittests.isolate b/net/net_unittests.isolate
index 06bd41b..71a2dc0 100644
--- a/net/net_unittests.isolate
+++ b/net/net_unittests.isolate
@@ -21,7 +21,7 @@
         'command': [
           '../testing/xvfb.py',
           '<(PRODUCT_DIR)',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/net_unittests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_tracked': [
@@ -35,7 +35,7 @@
         'isolate_dependency_tracked': [
           '../testing/test_env.py',
           '../tools/swarm_client/run_isolated.py',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/net_unittests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_untracked': [
@@ -51,7 +51,7 @@
       'variables': {
         'command': [
           '../testing/test_env.py',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/net_unittests<(EXECUTABLE_SUFFIX)',
         ],
       },
diff --git a/ppapi/native_client/chrome_main.scons b/ppapi/native_client/chrome_main.scons
index 047fdf0..2a8f0ba 100644
--- a/ppapi/native_client/chrome_main.scons
+++ b/ppapi/native_client/chrome_main.scons
@@ -62,8 +62,6 @@
     'src/shared/ppapi/nacl.scons',
     'src/untrusted/irt_stub/nacl.scons',
     'src/untrusted/nacl_ppapi_util/nacl.scons',
-    'src/untrusted/pnacl_irt_shim/nacl.scons',
-    'src/untrusted/pnacl_support_extension/nacl.scons',
 ]
 
 
@@ -175,9 +173,6 @@
     lib_info = ParseLibInfoInRunnableLdLog(line)
     if lib_info:
       lib_name, lib_path = lib_info
-      # Note: This probably does NOT work with pnacl _pexes_ right now, because
-      # the NEEDED metadata in the bitcode doesn't have the original file paths.
-      # This should probably be done without such knowledge.
       if lib_path == 'NaClMain':
         # This is a fake file name, which we cannot copy.
         continue
@@ -294,13 +289,6 @@
   target_file.close()
   return 0
 
-def GenerateManifestPnacl(env, dest_file, manifest, exe_file):
-  return env.Command(
-      dest_file,
-      ['${GENNMF}', exe_file, manifest],
-      # Generate a flat url scheme to simplify file-staging.
-      ('${SOURCES[0]} ${SOURCES[1]} -L${NACL_SDK_LIB} -L${LIB_DIR} '
-       ' --flat-url-scheme --base-nmf ${SOURCES[2]} -o ${TARGET}'))
 
 def GenerateManifestDynamicLink(env, dest_file, lib_list_file,
                                 manifest, exe_file):
@@ -338,13 +326,7 @@
 
 
 def GenerateSimpleManifest(env, dest_file, exe_name):
-  if env.Bit('pnacl_generate_pexe'):
-    static_manifest = GenerateSimpleManifestStaticLink(
-        env, '%s.static' % dest_file, exe_name)
-    return GenerateManifestPnacl(env, dest_file, static_manifest,
-                                 '${STAGING_DIR}/%s.pexe' %
-                                 env.ProgramNameForNmf(exe_name))
-  elif env.Bit('nacl_static_link'):
+  if env.Bit('nacl_static_link'):
     return GenerateSimpleManifestStaticLink(env, dest_file, exe_name)
   else:
     static_manifest = GenerateSimpleManifestStaticLink(
@@ -361,10 +343,7 @@
 def GetMainProgramFromManifest(env, manifest):
   obj = json.loads(env.File(manifest).get_contents())
   program_dict = obj['program']
-  if env.Bit('pnacl_generate_pexe') and 'portable' in program_dict:
-    return program_dict['portable']['pnacl-translate']['url']
-  else:
-    return program_dict[env.subst('${TARGET_FULLARCH}')]['url']
+  return program_dict[env.subst('${TARGET_FULLARCH}')]['url']
 
 
 # Returns scons node for generated manifest.
@@ -373,54 +352,21 @@
   manifest_base_name = os.path.basename(manifest)
   main_program = GetMainProgramFromManifest(env, manifest)
   result = env.File('${STAGING_DIR}/' + manifest_base_name)
-  # Always generate the manifest for nacl_glibc and pnacl pexes.
+  # Always generate the manifest for nacl_glibc.
   # For nacl_glibc, generating the mapping of shared libraries is non-trivial.
-  # For pnacl, the manifest currently hosts a sha for the pexe.
-  if not env.Bit('nacl_glibc') and not env.Bit('pnacl_generate_pexe'):
+  if not env.Bit('nacl_glibc'):
     env.Install('${STAGING_DIR}', manifest)
     return result
-  if env.Bit('pnacl_generate_pexe'):
-    return GenerateManifestPnacl(
-        env,
-        '${STAGING_DIR}/' + manifest_base_name,
-        manifest,
-        env.File('${STAGING_DIR}/' + os.path.basename(main_program)))
-  else:
-    return GenerateManifestDynamicLink(
-        env, '${STAGING_DIR}/' + manifest_base_name,
-        # Note that CopyLibsForExtension() and WhitelistLibsForExtension()
-        # assume that it can find the library list file under this filename.
-        GlibcManifestLibsListFilename(manifest_base_name),
-        manifest,
-        env.File('${STAGING_DIR}/' + os.path.basename(main_program)))
+  return GenerateManifestDynamicLink(
+      env, '${STAGING_DIR}/' + manifest_base_name,
+      # Note that CopyLibsForExtension() and WhitelistLibsForExtension()
+      # assume that it can find the library list file under this filename.
+      GlibcManifestLibsListFilename(manifest_base_name),
+      manifest,
+      env.File('${STAGING_DIR}/' + os.path.basename(main_program)))
   return result
 
 
-def GetPnaclExtensionRootNode(env):
-  """Get the scons node representing the root directory of pnacl support files.
-  """
-  # This is "built" by src/untrusted/pnacl_support_extension/nacl.scons.
-  return env.Dir('${DESTINATION_ROOT}/pnacl_support')
-
-pre_base_env.AddMethod(GetPnaclExtensionRootNode)
-
-def GetPnaclExtensionDummyVersion(env):
-  """ We supply a dummy version number when packaging the test-extension
-  that is probably newer than all other versions. """
-  return '9999.9.9.9'
-
-pre_base_env.AddMethod(GetPnaclExtensionDummyVersion)
-
-def GetPnaclExtensionNode(env):
-  """Get the scons node representing a specific version of pnacl support files.
-  """
-  # This is "built" by src/untrusted/pnacl_support_extension/nacl.scons.
-  return env.Dir('${DESTINATION_ROOT}/pnacl_support/' +
-                 env.GetPnaclExtensionDummyVersion())
-
-pre_base_env.AddMethod(GetPnaclExtensionNode)
-
-
 # Compares output_file and golden_file.
 # If they are different, prints the difference and returns 1.
 # Otherwise, returns 0.
@@ -488,10 +434,6 @@
   if browser_flags is None:
     browser_flags = []
 
-  if env.Bit('pnacl_generate_pexe'):
-    # We likely prefer to choose the 'portable' field in nmfs in this mode.
-    args = args + ['--prefer_portable_in_manifest']
-
   # Lint the extra arguments that are being passed to the tester.
   special_args = ['--ppapi_plugin', '--sel_ldr', '--irt_library', '--file',
                   '--map_file', '--extension', '--mime_type', '--tool',
@@ -601,9 +543,6 @@
                          size='huge',
                          capture_output=capture_output,
                          **extra)
-  # Also indicate that we depend on the layed-out pnacl translator.
-  if env.Bit('bitcode'):
-    env.Depends(node, env.GetPnaclExtensionNode())
   for side_effect in side_effects:
     env.SideEffect(side_effect, node)
   # We can't check output if the test is not run.
diff --git a/ppapi/native_client/src/untrusted/pnacl_irt_shim/nacl.scons b/ppapi/native_client/src/untrusted/pnacl_irt_shim/nacl.scons
deleted file mode 100644
index 3f482a0..0000000
--- a/ppapi/native_client/src/untrusted/pnacl_irt_shim/nacl.scons
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- python -*-
-# 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('env')
-
-# This library contains PNaCl ABI shims which convert between the
-# x86-64/ARM native calling conventions used by the IRT library
-# (which uses gcc's ABI) and those used by the PNaCl translator.
-# It was necessitated by problems in passing structures by value using
-# portable bitcode
-#
-# We build the library on all architectures so that we can use the
-# same entry point symbol everywhere.  On x86-32,
-# the library currently does no calling conventions
-# conversion.
-if not env.Bit('bitcode'):
-  Return()
-
-# The library is currently compiled with nacl-gcc on x86 and with
-# PNaCl on ARM.
-# Clear out the pnacl_generate_pexe bit to allow building this as a
-# library dependency (much like the IRT).
-native_env = env.Clone()
-native_env.ClearBits('pnacl_generate_pexe')
-if env.Bit('target_arm'):
-  native_env.PNaClForceNative()
-  native_env.Append(CCFLAGS=['--pnacl-frontend-triple=armv7-unknown-nacl-gnueabi',
-                             '-mfloat-abi=hard'])
-else:
-  native_env = native_env.PNaClGetNNaClEnv()
-
-pnacl_irt_shim = native_env.ComponentLibrary('pnacl_irt_shim', [
-    'pnacl_shim.c',
-    'shim_entry.c',
-    'shim_ppapi.c',
-    ])
-
-# However, the library is part of the pnacl sdk (use original env).
-env.AddLibraryToSdk(pnacl_irt_shim)
-
-env.AddObjectToSdk(['libpnacl_irt_shim.a'])
diff --git a/ppapi/native_client/src/untrusted/pnacl_irt_shim/shim_ppapi.c b/ppapi/native_client/src/untrusted/pnacl_irt_shim/shim_ppapi.c
index bace426..ec6366d 100644
--- a/ppapi/native_client/src/untrusted/pnacl_irt_shim/shim_ppapi.c
+++ b/ppapi/native_client/src/untrusted/pnacl_irt_shim/shim_ppapi.c
@@ -7,17 +7,82 @@
 #include "ppapi/native_client/src/untrusted/pnacl_irt_shim/shim_ppapi.h"
 
 #include <string.h>
+#include "native_client/src/include/nacl_macros.h"
 #include "native_client/src/untrusted/irt/irt.h"
 #include "native_client/src/untrusted/irt/irt_ppapi.h"
 #include "ppapi/generators/pnacl_shim.h"
 #include "ppapi/native_client/src/shared/ppapi_proxy/ppruntime.h"
 
+
+/*
+ * This is a whitelist of NaCl IRT interfaces that are exposed under
+ * PNaCl.  This list omits the following:
+ *
+ *  * The old versions of "irt-memory", v0.1 and v0.2, which contain
+ *    the deprecated sysbrk() function.  See:
+ *    https://code.google.com/p/nativeclient/issues/detail?id=3542
+ *
+ *  * "irt-mutex", "irt-cond" and "irt-sem", which are deprecated and
+ *    are superseded by the "irt-futex" interface.  See:
+ *    https://code.google.com/p/nativeclient/issues/detail?id=3484
+ *
+ *  * "irt-dyncode", which is not supported under PNaCl because
+ *    dynamically loading architecture-specific native code is not
+ *    portable.
+ *
+ *  * "irt-exception-handling", which is not supported under PNaCl
+ *    because it exposes non-portable, architecture-specific register
+ *    state.  See:
+ *    https://code.google.com/p/nativeclient/issues/detail?id=3444
+ *
+ *  * "irt-blockhook", which is deprecated.  It was provided for
+ *    implementing thread suspension for conservative garbage
+ *    collection, but this is probably not a portable use case under
+ *    PNaCl, so this interface is disabled under PNaCl.  See:
+ *    https://code.google.com/p/nativeclient/issues/detail?id=3539
+ *
+ *  * "irt-resource-open".  This was primarily provided for use by
+ *    nacl-glibc's dynamic linker, which is not supported under PNaCl.
+ *    open_resource() returns a file descriptor, but it is the only
+ *    interface in NaCl to do so inside Chromium.  This is
+ *    inconsistent with PPAPI, which does not expose file descriptors
+ *    (except in private/dev interfaces).  See:
+ *    https://code.google.com/p/nativeclient/issues/detail?id=3574
+ *
+ * We omit these because they are only "dev" interfaces:
+ *
+ *  * "irt-dev-getpid"
+ *  * "irt-dev-list-mappings"
+ */
+static const char *const irt_interface_whitelist[] = {
+  NACL_IRT_BASIC_v0_1,
+  NACL_IRT_FDIO_v0_1,
+  NACL_IRT_FILENAME_v0_1,
+  NACL_IRT_MEMORY_v0_3,
+  NACL_IRT_THREAD_v0_1,
+  NACL_IRT_FUTEX_v0_1,
+  NACL_IRT_TLS_v0_1,
+  NACL_IRT_PPAPIHOOK_v0_1,
+  NACL_IRT_RANDOM_v0_1,
+  NACL_IRT_CLOCK_v0_1,
+};
+
 /* Use local strcmp to avoid dependency on libc. */
 static int mystrcmp(const char* s1, const char *s2) {
   while((*s1 && *s2) && (*s1++ == *s2++));
   return *(--s1) - *(--s2);
 }
 
+static int is_irt_interface_whitelisted(const char *interface_name) {
+  int i;
+  for (i = 0; i < NACL_ARRAY_SIZE(irt_interface_whitelist); i++) {
+    if (mystrcmp(interface_name, irt_interface_whitelist[i]) == 0) {
+      return 1;
+    }
+  }
+  return 0;
+}
+
 TYPE_nacl_irt_query __pnacl_real_irt_interface;
 
 /*
@@ -66,13 +131,11 @@
   return (*real_irt_ppapi_hook.ppapi_start)(&wrapped_ppapi_methods);
 }
 
-static struct nacl_irt_ppapihook ppapi_hook = {
-  wrap_ppapi_start,
-  NULL
-};
-
 size_t __pnacl_irt_interface_wrapper(const char *interface_ident,
                                      void *table, size_t tablesize) {
+  if (!is_irt_interface_whitelisted(interface_ident))
+    return 0;
+
   /*
    * Note there is a benign race in initializing the wrapper.
    * We build the "hook" structure by copying from the IRT's hook and then
@@ -90,19 +153,17 @@
                                     &real_irt_ppapi_hook,
                                     sizeof real_irt_ppapi_hook) !=
       sizeof real_irt_ppapi_hook) {
-    return -1;
+    return 0;
   }
   /*
-   * Copy the portion of the ppapihook interface that is not wrapped.
-   */
-  ppapi_hook.ppapi_register_thread_creator =
-      real_irt_ppapi_hook.ppapi_register_thread_creator;
-  /*
    * Copy the interface structure into the client.
    */
-  if (sizeof ppapi_hook <= tablesize) {
-    memcpy(table, &ppapi_hook, sizeof ppapi_hook);
-    return sizeof ppapi_hook;
+  struct nacl_irt_ppapihook *dest = table;
+  if (sizeof *dest <= tablesize) {
+    dest->ppapi_start = wrap_ppapi_start;
+    dest->ppapi_register_thread_creator =
+        real_irt_ppapi_hook.ppapi_register_thread_creator;
+    return sizeof *dest;
   }
   return 0;
 }
diff --git a/ppapi/native_client/src/untrusted/pnacl_support_extension/nacl.scons b/ppapi/native_client/src/untrusted/pnacl_support_extension/nacl.scons
deleted file mode 100644
index 7419e24..0000000
--- a/ppapi/native_client/src/untrusted/pnacl_support_extension/nacl.scons
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- python -*-
-# 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('env')
-
-import os
-
-# Support files for pnacl browser tests (as an unpacked chrome extension).
-if not env.Bit('bitcode'):
-  Return()
-
-# Override the IRT shim with the latest one built in scons-out.
-# It is the version that matches the current version of PPAPI.
-#
-# We pick exactly that file for now, because the other files in
-# ${LIB_DIR} are bitcode and we don't want to pollute the CRX with those.
-arch = env['TARGET_FULLARCH']
-lib_override = ('--lib_override=%s,${LIB_DIR}/libpnacl_irt_shim.a ' % arch)
-lib_dep = [env.File('${LIB_DIR}/libpnacl_irt_shim.a')]
-
-output_dir = env.GetPnaclExtensionRootNode().abspath
-
-generated_crx = env.Command(
-    # Output (a directory with a bunch of files, like manifest.json)
-    env.GetPnaclExtensionNode(),
-    # Inputs -- just the command and any scons files.  We don't model
-    # deps to files in the toolchain dir, since that doesn't seem to work.
-    ['pnacl_component_crx_gen.py'] + lib_dep,
-    # Command.
-    ('${PYTHON} ${SOURCES[0]} ' +
-     '--dest=' + output_dir + ' ' +
-     # Override the libraries from the tarball with those in scons-out/x/lib
-     lib_override +
-     # Build only the unpacked extension, not zipped up files, etc.
-     '-u ' +
-     env.GetPnaclExtensionDummyVersion()))
-
-# NOTE: Toolchain directory dependencies don't seem to work in SCons, so we
-# end up setting this to 'AlwaysBuild'.
-env.AlwaysBuild(generated_crx)
-
-env.Alias('pnacl_support_extension', generated_crx)
diff --git a/ppapi/native_client/tests/breakpad_crash_test/nacl.scons b/ppapi/native_client/tests/breakpad_crash_test/nacl.scons
index 4089c06..f3ce99a 100644
--- a/ppapi/native_client/tests/breakpad_crash_test/nacl.scons
+++ b/ppapi/native_client/tests/breakpad_crash_test/nacl.scons
@@ -51,8 +51,6 @@
 # This crash in trusted code should produce a crash dump.
 # DISABLED due to flakiness (http://crbug.com/247114).
 # crash_test_url = 'trusted_crash_in_startup.html'
-# if env.Bit('pnacl_generate_pexe'):
-#   crash_test_url += '?is_pnacl=true'
 # node = env.PPAPIBrowserTester(
 #     'breakpad_trusted_crash_in_startup_test.out',
 #     python_tester_script=env.File('crash_dump_tester.py'),
diff --git a/ppapi/native_client/tests/breakpad_crash_test/trusted_crash_in_startup.html b/ppapi/native_client/tests/breakpad_crash_test/trusted_crash_in_startup.html
index 509f437..94b5d496 100644
--- a/ppapi/native_client/tests/breakpad_crash_test/trusted_crash_in_startup.html
+++ b/ppapi/native_client/tests/breakpad_crash_test/trusted_crash_in_startup.html
@@ -41,19 +41,11 @@
     status.log('Received error: ' + error);
     // This error occurs only because NACL_CRASH_TEST is set.  We would
     // not normally expect to get this error in the browser.
-    // For PNaCl, the crash will occur while starting the compiler process.
-    var test_args = getTestArguments({ 'is_pnacl': 'false' });
-    if (test_args['is_pnacl'] != 'false') {
-      var expected_error = ('NaCl module load failed: PnaclCoordinator: ' +
-                            'Compile process could not be created');
-      status.assert(begins_with(embed.lastError, expected_error));
-    } else {
-      var expected_error_prefix = 'NaCl module load failed: ServiceRuntime: ';
-      var suffix1 = 'command channel creation failed';
-      var suffix2 = 'failed to start';
-      status.assert(error == expected_error_prefix + suffix1 ||
-                    error == expected_error_prefix + suffix2);
-    }
+    var expected_error_prefix = 'NaCl module load failed: ServiceRuntime: ';
+    var suffix1 = 'command channel creation failed';
+    var suffix2 = 'failed to start';
+    status.assert(error == expected_error_prefix + suffix1 ||
+                  error == expected_error_prefix + suffix2);
     status.pass();
   }), true);
 
diff --git a/ppapi/native_client/tests/ppapi_browser/extension_mime_handler/nacl.scons b/ppapi/native_client/tests/ppapi_browser/extension_mime_handler/nacl.scons
index 4731ff3..7fca293 100644
--- a/ppapi/native_client/tests/ppapi_browser/extension_mime_handler/nacl.scons
+++ b/ppapi/native_client/tests/ppapi_browser/extension_mime_handler/nacl.scons
@@ -10,11 +10,6 @@
 
 Import('env')
 
-# TODO(jvoung): Make a pnacl version of the nmf / or make the pexe generator
-# compatible with CopyLibsForExtension().
-if env.Bit('pnacl_generate_pexe'):
-  Return()
-
 env.Prepend(CPPDEFINES=['XP_UNIX'])
 env.Replace(TEST_DIR='${SOURCE_ROOT}/ppapi/native_client/tests/ppapi_browser/' +
                      'extension_mime_handler')
diff --git a/ppapi/native_client/tools/browser_tester/browser_tester.py b/ppapi/native_client/tools/browser_tester/browser_tester.py
index 2bf3614..513a091 100755
--- a/ppapi/native_client/tools/browser_tester/browser_tester.py
+++ b/ppapi/native_client/tools/browser_tester/browser_tester.py
@@ -56,10 +56,6 @@
                     metavar='DEST SRC',
                     help='Add a redirect to the HTTP server, '
                     'requests for SRC will result in a redirect (302) to DEST.')
-  parser.add_option('--prefer_portable_in_manifest',
-                    dest='prefer_portable_in_manifest',
-                    action='store_true', default=False,
-                    help='Use portable programs in manifest if available.')
   parser.add_option('-f', '--file', dest='files', action='append',
                     type='string', default=[],
                     metavar='FILENAME',
diff --git a/ppapi/native_client/tools/browser_tester/browsertester/browserlauncher.py b/ppapi/native_client/tools/browser_tester/browsertester/browserlauncher.py
index 44d38af..256a1cb 100755
--- a/ppapi/native_client/tools/browser_tester/browsertester/browserlauncher.py
+++ b/ppapi/native_client/tools/browser_tester/browsertester/browserlauncher.py
@@ -188,8 +188,6 @@
       env['NACL_SEL_LDR_BOOTSTRAP'] = self.options.sel_ldr_bootstrap
     if self.options.irt_library:
       env['NACL_IRT_LIBRARY'] = self.options.irt_library
-    if self.options.prefer_portable_in_manifest:
-      env['NACL_PREFER_PORTABLE_IN_MANIFEST'] = '1'
     self.SetStandardStream(env, 'NACL_EXE_STDIN',
                            self.options.nacl_exe_stdin, False)
     self.SetStandardStream(env, 'NACL_EXE_STDOUT',
diff --git a/ppapi/ppapi_proxy.gypi b/ppapi/ppapi_proxy.gypi
index 50bb01e..078f53c 100644
--- a/ppapi/ppapi_proxy.gypi
+++ b/ppapi/ppapi_proxy.gypi
@@ -25,8 +25,6 @@
           'proxy/broker_dispatcher.h',
           'proxy/broker_resource.cc',
           'proxy/broker_resource.h',
-          'proxy/browser_font_resource_trusted.cc',
-          'proxy/browser_font_resource_trusted.h',
           'proxy/browser_font_singleton_resource.cc',
           'proxy/browser_font_singleton_resource.h',
           'proxy/connection.h',
@@ -217,7 +215,6 @@
             'sources!': [
               'proxy/audio_input_resource.cc',
               'proxy/broker_dispatcher.cc',
-              'proxy/browser_font_resource_trusted.cc',
               'proxy/browser_font_singleton_resource.cc',
               'proxy/device_enumeration_resource_helper.cc',
               'proxy/flash_clipboard_resource.cc',
diff --git a/ppapi/ppapi_tests.gypi b/ppapi/ppapi_tests.gypi
index dab8294..3a1ac87 100644
--- a/ppapi/ppapi_tests.gypi
+++ b/ppapi/ppapi_tests.gypi
@@ -187,6 +187,7 @@
         'proxy/serialized_var_unittest.cc',
         'proxy/talk_resource_unittest.cc',
         'proxy/websocket_resource_unittest.cc',
+        'shared_impl/proxy_lock_unittest.cc',
         'shared_impl/resource_tracker_unittest.cc',
         'shared_impl/thread_aware_callback_unittest.cc',
         'shared_impl/time_conversion_unittest.cc',
diff --git a/ppapi/proxy/host_dispatcher.h b/ppapi/proxy/host_dispatcher.h
index 1b0c9a7..ebd6ef9 100644
--- a/ppapi/proxy/host_dispatcher.h
+++ b/ppapi/proxy/host_dispatcher.h
@@ -11,7 +11,7 @@
 
 #include "base/compiler_specific.h"
 #include "base/memory/ref_counted.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "ipc/ipc_channel_proxy.h"
 #include "ppapi/c/pp_instance.h"
 #include "ppapi/proxy/dispatcher.h"
diff --git a/ppapi/proxy/plugin_array_buffer_var.cc b/ppapi/proxy/plugin_array_buffer_var.cc
index eedee1f..7dd64d1 100644
--- a/ppapi/proxy/plugin_array_buffer_var.cc
+++ b/ppapi/proxy/plugin_array_buffer_var.cc
@@ -9,7 +9,6 @@
 #include <limits>
 
 #include "base/memory/shared_memory.h"
-#include "base/process_util.h"
 #include "ppapi/c/dev/ppb_buffer_dev.h"
 #include "ppapi/proxy/plugin_dispatcher.h"
 #include "ppapi/proxy/plugin_globals.h"
diff --git a/ppapi/proxy/plugin_dispatcher.h b/ppapi/proxy/plugin_dispatcher.h
index 69b8406..3a9e733 100644
--- a/ppapi/proxy/plugin_dispatcher.h
+++ b/ppapi/proxy/plugin_dispatcher.h
@@ -12,7 +12,7 @@
 #include "base/containers/hash_tables.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "build/build_config.h"
 #include "ipc/ipc_sync_channel.h"
 #include "ppapi/c/pp_instance.h"
diff --git a/ppapi/proxy/plugin_globals.cc b/ppapi/proxy/plugin_globals.cc
index e41cd5e..07ac688 100644
--- a/ppapi/proxy/plugin_globals.cc
+++ b/ppapi/proxy/plugin_globals.cc
@@ -181,6 +181,15 @@
   plugin_proxy_delegate_->SetActiveURL(url);
 }
 
+PP_Resource PluginGlobals::CreateBrowserFont(
+    Connection connection,
+    PP_Instance instance,
+    const PP_BrowserFont_Trusted_Description& desc,
+    const ppapi::Preferences& prefs) {
+  return plugin_proxy_delegate_->CreateBrowserFont(
+      connection, instance, desc, prefs);
+}
+
 MessageLoopResource* PluginGlobals::loop_for_main_thread() {
   return loop_for_main_thread_.get();
 }
diff --git a/ppapi/proxy/plugin_globals.h b/ppapi/proxy/plugin_globals.h
index 014cb26..044cac7 100644
--- a/ppapi/proxy/plugin_globals.h
+++ b/ppapi/proxy/plugin_globals.h
@@ -11,6 +11,7 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/synchronization/lock.h"
 #include "base/threading/thread_local_storage.h"
+#include "ppapi/proxy/connection.h"
 #include "ppapi/proxy/plugin_resource_tracker.h"
 #include "ppapi/proxy/plugin_var_tracker.h"
 #include "ppapi/proxy/ppapi_proxy_export.h"
@@ -24,7 +25,12 @@
 class Sender;
 }
 
+struct PP_BrowserFont_Trusted_Description;
+
 namespace ppapi {
+
+struct Preferences;
+
 namespace proxy {
 
 class MessageLoopResource;
@@ -79,6 +85,12 @@
   // Sets the active url which is reported by breakpad.
   void SetActiveURL(const std::string& url);
 
+  PP_Resource CreateBrowserFont(
+      Connection connection,
+      PP_Instance instance,
+      const PP_BrowserFont_Trusted_Description& desc,
+      const Preferences& prefs);
+
   // Getters for the plugin-specific versions.
   PluginResourceTracker* plugin_resource_tracker() {
     return &plugin_resource_tracker_;
diff --git a/ppapi/proxy/plugin_main_nacl.cc b/ppapi/proxy/plugin_main_nacl.cc
index f00d371..5978233 100644
--- a/ppapi/proxy/plugin_main_nacl.cc
+++ b/ppapi/proxy/plugin_main_nacl.cc
@@ -78,6 +78,11 @@
   virtual std::string GetUILanguage() OVERRIDE;
   virtual void PreCacheFont(const void* logfontw) OVERRIDE;
   virtual void SetActiveURL(const std::string& url) OVERRIDE;
+  virtual PP_Resource CreateBrowserFont(
+      ppapi::proxy::Connection connection,
+      PP_Instance instance,
+      const PP_BrowserFont_Trusted_Description& desc,
+      const ppapi::Preferences& prefs) OVERRIDE;
 
   // IPC::Listener implementation.
   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
@@ -169,6 +174,15 @@
   NOTIMPLEMENTED();
 }
 
+PP_Resource PpapiDispatcher::CreateBrowserFont(
+    ppapi::proxy::Connection connection,
+    PP_Instance instance,
+    const PP_BrowserFont_Trusted_Description& desc,
+    const ppapi::Preferences& prefs) {
+  NOTIMPLEMENTED();
+  return 0;
+}
+
 bool PpapiDispatcher::OnMessageReceived(const IPC::Message& msg) {
   IPC_BEGIN_MESSAGE_MAP(PpapiDispatcher, msg)
     IPC_MESSAGE_HANDLER(PpapiMsg_CreateNaClChannel, OnMsgCreateNaClChannel)
diff --git a/ppapi/proxy/plugin_proxy_delegate.h b/ppapi/proxy/plugin_proxy_delegate.h
index f2d7759..438ac6c 100644
--- a/ppapi/proxy/plugin_proxy_delegate.h
+++ b/ppapi/proxy/plugin_proxy_delegate.h
@@ -34,6 +34,14 @@
 
   // Sets the active url which is reported by breakpad.
   virtual void SetActiveURL(const std::string& url) = 0;
+
+  // Validates the font description, and uses it to create a
+  // BrowserFontResource_Trusted resource.
+  virtual PP_Resource CreateBrowserFont(
+      Connection connection,
+      PP_Instance instance,
+      const PP_BrowserFont_Trusted_Description& desc,
+      const Preferences& prefs) = 0;
 };
 
 }  // namespace proxy
diff --git a/ppapi/proxy/plugin_resource_tracker_unittest.cc b/ppapi/proxy/plugin_resource_tracker_unittest.cc
index 9a60864..8623f64 100644
--- a/ppapi/proxy/plugin_resource_tracker_unittest.cc
+++ b/ppapi/proxy/plugin_resource_tracker_unittest.cc
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/memory/scoped_ptr.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "ppapi/proxy/mock_resource.h"
 #include "ppapi/proxy/plugin_dispatcher.h"
 #include "ppapi/proxy/plugin_resource_tracker.h"
diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h
index 051655a..68f202d 100644
--- a/ppapi/proxy/ppapi_messages.h
+++ b/ppapi/proxy/ppapi_messages.h
@@ -9,7 +9,7 @@
 #include "base/basictypes.h"
 #include "base/files/file_path.h"
 #include "base/memory/shared_memory.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/strings/string16.h"
 #include "base/sync_socket.h"
 #include "base/values.h"
diff --git a/ppapi/proxy/ppapi_proxy_test.cc b/ppapi/proxy/ppapi_proxy_test.cc
index 23de4fa..5e4b67b 100644
--- a/ppapi/proxy/ppapi_proxy_test.cc
+++ b/ppapi/proxy/ppapi_proxy_test.cc
@@ -10,7 +10,6 @@
 #include "base/bind_helpers.h"
 #include "base/message_loop/message_loop_proxy.h"
 #include "base/observer_list.h"
-#include "base/process_util.h"
 #include "base/run_loop.h"
 #include "ipc/ipc_sync_channel.h"
 #include "ppapi/c/pp_errors.h"
@@ -283,6 +282,14 @@
     const std::string& url) {
 }
 
+PP_Resource PluginProxyTestHarness::PluginDelegateMock::CreateBrowserFont(
+    Connection connection,
+    PP_Instance instance,
+    const PP_BrowserFont_Trusted_Description& desc,
+    const Preferences& prefs) {
+  return 0;
+}
+
 // PluginProxyTest -------------------------------------------------------------
 
 PluginProxyTest::PluginProxyTest() : PluginProxyTestHarness(SINGLETON_GLOBALS) {
diff --git a/ppapi/proxy/ppapi_proxy_test.h b/ppapi/proxy/ppapi_proxy_test.h
index ceade78..9a2df1c 100644
--- a/ppapi/proxy/ppapi_proxy_test.h
+++ b/ppapi/proxy/ppapi_proxy_test.h
@@ -148,6 +148,11 @@
     virtual std::string GetUILanguage() OVERRIDE;
     virtual void PreCacheFont(const void* logfontw) OVERRIDE;
     virtual void SetActiveURL(const std::string& url) OVERRIDE;
+    virtual PP_Resource CreateBrowserFont(
+        Connection connection,
+        PP_Instance instance,
+        const PP_BrowserFont_Trusted_Description& desc,
+        const Preferences& prefs) OVERRIDE;
 
    private:
     base::MessageLoopProxy* ipc_message_loop_;  // Weak
diff --git a/ppapi/proxy/ppb_core_proxy.cc b/ppapi/proxy/ppb_core_proxy.cc
index 1cc9671..65845ae 100644
--- a/ppapi/proxy/ppb_core_proxy.cc
+++ b/ppapi/proxy/ppb_core_proxy.cc
@@ -62,6 +62,7 @@
 #endif
   if (!callback.func)
     return;
+  ProxyAutoLock lock;
   PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostDelayedTask(
       FROM_HERE,
       RunWhileLocked(base::Bind(&CallbackWrapper, callback, result)),
diff --git a/ppapi/proxy/proxy_channel.cc b/ppapi/proxy/proxy_channel.cc
index 81eb9a4..b7f8a82 100644
--- a/ppapi/proxy/proxy_channel.cc
+++ b/ppapi/proxy/proxy_channel.cc
@@ -5,7 +5,6 @@
 #include "ppapi/proxy/proxy_channel.h"
 
 #include "base/logging.h"
-#include "base/process_util.h"
 #include "ipc/ipc_platform_file.h"
 #include "ipc/ipc_test_sink.h"
 
diff --git a/ppapi/proxy/proxy_channel.h b/ppapi/proxy/proxy_channel.h
index d35f98a..6c9f1f6 100644
--- a/ppapi/proxy/proxy_channel.h
+++ b/ppapi/proxy/proxy_channel.h
@@ -6,7 +6,7 @@
 #define PPAPI_PROXY_PROXY_CHANNEL_H_
 
 #include "base/memory/scoped_ptr.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "ipc/ipc_listener.h"
 #include "ipc/ipc_platform_file.h"
 #include "ipc/ipc_sender.h"
diff --git a/ppapi/proxy/resource_creation_proxy.cc b/ppapi/proxy/resource_creation_proxy.cc
index 337d620..7cb3369 100644
--- a/ppapi/proxy/resource_creation_proxy.cc
+++ b/ppapi/proxy/resource_creation_proxy.cc
@@ -7,7 +7,6 @@
 #include "ppapi/c/pp_errors.h"
 #include "ppapi/c/pp_size.h"
 #include "ppapi/proxy/audio_input_resource.h"
-#include "ppapi/proxy/browser_font_resource_trusted.h"
 #include "ppapi/proxy/connection.h"
 #include "ppapi/proxy/ext_crx_file_system_private_resource.h"
 #include "ppapi/proxy/file_chooser_resource.h"
@@ -384,10 +383,8 @@
   PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
   if (!dispatcher)
     return 0;
-  if (!BrowserFontResource_Trusted::IsPPFontDescriptionValid(*description))
-    return 0;
-  return (new BrowserFontResource_Trusted(GetConnection(), instance,
-      *description, dispatcher->preferences()))->GetReference();
+  return PluginGlobals::Get()->CreateBrowserFont(
+      GetConnection(), instance, *description, dispatcher->preferences());
 }
 
 PP_Resource ResourceCreationProxy::CreateBuffer(PP_Instance instance,
diff --git a/ppapi/shared_impl/ppb_audio_shared.cc b/ppapi/shared_impl/ppb_audio_shared.cc
index f6d0cac..c52ea55 100644
--- a/ppapi/shared_impl/ppb_audio_shared.cc
+++ b/ppapi/shared_impl/ppb_audio_shared.cc
@@ -7,6 +7,7 @@
 #include "base/logging.h"
 #include "media/audio/shared_memory_util.h"
 #include "ppapi/shared_impl/ppapi_globals.h"
+#include "ppapi/shared_impl/proxy_lock.h"
 
 // Hard coded values from PepperPlatformAudioOutputImpl.
 // TODO(dalecurtis): PPAPI shouldn't hard code these values for all clients.
@@ -128,12 +129,20 @@
 void PPB_Audio_Shared::StopThread() {
 #if !defined(OS_NACL)
   if (audio_thread_.get()) {
-    audio_thread_->Join();
+    // 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();
   }
 #else
   if (thread_active_) {
-    int result = thread_functions.thread_join(thread_id_);
+    // See comment above about why we unlock here.
+    int result = CallWhileUnlocked(thread_functions.thread_join, thread_id_);
     DCHECK_EQ(0, result);
     thread_active_ = false;
   }
diff --git a/ppapi/shared_impl/proxy_lock.cc b/ppapi/shared_impl/proxy_lock.cc
index f9f937f..7b9bc91 100644
--- a/ppapi/shared_impl/proxy_lock.cc
+++ b/ppapi/shared_impl/proxy_lock.cc
@@ -59,9 +59,4 @@
   closure.Run();
 }
 
-void CallWhileLocked(const base::Closure& closure) {
-  ProxyAutoLock lock;
-  closure.Run();
-}
-
 }  // namespace ppapi
diff --git a/ppapi/shared_impl/proxy_lock.h b/ppapi/shared_impl/proxy_lock.h
index e0e97e4..9352471 100644
--- a/ppapi/shared_impl/proxy_lock.h
+++ b/ppapi/shared_impl/proxy_lock.h
@@ -8,6 +8,7 @@
 #include "base/basictypes.h"
 #include "base/bind.h"
 #include "base/callback.h"
+#include "base/threading/thread_checker.h"
 
 #include "ppapi/shared_impl/ppapi_shared_export.h"
 
@@ -132,21 +133,153 @@
 }
 void PPAPI_SHARED_EXPORT CallWhileUnlocked(const base::Closure& closure);
 
-// CallWhileLocked locks the ProxyLock and runs the given closure immediately.
-// The lock is released when CallWhileLocked returns. This function assumes the
-// lock is not held. This is mostly for use in RunWhileLocked; see below.
-void PPAPI_SHARED_EXPORT CallWhileLocked(const base::Closure& closure);
+namespace internal {
 
-// RunWhileLocked binds the given closure with CallWhileLocked and returns the
-// new Closure. This is for cases where you want to run a task, but you want to
-// ensure that the ProxyLock is acquired for the duration of the task.
-// Example usage:
+template <typename RunType>
+class RunWhileLockedHelper;
+
+template <>
+class RunWhileLockedHelper<void ()> {
+ public:
+  typedef base::Callback<void ()> CallbackType;
+  explicit RunWhileLockedHelper(const CallbackType& callback)
+      : callback_(new CallbackType(callback)) {
+    // Copying |callback| may adjust reference counts for bound Vars or
+    // Resources; we should have the lock already.
+    ProxyLock::AssertAcquired();
+    // CallWhileLocked and destruction might happen on a different thread from
+    // creation.
+    thread_checker_.DetachFromThread();
+  }
+  void CallWhileLocked() {
+    // Bind thread_checker_ to this thread so we can check in the destructor.
+    DCHECK(thread_checker_.CalledOnValidThread());
+    ProxyAutoLock lock;
+    {
+      // Use a scope and local Callback to ensure that the callback is cleared
+      // before the lock is released, even in the unlikely event that Run()
+      // throws an exception.
+      scoped_ptr<CallbackType> temp_callback(callback_.Pass());
+      temp_callback->Run();
+    }
+  }
+
+ private:
+  scoped_ptr<CallbackType> callback_;
+
+  // Used to ensure that the Callback is run and deleted on the same thread.
+  base::ThreadChecker thread_checker_;
+};
+
+template <typename P1>
+class RunWhileLockedHelper<void (P1)> {
+ public:
+  typedef base::Callback<void (P1)> CallbackType;
+  explicit RunWhileLockedHelper(const CallbackType& callback)
+      : callback_(new CallbackType(callback)) {
+    ProxyLock::AssertAcquired();
+    thread_checker_.DetachFromThread();
+  }
+  void CallWhileLocked(P1 p1) {
+    DCHECK(thread_checker_.CalledOnValidThread());
+    ProxyAutoLock lock;
+    {
+      scoped_ptr<CallbackType> temp_callback(callback_.Pass());
+      temp_callback->Run(p1);
+    }
+  }
+
+ private:
+  scoped_ptr<CallbackType> callback_;
+  base::ThreadChecker thread_checker_;
+};
+
+template <typename P1, typename P2>
+class RunWhileLockedHelper<void (P1, P2)> {
+ public:
+  typedef base::Callback<void (P1, P2)> CallbackType;
+  explicit RunWhileLockedHelper(const CallbackType& callback)
+      : callback_(new CallbackType(callback)) {
+    ProxyLock::AssertAcquired();
+    thread_checker_.DetachFromThread();
+  }
+  void CallWhileLocked(P1 p1, P2 p2) {
+    DCHECK(thread_checker_.CalledOnValidThread());
+    ProxyAutoLock lock;
+    {
+      scoped_ptr<CallbackType> temp_callback(callback_.Pass());
+      temp_callback->Run(p1, p2);
+    }
+  }
+
+ private:
+  scoped_ptr<CallbackType> callback_;
+  base::ThreadChecker thread_checker_;
+};
+
+template <typename P1, typename P2, typename P3>
+class RunWhileLockedHelper<void (P1, P2, P3)> {
+ public:
+  typedef base::Callback<void (P1, P2, P3)> CallbackType;
+  explicit RunWhileLockedHelper(const CallbackType& callback)
+      : callback_(new CallbackType(callback)) {
+    ProxyLock::AssertAcquired();
+    thread_checker_.DetachFromThread();
+  }
+  void CallWhileLocked(P1 p1, P2 p2, P3 p3) {
+    DCHECK(thread_checker_.CalledOnValidThread());
+    ProxyAutoLock lock;
+    {
+      scoped_ptr<CallbackType> temp_callback(callback_.Pass());
+      temp_callback->Run(p1, p2, p3);
+    }
+  }
+
+ private:
+  scoped_ptr<CallbackType> callback_;
+  base::ThreadChecker thread_checker_;
+};
+
+}  // namespace internal
+
+// RunWhileLocked wraps the given Callback in a new Callback that, when invoked:
+//  1) Locks the ProxyLock.
+//  2) Runs the original Callback (forwarding arguments, if any).
+//  3) Clears the original Callback (while the lock is held).
+//  4) Unlocks the ProxyLock.
+// Note that it's important that the callback is cleared in step (3), in case
+// clearing the Callback causes a destructor (e.g., for a Resource) to run,
+// which should hold the ProxyLock to avoid data races.
+//
+// This is for cases where you want to run a task or store a Callback, but you
+// want to ensure that the ProxyLock is acquired for the duration of the task
+// that the Callback runs.
+// EXAMPLE USAGE:
 //   GetMainThreadMessageLoop()->PostDelayedTask(
 //     FROM_HERE,
 //     RunWhileLocked(base::Bind(&CallbackWrapper, callback, result)),
 //     delay_in_ms);
-inline base::Closure RunWhileLocked(const base::Closure& closure) {
-  return base::Bind(CallWhileLocked, closure);
+//
+// In normal usage like the above, this all should "just work". However, if you
+// do something unusual, you may get a runtime crash due to deadlock. Here are
+// the ways that the returned Callback must be used to avoid a deadlock:
+// (1) copied to another Callback. After that, the original callback can be
+// destroyed with or without the proxy lock acquired, while the newly assigned
+// callback has to conform to these same restrictions. Or
+// (2) run without proxy lock acquired (e.g., being posted to a MessageLoop
+// and run there). The callback must be destroyed on the same thread where it
+// was run (but can be destroyed with or without the proxy lock acquired). Or
+// (3) destroyed without the proxy lock acquired.
+// TODO(dmichael): This won't actually fail until
+//                 https://codereview.chromium.org/19492014/ lands.
+template <class FunctionType>
+inline base::Callback<FunctionType>
+RunWhileLocked(const base::Callback<FunctionType>& callback) {
+  internal::RunWhileLockedHelper<FunctionType>* helper =
+      new internal::RunWhileLockedHelper<FunctionType>(callback);
+  return base::Bind(
+      &internal::RunWhileLockedHelper<FunctionType>::CallWhileLocked,
+      base::Owned(helper));
 }
 
 }  // namespace ppapi
diff --git a/ppapi/shared_impl/proxy_lock_unittest.cc b/ppapi/shared_impl/proxy_lock_unittest.cc
new file mode 100644
index 0000000..f075149
--- /dev/null
+++ b/ppapi/shared_impl/proxy_lock_unittest.cc
@@ -0,0 +1,180 @@
+// 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 <string>
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/compiler_specific.h"
+#include "base/logging.h"
+#include "base/memory/ref_counted.h"
+#include "ppapi/shared_impl/proxy_lock.h"
+#include "ppapi/shared_impl/test_globals.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace ppapi {
+
+namespace {
+
+bool expect_to_be_locked = false;
+void CheckLockState() {
+  if (expect_to_be_locked) {
+    ProxyLock::AssertAcquired();
+  } else {
+    // If we expect to be unlocked, try to lock. We rely on the checking inside
+    // base::Lock that prevents recursive locking.
+    ProxyAutoLock lock;
+  }
+}
+
+int called_num = 0;
+
+class CheckLockStateInDestructor
+    : public base::RefCounted<CheckLockStateInDestructor> {
+ public:
+  CheckLockStateInDestructor() {}
+  void Method() {
+    ++called_num;
+  }
+ private:
+  friend class base::RefCounted<CheckLockStateInDestructor>;
+  ~CheckLockStateInDestructor() {
+    CheckLockState();
+  }
+  DISALLOW_COPY_AND_ASSIGN(CheckLockStateInDestructor);
+};
+
+void TestCallback_0() {
+  CheckLockState();
+  ++called_num;
+}
+
+void TestCallback_1(int p1) {
+  CheckLockState();
+  ++called_num;
+}
+
+void TestCallback_2(int p1, const std::string& p2) {
+  CheckLockState();
+  ++called_num;
+}
+
+struct Param {};
+void TestCallback_3(int p1, const std::string& p2, Param p3) {
+  CheckLockState();
+  ++called_num;
+}
+
+}  // namespace
+
+TEST(PpapiProxyLockTest, Locking) {
+  TestGlobals globals;
+  expect_to_be_locked = true;
+
+  base::Callback<void()> cb0;
+  {
+    ProxyAutoLock lock;
+    cb0 = RunWhileLocked(base::Bind(TestCallback_0));
+  }
+  cb0.Run();
+  ASSERT_EQ(1, called_num);
+  called_num = 0;
+
+  {
+    ProxyAutoLock lock;
+    cb0 = RunWhileLocked(base::Bind(TestCallback_1, 123));
+  }
+  cb0.Run();
+  ASSERT_EQ(1, called_num);
+  called_num = 0;
+
+  {
+    ProxyAutoLock lock;
+    scoped_refptr<CheckLockStateInDestructor> object =
+        new CheckLockStateInDestructor();
+    cb0 = RunWhileLocked(
+              base::Bind(&CheckLockStateInDestructor::Method,
+                         object));
+    // Note after this scope, the Callback owns the only reference.
+  }
+  cb0.Run();
+  ASSERT_EQ(1, called_num);
+  called_num = 0;
+
+  base::Callback<void(int)> cb1;
+  {
+    ProxyAutoLock lock;
+    cb1 = RunWhileLocked(base::Bind(TestCallback_1));
+  }
+  cb1.Run(123);
+  ASSERT_EQ(1, called_num);
+  called_num = 0;
+
+  base::Callback<void(int, const std::string&)> cb2;
+  {
+    ProxyAutoLock lock;
+    cb2 = RunWhileLocked(base::Bind(TestCallback_2));
+  }
+  cb2.Run(123, std::string("yo"));
+  ASSERT_EQ(1, called_num);
+  called_num = 0;
+
+  base::Callback<void(int, const std::string&, Param)> cb3;
+  {
+    ProxyAutoLock lock;
+    cb3 = RunWhileLocked(base::Bind(TestCallback_3));
+  }
+  cb3.Run(123, std::string("yo"), Param());
+  ASSERT_EQ(1, called_num);
+  called_num = 0;
+
+  base::Callback<void(const std::string&)> cb1_string;
+  {
+    ProxyAutoLock lock;
+    cb1_string = RunWhileLocked(base::Bind(TestCallback_2, 123));
+  }
+  cb1_string.Run(std::string("yo"));
+  ASSERT_EQ(1, called_num);
+  called_num = 0;
+
+  {
+    ProxyAutoLock lock;
+    cb0 = RunWhileLocked(base::Bind(TestCallback_2, 123, std::string("yo")));
+  }
+  cb0.Run();
+  ASSERT_EQ(1, called_num);
+  called_num = 0;
+}
+
+TEST(PpapiProxyLockTest, Unlocking) {
+  TestGlobals globals;
+  expect_to_be_locked = false;
+  // These calls should all try to _unlock_, so we must be locked before
+  // entering them.
+  ProxyAutoLock auto_lock;
+
+  {
+    CallWhileUnlocked(TestCallback_0);
+    ASSERT_EQ(1, called_num);
+    called_num = 0;
+  } {
+    CallWhileUnlocked(TestCallback_1, 123);
+    ASSERT_EQ(1, called_num);
+    called_num = 0;
+  } {
+    // TODO(dmichael): Make const-ref arguments work properly with type
+    // deduction.
+    CallWhileUnlocked<void, int, const std::string&>(
+        TestCallback_2, 123, std::string("yo"));
+    ASSERT_EQ(1, called_num);
+    called_num = 0;
+  } {
+    base::Callback<void()> callback(base::Bind(TestCallback_0));
+    CallWhileUnlocked(callback);
+    ASSERT_EQ(1, called_num);
+    called_num = 0;
+  }
+}
+
+}  // namespace ppapi
diff --git a/remoting/remoting.gyp b/remoting/remoting.gyp
index 121002d..6816b7e 100644
--- a/remoting/remoting.gyp
+++ b/remoting/remoting.gyp
@@ -165,6 +165,7 @@
       'webapp/host_settings.js',
       'webapp/host_setup_dialog.js',
       'webapp/host_table_entry.js',
+      'webapp/identity.js',
       'webapp/l10n.js',
       'webapp/log_to_server.js',
       'webapp/menu_button.js',
@@ -2020,7 +2021,6 @@
         ],
         'remoting_webapp_apps_v2_js_files': [
           'webapp/background.js',
-          'webapp/identity.js',
         ],
       },
       'dependencies': [
diff --git a/remoting/webapp/all_js_load.gtestjs b/remoting/webapp/all_js_load.gtestjs
index 61a8aa4..53a95f4 100644
--- a/remoting/webapp/all_js_load.gtestjs
+++ b/remoting/webapp/all_js_load.gtestjs
@@ -44,6 +44,7 @@
     'host_session.js',
     'host_setup_dialog.js',
     'host_table_entry.js',
+    'identity.js',
     //'jscompiler_hacks.js',  // Only used by jscompiler.
     'l10n.js',
     'log_to_server.js',
diff --git a/remoting/webapp/appsv2.patch b/remoting/webapp/appsv2.patch
index a214d0c..0e643db 100644
--- a/remoting/webapp/appsv2.patch
+++ b/remoting/webapp/appsv2.patch
@@ -1,34 +1,3 @@
-diff --git a/remoting/webapp/event_handlers.js b/remoting/webapp/event_handlers.js
-index 5dfc368..f69d984 100644
---- a/event_handlers.js
-+++ b/event_handlers.js
-@@ -54,7 +54,6 @@ function onLoad() {
-         fn: remoting.sendCtrlAltDel },
-       { event: 'click', id: 'send-print-screen',
-         fn: remoting.sendPrintScreen },
--      { event: 'click', id: 'auth-button', fn: doAuthRedirect },
-       { event: 'click', id: 'share-button', fn: remoting.tryShare },
-       { event: 'click', id: 'access-mode-button', fn: goEnterAccessCode },
-       { event: 'click', id: 'cancel-share-button', fn: remoting.cancelShare },
-@@ -104,6 +103,4 @@ function onBeforeUnload() {
- }
- 
- window.addEventListener('load', onLoad, false);
--window.addEventListener('beforeunload', onBeforeUnload, false);
- window.addEventListener('resize', remoting.onResize, false);
--window.addEventListener('unload', remoting.disconnect, false);
-diff --git a/remoting/webapp/main.html b/remoting/webapp/main.html
-index 061caeb..f61e532 100644
---- a/main.html
-+++ b/main.html
-@@ -35,6 +35,7 @@ found in the LICENSE file.
-     <script src="host_settings.js"></script>
-     <script src="host_setup_dialog.js"></script>
-     <script src="host_table_entry.js"></script>
-+    <script src="identity.js"></script>
-     <script src="l10n.js"></script>
-     <script src="log_to_server.js"></script>
-     <script src="menu_button.js"></script>
 diff --git a/remoting/webapp/manifest.json b/remoting/webapp/manifest.json
 index d1f8d1f..67bf660 100644
 --- a/manifest.json
@@ -97,47 +66,3 @@
 +    "pages": [ "wcs_sandbox.html" ]
    }
  }
-diff --git a/remoting/webapp/remoting.js b/remoting/webapp/remoting.js
-index f89072a..2fadd83 100644
---- a/remoting.js
-+++ b/remoting.js
-@@ -34,7 +34,6 @@ function consentRequired_(authContinue) {
-  * Entry point for app initialization.
-  */
- remoting.init = function() {
--  migrateLocalToChromeStorage_();
-   remoting.logExtensionInfo_();
-   l10n.localize();
-   // Create global objects.
-@@ -45,10 +45,7 @@ remoting.init = function() {
-   // Create global objects.
-   remoting.settings = new remoting.Settings();
-   remoting.oauth2 = new remoting.OAuth2();
--  // TODO(jamiewalch): Reinstate this when we migrate to apps v2
--  // (http://crbug.com/ 134213).
--  // remoting.identity = new remoting.Identity(consentRequired_);
--  remoting.identity = remoting.oauth2;
-+  remoting.identity = new remoting.Identity(consentRequired_);
-   remoting.stats = new remoting.ConnectionStats(
-       document.getElementById('statistics'));
-   remoting.formatIq = new remoting.FormatIq();
-@@ -11,9 +151,6 @@ remoting.initHomeScreenUi = function() {
-   remoting.hostController = new remoting.HostController();
-   document.getElementById('share-button').disabled = !isIT2MeSupported_();
-   remoting.setMode(remoting.AppMode.HOME);
--  if (!remoting.oauth2.isAuthenticated()) {
--    document.getElementById('auth-dialog').hidden = false;
--  }
-   remoting.hostSetupDialog =
-       new remoting.HostSetupDialog(remoting.hostController);
-   var dialog = document.getElementById('paired-clients-list');
-diff --git a/remoting/webapp/xhr_proxy.js b/remoting/webapp/xhr_proxy.js
-index 4c45780..653b481 100644
---- a/xhr_proxy.js
-+++ b/xhr_proxy.js
-@@ -90,4 +90,4 @@ remoting.XMLHttpRequestProxy.prototype.DONE = 4;
-
- // Since the WCS driver code constructs XHRs directly, the only mechanism for
- // proxying them is to replace the XMLHttpRequest constructor.
--//XMLHttpRequest = remoting.XMLHttpRequestProxy;
-+XMLHttpRequest = remoting.XMLHttpRequestProxy;
diff --git a/remoting/webapp/event_handlers.js b/remoting/webapp/event_handlers.js
index 47e6d53..8199d35f 100644
--- a/remoting/webapp/event_handlers.js
+++ b/remoting/webapp/event_handlers.js
@@ -104,13 +104,12 @@
     }
   }
   remoting.init();
-}
 
-function onBeforeUnload() {
-  return remoting.promptClose();
+  window.addEventListener('resize', remoting.onResize, false);
+  if (!remoting.isAppsV2) {
+    window.addEventListener('beforeunload', remoting.promptClose, false);
+    window.addEventListener('unload', remoting.disconnect, false);
+  }
 }
 
 window.addEventListener('load', onLoad, false);
-window.addEventListener('beforeunload', onBeforeUnload, false);
-window.addEventListener('resize', remoting.onResize, false);
-window.addEventListener('unload', remoting.disconnect, false);
diff --git a/remoting/webapp/jscompiler_hacks.js b/remoting/webapp/jscompiler_hacks.js
index 58d6669..911d321 100644
--- a/remoting/webapp/jscompiler_hacks.js
+++ b/remoting/webapp/jscompiler_hacks.js
@@ -168,7 +168,7 @@
     /** @type {string} */
     message: ''
   },
-  /** @return {{version: string}} */
+  /** @return {{version: string, app: {background: Object}}} */
   getManifest: function() {}
 };
 
diff --git a/remoting/webapp/main.css b/remoting/webapp/main.css
index 870796d..bb22ed7 100644
--- a/remoting/webapp/main.css
+++ b/remoting/webapp/main.css
@@ -27,6 +27,14 @@
   direction: __MSG_@@bidi_dir__;
 }
 
+/*
+* The "app-v2" class is added to the <body> node by remoting.init if it's
+* running as a V2 app.
+*/
+body.apps-v2 .apps-v1-only {
+  display: none !important;
+}
+
 a {
   text-decoration: none;
   color: #15c;
diff --git a/remoting/webapp/main.html b/remoting/webapp/main.html
index c352452..afe006b 100644
--- a/remoting/webapp/main.html
+++ b/remoting/webapp/main.html
@@ -36,6 +36,7 @@
     <script src="host_settings.js"></script>
     <script src="host_setup_dialog.js"></script>
     <script src="host_table_entry.js"></script>
+    <script src="identity.js"></script>
     <script src="l10n.js"></script>
     <script src="log_to_server.js"></script>
     <script src="menu_button.js"></script>
@@ -77,13 +78,13 @@
       <div class="box-spacer"></div>
       <div id="top-secondary">
         <span id="current-email"></span>
-        <span data-ui-mode="home">
-          <a id="sign-out" href="#" i18n-content="SIGN_OUT_BUTTON"></a> |
+        <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>
+        </span> |
         <a href="https://www.google.com/support/chrome/bin/answer.py?answer=1649523"
            target="_blank" i18n-content="HELP"></a>
       </div>
diff --git a/remoting/webapp/remoting.js b/remoting/webapp/remoting.js
index 50fe034..22ccad3 100644
--- a/remoting/webapp/remoting.js
+++ b/remoting/webapp/remoting.js
@@ -10,6 +10,11 @@
 /** @type {remoting.HostSession} */ remoting.hostSession = null;
 
 /**
+ * @type {boolean} True if this is a v2 app; false if it is a legacy app.
+ */
+remoting.isAppsV2 = false;
+
+/**
  * Show the authorization consent UI and register a one-shot event handler to
  * continue the authorization process.
  *
@@ -34,16 +39,33 @@
  * Entry point for app initialization.
  */
 remoting.init = function() {
-  migrateLocalToChromeStorage_();
+  // Determine whether or not this is a V2 web-app. In order to keep the apps
+  // v2 patch as small as possible, all JS changes needed for apps v2 are done
+  // at run-time. Only the manifest is patched.
+  var manifest = chrome.runtime.getManifest();
+  if (manifest && manifest.app && manifest.app.background) {
+    remoting.isAppsV2 = true;
+    document.body.classList.add('apps-v2');
+  }
+
+  if (!remoting.isAppsV2) {
+    migrateLocalToChromeStorage_();
+  }
+
   remoting.logExtensionInfo_();
   l10n.localize();
+
   // Create global objects.
   remoting.settings = new remoting.Settings();
-  remoting.oauth2 = new remoting.OAuth2();
-  // TODO(jamiewalch): Reinstate this when we migrate to apps v2
-  // (http://crbug.com/ 134213).
-  // remoting.identity = new remoting.Identity(consentRequired_);
-  remoting.identity = remoting.oauth2;
+  if (remoting.isAppsV2) {
+    remoting.identity = new remoting.Identity(consentRequired_);
+  } else {
+    remoting.oauth2 = new remoting.OAuth2();
+    if (!remoting.oauth2.isAuthenticated()) {
+      document.getElementById('auth-dialog').hidden = false;
+    }
+    remoting.identity = remoting.oauth2;
+  }
   remoting.stats = new remoting.ConnectionStats(
       document.getElementById('statistics'));
   remoting.formatIq = new remoting.FormatIq();
@@ -67,7 +89,6 @@
       remoting.showErrorMessage(error);
     }
   }
-
   remoting.identity.getEmail(remoting.onEmail, onGetEmailError);
 
   remoting.showOrHideIT2MeUi();
@@ -151,9 +172,6 @@
   remoting.hostController = new remoting.HostController();
   document.getElementById('share-button').disabled = !isIT2MeSupported_();
   remoting.setMode(remoting.AppMode.HOME);
-  if (!remoting.oauth2.isAuthenticated()) {
-    document.getElementById('auth-dialog').hidden = false;
-  }
   remoting.hostSetupDialog =
       new remoting.HostSetupDialog(remoting.hostController);
   var dialog = document.getElementById('paired-clients-list');
@@ -213,10 +231,11 @@
  * The extension manifest is parsed to extract this info.
  */
 remoting.logExtensionInfo_ = function() {
+  var v2OrLegacy = remoting.isAppsV2 ? " (v2)" : " (legacy)";
   var manifest = chrome.runtime.getManifest();
   if (manifest && manifest.version) {
     var name = chrome.i18n.getMessage('PRODUCT_NAME');
-    console.log(name + ' version: ' + manifest.version);
+    console.log(name + ' version: ' + manifest.version + v2OrLegacy);
   } else {
     console.error('Failed to get product version. Corrupt manifest?');
   }
@@ -226,8 +245,6 @@
  * If an IT2Me client or host is active then prompt the user before closing.
  * If a Me2Me client is active then don't bother, since closing the window is
  * the more intuitive way to end a Me2Me session, and re-connecting is easy.
- *
- * @return {?string} The prompt string if a connection is active.
  */
 remoting.promptClose = function() {
   if (!remoting.clientSession ||
diff --git a/remoting/webapp/wcs_sandbox_container.js b/remoting/webapp/wcs_sandbox_container.js
index e47421e..6eaac66 100644
--- a/remoting/webapp/wcs_sandbox_container.js
+++ b/remoting/webapp/wcs_sandbox_container.js
@@ -31,6 +31,13 @@
   this.pendingXhrs_ = {};
 
   window.addEventListener('message', this.onMessage_.bind(this), false);
+
+  if (remoting.isAppsV2) {
+    var message = {
+      'command': 'proxyXhrs'
+    };
+    this.sandbox_.postMessage(message, '*');
+  }
 };
 
 /**
diff --git a/remoting/webapp/wcs_sandbox_content.js b/remoting/webapp/wcs_sandbox_content.js
index 8de4663..c3e346e 100644
--- a/remoting/webapp/wcs_sandbox_content.js
+++ b/remoting/webapp/wcs_sandbox_content.js
@@ -45,6 +45,13 @@
 
   switch (event.data['command']) {
 
+    case 'proxyXhrs':
+      // Since the WCS driver code constructs XHRs directly, the only
+      // mechanism for proxying them is to replace the XMLHttpRequest
+      // constructor.
+      XMLHttpRequest = remoting.XMLHttpRequestProxy;
+      break;
+
     case 'sendIq':
       /** @type {string} */
       var stanza = event.data['stanza'];
diff --git a/remoting/webapp/xhr_proxy.js b/remoting/webapp/xhr_proxy.js
index 4c45780..c2cadb5 100644
--- a/remoting/webapp/xhr_proxy.js
+++ b/remoting/webapp/xhr_proxy.js
@@ -87,7 +87,3 @@
 remoting.XMLHttpRequestProxy.prototype.HEADERS_RECEIVED = 2;
 remoting.XMLHttpRequestProxy.prototype.LOADING = 3;
 remoting.XMLHttpRequestProxy.prototype.DONE = 4;
-
-// Since the WCS driver code constructs XHRs directly, the only mechanism for
-// proxying them is to replace the XMLHttpRequest constructor.
-//XMLHttpRequest = remoting.XMLHttpRequestProxy;
diff --git a/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java b/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java
index 96b94bb..a6fea9d 100644
--- a/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java
+++ b/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java
@@ -38,8 +38,8 @@
     @Override
     public AccountManagerFuture<Bundle> getAuthToken(Account account, String authTokenType,
             boolean notifyAuthFailure, AccountManagerCallback<Bundle> callback, Handler handler) {
-        return mAccountManager.getAuthToken(account, authTokenType, notifyAuthFailure, callback,
-                handler);
+        return mAccountManager.getAuthToken(account, authTokenType, null, notifyAuthFailure,
+                callback, handler);
     }
 
     @Override
diff --git a/third_party/libjingle/libjingle.gyp b/third_party/libjingle/libjingle.gyp
index 45d5fd9..8bb8b5f 100644
--- a/third_party/libjingle/libjingle.gyp
+++ b/third_party/libjingle/libjingle.gyp
@@ -107,7 +107,7 @@
             'ANDROID',
           ],
         }],
-        ['os_posix == 1', {
+        ['os_posix==1', {
           'defines': [
             'POSIX',
           ],
@@ -127,6 +127,11 @@
             'FREEBSD',
           ],
         }],
+        ['chromeos==1', {
+          'defines': [
+            'CHROMEOS',
+          ],
+        }],
       ],
     },
     'all_dependent_settings': {
diff --git a/tools/imagediff/DEPS b/tools/imagediff/DEPS
index b273ae3..fc92e01 100644
--- a/tools/imagediff/DEPS
+++ b/tools/imagediff/DEPS
@@ -1,3 +1,3 @@
 include_rules = [
-  "+ui/gfx",
+  "+webkit/support/webkit_support_gfx.h",
 ]
diff --git a/tools/imagediff/image_diff.cc b/tools/imagediff/image_diff.cc
index cb1937f..5aa4eef 100644
--- a/tools/imagediff/image_diff.cc
+++ b/tools/imagediff/image_diff.cc
@@ -23,8 +23,7 @@
 #include "base/safe_numerics.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "ui/gfx/codec/png_codec.h"
-#include "ui/gfx/size.h"
+#include "webkit/support/webkit_support_gfx.h"
 
 #if defined(OS_WIN)
 #include "windows.h"
@@ -81,9 +80,8 @@
     if (fread(source.get(), 1, byte_length, stdin) != byte_length)
       return false;
 
-    if (!gfx::PNGCodec::Decode(source.get(), byte_length,
-                               gfx::PNGCodec::FORMAT_RGBA,
-                               &data_, &w_, &h_)) {
+    if (!webkit_support::DecodePNG(source.get(), byte_length,
+                                   &data_, &w_, &h_)) {
       Clear();
       return false;
     }
@@ -107,8 +105,8 @@
 
     file_util::CloseFile(f);
 
-    if (!gfx::PNGCodec::Decode(&compressed[0], compressed.size(),
-                               gfx::PNGCodec::FORMAT_RGBA, &data_, &w_, &h_)) {
+    if (!webkit_support::DecodePNG(&compressed[0], compressed.size(),
+                                   &data_, &w_, &h_)) {
       Clear();
       return false;
     }
@@ -317,10 +315,9 @@
     return kStatusSame;
 
   std::vector<unsigned char> png_encoding;
-  gfx::PNGCodec::Encode(diff_image.data(), gfx::PNGCodec::FORMAT_RGBA,
-                        gfx::Size(diff_image.w(), diff_image.h()),
-                        diff_image.w() * 4, false,
-                        std::vector<gfx::PNGCodec::Comment>(), &png_encoding);
+  webkit_support::EncodeRGBAPNG(
+      diff_image.data(), diff_image.w(), diff_image.h(),
+      diff_image.w() * 4, &png_encoding);
   if (file_util::WriteFile(out_file,
           reinterpret_cast<char*>(&png_encoding.front()),
           base::checked_numeric_cast<int>(png_encoding.size())) < 0)
diff --git a/tools/imagediff/image_diff.gyp b/tools/imagediff/image_diff.gyp
index 6d4a620..b1f9ccf 100644
--- a/tools/imagediff/image_diff.gyp
+++ b/tools/imagediff/image_diff.gyp
@@ -12,11 +12,21 @@
       'type': 'executable',
       'dependencies': [
         '../../base/base.gyp:base',
-        '../../ui/ui.gyp:ui',
+        '../../webkit/support/webkit_support.gyp:webkit_support_gfx',
       ],
       'sources': [
         'image_diff.cc',
       ],
+      'conditions': [
+       ['OS=="android" and android_webview_build==0', {
+         # The Chromium Android port will compare images on host rather
+         # than target (a device or emulator) for performance reasons.
+         'toolsets': ['host'],
+       }],
+       ['OS=="android" and android_webview_build==1', {
+         'type': 'none',
+       }],
+      ],
     },
   ],
 }
diff --git a/tools/json_schema_compiler/cc_generator.py b/tools/json_schema_compiler/cc_generator.py
index 6f201fd..cab4650 100644
--- a/tools/json_schema_compiler/cc_generator.py
+++ b/tools/json_schema_compiler/cc_generator.py
@@ -620,7 +620,7 @@
       (c.Append('const base::ListValue* list = NULL;')
         .Append('if (!%(src_var)s->GetAsList(&list))')
         .Append('  return %(failure_value)s;'))
-      item_type = underlying_type.item_type
+      item_type = self._type_helper.FollowRef(underlying_type.item_type)
       if item_type.property_type == PropertyType.ENUM:
         c.Concat(self._GenerateListValueToEnumArrayConversion(
                      item_type,
diff --git a/tools/json_schema_compiler/test/enums.json b/tools/json_schema_compiler/test/enums.json
index 19229b0..8891dc7 100644
--- a/tools/json_schema_compiler/test/enums.json
+++ b/tools/json_schema_compiler/test/enums.json
@@ -62,6 +62,26 @@
         ]
       },
       {
+        "name": "takesEnumArray",
+        "type": "function",
+        "description": "Takes an enum array as its parameter.",
+        "parameters": [
+          {
+            "name": "values",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "enum": ["foo", "bar", "baz"]
+            }
+          },
+          {
+            "name": "callback",
+            "type": "function",
+            "parameters": []
+          }
+        ]
+      },
+      {
         "name": "takesEnumAsType",
         "type": "function",
         "description": "Takes an enum type as its parameter.",
@@ -78,6 +98,25 @@
         ]
       },
       {
+        "name": "takesEnumArrayAsType",
+        "type": "function",
+        "description": "Takes an enum type array as its parameter.",
+        "parameters": [
+          {
+            "name": "values",
+            "type": "array",
+            "items": {
+              "$ref": "Enumeration"
+            }
+          },
+          {
+            "name": "callback",
+            "type": "function",
+            "parameters": []
+          }
+        ]
+      },
+      {
         "name": "returnsEnum",
         "type": "function",
         "description": "Returns an enum through the callback",
diff --git a/tools/json_schema_compiler/test/enums_unittest.cc b/tools/json_schema_compiler/test/enums_unittest.cc
index 81bfe8d..144c3cc 100644
--- a/tools/json_schema_compiler/test/enums_unittest.cc
+++ b/tools/json_schema_compiler/test/enums_unittest.cc
@@ -5,8 +5,10 @@
 #include "tools/json_schema_compiler/test/enums.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
+#include "tools/json_schema_compiler/test/test_util.h"
 
 using namespace test::api::enums;
+using json_schema_compiler::test_util::List;
 
 TEST(JsonSchemaCompilerEnumsTest, EnumTypePopulate) {
   {
@@ -53,6 +55,27 @@
   }
 }
 
+TEST(JsonSchemaCompilerEnumsTest, EnumsArrayAsType) {
+  {
+    ListValue params_value;
+    params_value.Append(List(Value::CreateStringValue("one"),
+                             Value::CreateStringValue("two")).release());
+    scoped_ptr<TakesEnumArrayAsType::Params> params(
+        TakesEnumArrayAsType::Params::Create(params_value));
+    ASSERT_TRUE(params);
+    EXPECT_EQ(2U, params->values.size());
+    EXPECT_EQ(ENUMERATION_ONE, params->values[0]);
+    EXPECT_EQ(ENUMERATION_TWO, params->values[1]);
+  }
+  {
+    ListValue params_value;
+    params_value.Append(List(Value::CreateStringValue("invalid")).release());
+    scoped_ptr<TakesEnumArrayAsType::Params> params(
+        TakesEnumArrayAsType::Params::Create(params_value));
+    EXPECT_FALSE(params);
+  }
+}
+
 TEST(JsonSchemaCompilerEnumsTest, ReturnsEnumCreate) {
   {
     ReturnsEnum::Results::State state = ReturnsEnum::Results::STATE_FOO;
@@ -124,6 +147,27 @@
   }
 }
 
+TEST(JsonSchemaCompilerEnumsTest, TakesEnumArrayParamsCreate) {
+  {
+    ListValue params_value;
+    params_value.Append(List(Value::CreateStringValue("foo"),
+                             Value::CreateStringValue("bar")).release());
+    scoped_ptr<TakesEnumArray::Params> params(
+        TakesEnumArray::Params::Create(params_value));
+    ASSERT_TRUE(params);
+    EXPECT_EQ(2U, params->values.size());
+    EXPECT_EQ(TakesEnumArray::Params::VALUES_TYPE_FOO, params->values[0]);
+    EXPECT_EQ(TakesEnumArray::Params::VALUES_TYPE_BAR, params->values[1]);
+  }
+  {
+    ListValue params_value;
+    params_value.Append(List(Value::CreateStringValue("invalid")).release());
+    scoped_ptr<TakesEnumArray::Params> params(
+        TakesEnumArray::Params::Create(params_value));
+    EXPECT_FALSE(params);
+  }
+}
+
 TEST(JsonSchemaCompilerEnumsTest, TakesOptionalEnumParamsCreate) {
   {
     ListValue params_value;
diff --git a/tools/json_schema_compiler/util.h b/tools/json_schema_compiler/util.h
index 7957830..a921179 100644
--- a/tools/json_schema_compiler/util.h
+++ b/tools/json_schema_compiler/util.h
@@ -44,17 +44,6 @@
   return true;
 }
 
-// This is used for getting an enum out of a ListValue, which will happen if an
-// array of enums is a parameter to a function.
-template<class T>
-bool GetItemFromList(const base::ListValue& from, int index, T* out) {
-  int value;
-  if (!from.GetInteger(index, &value))
-    return false;
-  *out = static_cast<T>(value);
-  return true;
-}
-
 // Populates |out| with |list|. Returns false if there is no list at the
 // specified key or if the list has anything other than |T|.
 template <class T>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 2e86f1d..46dab5e 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -12466,6 +12466,19 @@
   </summary>
 </histogram>
 
+<histogram name="SBClientDownload.DownloadRequestNetError" enum="NetErrorCodes">
+  <summary>
+    The net error code for all CheckClientDownloadRequest URLFetchers.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DownloadRequestResponseCode">
+  <summary>
+    For CheckClientDownloadRequest URLFetchers with successful status, the HTTP
+    response code that was received.
+  </summary>
+</histogram>
+
 <histogram name="SBClientDownload.SignedBinaryDownload"
     enum="SBClientDownloadIsSignedBinary">
   <summary>
@@ -14135,6 +14148,15 @@
   </summary>
 </histogram>
 
+<histogram name="WebCore.Animation.CSSProperties" enum="MappedCSSProperties">
+  <summary>
+    Counts the number of times each CSS property is animated. There is no limit
+    on the number of times each property is counted per page view -- a property
+    that is animated multiple times during a single page view is counted each
+    time it animates.
+  </summary>
+</histogram>
+
 <histogram name="WebCore.FeatureObserver" enum="FeatureObserver">
   <summary>
     Count of how many instances of WebCore::Page use various features. Each
@@ -16924,7 +16946,7 @@
   <int value="51" label="StepAttribute"/>
   <int value="52" label="PageVisits"/>
   <int value="53" label="HTMLMarqueeElement"/>
-  <int value="54" label="CSSOverflowMarquee"/>
+  <int value="54" label="Unused: CSSOverflowMarquee"/>
   <int value="55" label="Reflection"/>
   <int value="56" label="CursorVisibility"/>
   <int value="57" label="StorageInfo"/>
@@ -16950,6 +16972,17 @@
   <int value="77" label="XMLDocument"/>
   <int value="78" label="XSLProcessingInstruction"/>
   <int value="79" label="XSLTProcessor"/>
+  <int value="80" label="SVGSwitchElement"/>
+  <int value="81" label="PrefixedDocumentRegister"/>
+  <int value="82" label="HTMLShadowElementOlderShadowRoot"/>
+  <int value="83" label="Document.all()"/>
+  <int value="84" label="FormElement"/>
+  <int value="85" label="DemotedFormElement"/>
+  <int value="86" label="CaptureAttributeAsEnum"/>
+  <int value="87" label="ShadowDOMPrefixedPseudo"/>
+  <int value="88" label="ShadowDOMPrefixedCreateShadowRoot"/>
+  <int value="89" label="ShadowDOMPrefixedShadowRoot"/>
+  <int value="90" label="SVGAnimationElement"/>
 </enum>
 
 <enum name="FFmpegCodecs" type="int">
diff --git a/tools/perf/measurements/image_decoding.py b/tools/perf/measurements/image_decoding.py
index 1baf345..3f67ae4 100644
--- a/tools/perf/measurements/image_decoding.py
+++ b/tools/perf/measurements/image_decoding.py
@@ -49,3 +49,5 @@
       return
     image_decoding_avg = sum(durations) / len(durations)
     results.Add('ImageDecoding_avg', 'ms', image_decoding_avg)
+    results.Add('ImageLoading_avg', 'ms',
+                tab.EvaluateJavaScript('averageLoadingTimeMs()'))
diff --git a/tools/perf_expectations/perf_expectations.json b/tools/perf_expectations/perf_expectations.json
index 0c03b50..3b64236 100644
--- a/tools/perf_expectations/perf_expectations.json
+++ b/tools/perf_expectations/perf_expectations.json
@@ -740,7 +740,7 @@
  "xp-release/sizes/chrome.dll/chrome.dll": {"reva": 203454, "revb": 203508, "type": "absolute", "better": "lower", "improve": 55459814, "regress": 61312205, "sha1": "b01d47d9"},
  "xp-release/sizes/chrome.exe/chrome.exe": {"reva": 183841, "revb": 184954, "type": "absolute", "better": "lower", "improve": 720358, "regress": 796186, "sha1": "b5aa4523"},
  "xp-release/sizes/mini_installer.exe/mini_installer.exe": {"reva": 212973, "revb": 213132, "type": "absolute", "better": "lower", "improve": 28051174, "regress": 31094247, "sha1": "303dac45"},
- "xp-release/sizes/npchrome_frame.dll/npchrome_frame.dll": {"reva": 212047, "revb": 212054, "type": "absolute", "better": "lower", "improve": 2722380, "regress": 3008948, "sha1": "6d412793"},
+ "xp-release/sizes/npchrome_frame.dll/npchrome_frame.dll": {"reva": 213618, "revb": 213647, "type": "absolute", "better": "lower", "improve": 2320128, "regress": 2567040, "sha1": "a9618db1"},
  "xp-release/sizes/setup.exe/setup.exe": {"reva": 183841, "revb": 184954, "type": "absolute", "better": "lower", "improve": 1080780, "regress": 1195085, "sha1": "c56e884e"},
  "load": true
 }
diff --git a/tools/sharding_supervisor/sharding_supervisor.py b/tools/sharding_supervisor/sharding_supervisor.py
index e18eae1..4bddeb2 100755
--- a/tools/sharding_supervisor/sharding_supervisor.py
+++ b/tools/sharding_supervisor/sharding_supervisor.py
@@ -60,7 +60,8 @@
   parser.disable_interspersed_args()
   options, args = parser.parse_args()
 
-  swarm_client_dir = os.path.join(ROOT_DIR, 'tools', 'swarm_client')
+  swarm_client_dir = os.path.join(
+      ROOT_DIR, 'tools', 'swarm_client', 'googletest')
   sys.path.insert(0, swarm_client_dir)
 
   cmd = [
diff --git a/tools/telemetry/telemetry/core/platform/profiler/perf_profiler.py b/tools/telemetry/telemetry/core/platform/profiler/perf_profiler.py
index 58cea8a..4e69fd4 100644
--- a/tools/telemetry/telemetry/core/platform/profiler/perf_profiler.py
+++ b/tools/telemetry/telemetry/core/platform/profiler/perf_profiler.py
@@ -34,7 +34,13 @@
     self._proc.send_signal(signal.SIGINT)
     exit_code = self._proc.wait()
     try:
-      if exit_code not in (0, -2):
+      if exit_code == 128:
+        raise Exception(
+            """perf failed with exit code 128.
+Try rerunning this script under sudo or setting
+/proc/sys/kernel/perf_event_paranoid to "-1".\nOutput:\n%s""" %
+            self._GetStdOut())
+      elif exit_code not in (0, -2):
         raise Exception(
             'perf failed with exit code %d. Output:\n%s' % (exit_code,
                                                             self._GetStdOut()))
diff --git a/ui/app_list/views/app_list_item_view.cc b/ui/app_list/views/app_list_item_view.cc
index cdc52ea..1b9aaf7 100644
--- a/ui/app_list/views/app_list_item_view.cc
+++ b/ui/app_list/views/app_list_item_view.cc
@@ -140,11 +140,13 @@
   ui::ScopedLayerAnimationSettings settings(layer()->GetAnimator());
   switch (ui_state_) {
     case UI_STATE_NORMAL:
-      title_->SetVisible(true);
+      title_->SetVisible(!model_->is_installing());
+      progress_bar_->SetVisible(model_->is_installing());
       layer()->SetTransform(gfx::Transform());
       break;
     case UI_STATE_DRAGGING:
       title_->SetVisible(false);
+      progress_bar_->SetVisible(false);
       const gfx::Rect bounds(layer()->bounds().size());
       layer()->SetTransform(gfx::GetScaleTransform(
           bounds.CenterPoint(),
diff --git a/ui/gfx/selection_model.h b/ui/gfx/selection_model.h
index 92c4d6e..b99b383 100644
--- a/ui/gfx/selection_model.h
+++ b/ui/gfx/selection_model.h
@@ -74,7 +74,7 @@
   LogicalCursorDirection caret_affinity() const { return caret_affinity_; }
 
   bool operator==(const SelectionModel& sel) const;
-  bool operator!=(const SelectionModel& sel) { return !(*this == sel); }
+  bool operator!=(const SelectionModel& sel) const { return !(*this == sel); }
 
   std::string ToString() const;
 
diff --git a/ui/views/bubble/bubble_frame_view.cc b/ui/views/bubble/bubble_frame_view.cc
index 7b011c5..8f63405 100644
--- a/ui/views/bubble/bubble_frame_view.cc
+++ b/ui/views/bubble/bubble_frame_view.cc
@@ -50,6 +50,9 @@
 
 namespace views {
 
+// static
+const char BubbleFrameView::kViewClassName[] = "BubbleFrameView";
+
 BubbleFrameView::BubbleFrameView(const gfx::Insets& content_margins)
     : bubble_border_(NULL),
       content_margins_(content_margins),
@@ -186,7 +189,7 @@
 }
 
 const char* BubbleFrameView::GetClassName() const {
-  return "BubbleFrameView";
+  return kViewClassName;
 }
 
 void BubbleFrameView::ChildPreferredSizeChanged(View* child) {
diff --git a/ui/views/bubble/bubble_frame_view.h b/ui/views/bubble/bubble_frame_view.h
index 70189c2..0152217 100644
--- a/ui/views/bubble/bubble_frame_view.h
+++ b/ui/views/bubble/bubble_frame_view.h
@@ -22,6 +22,9 @@
 class VIEWS_EXPORT BubbleFrameView : public NonClientFrameView,
                                      public ButtonListener {
  public:
+  // Internal class name.
+  static const char kViewClassName[];
+
   explicit BubbleFrameView(const gfx::Insets& content_margins);
   virtual ~BubbleFrameView();
 
diff --git a/ui/views/controls/textfield/native_textfield_views.cc b/ui/views/controls/textfield/native_textfield_views.cc
index a48ff4f..31687af 100644
--- a/ui/views/controls/textfield/native_textfield_views.cc
+++ b/ui/views/controls/textfield/native_textfield_views.cc
@@ -1224,12 +1224,12 @@
         // forward/back of the browser history.
         if (alt)
           break;
-        size_t cursor_position = model_->GetCursorPosition();
+        const ui::Range selection_range = GetSelectedRange();
         model_->MoveCursor(
             control ? gfx::WORD_BREAK : gfx::CHARACTER_BREAK,
             (key_code == ui::VKEY_RIGHT) ? gfx::CURSOR_RIGHT : gfx::CURSOR_LEFT,
             shift);
-        cursor_changed = model_->GetCursorPosition() != cursor_position;
+        cursor_changed = GetSelectedRange() != selection_range;
         break;
       }
       case ui::VKEY_END:
diff --git a/webkit/browser/blob/blob_storage_controller.h b/webkit/browser/blob/blob_storage_controller.h
index 1b69748..03dfb08 100644
--- a/webkit/browser/blob/blob_storage_controller.h
+++ b/webkit/browser/blob/blob_storage_controller.h
@@ -10,7 +10,7 @@
 
 #include "base/containers/hash_tables.h"
 #include "base/memory/ref_counted.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "webkit/browser/webkit_storage_browser_export.h"
 #include "webkit/common/blob/blob_data.h"
 
diff --git a/webkit/browser/database/vfs_backend.h b/webkit/browser/database/vfs_backend.h
index d81433c..6bc4e168 100644
--- a/webkit/browser/database/vfs_backend.h
+++ b/webkit/browser/database/vfs_backend.h
@@ -6,7 +6,7 @@
 #define WEBKIT_BROWSER_DATABASE_VFS_BACKEND_H_
 
 #include "base/platform_file.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "base/strings/string16.h"
 #include "webkit/browser/webkit_storage_browser_export.h"
 
diff --git a/webkit/browser/fileapi/copy_or_move_operation_delegate_unittest.cc b/webkit/browser/fileapi/copy_or_move_operation_delegate_unittest.cc
index 1b7c872..95e73c6 100644
--- a/webkit/browser/fileapi/copy_or_move_operation_delegate_unittest.cc
+++ b/webkit/browser/fileapi/copy_or_move_operation_delegate_unittest.cc
@@ -127,26 +127,23 @@
         CreateFileSystemContextForTesting(quota_manager_proxy_.get(), base_dir);
 
     // Prepare the origin's root directory.
-    FileSystemBackend* mount_point_provider =
+    FileSystemBackend* backend =
         file_system_context_->GetFileSystemBackend(src_type_);
-    mount_point_provider->OpenFileSystem(
-        origin_, src_type_,
-        OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT,
-        base::Bind(&ExpectOk));
-    mount_point_provider =
-        file_system_context_->GetFileSystemBackend(dest_type_);
+    backend->OpenFileSystem(origin_, src_type_,
+                            OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT,
+                            base::Bind(&ExpectOk));
+    backend = file_system_context_->GetFileSystemBackend(dest_type_);
     if (dest_type_ == kFileSystemTypeTest) {
-      TestFileSystemBackend* test_provider =
-          static_cast<TestFileSystemBackend*>(mount_point_provider);
+      TestFileSystemBackend* test_backend =
+          static_cast<TestFileSystemBackend*>(backend);
       scoped_ptr<CopyOrMoveFileValidatorFactory> factory(
           new TestValidatorFactory);
-      test_provider->set_require_copy_or_move_validator(true);
-      test_provider->InitializeCopyOrMoveFileValidatorFactory(factory.Pass());
+      test_backend->set_require_copy_or_move_validator(true);
+      test_backend->InitializeCopyOrMoveFileValidatorFactory(factory.Pass());
     }
-    mount_point_provider->OpenFileSystem(
-        origin_, dest_type_,
-        OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT,
-        base::Bind(&ExpectOk));
+    backend->OpenFileSystem(origin_, dest_type_,
+                            OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT,
+                            base::Bind(&ExpectOk));
     base::MessageLoop::current()->RunUntilIdle();
 
     // Grant relatively big quota initially.
diff --git a/webkit/browser/fileapi/file_system_backend.h b/webkit/browser/fileapi/file_system_backend.h
index 33b4627..63f8017 100644
--- a/webkit/browser/fileapi/file_system_backend.h
+++ b/webkit/browser/fileapi/file_system_backend.h
@@ -49,8 +49,8 @@
       OpenFileSystemCallback;
   virtual ~FileSystemBackend() {}
 
-  // Returns true if this mount point provider can handle |type|.
-  // One mount point provider may be able to handle multiple filesystem types.
+  // Returns true if this filesystem backend can handle |type|.
+  // One filesystem backend may be able to handle multiple filesystem types.
   virtual bool CanHandleType(FileSystemType type) const = 0;
 
   // This method is called right after the backend is registered in the
@@ -60,7 +60,7 @@
 
   // Opens the filesystem for the given |origin_url| and |type|.
   // This verifies if it is allowed to request (or create) the filesystem
-  // and if it can access (or create) the root directory of the mount point.
+  // and if it can access (or create) the root directory.
   // If |mode| is CREATE_IF_NONEXISTENT calling this may also create
   // the root directory (and/or related database entries etc) for
   // the filesystem if it doesn't exist.
@@ -70,22 +70,22 @@
       OpenFileSystemMode mode,
       const OpenFileSystemCallback& callback) = 0;
 
-  // Returns the specialized FileSystemFileUtil for this mount point.
+  // Returns the specialized FileSystemFileUtil for this backend.
   // It is ok to return NULL if the filesystem doesn't support synchronous
   // version of FileUtil.
   virtual FileSystemFileUtil* GetFileUtil(FileSystemType type) = 0;
 
-  // Returns the specialized AsyncFileUtil for this mount point.
+  // Returns the specialized AsyncFileUtil for this backend.
   virtual AsyncFileUtil* GetAsyncFileUtil(FileSystemType type) = 0;
 
-  // Returns the specialized CopyOrMoveFileValidatorFactory for this mount
-  // point and |type|.  If |error_code| is PLATFORM_FILE_OK and the result
-  // is NULL, then no validator is required.
+  // Returns the specialized CopyOrMoveFileValidatorFactory for this backend
+  // and |type|.  If |error_code| is PLATFORM_FILE_OK and the result is NULL,
+  // then no validator is required.
   virtual CopyOrMoveFileValidatorFactory* GetCopyOrMoveFileValidatorFactory(
       FileSystemType type, base::PlatformFileError* error_code) = 0;
 
   // Returns a new instance of the specialized FileSystemOperation for this
-  // mount point based on the given triplet of |origin_url|, |file_system_type|
+  // backend based on the given triplet of |origin_url|, |file_system_type|
   // and |virtual_path|. On failure to create a file system operation, set
   // |error_code| correspondingly.
   // This method is usually dispatched by
@@ -118,8 +118,8 @@
       int64 offset,
       FileSystemContext* context) const = 0;
 
-  // Returns the specialized FileSystemQuotaUtil for this mount point.
-  // This could return NULL if this mount point does not support quota.
+  // Returns the specialized FileSystemQuotaUtil for this backend.
+  // This could return NULL if this backend does not support quota.
   virtual FileSystemQuotaUtil* GetQuotaUtil() = 0;
 };
 
diff --git a/webkit/browser/fileapi/file_system_operation.h b/webkit/browser/fileapi/file_system_operation.h
index 0f6ef5b..a24c415 100644
--- a/webkit/browser/fileapi/file_system_operation.h
+++ b/webkit/browser/fileapi/file_system_operation.h
@@ -10,7 +10,7 @@
 #include "base/callback.h"
 #include "base/files/file_path.h"
 #include "base/platform_file.h"
-#include "base/process.h"
+#include "base/process/process.h"
 #include "webkit/common/fileapi/directory_entry.h"
 
 namespace base {
diff --git a/webkit/browser/fileapi/obfuscated_file_util_unittest.cc b/webkit/browser/fileapi/obfuscated_file_util_unittest.cc
index ae4edd0..ced3d71 100644
--- a/webkit/browser/fileapi/obfuscated_file_util_unittest.cc
+++ b/webkit/browser/fileapi/obfuscated_file_util_unittest.cc
@@ -142,8 +142,8 @@
 
     // Every time we create a new sandbox_file_system helper,
     // it creates another context, which creates another path manager,
-    // another sandbox_mount_point_provider, and
-    // another OFU.  We need to pass in the context to skip all that.
+    // another sandbox_backend, and another OFU.
+    // We need to pass in the context to skip all that.
     file_system_context_ = CreateFileSystemContextForTesting(
         quota_manager_->proxy(),
         data_dir_.path());
diff --git a/webkit/browser/fileapi/sandbox_file_system_backend.cc b/webkit/browser/fileapi/sandbox_file_system_backend.cc
index 12f0705..5b3301f 100644
--- a/webkit/browser/fileapi/sandbox_file_system_backend.cc
+++ b/webkit/browser/fileapi/sandbox_file_system_backend.cc
@@ -94,11 +94,11 @@
 };
 
 void DidOpenFileSystem(
-    base::WeakPtr<SandboxFileSystemBackend> mount_point_provider,
+    base::WeakPtr<SandboxFileSystemBackend> sandbox_backend,
     const base::Callback<void(base::PlatformFileError error)>& callback,
     base::PlatformFileError* error) {
-  if (mount_point_provider.get())
-    mount_point_provider.get()->CollectOpenFileSystemMetrics(*error);
+  if (sandbox_backend.get())
+    sandbox_backend.get()->CollectOpenFileSystemMetrics(*error);
   callback.Run(*error);
 }
 
diff --git a/webkit/child/webkit_child_helpers.cc b/webkit/child/webkit_child_helpers.cc
index 6777955..422163f 100644
--- a/webkit/child/webkit_child_helpers.cc
+++ b/webkit/child/webkit_child_helpers.cc
@@ -10,7 +10,7 @@
 
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/process_util.h"
+#include "base/process/process_metrics.h"
 #include "v8/include/v8.h"
 
 namespace webkit_glue {
diff --git a/webkit/child/webkitplatformsupport_impl.cc b/webkit/child/webkitplatformsupport_impl.cc
index 31a355e..e33938e 100644
--- a/webkit/child/webkitplatformsupport_impl.cc
+++ b/webkit/child/webkitplatformsupport_impl.cc
@@ -18,7 +18,7 @@
 #include "base/metrics/sparse_histogram.h"
 #include "base/metrics/stats_counters.h"
 #include "base/platform_file.h"
-#include "base/process_util.h"
+#include "base/process/process_metrics.h"
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
diff --git a/webkit/glue/websocketstreamhandle_bridge.h b/webkit/child/websocketstreamhandle_bridge.h
similarity index 84%
rename from webkit/glue/websocketstreamhandle_bridge.h
rename to webkit/child/websocketstreamhandle_bridge.h
index c1712cb..0de4265 100644
--- a/webkit/glue/websocketstreamhandle_bridge.h
+++ b/webkit/child/websocketstreamhandle_bridge.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 WEBKIT_GLUE_WEBSOCKETSTREAMHANDLE_BRIDGE_H_
-#define WEBKIT_GLUE_WEBSOCKETSTREAMHANDLE_BRIDGE_H_
+#ifndef WEBKIT_CHILD_WEBSOCKETSTREAMHANDLE_BRIDGE_H_
+#define WEBKIT_CHILD_WEBSOCKETSTREAMHANDLE_BRIDGE_H_
 
 #include <vector>
 
@@ -40,4 +40,4 @@
 
 }  // namespace webkit_glue
 
-#endif  // WEBKIT_GLUE_WEBSOCKETSTREAMHANDLE_BRIDGE_H_
+#endif  // WEBKIT_CHILD_WEBSOCKETSTREAMHANDLE_BRIDGE_H_
diff --git a/webkit/child/websocketstreamhandle_impl.cc b/webkit/child/websocketstreamhandle_impl.cc
index f7da0e2..fe46b8f 100644
--- a/webkit/child/websocketstreamhandle_impl.cc
+++ b/webkit/child/websocketstreamhandle_impl.cc
@@ -18,8 +18,8 @@
 #include "third_party/WebKit/public/platform/WebSocketStreamHandleClient.h"
 #include "third_party/WebKit/public/platform/WebURL.h"
 #include "webkit/child/webkitplatformsupport_impl.h"
+#include "webkit/child/websocketstreamhandle_bridge.h"
 #include "webkit/child/websocketstreamhandle_delegate.h"
-#include "webkit/glue/websocketstreamhandle_bridge.h"
 
 using WebKit::WebData;
 using WebKit::WebSocketStreamError;
@@ -78,8 +78,7 @@
 
 WebSocketStreamHandleImpl::Context::Context(WebSocketStreamHandleImpl* handle)
     : handle_(handle),
-      client_(NULL),
-      bridge_(NULL) {
+      client_(NULL) {
 }
 
 void WebSocketStreamHandleImpl::Context::Connect(
diff --git a/webkit/child/weburlloader_impl.cc b/webkit/child/weburlloader_impl.cc
index 40b15ed..63ce778 100644
--- a/webkit/child/weburlloader_impl.cc
+++ b/webkit/child/weburlloader_impl.cc
@@ -10,7 +10,6 @@
 #include "base/files/file_path.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
-#include "base/process_util.h"
 #include "base/strings/string_util.h"
 #include "base/time/time.h"
 #include "net/base/data_url.h"
diff --git a/webkit/common/gpu/webkit_gpu.target.darwin-arm.mk b/webkit/common/gpu/webkit_gpu.target.darwin-arm.mk
index 4644a25..f408ce4 100644
--- a/webkit/common/gpu/webkit_gpu.target.darwin-arm.mk
+++ b/webkit/common/gpu/webkit_gpu.target.darwin-arm.mk
@@ -128,6 +128,7 @@
 	$(LOCAL_PATH)/third_party/skia/include/ports \
 	$(LOCAL_PATH)/third_party/skia/include/utils \
 	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
@@ -242,6 +243,7 @@
 	$(LOCAL_PATH)/third_party/skia/include/ports \
 	$(LOCAL_PATH)/third_party/skia/include/utils \
 	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
diff --git a/webkit/common/gpu/webkit_gpu.target.darwin-mips.mk b/webkit/common/gpu/webkit_gpu.target.darwin-mips.mk
index 5fd7d53..a94f604 100644
--- a/webkit/common/gpu/webkit_gpu.target.darwin-mips.mk
+++ b/webkit/common/gpu/webkit_gpu.target.darwin-mips.mk
@@ -128,6 +128,7 @@
 	$(LOCAL_PATH)/third_party/skia/include/ports \
 	$(LOCAL_PATH)/third_party/skia/include/utils \
 	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
@@ -242,6 +243,7 @@
 	$(LOCAL_PATH)/third_party/skia/include/ports \
 	$(LOCAL_PATH)/third_party/skia/include/utils \
 	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
diff --git a/webkit/common/gpu/webkit_gpu.target.darwin-x86.mk b/webkit/common/gpu/webkit_gpu.target.darwin-x86.mk
index 6510543..f85b01a 100644
--- a/webkit/common/gpu/webkit_gpu.target.darwin-x86.mk
+++ b/webkit/common/gpu/webkit_gpu.target.darwin-x86.mk
@@ -129,6 +129,7 @@
 	$(LOCAL_PATH)/third_party/skia/include/ports \
 	$(LOCAL_PATH)/third_party/skia/include/utils \
 	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
@@ -245,6 +246,7 @@
 	$(LOCAL_PATH)/third_party/skia/include/ports \
 	$(LOCAL_PATH)/third_party/skia/include/utils \
 	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
diff --git a/webkit/common/gpu/webkit_gpu.target.linux-arm.mk b/webkit/common/gpu/webkit_gpu.target.linux-arm.mk
index 4644a25..f408ce4 100644
--- a/webkit/common/gpu/webkit_gpu.target.linux-arm.mk
+++ b/webkit/common/gpu/webkit_gpu.target.linux-arm.mk
@@ -128,6 +128,7 @@
 	$(LOCAL_PATH)/third_party/skia/include/ports \
 	$(LOCAL_PATH)/third_party/skia/include/utils \
 	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
@@ -242,6 +243,7 @@
 	$(LOCAL_PATH)/third_party/skia/include/ports \
 	$(LOCAL_PATH)/third_party/skia/include/utils \
 	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
diff --git a/webkit/common/gpu/webkit_gpu.target.linux-mips.mk b/webkit/common/gpu/webkit_gpu.target.linux-mips.mk
index 5fd7d53..a94f604 100644
--- a/webkit/common/gpu/webkit_gpu.target.linux-mips.mk
+++ b/webkit/common/gpu/webkit_gpu.target.linux-mips.mk
@@ -128,6 +128,7 @@
 	$(LOCAL_PATH)/third_party/skia/include/ports \
 	$(LOCAL_PATH)/third_party/skia/include/utils \
 	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
@@ -242,6 +243,7 @@
 	$(LOCAL_PATH)/third_party/skia/include/ports \
 	$(LOCAL_PATH)/third_party/skia/include/utils \
 	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
diff --git a/webkit/common/gpu/webkit_gpu.target.linux-x86.mk b/webkit/common/gpu/webkit_gpu.target.linux-x86.mk
index 6510543..f85b01a 100644
--- a/webkit/common/gpu/webkit_gpu.target.linux-x86.mk
+++ b/webkit/common/gpu/webkit_gpu.target.linux-x86.mk
@@ -129,6 +129,7 @@
 	$(LOCAL_PATH)/third_party/skia/include/ports \
 	$(LOCAL_PATH)/third_party/skia/include/utils \
 	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
@@ -245,6 +246,7 @@
 	$(LOCAL_PATH)/third_party/skia/include/ports \
 	$(LOCAL_PATH)/third_party/skia/include/utils \
 	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/v8/include \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
 	$(PWD)/external/icu4c/common \
diff --git a/webkit/glue/webkit_glue.gypi b/webkit/glue/webkit_glue.gypi
index 2c88b76..5867fa2 100644
--- a/webkit/glue/webkit_glue.gypi
+++ b/webkit/glue/webkit_glue.gypi
@@ -64,6 +64,7 @@
         '../child/webkitplatformsupport_child_impl.h',
         '../child/webkitplatformsupport_impl.cc',
         '../child/webkitplatformsupport_impl.h',
+        '../child/websocketstreamhandle_bridge.h',
         '../child/websocketstreamhandle_delegate.h',
         '../child/websocketstreamhandle_impl.cc',
         '../child/websocketstreamhandle_impl.h',
@@ -162,7 +163,6 @@
         'webkit_glue.cc',
         'webkit_glue.h',
         'webkit_glue_export.h',
-        'websocketstreamhandle_bridge.h',
       ],
       # When glue is a dependency, it needs to be a hard dependency.
       # Dependents may rely on files generated by this target or one of its
diff --git a/webkit/support/webkit_support.cc b/webkit/support/webkit_support.cc
index bdb99f9..c584638 100644
--- a/webkit/support/webkit_support.cc
+++ b/webkit/support/webkit_support.cc
@@ -10,7 +10,7 @@
 #include "base/logging.h"
 #include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
 #include "base/run_loop.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/WebKit/public/web/WebCache.h"
diff --git a/webkit/support/weburl_loader_mock_factory.h b/webkit/support/weburl_loader_mock_factory.h
index 97ea5c8..78abd96 100644
--- a/webkit/support/weburl_loader_mock_factory.h
+++ b/webkit/support/weburl_loader_mock_factory.h
@@ -95,11 +95,11 @@
   typedef std::map<WebURLLoaderMock*, WebKit::WebURLRequest> LoaderToRequestMap;
   LoaderToRequestMap pending_loaders_;
 
-  typedef std::map<WebKit::WebURL, WebKit::WebURLError> URLToErrorMap;
+  typedef std::map<GURL, WebKit::WebURLError> URLToErrorMap;
   URLToErrorMap url_to_error_info_;
 
   // Table of the registered URLs and the responses that they should receive.
-  typedef std::map<WebKit::WebURL, ResponseInfo> URLToResponseMap;
+  typedef std::map<GURL, ResponseInfo> URLToResponseMap;
   URLToResponseMap url_to_reponse_info_;
 
   WebKit::WebURLRequest last_handled_asynchronous_request_;