Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(275)

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 143803004: android: Migrate old content readback to use async readback (and delegated renderer) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed aelias@ comments Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "content/browser/renderer_host/render_widget_host_view_android.h" 5 #include "content/browser/renderer_host/render_widget_host_view_android.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 return latency_info; 132 return latency_info;
133 } 133 }
134 134
135 } // anonymous namespace 135 } // anonymous namespace
136 136
137 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( 137 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
138 RenderWidgetHostImpl* widget_host, 138 RenderWidgetHostImpl* widget_host,
139 ContentViewCoreImpl* content_view_core) 139 ContentViewCoreImpl* content_view_core)
140 : host_(widget_host), 140 : host_(widget_host),
141 needs_begin_frame_(false), 141 needs_begin_frame_(false),
142 are_layers_attached_(!widget_host->is_hidden()), 142 is_showing_(!widget_host->is_hidden()),
143 content_view_core_(NULL), 143 content_view_core_(NULL),
144 ime_adapter_android_(this), 144 ime_adapter_android_(this),
145 cached_background_color_(SK_ColorWHITE), 145 cached_background_color_(SK_ColorWHITE),
146 texture_id_in_layer_(0), 146 texture_id_in_layer_(0),
147 last_output_surface_id_(kUndefinedOutputSurfaceId), 147 last_output_surface_id_(kUndefinedOutputSurfaceId),
148 weak_ptr_factory_(this), 148 weak_ptr_factory_(this),
149 overscroll_effect_enabled_( 149 overscroll_effect_enabled_(
150 !CommandLine::ForCurrentProcess()-> 150 !CommandLine::ForCurrentProcess()->
151 HasSwitch(switches::kDisableOverscrollEdgeEffect)), 151 HasSwitch(switches::kDisableOverscrollEdgeEffect)),
152 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)), 152 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)),
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 // Ignore the given size as only the Java code has the power to 252 // Ignore the given size as only the Java code has the power to
253 // resize the view on Android. 253 // resize the view on Android.
254 default_size_ = size; 254 default_size_ = size;
255 WasResized(); 255 WasResized();
256 } 256 }
257 257
258 void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) { 258 void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) {
259 SetSize(rect.size()); 259 SetSize(rect.size());
260 } 260 }
261 261
262 blink::WebGLId RenderWidgetHostViewAndroid::GetScaledContentTexture( 262 void RenderWidgetHostViewAndroid::GetScaledContentBitmap(
263 float scale, 263 float scale,
264 gfx::Size* out_size) { 264 gfx::Size* out_size,
265 gfx::Size size(gfx::ToCeiledSize( 265 const base::Callback<void(bool, const SkBitmap&)>& result_callback) {
266 gfx::ScaleSize(texture_size_in_layer_, scale))); 266 gfx::Size bounds = layer_->bounds();
267 267 gfx::Rect src_subrect(bounds);
268 if (!CompositorImpl::IsInitialized() || 268 const gfx::Display& display =
269 texture_id_in_layer_ == 0 || 269 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
270 texture_size_in_layer_.IsEmpty() || 270 float device_scale_factor = display.device_scale_factor();
271 size.IsEmpty()) { 271 DCHECK_GT(device_scale_factor, 0);
272 if (out_size) 272 gfx::Size dst_size(
273 out_size->SetSize(0, 0); 273 gfx::ToCeiledSize(gfx::ScaleSize(bounds, scale / device_scale_factor)));
274 274 *out_size = dst_size;
275 return 0; 275 CopyFromCompositingSurface(
276 } 276 src_subrect, dst_size, result_callback, SkBitmap::kARGB_8888_Config);
277
278 if (out_size)
279 *out_size = size;
280
281 GLHelper* helper = ImageTransportFactoryAndroid::GetInstance()->GetGLHelper();
282 return helper->CopyAndScaleTexture(texture_id_in_layer_,
283 texture_size_in_layer_,
284 size,
285 true,
286 GLHelper::SCALER_QUALITY_FAST);
287 } 277 }
288 278
289 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) { 279 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) {
290 if (!CompositorImpl::IsInitialized() || 280 if (!CompositorImpl::IsInitialized() ||
291 texture_id_in_layer_ == 0 || 281 texture_id_in_layer_ == 0 ||
292 texture_size_in_layer_.IsEmpty()) 282 texture_size_in_layer_.IsEmpty())
293 return false; 283 return false;
294 284
295 gfx::JavaBitmap bitmap(jbitmap); 285 gfx::JavaBitmap bitmap(jbitmap);
296 286
(...skipping 19 matching lines...) Expand all
316 gpu::gles2::GLES2Interface* gl = 306 gpu::gles2::GLES2Interface* gl =
317 ImageTransportFactoryAndroid::GetInstance()->GetContextGL(); 307 ImageTransportFactoryAndroid::GetInstance()->GetContextGL();
318 gl->DeleteTextures(1, &texture); 308 gl->DeleteTextures(1, &texture);
319 309
320 return true; 310 return true;
321 } 311 }
322 312
323 bool RenderWidgetHostViewAndroid::HasValidFrame() const { 313 bool RenderWidgetHostViewAndroid::HasValidFrame() const {
324 if (!content_view_core_) 314 if (!content_view_core_)
325 return false; 315 return false;
316 if (!layer_)
317 return false;
318
326 if (texture_size_in_layer_.IsEmpty()) 319 if (texture_size_in_layer_.IsEmpty())
327 return false; 320 return false;
328 321
329 if (UsingDelegatedRenderer()) { 322 if (UsingDelegatedRenderer()) {
330 if (!delegated_renderer_layer_.get()) 323 if (!delegated_renderer_layer_.get())
331 return false; 324 return false;
332 } else { 325 } else {
333 if (texture_id_in_layer_ == 0) 326 if (texture_id_in_layer_ == 0)
334 return false; 327 return false;
335 } 328 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 return false; // ContentViewCore not created yet. 373 return false; // ContentViewCore not created yet.
381 374
382 return content_view_core_->HasFocus(); 375 return content_view_core_->HasFocus();
383 } 376 }
384 377
385 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { 378 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const {
386 return HasValidFrame(); 379 return HasValidFrame();
387 } 380 }
388 381
389 void RenderWidgetHostViewAndroid::Show() { 382 void RenderWidgetHostViewAndroid::Show() {
390 if (are_layers_attached_) 383 if (is_showing_)
391 return; 384 return;
392 385
393 are_layers_attached_ = true; 386 is_showing_ = true;
394 AttachLayers(); 387 if (layer_)
388 layer_->SetHideLayerAndSubtree(false);
395 389
396 frame_evictor_->SetVisible(true); 390 frame_evictor_->SetVisible(true);
397 WasShown(); 391 WasShown();
398 } 392 }
399 393
400 void RenderWidgetHostViewAndroid::Hide() { 394 void RenderWidgetHostViewAndroid::Hide() {
401 if (!are_layers_attached_) 395 if (!is_showing_)
402 return; 396 return;
403 397
404 are_layers_attached_ = false; 398 is_showing_ = false;
405 RemoveLayers(); 399 if (layer_)
400 layer_->SetHideLayerAndSubtree(true);
406 401
407 frame_evictor_->SetVisible(false); 402 frame_evictor_->SetVisible(false);
408 WasHidden(); 403 WasHidden();
409 } 404 }
410 405
411 bool RenderWidgetHostViewAndroid::IsShowing() { 406 bool RenderWidgetHostViewAndroid::IsShowing() {
412 // ContentViewCoreImpl represents the native side of the Java 407 // ContentViewCoreImpl represents the native side of the Java
413 // ContentViewCore. It being NULL means that it is not attached 408 // ContentViewCore. It being NULL means that it is not attached
414 // to the View system yet, so we treat this RWHVA as hidden. 409 // to the View system yet, so we treat this RWHVA as hidden.
415 return are_layers_attached_ && content_view_core_; 410 return is_showing_ && content_view_core_;
416 } 411 }
417 412
418 void RenderWidgetHostViewAndroid::LockResources() { 413 void RenderWidgetHostViewAndroid::LockResources() {
419 DCHECK(HasValidFrame()); 414 DCHECK(HasValidFrame());
420 DCHECK(host_); 415 DCHECK(host_);
421 DCHECK(!host_->is_hidden()); 416 DCHECK(!host_->is_hidden());
422 frame_evictor_->LockFrame(); 417 frame_evictor_->LockFrame();
423 } 418 }
424 419
425 void RenderWidgetHostViewAndroid::UnlockResources() { 420 void RenderWidgetHostViewAndroid::UnlockResources() {
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 output_surface_id, 727 output_surface_id,
733 host_->GetProcess()->GetID(), 728 host_->GetProcess()->GetID(),
734 ack); 729 ack);
735 } 730 }
736 731
737 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { 732 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() {
738 // TODO(danakj): If no ack is pending, collect and send resources now. 733 // TODO(danakj): If no ack is pending, collect and send resources now.
739 } 734 }
740 735
741 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { 736 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() {
742 if (are_layers_attached_) 737 RemoveLayers();
743 RemoveLayers();
744 frame_provider_ = NULL; 738 frame_provider_ = NULL;
745 delegated_renderer_layer_ = NULL; 739 delegated_renderer_layer_ = NULL;
746 layer_ = NULL; 740 layer_ = NULL;
747 } 741 }
748 742
749 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( 743 void RenderWidgetHostViewAndroid::SwapDelegatedFrame(
750 uint32 output_surface_id, 744 uint32 output_surface_id,
751 scoped_ptr<cc::DelegatedFrameData> frame_data) { 745 scoped_ptr<cc::DelegatedFrameData> frame_data) {
752 bool has_content = !texture_size_in_layer_.IsEmpty(); 746 bool has_content = !texture_size_in_layer_.IsEmpty();
753 747
(...skipping 15 matching lines...) Expand all
769 763
770 if (!has_content) { 764 if (!has_content) {
771 DestroyDelegatedContent(); 765 DestroyDelegatedContent();
772 } else { 766 } else {
773 if (!resource_collection_.get()) { 767 if (!resource_collection_.get()) {
774 resource_collection_ = new cc::DelegatedFrameResourceCollection; 768 resource_collection_ = new cc::DelegatedFrameResourceCollection;
775 resource_collection_->SetClient(this); 769 resource_collection_->SetClient(this);
776 } 770 }
777 if (!frame_provider_ || 771 if (!frame_provider_ ||
778 texture_size_in_layer_ != frame_provider_->frame_size()) { 772 texture_size_in_layer_ != frame_provider_->frame_size()) {
779 if (are_layers_attached_) 773 RemoveLayers();
780 RemoveLayers();
781 frame_provider_ = new cc::DelegatedFrameProvider( 774 frame_provider_ = new cc::DelegatedFrameProvider(
782 resource_collection_.get(), frame_data.Pass()); 775 resource_collection_.get(), frame_data.Pass());
783 delegated_renderer_layer_ = 776 delegated_renderer_layer_ =
784 cc::DelegatedRendererLayer::Create(frame_provider_); 777 cc::DelegatedRendererLayer::Create(frame_provider_);
785 layer_ = delegated_renderer_layer_; 778 layer_ = delegated_renderer_layer_;
786 if (are_layers_attached_) 779 AttachLayers();
787 AttachLayers();
788 } else { 780 } else {
789 frame_provider_->SetFrameData(frame_data.Pass()); 781 frame_provider_->SetFrameData(frame_data.Pass());
790 } 782 }
791 } 783 }
792 784
793 if (delegated_renderer_layer_.get()) { 785 if (delegated_renderer_layer_.get()) {
794 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); 786 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_);
795 delegated_renderer_layer_->SetIsDrawable(true); 787 delegated_renderer_layer_->SetIsDrawable(true);
796 delegated_renderer_layer_->SetContentsOpaque(true); 788 delegated_renderer_layer_->SetContentsOpaque(true);
797 delegated_renderer_layer_->SetBounds(content_size_in_layer_); 789 delegated_renderer_layer_->SetBounds(content_size_in_layer_);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 828
837 DCHECK(frame->delegated_frame_data); 829 DCHECK(frame->delegated_frame_data);
838 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); 830 DCHECK(!frame->delegated_frame_data->render_pass_list.empty());
839 831
840 cc::RenderPass* root_pass = 832 cc::RenderPass* root_pass =
841 frame->delegated_frame_data->render_pass_list.back(); 833 frame->delegated_frame_data->render_pass_list.back();
842 texture_size_in_layer_ = root_pass->output_rect.size(); 834 texture_size_in_layer_ = root_pass->output_rect.size();
843 ComputeContentsSize(frame->metadata); 835 ComputeContentsSize(frame->metadata);
844 836
845 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); 837 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass());
838 frame_evictor_->SwappedFrame(!host_->is_hidden());
846 return; 839 return;
847 } 840 }
848 841
849 DCHECK(!UsingDelegatedRenderer()); 842 DCHECK(!UsingDelegatedRenderer());
850 843
851 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) 844 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero())
852 return; 845 return;
853 846
854 if (output_surface_id != last_output_surface_id_) { 847 if (output_surface_id != last_output_surface_id_) {
855 current_mailbox_ = gpu::Mailbox(); 848 current_mailbox_ = gpu::Mailbox();
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 981
989 void RenderWidgetHostViewAndroid::AttachLayers() { 982 void RenderWidgetHostViewAndroid::AttachLayers() {
990 if (!content_view_core_) 983 if (!content_view_core_)
991 return; 984 return;
992 if (!layer_.get()) 985 if (!layer_.get())
993 return; 986 return;
994 987
995 content_view_core_->AttachLayer(layer_); 988 content_view_core_->AttachLayer(layer_);
996 if (overscroll_effect_enabled_) 989 if (overscroll_effect_enabled_)
997 overscroll_effect_->Enable(); 990 overscroll_effect_->Enable();
991 layer_->SetHideLayerAndSubtree(!is_showing_);
998 } 992 }
999 993
1000 void RenderWidgetHostViewAndroid::RemoveLayers() { 994 void RenderWidgetHostViewAndroid::RemoveLayers() {
1001 if (!content_view_core_) 995 if (!content_view_core_)
1002 return; 996 return;
1003 if (!layer_.get()) 997 if (!layer_.get())
1004 return; 998 return;
1005 999
1006 content_view_core_->RemoveLayer(layer_); 1000 content_view_core_->RemoveLayer(layer_);
1007 overscroll_effect_->Disable(); 1001 overscroll_effect_->Disable();
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
1308 (offset.y() + clipped_content.height()) * uv_scale.y())); 1302 (offset.y() + clipped_content.height()) * uv_scale.y()));
1309 } 1303 }
1310 1304
1311 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { 1305 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const {
1312 return cached_background_color_; 1306 return cached_background_color_;
1313 } 1307 }
1314 1308
1315 void RenderWidgetHostViewAndroid::OnOverscrolled( 1309 void RenderWidgetHostViewAndroid::OnOverscrolled(
1316 gfx::Vector2dF accumulated_overscroll, 1310 gfx::Vector2dF accumulated_overscroll,
1317 gfx::Vector2dF current_fling_velocity) { 1311 gfx::Vector2dF current_fling_velocity) {
1318 if (!content_view_core_ || !are_layers_attached_) 1312 if (!content_view_core_ || !layer_ || !is_showing_)
1319 return; 1313 return;
1320 1314
1321 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(), 1315 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(),
1322 base::TimeTicks::Now(), 1316 base::TimeTicks::Now(),
1323 accumulated_overscroll, 1317 accumulated_overscroll,
1324 current_fling_velocity)) { 1318 current_fling_velocity)) {
1325 content_view_core_->SetNeedsAnimate(); 1319 content_view_core_->SetNeedsAnimate();
1326 } 1320 }
1327 } 1321 }
1328 1322
1329 void RenderWidgetHostViewAndroid::DidStopFlinging() { 1323 void RenderWidgetHostViewAndroid::DidStopFlinging() {
1330 if (content_view_core_) 1324 if (content_view_core_)
1331 content_view_core_->DidStopFlinging(); 1325 content_view_core_->DidStopFlinging();
1332 } 1326 }
1333 1327
1334 void RenderWidgetHostViewAndroid::SetContentViewCore( 1328 void RenderWidgetHostViewAndroid::SetContentViewCore(
1335 ContentViewCoreImpl* content_view_core) { 1329 ContentViewCoreImpl* content_view_core) {
1336 RunAckCallbacks(); 1330 RunAckCallbacks();
1337 1331
1338 if (are_layers_attached_) 1332 RemoveLayers();
1339 RemoveLayers();
1340
1341 if (content_view_core_ && !using_synchronous_compositor_) 1333 if (content_view_core_ && !using_synchronous_compositor_)
1342 content_view_core_->GetWindowAndroid()->RemoveObserver(this); 1334 content_view_core_->GetWindowAndroid()->RemoveObserver(this);
1343 1335
1344 content_view_core_ = content_view_core; 1336 content_view_core_ = content_view_core;
1345 1337
1346 if (GetBrowserAccessibilityManager()) { 1338 if (GetBrowserAccessibilityManager()) {
1347 base::android::ScopedJavaLocalRef<jobject> obj; 1339 base::android::ScopedJavaLocalRef<jobject> obj;
1348 if (content_view_core_) 1340 if (content_view_core_)
1349 obj = content_view_core_->GetJavaObject(); 1341 obj = content_view_core_->GetJavaObject();
1350 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> 1342 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()->
1351 SetContentViewCore(obj); 1343 SetContentViewCore(obj);
1352 } 1344 }
1353 1345
1354 if (are_layers_attached_) { 1346 AttachLayers();
1355 AttachLayers(); 1347 if (content_view_core_ && !using_synchronous_compositor_)
1356 if (content_view_core_ && !using_synchronous_compositor_) 1348 content_view_core_->GetWindowAndroid()->AddObserver(this);
1357 content_view_core_->GetWindowAndroid()->AddObserver(this);
1358 }
1359 } 1349 }
1360 1350
1361 void RenderWidgetHostViewAndroid::RunAckCallbacks() { 1351 void RenderWidgetHostViewAndroid::RunAckCallbacks() {
1362 while (!ack_callbacks_.empty()) { 1352 while (!ack_callbacks_.empty()) {
1363 ack_callbacks_.front().Run(); 1353 ack_callbacks_.front().Run();
1364 ack_callbacks_.pop(); 1354 ack_callbacks_.pop();
1365 } 1355 }
1366 } 1356 }
1367 1357
1368 void RenderWidgetHostViewAndroid::HasTouchEventHandlers( 1358 void RenderWidgetHostViewAndroid::HasTouchEventHandlers(
(...skipping 19 matching lines...) Expand all
1388 RunAckCallbacks(); 1378 RunAckCallbacks();
1389 } 1379 }
1390 1380
1391 // static 1381 // static
1392 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( 1382 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
1393 const gfx::Size& dst_size_in_pixel, 1383 const gfx::Size& dst_size_in_pixel,
1394 const SkBitmap::Config bitmap_config, 1384 const SkBitmap::Config bitmap_config,
1395 const base::TimeTicks& start_time, 1385 const base::TimeTicks& start_time,
1396 const base::Callback<void(bool, const SkBitmap&)>& callback, 1386 const base::Callback<void(bool, const SkBitmap&)>& callback,
1397 scoped_ptr<cc::CopyOutputResult> result) { 1387 scoped_ptr<cc::CopyOutputResult> result) {
1398 DCHECK(result->HasTexture());
1399 base::ScopedClosureRunner scoped_callback_runner( 1388 base::ScopedClosureRunner scoped_callback_runner(
1400 base::Bind(callback, false, SkBitmap())); 1389 base::Bind(callback, false, SkBitmap()));
1401 1390
1402 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) 1391 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty())
1403 return; 1392 return;
1404 1393
1405 scoped_ptr<SkBitmap> bitmap(new SkBitmap); 1394 scoped_ptr<SkBitmap> bitmap(new SkBitmap);
1406 bitmap->setConfig(bitmap_config, 1395 bitmap->setConfig(bitmap_config,
1407 dst_size_in_pixel.width(), 1396 dst_size_in_pixel.width(),
1408 dst_size_in_pixel.height(), 1397 dst_size_in_pixel.height(),
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1492 // RenderWidgetHostView, public: 1481 // RenderWidgetHostView, public:
1493 1482
1494 // static 1483 // static
1495 RenderWidgetHostView* 1484 RenderWidgetHostView*
1496 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { 1485 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) {
1497 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); 1486 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
1498 return new RenderWidgetHostViewAndroid(rwhi, NULL); 1487 return new RenderWidgetHostViewAndroid(rwhi, NULL);
1499 } 1488 }
1500 1489
1501 } // namespace content 1490 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698