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

Unified Diff: chrome/browser/ui/browser_browsertest.cc

Issue 9702055: Automated tests for full screen & mouse lock M16 features (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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: chrome/browser/ui/browser_browsertest.cc
diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc
index 2a246c11d4a438da0c064f4101ef2beb0d7ad263..0bbe86ec95255f4ba6e62b276250aab24ee8f43b 100644
--- a/chrome/browser/ui/browser_browsertest.cc
+++ b/chrome/browser/ui/browser_browsertest.cc
@@ -14,6 +14,7 @@
#include "base/utf_string_conversions.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/command_updater.h"
+#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/defaults.h"
#include "chrome/browser/extensions/extension_browsertest.h"
#include "chrome/browser/extensions/extension_service.h"
@@ -176,6 +177,15 @@ class TestInterstitialPage : public content::InterstitialPageDelegate {
InterstitialPage* interstitial_page_; // Owns us.
};
+// Fullscreen transition notification observer simplifies test code.
+class FullscreenNotificationObserver : public
yzshen1 2012/03/16 07:33:28 Please move ": public" to the same line as ui_test
scheib 2012/03/16 21:20:03 Done.
+ ui_test_utils::WindowedNotificationObserver {
+ public:
+ FullscreenNotificationObserver() : WindowedNotificationObserver(
+ chrome::NOTIFICATION_FULLSCREEN_CHANGED,
+ content::NotificationService::AllSources()) { }
yzshen1 2012/03/16 07:33:28 nit: no need to have a space between {}.
scheib 2012/03/16 21:20:03 Done.
+};
+
} // namespace
class BrowserTest : public ExtensionBrowserTest {
@@ -211,6 +221,88 @@ class BrowserTest : public ExtensionBrowserTest {
NOTREACHED();
return NULL;
}
+
+ void ToggleTabFullscreen(WebContents* tab, bool enter_fullscreen) {
+ if (browser()->fullscreen_controller_->IsFullscreenForBrowser()) {
+ // Changing tab fullscreen state will not actually change the window
+ // when browser fullscreen is in effect.
+ browser()->ToggleFullscreenModeForTab(tab, enter_fullscreen);
+ } else { // Not in browser fullscreen, expect window to actually change.
yzshen1 2012/03/16 07:33:28 Please consider the following sequence: browser fu
scheib 2012/03/16 21:20:03 Etner Browser FS | Will check for notification En
yzshen1 2012/03/16 21:42:55 Ah, I see. I mistakenly thought that IsFullscreen
scheib 2012/03/19 17:11:06 Done.
+ FullscreenNotificationObserver fullscreen_observer;
+ browser()->ToggleFullscreenModeForTab(tab, enter_fullscreen);
+ fullscreen_observer.Wait();
+ ASSERT_EQ(browser()->window()->IsFullscreen(), enter_fullscreen);
+ }
+ }
+
+ void ToggleBrowserFullscreen(bool enter_fullscreen) {
yzshen1 2012/03/16 07:33:28 |enter_fullscreen| seems to be the expected result
scheib 2012/03/16 21:20:03 True, this is inherited from previous impl. I've a
+ FullscreenNotificationObserver fullscreen_observer;
+
+ browser()->ToggleFullscreenMode();
+
+ fullscreen_observer.Wait();
+ ASSERT_EQ(browser()->window()->IsFullscreen(), enter_fullscreen);
+ ASSERT_EQ(browser()->fullscreen_controller_->IsFullscreenForBrowser(),
+ enter_fullscreen);
+ }
+
+ void RequestToLockMouse(content::WebContents* tab) {
+ browser()->RequestToLockMouse(tab);
+ }
+
+ void LostMouseLock() {
+ browser()->LostMouseLock();
+ }
+
+ bool IsFullscreenForTabOrPending() {
+ return browser()->IsFullscreenForTabOrPending();
+ }
+
+ bool IsMouseLockedOrPending() {
+ return browser()->IsMouseLockedOrPending();
+ }
+
+ bool IsMouseLockPermissionRequested() {
+ FullscreenExitBubbleType type =
+ browser()->fullscreen_controller_->GetFullscreenExitBubbleType();
+ bool mouse_lock = false;
+ fullscreen_bubble::PermissionRequestedByType(type, NULL, &mouse_lock);
+ return mouse_lock;
+ }
+
+ bool IsFullscreenPermissionRequested() {
+ FullscreenExitBubbleType type =
+ browser()->fullscreen_controller_->GetFullscreenExitBubbleType();
+ bool fullscreen = false;
+ fullscreen_bubble::PermissionRequestedByType(type, &fullscreen, NULL);
+ return fullscreen;
+ }
+
+ FullscreenExitBubbleType GetFullscreenExitBubbleType() {
+ return browser()->fullscreen_controller_->GetFullscreenExitBubbleType();
+ }
+
+ bool IsFullscreenBubbleDisplayed() {
+ FullscreenExitBubbleType type =
+ browser()->fullscreen_controller_->GetFullscreenExitBubbleType();
+ // TODO(scheib): Should be FEB_TYPE_NONE, crbug.com/107013 will include fix.
+ return type != FEB_TYPE_BROWSER_FULLSCREEN_EXIT_INSTRUCTION;
+ }
+
+ bool IsFullscreenBubbleDisplayingButtons() {
+ FullscreenExitBubbleType type =
+ browser()->fullscreen_controller_->GetFullscreenExitBubbleType();
+ return fullscreen_bubble::ShowButtonsForType(type);
+ }
+
+ void AcceptCurrentFullscreenOrMouseLockRequest() {
+ WebContents* fullscreen_tab = browser()->GetSelectedWebContents();
+ FullscreenExitBubbleType type =
+ browser()->fullscreen_controller_->GetFullscreenExitBubbleType();
+ browser()->OnAcceptFullscreenPermission(fullscreen_tab->GetURL(), type);
+ }
+
+ void TestFullscreenMouseLockContentSettings();
};
// Launch the app on a page with no title, check that the app title was set
@@ -875,6 +967,7 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, PageLanguageDetection) {
#define MAYBE_TestNewTabExitsFullscreen TestNewTabExitsFullscreen
#endif
+// Tests that while in full screen creating a new tab will exit full screen.
yzshen1 2012/03/16 07:33:28 nit: we usually use 'fullscreen' as a word in the
scheib 2012/03/16 21:20:03 Done.
IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_TestNewTabExitsFullscreen) {
ASSERT_TRUE(test_server()->Start());
@@ -883,19 +976,10 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_TestNewTabExitsFullscreen) {
WebContents* fullscreen_tab = browser()->GetSelectedWebContents();
- {
- ui_test_utils::WindowedNotificationObserver fullscreen_observer(
- chrome::NOTIFICATION_FULLSCREEN_CHANGED,
- content::NotificationService::AllSources());
- browser()->ToggleFullscreenModeForTab(fullscreen_tab, true);
- fullscreen_observer.Wait();
- ASSERT_TRUE(browser()->window()->IsFullscreen());
- }
+ ToggleTabFullscreen(fullscreen_tab, true);
{
- ui_test_utils::WindowedNotificationObserver fullscreen_observer(
- chrome::NOTIFICATION_FULLSCREEN_CHANGED,
- content::NotificationService::AllSources());
+ FullscreenNotificationObserver fullscreen_observer;
AddTabAtIndex(
1, GURL(chrome::kAboutBlankURL), content::PAGE_TRANSITION_TYPED);
fullscreen_observer.Wait();
@@ -911,6 +995,7 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_TestNewTabExitsFullscreen) {
#define MAYBE_TestTabExitsItselfFromFullscreen TestTabExitsItselfFromFullscreen
#endif
+// Tests a tab exiting full screen will bring the browser out of full screen.
IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_TestTabExitsItselfFromFullscreen) {
ASSERT_TRUE(test_server()->Start());
@@ -918,26 +1003,12 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_TestTabExitsItselfFromFullscreen) {
0, GURL(chrome::kAboutBlankURL), content::PAGE_TRANSITION_TYPED);
WebContents* fullscreen_tab = browser()->GetSelectedWebContents();
-
- {
- ui_test_utils::WindowedNotificationObserver fullscreen_observer(
- chrome::NOTIFICATION_FULLSCREEN_CHANGED,
- content::NotificationService::AllSources());
- browser()->ToggleFullscreenModeForTab(fullscreen_tab, true);
- fullscreen_observer.Wait();
- ASSERT_TRUE(browser()->window()->IsFullscreen());
- }
-
- {
- ui_test_utils::WindowedNotificationObserver fullscreen_observer(
- chrome::NOTIFICATION_FULLSCREEN_CHANGED,
- content::NotificationService::AllSources());
- browser()->ToggleFullscreenModeForTab(fullscreen_tab, false);
- fullscreen_observer.Wait();
- ASSERT_FALSE(browser()->window()->IsFullscreen());
- }
+ ToggleTabFullscreen(fullscreen_tab, true);
+ ToggleTabFullscreen(fullscreen_tab, false);
}
+// Tests entering full screen and then requesting mouse lock results in
+// buttons for the user, and that after confirming the buttons are dismissed.
IN_PROC_BROWSER_TEST_F(BrowserTest, TestFullscreenBubbleMouseLockState) {
ASSERT_TRUE(test_server()->Start());
@@ -948,25 +1019,140 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, TestFullscreenBubbleMouseLockState) {
WebContents* fullscreen_tab = browser()->GetSelectedWebContents();
- {
- ui_test_utils::WindowedNotificationObserver fullscreen_observer(
- chrome::NOTIFICATION_FULLSCREEN_CHANGED,
- content::NotificationService::AllSources());
- browser()->ToggleFullscreenModeForTab(fullscreen_tab, true);
- fullscreen_observer.Wait();
- ASSERT_TRUE(browser()->window()->IsFullscreen());
- }
+ ToggleTabFullscreen(fullscreen_tab, true);
+
+ // Request mouse lock and verify the bubble is waiting for user confirmation.
+ RequestToLockMouse(fullscreen_tab);
+ ASSERT_TRUE(IsMouseLockPermissionRequested());
+
+ // Accept mouse lock and verify bubble no longer shows confirmation buttons.
+ AcceptCurrentFullscreenOrMouseLockRequest();
+ ASSERT_FALSE(IsFullscreenBubbleDisplayingButtons());
+}
+
+// Tests mouse lock fails before fullscreen is entered.
+IN_PROC_BROWSER_TEST_F(BrowserTest, MouseLockThenFullscreen) {
+ WebContents* tab = browser()->GetSelectedWebContents();
+ ASSERT_FALSE(IsFullscreenBubbleDisplayed());
+
+ RequestToLockMouse(tab);
+ ASSERT_FALSE(IsFullscreenBubbleDisplayed());
- browser()->RequestToLockMouse(fullscreen_tab);
- FullscreenExitBubbleType type =
- browser()->fullscreen_controller_->GetFullscreenExitBubbleType();
- bool mouse_lock = false;
- fullscreen_bubble::PermissionRequestedByType(type, NULL, &mouse_lock);
- ASSERT_TRUE(mouse_lock);
+ ToggleTabFullscreen(tab, true);
+ ASSERT_TRUE(IsFullscreenPermissionRequested());
+ ASSERT_FALSE(IsMouseLockPermissionRequested());
+}
+
+
yzshen1 2012/03/16 07:33:28 Please remove one blank line.
scheib 2012/03/16 21:20:03 Done.
+// Helper method to be called by multiple tests.
+// Tests Fullscreen and Mouse Lock with varying content settings ALLOW & BLOCK.
+void BrowserTest::TestFullscreenMouseLockContentSettings() {
+ GURL url = test_server()->GetURL("simple.html");
+ AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED);
+ WebContents* tab = browser()->GetSelectedWebContents();
+
+ // Validate that going fullscreen for a URL defaults to asking permision.
+ ASSERT_FALSE(IsFullscreenPermissionRequested());
+ ToggleTabFullscreen(tab, true);
+ ASSERT_TRUE(IsFullscreenPermissionRequested());
+ ToggleTabFullscreen(tab, false);
+
+ // Add content setting to ALLOW fullscreen.
+ HostContentSettingsMap* settings_map =
+ browser()->profile()->GetHostContentSettingsMap();
+ ContentSettingsPattern pattern =
+ ContentSettingsPattern::FromURL(url);
+ settings_map->SetContentSetting(
+ pattern, ContentSettingsPattern::Wildcard(),
+ CONTENT_SETTINGS_TYPE_FULLSCREEN, std::string(),
+ CONTENT_SETTING_ALLOW);
+
+ // Now, fullscreen should not prompt for permission.
+ ASSERT_FALSE(IsFullscreenPermissionRequested());
+ ToggleTabFullscreen(tab, true);
+ ASSERT_FALSE(IsFullscreenPermissionRequested());
+
+ // Leaving tab in fullscreen, now test mouse lock ALLOW:
+
+ // Validate that mouse lock defaults to asking permision.
+ ASSERT_FALSE(IsMouseLockPermissionRequested());
+ ASSERT_FALSE(IsMouseLockedOrPending());
+ RequestToLockMouse(tab);
+ ASSERT_TRUE(IsMouseLockPermissionRequested());
+ ASSERT_TRUE(IsMouseLockedOrPending());
+ LostMouseLock();
+
+ // Add content setting to ALLOW mouse lock.
+ settings_map->SetContentSetting(
+ pattern, ContentSettingsPattern::Wildcard(),
+ CONTENT_SETTINGS_TYPE_MOUSELOCK, std::string(),
+ CONTENT_SETTING_ALLOW);
+
+ // Now, mouse lock should not prompt for permission.
+ ASSERT_FALSE(IsMouseLockedOrPending());
+ ASSERT_FALSE(IsMouseLockPermissionRequested());
+ RequestToLockMouse(tab);
+ ASSERT_TRUE(IsMouseLockedOrPending());
+ ASSERT_FALSE(IsMouseLockPermissionRequested());
+ LostMouseLock();
+
+ // Leaving tab in fullscreen, now test mouse lock BLOCK:
+
+ // Add content setting to BLOCK mouse lock.
+ settings_map->SetContentSetting(
+ pattern, ContentSettingsPattern::Wildcard(),
+ CONTENT_SETTINGS_TYPE_MOUSELOCK, std::string(),
+ CONTENT_SETTING_BLOCK);
+
+ // Now, mouse lock should not be pending.
+ ASSERT_FALSE(IsMouseLockedOrPending());
+ ASSERT_FALSE(IsMouseLockPermissionRequested());
+ RequestToLockMouse(tab);
+ ASSERT_FALSE(IsMouseLockedOrPending());
+ ASSERT_FALSE(IsMouseLockPermissionRequested());
+}
- browser()->OnAcceptFullscreenPermission(fullscreen_tab->GetURL(), type);
- type = browser()->fullscreen_controller_->GetFullscreenExitBubbleType();
- ASSERT_FALSE(fullscreen_bubble::ShowButtonsForType(type));
+// Tests fullscreen and Mouse Lock with varying content settings ALLOW & BLOCK.
+IN_PROC_BROWSER_TEST_F(BrowserTest, FullscreenMouseLockContentSettings) {
+ TestFullscreenMouseLockContentSettings();
+}
+
+// Tests fullscreen and Mouse Lock with varying content settings ALLOW & BLOCK,
+// but with the browser initiated in fullscreen mode first.
+IN_PROC_BROWSER_TEST_F(BrowserTest, BrowserFullscreenMouseLockContentSettings) {
+ // Enter browser fullscreen first.
+ ToggleBrowserFullscreen(true);
+ TestFullscreenMouseLockContentSettings();
+ ToggleBrowserFullscreen(false);
+}
+
+// Tests Fullscreen entered in Browser, then Tab mode, then exited via Browser.
yzshen1 2012/03/16 07:33:28 It would be great if we also test browser fullscre
scheib 2012/03/16 21:20:03 Done. Added BrowserFullscreenAfterTabFSExit.
+IN_PROC_BROWSER_TEST_F(BrowserTest, BrowserFullscreenExit) {
+ // Enter browser fullscreen.
+ ToggleBrowserFullscreen(true);
+
+ // Enter tab fullscreen.
+ AddTabAtIndex(0, GURL(chrome::kAboutBlankURL),
+ content::PAGE_TRANSITION_TYPED);
+ WebContents* fullscreen_tab = browser()->GetSelectedWebContents();
+ ToggleTabFullscreen(fullscreen_tab, true);
+
+ // Exit browser fullscreen.
+ ToggleBrowserFullscreen(false);
+ ASSERT_FALSE(browser()->window()->IsFullscreen());
+}
+
+// Tests fullscreen entered without permision prompt for file:// urls.
+IN_PROC_BROWSER_TEST_F(BrowserTest, FullscreenFileURL) {
+ GURL url = ui_test_utils::GetTestUrl(FilePath(""), FilePath("simple.html"));
+ AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED);
+ WebContents* tab = browser()->GetSelectedWebContents();
+
+ // Validate that going fullscreen for a URL defaults to asking permision.
koz (OOO until 15th September) 2012/03/16 04:31:25 This comment seems to contradict the code and the
scheib 2012/03/16 21:20:03 Done.
+ ASSERT_FALSE(IsFullscreenPermissionRequested());
+ ToggleTabFullscreen(tab, true);
+ ASSERT_FALSE(IsFullscreenPermissionRequested());
+ ToggleTabFullscreen(tab, false);
}
#if defined(OS_MACOSX)
@@ -981,9 +1167,7 @@ IN_PROC_BROWSER_TEST_F(
WebContents* fullscreen_tab = browser()->GetSelectedWebContents();
{
- ui_test_utils::WindowedNotificationObserver fullscreen_observer(
- chrome::NOTIFICATION_FULLSCREEN_CHANGED,
- content::NotificationService::AllSources());
+ FullscreenNotificationObserver fullscreen_observer;
EXPECT_FALSE(browser()->window()->IsFullscreen());
EXPECT_FALSE(browser()->window()->InPresentationMode());
browser()->ToggleFullscreenModeForTab(fullscreen_tab, true);
@@ -993,9 +1177,7 @@ IN_PROC_BROWSER_TEST_F(
}
{
- ui_test_utils::WindowedNotificationObserver fullscreen_observer(
- chrome::NOTIFICATION_FULLSCREEN_CHANGED,
- content::NotificationService::AllSources());
+ FullscreenNotificationObserver fullscreen_observer;
browser()->TogglePresentationMode();
fullscreen_observer.Wait();
ASSERT_FALSE(browser()->window()->IsFullscreen());
@@ -1005,9 +1187,7 @@ IN_PROC_BROWSER_TEST_F(
if (base::mac::IsOSLionOrLater()) {
// Test that tab fullscreen mode doesn't make presentation mode the default
// on Lion.
- ui_test_utils::WindowedNotificationObserver fullscreen_observer(
- chrome::NOTIFICATION_FULLSCREEN_CHANGED,
- content::NotificationService::AllSources());
+ FullscreenNotificationObserver fullscreen_observer;
browser()->ToggleFullscreenMode();
fullscreen_observer.Wait();
ASSERT_TRUE(browser()->window()->IsFullscreen());

Powered by Google App Engine
This is Rietveld 408576698