| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "build/build_config.h" | 6 #include "build/build_config.h" |
| 7 #include "chrome/browser/ui/browser.h" | 7 #include "chrome/browser/ui/browser.h" |
| 8 #include "chrome/browser/ui/browser_tabstrip.h" | 8 #include "chrome/browser/ui/browser_tabstrip.h" |
| 9 #include "chrome/browser/ui/exclusive_access/exclusive_access_context.h" |
| 9 #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" | 10 #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" |
| 10 #include "chrome/browser/ui/exclusive_access/fullscreen_controller_state_test.h" | 11 #include "chrome/browser/ui/exclusive_access/fullscreen_controller_state_test.h" |
| 11 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 12 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 12 #include "chrome/test/base/browser_with_test_window_test.h" | 13 #include "chrome/test/base/browser_with_test_window_test.h" |
| 13 #include "content/public/browser/web_contents.h" | 14 #include "content/public/browser/web_contents.h" |
| 14 #include "content/public/common/url_constants.h" | 15 #include "content/public/common/url_constants.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 17 |
| 17 // The FullscreenControllerStateUnitTest unit test suite exhastively tests | 18 // The FullscreenControllerStateUnitTest unit test suite exhastively tests |
| 18 // the FullscreenController through all permutations of events. The behavior | 19 // the FullscreenController through all permutations of events. The behavior |
| 19 // of the BrowserWindow is mocked via FullscreenControllerTestWindow. | 20 // of the BrowserWindow is mocked via FullscreenControllerTestWindow. |
| 20 | 21 |
| 21 | 22 |
| 22 // FullscreenControllerTestWindow ---------------------------------------------- | 23 // FullscreenControllerTestWindow ---------------------------------------------- |
| 23 | 24 |
| 24 // A BrowserWindow used for testing FullscreenController. The behavior of this | 25 // A BrowserWindow used for testing FullscreenController. The behavior of this |
| 25 // mock is verfied manually by running FullscreenControllerStateInteractiveTest. | 26 // mock is verfied manually by running FullscreenControllerStateInteractiveTest. |
| 26 class FullscreenControllerTestWindow : public TestBrowserWindow { | 27 class FullscreenControllerTestWindow : public TestBrowserWindow, |
| 28 ExclusiveAccessContext { |
| 27 public: | 29 public: |
| 28 // Simulate the window state with an enumeration. | 30 // Simulate the window state with an enumeration. |
| 29 enum WindowState { | 31 enum WindowState { |
| 30 NORMAL, | 32 NORMAL, |
| 31 FULLSCREEN, | 33 FULLSCREEN, |
| 32 // No TO_ state for METRO_SNAP, the windows implementation is synchronous. | 34 // No TO_ state for METRO_SNAP, the windows implementation is synchronous. |
| 33 METRO_SNAP, | 35 METRO_SNAP, |
| 34 TO_NORMAL, | 36 TO_NORMAL, |
| 35 TO_FULLSCREEN, | 37 TO_FULLSCREEN, |
| 36 }; | 38 }; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 48 bool SupportsFullscreenWithToolbar() const override; | 50 bool SupportsFullscreenWithToolbar() const override; |
| 49 void UpdateFullscreenWithToolbar(bool with_toolbar) override; | 51 void UpdateFullscreenWithToolbar(bool with_toolbar) override; |
| 50 bool IsFullscreenWithToolbar() const override; | 52 bool IsFullscreenWithToolbar() const override; |
| 51 #if defined(OS_WIN) | 53 #if defined(OS_WIN) |
| 52 virtual void SetMetroSnapMode(bool enable) override; | 54 virtual void SetMetroSnapMode(bool enable) override; |
| 53 virtual bool IsInMetroSnapMode() const override; | 55 virtual bool IsInMetroSnapMode() const override; |
| 54 #endif | 56 #endif |
| 55 static const char* GetWindowStateString(WindowState state); | 57 static const char* GetWindowStateString(WindowState state); |
| 56 WindowState state() const { return state_; } | 58 WindowState state() const { return state_; } |
| 57 void set_browser(Browser* browser) { browser_ = browser; } | 59 void set_browser(Browser* browser) { browser_ = browser; } |
| 60 ExclusiveAccessContext* GetExclusiveAccessContext() override; |
| 61 |
| 62 // ExclusiveAccessContext Interface: |
| 63 Profile* GetProfile() override; |
| 64 content::WebContents* GetActiveWebContents() override; |
| 65 void HideDownloadShelf() override; |
| 66 void UnhideDownloadShelf() override; |
| 67 void UpdateExclusiveAccessExitBubbleContent( |
| 68 const GURL& url, |
| 69 ExclusiveAccessBubbleType bubble_type) override; |
| 58 | 70 |
| 59 // Simulates the window changing state. | 71 // Simulates the window changing state. |
| 60 void ChangeWindowFullscreenState(); | 72 void ChangeWindowFullscreenState(); |
| 61 | 73 |
| 62 private: | 74 private: |
| 63 // Enters fullscreen with |new_mac_with_toolbar_mode|. | 75 // Enters fullscreen with |new_mac_with_toolbar_mode|. |
| 64 void EnterFullscreen(bool new_mac_with_toolbar_mode); | 76 void EnterFullscreen(bool new_mac_with_toolbar_mode); |
| 65 | 77 |
| 66 // Returns true if ChangeWindowFullscreenState() should be called as a result | 78 // Returns true if ChangeWindowFullscreenState() should be called as a result |
| 67 // of updating the current fullscreen state to the passed in state. | 79 // of updating the current fullscreen state to the passed in state. |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 return true; | 210 return true; |
| 199 | 211 |
| 200 // BrowserWindowCocoa::EnterFullscreen() and | 212 // BrowserWindowCocoa::EnterFullscreen() and |
| 201 // BrowserWindowCocoa::EnterFullscreenWithToolbar() are reentrant when | 213 // BrowserWindowCocoa::EnterFullscreenWithToolbar() are reentrant when |
| 202 // switching between fullscreen with chrome and fullscreen without chrome. | 214 // switching between fullscreen with chrome and fullscreen without chrome. |
| 203 return state_ == FULLSCREEN && | 215 return state_ == FULLSCREEN && |
| 204 !fullscreen_changed && | 216 !fullscreen_changed && |
| 205 mac_with_toolbar_mode_changed; | 217 mac_with_toolbar_mode_changed; |
| 206 } | 218 } |
| 207 | 219 |
| 220 ExclusiveAccessContext* |
| 221 FullscreenControllerTestWindow::GetExclusiveAccessContext() { |
| 222 return this; |
| 223 } |
| 224 |
| 225 Profile* FullscreenControllerTestWindow::GetProfile() { |
| 226 return browser_->profile(); |
| 227 } |
| 228 |
| 229 content::WebContents* FullscreenControllerTestWindow::GetActiveWebContents() { |
| 230 return browser_->tab_strip_model()->GetActiveWebContents(); |
| 231 } |
| 232 |
| 233 void FullscreenControllerTestWindow::UnhideDownloadShelf() { |
| 234 GetDownloadShelf()->Unhide(); |
| 235 } |
| 236 |
| 237 void FullscreenControllerTestWindow::HideDownloadShelf() { |
| 238 GetDownloadShelf()->Hide(); |
| 239 } |
| 240 |
| 241 void FullscreenControllerTestWindow::UpdateExclusiveAccessExitBubbleContent( |
| 242 const GURL& url, |
| 243 ExclusiveAccessBubbleType bubble_type) { |
| 244 TestBrowserWindow::UpdateExclusiveAccessExitBubbleContent(url, bubble_type); |
| 245 } |
| 208 | 246 |
| 209 // FullscreenControllerStateUnitTest ------------------------------------------- | 247 // FullscreenControllerStateUnitTest ------------------------------------------- |
| 210 | 248 |
| 211 // Unit test fixture testing Fullscreen Controller through its states. Most of | 249 // Unit test fixture testing Fullscreen Controller through its states. Most of |
| 212 // the test logic comes from FullscreenControllerStateTest. | 250 // the test logic comes from FullscreenControllerStateTest. |
| 213 class FullscreenControllerStateUnitTest : public BrowserWithTestWindowTest, | 251 class FullscreenControllerStateUnitTest : public BrowserWithTestWindowTest, |
| 214 public FullscreenControllerStateTest { | 252 public FullscreenControllerStateTest { |
| 215 public: | 253 public: |
| 216 FullscreenControllerStateUnitTest(); | 254 FullscreenControllerStateUnitTest(); |
| 217 | 255 |
| 218 // FullscreenControllerStateTest: | 256 // FullscreenControllerStateTest: |
| 219 void SetUp() override; | 257 void SetUp() override; |
| 220 BrowserWindow* CreateBrowserWindow() override; | 258 BrowserWindow* CreateBrowserWindow() override; |
| 221 void ChangeWindowFullscreenState() override; | 259 void ChangeWindowFullscreenState() override; |
| 222 const char* GetWindowStateString() override; | 260 const char* GetWindowStateString() override; |
| 223 void VerifyWindowState() override; | 261 void VerifyWindowState() override; |
| 224 | 262 |
| 225 protected: | 263 protected: |
| 226 // FullscreenControllerStateTest: | 264 // FullscreenControllerStateTest: |
| 227 bool ShouldSkipStateAndEventPair(State state, Event event) override; | 265 bool ShouldSkipStateAndEventPair(State state, Event event) override; |
| 228 Browser* GetBrowser() override; | 266 Browser* GetBrowser() override; |
| 229 FullscreenControllerTestWindow* window_; | 267 FullscreenControllerTestWindow* window_; |
| 230 }; | 268 }; |
| 231 | 269 |
| 232 FullscreenControllerStateUnitTest::FullscreenControllerStateUnitTest () | 270 FullscreenControllerStateUnitTest::FullscreenControllerStateUnitTest() |
| 233 : window_(NULL) { | 271 : window_(NULL) { |
| 234 } | 272 } |
| 235 | 273 |
| 236 void FullscreenControllerStateUnitTest::SetUp() { | 274 void FullscreenControllerStateUnitTest::SetUp() { |
| 237 BrowserWithTestWindowTest::SetUp(); | 275 BrowserWithTestWindowTest::SetUp(); |
| 238 window_->set_browser(browser()); | 276 window_->set_browser(browser()); |
| 239 } | 277 } |
| 240 | 278 |
| 241 BrowserWindow* FullscreenControllerStateUnitTest::CreateBrowserWindow() { | 279 BrowserWindow* FullscreenControllerStateUnitTest::CreateBrowserWindow() { |
| 242 window_ = new FullscreenControllerTestWindow(); | 280 window_ = new FullscreenControllerTestWindow(); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 #endif | 347 #endif |
| 310 | 348 |
| 311 return FullscreenControllerStateTest::ShouldSkipStateAndEventPair(state, | 349 return FullscreenControllerStateTest::ShouldSkipStateAndEventPair(state, |
| 312 event); | 350 event); |
| 313 } | 351 } |
| 314 | 352 |
| 315 Browser* FullscreenControllerStateUnitTest::GetBrowser() { | 353 Browser* FullscreenControllerStateUnitTest::GetBrowser() { |
| 316 return BrowserWithTestWindowTest::browser(); | 354 return BrowserWithTestWindowTest::browser(); |
| 317 } | 355 } |
| 318 | 356 |
| 319 | |
| 320 // Soak tests ------------------------------------------------------------------ | 357 // Soak tests ------------------------------------------------------------------ |
| 321 | 358 |
| 322 // Tests all states with all permutations of multiple events to detect lingering | 359 // Tests all states with all permutations of multiple events to detect lingering |
| 323 // state issues that would bleed over to other states. | 360 // state issues that would bleed over to other states. |
| 324 // I.E. for each state test all combinations of events E1, E2, E3. | 361 // I.E. for each state test all combinations of events E1, E2, E3. |
| 325 // | 362 // |
| 326 // This produces coverage for event sequences that may happen normally but | 363 // This produces coverage for event sequences that may happen normally but |
| 327 // would not be exposed by traversing to each state via TransitionToState(). | 364 // would not be exposed by traversing to each state via TransitionToState(). |
| 328 // TransitionToState() always takes the same path even when multiple paths | 365 // TransitionToState() always takes the same path even when multiple paths |
| 329 // exist. | 366 // exist. |
| (...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 790 EXPECT_FALSE(wc_delegate->IsFullscreenForTabOrPending(tab)); | 827 EXPECT_FALSE(wc_delegate->IsFullscreenForTabOrPending(tab)); |
| 791 EXPECT_FALSE(second_wc_delegate->IsFullscreenForTabOrPending(tab)); | 828 EXPECT_FALSE(second_wc_delegate->IsFullscreenForTabOrPending(tab)); |
| 792 EXPECT_FALSE(GetFullscreenController()->IsWindowFullscreenForTabOrPending()); | 829 EXPECT_FALSE(GetFullscreenController()->IsWindowFullscreenForTabOrPending()); |
| 793 EXPECT_FALSE(second_browser->exclusive_access_manager() | 830 EXPECT_FALSE(second_browser->exclusive_access_manager() |
| 794 ->fullscreen_controller() | 831 ->fullscreen_controller() |
| 795 ->IsWindowFullscreenForTabOrPending()); | 832 ->IsWindowFullscreenForTabOrPending()); |
| 796 | 833 |
| 797 // Required tear-down specific to this test. | 834 // Required tear-down specific to this test. |
| 798 second_browser->tab_strip_model()->CloseAllTabs(); | 835 second_browser->tab_strip_model()->CloseAllTabs(); |
| 799 } | 836 } |
| OLD | NEW |