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

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 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&)>& 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, 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 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
1319 (offset.y() + clipped_content.height()) * uv_scale.y())); 1313 (offset.y() + clipped_content.height()) * uv_scale.y()));
1320 } 1314 }
1321 1315
1322 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { 1316 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const {
1323 return cached_background_color_; 1317 return cached_background_color_;
1324 } 1318 }
1325 1319
1326 void RenderWidgetHostViewAndroid::OnOverscrolled( 1320 void RenderWidgetHostViewAndroid::OnOverscrolled(
1327 gfx::Vector2dF accumulated_overscroll, 1321 gfx::Vector2dF accumulated_overscroll,
1328 gfx::Vector2dF current_fling_velocity) { 1322 gfx::Vector2dF current_fling_velocity) {
1329 if (!content_view_core_ || !are_layers_attached_) 1323 if (!content_view_core_ || !layer_ || !is_showing_)
1330 return; 1324 return;
1331 1325
1332 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(), 1326 if (overscroll_effect_->OnOverscrolled(content_view_core_->GetLayer(),
1333 base::TimeTicks::Now(), 1327 base::TimeTicks::Now(),
1334 accumulated_overscroll, 1328 accumulated_overscroll,
1335 current_fling_velocity)) { 1329 current_fling_velocity)) {
1336 content_view_core_->SetNeedsAnimate(); 1330 content_view_core_->SetNeedsAnimate();
1337 } 1331 }
1338 } 1332 }
1339 1333
1340 void RenderWidgetHostViewAndroid::DidStopFlinging() { 1334 void RenderWidgetHostViewAndroid::DidStopFlinging() {
1341 if (content_view_core_) 1335 if (content_view_core_)
1342 content_view_core_->DidStopFlinging(); 1336 content_view_core_->DidStopFlinging();
1343 } 1337 }
1344 1338
1345 void RenderWidgetHostViewAndroid::SetContentViewCore( 1339 void RenderWidgetHostViewAndroid::SetContentViewCore(
1346 ContentViewCoreImpl* content_view_core) { 1340 ContentViewCoreImpl* content_view_core) {
1347 RunAckCallbacks(); 1341 RunAckCallbacks();
1348 1342
1349 if (are_layers_attached_) 1343 RemoveLayers();
1350 RemoveLayers();
1351
1352 if (content_view_core_ && !using_synchronous_compositor_) 1344 if (content_view_core_ && !using_synchronous_compositor_)
1353 content_view_core_->GetWindowAndroid()->RemoveObserver(this); 1345 content_view_core_->GetWindowAndroid()->RemoveObserver(this);
1354 1346
1355 content_view_core_ = content_view_core; 1347 content_view_core_ = content_view_core;
1356 1348
1357 if (GetBrowserAccessibilityManager()) { 1349 if (GetBrowserAccessibilityManager()) {
1358 base::android::ScopedJavaLocalRef<jobject> obj; 1350 base::android::ScopedJavaLocalRef<jobject> obj;
1359 if (content_view_core_) 1351 if (content_view_core_)
1360 obj = content_view_core_->GetJavaObject(); 1352 obj = content_view_core_->GetJavaObject();
1361 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> 1353 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()->
1362 SetContentViewCore(obj); 1354 SetContentViewCore(obj);
1363 } 1355 }
1364 1356
1365 if (are_layers_attached_) { 1357 AttachLayers();
1366 AttachLayers(); 1358 if (content_view_core_ && !using_synchronous_compositor_)
1367 if (content_view_core_ && !using_synchronous_compositor_) 1359 content_view_core_->GetWindowAndroid()->AddObserver(this);
1368 content_view_core_->GetWindowAndroid()->AddObserver(this);
1369 }
1370 1360
1371 // Ensure ContentsViewCore is aware of the current touch handling state, eg. 1361 // Ensure ContentsViewCore is aware of the current touch handling state, eg.
1372 // in case we've already been running JS for the page as part of preload. 1362 // in case we've already been running JS for the page as part of preload.
1373 if (content_view_core_ && host_) 1363 if (content_view_core_ && host_)
1374 content_view_core_->HasTouchEventHandlers(host_->has_touch_handler()); 1364 content_view_core_->HasTouchEventHandlers(host_->has_touch_handler());
1375 } 1365 }
1376 1366
1377 void RenderWidgetHostViewAndroid::RunAckCallbacks() { 1367 void RenderWidgetHostViewAndroid::RunAckCallbacks() {
1378 while (!ack_callbacks_.empty()) { 1368 while (!ack_callbacks_.empty()) {
1379 ack_callbacks_.front().Run(); 1369 ack_callbacks_.front().Run();
(...skipping 26 matching lines...) Expand all
1406 RunAckCallbacks(); 1396 RunAckCallbacks();
1407 } 1397 }
1408 1398
1409 // static 1399 // static
1410 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( 1400 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
1411 const gfx::Size& dst_size_in_pixel, 1401 const gfx::Size& dst_size_in_pixel,
1412 const SkBitmap::Config bitmap_config, 1402 const SkBitmap::Config bitmap_config,
1413 const base::TimeTicks& start_time, 1403 const base::TimeTicks& start_time,
1414 const base::Callback<void(bool, const SkBitmap&)>& callback, 1404 const base::Callback<void(bool, const SkBitmap&)>& callback,
1415 scoped_ptr<cc::CopyOutputResult> result) { 1405 scoped_ptr<cc::CopyOutputResult> result) {
1416 DCHECK(result->HasTexture());
1417 base::ScopedClosureRunner scoped_callback_runner( 1406 base::ScopedClosureRunner scoped_callback_runner(
1418 base::Bind(callback, false, SkBitmap())); 1407 base::Bind(callback, false, SkBitmap()));
1419 1408
1420 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) 1409 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty())
1421 return; 1410 return;
1422 1411
1423 scoped_ptr<SkBitmap> bitmap(new SkBitmap); 1412 scoped_ptr<SkBitmap> bitmap(new SkBitmap);
1424 bitmap->setConfig(bitmap_config, 1413 bitmap->setConfig(bitmap_config,
1425 dst_size_in_pixel.width(), 1414 dst_size_in_pixel.width(),
1426 dst_size_in_pixel.height(), 1415 dst_size_in_pixel.height(),
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1510 // RenderWidgetHostView, public: 1499 // RenderWidgetHostView, public:
1511 1500
1512 // static 1501 // static
1513 RenderWidgetHostView* 1502 RenderWidgetHostView*
1514 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { 1503 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) {
1515 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); 1504 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
1516 return new RenderWidgetHostViewAndroid(rwhi, NULL); 1505 return new RenderWidgetHostViewAndroid(rwhi, NULL);
1517 } 1506 }
1518 1507
1519 } // namespace content 1508 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698