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

Unified Diff: extensions/browser/guest_view/guest_view_base.cc

Issue 984963004: <webview>: Implement fullscreen permission for html5 element.requestFullscreen() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@tmptmptmp
Patch Set: Clean up for review. Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
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.

Powered by Google App Engine
This is Rietveld 408576698