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 5f9ab4e8748d8a81aa95639eb3a024aebbba0f8e..080bfb8f80d3c2467fd6caf2a52eb2f26ff8340d 100644 |
--- a/chrome/browser/ui/fullscreen/fullscreen_controller.cc |
+++ b/chrome/browser/ui/fullscreen/fullscreen_controller.cc |
@@ -24,6 +24,10 @@ |
#include "content/public/browser/user_metrics.h" |
#include "content/public/browser/web_contents.h" |
+#if defined(OS_MACOSX) |
+#include "base/mac/mac_util.h" |
+#endif |
+ |
using content::RenderViewHost; |
using content::UserMetricsAction; |
using content::WebContents; |
@@ -83,9 +87,6 @@ void FullscreenController::ToggleFullscreenModeForTab(WebContents* web_contents, |
#endif |
bool in_browser_or_tab_fullscreen_mode = window_->IsFullscreen(); |
-#if defined(OS_MACOSX) |
- in_browser_or_tab_fullscreen_mode |= window_->InPresentationMode(); |
-#endif |
if (enter_fullscreen) { |
SetFullscreenedTab(web_contents); |
@@ -252,9 +253,7 @@ void FullscreenController::WindowFullscreenStateChanged() { |
reentrant_window_state_change_call_check_ = true; |
bool exiting_fullscreen = !window_->IsFullscreen(); |
-#if defined(OS_MACOSX) |
- exiting_fullscreen &= !window_->InPresentationMode(); |
-#endif |
+ |
PostFullscreenChangeNotification(!exiting_fullscreen); |
if (exiting_fullscreen) |
NotifyTabOfExitIfNecessary(); |
@@ -275,10 +274,15 @@ bool FullscreenController::HandleUserPressedEscape() { |
} |
void FullscreenController::ExitTabOrBrowserFullscreenToPreviousState() { |
- if (IsFullscreenForTabOrPending()) |
+ if (IsFullscreenForTabOrPending()) { |
ExitTabFullscreenOrMouseLockIfNecessary(); |
- else if (IsFullscreenForBrowser()) |
+ } else if (IsFullscreenForBrowser()) { |
+#if defined(OS_MACOSX) |
+ TogglePresentationMode(); |
+#else |
ToggleFullscreenMode(); |
+#endif |
+ } |
} |
void FullscreenController::OnAcceptFullscreenPermission() { |
@@ -501,6 +505,12 @@ void FullscreenController::ToggleFullscreenModeInternal(bool for_tab) { |
#endif |
toggled_into_fullscreen_ = !window_->IsFullscreen(); |
+#if defined(OS_MACOSX) |
+ // When a Mac user requests a toggle they may be transitioning from |
+ // FullscreenWithoutChrome to FullscreenWithChrome. |
+ if (!IsFullscreenForTabOrPending()) |
+ toggled_into_fullscreen_ |= window_->IsFullscreenWithoutChrome(); |
+#endif |
// In kiosk mode, we always want to be fullscreen. When the browser first |
// starts we're not yet fullscreen, so let the initial toggle go through. |
@@ -519,19 +529,21 @@ void FullscreenController::ToggleFullscreenModeInternal(bool for_tab) { |
content::RecordAction(UserMetricsAction("ToggleFullscreen")); |
} |
if (toggled_into_fullscreen_) { |
+#if defined(OS_MACOSX) |
+ CHECK(!for_tab); // EnterFullscreenWithChrome invalid for tab fullscreen. |
+ CHECK(base::mac::IsOSLionOrLater()); |
+ window_->EnterFullscreenWithChrome(); |
+#else |
window_->EnterFullscreen(url, GetFullscreenExitBubbleType()); |
+#endif |
} else { |
#if defined(OS_MACOSX) |
// Mac windows report a state change instantly, and so we must also clear |
// tab_caused_fullscreen_ to match them else other logic using |
// tab_caused_fullscreen_ will be incorrect. |
NotifyTabOfExitIfNecessary(); |
- |
- if (window_->InPresentationMode() && !for_tab) |
- window_->ExitPresentationMode(); |
- else |
#endif |
- window_->ExitFullscreen(); |
+ window_->ExitFullscreen(); |
extension_caused_fullscreen_ = GURL(); |
} |
UpdateFullscreenExitBubbleContent(); |
@@ -544,15 +556,15 @@ void FullscreenController::ToggleFullscreenModeInternal(bool for_tab) { |
#if defined(OS_MACOSX) |
void FullscreenController::TogglePresentationModeInternal(bool for_tab) { |
- toggled_into_fullscreen_ = !window_->InPresentationMode(); |
+ toggled_into_fullscreen_ = !window_->IsFullscreenWithoutChrome(); |
GURL url; |
if (for_tab) { |
url = chrome::GetActiveWebContents(browser_)->GetURL(); |
tab_fullscreen_accepted_ = toggled_into_fullscreen_ && |
GetFullscreenSetting(url) == CONTENT_SETTING_ALLOW; |
} |
- if (!window_->InPresentationMode()) { |
- window_->EnterPresentationMode(url, GetFullscreenExitBubbleType()); |
+ if (!window_->IsFullscreenWithoutChrome()) { |
+ window_->EnterFullscreen(url, GetFullscreenExitBubbleType()); |
} else { |
window_->ExitFullscreen(); |