Index: chrome/browser/ui/fullscreen/fullscreen_controller.cc |
diff --git a/chrome/browser/ui/fullscreen/fullscreen_controller.cc b/chrome/browser/ui/fullscreen/fullscreen_controller.cc |
index 18eb88e7af8ba017ac3580c0604b644469efab9b..a5ff0288b77c8106bf4f5c1651460d1f5078f99b 100644 |
--- a/chrome/browser/ui/fullscreen/fullscreen_controller.cc |
+++ b/chrome/browser/ui/fullscreen/fullscreen_controller.cc |
@@ -97,6 +97,7 @@ bool FullscreenController::IsFullscreenCausedByTab() const { |
} |
void FullscreenController::ToggleFullscreenModeForTab(WebContents* web_contents, |
+ const GURL& origin, |
bool enter_fullscreen) { |
if (MaybeToggleFullscreenForCapturedTab(web_contents, enter_fullscreen)) { |
// During tab capture of fullscreen-within-tab views, the browser window |
@@ -125,7 +126,7 @@ void FullscreenController::ToggleFullscreenModeForTab(WebContents* web_contents, |
bool in_browser_or_tab_fullscreen_mode = window_->IsFullscreen(); |
if (enter_fullscreen) { |
- SetFullscreenedTab(web_contents); |
+ SetFullscreenedTab(web_contents, origin); |
if (!in_browser_or_tab_fullscreen_mode) { |
// Normal -> Tab Fullscreen. |
state_prior_to_tab_fullscreen_ = STATE_NORMAL; |
@@ -140,12 +141,9 @@ void FullscreenController::ToggleFullscreenModeForTab(WebContents* web_contents, |
state_prior_to_tab_fullscreen_ = STATE_BROWSER_FULLSCREEN_NO_TOOLBAR; |
} |
- // We need to update the fullscreen exit bubble, e.g., going from browser |
- // fullscreen to tab fullscreen will need to show different content. |
- const GURL& url = web_contents->GetURL(); |
if (!tab_fullscreen_accepted_) { |
tab_fullscreen_accepted_ = |
- GetFullscreenSetting(url) == CONTENT_SETTING_ALLOW; |
+ GetFullscreenSetting() == CONTENT_SETTING_ALLOW; |
} |
UpdateFullscreenExitBubbleContent(); |
@@ -455,7 +453,7 @@ void FullscreenController::Observe(int type, |
GURL FullscreenController::GetFullscreenExitBubbleURL() const { |
if (fullscreened_tab_) |
- return fullscreened_tab_->GetURL(); |
+ return GetRequestingOrigin(); |
if (mouse_lock_tab_) |
return mouse_lock_tab_->GetURL(); |
return extension_caused_fullscreen_; |
@@ -533,7 +531,7 @@ void FullscreenController::NotifyFullscreenChange(bool is_fullscreen) { |
void FullscreenController::NotifyTabOfExitIfNecessary() { |
if (fullscreened_tab_) { |
RenderViewHost* rvh = fullscreened_tab_->GetRenderViewHost(); |
- SetFullscreenedTab(NULL); |
+ SetFullscreenedTab(nullptr, GURL()); |
state_prior_to_tab_fullscreen_ = STATE_INVALID; |
tab_fullscreen_accepted_ = false; |
if (rvh) |
@@ -610,9 +608,9 @@ void FullscreenController::EnterFullscreenModeInternal( |
toggled_into_fullscreen_ = true; |
GURL url; |
if (option == TAB) { |
- url = browser_->tab_strip_model()->GetActiveWebContents()->GetURL(); |
+ url = GetRequestingOrigin(); |
tab_fullscreen_accepted_ = |
- GetFullscreenSetting(url) == CONTENT_SETTING_ALLOW; |
+ GetFullscreenSetting() == CONTENT_SETTING_ALLOW; |
} else { |
if (!extension_caused_fullscreen_.is_empty()) |
url = extension_caused_fullscreen_; |
@@ -649,8 +647,10 @@ void FullscreenController::ExitFullscreenModeInternal() { |
UpdateFullscreenExitBubbleContent(); |
} |
-void FullscreenController::SetFullscreenedTab(WebContents* tab) { |
+void FullscreenController::SetFullscreenedTab(WebContents* tab, |
+ const GURL& origin) { |
fullscreened_tab_ = tab; |
+ fullscreened_origin_ = origin; |
UpdateNotificationRegistrations(); |
} |
@@ -661,7 +661,7 @@ void FullscreenController::SetMouseLockTab(WebContents* tab) { |
void FullscreenController::ExitTabFullscreenOrMouseLockIfNecessary() { |
if (IsWindowFullscreenForTabOrPending()) |
- ToggleFullscreenModeForTab(fullscreened_tab_, false); |
+ ToggleFullscreenModeForTab(fullscreened_tab_, GURL(), false); |
else |
NotifyTabOfExitIfNecessary(); |
} |
@@ -678,12 +678,19 @@ void FullscreenController::UpdateFullscreenExitBubbleContent() { |
} |
ContentSetting |
-FullscreenController::GetFullscreenSetting(const GURL& url) const { |
+FullscreenController::GetFullscreenSetting() const { |
+ DCHECK(fullscreened_tab_); |
+ |
+ GURL url = GetRequestingOrigin(); |
+ |
if (IsPrivilegedFullscreenForTab() || url.SchemeIsFile()) |
return CONTENT_SETTING_ALLOW; |
- return profile_->GetHostContentSettingsMap()->GetContentSetting(url, url, |
- CONTENT_SETTINGS_TYPE_FULLSCREEN, std::string()); |
+ return profile_->GetHostContentSettingsMap()->GetContentSetting( |
+ url, |
+ GetEmbeddingOrigin(), |
+ CONTENT_SETTINGS_TYPE_FULLSCREEN, |
+ std::string()); |
} |
ContentSetting |
@@ -754,3 +761,18 @@ void FullscreenController::UnlockMouse() { |
if (mouse_lock_view) |
mouse_lock_view->UnlockMouse(); |
} |
+ |
+GURL FullscreenController::GetRequestingOrigin() const { |
+ DCHECK(fullscreened_tab_); |
+ |
+ if (!fullscreened_origin_.is_empty()) |
+ return fullscreened_origin_; |
+ |
+ return fullscreened_tab_->GetLastCommittedURL(); |
+} |
+ |
+GURL FullscreenController::GetEmbeddingOrigin() const { |
+ DCHECK(fullscreened_tab_); |
+ |
+ return fullscreened_tab_->GetLastCommittedURL(); |
+} |