summaryrefslogtreecommitdiffstats
path: root/android_webview/renderer
diff options
context:
space:
mode:
authorleandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-15 15:47:22 +0000
committerleandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-15 15:47:22 +0000
commitee01711d4e8721a6f1df0179475eac506331a13f (patch)
tree42cc3cbe94d18d098f6cc6e896d152f3135317df /android_webview/renderer
parent1597b71e45ad1438d3b399d3297c8515b3015e56 (diff)
downloadchromium_src-ee01711d4e8721a6f1df0179475eac506331a13f.zip
chromium_src-ee01711d4e8721a6f1df0179475eac506331a13f.tar.gz
chromium_src-ee01711d4e8721a6f1df0179475eac506331a13f.tar.bz2
[Android WebView] Migrate the rendering code to a separate set of classes.
It takes from https://codereview.chromium.org/11823027/ and assumes SW rendering and Capture Picture to be ready and enabled. Most changes just move around code. The major structural changes are: - Introduce a browser-layer view renderer interface and move the code to its implementation. - Take out the rendering-related IPC to its own separate set of host/renderer classes. - Change the way the view hierarchy and the compositor are initialized. Now they are created and set on BrowserViewRendererImpl construction. - Content is now provided via a ContentViewCore object when initialized, updating the layer to use and the WebContents to observe. - Remove/update the DEPS and gyp changes introduced to support rendering in the native layer. BUG=167913,167908,161409 NOTRY=true Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=182710 Review URL: https://chromiumcodereview.appspot.com/12041009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182717 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview/renderer')
-rw-r--r--android_webview/renderer/aw_content_renderer_client.cc2
-rw-r--r--android_webview/renderer/aw_render_view_ext.cc27
-rw-r--r--android_webview/renderer/aw_render_view_ext.h9
-rw-r--r--android_webview/renderer/view_renderer.cc61
-rw-r--r--android_webview/renderer/view_renderer.h39
5 files changed, 102 insertions, 36 deletions
diff --git a/android_webview/renderer/aw_content_renderer_client.cc b/android_webview/renderer/aw_content_renderer_client.cc
index 9a8b21c..a1995a3 100644
--- a/android_webview/renderer/aw_content_renderer_client.cc
+++ b/android_webview/renderer/aw_content_renderer_client.cc
@@ -7,6 +7,7 @@
#include "android_webview/common/aw_resource.h"
#include "android_webview/common/url_constants.h"
#include "android_webview/renderer/aw_render_view_ext.h"
+#include "android_webview/renderer/view_renderer.h"
#include "base/utf_string_conversions.h"
#include "components/visitedlink/renderer/visitedlink_slave.h"
#include "content/public/renderer/render_thread.h"
@@ -42,6 +43,7 @@ void AwContentRendererClient::RenderThreadStarted() {
void AwContentRendererClient::RenderViewCreated(
content::RenderView* render_view) {
AwRenderViewExt::RenderViewCreated(render_view);
+ ViewRenderer::RenderViewCreated(render_view);
}
std::string AwContentRendererClient::GetDefaultEncoding() {
diff --git a/android_webview/renderer/aw_render_view_ext.cc b/android_webview/renderer/aw_render_view_ext.cc
index 462553e39..c895ed47 100644
--- a/android_webview/renderer/aw_render_view_ext.cc
+++ b/android_webview/renderer/aw_render_view_ext.cc
@@ -129,14 +129,9 @@ void PopulateHitTestData(const GURL& absolute_link_url,
AwRenderViewExt::AwRenderViewExt(content::RenderView* render_view)
: content::RenderViewObserver(render_view) {
render_view->GetWebView()->setPermissionClient(this);
- // TODO(leandrogracia): remove when SW rendering uses Ubercompositor.
- // Until then we need the callback enabled for SW mode invalidation.
- // http://crbug.com/170086.
- capture_picture_enabled_ = true;
}
AwRenderViewExt::~AwRenderViewExt() {
- RendererPictureMap::GetInstance()->ClearRendererPicture(routing_id());
}
// static
@@ -149,10 +144,6 @@ bool AwRenderViewExt::OnMessageReceived(const IPC::Message& message) {
IPC_BEGIN_MESSAGE_MAP(AwRenderViewExt, message)
IPC_MESSAGE_HANDLER(AwViewMsg_DocumentHasImages, OnDocumentHasImagesRequest)
IPC_MESSAGE_HANDLER(AwViewMsg_DoHitTest, OnDoHitTest)
- IPC_MESSAGE_HANDLER(AwViewMsg_EnableCapturePictureCallback,
- OnEnableCapturePictureCallback)
- IPC_MESSAGE_HANDLER(AwViewMsg_CapturePictureSync,
- OnCapturePictureSync)
IPC_MESSAGE_HANDLER(AwViewMsg_SetTextZoomLevel, OnSetTextZoomLevel)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -227,15 +218,6 @@ void AwRenderViewExt::FocusedNodeChanged(const WebKit::WebNode& node) {
Send(new AwViewHostMsg_UpdateHitTestData(routing_id(), data));
}
-void AwRenderViewExt::DidCommitCompositorFrame() {
- if (!capture_picture_enabled_)
- return;
-
- skia::RefPtr<SkPicture> picture = render_view()->CapturePicture();
- RendererPictureMap::GetInstance()->SetRendererPicture(routing_id(), picture);
- Send(new AwViewHostMsg_PictureUpdated(routing_id()));
-}
-
void AwRenderViewExt::OnDoHitTest(int view_x, int view_y) {
if (!render_view() || !render_view()->GetWebView())
return;
@@ -257,15 +239,6 @@ void AwRenderViewExt::OnDoHitTest(int view_x, int view_y) {
Send(new AwViewHostMsg_UpdateHitTestData(routing_id(), data));
}
-void AwRenderViewExt::OnEnableCapturePictureCallback(bool enable) {
- capture_picture_enabled_ = enable;
-}
-
-void AwRenderViewExt::OnCapturePictureSync() {
- RendererPictureMap::GetInstance()->SetRendererPicture(
- routing_id(), render_view()->CapturePicture());
-}
-
void AwRenderViewExt::OnSetTextZoomLevel(double zoom_level) {
if (!render_view() || !render_view()->GetWebView())
return;
diff --git a/android_webview/renderer/aw_render_view_ext.h b/android_webview/renderer/aw_render_view_ext.h
index 49cee36..8cea6e4 100644
--- a/android_webview/renderer/aw_render_view_ext.h
+++ b/android_webview/renderer/aw_render_view_ext.h
@@ -7,7 +7,6 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
-#include "base/memory/weak_ptr.h"
#include "content/public/renderer/render_view_observer.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPermissionClient.h"
@@ -28,9 +27,6 @@ class AwRenderViewExt : public content::RenderViewObserver,
public:
static void RenderViewCreated(content::RenderView* render_view);
- // Required to be public by IPC_MESSAGE_HANDLER for sync messages.
- using content::RenderViewObserver::Send;
-
private:
AwRenderViewExt(content::RenderView* render_view);
virtual ~AwRenderViewExt();
@@ -40,16 +36,11 @@ class AwRenderViewExt : public content::RenderViewObserver,
virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame,
bool is_new_navigation) OVERRIDE;
virtual void FocusedNodeChanged(const WebKit::WebNode& node) OVERRIDE;
- virtual void DidCommitCompositorFrame() OVERRIDE;
void OnDocumentHasImagesRequest(int id);
void OnDoHitTest(int view_x, int view_y);
- void OnEnableCapturePictureCallback(bool enable);
-
- void OnCapturePictureSync();
-
void OnSetTextZoomLevel(double zoom_level);
// WebKit::WebPermissionClient implementation.
diff --git a/android_webview/renderer/view_renderer.cc b/android_webview/renderer/view_renderer.cc
new file mode 100644
index 0000000..dd0d7e7
--- /dev/null
+++ b/android_webview/renderer/view_renderer.cc
@@ -0,0 +1,61 @@
+// 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 "android_webview/renderer/view_renderer.h"
+
+#include "android_webview/common/render_view_messages.h"
+#include "android_webview/common/renderer_picture_map.h"
+#include "content/public/renderer/render_view.h"
+#include "skia/ext/refptr.h"
+
+namespace android_webview {
+
+// static
+void ViewRenderer::RenderViewCreated(content::RenderView* render_view) {
+ new ViewRenderer(render_view); // |render_view| takes ownership.
+}
+
+ViewRenderer::ViewRenderer(content::RenderView* render_view)
+ : content::RenderViewObserver(render_view),
+ // TODO(leandrogracia): default to false when SW mode uses Ubercompositor.
+ // Until then we need picture updates enabled for SW mode invalidation.
+ // http://crbug.com/170086.
+ capture_picture_enabled_(true) {
+}
+
+ViewRenderer::~ViewRenderer() {
+ RendererPictureMap::GetInstance()->ClearRendererPicture(routing_id());
+}
+
+bool ViewRenderer::OnMessageReceived(const IPC::Message& message) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(ViewRenderer, message)
+ IPC_MESSAGE_HANDLER(AwViewMsg_EnableCapturePictureCallback,
+ OnEnableCapturePictureCallback)
+ IPC_MESSAGE_HANDLER(AwViewMsg_CapturePictureSync,
+ OnCapturePictureSync)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+void ViewRenderer::DidCommitCompositorFrame() {
+ if (!capture_picture_enabled_)
+ return;
+
+ skia::RefPtr<SkPicture> picture = render_view()->CapturePicture();
+ RendererPictureMap::GetInstance()->SetRendererPicture(routing_id(), picture);
+ Send(new AwViewHostMsg_PictureUpdated(routing_id()));
+}
+
+void ViewRenderer::OnEnableCapturePictureCallback(bool enable) {
+ capture_picture_enabled_ = enable;
+}
+
+void ViewRenderer::OnCapturePictureSync() {
+ RendererPictureMap::GetInstance()->SetRendererPicture(
+ routing_id(), render_view()->CapturePicture());
+}
+
+} // namespace android_webview
diff --git a/android_webview/renderer/view_renderer.h b/android_webview/renderer/view_renderer.h
new file mode 100644
index 0000000..8c4ba8f
--- /dev/null
+++ b/android_webview/renderer/view_renderer.h
@@ -0,0 +1,39 @@
+// 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 ANDROID_WEBVIEW_RENDERER_VIEW_RENDERER_H_
+#define ANDROID_WEBVIEW_RENDERER_VIEW_RENDERER_H_
+
+#include "content/public/renderer/render_view_observer.h"
+
+namespace android_webview {
+
+// Render-process side of ViewRendererHost.
+// Implements required interaction with content::RenderView.
+class ViewRenderer : public content::RenderViewObserver {
+ public:
+ static void RenderViewCreated(content::RenderView* render_view);
+
+ // Required to be public by IPC_MESSAGE_HANDLER.
+ using content::RenderViewObserver::Send;
+
+ private:
+ ViewRenderer(content::RenderView* render_view);
+ virtual ~ViewRenderer();
+
+ // content::RenderViewObserver implementation.
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
+ virtual void DidCommitCompositorFrame() OVERRIDE;
+
+ void OnEnableCapturePictureCallback(bool enable);
+ void OnCapturePictureSync();
+
+ bool capture_picture_enabled_;
+
+ DISALLOW_COPY_AND_ASSIGN(ViewRenderer);
+};
+
+} // namespace android_webview
+
+#endif // ANDROID_WEBVIEW_RENDERER_VIEW_RENDERER_H_