OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/browser/browser_view_renderer_impl.h" | 5 #include "android_webview/browser/browser_view_renderer_impl.h" |
6 | 6 |
7 #include <android/bitmap.h> | 7 #include <android/bitmap.h> |
8 #include <sys/system_properties.h> | 8 #include <sys/system_properties.h> |
9 | 9 |
10 #include "android_webview/common/renderer_picture_map.h" | 10 #include "android_webview/common/renderer_picture_map.h" |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
97 return false; | 97 return false; |
98 } | 98 } |
99 | 99 |
100 return succeeded; | 100 return succeeded; |
101 } | 101 } |
102 | 102 |
103 } // namespace | 103 } // namespace |
104 | 104 |
105 namespace android_webview { | 105 namespace android_webview { |
106 | 106 |
107 namespace { | |
108 | |
109 const void* kBrowserViewRendererUserDataKey = &kBrowserViewRendererUserDataKey; | |
110 | |
111 class BrowserViewRendererUserData : public base::SupportsUserData::Data { | |
joth
2013/03/11 16:36:12
ah no - afraid we duplicated work here..!
Mine's a
| |
112 public: | |
113 BrowserViewRendererUserData(BrowserViewRenderer* ptr) : bvr_(ptr) {} | |
114 | |
115 static BrowserViewRenderer* GetBrowserViewRenderer( | |
116 content::WebContents* web_contents) { | |
117 if (!web_contents) | |
118 return NULL; | |
119 BrowserViewRendererUserData* data = | |
120 reinterpret_cast<BrowserViewRendererUserData*>( | |
121 web_contents->GetUserData(kBrowserViewRendererUserDataKey)); | |
122 return data ? data->bvr_ : NULL; | |
123 } | |
124 | |
125 private: | |
126 BrowserViewRenderer* bvr_; | |
127 }; | |
128 | |
129 } // namespace | |
130 | |
131 // static | |
132 BrowserViewRenderer* BrowserViewRenderer::FromWebContents( | |
133 content::WebContents* web_contents) { | |
134 return BrowserViewRendererUserData::GetBrowserViewRenderer(web_contents); | |
135 } | |
136 | |
107 // static | 137 // static |
108 BrowserViewRendererImpl* BrowserViewRendererImpl::Create( | 138 BrowserViewRendererImpl* BrowserViewRendererImpl::Create( |
109 BrowserViewRenderer::Client* client, | 139 BrowserViewRenderer::Client* client, |
110 JavaHelper* java_helper) { | 140 JavaHelper* java_helper) { |
111 return new BrowserViewRendererImpl(client, java_helper); | 141 return new BrowserViewRendererImpl(client, java_helper); |
112 } | 142 } |
113 | 143 |
114 BrowserViewRendererImpl::BrowserViewRendererImpl( | 144 BrowserViewRendererImpl::BrowserViewRendererImpl( |
115 BrowserViewRenderer::Client* client, | 145 BrowserViewRenderer::Client* client, |
116 JavaHelper* java_helper) | 146 JavaHelper* java_helper) |
117 : client_(client), | 147 : client_(client), |
118 java_helper_(java_helper), | 148 java_helper_(java_helper), |
119 view_renderer_host_(new ViewRendererHost(NULL, this)), | 149 view_renderer_host_(new ViewRendererHost(NULL, this)), |
120 ALLOW_THIS_IN_INITIALIZER_LIST(compositor_(Compositor::Create(this))), | 150 ALLOW_THIS_IN_INITIALIZER_LIST(compositor_(Compositor::Create(this))), |
121 view_clip_layer_(cc::Layer::create()), | 151 view_clip_layer_(cc::Layer::create()), |
122 transform_layer_(cc::Layer::create()), | 152 transform_layer_(cc::Layer::create()), |
123 scissor_clip_layer_(cc::Layer::create()), | 153 scissor_clip_layer_(cc::Layer::create()), |
154 view_attached_(false), | |
124 view_visible_(false), | 155 view_visible_(false), |
125 compositor_visible_(false), | 156 compositor_visible_(false), |
126 is_composite_pending_(false), | 157 is_composite_pending_(false), |
127 dpi_scale_(1.0f), | 158 dpi_scale_(1.0f), |
128 page_scale_(1.0f), | 159 page_scale_(1.0f), |
129 on_new_picture_mode_(kOnNewPictureDisabled), | 160 on_new_picture_mode_(kOnNewPictureDisabled), |
130 last_frame_context_(NULL), | 161 last_frame_context_(NULL), |
131 web_contents_(NULL), | 162 web_contents_(NULL), |
132 update_frame_info_callback_( | 163 update_frame_info_callback_( |
133 base::Bind(&BrowserViewRendererImpl::OnFrameInfoUpdated, | 164 base::Bind(&BrowserViewRendererImpl::OnFrameInfoUpdated, |
(...skipping 24 matching lines...) Expand all Loading... | |
158 } | 189 } |
159 | 190 |
160 void BrowserViewRendererImpl::SetContents(ContentViewCore* content_view_core) { | 191 void BrowserViewRendererImpl::SetContents(ContentViewCore* content_view_core) { |
161 if (web_contents_) { | 192 if (web_contents_) { |
162 ContentViewCore* previous_content_view_core = | 193 ContentViewCore* previous_content_view_core = |
163 ContentViewCore::FromWebContents(web_contents_); | 194 ContentViewCore::FromWebContents(web_contents_); |
164 if (previous_content_view_core) { | 195 if (previous_content_view_core) { |
165 previous_content_view_core->RemoveFrameInfoCallback( | 196 previous_content_view_core->RemoveFrameInfoCallback( |
166 update_frame_info_callback_); | 197 update_frame_info_callback_); |
167 } | 198 } |
199 web_contents_->RemoveUserData(kBrowserViewRendererUserDataKey); | |
168 } | 200 } |
169 | 201 |
170 web_contents_ = content_view_core ? | 202 web_contents_ = content_view_core ? |
171 content_view_core->GetWebContents() : NULL; | 203 content_view_core->GetWebContents() : NULL; |
172 view_renderer_host_->Observe(web_contents_); | 204 view_renderer_host_->Observe(web_contents_); |
173 | 205 |
174 if (!content_view_core) | 206 if (!content_view_core) |
175 return; | 207 return; |
176 | 208 |
209 web_contents_->SetUserData(kBrowserViewRendererUserDataKey, | |
210 new BrowserViewRendererUserData(this)); | |
211 | |
177 content_view_core->AddFrameInfoCallback(update_frame_info_callback_); | 212 content_view_core->AddFrameInfoCallback(update_frame_info_callback_); |
178 dpi_scale_ = content_view_core->GetDpiScale(); | 213 dpi_scale_ = content_view_core->GetDpiScale(); |
179 | 214 |
180 view_clip_layer_->removeAllChildren(); | 215 view_clip_layer_->removeAllChildren(); |
181 view_clip_layer_->addChild(content_view_core->GetLayer()); | 216 view_clip_layer_->addChild(content_view_core->GetLayer()); |
182 Invalidate(); | 217 Invalidate(); |
183 } | 218 } |
184 | 219 |
185 void BrowserViewRendererImpl::DrawGL(AwDrawGLInfo* draw_info) { | 220 void BrowserViewRendererImpl::DrawGL(AwDrawGLInfo* draw_info) { |
186 TRACE_EVENT0("android_webview", "BrowserViewRendererImpl::DrawGL"); | 221 TRACE_EVENT0("android_webview", "BrowserViewRendererImpl::DrawGL"); |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
517 view_visible_ = window_visible && view_visible; | 552 view_visible_ = window_visible && view_visible; |
518 Invalidate(); | 553 Invalidate(); |
519 } | 554 } |
520 | 555 |
521 void BrowserViewRendererImpl::OnSizeChanged(int width, int height) { | 556 void BrowserViewRendererImpl::OnSizeChanged(int width, int height) { |
522 view_size_ = gfx::Size(width, height); | 557 view_size_ = gfx::Size(width, height); |
523 view_clip_layer_->setBounds(view_size_); | 558 view_clip_layer_->setBounds(view_size_); |
524 } | 559 } |
525 | 560 |
526 void BrowserViewRendererImpl::OnAttachedToWindow(int width, int height) { | 561 void BrowserViewRendererImpl::OnAttachedToWindow(int width, int height) { |
562 view_attached_ = true; | |
527 view_size_ = gfx::Size(width, height); | 563 view_size_ = gfx::Size(width, height); |
528 view_clip_layer_->setBounds(view_size_); | 564 view_clip_layer_->setBounds(view_size_); |
529 } | 565 } |
530 | 566 |
531 void BrowserViewRendererImpl::OnDetachedFromWindow() { | 567 void BrowserViewRendererImpl::OnDetachedFromWindow() { |
568 view_attached_ = false; | |
532 view_visible_ = false; | 569 view_visible_ = false; |
533 SetCompositorVisibility(false); | 570 SetCompositorVisibility(false); |
534 } | 571 } |
535 | 572 |
573 bool BrowserViewRendererImpl::IsAttachedToWindow() { | |
574 return view_attached_; | |
575 } | |
576 | |
577 bool BrowserViewRendererImpl::IsViewVisible() { | |
578 return view_visible_; | |
579 } | |
580 | |
581 gfx::Rect BrowserViewRendererImpl::GetScreenRect() { | |
582 return gfx::Rect(client_->GetLocationOnScreen(), view_size_); | |
583 } | |
584 | |
536 void BrowserViewRendererImpl::ScheduleComposite() { | 585 void BrowserViewRendererImpl::ScheduleComposite() { |
537 TRACE_EVENT0("android_webview", "BrowserViewRendererImpl::ScheduleComposite"); | 586 TRACE_EVENT0("android_webview", "BrowserViewRendererImpl::ScheduleComposite"); |
538 | 587 |
539 if (is_composite_pending_) | 588 if (is_composite_pending_) |
540 return; | 589 return; |
541 | 590 |
542 is_composite_pending_ = true; | 591 is_composite_pending_ = true; |
543 Invalidate(); | 592 Invalidate(); |
544 } | 593 } |
545 | 594 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
627 | 676 |
628 void BrowserViewRendererImpl::OnFrameInfoUpdated( | 677 void BrowserViewRendererImpl::OnFrameInfoUpdated( |
629 const gfx::SizeF& content_size, | 678 const gfx::SizeF& content_size, |
630 const gfx::Vector2dF& scroll_offset, | 679 const gfx::Vector2dF& scroll_offset, |
631 float page_scale_factor) { | 680 float page_scale_factor) { |
632 page_scale_ = page_scale_factor; | 681 page_scale_ = page_scale_factor; |
633 content_size_css_ = content_size; | 682 content_size_css_ = content_size; |
634 } | 683 } |
635 | 684 |
636 } // namespace android_webview | 685 } // namespace android_webview |
OLD | NEW |