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

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, 10 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() OVERRIDE;
55 const GURL& url, 55 virtual bool IsFullscreenWithChrome() OVERRIDE;
56 FullscreenExitBubbleType bubble_type) OVERRIDE; 56 virtual bool IsFullscreenWithoutChrome() OVERRIDE;
57 virtual void ExitPresentationMode() OVERRIDE;
58 virtual bool InPresentationMode() OVERRIDE;
59 #endif 57 #endif
60 58
61 static const char* GetWindowStateString(WindowState state); 59 static const char* GetWindowStateString(WindowState state);
62 WindowState state() const { return state_; } 60 WindowState state() const { return state_; }
63 void set_browser(Browser* browser) { browser_ = browser; } 61 void set_browser(Browser* browser) { browser_ = browser; }
64 void set_reentrant(bool value) { reentrant_ = value; } 62 void set_reentrant(bool value) { reentrant_ = value; }
65 bool reentrant() const { return reentrant_; } 63 bool reentrant() const { return reentrant_; }
66 64
67 // Simulates the window changing state. 65 // Simulates the window changing state.
68 void ChangeWindowFullscreenState(); 66 void ChangeWindowFullscreenState();
69 // Calls ChangeWindowFullscreenState() if |reentrant_| is true. 67 // Calls ChangeWindowFullscreenState() if |reentrant_| is true.
70 void ChangeWindowFullscreenStateIfReentrant(); 68 void ChangeWindowFullscreenStateIfReentrant();
71 69
72 private: 70 private:
73 WindowState state_; 71 WindowState state_;
74 bool mac_presentation_mode_; 72 bool mac_with_chrome_mode_;
75 Browser* browser_; 73 Browser* browser_;
76 74
77 // Causes reentrant calls to be made by calling 75 // Causes reentrant calls to be made by calling
78 // browser_->WindowFullscreenStateChanged() from the BrowserWindow 76 // browser_->WindowFullscreenStateChanged() from the BrowserWindow
79 // interface methods. 77 // interface methods.
80 bool reentrant_; 78 bool reentrant_;
81 }; 79 };
82 80
83 FullscreenControllerTestWindow::FullscreenControllerTestWindow() 81 FullscreenControllerTestWindow::FullscreenControllerTestWindow()
84 : state_(NORMAL), 82 : state_(NORMAL),
85 mac_presentation_mode_(false), 83 mac_with_chrome_mode_(false),
86 browser_(NULL), 84 browser_(NULL),
87 reentrant_(false) { 85 reentrant_(false) {
88 } 86 }
89 87
90 void FullscreenControllerTestWindow::EnterFullscreen( 88 void FullscreenControllerTestWindow::EnterFullscreen(
91 const GURL& url, FullscreenExitBubbleType type) { 89 const GURL& url, FullscreenExitBubbleType type) {
92 EnterFullscreen(); 90 EnterFullscreen();
93 } 91 }
94 92
95 void FullscreenControllerTestWindow::EnterFullscreen() { 93 void FullscreenControllerTestWindow::EnterFullscreen() {
94 mac_with_chrome_mode_ = false;
96 if (!IsFullscreen()) { 95 if (!IsFullscreen()) {
97 state_ = TO_FULLSCREEN; 96 state_ = TO_FULLSCREEN;
98 ChangeWindowFullscreenStateIfReentrant(); 97 ChangeWindowFullscreenStateIfReentrant();
99 } 98 }
100 } 99 }
101 100
102 void FullscreenControllerTestWindow::ExitFullscreen() { 101 void FullscreenControllerTestWindow::ExitFullscreen() {
103 if (IsFullscreen()) { 102 if (IsFullscreen()) {
104 state_ = TO_NORMAL; 103 state_ = TO_NORMAL;
105 mac_presentation_mode_ = false; 104 mac_with_chrome_mode_ = false;
106 ChangeWindowFullscreenStateIfReentrant(); 105 ChangeWindowFullscreenStateIfReentrant();
107 } 106 }
108 } 107 }
109 108
110 bool FullscreenControllerTestWindow::IsFullscreen() const { 109 bool FullscreenControllerTestWindow::IsFullscreen() const {
111 #if defined(OS_MACOSX) 110 #if defined(OS_MACOSX)
112 return state_ == FULLSCREEN || state_ == TO_FULLSCREEN; 111 return state_ == FULLSCREEN || state_ == TO_FULLSCREEN;
113 #else 112 #else
114 return state_ == FULLSCREEN || state_ == TO_NORMAL; 113 return state_ == FULLSCREEN || state_ == TO_NORMAL;
115 #endif 114 #endif
116 } 115 }
117 116
118 #if defined(OS_WIN) 117 #if defined(OS_WIN)
119 void FullscreenControllerTestWindow::SetMetroSnapMode(bool enable) { 118 void FullscreenControllerTestWindow::SetMetroSnapMode(bool enable) {
120 if (enable != IsInMetroSnapMode()) { 119 if (enable != IsInMetroSnapMode()) {
121 if (enable) 120 if (enable)
122 state_ = METRO_SNAP; 121 state_ = METRO_SNAP;
123 else 122 else
124 state_ = NORMAL; 123 state_ = NORMAL;
125 } 124 }
126 ChangeWindowFullscreenStateIfReentrant(); 125 ChangeWindowFullscreenStateIfReentrant();
127 } 126 }
128 127
129 bool FullscreenControllerTestWindow::IsInMetroSnapMode() const { 128 bool FullscreenControllerTestWindow::IsInMetroSnapMode() const {
130 return state_ == METRO_SNAP; 129 return state_ == METRO_SNAP;
131 } 130 }
132 #endif 131 #endif
133 132
134 #if defined(OS_MACOSX) 133 #if defined(OS_MACOSX)
135 void FullscreenControllerTestWindow::EnterPresentationMode( 134 void FullscreenControllerTestWindow::EnterFullscreenWithChrome() {
136 const GURL& url,
137 FullscreenExitBubbleType bubble_type) {
138 mac_presentation_mode_ = true;
139 EnterFullscreen(); 135 EnterFullscreen();
136 mac_with_chrome_mode_ = true;
140 } 137 }
141 138
142 void FullscreenControllerTestWindow::ExitPresentationMode() { 139 bool FullscreenControllerTestWindow::IsFullscreenWithChrome() {
143 if (InPresentationMode()) { 140 return IsFullscreen() && mac_with_chrome_mode_;
144 mac_presentation_mode_ = false;
145 ExitFullscreen();
146 }
147 } 141 }
148 142
149 bool FullscreenControllerTestWindow::InPresentationMode() { 143 bool FullscreenControllerTestWindow::IsFullscreenWithoutChrome() {
150 return mac_presentation_mode_; 144 return IsFullscreen() && !mac_with_chrome_mode_;
151 } 145 }
152 #endif 146 #endif
153 147
154 // static 148 // static
155 const char* FullscreenControllerTestWindow::GetWindowStateString( 149 const char* FullscreenControllerTestWindow::GetWindowStateString(
156 WindowState state) { 150 WindowState state) {
157 switch (state) { 151 switch (state) {
158 case NORMAL: 152 case NORMAL:
159 return "NORMAL"; 153 return "NORMAL";
160 case FULLSCREEN: 154 case FULLSCREEN:
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 window_->set_reentrant(reentrant); 304 window_->set_reentrant(reentrant);
311 FullscreenControllerStateTest::TestStateAndEvent(state, event, reentrant); 305 FullscreenControllerStateTest::TestStateAndEvent(state, event, reentrant);
312 } 306 }
313 307
314 Browser* FullscreenControllerStateUnitTest::GetBrowser() { 308 Browser* FullscreenControllerStateUnitTest::GetBrowser() {
315 return BrowserWithTestWindowTest::browser(); 309 return BrowserWithTestWindowTest::browser();
316 } 310 }
317 311
318 // Tests ----------------------------------------------------------------------- 312 // Tests -----------------------------------------------------------------------
319 313
314 #define TEST_EVENT_INNER(state, event, reentrant, reentrant_id) \
315 TEST_F(FullscreenControllerStateUnitTest, \
316 state##__##event##reentrant_id) { \
317 AddTab(browser(), GURL(chrome::kAboutBlankURL)); \
318 ASSERT_NO_FATAL_FAILURE(TestStateAndEvent(state, event, reentrant)) \
319 << GetAndClearDebugLog(); \
320 }
321 // Progress of tests can be examined by inserting the following line:
322 // LOG(INFO) << GetAndClearDebugLog(); }
323
324 #define TEST_EVENT(state, event) \
325 TEST_EVENT_INNER(state, event, false, ); \
326 TEST_EVENT_INNER(state, event, true, _Reentrant);
327
320 // Soak tests: 328 // Soak tests:
321 329
322 // Tests all states with all permutations of multiple events to detect lingering 330 // Tests all states with all permutations of multiple events to detect lingering
323 // state issues that would bleed over to other states. 331 // state issues that would bleed over to other states.
324 // I.E. for each state test all combinations of events E1, E2, E3. 332 // I.E. for each state test all combinations of events E1, E2, E3.
325 // 333 //
326 // This produces coverage for event sequences that may happen normally but 334 // This produces coverage for event sequences that may happen normally but
327 // would not be exposed by traversing to each state via TransitionToState(). 335 // would not be exposed by traversing to each state via TransitionToState().
328 // TransitionToState() always takes the same path even when multiple paths 336 // TransitionToState() always takes the same path even when multiple paths
329 // exist. 337 // exist.
330 TEST_F(FullscreenControllerStateUnitTest, TransitionsForEachState) { 338 TEST_F(FullscreenControllerStateUnitTest, TransitionsForEachState) {
331 // A tab is needed for tab fullscreen. 339 // A tab is needed for tab fullscreen.
332 AddTab(browser(), GURL(chrome::kAboutBlankURL)); 340 AddTab(browser(), GURL(chrome::kAboutBlankURL));
333 TestTransitionsForEachState(); 341 TestTransitionsForEachState();
334 // Progress of test can be examined via LOG(INFO) << GetAndClearDebugLog(); 342 // Progress of test can be examined via LOG(INFO) << GetAndClearDebugLog();
335 } 343 }
336 344
337 345
338 // Individual tests for each pair of state and event: 346 // Individual tests for each pair of state and event:
339 347
340 #define TEST_EVENT_INNER(state, event, reentrant, reentrant_id) \
341 TEST_F(FullscreenControllerStateUnitTest, \
342 state##__##event##reentrant_id) { \
343 AddTab(browser(), GURL(chrome::kAboutBlankURL)); \
344 ASSERT_NO_FATAL_FAILURE(TestStateAndEvent(state, event, reentrant)) \
345 << GetAndClearDebugLog(); \
346 }
347 // Progress of tests can be examined by inserting the following line:
348 // LOG(INFO) << GetAndClearDebugLog(); }
349
350 #define TEST_EVENT(state, event) \
351 TEST_EVENT_INNER(state, event, false, ); \
352 TEST_EVENT_INNER(state, event, true, _Reentrant);
353
354 TEST_EVENT(STATE_NORMAL, TOGGLE_FULLSCREEN); 348 TEST_EVENT(STATE_NORMAL, TOGGLE_FULLSCREEN);
355 TEST_EVENT(STATE_NORMAL, TAB_FULLSCREEN_TRUE); 349 TEST_EVENT(STATE_NORMAL, TAB_FULLSCREEN_TRUE);
356 TEST_EVENT(STATE_NORMAL, TAB_FULLSCREEN_FALSE); 350 TEST_EVENT(STATE_NORMAL, TAB_FULLSCREEN_FALSE);
357 #if defined(OS_WIN) 351 #if defined(OS_WIN)
358 TEST_EVENT(STATE_NORMAL, METRO_SNAP_TRUE); 352 TEST_EVENT(STATE_NORMAL, METRO_SNAP_TRUE);
359 TEST_EVENT(STATE_NORMAL, METRO_SNAP_FALSE); 353 TEST_EVENT(STATE_NORMAL, METRO_SNAP_FALSE);
360 #endif 354 #endif
361 TEST_EVENT(STATE_NORMAL, BUBBLE_EXIT_LINK); 355 TEST_EVENT(STATE_NORMAL, BUBBLE_EXIT_LINK);
362 TEST_EVENT(STATE_NORMAL, BUBBLE_ALLOW); 356 TEST_EVENT(STATE_NORMAL, BUBBLE_ALLOW);
363 TEST_EVENT(STATE_NORMAL, BUBBLE_DENY); 357 TEST_EVENT(STATE_NORMAL, BUBBLE_DENY);
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 ASSERT_NO_FATAL_FAILURE( 468 ASSERT_NO_FATAL_FAILURE(
475 TransitionToState(STATE_TO_TAB_FULLSCREEN)) 469 TransitionToState(STATE_TO_TAB_FULLSCREEN))
476 << GetAndClearDebugLog(); 470 << GetAndClearDebugLog();
477 471
478 ASSERT_TRUE(InvokeEvent(TAB_FULLSCREEN_TRUE)) << GetAndClearDebugLog(); 472 ASSERT_TRUE(InvokeEvent(TAB_FULLSCREEN_TRUE)) << GetAndClearDebugLog();
479 ASSERT_TRUE(InvokeEvent(TAB_FULLSCREEN_FALSE)) << GetAndClearDebugLog(); 473 ASSERT_TRUE(InvokeEvent(TAB_FULLSCREEN_FALSE)) << GetAndClearDebugLog();
480 ASSERT_TRUE(InvokeEvent(WINDOW_CHANGE)) << GetAndClearDebugLog(); 474 ASSERT_TRUE(InvokeEvent(WINDOW_CHANGE)) << GetAndClearDebugLog();
481 #endif 475 #endif
482 } 476 }
483 477
OLDNEW
« no previous file with comments | « chrome/browser/ui/fullscreen/fullscreen_controller_state_test.cc ('k') | chrome/test/base/test_browser_window.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698