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

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

Issue 26023004: aura: Allow delegated frames to be used by more than one impl layer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: frameprovider: are_layers_attached checks Created 7 years, 2 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 | Annotate | Revision Log
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"
11 #include "base/callback_helpers.h" 11 #include "base/callback_helpers.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
15 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
16 #include "base/threading/worker_pool.h" 16 #include "base/threading/worker_pool.h"
17 #include "cc/layers/delegated_frame_provider.h"
17 #include "cc/layers/delegated_renderer_layer.h" 18 #include "cc/layers/delegated_renderer_layer.h"
18 #include "cc/layers/layer.h" 19 #include "cc/layers/layer.h"
19 #include "cc/layers/texture_layer.h" 20 #include "cc/layers/texture_layer.h"
20 #include "cc/output/compositor_frame.h" 21 #include "cc/output/compositor_frame.h"
21 #include "cc/output/compositor_frame_ack.h" 22 #include "cc/output/compositor_frame_ack.h"
22 #include "cc/output/copy_output_request.h" 23 #include "cc/output/copy_output_request.h"
23 #include "cc/output/copy_output_result.h" 24 #include "cc/output/copy_output_result.h"
24 #include "cc/resources/single_release_callback.h" 25 #include "cc/resources/single_release_callback.h"
25 #include "cc/trees/layer_tree_host.h" 26 #include "cc/trees/layer_tree_host.h"
26 #include "content/browser/accessibility/browser_accessibility_manager_android.h" 27 #include "content/browser/accessibility/browser_accessibility_manager_android.h"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 const base::Callback<void(bool, const SkBitmap&)>& callback, 93 const base::Callback<void(bool, const SkBitmap&)>& callback,
93 scoped_ptr<cc::SingleReleaseCallback> release_callback, 94 scoped_ptr<cc::SingleReleaseCallback> release_callback,
94 scoped_ptr<SkBitmap> bitmap, 95 scoped_ptr<SkBitmap> bitmap,
95 scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock, 96 scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock,
96 bool result) { 97 bool result) {
97 bitmap_pixels_lock.reset(); 98 bitmap_pixels_lock.reset();
98 release_callback->Run(0, false); 99 release_callback->Run(0, false);
99 callback.Run(result, *bitmap); 100 callback.Run(result, *bitmap);
100 } 101 }
101 102
103 bool UsingDelegatedRenderer() {
104 return CommandLine::ForCurrentProcess()->HasSwitch(
105 switches::kEnableDelegatedRenderer);
106 }
107
102 } // anonymous namespace 108 } // anonymous namespace
103 109
104 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( 110 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
105 RenderWidgetHostImpl* widget_host, 111 RenderWidgetHostImpl* widget_host,
106 ContentViewCoreImpl* content_view_core) 112 ContentViewCoreImpl* content_view_core)
107 : host_(widget_host), 113 : host_(widget_host),
108 needs_begin_frame_(false), 114 needs_begin_frame_(false),
109 are_layers_attached_(true), 115 are_layers_attached_(true),
110 content_view_core_(NULL), 116 content_view_core_(NULL),
111 ime_adapter_android_(this), 117 ime_adapter_android_(this),
112 cached_background_color_(SK_ColorWHITE), 118 cached_background_color_(SK_ColorWHITE),
113 texture_id_in_layer_(0), 119 texture_id_in_layer_(0),
114 current_mailbox_output_surface_id_(kUndefinedOutputSurfaceId), 120 current_mailbox_output_surface_id_(kUndefinedOutputSurfaceId),
115 weak_ptr_factory_(this), 121 weak_ptr_factory_(this),
116 overscroll_effect_enabled_(true), 122 overscroll_effect_enabled_(true),
117 flush_input_requested_(false) { 123 flush_input_requested_(false) {
118 if (CommandLine::ForCurrentProcess()->HasSwitch( 124 if (!UsingDelegatedRenderer()) {
119 switches::kEnableDelegatedRenderer)) {
120 delegated_renderer_layer_ = cc::DelegatedRendererLayer::Create(this);
121 layer_ = delegated_renderer_layer_;
122 } else {
123 texture_layer_ = cc::TextureLayer::Create(this); 125 texture_layer_ = cc::TextureLayer::Create(this);
124 layer_ = texture_layer_; 126 layer_ = texture_layer_;
125 } 127 }
126 128
127 layer_->SetContentsOpaque(true);
128
129 overscroll_effect_enabled_ = !CommandLine::ForCurrentProcess()-> 129 overscroll_effect_enabled_ = !CommandLine::ForCurrentProcess()->
130 HasSwitch(switches::kDisableOverscrollEdgeEffect); 130 HasSwitch(switches::kDisableOverscrollEdgeEffect);
131 // Don't block the main thread with effect resource loading. 131 // Don't block the main thread with effect resource loading.
132 // Actual effect creation is deferred until an overscroll event is received. 132 // Actual effect creation is deferred until an overscroll event is received.
133 if (overscroll_effect_enabled_) { 133 if (overscroll_effect_enabled_) {
134 base::WorkerPool::PostTask(FROM_HERE, 134 base::WorkerPool::PostTask(FROM_HERE,
135 base::Bind(&OverscrollGlow::EnsureResources), 135 base::Bind(&OverscrollGlow::EnsureResources),
136 true); 136 true);
137 } 137 }
138 138
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 static_cast<unsigned char*> (bitmap.pixels())); 276 static_cast<unsigned char*> (bitmap.pixels()));
277 277
278 WebKit::WebGraphicsContext3D* context = 278 WebKit::WebGraphicsContext3D* context =
279 ImageTransportFactoryAndroid::GetInstance()->GetContext3D(); 279 ImageTransportFactoryAndroid::GetInstance()->GetContext3D();
280 context->deleteTexture(texture); 280 context->deleteTexture(texture);
281 281
282 return true; 282 return true;
283 } 283 }
284 284
285 bool RenderWidgetHostViewAndroid::HasValidFrame() const { 285 bool RenderWidgetHostViewAndroid::HasValidFrame() const {
286 return texture_id_in_layer_ != 0 && 286 if (!content_view_core_)
287 content_view_core_ && 287 return false;
288 !texture_size_in_layer_.IsEmpty(); 288 if (texture_size_in_layer_.IsEmpty())
289 return false;
290
291 if (UsingDelegatedRenderer()) {
292 if (!delegated_renderer_layer_.get())
293 return false;
294 } else {
295 if (texture_id_in_layer_ == 0)
296 return false;
297 }
298
299 return true;
289 } 300 }
290 301
291 gfx::NativeView RenderWidgetHostViewAndroid::GetNativeView() const { 302 gfx::NativeView RenderWidgetHostViewAndroid::GetNativeView() const {
292 return content_view_core_->GetViewAndroid(); 303 return content_view_core_->GetViewAndroid();
293 } 304 }
294 305
295 gfx::NativeViewId RenderWidgetHostViewAndroid::GetNativeViewId() const { 306 gfx::NativeViewId RenderWidgetHostViewAndroid::GetNativeViewId() const {
296 return reinterpret_cast<gfx::NativeViewId>( 307 return reinterpret_cast<gfx::NativeViewId>(
297 const_cast<RenderWidgetHostViewAndroid*>(this)); 308 const_cast<RenderWidgetHostViewAndroid*>(this));
298 } 309 }
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 anchor_x, anchor_y + distance_between_pointers / 2, 642 anchor_x, anchor_y + distance_between_pointers / 2,
632 0, (zoom_in ? pixels_to_move : -pixels_to_move) / 2)); 643 0, (zoom_in ? pixels_to_move : -pixels_to_move) / 2));
633 } 644 }
634 645
635 void RenderWidgetHostViewAndroid::OnAcceleratedCompositingStateChange() { 646 void RenderWidgetHostViewAndroid::OnAcceleratedCompositingStateChange() {
636 } 647 }
637 648
638 void RenderWidgetHostViewAndroid::SendDelegatedFrameAck( 649 void RenderWidgetHostViewAndroid::SendDelegatedFrameAck(
639 uint32 output_surface_id) { 650 uint32 output_surface_id) {
640 cc::CompositorFrameAck ack; 651 cc::CompositorFrameAck ack;
641 delegated_renderer_layer_->TakeUnusedResourcesForChildCompositor( 652 if (resource_collection_.get())
642 &ack.resources); 653 resource_collection_->TakeUnusedResourcesForChildCompositor(&ack.resources);
643 RenderWidgetHostImpl::SendSwapCompositorFrameAck( 654 RenderWidgetHostImpl::SendSwapCompositorFrameAck(host_->GetRoutingID(),
644 host_->GetRoutingID(), output_surface_id, 655 output_surface_id,
645 host_->GetProcess()->GetID(), ack); 656 host_->GetProcess()->GetID(),
657 ack);
658 }
659
660 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() {
661 // TODO(danakj): If no ack is pending, collect and send resources now.
662 }
663
664 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() {
665 RemoveLayers();
666 frame_provider_ = NULL;
667 delegated_renderer_layer_ = NULL;
668 layer_ = NULL;
646 } 669 }
647 670
648 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( 671 void RenderWidgetHostViewAndroid::SwapDelegatedFrame(
649 uint32 output_surface_id, 672 uint32 output_surface_id,
650 scoped_ptr<cc::DelegatedFrameData> frame_data) { 673 scoped_ptr<cc::DelegatedFrameData> frame_data) {
651 bool has_frame = frame_data.get() && !frame_data->render_pass_list.empty(); 674 bool has_content = !texture_size_in_layer_.IsEmpty();
652 675
653 if (has_frame) { 676 if (output_surface_id != current_mailbox_output_surface_id_) {
654 delegated_renderer_layer_->SetFrameData(frame_data.Pass()); 677 // TODO(danakj): Lose all resources and send them back here, such as:
678 // resource_collection_->LoseAllResources();
679 // SendReturnedDelegatedResources(last_output_surface_id_);
680
681 // Drop the cc::DelegatedFrameResourceCollection so that we will not return
682 // any resources from the old output surface with the new output surface id.
683 resource_collection_ = NULL;
684 DestroyDelegatedContent();
685 }
686
687 if (!has_content) {
688 DestroyDelegatedContent();
689 } else {
690 if (!resource_collection_) {
691 resource_collection_ = new cc::DelegatedFrameResourceCollection;
692 resource_collection_->SetClient(this);
693 }
694 if (!frame_provider_ ||
695 texture_size_in_layer_ != frame_provider_->frame_size()) {
696 RemoveLayers();
697 frame_provider_ = new cc::DelegatedFrameProvider(
698 resource_collection_.get(), frame_data.Pass());
699 delegated_renderer_layer_ =
700 cc::DelegatedRendererLayer::Create(this, frame_provider_);
701 layer_ = delegated_renderer_layer_;
702 AttachLayers();
703 } else {
704 frame_provider_->SetFrameData(frame_data.Pass());
705 }
706 }
707
708 if (delegated_renderer_layer_.get()) {
655 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); 709 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_);
656 layer_->SetIsDrawable(true); 710 delegated_renderer_layer_->SetIsDrawable(true);
711 delegated_renderer_layer_->SetContentsOpaque(true);
712 delegated_renderer_layer_->SetBounds(content_size_in_layer_);
713 delegated_renderer_layer_->SetNeedsDisplay();
657 } 714 }
658 layer_->SetBounds(content_size_in_layer_);
659 layer_->SetNeedsDisplay();
660 715
661 base::Closure ack_callback = 716 base::Closure ack_callback =
662 base::Bind(&RenderWidgetHostViewAndroid::SendDelegatedFrameAck, 717 base::Bind(&RenderWidgetHostViewAndroid::SendDelegatedFrameAck,
663 weak_ptr_factory_.GetWeakPtr(), 718 weak_ptr_factory_.GetWeakPtr(),
664 output_surface_id); 719 output_surface_id);
665 720
666 if (host_->is_hidden()) 721 if (host_->is_hidden())
667 ack_callback.Run(); 722 ack_callback.Run();
668 else 723 else
669 ack_callbacks_.push(ack_callback); 724 ack_callbacks_.push(ack_callback);
(...skipping 15 matching lines...) Expand all
685 } 740 }
686 741
687 void RenderWidgetHostViewAndroid::OnSwapCompositorFrame( 742 void RenderWidgetHostViewAndroid::OnSwapCompositorFrame(
688 uint32 output_surface_id, 743 uint32 output_surface_id,
689 scoped_ptr<cc::CompositorFrame> frame) { 744 scoped_ptr<cc::CompositorFrame> frame) {
690 // Always let ContentViewCore know about the new frame first, so it can decide 745 // Always let ContentViewCore know about the new frame first, so it can decide
691 // to schedule a Draw immediately when it sees the texture layer invalidation. 746 // to schedule a Draw immediately when it sees the texture layer invalidation.
692 UpdateContentViewCoreFrameMetadata(frame->metadata); 747 UpdateContentViewCoreFrameMetadata(frame->metadata);
693 748
694 if (frame->delegated_frame_data) { 749 if (frame->delegated_frame_data) {
695 if (!frame->delegated_frame_data->render_pass_list.empty()) { 750 DCHECK(UsingDelegatedRenderer());
696 texture_size_in_layer_ = frame->delegated_frame_data->render_pass_list 751
697 .back()->output_rect.size(); 752 DCHECK(frame->delegated_frame_data);
698 } 753 DCHECK(!frame->delegated_frame_data->render_pass_list.empty());
754
755 cc::RenderPass* root_pass =
756 frame->delegated_frame_data->render_pass_list.back();
757 texture_size_in_layer_ = root_pass->output_rect.size();
699 ComputeContentsSize(frame->metadata); 758 ComputeContentsSize(frame->metadata);
700 759
701 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); 760 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass());
702 return; 761 return;
703 } 762 }
704 763
764 DCHECK(!UsingDelegatedRenderer());
765
705 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) 766 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero())
706 return; 767 return;
707 768
708 if (output_surface_id != current_mailbox_output_surface_id_) { 769 if (output_surface_id != current_mailbox_output_surface_id_) {
709 current_mailbox_ = gpu::Mailbox(); 770 current_mailbox_ = gpu::Mailbox();
710 current_mailbox_output_surface_id_ = kUndefinedOutputSurfaceId; 771 current_mailbox_output_surface_id_ = kUndefinedOutputSurfaceId;
711 } 772 }
712 773
713 base::Closure callback = base::Bind(&InsertSyncPointAndAckForCompositor, 774 base::Closure callback = base::Bind(&InsertSyncPointAndAckForCompositor,
714 host_->GetProcess()->GetID(), 775 host_->GetProcess()->GetID(),
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 ImageTransportFactoryAndroid::GetInstance(); 852 ImageTransportFactoryAndroid::GetInstance();
792 853
793 // TODO(sievers): When running the impl thread in the browser we 854 // TODO(sievers): When running the impl thread in the browser we
794 // need to delay the ACK until after commit and use more than a single 855 // need to delay the ACK until after commit and use more than a single
795 // texture. 856 // texture.
796 DCHECK(!CompositorImpl::IsThreadingEnabled()); 857 DCHECK(!CompositorImpl::IsThreadingEnabled());
797 858
798 if (!texture_id_in_layer_) { 859 if (!texture_id_in_layer_) {
799 texture_id_in_layer_ = factory->CreateTexture(); 860 texture_id_in_layer_ = factory->CreateTexture();
800 texture_layer_->SetIsDrawable(true); 861 texture_layer_->SetIsDrawable(true);
862 texture_layer_->SetContentsOpaque(true);
801 } 863 }
802 864
803 ImageTransportFactoryAndroid::GetInstance()->AcquireTexture( 865 ImageTransportFactoryAndroid::GetInstance()->AcquireTexture(
804 texture_id_in_layer_, mailbox.name); 866 texture_id_in_layer_, mailbox.name);
805 867
806 ResetClipping(); 868 ResetClipping();
807 869
808 current_mailbox_ = mailbox; 870 current_mailbox_ = mailbox;
809 current_mailbox_output_surface_id_ = output_surface_id; 871 current_mailbox_output_surface_id_ = output_surface_id;
810 872
811 if (host_->is_hidden()) 873 if (host_->is_hidden())
812 ack_callback.Run(); 874 ack_callback.Run();
813 else 875 else
814 ack_callbacks_.push(ack_callback); 876 ack_callbacks_.push(ack_callback);
815 } 877 }
816 878
817 void RenderWidgetHostViewAndroid::AttachLayers() { 879 void RenderWidgetHostViewAndroid::AttachLayers() {
818 if (!content_view_core_) 880 if (!content_view_core_)
819 return; 881 return;
882 if (!layer_.get())
883 return;
820 884
821 content_view_core_->AttachLayer(layer_); 885 content_view_core_->AttachLayer(layer_);
822 } 886 }
823 887
824 void RenderWidgetHostViewAndroid::RemoveLayers() { 888 void RenderWidgetHostViewAndroid::RemoveLayers() {
825 if (!content_view_core_) 889 if (!content_view_core_)
826 return; 890 return;
891 if (!layer_.get())
892 return;
827 893
828 if (overscroll_effect_) 894 if (overscroll_effect_)
829 content_view_core_->RemoveLayer(overscroll_effect_->root_layer()); 895 content_view_core_->RemoveLayer(overscroll_effect_->root_layer());
830 896
831 content_view_core_->RemoveLayer(layer_); 897 content_view_core_->RemoveLayer(layer_);
832 } 898 }
833 899
834 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { 900 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) {
835 if (!overscroll_effect_) 901 if (!overscroll_effect_)
836 return false; 902 return false;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 // This tells us we should free the frontbuffer. 960 // This tells us we should free the frontbuffer.
895 if (texture_id_in_layer_) { 961 if (texture_id_in_layer_) {
896 texture_layer_->SetTextureId(0); 962 texture_layer_->SetTextureId(0);
897 texture_layer_->SetIsDrawable(false); 963 texture_layer_->SetIsDrawable(false);
898 ImageTransportFactoryAndroid::GetInstance()->DeleteTexture( 964 ImageTransportFactoryAndroid::GetInstance()->DeleteTexture(
899 texture_id_in_layer_); 965 texture_id_in_layer_);
900 texture_id_in_layer_ = 0; 966 texture_id_in_layer_ = 0;
901 current_mailbox_ = gpu::Mailbox(); 967 current_mailbox_ = gpu::Mailbox();
902 current_mailbox_output_surface_id_ = kUndefinedOutputSurfaceId; 968 current_mailbox_output_surface_id_ = kUndefinedOutputSurfaceId;
903 } 969 }
970 if (delegated_renderer_layer_.get())
971 DestroyDelegatedContent();
904 } 972 }
905 973
906 bool RenderWidgetHostViewAndroid::HasAcceleratedSurface( 974 bool RenderWidgetHostViewAndroid::HasAcceleratedSurface(
907 const gfx::Size& desired_size) { 975 const gfx::Size& desired_size) {
908 NOTREACHED(); 976 NOTREACHED();
909 return false; 977 return false;
910 } 978 }
911 979
912 void RenderWidgetHostViewAndroid::GetScreenInfo(WebKit::WebScreenInfo* result) { 980 void RenderWidgetHostViewAndroid::GetScreenInfo(WebKit::WebScreenInfo* result) {
913 // ScreenInfo isn't tied to the widget on Android. Always return the default. 981 // ScreenInfo isn't tied to the widget on Android. Always return the default.
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
1205 } 1273 }
1206 1274
1207 bool RenderWidgetHostViewAndroid::PrepareTextureMailbox( 1275 bool RenderWidgetHostViewAndroid::PrepareTextureMailbox(
1208 cc::TextureMailbox* mailbox, 1276 cc::TextureMailbox* mailbox,
1209 scoped_ptr<cc::SingleReleaseCallback>* release_callback, 1277 scoped_ptr<cc::SingleReleaseCallback>* release_callback,
1210 bool use_shared_memory) { 1278 bool use_shared_memory) {
1211 return false; 1279 return false;
1212 } 1280 }
1213 1281
1214 void RenderWidgetHostViewAndroid::OnLostResources() { 1282 void RenderWidgetHostViewAndroid::OnLostResources() {
1215 if (texture_layer_) 1283 if (texture_layer_.get())
1216 texture_layer_->SetIsDrawable(false); 1284 texture_layer_->SetIsDrawable(false);
1285 if (delegated_renderer_layer_.get())
1286 DestroyDelegatedContent();
1217 texture_id_in_layer_ = 0; 1287 texture_id_in_layer_ = 0;
1218 RunAckCallbacks(); 1288 RunAckCallbacks();
1219 } 1289 }
1220 1290
1221 // static 1291 // static
1222 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( 1292 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
1223 const gfx::Size& dst_size_in_pixel, 1293 const gfx::Size& dst_size_in_pixel,
1224 const base::Callback<void(bool, const SkBitmap&)>& callback, 1294 const base::Callback<void(bool, const SkBitmap&)>& callback,
1225 scoped_ptr<cc::CopyOutputResult> result) { 1295 scoped_ptr<cc::CopyOutputResult> result) {
1226 DCHECK(result->HasTexture()); 1296 DCHECK(result->HasTexture());
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
1313 // RenderWidgetHostView, public: 1383 // RenderWidgetHostView, public:
1314 1384
1315 // static 1385 // static
1316 RenderWidgetHostView* 1386 RenderWidgetHostView*
1317 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { 1387 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) {
1318 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); 1388 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
1319 return new RenderWidgetHostViewAndroid(rwhi, NULL); 1389 return new RenderWidgetHostViewAndroid(rwhi, NULL);
1320 } 1390 }
1321 1391
1322 } // namespace content 1392 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698