OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "android_webview/renderer/aw_render_view_ext.h" | 5 #include "android_webview/renderer/aw_render_view_ext.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "android_webview/common/aw_hit_test_data.h" | 9 #include "android_webview/common/aw_hit_test_data.h" |
10 #include "android_webview/common/render_view_messages.h" | 10 #include "android_webview/common/render_view_messages.h" |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 data->type = AwHitTestData::EDIT_TEXT_TYPE; | 122 data->type = AwHitTestData::EDIT_TEXT_TYPE; |
123 DCHECK(data->extra_data_for_type.length() == 0); | 123 DCHECK(data->extra_data_for_type.length() == 0); |
124 } | 124 } |
125 } | 125 } |
126 | 126 |
127 } // namespace | 127 } // namespace |
128 | 128 |
129 AwRenderViewExt::AwRenderViewExt(content::RenderView* render_view) | 129 AwRenderViewExt::AwRenderViewExt(content::RenderView* render_view) |
130 : content::RenderViewObserver(render_view) { | 130 : content::RenderViewObserver(render_view) { |
131 render_view->GetWebView()->setPermissionClient(this); | 131 render_view->GetWebView()->setPermissionClient(this); |
132 // TODO(leandrogracia): remove when SW rendering uses Ubercompositor. | |
133 // Until then we need the callback enabled for SW mode invalidation. | |
134 // http://crbug.com/170086. | |
135 capture_picture_enabled_ = true; | |
136 } | 132 } |
137 | 133 |
138 AwRenderViewExt::~AwRenderViewExt() { | 134 AwRenderViewExt::~AwRenderViewExt() { |
139 RendererPictureMap::GetInstance()->ClearRendererPicture(routing_id()); | |
140 } | 135 } |
141 | 136 |
142 // static | 137 // static |
143 void AwRenderViewExt::RenderViewCreated(content::RenderView* render_view) { | 138 void AwRenderViewExt::RenderViewCreated(content::RenderView* render_view) { |
144 new AwRenderViewExt(render_view); // |render_view| takes ownership. | 139 new AwRenderViewExt(render_view); // |render_view| takes ownership. |
145 } | 140 } |
146 | 141 |
147 bool AwRenderViewExt::OnMessageReceived(const IPC::Message& message) { | 142 bool AwRenderViewExt::OnMessageReceived(const IPC::Message& message) { |
148 bool handled = true; | 143 bool handled = true; |
149 IPC_BEGIN_MESSAGE_MAP(AwRenderViewExt, message) | 144 IPC_BEGIN_MESSAGE_MAP(AwRenderViewExt, message) |
150 IPC_MESSAGE_HANDLER(AwViewMsg_DocumentHasImages, OnDocumentHasImagesRequest) | 145 IPC_MESSAGE_HANDLER(AwViewMsg_DocumentHasImages, OnDocumentHasImagesRequest) |
151 IPC_MESSAGE_HANDLER(AwViewMsg_DoHitTest, OnDoHitTest) | 146 IPC_MESSAGE_HANDLER(AwViewMsg_DoHitTest, OnDoHitTest) |
152 IPC_MESSAGE_HANDLER(AwViewMsg_EnableCapturePictureCallback, | |
153 OnEnableCapturePictureCallback) | |
154 IPC_MESSAGE_HANDLER(AwViewMsg_CapturePictureSync, | |
155 OnCapturePictureSync) | |
156 IPC_MESSAGE_HANDLER(AwViewMsg_SetTextZoomLevel, OnSetTextZoomLevel) | 147 IPC_MESSAGE_HANDLER(AwViewMsg_SetTextZoomLevel, OnSetTextZoomLevel) |
157 IPC_MESSAGE_UNHANDLED(handled = false) | 148 IPC_MESSAGE_UNHANDLED(handled = false) |
158 IPC_END_MESSAGE_MAP() | 149 IPC_END_MESSAGE_MAP() |
159 return handled; | 150 return handled; |
160 } | 151 } |
161 | 152 |
162 void AwRenderViewExt::OnDocumentHasImagesRequest(int id) { | 153 void AwRenderViewExt::OnDocumentHasImagesRequest(int id) { |
163 bool hasImages = false; | 154 bool hasImages = false; |
164 if (render_view()) { | 155 if (render_view()) { |
165 WebKit::WebView* webview = render_view()->GetWebView(); | 156 WebKit::WebView* webview = render_view()->GetWebView(); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 GetAbsoluteSrcUrl(child_img.toConst<WebKit::WebElement>()); | 211 GetAbsoluteSrcUrl(child_img.toConst<WebKit::WebElement>()); |
221 } | 212 } |
222 | 213 |
223 PopulateHitTestData(absolute_link_url, | 214 PopulateHitTestData(absolute_link_url, |
224 absolute_image_url, | 215 absolute_image_url, |
225 render_view()->IsEditableNode(node), | 216 render_view()->IsEditableNode(node), |
226 &data); | 217 &data); |
227 Send(new AwViewHostMsg_UpdateHitTestData(routing_id(), data)); | 218 Send(new AwViewHostMsg_UpdateHitTestData(routing_id(), data)); |
228 } | 219 } |
229 | 220 |
230 void AwRenderViewExt::DidCommitCompositorFrame() { | |
231 if (!capture_picture_enabled_) | |
232 return; | |
233 | |
234 skia::RefPtr<SkPicture> picture = render_view()->CapturePicture(); | |
235 RendererPictureMap::GetInstance()->SetRendererPicture(routing_id(), picture); | |
236 Send(new AwViewHostMsg_PictureUpdated(routing_id())); | |
237 } | |
238 | |
239 void AwRenderViewExt::OnDoHitTest(int view_x, int view_y) { | 221 void AwRenderViewExt::OnDoHitTest(int view_x, int view_y) { |
240 if (!render_view() || !render_view()->GetWebView()) | 222 if (!render_view() || !render_view()->GetWebView()) |
241 return; | 223 return; |
242 | 224 |
243 const WebKit::WebHitTestResult result = | 225 const WebKit::WebHitTestResult result = |
244 render_view()->GetWebView()->hitTestResultAt( | 226 render_view()->GetWebView()->hitTestResultAt( |
245 WebKit::WebPoint(view_x, view_y)); | 227 WebKit::WebPoint(view_x, view_y)); |
246 AwHitTestData data; | 228 AwHitTestData data; |
247 | 229 |
248 if (!result.urlElement().isNull()) { | 230 if (!result.urlElement().isNull()) { |
249 data.anchor_text = result.urlElement().innerText(); | 231 data.anchor_text = result.urlElement().innerText(); |
250 data.href = GetHref(result.urlElement()); | 232 data.href = GetHref(result.urlElement()); |
251 } | 233 } |
252 | 234 |
253 PopulateHitTestData(result.absoluteLinkURL(), | 235 PopulateHitTestData(result.absoluteLinkURL(), |
254 result.absoluteImageURL(), | 236 result.absoluteImageURL(), |
255 result.isContentEditable(), | 237 result.isContentEditable(), |
256 &data); | 238 &data); |
257 Send(new AwViewHostMsg_UpdateHitTestData(routing_id(), data)); | 239 Send(new AwViewHostMsg_UpdateHitTestData(routing_id(), data)); |
258 } | 240 } |
259 | 241 |
260 void AwRenderViewExt::OnEnableCapturePictureCallback(bool enable) { | |
261 capture_picture_enabled_ = enable; | |
262 } | |
263 | |
264 void AwRenderViewExt::OnCapturePictureSync() { | |
265 RendererPictureMap::GetInstance()->SetRendererPicture( | |
266 routing_id(), render_view()->CapturePicture()); | |
267 } | |
268 | |
269 void AwRenderViewExt::OnSetTextZoomLevel(double zoom_level) { | 242 void AwRenderViewExt::OnSetTextZoomLevel(double zoom_level) { |
270 if (!render_view() || !render_view()->GetWebView()) | 243 if (!render_view() || !render_view()->GetWebView()) |
271 return; | 244 return; |
272 // Hide selection and autofill popups. | 245 // Hide selection and autofill popups. |
273 render_view()->GetWebView()->hidePopups(); | 246 render_view()->GetWebView()->hidePopups(); |
274 render_view()->GetWebView()->setZoomLevel(true, zoom_level); | 247 render_view()->GetWebView()->setZoomLevel(true, zoom_level); |
275 } | 248 } |
276 | 249 |
277 } // namespace android_webview | 250 } // namespace android_webview |
OLD | NEW |