Revert 178383
[chromium-blink-merge.git] / chrome / browser / ui / fullscreen / fullscreen_controller_state_interactive_browsertest.cc
blob0664d8e3e411654294a31adc18d86179aae5f377
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
3 // found in the LICENSE file.
5 #include "build/build_config.h"
6 #include "chrome/browser/ui/browser.h"
7 #include "chrome/browser/ui/browser_tabstrip.h"
8 #include "chrome/browser/ui/browser_window.h"
9 #include "chrome/browser/ui/fullscreen/fullscreen_controller.h"
10 #include "chrome/browser/ui/fullscreen/fullscreen_controller_state_test.h"
11 #include "chrome/browser/ui/fullscreen/fullscreen_controller_test.h"
12 #include "chrome/test/base/in_process_browser_test.h"
13 #include "content/public/browser/web_contents.h"
14 #include "content/public/common/url_constants.h"
15 #include "content/public/test/test_utils.h"
16 #include "testing/gtest/include/gtest/gtest.h"
18 using chrome::kAboutBlankURL;
19 using content::PAGE_TRANSITION_TYPED;
21 // Interactive test fixture testing Fullscreen Controller through its states. --
22 // See documentation at the top of fullscreen_controller_state_unittest.cc.
23 class FullscreenControllerStateInteractiveTest
24 : public InProcessBrowserTest,
25 public FullscreenControllerStateTest {
26 public:
27 // FullscreenControllerStateTest:
28 virtual void ChangeWindowFullscreenState() OVERRIDE;
29 virtual bool InvokeEvent(Event event) OVERRIDE;
31 protected:
32 // FullscreenControllerStateTest:
33 virtual bool ShouldSkipTest(State state,
34 Event event,
35 bool reentrant) OVERRIDE;
36 virtual Browser* GetBrowser() OVERRIDE;
38 scoped_ptr<FullscreenNotificationObserver> fullscreen_observer_;
41 void FullscreenControllerStateInteractiveTest::ChangeWindowFullscreenState() {
42 if (fullscreen_observer_) {
43 // If tests are stuck here, use the following log command to see progress.
44 // LOG(INFO) << GetAndClearDebugLog();
45 fullscreen_observer_->Wait();
46 fullscreen_observer_.reset(NULL);
50 bool FullscreenControllerStateInteractiveTest::InvokeEvent(Event event) {
51 switch (event) {
52 case TOGGLE_FULLSCREEN:
53 case TAB_FULLSCREEN_TRUE:
54 case TAB_FULLSCREEN_FALSE:
55 #if defined(OS_WIN)
56 case METRO_SNAP_TRUE:
57 case METRO_SNAP_FALSE:
58 #endif
59 fullscreen_observer_.reset(new FullscreenNotificationObserver());
60 break;
61 case WINDOW_CHANGE:
62 // ChangeWindowFullscreenState() will be called and then wait on
63 // fullscreen_observer_ if needed.
64 break;
65 default:
66 NOTREACHED() << "InvokeEvent needs a handler for event "
67 << GetEventString(event) << GetAndClearDebugLog();
68 return false;
71 return FullscreenControllerStateTest::InvokeEvent(event);
74 bool FullscreenControllerStateInteractiveTest::ShouldSkipTest(State state,
75 Event event,
76 bool reentrant) {
77 // Interactive tests run reentrant or not based on the platform
78 // implementation, so limit our test runs to match.
79 #if defined(OS_WIN)
80 if (!reentrant) {
81 debugging_log_ << "\nSkipping non-reentrant test on Windows.\n";
82 return true;
84 #else
85 if (reentrant) {
86 debugging_log_ << "\nSkipping reentrant test on non-Windows.\n";
87 return true;
89 #endif
91 return FullscreenControllerStateTest::ShouldSkipTest(state,
92 event,
93 reentrant);
96 Browser* FullscreenControllerStateInteractiveTest::GetBrowser() {
97 return InProcessBrowserTest::browser();
100 // Tests -----------------------------------------------------------------------
102 #define TEST_EVENT_INNER(state, event, reentrant, reentrant_id) \
103 IN_PROC_BROWSER_TEST_F(FullscreenControllerStateInteractiveTest, \
104 DISABLED_##state##__##event##reentrant_id) { \
105 AddTabAtIndex(0, GURL(kAboutBlankURL), PAGE_TRANSITION_TYPED); \
106 ASSERT_NO_FATAL_FAILURE(TestStateAndEvent(state, event, reentrant)) \
107 << GetAndClearDebugLog(); \
109 // Progress of tests can be examined by inserting the following line:
110 // LOG(INFO) << GetAndClearDebugLog(); }
112 #define TEST_EVENT(state, event) \
113 TEST_EVENT_INNER(state, event, false, ); \
114 TEST_EVENT_INNER(state, event, true, _Reentrant);
116 // Individual tests for each pair of state and event:
118 TEST_EVENT(STATE_NORMAL, TOGGLE_FULLSCREEN);
119 TEST_EVENT(STATE_NORMAL, TAB_FULLSCREEN_TRUE);
120 TEST_EVENT(STATE_NORMAL, TAB_FULLSCREEN_FALSE);
121 #if defined(OS_WIN)
122 TEST_EVENT(STATE_NORMAL, METRO_SNAP_TRUE);
123 TEST_EVENT(STATE_NORMAL, METRO_SNAP_FALSE);
124 #endif
125 TEST_EVENT(STATE_NORMAL, BUBBLE_EXIT_LINK);
126 TEST_EVENT(STATE_NORMAL, BUBBLE_ALLOW);
127 TEST_EVENT(STATE_NORMAL, BUBBLE_DENY);
128 TEST_EVENT(STATE_NORMAL, WINDOW_CHANGE);
130 TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, TOGGLE_FULLSCREEN);
131 TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, TAB_FULLSCREEN_TRUE);
132 TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, TAB_FULLSCREEN_FALSE);
133 #if defined(OS_WIN)
134 TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, METRO_SNAP_TRUE);
135 TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, METRO_SNAP_FALSE);
136 #endif
137 TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_EXIT_LINK);
138 TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_ALLOW);
139 TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_DENY);
140 TEST_EVENT(STATE_BROWSER_FULLSCREEN_NO_CHROME, WINDOW_CHANGE);
142 #if defined(OS_WIN)
143 TEST_EVENT(STATE_METRO_SNAP, TOGGLE_FULLSCREEN);
144 TEST_EVENT(STATE_METRO_SNAP, TAB_FULLSCREEN_TRUE);
145 TEST_EVENT(STATE_METRO_SNAP, TAB_FULLSCREEN_FALSE);
146 TEST_EVENT(STATE_METRO_SNAP, METRO_SNAP_TRUE);
147 TEST_EVENT(STATE_METRO_SNAP, METRO_SNAP_FALSE);
148 TEST_EVENT(STATE_METRO_SNAP, BUBBLE_EXIT_LINK);
149 TEST_EVENT(STATE_METRO_SNAP, BUBBLE_ALLOW);
150 TEST_EVENT(STATE_METRO_SNAP, BUBBLE_DENY);
151 TEST_EVENT(STATE_METRO_SNAP, WINDOW_CHANGE);
152 #endif
154 TEST_EVENT(STATE_TAB_FULLSCREEN, TOGGLE_FULLSCREEN);
155 TEST_EVENT(STATE_TAB_FULLSCREEN, TAB_FULLSCREEN_TRUE);
156 TEST_EVENT(STATE_TAB_FULLSCREEN, TAB_FULLSCREEN_FALSE);
157 #if defined(OS_WIN)
158 TEST_EVENT(STATE_TAB_FULLSCREEN, METRO_SNAP_TRUE);
159 TEST_EVENT(STATE_TAB_FULLSCREEN, METRO_SNAP_FALSE);
160 #endif
161 TEST_EVENT(STATE_TAB_FULLSCREEN, BUBBLE_EXIT_LINK);
162 TEST_EVENT(STATE_TAB_FULLSCREEN, BUBBLE_ALLOW);
163 TEST_EVENT(STATE_TAB_FULLSCREEN, BUBBLE_DENY);
164 TEST_EVENT(STATE_TAB_FULLSCREEN, WINDOW_CHANGE);
166 TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, TOGGLE_FULLSCREEN);
167 TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, TAB_FULLSCREEN_TRUE);
168 TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, TAB_FULLSCREEN_FALSE);
169 #if defined(OS_WIN)
170 TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, METRO_SNAP_TRUE);
171 TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, METRO_SNAP_FALSE);
172 #endif
173 TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, BUBBLE_EXIT_LINK);
174 TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, BUBBLE_ALLOW);
175 TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, BUBBLE_DENY);
176 TEST_EVENT(STATE_TAB_BROWSER_FULLSCREEN, WINDOW_CHANGE);
178 TEST_EVENT(STATE_TO_NORMAL, TOGGLE_FULLSCREEN);
179 TEST_EVENT(STATE_TO_NORMAL, TAB_FULLSCREEN_TRUE);
180 TEST_EVENT(STATE_TO_NORMAL, TAB_FULLSCREEN_FALSE);
181 #if defined(OS_WIN)
182 TEST_EVENT(STATE_TO_NORMAL, METRO_SNAP_TRUE);
183 TEST_EVENT(STATE_TO_NORMAL, METRO_SNAP_FALSE);
184 #endif
185 TEST_EVENT(STATE_TO_NORMAL, BUBBLE_EXIT_LINK);
186 TEST_EVENT(STATE_TO_NORMAL, BUBBLE_ALLOW);
187 TEST_EVENT(STATE_TO_NORMAL, BUBBLE_DENY);
188 TEST_EVENT(STATE_TO_NORMAL, WINDOW_CHANGE);
190 TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, TOGGLE_FULLSCREEN);
191 TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, TAB_FULLSCREEN_TRUE);
192 TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, TAB_FULLSCREEN_FALSE);
193 #if defined(OS_WIN)
194 TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, METRO_SNAP_TRUE);
195 TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, METRO_SNAP_FALSE);
196 #endif
197 TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_EXIT_LINK);
198 TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_ALLOW);
199 TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, BUBBLE_DENY);
200 TEST_EVENT(STATE_TO_BROWSER_FULLSCREEN_NO_CHROME, WINDOW_CHANGE);
202 TEST_EVENT(STATE_TO_TAB_FULLSCREEN, TOGGLE_FULLSCREEN);
203 TEST_EVENT(STATE_TO_TAB_FULLSCREEN, TAB_FULLSCREEN_TRUE);
204 TEST_EVENT(STATE_TO_TAB_FULLSCREEN, TAB_FULLSCREEN_FALSE);
205 #if defined(OS_WIN)
206 TEST_EVENT(STATE_TO_TAB_FULLSCREEN, METRO_SNAP_TRUE);
207 TEST_EVENT(STATE_TO_TAB_FULLSCREEN, METRO_SNAP_FALSE);
208 #endif
209 TEST_EVENT(STATE_TO_TAB_FULLSCREEN, BUBBLE_EXIT_LINK);
210 TEST_EVENT(STATE_TO_TAB_FULLSCREEN, BUBBLE_ALLOW);
211 TEST_EVENT(STATE_TO_TAB_FULLSCREEN, BUBBLE_DENY);
212 TEST_EVENT(STATE_TO_TAB_FULLSCREEN, WINDOW_CHANGE);
214 // Specific one-off tests for known issues:
216 // Used manually to determine what happens on a platform.
217 IN_PROC_BROWSER_TEST_F(FullscreenControllerStateInteractiveTest,
218 DISABLED_ManualTest) {
219 // A tab is needed for tab fullscreen.
220 AddTabAtIndex(0, GURL(kAboutBlankURL), PAGE_TRANSITION_TYPED);
221 ASSERT_TRUE(InvokeEvent(TOGGLE_FULLSCREEN)) << GetAndClearDebugLog();
222 ASSERT_TRUE(InvokeEvent(WINDOW_CHANGE)) << GetAndClearDebugLog();
223 ASSERT_TRUE(InvokeEvent(TAB_FULLSCREEN_TRUE)) << GetAndClearDebugLog();
224 ASSERT_TRUE(InvokeEvent(TOGGLE_FULLSCREEN)) << GetAndClearDebugLog();
225 ASSERT_TRUE(InvokeEvent(WINDOW_CHANGE)) << GetAndClearDebugLog();
227 // Wait, allowing human operator to observe the result.
228 scoped_refptr<content::MessageLoopRunner> message_loop;
229 message_loop = new content::MessageLoopRunner();
230 message_loop->Run();
233 // Soak tests:
235 // Tests all states with all permutations of multiple events to detect lingering
236 // state issues that would bleed over to other states.
237 // I.E. for each state test all combinations of events E1, E2, E3.
239 // This produces coverage for event sequences that may happen normally but
240 // would not be exposed by traversing to each state via TransitionToState().
241 // TransitionToState() always takes the same path even when multiple paths
242 // exist.
243 IN_PROC_BROWSER_TEST_F(FullscreenControllerStateInteractiveTest,
244 DISABLED_TransitionsForEachState) {
245 // A tab is needed for tab fullscreen.
246 AddTabAtIndex(0, GURL(kAboutBlankURL), PAGE_TRANSITION_TYPED);
247 TestTransitionsForEachState();
248 // Progress of test can be examined via LOG(INFO) << GetAndClearDebugLog();