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

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

Issue 2734123004: add a new set of commands to resize and position windows (Closed)
Patch Set: rebase 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
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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <memory> 7 #include <memory>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/cancelable_callback.h" 11 #include "base/cancelable_callback.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/files/file_path.h" 14 #include "base/files/file_path.h"
15 #include "base/location.h" 15 #include "base/location.h"
16 #include "base/macros.h" 16 #include "base/macros.h"
17 #include "base/memory/ptr_util.h" 17 #include "base/memory/ptr_util.h"
18 #include "base/memory/ref_counted.h" 18 #include "base/memory/ref_counted.h"
19 #include "base/path_service.h" 19 #include "base/path_service.h"
20 #include "base/single_thread_task_runner.h" 20 #include "base/single_thread_task_runner.h"
21 #include "base/strings/string_number_conversions.h" 21 #include "base/strings/string_number_conversions.h"
22 #include "base/strings/string_util.h" 22 #include "base/strings/string_util.h"
23 #include "base/strings/utf_string_conversions.h" 23 #include "base/strings/utf_string_conversions.h"
24 #include "base/test/test_timeouts.h" 24 #include "base/test/test_timeouts.h"
25 #include "base/threading/sequenced_worker_pool.h" 25 #include "base/threading/sequenced_worker_pool.h"
26 #include "base/threading/thread_task_runner_handle.h" 26 #include "base/threading/thread_task_runner_handle.h"
27 #include "build/build_config.h" 27 #include "build/build_config.h"
28 #include "chrome/browser/chrome_notification_types.h" 28 #include "chrome/browser/chrome_notification_types.h"
29 #include "chrome/browser/devtools/chrome_devtools_manager_delegate.h"
29 #include "chrome/browser/devtools/device/tcp_device_provider.h" 30 #include "chrome/browser/devtools/device/tcp_device_provider.h"
30 #include "chrome/browser/devtools/devtools_window_testing.h" 31 #include "chrome/browser/devtools/devtools_window_testing.h"
31 #include "chrome/browser/extensions/extension_apitest.h" 32 #include "chrome/browser/extensions/extension_apitest.h"
32 #include "chrome/browser/extensions/extension_browsertest.h" 33 #include "chrome/browser/extensions/extension_browsertest.h"
33 #include "chrome/browser/extensions/extension_service.h" 34 #include "chrome/browser/extensions/extension_service.h"
34 #include "chrome/browser/extensions/test_extension_dir.h" 35 #include "chrome/browser/extensions/test_extension_dir.h"
35 #include "chrome/browser/extensions/unpacked_installer.h" 36 #include "chrome/browser/extensions/unpacked_installer.h"
36 #include "chrome/browser/lifetime/application_lifetime.h" 37 #include "chrome/browser/lifetime/application_lifetime.h"
37 #include "chrome/browser/profiles/profile.h" 38 #include "chrome/browser/profiles/profile.h"
38 #include "chrome/browser/ui/browser.h" 39 #include "chrome/browser/ui/browser.h"
39 #include "chrome/browser/ui/browser_commands.h" 40 #include "chrome/browser/ui/browser_commands.h"
41 #include "chrome/browser/ui/browser_window.h"
42 #include "chrome/browser/ui/exclusive_access/exclusive_access_context.h"
40 #include "chrome/browser/ui/tabs/tab_strip_model.h" 43 #include "chrome/browser/ui/tabs/tab_strip_model.h"
41 #include "chrome/common/chrome_paths.h" 44 #include "chrome/common/chrome_paths.h"
42 #include "chrome/common/chrome_switches.h" 45 #include "chrome/common/chrome_switches.h"
43 #include "chrome/common/extensions/extension_process_policy.h" 46 #include "chrome/common/extensions/extension_process_policy.h"
44 #include "chrome/common/pref_names.h" 47 #include "chrome/common/pref_names.h"
45 #include "chrome/common/url_constants.h" 48 #include "chrome/common/url_constants.h"
46 #include "chrome/test/base/in_process_browser_test.h" 49 #include "chrome/test/base/in_process_browser_test.h"
47 #include "chrome/test/base/test_chrome_web_ui_controller_factory.h" 50 #include "chrome/test/base/test_chrome_web_ui_controller_factory.h"
48 #include "chrome/test/base/ui_test_utils.h" 51 #include "chrome/test/base/ui_test_utils.h"
49 #include "components/app_modal/javascript_app_modal_dialog.h" 52 #include "components/app_modal/javascript_app_modal_dialog.h"
(...skipping 28 matching lines...) Expand all
78 #include "net/test/spawned_test_server/spawned_test_server.h" 81 #include "net/test/spawned_test_server/spawned_test_server.h"
79 #include "net/test/url_request/url_request_mock_http_job.h" 82 #include "net/test/url_request/url_request_mock_http_job.h"
80 #include "net/url_request/url_request_context.h" 83 #include "net/url_request/url_request_context.h"
81 #include "net/url_request/url_request_filter.h" 84 #include "net/url_request/url_request_filter.h"
82 #include "net/url_request/url_request_http_job.h" 85 #include "net/url_request/url_request_http_job.h"
83 #include "third_party/WebKit/public/platform/WebInputEvent.h" 86 #include "third_party/WebKit/public/platform/WebInputEvent.h"
84 #include "ui/compositor/compositor_switches.h" 87 #include "ui/compositor/compositor_switches.h"
85 #include "ui/gl/gl_switches.h" 88 #include "ui/gl/gl_switches.h"
86 #include "url/gurl.h" 89 #include "url/gurl.h"
87 90
91 #if defined(OS_MACOSX)
92 #include "ui/base/test/scoped_fake_nswindow_fullscreen.h"
93 #endif
94
88 using app_modal::AppModalDialog; 95 using app_modal::AppModalDialog;
89 using app_modal::JavaScriptAppModalDialog; 96 using app_modal::JavaScriptAppModalDialog;
90 using app_modal::NativeAppModalDialog; 97 using app_modal::NativeAppModalDialog;
91 using content::BrowserThread; 98 using content::BrowserThread;
92 using content::DevToolsAgentHost; 99 using content::DevToolsAgentHost;
93 using content::NavigationController; 100 using content::NavigationController;
94 using content::RenderFrameHost; 101 using content::RenderFrameHost;
95 using content::RenderViewHost; 102 using content::RenderViewHost;
96 using content::WebContents; 103 using content::WebContents;
97 using content::WorkerService; 104 using content::WorkerService;
(...skipping 1962 matching lines...) Expand 10 before | Expand all | Expand 10 after
2060 RunTestFunction(window, "testWindowInitializedOnNavigateBack"); 2067 RunTestFunction(window, "testWindowInitializedOnNavigateBack");
2061 2068
2062 DevToolsWindowTesting::CloseDevToolsWindowSync(window); 2069 DevToolsWindowTesting::CloseDevToolsWindowSync(window);
2063 content::WebUIControllerFactory::UnregisterFactoryForTesting(&test_factory); 2070 content::WebUIControllerFactory::UnregisterFactoryForTesting(&test_factory);
2064 } 2071 }
2065 2072
2066 // Tests scripts panel showing. 2073 // Tests scripts panel showing.
2067 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestDevToolsSharedWorker) { 2074 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestDevToolsSharedWorker) {
2068 RunTest("testDevToolsSharedWorker", url::kAboutBlankURL); 2075 RunTest("testDevToolsSharedWorker", url::kAboutBlankURL);
2069 } 2076 }
2077
2078 // Encapsulates waiting for the browser window to change state. This is
2079 // needed for example on Chrome desktop linux, where window state change is done
2080 // asynchronously as an event received from a different process.
2081 class CheckWaiter {
2082 public:
2083 explicit CheckWaiter(base::Callback<bool()> callback, bool expected)
2084 : callback_(callback),
2085 expected_(expected),
2086 timeout_(base::Time::NowFromSystemTime() +
2087 base::TimeDelta::FromMilliseconds(1000)) {}
2088 ~CheckWaiter() = default;
2089
2090 // Blocks until the browser window becomes maximized.
2091 void Wait() {
2092 if (Check())
2093 return;
2094
2095 base::RunLoop run_loop;
2096 quit_ = run_loop.QuitClosure();
2097 run_loop.Run();
2098 }
2099
2100 private:
2101 bool Check() {
2102 if (callback_.Run() != expected_ &&
2103 base::Time::NowFromSystemTime() < timeout_) {
2104 base::MessageLoop::current()->task_runner()->PostTask(
2105 FROM_HERE, base::Bind(base::IgnoreResult(&CheckWaiter::Check),
2106 base::Unretained(this)));
2107 return false;
2108 }
2109
2110 // Quit the run_loop to end the wait.
2111 if (!quit_.is_null())
2112 base::ResetAndReturn(&quit_).Run();
2113 return true;
2114 }
2115
2116 base::Callback<bool()> callback_;
2117 bool expected_;
2118 base::Time timeout_;
2119 // The waiter's RunLoop quit closure.
2120 base::Closure quit_;
2121
2122 DISALLOW_COPY_AND_ASSIGN(CheckWaiter);
2123 };
2124
2125 class DevToolsManagerDelegateTest : public InProcessBrowserTest {
2126 public:
2127 std::unique_ptr<base::DictionaryValue> SendCommand(std::string state) {
2128 auto params = base::MakeUnique<base::DictionaryValue>();
2129 auto bounds_object = base::MakeUnique<base::DictionaryValue>();
2130 bounds_object->SetString("windowState", state);
2131 params->Set("bounds", std::move(bounds_object));
2132 params->SetInteger("windowId", browser()->session_id().id());
2133 return ChromeDevToolsManagerDelegate::SetWindowBounds(0, params.get());
2134 }
2135
2136 std::unique_ptr<base::DictionaryValue> UpdateBounds() {
2137 auto params = base::MakeUnique<base::DictionaryValue>();
2138 auto bounds_object = base::MakeUnique<base::DictionaryValue>();
2139 bounds_object->SetString("windowState", "normal");
2140 bounds_object->SetInteger("left", 200);
2141 bounds_object->SetInteger("height", 400);
2142 params->Set("bounds", std::move(bounds_object));
2143 params->SetInteger("windowId", browser()->session_id().id());
2144 return ChromeDevToolsManagerDelegate::SetWindowBounds(0, params.get());
2145 }
2146
2147 void CheckIsMaximized(bool maximized) {
2148 CheckWaiter(base::Bind(&BrowserWindow::IsMaximized,
2149 base::Unretained(browser()->window())),
2150 maximized)
2151 .Wait();
2152 EXPECT_EQ(maximized, browser()->window()->IsMaximized());
2153 }
2154
2155 void CheckIsMinimized(bool minimized) {
2156 CheckWaiter(base::Bind(&BrowserWindow::IsMinimized,
2157 base::Unretained(browser()->window())),
2158 minimized)
2159 .Wait();
2160 EXPECT_EQ(minimized, browser()->window()->IsMinimized());
2161 }
2162
2163 void CheckIsFullscreen(bool fullscreen) {
2164 CheckWaiter(base::Bind(&BrowserWindow::IsFullscreen,
2165 base::Unretained(browser()->window())),
2166 fullscreen)
2167 .Wait();
2168 EXPECT_EQ(fullscreen, browser()->window()->IsFullscreen());
2169 }
2170
2171 bool IsWindowBoundsEqual(gfx::Rect expected) {
2172 return browser()->window()->GetBounds() == expected;
2173 }
2174
2175 void CheckWindowBounds(gfx::Rect expected) {
2176 CheckWaiter(base::Bind(&DevToolsManagerDelegateTest::IsWindowBoundsEqual,
2177 base::Unretained(this), expected),
2178 true)
2179 .Wait();
2180 EXPECT_EQ(expected, browser()->window()->GetBounds());
2181 }
2182 };
2183
2184 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalWindowChangeBounds) {
2185 browser()->window()->SetBounds(gfx::Rect(100, 100, 500, 600));
2186 CheckWindowBounds(gfx::Rect(100, 100, 500, 600));
2187 UpdateBounds();
2188 CheckWindowBounds(gfx::Rect(200, 100, 500, 400));
2189 }
2190
2191 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalToMaximizedWindow) {
2192 CheckIsMaximized(false);
2193 SendCommand("maximized");
2194 CheckIsMaximized(true);
2195 }
2196
2197 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalToMinimizedWindow) {
2198 CheckIsMinimized(false);
2199 SendCommand("minimized");
2200 CheckIsMinimized(true);
2201 }
2202
2203 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalToFullscreenWindow) {
2204 #if defined(OS_MACOSX)
2205 ui::test::ScopedFakeNSWindowFullscreen faker;
2206 #endif
2207 CheckIsFullscreen(false);
2208 SendCommand("fullscreen");
2209 #if defined(OS_MACOSX)
2210 faker.FinishTransition();
2211 #endif
2212 CheckIsFullscreen(true);
2213 }
2214
2215 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest,
2216 MaximizedToMinimizedWindow) {
2217 browser()->window()->Maximize();
2218 CheckIsMaximized(true);
2219
2220 CheckIsMinimized(false);
2221 SendCommand("minimized");
2222 CheckIsMinimized(true);
2223 }
2224
2225 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest,
2226 MaximizedToFullscreenWindow) {
2227 browser()->window()->Maximize();
2228 CheckIsMaximized(true);
2229
2230 #if defined(OS_MACOSX)
2231 ui::test::ScopedFakeNSWindowFullscreen faker;
2232 #endif
2233 CheckIsFullscreen(false);
2234 SendCommand("fullscreen");
2235 #if defined(OS_MACOSX)
2236 faker.FinishTransition();
2237 #endif
2238 CheckIsFullscreen(true);
2239 }
2240
2241 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, ShowMinimizedWindow) {
2242 browser()->window()->Minimize();
2243 CheckIsMinimized(true);
2244 SendCommand("normal");
2245 CheckIsMinimized(false);
2246 }
2247
2248 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, RestoreMaximizedWindow) {
2249 browser()->window()->Maximize();
2250 CheckIsMaximized(true);
2251 SendCommand("normal");
2252 CheckIsMaximized(false);
2253 }
2254
2255 IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, ExitFullscreenWindow) {
2256 #if defined(OS_MACOSX)
2257 ui::test::ScopedFakeNSWindowFullscreen faker;
2258 #endif
2259 browser()->window()->GetExclusiveAccessContext()->EnterFullscreen(
2260 GURL(), EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE);
2261 #if defined(OS_MACOSX)
2262 faker.FinishTransition();
2263 #endif
2264 CheckIsFullscreen(true);
2265 SendCommand("normal");
2266 #if defined(OS_MACOSX)
2267 faker.FinishTransition();
2268 #endif
2269 CheckIsFullscreen(false);
2270 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698