Chromium Code Reviews| Index: extensions/browser/guest_view/guest_view_base.cc |
| diff --git a/extensions/browser/guest_view/guest_view_base.cc b/extensions/browser/guest_view/guest_view_base.cc |
| index 3a3c7ffe8ac87f431107bc96ad8dc1c06b4b2652..d78ae8a8a313ce20fd1fa1a586f28786b7244a76 100644 |
| --- a/extensions/browser/guest_view/guest_view_base.cc |
| +++ b/extensions/browser/guest_view/guest_view_base.cc |
| @@ -72,16 +72,18 @@ scoped_ptr<base::DictionaryValue> GuestViewBase::Event::GetArguments() { |
| } |
| // This observer ensures that the GuestViewBase destroys itself when its |
| -// embedder goes away. |
| -class GuestViewBase::OwnerLifetimeObserver : public WebContentsObserver { |
| +// embedder goes away. It also tracks when the embedder's fullscreen is |
| +// toggled so guests can change itself accordingly. |
|
Fady Samuel
2015/03/13 01:43:06
so the guest can change itself
lazyboy
2015/03/13 16:27:02
Done.
|
| +class GuestViewBase::OwnerContentsObserver : public WebContentsObserver { |
| public: |
| - OwnerLifetimeObserver(GuestViewBase* guest, |
| + OwnerContentsObserver(GuestViewBase* guest, |
| content::WebContents* embedder_web_contents) |
| : WebContentsObserver(embedder_web_contents), |
| + is_fullscreen_(false), |
| destroyed_(false), |
| guest_(guest) {} |
| - ~OwnerLifetimeObserver() override {} |
| + ~OwnerContentsObserver() override {} |
| // WebContentsObserver implementation. |
| void WebContentsDestroyed() override { |
| @@ -102,7 +104,29 @@ class GuestViewBase::OwnerLifetimeObserver : public WebContentsObserver { |
| Destroy(); |
| } |
| + void DidToggleFullscreenModeForTab(bool entered_fullscreen) override { |
| + if (destroyed_) |
| + return; |
| + |
| + is_fullscreen_ = entered_fullscreen; |
| + guest_->EmbedderFullscreenToggled(is_fullscreen_); |
| + } |
| + |
| + void MainFrameWasResized(bool width_changed) override { |
| + if (destroyed_) |
|
Fady Samuel
2015/03/13 01:43:06
Exit early if the embedder doesn't have a delegate
lazyboy
2015/03/13 16:27:02
In theory GetDelegate() can return NULL, so adding
|
| + return; |
| + |
| + bool current_fullscreen = |
| + web_contents()->GetDelegate()->IsFullscreenForTabOrPending( |
| + web_contents()); |
| + if (is_fullscreen_ && !current_fullscreen) { |
| + is_fullscreen_ = false; |
| + guest_->EmbedderFullscreenToggled(is_fullscreen_); |
| + } |
| + } |
| + |
| private: |
| + bool is_fullscreen_; |
| bool destroyed_; |
| GuestViewBase* guest_; |
| @@ -115,7 +139,7 @@ class GuestViewBase::OwnerLifetimeObserver : public WebContentsObserver { |
| guest_->Destroy(); |
| } |
| - DISALLOW_COPY_AND_ASSIGN(OwnerLifetimeObserver); |
| + DISALLOW_COPY_AND_ASSIGN(OwnerContentsObserver); |
| }; |
| // This observer ensures that the GuestViewBase destroys itself when its |
| @@ -209,8 +233,8 @@ void GuestViewBase::InitWithWebContents( |
| // At this point, we have just created the guest WebContents, we need to add |
| // an observer to the owner WebContents. This observer will be responsible |
| // for destroying the guest WebContents if the owner goes away. |
| - owner_lifetime_observer_.reset( |
| - new OwnerLifetimeObserver(this, owner_web_contents_)); |
| + owner_contents_observer_.reset( |
| + new OwnerContentsObserver(this, owner_web_contents_)); |
| WebContentsObserver::Observe(guest_web_contents); |
| guest_web_contents->SetDelegate(this); |
| @@ -490,12 +514,12 @@ void GuestViewBase::WillAttach(content::WebContents* embedder_web_contents, |
| int element_instance_id, |
| bool is_full_page_plugin) { |
| if (owner_web_contents_ != embedder_web_contents) { |
| - DCHECK_EQ(owner_lifetime_observer_->web_contents(), owner_web_contents_); |
| + DCHECK_EQ(owner_contents_observer_->web_contents(), owner_web_contents_); |
| // Stop tracking the old embedder's zoom level. |
| StopTrackingEmbedderZoomLevel(); |
| owner_web_contents_ = embedder_web_contents; |
| - owner_lifetime_observer_.reset( |
| - new OwnerLifetimeObserver(this, embedder_web_contents)); |
| + owner_contents_observer_.reset( |
| + new OwnerContentsObserver(this, embedder_web_contents)); |
| } |
| // Start tracking the new embedder's zoom level. |