summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/fullscreen
diff options
context:
space:
mode:
authorscheib@chromium.org <scheib@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-03 23:20:53 +0000
committerscheib@chromium.org <scheib@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-03 23:20:53 +0000
commit026f1a7cdb0bb16b49afc16292a9242f52262045 (patch)
treebacc19892968bfc3715ee73b14bb3fc954e45356 /chrome/browser/ui/fullscreen
parent56dfb9046003f3cdcd3a1b161b2551c5fe48af38 (diff)
downloadchromium_src-026f1a7cdb0bb16b49afc16292a9242f52262045.zip
chromium_src-026f1a7cdb0bb16b49afc16292a9242f52262045.tar.gz
chromium_src-026f1a7cdb0bb16b49afc16292a9242f52262045.tar.bz2
Fix tab-fullscreen exit behavior (exit bubble link & on Mac).
Primarily this change fixes Issue 126911: Fullscreen exit link incorrectly exits browser full screen. However, testing this was onerous without also fixing Issue 155650: IsFullscreenForBrowser() == FALSE when in Browser and Tab fullscreen on Mac, and fixing that also resolves Issue 155642: Exiting HTML5 Fullscreen incorrectly also exits Browser fullscreen. BUG=126911, 155650, 155642 TEST=At minimum, exiting fullscreen via the exit link on the bubble, and also after initiating HTML fullscreen after first being in each of the Mac fullscreen states (Presentation and Fullscreen). ALSO, manual testing on Mac Snow Leopard (10.6) or earlier (as during development it was not tested there). Attempt all fullscreen transitions possible on Mac (non fullscreen, presentation mode, fullscreen mode, tab fullscreen). Tab fullscreen can be triggered with this test page: http://scheib.github.com/HTMLMisc/PointerLockAndFullscreen.html TBR=ben@chromium.org for code simplification in chrome/browser/ui/cocoa and chrome/browser/automation Review URL: https://chromiumcodereview.appspot.com/11575017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@175045 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/fullscreen')
-rw-r--r--chrome/browser/ui/fullscreen/fullscreen_controller.cc80
-rw-r--r--chrome/browser/ui/fullscreen/fullscreen_controller.h9
-rw-r--r--chrome/browser/ui/fullscreen/fullscreen_controller_state_interactive_browsertest.cc24
-rw-r--r--chrome/browser/ui/fullscreen/fullscreen_controller_state_test.cc78
-rw-r--r--chrome/browser/ui/fullscreen/fullscreen_controller_state_test.h6
-rw-r--r--chrome/browser/ui/fullscreen/fullscreen_controller_state_unittest.cc24
-rw-r--r--chrome/browser/ui/fullscreen/fullscreen_controller_test.cc10
-rw-r--r--chrome/browser/ui/fullscreen/fullscreen_exit_bubble.cc8
8 files changed, 172 insertions, 67 deletions
diff --git a/chrome/browser/ui/fullscreen/fullscreen_controller.cc b/chrome/browser/ui/fullscreen/fullscreen_controller.cc
index 380ecb1..5f9ab4e 100644
--- a/chrome/browser/ui/fullscreen/fullscreen_controller.cc
+++ b/chrome/browser/ui/fullscreen/fullscreen_controller.cc
@@ -82,11 +82,9 @@ void FullscreenController::ToggleFullscreenModeForTab(WebContents* web_contents,
return;
#endif
- bool in_browser_or_tab_fullscreen_mode;
+ bool in_browser_or_tab_fullscreen_mode = window_->IsFullscreen();
#if defined(OS_MACOSX)
- in_browser_or_tab_fullscreen_mode = window_->InPresentationMode();
-#else
- in_browser_or_tab_fullscreen_mode = window_->IsFullscreen();
+ in_browser_or_tab_fullscreen_mode |= window_->InPresentationMode();
#endif
if (enter_fullscreen) {
@@ -253,11 +251,9 @@ void FullscreenController::OnTabClosing(WebContents* web_contents) {
void FullscreenController::WindowFullscreenStateChanged() {
reentrant_window_state_change_call_check_ = true;
- bool exiting_fullscreen;
+ bool exiting_fullscreen = !window_->IsFullscreen();
#if defined(OS_MACOSX)
- exiting_fullscreen = !window_->InPresentationMode();
-#else
- exiting_fullscreen = !window_->IsFullscreen();
+ exiting_fullscreen &= !window_->InPresentationMode();
#endif
PostFullscreenChangeNotification(!exiting_fullscreen);
if (exiting_fullscreen)
@@ -278,9 +274,15 @@ bool FullscreenController::HandleUserPressedEscape() {
return false;
}
-void FullscreenController::OnAcceptFullscreenPermission(
- const GURL& url,
- FullscreenExitBubbleType bubble_type) {
+void FullscreenController::ExitTabOrBrowserFullscreenToPreviousState() {
+ if (IsFullscreenForTabOrPending())
+ ExitTabFullscreenOrMouseLockIfNecessary();
+ else if (IsFullscreenForBrowser())
+ ToggleFullscreenMode();
+}
+
+void FullscreenController::OnAcceptFullscreenPermission() {
+ FullscreenExitBubbleType bubble_type = GetFullscreenExitBubbleType();
bool mouse_lock = false;
bool fullscreen = false;
fullscreen_bubble::PermissionRequestedByType(bubble_type, &fullscreen,
@@ -289,6 +291,8 @@ void FullscreenController::OnAcceptFullscreenPermission(
DCHECK(!(mouse_lock && IsMouseLocked()));
HostContentSettingsMap* settings_map = profile_->GetHostContentSettingsMap();
+
+ GURL url = GetFullscreenExitBubbleURL();
ContentSettingsPattern pattern = ContentSettingsPattern::FromURL(url);
if (mouse_lock && !IsMouseLocked()) {
@@ -324,18 +328,11 @@ void FullscreenController::OnAcceptFullscreenPermission(
UpdateFullscreenExitBubbleContent();
}
-void FullscreenController::OnDenyFullscreenPermission(
- FullscreenExitBubbleType bubble_type) {
- bool mouse_lock = false;
- bool fullscreen = false;
- fullscreen_bubble::PermissionRequestedByType(bubble_type, &fullscreen,
- &mouse_lock);
- DCHECK(fullscreened_tab_ || mouse_lock_tab_);
- DCHECK(!(fullscreen && tab_fullscreen_accepted_));
- DCHECK(!(mouse_lock && IsMouseLocked()));
+void FullscreenController::OnDenyFullscreenPermission() {
+ if (!fullscreened_tab_ && !mouse_lock_tab_)
+ return;
- if (mouse_lock) {
- DCHECK(IsMouseLockRequested());
+ if (IsMouseLockRequested()) {
mouse_lock_state_ = MOUSELOCK_NOT_REQUESTED;
if (mouse_lock_tab_)
mouse_lock_tab_->GotResponseToLockMouseRequest(false);
@@ -345,11 +342,11 @@ void FullscreenController::OnDenyFullscreenPermission(
// UpdateFullscreenExitBubbleContent() must be called, but to avoid
// duplicate calls we do so only if not adjusting the fullscreen state
// below, which also calls UpdateFullscreenExitBubbleContent().
- if (!fullscreen)
+ if (!IsFullscreenForTabOrPending())
UpdateFullscreenExitBubbleContent();
}
- if (fullscreen)
+ if (IsFullscreenForTabOrPending())
ExitTabFullscreenOrMouseLockIfNecessary();
}
@@ -376,6 +373,17 @@ void FullscreenController::Observe(int type,
}
}
+GURL FullscreenController::GetFullscreenExitBubbleURL() const {
+ if (fullscreened_tab_)
+ return fullscreened_tab_->GetURL();
+ else if (mouse_lock_tab_)
+ return mouse_lock_tab_->GetURL();
+ else if (!extension_caused_fullscreen_.is_empty())
+ return extension_caused_fullscreen_;
+ else
+ return GURL();
+}
+
FullscreenExitBubbleType FullscreenController::GetFullscreenExitBubbleType()
const {
// In kiosk mode we always want to be fullscreen and do not want to show
@@ -514,6 +522,11 @@ void FullscreenController::ToggleFullscreenModeInternal(bool for_tab) {
window_->EnterFullscreen(url, GetFullscreenExitBubbleType());
} 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
@@ -538,10 +551,16 @@ void FullscreenController::TogglePresentationModeInternal(bool for_tab) {
tab_fullscreen_accepted_ = toggled_into_fullscreen_ &&
GetFullscreenSetting(url) == CONTENT_SETTING_ALLOW;
}
- if (!window_->InPresentationMode())
+ if (!window_->InPresentationMode()) {
window_->EnterPresentationMode(url, GetFullscreenExitBubbleType());
- else
+ } else {
window_->ExitFullscreen();
+
+ // 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();
+ }
UpdateFullscreenExitBubbleContent();
// WindowFullscreenStateChanged will be called by BrowserWindowController
@@ -567,14 +586,7 @@ void FullscreenController::ExitTabFullscreenOrMouseLockIfNecessary() {
}
void FullscreenController::UpdateFullscreenExitBubbleContent() {
- GURL url;
- if (fullscreened_tab_)
- url = fullscreened_tab_->GetURL();
- else if (mouse_lock_tab_)
- url = mouse_lock_tab_->GetURL();
- else if (!extension_caused_fullscreen_.is_empty())
- url = extension_caused_fullscreen_;
-
+ GURL url = GetFullscreenExitBubbleURL();
FullscreenExitBubbleType bubble_type = GetFullscreenExitBubbleType();
// If bubble displays buttons, unlock mouse to allow pressing them.
diff --git a/chrome/browser/ui/fullscreen/fullscreen_controller.h b/chrome/browser/ui/fullscreen/fullscreen_controller.h
index 757774e..6b094f0 100644
--- a/chrome/browser/ui/fullscreen/fullscreen_controller.h
+++ b/chrome/browser/ui/fullscreen/fullscreen_controller.h
@@ -101,9 +101,9 @@ class FullscreenController : public content::NotificationObserver {
bool HandleUserPressedEscape();
// Called by platform FullscreenExitBubble.
- void OnAcceptFullscreenPermission(const GURL& url,
- FullscreenExitBubbleType bubble_type);
- void OnDenyFullscreenPermission(FullscreenExitBubbleType bubble_type);
+ void ExitTabOrBrowserFullscreenToPreviousState();
+ void OnAcceptFullscreenPermission();
+ void OnDenyFullscreenPermission();
// Called by Browser::LostMouseLock.
void LostMouseLock();
@@ -113,6 +113,9 @@ class FullscreenController : public content::NotificationObserver {
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
+ // Bubble Content ////////////////////////////////////////////////////////////
+
+ GURL GetFullscreenExitBubbleURL() const;
FullscreenExitBubbleType GetFullscreenExitBubbleType() const;
private:
diff --git a/chrome/browser/ui/fullscreen/fullscreen_controller_state_interactive_browsertest.cc b/chrome/browser/ui/fullscreen/fullscreen_controller_state_interactive_browsertest.cc
index 1cc5739..0664d8e 100644
--- a/chrome/browser/ui/fullscreen/fullscreen_controller_state_interactive_browsertest.cc
+++ b/chrome/browser/ui/fullscreen/fullscreen_controller_state_interactive_browsertest.cc
@@ -122,6 +122,9 @@ TEST_EVENT(STATE_NORMAL, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_NORMAL, METRO_SNAP_TRUE);
TEST_EVENT(STATE_NORMAL, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_NORMAL, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_NORMAL, BUBBLE_ALLOW);
+TEST_EVENT(STATE_NORMAL, BUBBLE_DENY);
TEST_EVENT(STATE_NORMAL, WINDOW_CHANGE);
TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, TOGGLE_FULLSCREEN);
@@ -131,6 +134,9 @@ TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, METRO_SNAP_TRUE);
TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_ALLOW);
+TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_DENY);
TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, WINDOW_CHANGE);
#if defined(OS_WIN)
@@ -139,6 +145,9 @@ TEST_EVENT(STATE_METRO_SNAP, TAB_FULLSCREEN_TRUE);
TEST_EVENT(STATE_METRO_SNAP, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_METRO_SNAP, METRO_SNAP_TRUE);
TEST_EVENT(STATE_METRO_SNAP, METRO_SNAP_FALSE);
+TEST_EVENT(STATE_METRO_SNAP, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_METRO_SNAP, BUBBLE_ALLOW);
+TEST_EVENT(STATE_METRO_SNAP, BUBBLE_DENY);
TEST_EVENT(STATE_METRO_SNAP, WINDOW_CHANGE);
#endif
@@ -149,6 +158,9 @@ TEST_EVENT(STATE_TAB_FULLSCREEN, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_TAB_FULLSCREEN, METRO_SNAP_TRUE);
TEST_EVENT(STATE_TAB_FULLSCREEN, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_TAB_FULLSCREEN, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_TAB_FULLSCREEN, BUBBLE_ALLOW);
+TEST_EVENT(STATE_TAB_FULLSCREEN, BUBBLE_DENY);
TEST_EVENT(STATE_TAB_FULLSCREEN, WINDOW_CHANGE);
TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, TOGGLE_FULLSCREEN);
@@ -158,6 +170,9 @@ TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, METRO_SNAP_TRUE);
TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, BUBBLE_ALLOW);
+TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, BUBBLE_DENY);
TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, WINDOW_CHANGE);
TEST_EVENT(STATE_TO_NORMAL, TOGGLE_FULLSCREEN);
@@ -167,6 +182,9 @@ TEST_EVENT(STATE_TO_NORMAL, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_TO_NORMAL, METRO_SNAP_TRUE);
TEST_EVENT(STATE_TO_NORMAL, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_TO_NORMAL, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_TO_NORMAL, BUBBLE_ALLOW);
+TEST_EVENT(STATE_TO_NORMAL, BUBBLE_DENY);
TEST_EVENT(STATE_TO_NORMAL, WINDOW_CHANGE);
TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, TOGGLE_FULLSCREEN);
@@ -176,6 +194,9 @@ TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, METRO_SNAP_TRUE);
TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_ALLOW);
+TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_DENY);
TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, WINDOW_CHANGE);
TEST_EVENT(STATE_TO_TAB_FULLSCREEN, TOGGLE_FULLSCREEN);
@@ -185,6 +206,9 @@ TEST_EVENT(STATE_TO_TAB_FULLSCREEN, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_TO_TAB_FULLSCREEN, METRO_SNAP_TRUE);
TEST_EVENT(STATE_TO_TAB_FULLSCREEN, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_TO_TAB_FULLSCREEN, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_TO_TAB_FULLSCREEN, BUBBLE_ALLOW);
+TEST_EVENT(STATE_TO_TAB_FULLSCREEN, BUBBLE_DENY);
TEST_EVENT(STATE_TO_TAB_FULLSCREEN, WINDOW_CHANGE);
// Specific one-off tests for known issues:
diff --git a/chrome/browser/ui/fullscreen/fullscreen_controller_state_test.cc b/chrome/browser/ui/fullscreen/fullscreen_controller_state_test.cc
index 09283b4..3a91341 100644
--- a/chrome/browser/ui/fullscreen/fullscreen_controller_state_test.cc
+++ b/chrome/browser/ui/fullscreen/fullscreen_controller_state_test.cc
@@ -30,6 +30,9 @@ FullscreenControllerStateTest::FullscreenControllerStateTest()
STATE_METRO_SNAP, // Event METRO_SNAP_TRUE
STATE_NORMAL, // Event METRO_SNAP_FALSE
#endif
+ STATE_NORMAL, // Event BUBBLE_EXIT_LINK
+ STATE_NORMAL, // Event BUBBLE_ALLOW
+ STATE_NORMAL, // Event BUBBLE_DENY
STATE_NORMAL, // Event WINDOW_CHANGE
},
{ // STATE_BROWSER_FULLSCREEN_NO_CHROME:
@@ -40,6 +43,9 @@ FullscreenControllerStateTest::FullscreenControllerStateTest()
STATE_METRO_SNAP, // Event METRO_SNAP_TRUE
STATE_BROWSER_FULLSCREEN_NO_CHROME, // Event METRO_SNAP_FALSE
#endif
+ STATE_TO_NORMAL, // Event BUBBLE_EXIT_LINK
+ STATE_BROWSER_FULLSCREEN_NO_CHROME, // Event BUBBLE_ALLOW
+ STATE_BROWSER_FULLSCREEN_NO_CHROME, // Event BUBBLE_DENY
STATE_BROWSER_FULLSCREEN_NO_CHROME, // Event WINDOW_CHANGE
},
#if defined(OS_WIN)
@@ -49,6 +55,9 @@ FullscreenControllerStateTest::FullscreenControllerStateTest()
STATE_METRO_SNAP, // Event TAB_FULLSCREEN_FALSE
STATE_METRO_SNAP, // Event METRO_SNAP_TRUE
STATE_NORMAL, // Event METRO_SNAP_FALSE
+ STATE_METRO_SNAP, // Event BUBBLE_EXIT_LINK
+ STATE_METRO_SNAP, // Event BUBBLE_ALLOW
+ STATE_METRO_SNAP, // Event BUBBLE_DENY
STATE_METRO_SNAP, // Event WINDOW_CHANGE
},
#endif
@@ -60,21 +69,22 @@ FullscreenControllerStateTest::FullscreenControllerStateTest()
STATE_METRO_SNAP, // Event METRO_SNAP_TRUE
STATE_TAB_FULLSCREEN, // Event METRO_SNAP_FALSE
#endif
+ STATE_TO_NORMAL, // Event BUBBLE_EXIT_LINK
+ STATE_TAB_FULLSCREEN, // Event BUBBLE_ALLOW
+ STATE_TO_NORMAL, // Event BUBBLE_DENY
STATE_TAB_FULLSCREEN, // Event WINDOW_CHANGE
},
{ // STATE_TAB_BROWSER_FULLSCREEN:
STATE_TO_NORMAL, // Event TOGGLE_FULLSCREEN
STATE_TAB_BROWSER_FULLSCREEN, // Event TAB_FULLSCREEN_TRUE
-#if defined(OS_MACOSX)
- // TODO(scheib) Mac exits browser mode too http://crbug.com/155642
- STATE_TO_NORMAL, // Event TAB_FULLSCREEN_FALSE
-#else
STATE_BROWSER_FULLSCREEN_NO_CHROME, // Event TAB_FULLSCREEN_FALSE
-#endif
#if defined(OS_WIN)
STATE_METRO_SNAP, // Event METRO_SNAP_TRUE
STATE_TAB_BROWSER_FULLSCREEN, // Event METRO_SNAP_FALSE
#endif
+ STATE_BROWSER_FULLSCREEN_NO_CHROME, // Event BUBBLE_EXIT_LINK
+ STATE_TAB_BROWSER_FULLSCREEN, // Event BUBBLE_ALLOW
+ STATE_BROWSER_FULLSCREEN_NO_CHROME, // Event BUBBLE_DENY
STATE_TAB_BROWSER_FULLSCREEN, // Event WINDOW_CHANGE
},
// STATE_TO_NORMAL:
@@ -86,6 +96,9 @@ FullscreenControllerStateTest::FullscreenControllerStateTest()
STATE_METRO_SNAP, // Event METRO_SNAP_TRUE
STATE_TO_NORMAL, // Event METRO_SNAP_FALSE
#endif
+ STATE_TO_NORMAL, // Event BUBBLE_EXIT_LINK
+ STATE_TO_NORMAL, // Event BUBBLE_ALLOW
+ STATE_TO_NORMAL, // Event BUBBLE_DENY
STATE_NORMAL, // Event WINDOW_CHANGE
},
// STATE_TO_BROWSER_FULLSCREEN_NO_CHROME:
@@ -97,18 +110,44 @@ FullscreenControllerStateTest::FullscreenControllerStateTest()
STATE_METRO_SNAP, // Event METRO_SNAP_TRUE
STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, // Event METRO_SNAP_FALSE
#endif
+#if defined(OS_MACOSX)
+ // Mac window reports fullscreen immediately and an exit triggers exit.
+ STATE_TO_NORMAL, // Event BUBBLE_EXIT_LINK
+#else
+ STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, // Event BUBBLE_EXIT_LINK
+#endif
+ STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, // Event BUBBLE_ALLOW
+ STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, // Event BUBBLE_DENY
STATE_BROWSER_FULLSCREEN_NO_CHROME, // Event WINDOW_CHANGE
},
// STATE_TO_TAB_FULLSCREEN:
{ // TODO(scheib) Should be a route to TAB_BROWSER http://crbug.com/154196
STATE_TO_TAB_FULLSCREEN, // Event TOGGLE_FULLSCREEN
STATE_TO_TAB_FULLSCREEN, // Event TAB_FULLSCREEN_TRUE
+#if defined(OS_MACOSX)
+ // Mac runs as expected due to a forced NotifyTabOfExitIfNecessary();
+ STATE_TO_NORMAL, // Event TAB_FULLSCREEN_FALSE
+#else
// TODO(scheib) Should be a route back to NORMAL. http://crbug.com/154196
STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, // Event TAB_FULLSCREEN_FALSE
+#endif
#if defined(OS_WIN)
STATE_METRO_SNAP, // Event METRO_SNAP_TRUE
STATE_TO_TAB_FULLSCREEN, // Event METRO_SNAP_FALSE
#endif
+#if defined(OS_MACOSX)
+ // Mac window reports fullscreen immediately and an exit triggers exit.
+ STATE_TO_NORMAL, // Event BUBBLE_EXIT_LINK
+#else
+ STATE_TO_TAB_FULLSCREEN, // Event BUBBLE_EXIT_LINK
+#endif
+ STATE_TO_TAB_FULLSCREEN, // Event BUBBLE_ALLOW
+#if defined(OS_MACOSX)
+ // Mac window reports fullscreen immediately and an exit triggers exit.
+ STATE_TO_NORMAL, // Event BUBBLE_DENY
+#else
+ STATE_TO_TAB_FULLSCREEN, // Event BUBBLE_DENY
+#endif
STATE_TAB_FULLSCREEN, // Event WINDOW_CHANGE
},
};
@@ -183,6 +222,12 @@ const char* FullscreenControllerStateTest::GetEventString(Event event) {
case METRO_SNAP_FALSE:
return "METRO_SNAP_FALSE";
#endif
+ case BUBBLE_EXIT_LINK:
+ return "BUBBLE_EXIT_LINK";
+ case BUBBLE_ALLOW:
+ return "BUBBLE_ALLOW";
+ case BUBBLE_DENY:
+ return "BUBBLE_DENY";
case WINDOW_CHANGE:
return "WINDOW_CHANGE";
case EVENT_INVALID:
@@ -266,6 +311,15 @@ bool FullscreenControllerStateTest::InvokeEvent(Event event) {
GetFullscreenController()->SetMetroSnapMode(false);
break;
#endif
+ case BUBBLE_EXIT_LINK:
+ GetFullscreenController()->ExitTabOrBrowserFullscreenToPreviousState();
+ break;
+ case BUBBLE_ALLOW:
+ GetFullscreenController()->OnAcceptFullscreenPermission();
+ break;
+ case BUBBLE_DENY:
+ GetFullscreenController()->OnDenyFullscreenPermission();
+ break;
case WINDOW_CHANGE:
ChangeWindowFullscreenState();
break;
@@ -340,23 +394,11 @@ void FullscreenControllerStateTest::VerifyWindowState() {
break;
case STATE_TAB_BROWSER_FULLSCREEN:
#if defined(OS_MACOSX)
- EXPECT_TRUE(GetBrowser()->window()->InPresentationMode())
+ EXPECT_FALSE(GetBrowser()->window()->InPresentationMode())
<< GetAndClearDebugLog();
#endif
-#if defined(OS_MACOSX)
- // TODO(scheib) Mac is reporting incorrect IsFullscreenForBrowser().
- // e.g. in FullscreenControllerStateTest.
- // STATE_BROWSER_FULLSCREEN_NO_CHROME__TAB_FULLSCREEN_TRUE
- // At the end of ToggleFullscreenModeForTab
- // tab_caused_fullscreen_ has incorrectly been set to true even
- // though controller was already in browser fullscreen.
- // http://crbug.com/155650
- EXPECT_FALSE(GetFullscreenController()->IsFullscreenForBrowser())
- << GetAndClearDebugLog();
-#else
EXPECT_TRUE(GetFullscreenController()->IsFullscreenForBrowser())
<< GetAndClearDebugLog();
-#endif
EXPECT_TRUE(GetFullscreenController()->IsFullscreenForTabOrPending())
<< GetAndClearDebugLog();
EXPECT_FALSE(GetFullscreenController()->IsInMetroSnapMode())
diff --git a/chrome/browser/ui/fullscreen/fullscreen_controller_state_test.h b/chrome/browser/ui/fullscreen/fullscreen_controller_state_test.h
index 14dc0de..ca52460 100644
--- a/chrome/browser/ui/fullscreen/fullscreen_controller_state_test.h
+++ b/chrome/browser/ui/fullscreen/fullscreen_controller_state_test.h
@@ -54,6 +54,12 @@ class FullscreenControllerStateTest {
// FullscreenController::SetMetroSnapMode(flase)
METRO_SNAP_FALSE,
#endif
+ // FullscreenController::ExitTabOrBrowserFullscreenToPreviousState
+ BUBBLE_EXIT_LINK,
+ // FullscreenController::OnAcceptFullscreenPermission
+ BUBBLE_ALLOW,
+ // FullscreenController::OnDenyFullscreenPermission
+ BUBBLE_DENY,
// FullscreenController::ChangeWindowFullscreenState()
WINDOW_CHANGE,
NUM_EVENTS,
diff --git a/chrome/browser/ui/fullscreen/fullscreen_controller_state_unittest.cc b/chrome/browser/ui/fullscreen/fullscreen_controller_state_unittest.cc
index 160f3b3..82b35a2 100644
--- a/chrome/browser/ui/fullscreen/fullscreen_controller_state_unittest.cc
+++ b/chrome/browser/ui/fullscreen/fullscreen_controller_state_unittest.cc
@@ -340,6 +340,9 @@ TEST_EVENT(STATE_NORMAL, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_NORMAL, METRO_SNAP_TRUE);
TEST_EVENT(STATE_NORMAL, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_NORMAL, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_NORMAL, BUBBLE_ALLOW);
+TEST_EVENT(STATE_NORMAL, BUBBLE_DENY);
TEST_EVENT(STATE_NORMAL, WINDOW_CHANGE);
TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, TOGGLE_FULLSCREEN);
@@ -349,6 +352,9 @@ TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, METRO_SNAP_TRUE);
TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_ALLOW);
+TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_DENY);
TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, WINDOW_CHANGE);
#if defined(OS_WIN)
@@ -357,6 +363,9 @@ TEST_EVENT(STATE_METRO_SNAP, TAB_FULLSCREEN_TRUE);
TEST_EVENT(STATE_METRO_SNAP, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_METRO_SNAP, METRO_SNAP_TRUE);
TEST_EVENT(STATE_METRO_SNAP, METRO_SNAP_FALSE);
+TEST_EVENT(STATE_METRO_SNAP, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_METRO_SNAP, BUBBLE_ALLOW);
+TEST_EVENT(STATE_METRO_SNAP, BUBBLE_DENY);
TEST_EVENT(STATE_METRO_SNAP, WINDOW_CHANGE);
#endif
@@ -367,6 +376,9 @@ TEST_EVENT(STATE_TAB_FULLSCREEN, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_TAB_FULLSCREEN, METRO_SNAP_TRUE);
TEST_EVENT(STATE_TAB_FULLSCREEN, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_TAB_FULLSCREEN, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_TAB_FULLSCREEN, BUBBLE_ALLOW);
+TEST_EVENT(STATE_TAB_FULLSCREEN, BUBBLE_DENY);
TEST_EVENT(STATE_TAB_FULLSCREEN, WINDOW_CHANGE);
TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, TOGGLE_FULLSCREEN);
@@ -376,6 +388,9 @@ TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, METRO_SNAP_TRUE);
TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, BUBBLE_ALLOW);
+TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, BUBBLE_DENY);
TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, WINDOW_CHANGE);
TEST_EVENT(STATE_TO_NORMAL, TOGGLE_FULLSCREEN);
@@ -385,6 +400,9 @@ TEST_EVENT(STATE_TO_NORMAL, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_TO_NORMAL, METRO_SNAP_TRUE);
TEST_EVENT(STATE_TO_NORMAL, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_TO_NORMAL, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_TO_NORMAL, BUBBLE_ALLOW);
+TEST_EVENT(STATE_TO_NORMAL, BUBBLE_DENY);
TEST_EVENT(STATE_TO_NORMAL, WINDOW_CHANGE);
TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, TOGGLE_FULLSCREEN);
@@ -394,6 +412,9 @@ TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, METRO_SNAP_TRUE);
TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_ALLOW);
+TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_DENY);
TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, WINDOW_CHANGE);
TEST_EVENT(STATE_TO_TAB_FULLSCREEN, TOGGLE_FULLSCREEN);
@@ -403,6 +424,9 @@ TEST_EVENT(STATE_TO_TAB_FULLSCREEN, TAB_FULLSCREEN_FALSE);
TEST_EVENT(STATE_TO_TAB_FULLSCREEN, METRO_SNAP_TRUE);
TEST_EVENT(STATE_TO_TAB_FULLSCREEN, METRO_SNAP_FALSE);
#endif
+TEST_EVENT(STATE_TO_TAB_FULLSCREEN, BUBBLE_EXIT_LINK);
+TEST_EVENT(STATE_TO_TAB_FULLSCREEN, BUBBLE_ALLOW);
+TEST_EVENT(STATE_TO_TAB_FULLSCREEN, BUBBLE_DENY);
TEST_EVENT(STATE_TO_TAB_FULLSCREEN, WINDOW_CHANGE);
// Specific one-off tests for known issues:
diff --git a/chrome/browser/ui/fullscreen/fullscreen_controller_test.cc b/chrome/browser/ui/fullscreen/fullscreen_controller_test.cc
index 7be9a0b..1e0df0f 100644
--- a/chrome/browser/ui/fullscreen/fullscreen_controller_test.cc
+++ b/chrome/browser/ui/fullscreen/fullscreen_controller_test.cc
@@ -77,17 +77,11 @@ bool FullscreenControllerTest::IsFullscreenBubbleDisplayingButtons() {
}
void FullscreenControllerTest::AcceptCurrentFullscreenOrMouseLockRequest() {
- WebContents* fullscreen_tab = chrome::GetActiveWebContents(browser());
- FullscreenExitBubbleType type =
- browser()->fullscreen_controller()->GetFullscreenExitBubbleType();
- browser()->fullscreen_controller()->OnAcceptFullscreenPermission(
- fullscreen_tab->GetURL(), type);
+ browser()->fullscreen_controller()->OnAcceptFullscreenPermission();
}
void FullscreenControllerTest::DenyCurrentFullscreenOrMouseLockRequest() {
- FullscreenExitBubbleType type =
- browser()->fullscreen_controller()->GetFullscreenExitBubbleType();
- browser()->fullscreen_controller()->OnDenyFullscreenPermission(type);
+ browser()->fullscreen_controller()->OnDenyFullscreenPermission();
}
void FullscreenControllerTest::GoBack() {
diff --git a/chrome/browser/ui/fullscreen/fullscreen_exit_bubble.cc b/chrome/browser/ui/fullscreen/fullscreen_exit_bubble.cc
index 5a8ab18..ad8e3d3 100644
--- a/chrome/browser/ui/fullscreen/fullscreen_exit_bubble.cc
+++ b/chrome/browser/ui/fullscreen/fullscreen_exit_bubble.cc
@@ -110,16 +110,16 @@ void FullscreenExitBubble::CheckMousePosition() {
}
void FullscreenExitBubble::ToggleFullscreen() {
- chrome::ExecuteCommand(browser_, IDC_FULLSCREEN);
+ browser_->fullscreen_controller()->
+ ExitTabOrBrowserFullscreenToPreviousState();
}
void FullscreenExitBubble::Accept() {
- browser_->fullscreen_controller()->OnAcceptFullscreenPermission(url_,
- bubble_type_);
+ browser_->fullscreen_controller()->OnAcceptFullscreenPermission();
}
void FullscreenExitBubble::Cancel() {
- browser_->fullscreen_controller()->OnDenyFullscreenPermission(bubble_type_);
+ browser_->fullscreen_controller()->OnDenyFullscreenPermission();
}
string16 FullscreenExitBubble::GetCurrentMessageText() const {