| 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 |