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

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: Valgrind error fix, merge to 130358 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
« no previous file with comments | « chrome/browser/ui/browser.cc ('k') | chrome/browser/ui/browser_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/browser_browsertest.cc
diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc
index 9715b49cbc6f0b7d84fe569c44105bfdb66f0034..95c8283db36b9bf9e3d00ad2443906f1306aae05 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"
@@ -86,6 +87,7 @@ const char* kOpenNewBeforeUnloadPage =
const FilePath::CharType* kBeforeUnloadFile =
FILE_PATH_LITERAL("beforeunload.html");
+const FilePath::CharType* kSimpleFile = FILE_PATH_LITERAL("simple.html");
const FilePath::CharType* kTitle1File = FILE_PATH_LITERAL("title1.html");
const FilePath::CharType* kTitle2File = FILE_PATH_LITERAL("title2.html");
@@ -176,6 +178,15 @@ class TestInterstitialPage : public content::InterstitialPageDelegate {
InterstitialPage* interstitial_page_; // Owns us.
};
+// Fullscreen transition notification observer simplifies test code.
+class FullscreenNotificationObserver
+ : public ui_test_utils::WindowedNotificationObserver {
+ public:
+ FullscreenNotificationObserver() : WindowedNotificationObserver(
+ chrome::NOTIFICATION_FULLSCREEN_CHANGED,
+ content::NotificationService::AllSources()) {}
+};
+
} // namespace
class BrowserTest : public ExtensionBrowserTest {
@@ -211,6 +222,93 @@ class BrowserTest : public ExtensionBrowserTest {
NOTREACHED();
return NULL;
}
+
+ void ToggleTabFullscreen(WebContents* tab, bool enter_fullscreen) {
+ if (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.
+ FullscreenNotificationObserver fullscreen_observer;
+ browser()->ToggleFullscreenModeForTab(tab, enter_fullscreen);
+ fullscreen_observer.Wait();
+ ASSERT_EQ(browser()->window()->IsFullscreen(), enter_fullscreen);
+ }
+ }
+
+ void ToggleBrowserFullscreen(bool enter_fullscreen) {
+ ASSERT_EQ(browser()->window()->IsFullscreen(), !enter_fullscreen);
+ FullscreenNotificationObserver fullscreen_observer;
+
+ browser()->ToggleFullscreenMode();
+
+ fullscreen_observer.Wait();
+ ASSERT_EQ(browser()->window()->IsFullscreen(), enter_fullscreen);
+ ASSERT_EQ(IsFullscreenForBrowser(), enter_fullscreen);
+ }
+
+ void RequestToLockMouse(content::WebContents* tab) {
+ browser()->RequestToLockMouse(tab);
+ }
+
+ void LostMouseLock() {
+ browser()->LostMouseLock();
+ }
+
+ bool IsFullscreenForBrowser() {
+ return browser()->fullscreen_controller_->IsFullscreenForBrowser();
+ }
+
+ 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);
+ }
+
+ // Helper method to be called by multiple tests.
+ void TestFullscreenMouseLockContentSettings();
};
// Launch the app on a page with no title, check that the app title was set
@@ -875,6 +973,7 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, PageLanguageDetection) {
#define MAYBE_TestNewTabExitsFullscreen TestNewTabExitsFullscreen
#endif
+// Tests that while in fullscreen creating a new tab will exit fullscreen.
IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_TestNewTabExitsFullscreen) {
ASSERT_TRUE(test_server()->Start());
@@ -883,19 +982,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());
- }
+ ASSERT_NO_FATAL_FAILURE(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 +1001,7 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_TestNewTabExitsFullscreen) {
#define MAYBE_TestTabExitsItselfFromFullscreen TestTabExitsItselfFromFullscreen
#endif
+// Tests a tab exiting fullscreen will bring the browser out of fullscreen.
IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_TestTabExitsItselfFromFullscreen) {
ASSERT_TRUE(test_server()->Start());
@@ -918,26 +1009,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());
- }
+ ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(fullscreen_tab, true));
+ ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(fullscreen_tab, false));
}
+// Tests entering fullscreen 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 +1025,156 @@ 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());
- }
+ ASSERT_NO_FATAL_FAILURE(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());
+
+ ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(tab, true));
+ ASSERT_TRUE(IsFullscreenPermissionRequested());
+ ASSERT_FALSE(IsMouseLockPermissionRequested());
+}
+
+// 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());
+ ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(tab, true));
+ ASSERT_TRUE(IsFullscreenPermissionRequested());
+ ASSERT_NO_FATAL_FAILURE(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());
+ ASSERT_NO_FATAL_FAILURE(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());
+}
+
+// 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.
+ ASSERT_NO_FATAL_FAILURE(ToggleBrowserFullscreen(true));
+ TestFullscreenMouseLockContentSettings();
+ ASSERT_NO_FATAL_FAILURE(ToggleBrowserFullscreen(false));
+}
+
+// Tests Fullscreen entered in Browser, then Tab mode, then exited via Browser.
+IN_PROC_BROWSER_TEST_F(BrowserTest, BrowserFullscreenExit) {
+ // Enter browser fullscreen.
+ ASSERT_NO_FATAL_FAILURE(ToggleBrowserFullscreen(true));
- 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);
+ // Enter tab fullscreen.
+ AddTabAtIndex(0, GURL(chrome::kAboutBlankURL),
+ content::PAGE_TRANSITION_TYPED);
+ WebContents* fullscreen_tab = browser()->GetSelectedWebContents();
+ ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(fullscreen_tab, true));
- browser()->OnAcceptFullscreenPermission(fullscreen_tab->GetURL(), type);
- type = browser()->fullscreen_controller_->GetFullscreenExitBubbleType();
- ASSERT_FALSE(fullscreen_bubble::ShowButtonsForType(type));
+ // Exit browser fullscreen.
+ ASSERT_NO_FATAL_FAILURE(ToggleBrowserFullscreen(false));
+ ASSERT_FALSE(browser()->window()->IsFullscreen());
+}
+
+// Tests Browser Fullscreen remains active after Tab mode entered and exited.
+IN_PROC_BROWSER_TEST_F(BrowserTest, BrowserFullscreenAfterTabFSExit) {
+ // Enter browser fullscreen.
+ ASSERT_NO_FATAL_FAILURE(ToggleBrowserFullscreen(true));
+
+ // Enter and then exit tab fullscreen.
+ AddTabAtIndex(0, GURL(chrome::kAboutBlankURL),
+ content::PAGE_TRANSITION_TYPED);
+ WebContents* fullscreen_tab = browser()->GetSelectedWebContents();
+ ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(fullscreen_tab, true));
+ ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(fullscreen_tab, false));
+
+ // Verify browser fullscreen still active.
+ ASSERT_TRUE(IsFullscreenForBrowser());
+}
+
+// Tests fullscreen entered without permision prompt for file:// urls.
+IN_PROC_BROWSER_TEST_F(BrowserTest, FullscreenFileURL) {
+ ui_test_utils::NavigateToURL(browser(),
+ ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory),
+ FilePath(kSimpleFile)));
+ WebContents* tab = browser()->GetSelectedWebContents();
+
+ // Validate that going fullscreen for a file does not ask permision.
+ ASSERT_FALSE(IsFullscreenPermissionRequested());
+ ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(tab, true));
+ ASSERT_FALSE(IsFullscreenPermissionRequested());
+ ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(tab, false));
}
#if defined(OS_MACOSX)
@@ -981,9 +1189,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 +1199,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 +1209,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());
« no previous file with comments | « chrome/browser/ui/browser.cc ('k') | chrome/browser/ui/browser_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698