OLD | NEW |
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" |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 content::ExecuteScriptAndExtractString( | 99 content::ExecuteScriptAndExtractString( |
100 window->GetRenderViewHost(), | 100 window->GetRenderViewHost(), |
101 base::StringPrintf("uiTests.runTest('%s')", test_name), | 101 base::StringPrintf("uiTests.runTest('%s')", test_name), |
102 &result)); | 102 &result)); |
103 EXPECT_EQ("[OK]", result); | 103 EXPECT_EQ("[OK]", result); |
104 } else { | 104 } else { |
105 FAIL() << "DevTools front-end is broken."; | 105 FAIL() << "DevTools front-end is broken."; |
106 } | 106 } |
107 } | 107 } |
108 | 108 |
| 109 } // namespace |
| 110 |
109 class DevToolsSanityTest : public InProcessBrowserTest { | 111 class DevToolsSanityTest : public InProcessBrowserTest { |
110 public: | 112 public: |
111 DevToolsSanityTest() | 113 DevToolsSanityTest() |
112 : window_(NULL), | 114 : window_(NULL), |
113 inspected_rvh_(NULL) {} | 115 inspected_rvh_(NULL) {} |
114 | 116 |
115 protected: | 117 protected: |
116 void RunTest(const std::string& test_name, const std::string& test_page) { | 118 void RunTest(const std::string& test_name, const std::string& test_page) { |
117 OpenDevToolsWindow(test_page); | 119 OpenDevToolsWindow(test_page, false); |
118 RunTestFunction(window_, test_name.c_str()); | 120 RunTestFunction(window_, test_name.c_str()); |
119 CloseDevToolsWindow(); | 121 CloseDevToolsWindow(); |
120 } | 122 } |
121 | 123 |
122 void LoadTestPage(const std::string& test_page) { | 124 void LoadTestPage(const std::string& test_page) { |
123 content::WindowedNotificationObserver load_observer( | 125 content::WindowedNotificationObserver load_observer( |
124 content::NOTIFICATION_LOAD_STOP, | 126 content::NOTIFICATION_LOAD_STOP, |
125 content::NotificationService::AllSources()); | 127 content::NotificationService::AllSources()); |
126 GURL url = test_server()->GetURL(test_page); | 128 GURL url = test_server()->GetURL(test_page); |
127 ui_test_utils::NavigateToURL(browser(), url); | 129 ui_test_utils::NavigateToURL(browser(), url); |
128 load_observer.Wait(); | 130 load_observer.Wait(); |
129 } | 131 } |
130 | 132 |
131 void OpenDevToolsWindow(const std::string& test_page) { | 133 void OpenDevToolsWindow(const std::string& test_page, bool is_docked) { |
132 ASSERT_TRUE(test_server()->Start()); | 134 ASSERT_TRUE(test_server()->Start()); |
133 LoadTestPage(test_page); | 135 LoadTestPage(test_page); |
134 | 136 |
135 content::WindowedNotificationObserver observer( | 137 content::WindowedNotificationObserver observer( |
136 content::NOTIFICATION_LOAD_STOP, | 138 content::NOTIFICATION_LOAD_STOP, |
137 content::NotificationService::AllSources()); | 139 content::NotificationService::AllSources()); |
138 inspected_rvh_ = GetInspectedTab()->GetRenderViewHost(); | 140 inspected_rvh_ = GetInspectedTab()->GetRenderViewHost(); |
139 window_ = DevToolsWindow::OpenDevToolsWindow(inspected_rvh_); | 141 window_ = |
| 142 DevToolsWindow::OpenDevToolsWindowForTest(inspected_rvh_, is_docked); |
140 observer.Wait(); | 143 observer.Wait(); |
141 } | 144 } |
142 | 145 |
143 WebContents* GetInspectedTab() { | 146 WebContents* GetInspectedTab() { |
144 return browser()->tab_strip_model()->GetWebContentsAt(0); | 147 return browser()->tab_strip_model()->GetWebContentsAt(0); |
145 } | 148 } |
146 | 149 |
147 void ToggleDevToolsWindow() { | 150 void ToggleDevToolsWindow() { |
148 content::WindowedNotificationObserver close_observer( | 151 content::WindowedNotificationObserver close_observer( |
149 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 152 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
150 content::Source<content::WebContents>(window_->web_contents())); | 153 content::Source<content::WebContents>(window_->web_contents())); |
151 DevToolsWindow::ToggleDevToolsWindow(inspected_rvh_, false, | 154 DevToolsWindow::ToggleDevToolsWindow(inspected_rvh_, false, |
152 DevToolsToggleAction::Toggle()); | 155 DevToolsToggleAction::Toggle()); |
153 close_observer.Wait(); | 156 close_observer.Wait(); |
154 } | 157 } |
155 | 158 |
| 159 void ToggleDevToolsWindowDontWait() { |
| 160 DevToolsWindow::ToggleDevToolsWindow(inspected_rvh_, false, |
| 161 DevToolsToggleAction::Toggle()); |
| 162 } |
| 163 |
156 void CloseDevToolsWindow() { | 164 void CloseDevToolsWindow() { |
157 DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); | 165 DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); |
158 content::WindowedNotificationObserver close_observer( | 166 content::WindowedNotificationObserver close_observer( |
159 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 167 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
160 content::Source<content::WebContents>(window_->web_contents())); | 168 content::Source<content::WebContents>(window_->web_contents())); |
161 devtools_manager->CloseAllClientHosts(); | 169 devtools_manager->CloseAllClientHosts(); |
162 close_observer.Wait(); | 170 close_observer.Wait(); |
163 } | 171 } |
164 | 172 |
165 DevToolsWindow* window_; | 173 DevToolsWindow* window_; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 command_line->AppendSwitch( | 215 command_line->AppendSwitch( |
208 switches::kDisableHangMonitor); | 216 switches::kDisableHangMonitor); |
209 } | 217 } |
210 | 218 |
211 void CloseInspectedTab() { | 219 void CloseInspectedTab() { |
212 browser()->tab_strip_model()->CloseWebContentsAt(0, | 220 browser()->tab_strip_model()->CloseWebContentsAt(0, |
213 TabStripModel::CLOSE_NONE); | 221 TabStripModel::CLOSE_NONE); |
214 } | 222 } |
215 | 223 |
216 void CloseDockedDevTools() { | 224 void CloseDockedDevTools() { |
217 DevToolsWindow::ToggleDevToolsWindow(inspected_rvh_, false, | 225 ToggleDevToolsWindowDontWait(); |
218 DevToolsToggleAction::Toggle()); | |
219 } | 226 } |
220 | 227 |
221 void CloseUndockedDevTools() { | 228 void CloseUndockedDevTools() { |
222 chrome::CloseWindow(window_->browser()); | 229 chrome::CloseWindow(window_->browser()); |
223 } | 230 } |
224 | 231 |
225 void CloseInspectedBrowser() { | 232 void CloseInspectedBrowser() { |
226 chrome::CloseWindow(browser()); | 233 chrome::CloseWindow(browser()); |
227 } | 234 } |
228 protected: | 235 protected: |
229 void InjectBeforeUnloadListener(content::WebContents* web_contents) { | 236 void InjectBeforeUnloadListener(content::WebContents* web_contents) { |
230 ASSERT_TRUE(content::ExecuteScript(web_contents->GetRenderViewHost(), | 237 ASSERT_TRUE(content::ExecuteScript(web_contents->GetRenderViewHost(), |
231 "window.addEventListener('beforeunload'," | 238 "window.addEventListener('beforeunload'," |
232 "function(event) { event.returnValue = 'Foo'; });")); | 239 "function(event) { event.returnValue = 'Foo'; });")); |
233 } | 240 } |
234 | 241 |
235 void RunBeforeUnloadSanityTest(DevToolsDockSide dock_side, | 242 void RunBeforeUnloadSanityTest(bool is_docked, |
236 base::Callback<void(void)> close_method, | 243 base::Callback<void(void)> close_method, |
237 bool wait_for_browser_close = true) { | 244 bool wait_for_browser_close = true) { |
238 OpenDevToolsWindow(kDebuggerTestPage); | 245 OpenDevToolsWindow(kDebuggerTestPage, is_docked); |
239 window_->SetDockSideForTest(dock_side); | |
240 content::WindowedNotificationObserver devtools_close_observer( | 246 content::WindowedNotificationObserver devtools_close_observer( |
241 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 247 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
242 content::Source<content::WebContents>(window_->web_contents())); | 248 content::Source<content::WebContents>(window_->web_contents())); |
243 InjectBeforeUnloadListener(window_->web_contents()); | 249 InjectBeforeUnloadListener(window_->web_contents()); |
244 { | 250 { |
245 DevToolsWindowBeforeUnloadObserver before_unload_observer(window_); | 251 DevToolsWindowBeforeUnloadObserver before_unload_observer(window_); |
246 close_method.Run(); | 252 close_method.Run(); |
247 CancelModalDialog(); | 253 CancelModalDialog(); |
248 before_unload_observer.Wait(); | 254 before_unload_observer.Wait(); |
249 } | 255 } |
250 { | 256 { |
251 content::WindowedNotificationObserver close_observer( | 257 content::WindowedNotificationObserver close_observer( |
252 chrome::NOTIFICATION_BROWSER_CLOSED, | 258 chrome::NOTIFICATION_BROWSER_CLOSED, |
253 content::Source<Browser>(browser())); | 259 content::Source<Browser>(browser())); |
254 close_method.Run(); | 260 close_method.Run(); |
255 AcceptModalDialog(); | 261 AcceptModalDialog(); |
256 if (wait_for_browser_close) | 262 if (wait_for_browser_close) |
257 close_observer.Wait(); | 263 close_observer.Wait(); |
258 } | 264 } |
259 devtools_close_observer.Wait(); | 265 devtools_close_observer.Wait(); |
260 } | 266 } |
261 | 267 |
262 DevToolsWindow* OpenDevToolWindowOnWebContents( | 268 DevToolsWindow* OpenDevToolWindowOnWebContents( |
263 content::WebContents* contents) { | 269 content::WebContents* contents, bool is_docked) { |
264 content::WindowedNotificationObserver observer( | 270 content::WindowedNotificationObserver observer( |
265 content::NOTIFICATION_LOAD_STOP, | 271 content::NOTIFICATION_LOAD_STOP, |
266 content::NotificationService::AllSources()); | 272 content::NotificationService::AllSources()); |
267 DevToolsWindow* window = DevToolsWindow::OpenDevToolsWindow( | 273 DevToolsWindow* window = DevToolsWindow::OpenDevToolsWindowForTest( |
268 contents->GetRenderViewHost()); | 274 contents->GetRenderViewHost(), is_docked); |
269 observer.Wait(); | 275 observer.Wait(); |
270 return window; | 276 return window; |
271 } | 277 } |
272 | 278 |
273 void OpenDevToolsPopupWindow(DevToolsWindow* devtools_window) { | 279 void OpenDevToolsPopupWindow(DevToolsWindow* devtools_window) { |
274 content::WindowedNotificationObserver observer( | 280 content::WindowedNotificationObserver observer( |
275 content::NOTIFICATION_LOAD_STOP, | 281 content::NOTIFICATION_LOAD_STOP, |
276 content::NotificationService::AllSources()); | 282 content::NotificationService::AllSources()); |
277 ASSERT_TRUE(content::ExecuteScript( | 283 ASSERT_TRUE(content::ExecuteScript( |
278 devtools_window->web_contents()->GetRenderViewHost(), | 284 devtools_window->web_contents()->GetRenderViewHost(), |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
536 scoped_refptr<WorkerData> worker_data(new WorkerData()); | 542 scoped_refptr<WorkerData> worker_data(new WorkerData()); |
537 BrowserThread::PostTask( | 543 BrowserThread::PostTask( |
538 BrowserThread::IO, FROM_HERE, | 544 BrowserThread::IO, FROM_HERE, |
539 base::Bind(&WaitForFirstSharedWorkerOnIOThread, worker_data)); | 545 base::Bind(&WaitForFirstSharedWorkerOnIOThread, worker_data)); |
540 content::RunMessageLoop(); | 546 content::RunMessageLoop(); |
541 return worker_data; | 547 return worker_data; |
542 } | 548 } |
543 | 549 |
544 void OpenDevToolsWindowForSharedWorker(WorkerData* worker_data) { | 550 void OpenDevToolsWindowForSharedWorker(WorkerData* worker_data) { |
545 Profile* profile = browser()->profile(); | 551 Profile* profile = browser()->profile(); |
546 window_ = DevToolsWindow::CreateDevToolsWindowForWorker(profile); | |
547 window_->Show(DevToolsToggleAction::Show()); | |
548 scoped_refptr<DevToolsAgentHost> agent_host( | 552 scoped_refptr<DevToolsAgentHost> agent_host( |
549 DevToolsAgentHost::GetForWorker( | 553 DevToolsAgentHost::GetForWorker( |
550 worker_data->worker_process_id, | 554 worker_data->worker_process_id, |
551 worker_data->worker_route_id)); | 555 worker_data->worker_route_id)); |
552 DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor( | 556 window_ = DevToolsWindow::OpenDevToolsWindowForWorker(profile, agent_host); |
553 agent_host.get(), window_->GetDevToolsClientHostForTest()); | |
554 RenderViewHost* client_rvh = window_->GetRenderViewHost(); | 557 RenderViewHost* client_rvh = window_->GetRenderViewHost(); |
555 WebContents* client_contents = WebContents::FromRenderViewHost(client_rvh); | 558 WebContents* client_contents = WebContents::FromRenderViewHost(client_rvh); |
556 if (client_contents->IsLoading()) { | 559 if (client_contents->IsLoading()) { |
557 content::WindowedNotificationObserver observer( | 560 content::WindowedNotificationObserver observer( |
558 content::NOTIFICATION_LOAD_STOP, | 561 content::NOTIFICATION_LOAD_STOP, |
559 content::Source<NavigationController>( | 562 content::Source<NavigationController>( |
560 &client_contents->GetController())); | 563 &client_contents->GetController())); |
561 observer.Wait(); | 564 observer.Wait(); |
562 } | 565 } |
563 } | 566 } |
564 | 567 |
565 void CloseDevToolsWindow() { | 568 void CloseDevToolsWindow() { |
566 Browser* browser = window_->browser(); | 569 Browser* browser = window_->browser(); |
567 content::WindowedNotificationObserver close_observer( | 570 content::WindowedNotificationObserver close_observer( |
568 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 571 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
569 content::Source<content::WebContents>(window_->web_contents())); | 572 content::Source<content::WebContents>(window_->web_contents())); |
570 browser->tab_strip_model()->CloseAllTabs(); | 573 browser->tab_strip_model()->CloseAllTabs(); |
571 close_observer.Wait(); | 574 close_observer.Wait(); |
572 } | 575 } |
573 | 576 |
574 DevToolsWindow* window_; | 577 DevToolsWindow* window_; |
575 }; | 578 }; |
576 | 579 |
577 // Tests that BeforeUnload event gets called on docked devtools if | 580 // Tests that BeforeUnload event gets called on docked devtools if |
578 // we try to close them. | 581 // we try to close them. |
579 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, TestDockedDevToolsClose) { | 582 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, TestDockedDevToolsClose) { |
580 RunBeforeUnloadSanityTest(DEVTOOLS_DOCK_SIDE_BOTTOM, base::Bind( | 583 RunBeforeUnloadSanityTest(true, base::Bind( |
581 &DevToolsBeforeUnloadTest::CloseDockedDevTools, this), false); | 584 &DevToolsBeforeUnloadTest::CloseDockedDevTools, this), false); |
582 } | 585 } |
583 | 586 |
584 // Tests that BeforeUnload event gets called on docked devtools if | 587 // Tests that BeforeUnload event gets called on docked devtools if |
585 // we try to close the inspected page. | 588 // we try to close the inspected page. |
586 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, | 589 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, |
587 TestDockedDevToolsInspectedTabClose) { | 590 TestDockedDevToolsInspectedTabClose) { |
588 RunBeforeUnloadSanityTest(DEVTOOLS_DOCK_SIDE_BOTTOM, base::Bind( | 591 RunBeforeUnloadSanityTest(true, base::Bind( |
589 &DevToolsBeforeUnloadTest::CloseInspectedTab, this)); | 592 &DevToolsBeforeUnloadTest::CloseInspectedTab, this)); |
590 } | 593 } |
591 | 594 |
592 // Tests that BeforeUnload event gets called on docked devtools if | 595 // Tests that BeforeUnload event gets called on docked devtools if |
593 // we try to close the inspected browser. | 596 // we try to close the inspected browser. |
594 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, | 597 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, |
595 TestDockedDevToolsInspectedBrowserClose) { | 598 TestDockedDevToolsInspectedBrowserClose) { |
596 RunBeforeUnloadSanityTest(DEVTOOLS_DOCK_SIDE_BOTTOM, base::Bind( | 599 RunBeforeUnloadSanityTest(true, base::Bind( |
597 &DevToolsBeforeUnloadTest::CloseInspectedBrowser, this)); | 600 &DevToolsBeforeUnloadTest::CloseInspectedBrowser, this)); |
598 } | 601 } |
599 | 602 |
600 // Tests that BeforeUnload event gets called on undocked devtools if | 603 // Tests that BeforeUnload event gets called on undocked devtools if |
601 // we try to close them. | 604 // we try to close them. |
602 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, TestUndockedDevToolsClose) { | 605 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, TestUndockedDevToolsClose) { |
603 RunBeforeUnloadSanityTest(DEVTOOLS_DOCK_SIDE_UNDOCKED, base::Bind( | 606 RunBeforeUnloadSanityTest(false, base::Bind( |
604 &DevToolsBeforeUnloadTest::CloseUndockedDevTools, this), false); | 607 &DevToolsBeforeUnloadTest::CloseUndockedDevTools, this), false); |
605 } | 608 } |
606 | 609 |
607 // Tests that BeforeUnload event gets called on undocked devtools if | 610 // Tests that BeforeUnload event gets called on undocked devtools if |
608 // we try to close the inspected page. | 611 // we try to close the inspected page. |
609 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, | 612 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, |
610 TestUndockedDevToolsInspectedTabClose) { | 613 TestUndockedDevToolsInspectedTabClose) { |
611 RunBeforeUnloadSanityTest(DEVTOOLS_DOCK_SIDE_UNDOCKED, base::Bind( | 614 RunBeforeUnloadSanityTest(false, base::Bind( |
612 &DevToolsBeforeUnloadTest::CloseInspectedTab, this)); | 615 &DevToolsBeforeUnloadTest::CloseInspectedTab, this)); |
613 } | 616 } |
614 | 617 |
615 // Tests that BeforeUnload event gets called on undocked devtools if | 618 // Tests that BeforeUnload event gets called on undocked devtools if |
616 // we try to close the inspected browser. | 619 // we try to close the inspected browser. |
617 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, | 620 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, |
618 TestUndockedDevToolsInspectedBrowserClose) { | 621 TestUndockedDevToolsInspectedBrowserClose) { |
619 RunBeforeUnloadSanityTest(DEVTOOLS_DOCK_SIDE_UNDOCKED, base::Bind( | 622 RunBeforeUnloadSanityTest(false, base::Bind( |
620 &DevToolsBeforeUnloadTest::CloseInspectedBrowser, this)); | 623 &DevToolsBeforeUnloadTest::CloseInspectedBrowser, this)); |
621 } | 624 } |
622 | 625 |
623 // Tests that BeforeUnload event gets called on undocked devtools if | 626 // Tests that BeforeUnload event gets called on undocked devtools if |
624 // we try to exit application. | 627 // we try to exit application. |
625 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, | 628 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, |
626 TestUndockedDevToolsApplicationClose) { | 629 TestUndockedDevToolsApplicationClose) { |
627 RunBeforeUnloadSanityTest(DEVTOOLS_DOCK_SIDE_UNDOCKED, base::Bind( | 630 RunBeforeUnloadSanityTest(false, base::Bind( |
628 &chrome::CloseAllBrowsers)); | 631 &chrome::CloseAllBrowsers)); |
629 } | 632 } |
630 | 633 |
631 // Tests that inspected tab gets closed if devtools renderer | 634 // Tests that inspected tab gets closed if devtools renderer |
632 // becomes unresponsive during beforeunload event interception. | 635 // becomes unresponsive during beforeunload event interception. |
633 // @see http://crbug.com/322380 | 636 // @see http://crbug.com/322380 |
634 IN_PROC_BROWSER_TEST_F(DevToolsUnresponsiveBeforeUnloadTest, | 637 IN_PROC_BROWSER_TEST_F(DevToolsUnresponsiveBeforeUnloadTest, |
635 TestUndockedDevToolsUnresponsive) { | 638 TestUndockedDevToolsUnresponsive) { |
636 ASSERT_TRUE(test_server()->Start()); | 639 ASSERT_TRUE(test_server()->Start()); |
637 LoadTestPage(kDebuggerTestPage); | 640 LoadTestPage(kDebuggerTestPage); |
638 DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents( | 641 DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents( |
639 GetInspectedTab()); | 642 GetInspectedTab(), false); |
640 devtools_window->SetDockSideForTest(DEVTOOLS_DOCK_SIDE_UNDOCKED); | |
641 content::WindowedNotificationObserver devtools_close_observer( | 643 content::WindowedNotificationObserver devtools_close_observer( |
642 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 644 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
643 content::Source<content::WebContents>( | 645 content::Source<content::WebContents>( |
644 devtools_window->web_contents())); | 646 devtools_window->web_contents())); |
645 | 647 |
646 ASSERT_TRUE(content::ExecuteScript( | 648 ASSERT_TRUE(content::ExecuteScript( |
647 devtools_window->web_contents()->GetRenderViewHost(), | 649 devtools_window->web_contents()->GetRenderViewHost(), |
648 "window.addEventListener('beforeunload'," | 650 "window.addEventListener('beforeunload'," |
649 "function(event) { while (true); });")); | 651 "function(event) { while (true); });")); |
650 CloseInspectedTab(); | 652 CloseInspectedTab(); |
651 devtools_close_observer.Wait(); | 653 devtools_close_observer.Wait(); |
652 } | 654 } |
653 | 655 |
654 // Tests that closing worker inspector window does not cause browser crash | 656 // Tests that closing worker inspector window does not cause browser crash |
655 // @see http://crbug.com/323031 | 657 // @see http://crbug.com/323031 |
656 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, | 658 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, |
657 TestWorkerWindowClosing) { | 659 TestWorkerWindowClosing) { |
658 ASSERT_TRUE(test_server()->Start()); | 660 ASSERT_TRUE(test_server()->Start()); |
659 LoadTestPage(kDebuggerTestPage); | 661 LoadTestPage(kDebuggerTestPage); |
660 DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents( | 662 DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents( |
661 GetInspectedTab()); | 663 GetInspectedTab(), false); |
662 devtools_window->SetDockSideForTest(DEVTOOLS_DOCK_SIDE_UNDOCKED); | |
663 content::WindowedNotificationObserver devtools_close_observer( | 664 content::WindowedNotificationObserver devtools_close_observer( |
664 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 665 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
665 content::Source<content::WebContents>( | 666 content::Source<content::WebContents>( |
666 devtools_window->web_contents())); | 667 devtools_window->web_contents())); |
667 | 668 |
668 OpenDevToolsPopupWindow(devtools_window); | 669 OpenDevToolsPopupWindow(devtools_window); |
669 CloseDevToolsPopupWindow(devtools_window); | 670 CloseDevToolsPopupWindow(devtools_window); |
670 } | 671 } |
671 | 672 |
672 // FLaky on Windows bots: see crbug.com/323847, Linux crbug.com/333554 | 673 // FLaky on Windows bots: see crbug.com/323847, Linux crbug.com/333554 |
673 #if defined(OS_WIN) || defined(OS_LINUX) | 674 #if defined(OS_WIN) || defined(OS_LINUX) |
674 #define MAYBE_TestDevToolsOnDevTools DISABLED_TestDevToolsOnDevTools | 675 #define MAYBE_TestDevToolsOnDevTools DISABLED_TestDevToolsOnDevTools |
675 #else | 676 #else |
676 #define MAYBE_TestDevToolsOnDevTools TestDevToolsOnDevTools | 677 #define MAYBE_TestDevToolsOnDevTools TestDevToolsOnDevTools |
677 #endif | 678 #endif |
678 // Tests that BeforeUnload event gets called on devtools that are opened | 679 // Tests that BeforeUnload event gets called on devtools that are opened |
679 // on another devtools. | 680 // on another devtools. |
680 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, | 681 IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, |
681 MAYBE_TestDevToolsOnDevTools) { | 682 MAYBE_TestDevToolsOnDevTools) { |
682 ASSERT_TRUE(test_server()->Start()); | 683 ASSERT_TRUE(test_server()->Start()); |
683 LoadTestPage(kDebuggerTestPage); | 684 LoadTestPage(kDebuggerTestPage); |
684 | 685 |
685 std::vector<DevToolsWindow*> windows; | 686 std::vector<DevToolsWindow*> windows; |
686 std::vector<content::WindowedNotificationObserver*> close_observers; | 687 std::vector<content::WindowedNotificationObserver*> close_observers; |
687 content::WebContents* inspected_web_contents = GetInspectedTab(); | 688 content::WebContents* inspected_web_contents = GetInspectedTab(); |
688 for (int i = 0; i < 3; ++i) { | 689 for (int i = 0; i < 3; ++i) { |
689 DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents( | 690 DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents( |
690 inspected_web_contents); | 691 inspected_web_contents, i == 0); |
691 windows.push_back(devtools_window); | 692 windows.push_back(devtools_window); |
692 content::WindowedNotificationObserver* close_observer = | 693 content::WindowedNotificationObserver* close_observer = |
693 new content::WindowedNotificationObserver( | 694 new content::WindowedNotificationObserver( |
694 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 695 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
695 content::Source<content::WebContents>( | 696 content::Source<content::WebContents>( |
696 devtools_window->web_contents())); | 697 devtools_window->web_contents())); |
697 close_observers.push_back(close_observer); | 698 close_observers.push_back(close_observer); |
698 inspected_web_contents = devtools_window->web_contents(); | 699 inspected_web_contents = devtools_window->web_contents(); |
699 } | 700 } |
700 | 701 |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 | 858 |
858 // Tests that console messages are not duplicated on navigation back. | 859 // Tests that console messages are not duplicated on navigation back. |
859 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestConsoleOnNavigateBack) { | 860 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestConsoleOnNavigateBack) { |
860 RunTest("testConsoleOnNavigateBack", kNavigateBackTestPage); | 861 RunTest("testConsoleOnNavigateBack", kNavigateBackTestPage); |
861 } | 862 } |
862 | 863 |
863 | 864 |
864 // Tests that external navigation from inspector page is always handled by | 865 // Tests that external navigation from inspector page is always handled by |
865 // DevToolsWindow and results in inspected page navigation. | 866 // DevToolsWindow and results in inspected page navigation. |
866 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestDevToolsExternalNavigation) { | 867 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestDevToolsExternalNavigation) { |
867 OpenDevToolsWindow(kDebuggerTestPage); | 868 OpenDevToolsWindow(kDebuggerTestPage, true); |
868 GURL url = test_server()->GetURL(kNavigateBackTestPage); | 869 GURL url = test_server()->GetURL(kNavigateBackTestPage); |
869 content::WindowedNotificationObserver observer( | 870 content::WindowedNotificationObserver observer( |
870 content::NOTIFICATION_LOAD_STOP, | 871 content::NOTIFICATION_LOAD_STOP, |
871 content::NotificationService::AllSources()); | 872 content::NotificationService::AllSources()); |
872 ASSERT_TRUE(content::ExecuteScript( | 873 ASSERT_TRUE(content::ExecuteScript( |
873 window_->web_contents(), | 874 window_->web_contents(), |
874 std::string("window.location = \"") + url.spec() + "\"")); | 875 std::string("window.location = \"") + url.spec() + "\"")); |
875 observer.Wait(); | 876 observer.Wait(); |
876 | 877 |
877 ASSERT_TRUE(window_->web_contents()->GetURL(). | 878 ASSERT_TRUE(window_->web_contents()->GetURL(). |
878 SchemeIs(chrome::kChromeDevToolsScheme)); | 879 SchemeIs(chrome::kChromeDevToolsScheme)); |
879 ASSERT_EQ(GetInspectedTab()->GetURL(), url); | 880 ASSERT_EQ(GetInspectedTab()->GetURL(), url); |
880 CloseDevToolsWindow(); | 881 CloseDevToolsWindow(); |
881 } | 882 } |
882 | 883 |
883 #if defined(OS_WIN) || defined(OS_MACOSX) | 884 #if defined(OS_WIN) || defined(OS_MACOSX) |
884 // Flakily times out: http://crbug.com/163411 | 885 // Flakily times out: http://crbug.com/163411 |
885 #define MAYBE_TestReattachAfterCrash DISABLED_TestReattachAfterCrash | 886 #define MAYBE_TestReattachAfterCrash DISABLED_TestReattachAfterCrash |
886 #else | 887 #else |
887 #define MAYBE_TestReattachAfterCrash TestReattachAfterCrash | 888 #define MAYBE_TestReattachAfterCrash TestReattachAfterCrash |
888 #endif | 889 #endif |
889 // Tests that inspector will reattach to inspected page when it is reloaded | 890 // Tests that inspector will reattach to inspected page when it is reloaded |
890 // after a crash. See http://crbug.com/101952 | 891 // after a crash. See http://crbug.com/101952 |
891 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, MAYBE_TestReattachAfterCrash) { | 892 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, MAYBE_TestReattachAfterCrash) { |
892 OpenDevToolsWindow(kDebuggerTestPage); | 893 OpenDevToolsWindow(kDebuggerTestPage, false); |
893 | 894 |
894 content::CrashTab(GetInspectedTab()); | 895 content::CrashTab(GetInspectedTab()); |
895 content::WindowedNotificationObserver observer( | 896 content::WindowedNotificationObserver observer( |
896 content::NOTIFICATION_LOAD_STOP, | 897 content::NOTIFICATION_LOAD_STOP, |
897 content::Source<NavigationController>( | 898 content::Source<NavigationController>( |
898 &browser()->tab_strip_model()->GetActiveWebContents()-> | 899 &browser()->tab_strip_model()->GetActiveWebContents()-> |
899 GetController())); | 900 GetController())); |
900 chrome::Reload(browser(), CURRENT_TAB); | 901 chrome::Reload(browser(), CURRENT_TAB); |
901 observer.Wait(); | 902 observer.Wait(); |
902 | 903 |
903 RunTestFunction(window_, "testReattachAfterCrash"); | 904 RunTestFunction(window_, "testReattachAfterCrash"); |
904 CloseDevToolsWindow(); | 905 CloseDevToolsWindow(); |
905 } | 906 } |
906 | 907 |
907 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestPageWithNoJavaScript) { | 908 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestPageWithNoJavaScript) { |
908 OpenDevToolsWindow("about:blank"); | 909 OpenDevToolsWindow("about:blank", false); |
909 std::string result; | 910 std::string result; |
910 ASSERT_TRUE( | 911 ASSERT_TRUE( |
911 content::ExecuteScriptAndExtractString( | 912 content::ExecuteScriptAndExtractString( |
912 window_->GetRenderViewHost(), | 913 window_->GetRenderViewHost(), |
913 "window.domAutomationController.send(" | 914 "window.domAutomationController.send(" |
914 " '' + (window.uiTests && (typeof uiTests.runTest)));", | 915 " '' + (window.uiTests && (typeof uiTests.runTest)));", |
915 &result)); | 916 &result)); |
916 ASSERT_EQ("function", result) << "DevTools front-end is broken."; | 917 ASSERT_EQ("function", result) << "DevTools front-end is broken."; |
917 CloseDevToolsWindow(); | 918 CloseDevToolsWindow(); |
918 } | 919 } |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
992 | 993 |
993 IN_PROC_BROWSER_TEST_F(RemoteDebuggingTest, RemoteDebugger) { | 994 IN_PROC_BROWSER_TEST_F(RemoteDebuggingTest, RemoteDebugger) { |
994 #if defined(OS_WIN) && defined(USE_ASH) | 995 #if defined(OS_WIN) && defined(USE_ASH) |
995 // Disable this test in Metro+Ash for now (http://crbug.com/262796). | 996 // Disable this test in Metro+Ash for now (http://crbug.com/262796). |
996 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) | 997 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) |
997 return; | 998 return; |
998 #endif | 999 #endif |
999 | 1000 |
1000 ASSERT_TRUE(RunExtensionTest("target_list")) << message_; | 1001 ASSERT_TRUE(RunExtensionTest("target_list")) << message_; |
1001 } | 1002 } |
1002 | |
1003 } // namespace | |
OLD | NEW |