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

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: Disable one test one test on mac with bug ref, use document.webkitIsFullScreen 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..29718ffedf2dbfbf87e93b1febe276ce7978faf5 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 the guest can change itself accordingly.
+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,32 @@ 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_)
+ return;
+
+ if (!web_contents()->GetDelegate())
+ 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 +142,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 +236,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 +517,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.
« no previous file with comments | « extensions/browser/guest_view/guest_view_base.h ('k') | extensions/browser/guest_view/web_view/web_view_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698