Chromium Code Reviews| 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 |