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

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

Issue 395783002: [DevTools] Move DevToolsWindow testing code to a separate class. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased, added cleanup to some tests Created 6 years, 5 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
« no previous file with comments | « no previous file | chrome/browser/devtools/devtools_window.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/cancelable_callback.h" 6 #include "base/cancelable_callback.h"
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/prefs/pref_service.h" 11 #include "base/prefs/pref_service.h"
12 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "base/test/test_timeouts.h" 14 #include "base/test/test_timeouts.h"
15 #include "chrome/browser/chrome_notification_types.h" 15 #include "chrome/browser/chrome_notification_types.h"
16 #include "chrome/browser/devtools/browser_list_tabcontents_provider.h" 16 #include "chrome/browser/devtools/browser_list_tabcontents_provider.h"
17 #include "chrome/browser/devtools/devtools_window.h" 17 #include "chrome/browser/devtools/devtools_window_testing.h"
18 #include "chrome/browser/extensions/extension_apitest.h" 18 #include "chrome/browser/extensions/extension_apitest.h"
19 #include "chrome/browser/extensions/extension_browsertest.h" 19 #include "chrome/browser/extensions/extension_browsertest.h"
20 #include "chrome/browser/extensions/extension_service.h" 20 #include "chrome/browser/extensions/extension_service.h"
21 #include "chrome/browser/extensions/unpacked_installer.h" 21 #include "chrome/browser/extensions/unpacked_installer.h"
22 #include "chrome/browser/lifetime/application_lifetime.h" 22 #include "chrome/browser/lifetime/application_lifetime.h"
23 #include "chrome/browser/profiles/profile.h" 23 #include "chrome/browser/profiles/profile.h"
24 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" 24 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h"
25 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" 25 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h"
26 #include "chrome/browser/ui/browser.h" 26 #include "chrome/browser/ui/browser.h"
27 #include "chrome/browser/ui/browser_commands.h" 27 #include "chrome/browser/ui/browser_commands.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 const char kSlowTestPage[] = 77 const char kSlowTestPage[] =
78 "chunked?waitBeforeHeaders=100&waitBetweenChunks=100&chunksNumber=2"; 78 "chunked?waitBeforeHeaders=100&waitBetweenChunks=100&chunksNumber=2";
79 const char kSharedWorkerTestPage[] = 79 const char kSharedWorkerTestPage[] =
80 "files/workers/workers_ui_shared_worker.html"; 80 "files/workers/workers_ui_shared_worker.html";
81 const char kReloadSharedWorkerTestPage[] = 81 const char kReloadSharedWorkerTestPage[] =
82 "files/workers/debug_shared_worker_initialization.html"; 82 "files/workers/debug_shared_worker_initialization.html";
83 83
84 void RunTestFunction(DevToolsWindow* window, const char* test_name) { 84 void RunTestFunction(DevToolsWindow* window, const char* test_name) {
85 std::string result; 85 std::string result;
86 86
87 RenderViewHost* rvh = DevToolsWindowTesting::Get(window)->
88 main_web_contents()->GetRenderViewHost();
87 // At first check that JavaScript part of the front-end is loaded by 89 // At first check that JavaScript part of the front-end is loaded by
88 // checking that global variable uiTests exists(it's created after all js 90 // checking that global variable uiTests exists(it's created after all js
89 // files have been loaded) and has runTest method. 91 // files have been loaded) and has runTest method.
90 ASSERT_TRUE( 92 ASSERT_TRUE(
91 content::ExecuteScriptAndExtractString( 93 content::ExecuteScriptAndExtractString(
92 window->web_contents_for_test()->GetRenderViewHost(), 94 rvh,
93 "window.domAutomationController.send(" 95 "window.domAutomationController.send("
94 " '' + (window.uiTests && (typeof uiTests.runTest)));", 96 " '' + (window.uiTests && (typeof uiTests.runTest)));",
95 &result)); 97 &result));
96 98
97 ASSERT_EQ("function", result) << "DevTools front-end is broken."; 99 ASSERT_EQ("function", result) << "DevTools front-end is broken.";
98 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 100 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
99 window->web_contents_for_test()->GetRenderViewHost(), 101 rvh,
100 base::StringPrintf("uiTests.runTest('%s')", test_name), 102 base::StringPrintf("uiTests.runTest('%s')", test_name),
101 &result)); 103 &result));
102 EXPECT_EQ("[OK]", result); 104 EXPECT_EQ("[OK]", result);
103 } 105 }
104 106
105 } // namespace 107 } // namespace
106 108
107 class DevToolsSanityTest : public InProcessBrowserTest { 109 class DevToolsSanityTest : public InProcessBrowserTest {
108 public: 110 public:
109 DevToolsSanityTest() 111 DevToolsSanityTest()
(...skipping 10 matching lines...) Expand all
120 void LoadTestPage(const std::string& test_page) { 122 void LoadTestPage(const std::string& test_page) {
121 GURL url = test_server()->GetURL(test_page); 123 GURL url = test_server()->GetURL(test_page);
122 ui_test_utils::NavigateToURL(browser(), url); 124 ui_test_utils::NavigateToURL(browser(), url);
123 } 125 }
124 126
125 void OpenDevToolsWindow(const std::string& test_page, bool is_docked) { 127 void OpenDevToolsWindow(const std::string& test_page, bool is_docked) {
126 ASSERT_TRUE(test_server()->Start()); 128 ASSERT_TRUE(test_server()->Start());
127 LoadTestPage(test_page); 129 LoadTestPage(test_page);
128 130
129 inspected_rvh_ = GetInspectedTab()->GetRenderViewHost(); 131 inspected_rvh_ = GetInspectedTab()->GetRenderViewHost();
130 window_ = 132 window_ = DevToolsWindowTesting::OpenDevToolsWindowSync(
131 DevToolsWindow::OpenDevToolsWindowForTest(inspected_rvh_, is_docked); 133 inspected_rvh_, is_docked);
132 ui_test_utils::WaitUntilDevToolsWindowLoaded(window_);
133 } 134 }
134 135
135 WebContents* GetInspectedTab() { 136 WebContents* GetInspectedTab() {
136 return browser()->tab_strip_model()->GetWebContentsAt(0); 137 return browser()->tab_strip_model()->GetWebContentsAt(0);
137 } 138 }
138 139
139 void ToggleDevToolsWindow() { 140 void CloseDevToolsWindow() {
140 content::WindowedNotificationObserver close_observer( 141 DevToolsWindowTesting::CloseDevToolsWindowSync(window_);
141 content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
142 content::Source<content::WebContents>(
143 window_->web_contents_for_test()));
144 DevToolsWindow::ToggleDevToolsWindow(inspected_rvh_, false,
145 DevToolsToggleAction::Toggle());
146 close_observer.Wait();
147 } 142 }
148 143
149 void ToggleDevToolsWindowDontWait() { 144 WebContents* main_web_contents() {
150 DevToolsWindow::ToggleDevToolsWindow(inspected_rvh_, false, 145 return DevToolsWindowTesting::Get(window_)->main_web_contents();
151 DevToolsToggleAction::Toggle());
152 } 146 }
153 147
154 void CloseDevToolsWindow() { 148 WebContents* toolbox_web_contents() {
155 DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); 149 return DevToolsWindowTesting::Get(window_)->toolbox_web_contents();
156 content::WindowedNotificationObserver close_observer(
157 content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
158 content::Source<content::WebContents>(
159 window_->web_contents_for_test()));
160 devtools_manager->CloseAllClientHosts();
161 close_observer.Wait();
162 } 150 }
163 151
164 DevToolsWindow* window_; 152 DevToolsWindow* window_;
165 RenderViewHost* inspected_rvh_; 153 RenderViewHost* inspected_rvh_;
166 }; 154 };
167 155
168 // Used to block until a dev tools window gets beforeunload event. 156 // Used to block until a dev tools window gets beforeunload event.
169 class DevToolsWindowBeforeUnloadObserver 157 class DevToolsWindowBeforeUnloadObserver
170 : public content::WebContentsObserver { 158 : public content::WebContentsObserver {
171 public: 159 public:
172 explicit DevToolsWindowBeforeUnloadObserver(DevToolsWindow*); 160 explicit DevToolsWindowBeforeUnloadObserver(DevToolsWindow*);
173 void Wait(); 161 void Wait();
174 private: 162 private:
175 // Invoked when the beforeunload handler fires. 163 // Invoked when the beforeunload handler fires.
176 virtual void BeforeUnloadFired(const base::TimeTicks& proceed_time) OVERRIDE; 164 virtual void BeforeUnloadFired(const base::TimeTicks& proceed_time) OVERRIDE;
177 165
178 bool m_fired; 166 bool m_fired;
179 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; 167 scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
180 DISALLOW_COPY_AND_ASSIGN(DevToolsWindowBeforeUnloadObserver); 168 DISALLOW_COPY_AND_ASSIGN(DevToolsWindowBeforeUnloadObserver);
181 }; 169 };
182 170
183 DevToolsWindowBeforeUnloadObserver::DevToolsWindowBeforeUnloadObserver( 171 DevToolsWindowBeforeUnloadObserver::DevToolsWindowBeforeUnloadObserver(
184 DevToolsWindow* devtools_window) 172 DevToolsWindow* devtools_window)
185 : WebContentsObserver(devtools_window->web_contents_for_test()), 173 : WebContentsObserver(
174 DevToolsWindowTesting::Get(devtools_window)->main_web_contents()),
186 m_fired(false) { 175 m_fired(false) {
187 } 176 }
188 177
189 void DevToolsWindowBeforeUnloadObserver::Wait() { 178 void DevToolsWindowBeforeUnloadObserver::Wait() {
190 if (m_fired) 179 if (m_fired)
191 return; 180 return;
192 message_loop_runner_ = new content::MessageLoopRunner; 181 message_loop_runner_ = new content::MessageLoopRunner;
193 message_loop_runner_->Run(); 182 message_loop_runner_->Run();
194 } 183 }
195 184
196 void DevToolsWindowBeforeUnloadObserver::BeforeUnloadFired( 185 void DevToolsWindowBeforeUnloadObserver::BeforeUnloadFired(
197 const base::TimeTicks& proceed_time) { 186 const base::TimeTicks& proceed_time) {
198 m_fired = true; 187 m_fired = true;
199 if (message_loop_runner_.get()) 188 if (message_loop_runner_.get())
200 message_loop_runner_->Quit(); 189 message_loop_runner_->Quit();
201 } 190 }
202 191
203 class DevToolsBeforeUnloadTest: public DevToolsSanityTest { 192 class DevToolsBeforeUnloadTest: public DevToolsSanityTest {
204 public: 193 public:
205 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 194 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
206 command_line->AppendSwitch( 195 command_line->AppendSwitch(
207 switches::kDisableHangMonitor); 196 switches::kDisableHangMonitor);
208 } 197 }
209 198
210 void CloseInspectedTab() { 199 void CloseInspectedTab() {
211 browser()->tab_strip_model()->CloseWebContentsAt(0, 200 browser()->tab_strip_model()->CloseWebContentsAt(0,
212 TabStripModel::CLOSE_NONE); 201 TabStripModel::CLOSE_NONE);
213 } 202 }
214 203
215 void CloseDockedDevTools() { 204 void CloseDevToolsWindowAsync() {
216 ToggleDevToolsWindowDontWait(); 205 DevToolsWindowTesting::CloseDevToolsWindow(window_);
217 }
218
219 void CloseUndockedDevTools() {
220 chrome::CloseWindow(window_->browser_for_test());
221 } 206 }
222 207
223 void CloseInspectedBrowser() { 208 void CloseInspectedBrowser() {
224 chrome::CloseWindow(browser()); 209 chrome::CloseWindow(browser());
225 } 210 }
211
226 protected: 212 protected:
227 void InjectBeforeUnloadListener(content::WebContents* web_contents) { 213 void InjectBeforeUnloadListener(content::WebContents* web_contents) {
228 ASSERT_TRUE(content::ExecuteScript(web_contents->GetRenderViewHost(), 214 ASSERT_TRUE(content::ExecuteScript(web_contents->GetRenderViewHost(),
229 "window.addEventListener('beforeunload'," 215 "window.addEventListener('beforeunload',"
230 "function(event) { event.returnValue = 'Foo'; });")); 216 "function(event) { event.returnValue = 'Foo'; });"));
231 } 217 }
232 218
233 void RunBeforeUnloadSanityTest(bool is_docked, 219 void RunBeforeUnloadSanityTest(bool is_docked,
234 base::Callback<void(void)> close_method, 220 base::Callback<void(void)> close_method,
235 bool wait_for_browser_close = true) { 221 bool wait_for_browser_close = true) {
236 OpenDevToolsWindow(kDebuggerTestPage, is_docked); 222 OpenDevToolsWindow(kDebuggerTestPage, is_docked);
237 content::WindowedNotificationObserver devtools_close_observer( 223 scoped_refptr<content::MessageLoopRunner> runner =
238 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, 224 new content::MessageLoopRunner;
239 content::Source<content::WebContents>( 225 DevToolsWindowTesting::Get(window_)->
240 window_->web_contents_for_test())); 226 SetCloseCallback(runner->QuitClosure());
241 InjectBeforeUnloadListener(window_->web_contents_for_test()); 227 InjectBeforeUnloadListener(main_web_contents());
242 { 228 {
243 DevToolsWindowBeforeUnloadObserver before_unload_observer(window_); 229 DevToolsWindowBeforeUnloadObserver before_unload_observer(window_);
244 close_method.Run(); 230 close_method.Run();
245 CancelModalDialog(); 231 CancelModalDialog();
246 before_unload_observer.Wait(); 232 before_unload_observer.Wait();
247 } 233 }
248 { 234 {
249 content::WindowedNotificationObserver close_observer( 235 content::WindowedNotificationObserver close_observer(
250 chrome::NOTIFICATION_BROWSER_CLOSED, 236 chrome::NOTIFICATION_BROWSER_CLOSED,
251 content::Source<Browser>(browser())); 237 content::Source<Browser>(browser()));
252 close_method.Run(); 238 close_method.Run();
253 AcceptModalDialog(); 239 AcceptModalDialog();
254 if (wait_for_browser_close) 240 if (wait_for_browser_close)
255 close_observer.Wait(); 241 close_observer.Wait();
256 } 242 }
257 devtools_close_observer.Wait(); 243 runner->Run();
258 } 244 }
259 245
260 DevToolsWindow* OpenDevToolWindowOnWebContents( 246 DevToolsWindow* OpenDevToolWindowOnWebContents(
261 content::WebContents* contents, bool is_docked) { 247 content::WebContents* contents, bool is_docked) {
262 DevToolsWindow* window = DevToolsWindow::OpenDevToolsWindowForTest( 248 DevToolsWindow* window = DevToolsWindowTesting::OpenDevToolsWindowSync(
263 contents->GetRenderViewHost(), is_docked); 249 contents->GetRenderViewHost(), is_docked);
264 ui_test_utils::WaitUntilDevToolsWindowLoaded(window);
265 return window; 250 return window;
266 } 251 }
267 252
268 void OpenDevToolsPopupWindow(DevToolsWindow* devtools_window) { 253 void OpenDevToolsPopupWindow(DevToolsWindow* devtools_window) {
269 content::WindowedNotificationObserver observer( 254 content::WindowedNotificationObserver observer(
270 content::NOTIFICATION_LOAD_STOP, 255 content::NOTIFICATION_LOAD_STOP,
271 content::NotificationService::AllSources()); 256 content::NotificationService::AllSources());
272 ASSERT_TRUE(content::ExecuteScript( 257 ASSERT_TRUE(content::ExecuteScript(
273 devtools_window->web_contents_for_test()->GetRenderViewHost(), 258 DevToolsWindowTesting::Get(devtools_window)->
259 main_web_contents()->GetRenderViewHost(),
274 "window.open(\"\", \"\", \"location=0\");")); 260 "window.open(\"\", \"\", \"location=0\");"));
275 observer.Wait(); 261 observer.Wait();
276 } 262 }
277 263
278 void CloseDevToolsPopupWindow(DevToolsWindow* devtools_window) { 264 void CloseDevToolsPopupWindow(DevToolsWindow* devtools_window) {
279 Browser* popup_browser = NULL; 265 DevToolsWindowTesting::CloseDevToolsWindowSync(devtools_window);
280 for (chrome::BrowserIterator it; !it.done(); it.Next()) {
281 if (it->is_devtools()) {
282 content::WebContents* contents =
283 it->tab_strip_model()->GetWebContentsAt(0);
284 if (devtools_window->web_contents_for_test() != contents) {
285 popup_browser = *it;
286 break;
287 }
288 }
289 }
290 ASSERT_FALSE(popup_browser == NULL);
291 content::WindowedNotificationObserver close_observer(
292 chrome::NOTIFICATION_BROWSER_CLOSED,
293 content::Source<Browser>(popup_browser));
294 chrome::CloseWindow(popup_browser);
295 close_observer.Wait();
296 } 266 }
297 267
298 void AcceptModalDialog() { 268 void AcceptModalDialog() {
299 NativeAppModalDialog* native_dialog = GetDialog(); 269 NativeAppModalDialog* native_dialog = GetDialog();
300 native_dialog->AcceptAppModalDialog(); 270 native_dialog->AcceptAppModalDialog();
301 } 271 }
302 272
303 void CancelModalDialog() { 273 void CancelModalDialog() {
304 NativeAppModalDialog* native_dialog = GetDialog(); 274 NativeAppModalDialog* native_dialog = GetDialog();
305 native_dialog->CancelAppModalDialog(); 275 native_dialog->CancelAppModalDialog();
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 content::RunMessageLoop(); 504 content::RunMessageLoop();
535 return worker_data; 505 return worker_data;
536 } 506 }
537 507
538 void OpenDevToolsWindowForSharedWorker(WorkerData* worker_data) { 508 void OpenDevToolsWindowForSharedWorker(WorkerData* worker_data) {
539 Profile* profile = browser()->profile(); 509 Profile* profile = browser()->profile();
540 scoped_refptr<DevToolsAgentHost> agent_host( 510 scoped_refptr<DevToolsAgentHost> agent_host(
541 DevToolsAgentHost::GetForWorker( 511 DevToolsAgentHost::GetForWorker(
542 worker_data->worker_process_id, 512 worker_data->worker_process_id,
543 worker_data->worker_route_id)); 513 worker_data->worker_route_id));
544 window_ = DevToolsWindow::OpenDevToolsWindowForWorker(profile, agent_host); 514 window_ = DevToolsWindowTesting::OpenDevToolsWindowForWorkerSync(
545 content::WaitForLoadStop(window_->web_contents_for_test()); 515 profile, agent_host);
546 } 516 }
547 517
548 void CloseDevToolsWindow() { 518 void CloseDevToolsWindow() {
549 Browser* browser = window_->browser_for_test(); 519 DevToolsWindowTesting::CloseDevToolsWindowSync(window_);
550 content::WindowedNotificationObserver close_observer(
551 content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
552 content::Source<content::WebContents>(
553 window_->web_contents_for_test()));
554 browser->tab_strip_model()->CloseAllTabs();
555 close_observer.Wait();
556 } 520 }
557 521
558 DevToolsWindow* window_; 522 DevToolsWindow* window_;
559 }; 523 };
560 524
561 // Tests that BeforeUnload event gets called on docked devtools if 525 // Tests that BeforeUnload event gets called on docked devtools if
562 // we try to close them. 526 // we try to close them.
563 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, TestDockedDevToolsClose) { 527 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, TestDockedDevToolsClose) {
564 RunBeforeUnloadSanityTest(true, base::Bind( 528 RunBeforeUnloadSanityTest(true, base::Bind(
565 &DevToolsBeforeUnloadTest::CloseDockedDevTools, this), false); 529 &DevToolsBeforeUnloadTest::CloseDevToolsWindowAsync, this), false);
566 } 530 }
567 531
568 // Tests that BeforeUnload event gets called on docked devtools if 532 // Tests that BeforeUnload event gets called on docked devtools if
569 // we try to close the inspected page. 533 // we try to close the inspected page.
570 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, 534 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest,
571 TestDockedDevToolsInspectedTabClose) { 535 TestDockedDevToolsInspectedTabClose) {
572 RunBeforeUnloadSanityTest(true, base::Bind( 536 RunBeforeUnloadSanityTest(true, base::Bind(
573 &DevToolsBeforeUnloadTest::CloseInspectedTab, this)); 537 &DevToolsBeforeUnloadTest::CloseInspectedTab, this));
574 } 538 }
575 539
576 // Tests that BeforeUnload event gets called on docked devtools if 540 // Tests that BeforeUnload event gets called on docked devtools if
577 // we try to close the inspected browser. 541 // we try to close the inspected browser.
578 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, 542 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest,
579 TestDockedDevToolsInspectedBrowserClose) { 543 TestDockedDevToolsInspectedBrowserClose) {
580 RunBeforeUnloadSanityTest(true, base::Bind( 544 RunBeforeUnloadSanityTest(true, base::Bind(
581 &DevToolsBeforeUnloadTest::CloseInspectedBrowser, this)); 545 &DevToolsBeforeUnloadTest::CloseInspectedBrowser, this));
582 } 546 }
583 547
584 // Tests that BeforeUnload event gets called on undocked devtools if 548 // Tests that BeforeUnload event gets called on undocked devtools if
585 // we try to close them. 549 // we try to close them.
586 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, TestUndockedDevToolsClose) { 550 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, TestUndockedDevToolsClose) {
587 RunBeforeUnloadSanityTest(false, base::Bind( 551 RunBeforeUnloadSanityTest(false, base::Bind(
588 &DevToolsBeforeUnloadTest::CloseUndockedDevTools, this), false); 552 &DevToolsBeforeUnloadTest::CloseDevToolsWindowAsync, this), false);
589 } 553 }
590 554
591 // Tests that BeforeUnload event gets called on undocked devtools if 555 // Tests that BeforeUnload event gets called on undocked devtools if
592 // we try to close the inspected page. 556 // we try to close the inspected page.
593 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, 557 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest,
594 TestUndockedDevToolsInspectedTabClose) { 558 TestUndockedDevToolsInspectedTabClose) {
595 RunBeforeUnloadSanityTest(false, base::Bind( 559 RunBeforeUnloadSanityTest(false, base::Bind(
596 &DevToolsBeforeUnloadTest::CloseInspectedTab, this)); 560 &DevToolsBeforeUnloadTest::CloseInspectedTab, this));
597 } 561 }
598 562
(...skipping 15 matching lines...) Expand all
614 578
615 // Tests that inspected tab gets closed if devtools renderer 579 // Tests that inspected tab gets closed if devtools renderer
616 // becomes unresponsive during beforeunload event interception. 580 // becomes unresponsive during beforeunload event interception.
617 // @see http://crbug.com/322380 581 // @see http://crbug.com/322380
618 IN_PROC_BROWSER_TEST_F(DevToolsUnresponsiveBeforeUnloadTest, 582 IN_PROC_BROWSER_TEST_F(DevToolsUnresponsiveBeforeUnloadTest,
619 TestUndockedDevToolsUnresponsive) { 583 TestUndockedDevToolsUnresponsive) {
620 ASSERT_TRUE(test_server()->Start()); 584 ASSERT_TRUE(test_server()->Start());
621 LoadTestPage(kDebuggerTestPage); 585 LoadTestPage(kDebuggerTestPage);
622 DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents( 586 DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents(
623 GetInspectedTab(), false); 587 GetInspectedTab(), false);
624 content::WindowedNotificationObserver devtools_close_observer( 588
625 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, 589 scoped_refptr<content::MessageLoopRunner> runner =
626 content::Source<content::WebContents>( 590 new content::MessageLoopRunner;
627 devtools_window->web_contents_for_test())); 591 DevToolsWindowTesting::Get(devtools_window)->SetCloseCallback(
592 runner->QuitClosure());
628 593
629 ASSERT_TRUE(content::ExecuteScript( 594 ASSERT_TRUE(content::ExecuteScript(
630 devtools_window->web_contents_for_test()->GetRenderViewHost(), 595 DevToolsWindowTesting::Get(devtools_window)->main_web_contents()->
596 GetRenderViewHost(),
631 "window.addEventListener('beforeunload'," 597 "window.addEventListener('beforeunload',"
632 "function(event) { while (true); });")); 598 "function(event) { while (true); });"));
633 CloseInspectedTab(); 599 CloseInspectedTab();
634 devtools_close_observer.Wait(); 600 runner->Run();
635 } 601 }
636 602
637 // Tests that closing worker inspector window does not cause browser crash 603 // Tests that closing worker inspector window does not cause browser crash
638 // @see http://crbug.com/323031 604 // @see http://crbug.com/323031
639 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, 605 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest,
640 TestWorkerWindowClosing) { 606 TestWorkerWindowClosing) {
641 ASSERT_TRUE(test_server()->Start()); 607 ASSERT_TRUE(test_server()->Start());
642 LoadTestPage(kDebuggerTestPage); 608 LoadTestPage(kDebuggerTestPage);
643 DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents( 609 DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents(
644 GetInspectedTab(), false); 610 GetInspectedTab(), false);
645 content::WindowedNotificationObserver devtools_close_observer(
646 content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
647 content::Source<content::WebContents>(
648 devtools_window->web_contents_for_test()));
649 611
650 OpenDevToolsPopupWindow(devtools_window); 612 OpenDevToolsPopupWindow(devtools_window);
651 CloseDevToolsPopupWindow(devtools_window); 613 CloseDevToolsPopupWindow(devtools_window);
652 } 614 }
653 615
654 // Tests that BeforeUnload event gets called on devtools that are opened 616 // Tests that BeforeUnload event gets called on devtools that are opened
655 // on another devtools. 617 // on another devtools.
656 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, 618 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest,
657 TestDevToolsOnDevTools) { 619 TestDevToolsOnDevTools) {
658 ASSERT_TRUE(test_server()->Start()); 620 ASSERT_TRUE(test_server()->Start());
659 LoadTestPage(kDebuggerTestPage); 621 LoadTestPage(kDebuggerTestPage);
660 622
661 std::vector<DevToolsWindow*> windows; 623 std::vector<DevToolsWindow*> windows;
662 std::vector<content::WindowedNotificationObserver*> close_observers; 624 std::vector<content::WindowedNotificationObserver*> close_observers;
663 content::WebContents* inspected_web_contents = GetInspectedTab(); 625 content::WebContents* inspected_web_contents = GetInspectedTab();
664 for (int i = 0; i < 3; ++i) { 626 for (int i = 0; i < 3; ++i) {
665 DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents( 627 DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents(
666 inspected_web_contents, i == 0); 628 inspected_web_contents, i == 0);
667 windows.push_back(devtools_window); 629 windows.push_back(devtools_window);
668 content::WindowedNotificationObserver* close_observer = 630 content::WindowedNotificationObserver* close_observer =
669 new content::WindowedNotificationObserver( 631 new content::WindowedNotificationObserver(
670 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, 632 content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
671 content::Source<content::WebContents>( 633 content::Source<content::WebContents>(
672 devtools_window->web_contents_for_test())); 634 DevToolsWindowTesting::Get(devtools_window)->
635 main_web_contents()));
673 close_observers.push_back(close_observer); 636 close_observers.push_back(close_observer);
674 inspected_web_contents = devtools_window->web_contents_for_test(); 637 inspected_web_contents =
638 DevToolsWindowTesting::Get(devtools_window)->main_web_contents();
675 } 639 }
676 640
677 InjectBeforeUnloadListener(windows[0]->web_contents_for_test()); 641 InjectBeforeUnloadListener(
678 InjectBeforeUnloadListener(windows[2]->web_contents_for_test()); 642 DevToolsWindowTesting::Get(windows[0])->main_web_contents());
643 InjectBeforeUnloadListener(
644 DevToolsWindowTesting::Get(windows[2])->main_web_contents());
679 // Try to close second devtools. 645 // Try to close second devtools.
680 { 646 {
681 content::WindowedNotificationObserver cancel_browser( 647 content::WindowedNotificationObserver cancel_browser(
682 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 648 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED,
683 content::NotificationService::AllSources()); 649 content::NotificationService::AllSources());
684 chrome::CloseWindow(windows[1]->browser_for_test()); 650 chrome::CloseWindow(DevToolsWindowTesting::Get(windows[1])->browser());
685 CancelModalDialog(); 651 CancelModalDialog();
686 cancel_browser.Wait(); 652 cancel_browser.Wait();
687 } 653 }
688 // Try to close browser window. 654 // Try to close browser window.
689 { 655 {
690 content::WindowedNotificationObserver cancel_browser( 656 content::WindowedNotificationObserver cancel_browser(
691 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 657 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED,
692 content::NotificationService::AllSources()); 658 content::NotificationService::AllSources());
693 chrome::CloseWindow(browser()); 659 chrome::CloseWindow(browser());
694 AcceptModalDialog(); 660 AcceptModalDialog();
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestDeviceEmulation) { 798 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestDeviceEmulation) {
833 RunTest("testDeviceMetricsOverrides", "about:blank"); 799 RunTest("testDeviceMetricsOverrides", "about:blank");
834 } 800 }
835 801
836 802
837 // Tests that external navigation from inspector page is always handled by 803 // Tests that external navigation from inspector page is always handled by
838 // DevToolsWindow and results in inspected page navigation. 804 // DevToolsWindow and results in inspected page navigation.
839 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestDevToolsExternalNavigation) { 805 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestDevToolsExternalNavigation) {
840 OpenDevToolsWindow(kDebuggerTestPage, true); 806 OpenDevToolsWindow(kDebuggerTestPage, true);
841 GURL url = test_server()->GetURL(kNavigateBackTestPage); 807 GURL url = test_server()->GetURL(kNavigateBackTestPage);
842 // TODO(dgozman): remove this once notifications are gone. 808 ui_test_utils::UrlLoadObserver observer(url,
843 // Right now notifications happen after observers, so DevTools window is
844 // already loaded, but we still catch it's notification when looking for
845 // all sources.
846 content::WaitForLoadStop(window_->web_contents_for_test());
847 content::WindowedNotificationObserver observer(
848 content::NOTIFICATION_LOAD_STOP,
849 content::NotificationService::AllSources()); 809 content::NotificationService::AllSources());
850 ASSERT_TRUE(content::ExecuteScript( 810 ASSERT_TRUE(content::ExecuteScript(
851 window_->web_contents_for_test(), 811 main_web_contents(),
852 std::string("window.location = \"") + url.spec() + "\"")); 812 std::string("window.location = \"") + url.spec() + "\""));
853 observer.Wait(); 813 observer.Wait();
854 814
855 ASSERT_TRUE(window_->web_contents_for_test()->GetURL(). 815 ASSERT_TRUE(main_web_contents()->GetURL().
856 SchemeIs(content::kChromeDevToolsScheme)); 816 SchemeIs(content::kChromeDevToolsScheme));
857 ASSERT_EQ(url, GetInspectedTab()->GetURL()); 817 ASSERT_EQ(url, GetInspectedTab()->GetURL());
858 CloseDevToolsWindow(); 818 CloseDevToolsWindow();
859 } 819 }
860 820
821 // Tests that toolbox window is loaded when DevTools window is undocked.
822 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestToolboxLoadedUndocked) {
823 OpenDevToolsWindow(kDebuggerTestPage, false);
824 ASSERT_TRUE(toolbox_web_contents());
825 DevToolsWindow* on_self = DevToolsWindowTesting::OpenDevToolsWindowSync(
826 main_web_contents()->GetRenderViewHost(), false);
827 ASSERT_FALSE(DevToolsWindowTesting::Get(on_self)->toolbox_web_contents());
828 DevToolsWindowTesting::CloseDevToolsWindowSync(on_self);
829 CloseDevToolsWindow();
830 }
831
832 // Tests that toolbox window is not loaded when DevTools window is docked.
833 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestToolboxNotLoadedDocked) {
834 OpenDevToolsWindow(kDebuggerTestPage, true);
835 ASSERT_FALSE(toolbox_web_contents());
836 DevToolsWindow* on_self = DevToolsWindowTesting::OpenDevToolsWindowSync(
837 main_web_contents()->GetRenderViewHost(), false);
838 ASSERT_FALSE(DevToolsWindowTesting::Get(on_self)->toolbox_web_contents());
839 DevToolsWindowTesting::CloseDevToolsWindowSync(on_self);
840 CloseDevToolsWindow();
841 }
842
861 // Tests that inspector will reattach to inspected page when it is reloaded 843 // Tests that inspector will reattach to inspected page when it is reloaded
862 // after a crash. See http://crbug.com/101952 844 // after a crash. See http://crbug.com/101952
863 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestReattachAfterCrash) { 845 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestReattachAfterCrash) {
864 RunTest("testReattachAfterCrash", std::string()); 846 RunTest("testReattachAfterCrash", std::string());
865 } 847 }
866 848
867 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestPageWithNoJavaScript) { 849 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestPageWithNoJavaScript) {
868 OpenDevToolsWindow("about:blank", false); 850 OpenDevToolsWindow("about:blank", false);
869 std::string result; 851 std::string result;
870 ASSERT_TRUE( 852 ASSERT_TRUE(
871 content::ExecuteScriptAndExtractString( 853 content::ExecuteScriptAndExtractString(
872 window_->web_contents_for_test()->GetRenderViewHost(), 854 main_web_contents()->GetRenderViewHost(),
873 "window.domAutomationController.send(" 855 "window.domAutomationController.send("
874 " '' + (window.uiTests && (typeof uiTests.runTest)));", 856 " '' + (window.uiTests && (typeof uiTests.runTest)));",
875 &result)); 857 &result));
876 ASSERT_EQ("function", result) << "DevTools front-end is broken."; 858 ASSERT_EQ("function", result) << "DevTools front-end is broken.";
877 CloseDevToolsWindow(); 859 CloseDevToolsWindow();
878 } 860 }
879 861
880 #if defined(OS_MACOSX) 862 #if defined(OS_MACOSX)
881 #define MAYBE_InspectSharedWorker DISABLED_InspectSharedWorker 863 #define MAYBE_InspectSharedWorker DISABLED_InspectSharedWorker
882 #else 864 #else
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 934
953 IN_PROC_BROWSER_TEST_F(RemoteDebuggingTest, RemoteDebugger) { 935 IN_PROC_BROWSER_TEST_F(RemoteDebuggingTest, RemoteDebugger) {
954 #if defined(OS_WIN) && defined(USE_ASH) 936 #if defined(OS_WIN) && defined(USE_ASH)
955 // Disable this test in Metro+Ash for now (http://crbug.com/262796). 937 // Disable this test in Metro+Ash for now (http://crbug.com/262796).
956 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 938 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
957 return; 939 return;
958 #endif 940 #endif
959 941
960 ASSERT_TRUE(RunExtensionTest("target_list")) << message_; 942 ASSERT_TRUE(RunExtensionTest("target_list")) << message_;
961 } 943 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/devtools/devtools_window.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698