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

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: dtrainor comment leftover 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 if (!IsSurfaceAvailableForCopy()) {
267 267 result_callback.Run(false, SkBitmap());
268 if (!CompositorImpl::IsInitialized() || 268 return;
269 texture_id_in_layer_ == 0 ||
270 texture_size_in_layer_.IsEmpty() ||
271 size.IsEmpty()) {
272 if (out_size)
273 out_size->SetSize(0, 0);
274
275 return 0;
276 } 269 }
277 270
278 if (out_size) 271 gfx::Size bounds = layer_->bounds();
279 *out_size = size; 272 gfx::Rect src_subrect(bounds);
280 273 const gfx::Display& display =
281 GLHelper* helper = ImageTransportFactoryAndroid::GetInstance()->GetGLHelper(); 274 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
282 return helper->CopyAndScaleTexture(texture_id_in_layer_, 275 float device_scale_factor = display.device_scale_factor();
283 texture_size_in_layer_, 276 DCHECK_GT(device_scale_factor, 0);
284 size, 277 gfx::Size dst_size(
285 true, 278 gfx::ToCeiledSize(gfx::ScaleSize(bounds, scale / device_scale_factor)));
286 GLHelper::SCALER_QUALITY_FAST); 279 *out_size = dst_size;
280 CopyFromCompositingSurface(
281 src_subrect, dst_size, result_callback, SkBitmap::kARGB_8888_Config);
287 } 282 }
288 283
289 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) { 284 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) {
290 if (!CompositorImpl::IsInitialized() || 285 if (!CompositorImpl::IsInitialized() ||
291 texture_id_in_layer_ == 0 || 286 texture_id_in_layer_ == 0 ||
292 texture_size_in_layer_.IsEmpty()) 287 texture_size_in_layer_.IsEmpty())
293 return false; 288 return false;
294 289
295 gfx::JavaBitmap bitmap(jbitmap); 290 gfx::JavaBitmap bitmap(jbitmap);
296 291
(...skipping 19 matching lines...) Expand all
316 gpu::gles2::GLES2Interface* gl = 311 gpu::gles2::GLES2Interface* gl =
317 ImageTransportFactoryAndroid::GetInstance()->GetContextGL(); 312 ImageTransportFactoryAndroid::GetInstance()->GetContextGL();
318 gl->DeleteTextures(1, &texture); 313 gl->DeleteTextures(1, &texture);
319 314
320 return true; 315 return true;
321 } 316 }
322 317
323 bool RenderWidgetHostViewAndroid::HasValidFrame() const { 318 bool RenderWidgetHostViewAndroid::HasValidFrame() const {
324 if (!content_view_core_) 319 if (!content_view_core_)
325 return false; 320 return false;
321 if (!layer_)
322 return false;
323
326 if (texture_size_in_layer_.IsEmpty()) 324 if (texture_size_in_layer_.IsEmpty())
327 return false; 325 return false;
328 326
329 if (UsingDelegatedRenderer()) { 327 if (UsingDelegatedRenderer()) {
330 if (!delegated_renderer_layer_.get()) 328 if (!delegated_renderer_layer_.get())
331 return false; 329 return false;
332 } else { 330 } else {
333 if (texture_id_in_layer_ == 0) 331 if (texture_id_in_layer_ == 0)
334 return false; 332 return false;
335 } 333 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 return false; // ContentViewCore not created yet. 378 return false; // ContentViewCore not created yet.
381 379
382 return content_view_core_->HasFocus(); 380 return content_view_core_->HasFocus();
383 } 381 }
384 382
385 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { 383 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const {
386 return HasValidFrame(); 384 return HasValidFrame();
387 } 385 }
388 386
389 void RenderWidgetHostViewAndroid::Show() { 387 void RenderWidgetHostViewAndroid::Show() {
390 if (are_layers_attached_) 388 if (is_showing_)
391 return; 389 return;
392 390
393 are_layers_attached_ = true; 391 is_showing_ = true;
394 AttachLayers(); 392 if (layer_)
393 layer_->SetHideLayerAndSubtree(false);
395 394
396 frame_evictor_->SetVisible(true); 395 frame_evictor_->SetVisible(true);
397 WasShown(); 396 WasShown();
398 } 397 }
399 398
400 void RenderWidgetHostViewAndroid::Hide() { 399 void RenderWidgetHostViewAndroid::Hide() {
401 if (!are_layers_attached_) 400 if (!is_showing_)
402 return; 401 return;
403 402
404 are_layers_attached_ = false; 403 is_showing_ = false;
405 RemoveLayers(); 404 if (layer_)
405 layer_->SetHideLayerAndSubtree(true);
406 406
407 frame_evictor_->SetVisible(false); 407 frame_evictor_->SetVisible(false);
408 WasHidden(); 408 WasHidden();
409 } 409 }
410 410
411 bool RenderWidgetHostViewAndroid::IsShowing() { 411 bool RenderWidgetHostViewAndroid::IsShowing() {
412 // ContentViewCoreImpl represents the native side of the Java 412 // ContentViewCoreImpl represents the native side of the Java
413 // ContentViewCore. It being NULL means that it is not attached 413 // ContentViewCore. It being NULL means that it is not attached
414 // to the View system yet, so we treat this RWHVA as hidden. 414 // to the View system yet, so we treat this RWHVA as hidden.
415 return are_layers_attached_ && content_view_core_; 415 return is_showing_ && content_view_core_;
416 } 416 }
417 417
418 void RenderWidgetHostViewAndroid::LockResources() { 418 void RenderWidgetHostViewAndroid::LockResources() {
419 DCHECK(HasValidFrame()); 419 DCHECK(HasValidFrame());
420 DCHECK(host_); 420 DCHECK(host_);
421 DCHECK(!host_->is_hidden()); 421 DCHECK(!host_->is_hidden());
422 frame_evictor_->LockFrame(); 422 frame_evictor_->LockFrame();
423 } 423 }
424 424
425 void RenderWidgetHostViewAndroid::UnlockResources() { 425 void RenderWidgetHostViewAndroid::UnlockResources() {
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 output_surface_id, 732 output_surface_id,
733 host_->GetProcess()->GetID(), 733 host_->GetProcess()->GetID(),
734 ack); 734 ack);
735 } 735 }
736 736
737 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { 737 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() {
738 // TODO(danakj): If no ack is pending, collect and send resources now. 738 // TODO(danakj): If no ack is pending, collect and send resources now.
739 } 739 }
740 740
741 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { 741 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() {
742 if (are_layers_attached_) 742 RemoveLayers();
743 RemoveLayers();
744 frame_provider_ = NULL; 743 frame_provider_ = NULL;
745 delegated_renderer_layer_ = NULL; 744 delegated_renderer_layer_ = NULL;
746 layer_ = NULL; 745 layer_ = NULL;
747 } 746 }
748 747
749 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( 748 void RenderWidgetHostViewAndroid::SwapDelegatedFrame(
750 uint32 output_surface_id, 749 uint32 output_surface_id,
751 scoped_ptr<cc::DelegatedFrameData> frame_data) { 750 scoped_ptr<cc::DelegatedFrameData> frame_data) {
752 bool has_content = !texture_size_in_layer_.IsEmpty(); 751 bool has_content = !texture_size_in_layer_.IsEmpty();
753 752
(...skipping 15 matching lines...) Expand all
769 768
770 if (!has_content) { 769 if (!has_content) {
771 DestroyDelegatedContent(); 770 DestroyDelegatedContent();
772 } else { 771 } else {
773 if (!resource_collection_.get()) { 772 if (!resource_collection_.get()) {
774 resource_collection_ = new cc::DelegatedFrameResourceCollection; 773 resource_collection_ = new cc::DelegatedFrameResourceCollection;
775 resource_collection_->SetClient(this); 774 resource_collection_->SetClient(this);
776 } 775 }
777 if (!frame_provider_ || 776 if (!frame_provider_ ||
778 texture_size_in_layer_ != frame_provider_->frame_size()) { 777 texture_size_in_layer_ != frame_provider_->frame_size()) {
779 if (are_layers_attached_) 778 RemoveLayers();
780 RemoveLayers();
781 frame_provider_ = new cc::DelegatedFrameProvider( 779 frame_provider_ = new cc::DelegatedFrameProvider(
782 resource_collection_.get(), frame_data.Pass()); 780 resource_collection_.get(), frame_data.Pass());
783 delegated_renderer_layer_ = 781 delegated_renderer_layer_ =
784 cc::DelegatedRendererLayer::Create(frame_provider_); 782 cc::DelegatedRendererLayer::Create(frame_provider_);
785 layer_ = delegated_renderer_layer_; 783 layer_ = delegated_renderer_layer_;
786 if (are_layers_attached_) 784 AttachLayers();
787 AttachLayers();
788 } else { 785 } else {
789 frame_provider_->SetFrameData(frame_data.Pass()); 786 frame_provider_->SetFrameData(frame_data.Pass());
790 } 787 }
791 } 788 }
792 789
793 if (delegated_renderer_layer_.get()) { 790 if (delegated_renderer_layer_.get()) {
794 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); 791 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_);
795 delegated_renderer_layer_->SetIsDrawable(true); 792 delegated_renderer_layer_->SetIsDrawable(true);
796 delegated_renderer_layer_->SetContentsOpaque(true); 793 delegated_renderer_layer_->SetContentsOpaque(true);
797 delegated_renderer_layer_->SetBounds(content_size_in_layer_); 794 delegated_renderer_layer_->SetBounds(content_size_in_layer_);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 833
837 DCHECK(frame->delegated_frame_data); 834 DCHECK(frame->delegated_frame_data);
838 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); 835 DCHECK(!frame->delegated_frame_data->render_pass_list.empty());
839 836
840 cc::RenderPass* root_pass = 837 cc::RenderPass* root_pass =
841 frame->delegated_frame_data->render_pass_list.back(); 838 frame->delegated_frame_data->render_pass_list.back();
842 texture_size_in_layer_ = root_pass->output_rect.size(); 839 texture_size_in_layer_ = root_pass->output_rect.size();
843 ComputeContentsSize(frame->metadata); 840 ComputeContentsSize(frame->metadata);
844 841
845 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); 842 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass());
843 frame_evictor_->SwappedFrame(!host_->is_hidden());
846 return; 844 return;
847 } 845 }
848 846
849 DCHECK(!UsingDelegatedRenderer()); 847 DCHECK(!UsingDelegatedRenderer());
850 848
851 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) 849 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero())
852 return; 850 return;
853 851
854 if (output_surface_id != last_output_surface_id_) { 852 if (output_surface_id != last_output_surface_id_) {
855 current_mailbox_ = gpu::Mailbox(); 853 current_mailbox_ = gpu::Mailbox();
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 986
989 void RenderWidgetHostViewAndroid::AttachLayers() { 987 void RenderWidgetHostViewAndroid::AttachLayers() {
990 if (!content_view_core_) 988 if (!content_view_core_)
991 return; 989 return;
992 if (!layer_.get()) 990 if (!layer_.get())
993 return; 991 return;
994 992
995 content_view_core_->AttachLayer(layer_); 993 content_view_core_->AttachLayer(layer_);
996 if (overscroll_effect_enabled_) 994 if (overscroll_effect_enabled_)
997 overscroll_effect_->Enable(); 995 overscroll_effect_->Enable();
996 layer_->SetHideLayerAndSubtree(!is_showing_);
998 } 997 }
999 998
1000 void RenderWidgetHostViewAndroid::RemoveLayers() { 999 void RenderWidgetHostViewAndroid::RemoveLayers() {
1001 if (!content_view_core_) 1000 if (!content_view_core_)
1002 return; 1001 return;
1003 if (!layer_.get()) 1002 if (!layer_.get())
1004 return; 1003 return;
1005 1004
1006 content_view_core_->RemoveLayer(layer_); 1005 content_view_core_->RemoveLayer(layer_);
1007 overscroll_effect_->Disable(); 1006 overscroll_effect_->Disable();
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
1308 (offset.y() + clipped_content.height()) * uv_scale.y())); 1307 (offset.y() + clipped_content.height()) * uv_scale.y()));
1309 } 1308 }
1310 1309
1311 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { 1310 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const {
1312 return cached_background_color_; 1311 return cached_background_color_;
1313 } 1312 }
1314 1313
1315 void RenderWidgetHostViewAndroid::OnOverscrolled( 1314 void RenderWidgetHostViewAndroid::OnOverscrolled(
1316 gfx::Vector2dF accumulated_overscroll, 1315 gfx::Vector2dF accumulated_overscroll,
1317 gfx::Vector2dF current_fling_velocity) { 1316 gfx::Vector2dF current_fling_velocity) {
1318 if (!content_view_core_ || !are_layers_attached_) 1317 if (!content_view_core_ || !layer_ || !is_showing_)
1319 return; 1318 return;
1320 1319
1321 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(), 1320 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(),
1322 base::TimeTicks::Now(), 1321 base::TimeTicks::Now(),
1323 accumulated_overscroll, 1322 accumulated_overscroll,
1324 current_fling_velocity)) { 1323 current_fling_velocity)) {
1325 content_view_core_->SetNeedsAnimate(); 1324 content_view_core_->SetNeedsAnimate();
1326 } 1325 }
1327 } 1326 }
1328 1327
1329 void RenderWidgetHostViewAndroid::DidStopFlinging() { 1328 void RenderWidgetHostViewAndroid::DidStopFlinging() {
1330 if (content_view_core_) 1329 if (content_view_core_)
1331 content_view_core_->DidStopFlinging(); 1330 content_view_core_->DidStopFlinging();
1332 } 1331 }
1333 1332
1334 void RenderWidgetHostViewAndroid::SetContentViewCore( 1333 void RenderWidgetHostViewAndroid::SetContentViewCore(
1335 ContentViewCoreImpl* content_view_core) { 1334 ContentViewCoreImpl* content_view_core) {
1336 RunAckCallbacks(); 1335 RunAckCallbacks();
1337 1336
1338 if (are_layers_attached_) 1337 RemoveLayers();
1339 RemoveLayers();
1340
1341 if (content_view_core_ && !using_synchronous_compositor_) 1338 if (content_view_core_ && !using_synchronous_compositor_)
1342 content_view_core_->GetWindowAndroid()->RemoveObserver(this); 1339 content_view_core_->GetWindowAndroid()->RemoveObserver(this);
1343 1340
1344 content_view_core_ = content_view_core; 1341 content_view_core_ = content_view_core;
1345 1342
1346 if (GetBrowserAccessibilityManager()) { 1343 if (GetBrowserAccessibilityManager()) {
1347 base::android::ScopedJavaLocalRef<jobject> obj; 1344 base::android::ScopedJavaLocalRef<jobject> obj;
1348 if (content_view_core_) 1345 if (content_view_core_)
1349 obj = content_view_core_->GetJavaObject(); 1346 obj = content_view_core_->GetJavaObject();
1350 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> 1347 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()->
1351 SetContentViewCore(obj); 1348 SetContentViewCore(obj);
1352 } 1349 }
1353 1350
1354 if (are_layers_attached_) { 1351 AttachLayers();
1355 AttachLayers(); 1352 if (content_view_core_ && !using_synchronous_compositor_)
1356 if (content_view_core_ && !using_synchronous_compositor_) 1353 content_view_core_->GetWindowAndroid()->AddObserver(this);
1357 content_view_core_->GetWindowAndroid()->AddObserver(this);
1358 }
1359 } 1354 }
1360 1355
1361 void RenderWidgetHostViewAndroid::RunAckCallbacks() { 1356 void RenderWidgetHostViewAndroid::RunAckCallbacks() {
1362 while (!ack_callbacks_.empty()) { 1357 while (!ack_callbacks_.empty()) {
1363 ack_callbacks_.front().Run(); 1358 ack_callbacks_.front().Run();
1364 ack_callbacks_.pop(); 1359 ack_callbacks_.pop();
1365 } 1360 }
1366 } 1361 }
1367 1362
1368 void RenderWidgetHostViewAndroid::HasTouchEventHandlers( 1363 void RenderWidgetHostViewAndroid::HasTouchEventHandlers(
(...skipping 19 matching lines...) Expand all
1388 RunAckCallbacks(); 1383 RunAckCallbacks();
1389 } 1384 }
1390 1385
1391 // static 1386 // static
1392 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( 1387 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
1393 const gfx::Size& dst_size_in_pixel, 1388 const gfx::Size& dst_size_in_pixel,
1394 const SkBitmap::Config bitmap_config, 1389 const SkBitmap::Config bitmap_config,
1395 const base::TimeTicks& start_time, 1390 const base::TimeTicks& start_time,
1396 const base::Callback<void(bool, const SkBitmap&)>& callback, 1391 const base::Callback<void(bool, const SkBitmap&)>& callback,
1397 scoped_ptr<cc::CopyOutputResult> result) { 1392 scoped_ptr<cc::CopyOutputResult> result) {
1398 DCHECK(result->HasTexture());
1399 base::ScopedClosureRunner scoped_callback_runner( 1393 base::ScopedClosureRunner scoped_callback_runner(
1400 base::Bind(callback, false, SkBitmap())); 1394 base::Bind(callback, false, SkBitmap()));
1401 1395
1402 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) 1396 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty())
1403 return; 1397 return;
1404 1398
1405 scoped_ptr<SkBitmap> bitmap(new SkBitmap); 1399 scoped_ptr<SkBitmap> bitmap(new SkBitmap);
1406 bitmap->setConfig(bitmap_config, 1400 bitmap->setConfig(bitmap_config,
1407 dst_size_in_pixel.width(), 1401 dst_size_in_pixel.width(),
1408 dst_size_in_pixel.height(), 1402 dst_size_in_pixel.height(),
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1492 // RenderWidgetHostView, public: 1486 // RenderWidgetHostView, public:
1493 1487
1494 // static 1488 // static
1495 RenderWidgetHostView* 1489 RenderWidgetHostView*
1496 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { 1490 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) {
1497 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); 1491 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
1498 return new RenderWidgetHostViewAndroid(rwhi, NULL); 1492 return new RenderWidgetHostViewAndroid(rwhi, NULL);
1499 } 1493 }
1500 1494
1501 } // namespace content 1495 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698