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

Side by Side Diff: chrome/browser/devtools/devtools_sanity_interactive_browsertest.cc

Issue 2813553005: Add a new set of commands to resize and position windows (Closed)
Patch Set: use interactive_ui_tests Created 3 years, 8 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
« no previous file with comments | « chrome/browser/devtools/devtools_protocol.cc ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 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.
4
5 #include "base/macros.h"
6 #include "base/memory/ptr_util.h"
7 #include "base/run_loop.h"
8 #include "build/build_config.h"
9 #include "chrome/browser/devtools/chrome_devtools_manager_delegate.h"
10 #include "chrome/browser/ui/browser_window.h"
11 #include "chrome/browser/ui/exclusive_access/exclusive_access_context.h"
12 #include "chrome/test/base/in_process_browser_test.h"
13
14 #if defined(OS_MACOSX)
15 #include "ui/base/test/scoped_fake_nswindow_fullscreen.h"
16 #endif
17
18 // Encapsulates waiting for the browser window to change state. This is
19 // needed for example on Chrome desktop linux, where window state change is done
20 // asynchronously as an event received from a different process.
21 class CheckWaiter {
22 public:
23 explicit CheckWaiter(base::Callback<bool()> callback, bool expected)
24 : callback_(callback),
25 expected_(expected),
26 timeout_(base::Time::NowFromSystemTime() +
27 base::TimeDelta::FromSeconds(1)) {}
28 ~CheckWaiter() = default;
29
30 // Blocks until the browser window becomes maximized.
31 void Wait() {
32 if (Check())
33 return;
34
35 base::RunLoop run_loop;
36 quit_ = run_loop.QuitClosure();
37 run_loop.Run();
38 }
39
40 private:
41 bool Check() {
42 if (callback_.Run() != expected_ &&
43 base::Time::NowFromSystemTime() < timeout_) {
44 base::MessageLoop::current()->task_runner()->PostTask(
45 FROM_HERE, base::Bind(base::IgnoreResult(&CheckWaiter::Check),
46 base::Unretained(this)));
47 return false;
48 }
49
50 // Quit the run_loop to end the wait.
51 if (!quit_.is_null())
52 base::ResetAndReturn(&quit_).Run();
53 return true;
54 }
55
56 base::Callback<bool()> callback_;
57 bool expected_;
58 base::Time timeout_;
59 // The waiter's RunLoop quit closure.
60 base::Closure quit_;
61
62 DISALLOW_COPY_AND_ASSIGN(CheckWaiter);
63 };
64
65 class DevToolsManagerDelegateTest : public InProcessBrowserTest {
66 public:
67 std::unique_ptr<base::DictionaryValue> SendCommand(std::string state) {
68 auto params = base::MakeUnique<base::DictionaryValue>();
69 auto bounds_object = base::MakeUnique<base::DictionaryValue>();
70 bounds_object->SetString("windowState", state);
71 params->Set("bounds", std::move(bounds_object));
72 params->SetInteger("windowId", browser()->session_id().id());
73 return ChromeDevToolsManagerDelegate::SetWindowBounds(0, params.get());
74 }
75
76 std::unique_ptr<base::DictionaryValue> UpdateBounds() {
77 auto params = base::MakeUnique<base::DictionaryValue>();
78 auto bounds_object = base::MakeUnique<base::DictionaryValue>();
79 bounds_object->SetString("windowState", "normal");
80 bounds_object->SetInteger("left", 200);
81 bounds_object->SetInteger("height", 400);
82 params->Set("bounds", std::move(bounds_object));
83 params->SetInteger("windowId", browser()->session_id().id());
84 return ChromeDevToolsManagerDelegate::SetWindowBounds(0, params.get());
85 }
86
87 void CheckIsMaximized(bool maximized) {
88 CheckWaiter(base::Bind(&BrowserWindow::IsMaximized,
89 base::Unretained(browser()->window())),
90 maximized)
91 .Wait();
92 EXPECT_EQ(maximized, browser()->window()->IsMaximized());
93 }
94
95 void CheckIsMinimized(bool minimized) {
96 CheckWaiter(base::Bind(&BrowserWindow::IsMinimized,
97 base::Unretained(browser()->window())),
98 minimized)
99 .Wait();
100 EXPECT_EQ(minimized, browser()->window()->IsMinimized());
101 }
102
103 void CheckIsFullscreen(bool fullscreen) {
104 CheckWaiter(base::Bind(&BrowserWindow::IsFullscreen,
105 base::Unretained(browser()->window())),
106 fullscreen)
107 .Wait();
108 EXPECT_EQ(fullscreen, browser()->window()->IsFullscreen());
109 }
110
111 bool IsWindowBoundsEqual(gfx::Rect expected) {
112 return browser()->window()->GetBounds() == expected;
113 }
114
115 void CheckWindowBounds(gfx::Rect expected) {
116 CheckWaiter(base::Bind(&DevToolsManagerDelegateTest::IsWindowBoundsEqual,
117 base::Unretained(this), expected),
118 true)
119 .Wait();
120 EXPECT_EQ(expected, browser()->window()->GetBounds());
121 }
122 };
123
124 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalWindowChangeBounds) {
125 browser()->window()->SetBounds(gfx::Rect(100, 100, 500, 600));
126 CheckWindowBounds(gfx::Rect(100, 100, 500, 600));
127 UpdateBounds();
128 CheckWindowBounds(gfx::Rect(200, 100, 500, 400));
129 }
130
131 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalToMaximizedWindow) {
132 CheckIsMaximized(false);
133 SendCommand("maximized");
134 CheckIsMaximized(true);
135 }
136
137 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalToMinimizedWindow) {
138 CheckIsMinimized(false);
139 SendCommand("minimized");
140 CheckIsMinimized(true);
141 }
142
143 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalToFullscreenWindow) {
144 #if defined(OS_MACOSX)
145 ui::test::ScopedFakeNSWindowFullscreen faker;
146 #endif
147 CheckIsFullscreen(false);
148 SendCommand("fullscreen");
149 #if defined(OS_MACOSX)
150 faker.FinishTransition();
151 #endif
152 CheckIsFullscreen(true);
153 }
154
155 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest,
156 MaximizedToMinimizedWindow) {
157 browser()->window()->Maximize();
158 CheckIsMaximized(true);
159
160 CheckIsMinimized(false);
161 SendCommand("minimized");
162 CheckIsMinimized(true);
163 }
164
165 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest,
166 MaximizedToFullscreenWindow) {
167 browser()->window()->Maximize();
168 CheckIsMaximized(true);
169
170 #if defined(OS_MACOSX)
171 ui::test::ScopedFakeNSWindowFullscreen faker;
172 #endif
173 CheckIsFullscreen(false);
174 SendCommand("fullscreen");
175 #if defined(OS_MACOSX)
176 faker.FinishTransition();
177 #endif
178 CheckIsFullscreen(true);
179 }
180
181 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, ShowMinimizedWindow) {
182 browser()->window()->Minimize();
183 CheckIsMinimized(true);
184 SendCommand("normal");
185 CheckIsMinimized(false);
186 }
187
188 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, RestoreMaximizedWindow) {
189 browser()->window()->Maximize();
190 CheckIsMaximized(true);
191 SendCommand("normal");
192 CheckIsMaximized(false);
193 }
194
195 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, ExitFullscreenWindow) {
196 #if defined(OS_MACOSX)
197 ui::test::ScopedFakeNSWindowFullscreen faker;
198 #endif
199 browser()->window()->GetExclusiveAccessContext()->EnterFullscreen(
200 GURL(), EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE);
201 #if defined(OS_MACOSX)
202 faker.FinishTransition();
203 #endif
204 CheckIsFullscreen(true);
205 SendCommand("normal");
206 #if defined(OS_MACOSX)
207 faker.FinishTransition();
208 #endif
209 CheckIsFullscreen(false);
210 }
OLDNEW
« no previous file with comments | « chrome/browser/devtools/devtools_protocol.cc ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698