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

Side by Side Diff: chrome/browser/ui/fullscreen/fullscreen_controller_state_unittest.cc

Issue 12018007: Refactor BrowserWindow fullscreen and presentation on Mac to be consistent with other platforms. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge TOT Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "build/build_config.h" 5 #include "build/build_config.h"
6 #include "chrome/browser/ui/browser.h" 6 #include "chrome/browser/ui/browser.h"
7 #include "chrome/browser/ui/browser_tabstrip.h" 7 #include "chrome/browser/ui/browser_tabstrip.h"
8 #include "chrome/browser/ui/fullscreen/fullscreen_controller.h" 8 #include "chrome/browser/ui/fullscreen/fullscreen_controller.h"
9 #include "chrome/browser/ui/fullscreen/fullscreen_controller_state_test.h" 9 #include "chrome/browser/ui/fullscreen/fullscreen_controller_state_test.h"
10 #include "chrome/test/base/browser_with_test_window_test.h" 10 #include "chrome/test/base/browser_with_test_window_test.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 virtual void EnterFullscreen(const GURL& url, 44 virtual void EnterFullscreen(const GURL& url,
45 FullscreenExitBubbleType type) OVERRIDE; 45 FullscreenExitBubbleType type) OVERRIDE;
46 virtual void EnterFullscreen(); 46 virtual void EnterFullscreen();
47 virtual void ExitFullscreen() OVERRIDE; 47 virtual void ExitFullscreen() OVERRIDE;
48 virtual bool IsFullscreen() const OVERRIDE; 48 virtual bool IsFullscreen() const OVERRIDE;
49 #if defined(OS_WIN) 49 #if defined(OS_WIN)
50 virtual void SetMetroSnapMode(bool enable) OVERRIDE; 50 virtual void SetMetroSnapMode(bool enable) OVERRIDE;
51 virtual bool IsInMetroSnapMode() const OVERRIDE; 51 virtual bool IsInMetroSnapMode() const OVERRIDE;
52 #endif 52 #endif
53 #if defined(OS_MACOSX) 53 #if defined(OS_MACOSX)
54 virtual void EnterPresentationMode( 54 virtual void EnterFullscreenWithChrome(
55 const GURL& url, 55 const GURL& url,
56 FullscreenExitBubbleType bubble_type) OVERRIDE; 56 FullscreenExitBubbleType bubble_type) OVERRIDE;
57 virtual void ExitPresentationMode() OVERRIDE; 57 virtual bool IsFullscreenWithChrome() OVERRIDE;
58 virtual bool InPresentationMode() OVERRIDE; 58 virtual bool IsFullscreenWithoutChrome() OVERRIDE;
59 #endif 59 #endif
60 60
61 static const char* GetWindowStateString(WindowState state); 61 static const char* GetWindowStateString(WindowState state);
62 WindowState state() const { return state_; } 62 WindowState state() const { return state_; }
63 void set_browser(Browser* browser) { browser_ = browser; } 63 void set_browser(Browser* browser) { browser_ = browser; }
64 void set_reentrant(bool value) { reentrant_ = value; } 64 void set_reentrant(bool value) { reentrant_ = value; }
65 bool reentrant() const { return reentrant_; } 65 bool reentrant() const { return reentrant_; }
66 66
67 // Simulates the window changing state. 67 // Simulates the window changing state.
68 void ChangeWindowFullscreenState(); 68 void ChangeWindowFullscreenState();
69 // Calls ChangeWindowFullscreenState() if |reentrant_| is true. 69 // Calls ChangeWindowFullscreenState() if |reentrant_| is true.
70 void ChangeWindowFullscreenStateIfReentrant(); 70 void ChangeWindowFullscreenStateIfReentrant();
71 71
72 private: 72 private:
73 WindowState state_; 73 WindowState state_;
74 bool mac_presentation_mode_; 74 bool mac_with_chrome_mode_;
75 Browser* browser_; 75 Browser* browser_;
76 76
77 // Causes reentrant calls to be made by calling 77 // Causes reentrant calls to be made by calling
78 // browser_->WindowFullscreenStateChanged() from the BrowserWindow 78 // browser_->WindowFullscreenStateChanged() from the BrowserWindow
79 // interface methods. 79 // interface methods.
80 bool reentrant_; 80 bool reentrant_;
81 }; 81 };
82 82
83 FullscreenControllerTestWindow::FullscreenControllerTestWindow() 83 FullscreenControllerTestWindow::FullscreenControllerTestWindow()
84 : state_(NORMAL), 84 : state_(NORMAL),
85 mac_presentation_mode_(false), 85 mac_with_chrome_mode_(false),
86 browser_(NULL), 86 browser_(NULL),
87 reentrant_(false) { 87 reentrant_(false) {
88 } 88 }
89 89
90 void FullscreenControllerTestWindow::EnterFullscreen( 90 void FullscreenControllerTestWindow::EnterFullscreen(
91 const GURL& url, FullscreenExitBubbleType type) { 91 const GURL& url, FullscreenExitBubbleType type) {
92 EnterFullscreen(); 92 EnterFullscreen();
93 } 93 }
94 94
95 void FullscreenControllerTestWindow::EnterFullscreen() { 95 void FullscreenControllerTestWindow::EnterFullscreen() {
96 mac_with_chrome_mode_ = false;
96 if (!IsFullscreen()) { 97 if (!IsFullscreen()) {
97 state_ = TO_FULLSCREEN; 98 state_ = TO_FULLSCREEN;
98 ChangeWindowFullscreenStateIfReentrant(); 99 ChangeWindowFullscreenStateIfReentrant();
99 } 100 }
100 } 101 }
101 102
102 void FullscreenControllerTestWindow::ExitFullscreen() { 103 void FullscreenControllerTestWindow::ExitFullscreen() {
103 if (IsFullscreen()) { 104 if (IsFullscreen()) {
104 state_ = TO_NORMAL; 105 state_ = TO_NORMAL;
105 mac_presentation_mode_ = false; 106 mac_with_chrome_mode_ = false;
106 ChangeWindowFullscreenStateIfReentrant(); 107 ChangeWindowFullscreenStateIfReentrant();
107 } 108 }
108 } 109 }
109 110
110 bool FullscreenControllerTestWindow::IsFullscreen() const { 111 bool FullscreenControllerTestWindow::IsFullscreen() const {
111 #if defined(OS_MACOSX) 112 #if defined(OS_MACOSX)
112 return state_ == FULLSCREEN || state_ == TO_FULLSCREEN; 113 return state_ == FULLSCREEN || state_ == TO_FULLSCREEN;
113 #else 114 #else
114 return state_ == FULLSCREEN || state_ == TO_NORMAL; 115 return state_ == FULLSCREEN || state_ == TO_NORMAL;
115 #endif 116 #endif
116 } 117 }
117 118
118 #if defined(OS_WIN) 119 #if defined(OS_WIN)
119 void FullscreenControllerTestWindow::SetMetroSnapMode(bool enable) { 120 void FullscreenControllerTestWindow::SetMetroSnapMode(bool enable) {
120 if (enable != IsInMetroSnapMode()) { 121 if (enable != IsInMetroSnapMode()) {
121 if (enable) 122 if (enable)
122 state_ = METRO_SNAP; 123 state_ = METRO_SNAP;
123 else 124 else
124 state_ = NORMAL; 125 state_ = NORMAL;
125 } 126 }
126 ChangeWindowFullscreenStateIfReentrant(); 127 ChangeWindowFullscreenStateIfReentrant();
127 } 128 }
128 129
129 bool FullscreenControllerTestWindow::IsInMetroSnapMode() const { 130 bool FullscreenControllerTestWindow::IsInMetroSnapMode() const {
130 return state_ == METRO_SNAP; 131 return state_ == METRO_SNAP;
131 } 132 }
132 #endif 133 #endif
133 134
134 #if defined(OS_MACOSX) 135 #if defined(OS_MACOSX)
135 void FullscreenControllerTestWindow::EnterPresentationMode( 136 void FullscreenControllerTestWindow::EnterFullscreenWithChrome(
136 const GURL& url, 137 const GURL& url,
137 FullscreenExitBubbleType bubble_type) { 138 FullscreenExitBubbleType bubble_type) {
138 mac_presentation_mode_ = true;
139 EnterFullscreen(); 139 EnterFullscreen();
140 mac_with_chrome_mode_ = true;
140 } 141 }
141 142
142 void FullscreenControllerTestWindow::ExitPresentationMode() { 143 bool FullscreenControllerTestWindow::IsFullscreenWithChrome() {
143 if (InPresentationMode()) { 144 return IsFullscreen() && mac_with_chrome_mode_;
144 mac_presentation_mode_ = false;
145 ExitFullscreen();
146 }
147 } 145 }
148 146
149 bool FullscreenControllerTestWindow::InPresentationMode() { 147 bool FullscreenControllerTestWindow::IsFullscreenWithoutChrome() {
150 return mac_presentation_mode_; 148 return IsFullscreen() && !mac_with_chrome_mode_;
151 } 149 }
152 #endif 150 #endif
153 151
154 // static 152 // static
155 const char* FullscreenControllerTestWindow::GetWindowStateString( 153 const char* FullscreenControllerTestWindow::GetWindowStateString(
156 WindowState state) { 154 WindowState state) {
157 switch (state) { 155 switch (state) {
158 case NORMAL: 156 case NORMAL:
159 return "NORMAL"; 157 return "NORMAL";
160 case FULLSCREEN: 158 case FULLSCREEN:
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 ASSERT_NO_FATAL_FAILURE(TestStateAndEvent(state, event, reentrant)) \ 322 ASSERT_NO_FATAL_FAILURE(TestStateAndEvent(state, event, reentrant)) \
325 << GetAndClearDebugLog(); \ 323 << GetAndClearDebugLog(); \
326 } 324 }
327 // Progress of tests can be examined by inserting the following line: 325 // Progress of tests can be examined by inserting the following line:
328 // LOG(INFO) << GetAndClearDebugLog(); } 326 // LOG(INFO) << GetAndClearDebugLog(); }
329 327
330 #define TEST_EVENT(state, event) \ 328 #define TEST_EVENT(state, event) \
331 TEST_EVENT_INNER(state, event, false, ); \ 329 TEST_EVENT_INNER(state, event, false, ); \
332 TEST_EVENT_INNER(state, event, true, _Reentrant); 330 TEST_EVENT_INNER(state, event, true, _Reentrant);
333 331
332 // Soak tests:
333
334 // Tests all states with all permutations of multiple events to detect lingering
335 // state issues that would bleed over to other states.
336 // I.E. for each state test all combinations of events E1, E2, E3.
337 //
338 // This produces coverage for event sequences that may happen normally but
339 // would not be exposed by traversing to each state via TransitionToState().
340 // TransitionToState() always takes the same path even when multiple paths
341 // exist.
342 TEST_F(FullscreenControllerStateUnitTest, TransitionsForEachState) {
343 // A tab is needed for tab fullscreen.
344 AddTab(browser(), GURL(chrome::kAboutBlankURL));
345 TestTransitionsForEachState();
346 // Progress of test can be examined via LOG(INFO) << GetAndClearDebugLog();
347 }
348
349
334 // Individual tests for each pair of state and event: 350 // Individual tests for each pair of state and event:
335 351
336 TEST_EVENT(STATE_NORMAL, TOGGLE_FULLSCREEN); 352 TEST_EVENT(STATE_NORMAL, TOGGLE_FULLSCREEN);
337 TEST_EVENT(STATE_NORMAL, TAB_FULLSCREEN_TRUE); 353 TEST_EVENT(STATE_NORMAL, TAB_FULLSCREEN_TRUE);
338 TEST_EVENT(STATE_NORMAL, TAB_FULLSCREEN_FALSE); 354 TEST_EVENT(STATE_NORMAL, TAB_FULLSCREEN_FALSE);
339 #if defined(OS_WIN) 355 #if defined(OS_WIN)
340 TEST_EVENT(STATE_NORMAL, METRO_SNAP_TRUE); 356 TEST_EVENT(STATE_NORMAL, METRO_SNAP_TRUE);
341 TEST_EVENT(STATE_NORMAL, METRO_SNAP_FALSE); 357 TEST_EVENT(STATE_NORMAL, METRO_SNAP_FALSE);
342 #endif 358 #endif
343 TEST_EVENT(STATE_NORMAL, BUBBLE_EXIT_LINK); 359 TEST_EVENT(STATE_NORMAL, BUBBLE_EXIT_LINK);
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 ASSERT_NO_FATAL_FAILURE( 471 ASSERT_NO_FATAL_FAILURE(
456 TransitionToState(STATE_TO_TAB_FULLSCREEN)) 472 TransitionToState(STATE_TO_TAB_FULLSCREEN))
457 << GetAndClearDebugLog(); 473 << GetAndClearDebugLog();
458 474
459 ASSERT_TRUE(InvokeEvent(TAB_FULLSCREEN_TRUE)) << GetAndClearDebugLog(); 475 ASSERT_TRUE(InvokeEvent(TAB_FULLSCREEN_TRUE)) << GetAndClearDebugLog();
460 ASSERT_TRUE(InvokeEvent(TAB_FULLSCREEN_FALSE)) << GetAndClearDebugLog(); 476 ASSERT_TRUE(InvokeEvent(TAB_FULLSCREEN_FALSE)) << GetAndClearDebugLog();
461 ASSERT_TRUE(InvokeEvent(WINDOW_CHANGE)) << GetAndClearDebugLog(); 477 ASSERT_TRUE(InvokeEvent(WINDOW_CHANGE)) << GetAndClearDebugLog();
462 #endif 478 #endif
463 } 479 }
464 480
465 // Soak tests:
466
467 // Tests all states with all permutations of multiple events to detect lingering
468 // state issues that would bleed over to other states.
469 // I.E. for each state test all combinations of events E1, E2, E3.
470 //
471 // This produces coverage for event sequences that may happen normally but
472 // would not be exposed by traversing to each state via TransitionToState().
473 // TransitionToState() always takes the same path even when multiple paths
474 // exist.
475 TEST_F(FullscreenControllerStateUnitTest, TransitionsForEachState) {
476 // A tab is needed for tab fullscreen.
477 AddTab(browser(), GURL(chrome::kAboutBlankURL));
478 TestTransitionsForEachState();
479 // Progress of test can be examined via LOG(INFO) << GetAndClearDebugLog();
480 }
481
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698