diff options
author | gab@chromium.org <gab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-18 19:00:21 +0000 |
---|---|---|
committer | gab@chromium.org <gab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-18 19:00:21 +0000 |
commit | a9cc57a82cf3281445094f18c7ceb3968e0e0d24 (patch) | |
tree | adba8ea5cb09905a9b69fe9a28bb22fbcd988413 | |
parent | 197c92cc4c3be4f83ded2ee1b34dcd1b00a29687 (diff) | |
download | chromium_src-a9cc57a82cf3281445094f18c7ceb3968e0e0d24.zip chromium_src-a9cc57a82cf3281445094f18c7ceb3968e0e0d24.tar.gz chromium_src-a9cc57a82cf3281445094f18c7ceb3968e0e0d24.tar.bz2 |
Revert of [DevTools] Move DevToolsWindow testing code to a separate class. (https://codereview.chromium.org/395783002/)
Reason for revert:
Mac 10.7 has become flaky for ViewIDTest.Basic (http://build.chromium.org/p/chromium.mac/builders/Mac10.7%20Tests%20%282%29?numbuilds=100) and this CL is suspected as it touches this exact test.
Example crash stack trace below:
BrowserTestBase signal handler received SIGTERM. Backtrace:
0 browser_tests 0x0132e9ba base::debug::StackTrace::StackTrace() + 26
1 browser_tests 0x04e5ecb8 _ZN7content12_GLOBAL__N_1L27DumpStackTraceSignalHandlerEi + 72
2 libsystem_c.dylib 0x9090259b _sigtramp + 43
3 ??? 0xffffffff 0x0 + 4294967295
4 browser_tests 0x01328f56 base::AtExitManager::RegisterCallback(void (*)(void*), void*) + 102
5 browser_tests 0x02614bb4 Singleton\u003Ccc::TaskRunnerPairs, DefaultSingletonTraits\u003Ccc::TaskRunnerPairs>, cc::TaskRunnerPairs>::get() + 276
6 browser_tests 0x026141e7 cc::BlockingTaskRunner::current() + 23
7 browser_tests 0x02614762 cc::BlockingTaskRunner::CapturePostTasks::CapturePostTasks() + 18
8 browser_tests 0x026404eb cc::SingleThreadProxy::Stop() + 59
9 browser_tests 0x02619e04 cc::LayerTreeHost::~LayerTreeHost() + 132
10 browser_tests 0x0261a2c1 cc::LayerTreeHost::~LayerTreeHost() + 17
11 browser_tests 0x04011e94 ui::Compositor::~Compositor() + 148
12 browser_tests 0x040120c1 ui::Compositor::~Compositor() + 17
13 browser_tests 0x03fa8dfd -[BrowserCompositorViewCocoa .cxx_destruct] + 173
14 libobjc.A.dylib 0x995863bf object_cxxDestructFromClass + 104
15 libobjc.A.dylib 0x99583204 objc_destructInstance + 40
16 browser_tests 0x021dd2c2 (anonymous namespace)::ZombieDealloc(objc_object*, objc_selector*) + 98
17 AppKit 0x96b68b39 -[NSResponder dealloc] + 156
18 AppKit 0x96b66fee -[NSView dealloc] + 74
19 libobjc.A.dylib 0x9958254e _objc_rootRelease + 47
20 browser_tests 0x03fa7f16 base::LazyInstance\u003Cbase::scoped_nsobject\u003CBrowserCompositorViewCocoa>, base::DefaultLazyInstanceTraits\u003Cbase::scoped_nsobject\u003CBrowserCompositorViewCocoa> > >::OnExit(void*) + 38
21 browser_tests 0x013291e2 base::internal::Invoker\u003C1, base::internal::BindState\u003Cbase::internal::RunnableAdapter\u003Cvoid (*)(void*)>, void ()(void*), void ()(void*)>, void ()(void*)>::Run(base::internal::BindStateBase*) + 18
22 browser_tests 0x01328e27 base::AtExitManager::ProcessCallbacksNow() + 119
23 browser_tests 0x01328ec2 base::AtExitManager::~AtExitManager() + 34
24 browser_tests 0x013bbb20 base::TestSuite::~TestSuite() + 48
25 browser_tests 0x00b5f783 ChromeBrowserTestSuiteRunner::RunTestSuite(int, char**) + 51
26 browser_tests 0x012fd642 (anonymous namespace)::ChromeTestLauncherDelegate::RunTestSuite(int, char**) + 34
27 browser_tests 0x04e97e42 content::LaunchTests(content::TestLauncherDelegate*, int, int, char**) + 738
28 browser_tests 0x012fd5f3 LaunchChromeTests(int, ChromeTestSuiteRunner*, int, char**) + 67
29 browser_tests 0x00b5f73d main + 77
30 browser_tests 0x00039635 start + 53
31 ??? 0x0000000b 0x0 + 11
Original issue's description:
> [DevTools] Move DevToolsWindow testing code to a separate class.
>
> This change:
> - allows for proper docking testing (including toolbox);
> - removes all test friends from DevToolsWindow;
> - unifies testing approach to use load callback instead of notifications;
> - adds simple toolbox tests.
>
> BUG=393566
>
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=284050
TBR=pfeldman@chromium.org,lushnikov@chromium.org,sky@chromium.org,dgozman@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=393566
Review URL: https://codereview.chromium.org/403833002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284174 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/devtools/devtools_sanity_browsertest.cc | 170 | ||||
-rw-r--r-- | chrome/browser/devtools/devtools_window.cc | 87 | ||||
-rw-r--r-- | chrome/browser/devtools/devtools_window.h | 24 | ||||
-rw-r--r-- | chrome/browser/devtools/devtools_window_testing.cc | 151 | ||||
-rw-r--r-- | chrome/browser/devtools/devtools_window_testing.h | 60 | ||||
-rw-r--r-- | chrome/browser/policy/policy_browsertest.cc | 4 | ||||
-rw-r--r-- | chrome/browser/task_manager/task_manager_browsertest.cc | 35 | ||||
-rw-r--r-- | chrome/browser/ui/browser_browsertest.cc | 6 | ||||
-rw-r--r-- | chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm | 14 | ||||
-rw-r--r-- | chrome/browser/ui/cocoa/dev_tools_controller_browsertest.mm | 11 | ||||
-rw-r--r-- | chrome/browser/ui/cocoa/view_id_util_browsertest.mm | 4 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 2 | ||||
-rw-r--r-- | chrome/test/base/ui_test_utils.cc | 8 | ||||
-rw-r--r-- | chrome/test/base/ui_test_utils.h | 4 |
14 files changed, 218 insertions, 362 deletions
diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc index 764eeac..6d5a6fc 100644 --- a/chrome/browser/devtools/devtools_sanity_browsertest.cc +++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc @@ -14,7 +14,7 @@ #include "base/test/test_timeouts.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/devtools/browser_list_tabcontents_provider.h" -#include "chrome/browser/devtools/devtools_window_testing.h" +#include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/extensions/extension_service.h" @@ -84,21 +84,19 @@ const char kReloadSharedWorkerTestPage[] = void RunTestFunction(DevToolsWindow* window, const char* test_name) { std::string result; - RenderViewHost* rvh = DevToolsWindowTesting::Get(window)-> - main_web_contents()->GetRenderViewHost(); // At first check that JavaScript part of the front-end is loaded by // checking that global variable uiTests exists(it's created after all js // files have been loaded) and has runTest method. ASSERT_TRUE( content::ExecuteScriptAndExtractString( - rvh, + window->web_contents_for_test()->GetRenderViewHost(), "window.domAutomationController.send(" " '' + (window.uiTests && (typeof uiTests.runTest)));", &result)); ASSERT_EQ("function", result) << "DevTools front-end is broken."; ASSERT_TRUE(content::ExecuteScriptAndExtractString( - rvh, + window->web_contents_for_test()->GetRenderViewHost(), base::StringPrintf("uiTests.runTest('%s')", test_name), &result)); EXPECT_EQ("[OK]", result); @@ -129,24 +127,38 @@ class DevToolsSanityTest : public InProcessBrowserTest { LoadTestPage(test_page); inspected_rvh_ = GetInspectedTab()->GetRenderViewHost(); - window_ = DevToolsWindowTesting::OpenDevToolsWindowSync( - inspected_rvh_, is_docked); + window_ = + DevToolsWindow::OpenDevToolsWindowForTest(inspected_rvh_, is_docked); + ui_test_utils::WaitUntilDevToolsWindowLoaded(window_); } WebContents* GetInspectedTab() { return browser()->tab_strip_model()->GetWebContentsAt(0); } - void CloseDevToolsWindow() { - DevToolsWindowTesting::CloseDevToolsWindowSync(window_); + void ToggleDevToolsWindow() { + content::WindowedNotificationObserver close_observer( + content::NOTIFICATION_WEB_CONTENTS_DESTROYED, + content::Source<content::WebContents>( + window_->web_contents_for_test())); + DevToolsWindow::ToggleDevToolsWindow(inspected_rvh_, false, + DevToolsToggleAction::Toggle()); + close_observer.Wait(); } - WebContents* main_web_contents() { - return DevToolsWindowTesting::Get(window_)->main_web_contents(); + void ToggleDevToolsWindowDontWait() { + DevToolsWindow::ToggleDevToolsWindow(inspected_rvh_, false, + DevToolsToggleAction::Toggle()); } - WebContents* toolbox_web_contents() { - return DevToolsWindowTesting::Get(window_)->toolbox_web_contents(); + void CloseDevToolsWindow() { + DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); + content::WindowedNotificationObserver close_observer( + content::NOTIFICATION_WEB_CONTENTS_DESTROYED, + content::Source<content::WebContents>( + window_->web_contents_for_test())); + devtools_manager->CloseAllClientHosts(); + close_observer.Wait(); } DevToolsWindow* window_; @@ -170,8 +182,7 @@ class DevToolsWindowBeforeUnloadObserver DevToolsWindowBeforeUnloadObserver::DevToolsWindowBeforeUnloadObserver( DevToolsWindow* devtools_window) - : WebContentsObserver( - DevToolsWindowTesting::Get(devtools_window)->main_web_contents()), + : WebContentsObserver(devtools_window->web_contents_for_test()), m_fired(false) { } @@ -201,14 +212,17 @@ class DevToolsBeforeUnloadTest: public DevToolsSanityTest { TabStripModel::CLOSE_NONE); } - void CloseDevToolsWindowAsync() { - DevToolsWindowTesting::CloseDevToolsWindow(window_); + void CloseDockedDevTools() { + ToggleDevToolsWindowDontWait(); + } + + void CloseUndockedDevTools() { + chrome::CloseWindow(window_->browser_for_test()); } void CloseInspectedBrowser() { chrome::CloseWindow(browser()); } - protected: void InjectBeforeUnloadListener(content::WebContents* web_contents) { ASSERT_TRUE(content::ExecuteScript(web_contents->GetRenderViewHost(), @@ -220,11 +234,11 @@ class DevToolsBeforeUnloadTest: public DevToolsSanityTest { base::Callback<void(void)> close_method, bool wait_for_browser_close = true) { OpenDevToolsWindow(kDebuggerTestPage, is_docked); - scoped_refptr<content::MessageLoopRunner> runner = - new content::MessageLoopRunner; - DevToolsWindowTesting::Get(window_)-> - SetCloseCallback(runner->QuitClosure()); - InjectBeforeUnloadListener(main_web_contents()); + content::WindowedNotificationObserver devtools_close_observer( + content::NOTIFICATION_WEB_CONTENTS_DESTROYED, + content::Source<content::WebContents>( + window_->web_contents_for_test())); + InjectBeforeUnloadListener(window_->web_contents_for_test()); { DevToolsWindowBeforeUnloadObserver before_unload_observer(window_); close_method.Run(); @@ -240,13 +254,14 @@ class DevToolsBeforeUnloadTest: public DevToolsSanityTest { if (wait_for_browser_close) close_observer.Wait(); } - runner->Run(); + devtools_close_observer.Wait(); } DevToolsWindow* OpenDevToolWindowOnWebContents( content::WebContents* contents, bool is_docked) { - DevToolsWindow* window = DevToolsWindowTesting::OpenDevToolsWindowSync( + DevToolsWindow* window = DevToolsWindow::OpenDevToolsWindowForTest( contents->GetRenderViewHost(), is_docked); + ui_test_utils::WaitUntilDevToolsWindowLoaded(window); return window; } @@ -255,14 +270,29 @@ class DevToolsBeforeUnloadTest: public DevToolsSanityTest { content::NOTIFICATION_LOAD_STOP, content::NotificationService::AllSources()); ASSERT_TRUE(content::ExecuteScript( - DevToolsWindowTesting::Get(devtools_window)-> - main_web_contents()->GetRenderViewHost(), + devtools_window->web_contents_for_test()->GetRenderViewHost(), "window.open(\"\", \"\", \"location=0\");")); observer.Wait(); } void CloseDevToolsPopupWindow(DevToolsWindow* devtools_window) { - DevToolsWindowTesting::CloseDevToolsWindowSync(devtools_window); + Browser* popup_browser = NULL; + for (chrome::BrowserIterator it; !it.done(); it.Next()) { + if (it->is_devtools()) { + content::WebContents* contents = + it->tab_strip_model()->GetWebContentsAt(0); + if (devtools_window->web_contents_for_test() != contents) { + popup_browser = *it; + break; + } + } + } + ASSERT_FALSE(popup_browser == NULL); + content::WindowedNotificationObserver close_observer( + chrome::NOTIFICATION_BROWSER_CLOSED, + content::Source<Browser>(popup_browser)); + chrome::CloseWindow(popup_browser); + close_observer.Wait(); } void AcceptModalDialog() { @@ -511,12 +541,18 @@ class WorkerDevToolsSanityTest : public InProcessBrowserTest { DevToolsAgentHost::GetForWorker( worker_data->worker_process_id, worker_data->worker_route_id)); - window_ = DevToolsWindowTesting::OpenDevToolsWindowForWorkerSync( - profile, agent_host); + window_ = DevToolsWindow::OpenDevToolsWindowForWorker(profile, agent_host); + content::WaitForLoadStop(window_->web_contents_for_test()); } void CloseDevToolsWindow() { - DevToolsWindowTesting::CloseDevToolsWindowSync(window_); + Browser* browser = window_->browser_for_test(); + content::WindowedNotificationObserver close_observer( + content::NOTIFICATION_WEB_CONTENTS_DESTROYED, + content::Source<content::WebContents>( + window_->web_contents_for_test())); + browser->tab_strip_model()->CloseAllTabs(); + close_observer.Wait(); } DevToolsWindow* window_; @@ -526,7 +562,7 @@ class WorkerDevToolsSanityTest : public InProcessBrowserTest { // we try to close them. IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, TestDockedDevToolsClose) { RunBeforeUnloadSanityTest(true, base::Bind( - &DevToolsBeforeUnloadTest::CloseDevToolsWindowAsync, this), false); + &DevToolsBeforeUnloadTest::CloseDockedDevTools, this), false); } // Tests that BeforeUnload event gets called on docked devtools if @@ -549,7 +585,7 @@ IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, // we try to close them. IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, TestUndockedDevToolsClose) { RunBeforeUnloadSanityTest(false, base::Bind( - &DevToolsBeforeUnloadTest::CloseDevToolsWindowAsync, this), false); + &DevToolsBeforeUnloadTest::CloseUndockedDevTools, this), false); } // Tests that BeforeUnload event gets called on undocked devtools if @@ -585,19 +621,17 @@ IN_PROC_BROWSER_TEST_F(DevToolsUnresponsiveBeforeUnloadTest, LoadTestPage(kDebuggerTestPage); DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents( GetInspectedTab(), false); - - scoped_refptr<content::MessageLoopRunner> runner = - new content::MessageLoopRunner; - DevToolsWindowTesting::Get(devtools_window)->SetCloseCallback( - runner->QuitClosure()); + content::WindowedNotificationObserver devtools_close_observer( + content::NOTIFICATION_WEB_CONTENTS_DESTROYED, + content::Source<content::WebContents>( + devtools_window->web_contents_for_test())); ASSERT_TRUE(content::ExecuteScript( - DevToolsWindowTesting::Get(devtools_window)->main_web_contents()-> - GetRenderViewHost(), + devtools_window->web_contents_for_test()->GetRenderViewHost(), "window.addEventListener('beforeunload'," "function(event) { while (true); });")); CloseInspectedTab(); - runner->Run(); + devtools_close_observer.Wait(); } // Tests that closing worker inspector window does not cause browser crash @@ -608,6 +642,10 @@ IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, LoadTestPage(kDebuggerTestPage); DevToolsWindow* devtools_window = OpenDevToolWindowOnWebContents( GetInspectedTab(), false); + content::WindowedNotificationObserver devtools_close_observer( + content::NOTIFICATION_WEB_CONTENTS_DESTROYED, + content::Source<content::WebContents>( + devtools_window->web_contents_for_test())); OpenDevToolsPopupWindow(devtools_window); CloseDevToolsPopupWindow(devtools_window); @@ -631,23 +669,19 @@ IN_PROC_BROWSER_TEST_F(DevToolsBeforeUnloadTest, new content::WindowedNotificationObserver( content::NOTIFICATION_WEB_CONTENTS_DESTROYED, content::Source<content::WebContents>( - DevToolsWindowTesting::Get(devtools_window)-> - main_web_contents())); + devtools_window->web_contents_for_test())); close_observers.push_back(close_observer); - inspected_web_contents = - DevToolsWindowTesting::Get(devtools_window)->main_web_contents(); + inspected_web_contents = devtools_window->web_contents_for_test(); } - InjectBeforeUnloadListener( - DevToolsWindowTesting::Get(windows[0])->main_web_contents()); - InjectBeforeUnloadListener( - DevToolsWindowTesting::Get(windows[2])->main_web_contents()); + InjectBeforeUnloadListener(windows[0]->web_contents_for_test()); + InjectBeforeUnloadListener(windows[2]->web_contents_for_test()); // Try to close second devtools. { content::WindowedNotificationObserver cancel_browser( chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, content::NotificationService::AllSources()); - chrome::CloseWindow(DevToolsWindowTesting::Get(windows[1])->browser()); + chrome::CloseWindow(windows[1]->browser_for_test()); CancelModalDialog(); cancel_browser.Wait(); } @@ -805,41 +839,25 @@ IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestDeviceEmulation) { IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestDevToolsExternalNavigation) { OpenDevToolsWindow(kDebuggerTestPage, true); GURL url = test_server()->GetURL(kNavigateBackTestPage); - ui_test_utils::UrlLoadObserver observer(url, + // TODO(dgozman): remove this once notifications are gone. + // Right now notifications happen after observers, so DevTools window is + // already loaded, but we still catch it's notification when looking for + // all sources. + content::WaitForLoadStop(window_->web_contents_for_test()); + content::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, content::NotificationService::AllSources()); ASSERT_TRUE(content::ExecuteScript( - main_web_contents(), + window_->web_contents_for_test(), std::string("window.location = \"") + url.spec() + "\"")); observer.Wait(); - ASSERT_TRUE(main_web_contents()->GetURL(). + ASSERT_TRUE(window_->web_contents_for_test()->GetURL(). SchemeIs(content::kChromeDevToolsScheme)); ASSERT_EQ(url, GetInspectedTab()->GetURL()); CloseDevToolsWindow(); } -// Tests that toolbox window is loaded when DevTools window is undocked. -IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestToolboxLoadedUndocked) { - OpenDevToolsWindow(kDebuggerTestPage, false); - ASSERT_TRUE(toolbox_web_contents()); - DevToolsWindow* on_self = DevToolsWindowTesting::OpenDevToolsWindowSync( - main_web_contents()->GetRenderViewHost(), false); - ASSERT_FALSE(DevToolsWindowTesting::Get(on_self)->toolbox_web_contents()); - DevToolsWindowTesting::CloseDevToolsWindowSync(on_self); - CloseDevToolsWindow(); -} - -// Tests that toolbox window is not loaded when DevTools window is docked. -IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestToolboxNotLoadedDocked) { - OpenDevToolsWindow(kDebuggerTestPage, true); - ASSERT_FALSE(toolbox_web_contents()); - DevToolsWindow* on_self = DevToolsWindowTesting::OpenDevToolsWindowSync( - main_web_contents()->GetRenderViewHost(), false); - ASSERT_FALSE(DevToolsWindowTesting::Get(on_self)->toolbox_web_contents()); - DevToolsWindowTesting::CloseDevToolsWindowSync(on_self); - CloseDevToolsWindow(); -} - // Tests that inspector will reattach to inspected page when it is reloaded // after a crash. See http://crbug.com/101952 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestReattachAfterCrash) { @@ -851,7 +869,7 @@ IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestPageWithNoJavaScript) { std::string result; ASSERT_TRUE( content::ExecuteScriptAndExtractString( - main_web_contents()->GetRenderViewHost(), + window_->web_contents_for_test()->GetRenderViewHost(), "window.domAutomationController.send(" " '' + (window.uiTests && (typeof uiTests.runTest)));", &result)); diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc index c47389d..608ac7a 100644 --- a/chrome/browser/devtools/devtools_window.cc +++ b/chrome/browser/devtools/devtools_window.cc @@ -39,6 +39,7 @@ #include "content/public/browser/native_web_keyboard_event.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/navigation_entry.h" +#include "content/public/browser/notification_source.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" @@ -48,6 +49,7 @@ #include "content/public/common/content_client.h" #include "content/public/common/page_transition_types.h" #include "content/public/common/url_constants.h" +#include "content/public/test/test_utils.h" #include "third_party/WebKit/public/web/WebInputEvent.h" #include "ui/events/keycodes/keyboard_codes.h" @@ -316,11 +318,6 @@ DevToolsWindow::~DevToolsWindow() { std::find(instances->begin(), instances->end(), this)); DCHECK(it != instances->end()); instances->erase(it); - - if (!close_callback_.is_null()) { - close_callback_.Run(); - close_callback_ = base::Closure(); - } } // static @@ -406,16 +403,7 @@ DevToolsWindow* DevToolsWindow::GetInstanceForInspectedWebContents( // static bool DevToolsWindow::IsDevToolsWindow(content::WebContents* web_contents) { - if (!web_contents || g_instances == NULL) - return false; - DevToolsWindows* instances = g_instances.Pointer(); - for (DevToolsWindows::iterator it(instances->begin()); it != instances->end(); - ++it) { - if ((*it)->main_web_contents_ == web_contents || - (*it)->toolbox_web_contents_ == web_contents) - return true; - } - return false; + return AsDevToolsWindow(web_contents) != NULL; } // static @@ -437,21 +425,40 @@ DevToolsWindow* DevToolsWindow::OpenDevToolsWindowForWorker( DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker( Profile* profile) { content::RecordAction(base::UserMetricsAction("DevTools_InspectWorker")); - return Create(profile, GURL(), NULL, true, false, false, ""); + return Create(profile, GURL(), NULL, true, false, false); } // static DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( content::RenderViewHost* inspected_rvh) { return ToggleDevToolsWindow( - inspected_rvh, true, DevToolsToggleAction::Show(), ""); + inspected_rvh, true, DevToolsToggleAction::Show()); } // static DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( content::RenderViewHost* inspected_rvh, const DevToolsToggleAction& action) { - return ToggleDevToolsWindow(inspected_rvh, true, action, ""); + return ToggleDevToolsWindow( + inspected_rvh, true, action); +} + +// static +DevToolsWindow* DevToolsWindow::OpenDevToolsWindowForTest( + content::RenderViewHost* inspected_rvh, + bool is_docked) { + DevToolsWindow* window = OpenDevToolsWindow(inspected_rvh); + window->SetIsDockedAndShowImmediatelyForTest(is_docked); + return window; +} + +// static +DevToolsWindow* DevToolsWindow::OpenDevToolsWindowForTest( + Browser* browser, + bool is_docked) { + return OpenDevToolsWindowForTest( + browser->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), + is_docked); } // static @@ -466,7 +473,7 @@ DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( return ToggleDevToolsWindow( browser->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), - action.type() == DevToolsToggleAction::kInspect, action, ""); + action.type() == DevToolsToggleAction::kInspect, action); } // static @@ -477,7 +484,7 @@ void DevToolsWindow::OpenExternalFrontend( DevToolsWindow* window = FindDevToolsWindow(agent_host); if (!window) { window = Create(profile, DevToolsUI::GetProxyURL(frontend_url), NULL, - false, true, false, ""); + false, true, false); content::DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor( agent_host, window->bindings_->frontend_host()); } @@ -488,8 +495,7 @@ void DevToolsWindow::OpenExternalFrontend( DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( content::RenderViewHost* inspected_rvh, bool force_open, - const DevToolsToggleAction& action, - const std::string& settings) { + const DevToolsToggleAction& action) { scoped_refptr<DevToolsAgentHost> agent( DevToolsAgentHost::GetOrCreateFor(inspected_rvh)); content::DevToolsManager* manager = content::DevToolsManager::GetInstance(); @@ -500,8 +506,7 @@ DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( inspected_rvh->GetProcess()->GetBrowserContext()); content::RecordAction( base::UserMetricsAction("DevTools_InspectRenderer")); - window = Create( - profile, GURL(), inspected_rvh, false, false, true, settings); + window = Create(profile, GURL(), inspected_rvh, false, false, true); manager->RegisterDevToolsClientHostFor(agent.get(), window->bindings_->frontend_host()); do_open = true; @@ -695,6 +700,7 @@ DevToolsWindow::DevToolsWindow(Profile* profile, // Passing "dockSide=undocked" parameter ensures proper UI. life_stage_(can_dock ? kNotLoaded : kIsDockedSet), action_on_load_(DevToolsToggleAction::NoOp()), + ignore_set_is_docked_(false), intercepted_page_beforeunload_(false) { // Set up delegate, so we get fully-functional window immediately. // It will not appear in UI though until |life_stage_ == kLoadCompleted|. @@ -726,8 +732,7 @@ DevToolsWindow* DevToolsWindow::Create( content::RenderViewHost* inspected_rvh, bool shared_worker_frontend, bool external_frontend, - bool can_dock, - const std::string& settings) { + bool can_dock) { if (inspected_rvh) { // Check for a place to dock. Browser* browser = NULL; @@ -746,7 +751,7 @@ DevToolsWindow* DevToolsWindow::Create( GURL url(GetDevToolsURL(profile, frontend_url, shared_worker_frontend, external_frontend, - can_dock, settings)); + can_dock)); return new DevToolsWindow(profile, url, inspected_rvh, can_dock); } @@ -755,8 +760,7 @@ GURL DevToolsWindow::GetDevToolsURL(Profile* profile, const GURL& base_url, bool shared_worker_frontend, bool external_frontend, - bool can_dock, - const std::string& settings) { + bool can_dock) { // Compatibility errors are encoded with data urls, pass them // through with no decoration. if (base_url.SchemeIs("data")) @@ -773,8 +777,6 @@ GURL DevToolsWindow::GetDevToolsURL(Profile* profile, url_string += "&remoteFrontend=true"; if (can_dock) url_string += "&can_dock=true"; - if (settings.size()) - url_string += "&settings=" + settings; return GURL(url_string); } @@ -1028,8 +1030,27 @@ void DevToolsWindow::MoveWindow(int x, int y) { } } +void DevToolsWindow::SetIsDockedAndShowImmediatelyForTest(bool is_docked) { + DCHECK(!is_docked || can_dock_); + DCHECK(life_stage_ != kClosing); + if (life_stage_ == kLoadCompleted) { + SetIsDocked(is_docked); + } else { + is_docked_ = is_docked; + // Load is completed when both kIsDockedSet and kOnLoadFired happened. + // Note that kIsDockedSet may be already set when can_dock_ is false. + life_stage_ = life_stage_ == kOnLoadFired ? kLoadCompleted : kIsDockedSet; + // Note that action_on_load_ will be performed after the load is actually + // completed. For now, just show the window. + Show(DevToolsToggleAction::Show()); + if (life_stage_ == kLoadCompleted) + LoadCompleted(); + } + ignore_set_is_docked_ = true; +} + void DevToolsWindow::SetIsDocked(bool dock_requested) { - if (life_stage_ == kClosing) + if (ignore_set_is_docked_ || life_stage_ == kClosing) return; DCHECK(can_dock_ || !dock_requested); @@ -1240,7 +1261,7 @@ void DevToolsWindow::LoadCompleted() { } void DevToolsWindow::SetLoadCompletedCallback(const base::Closure& closure) { - if (life_stage_ == kLoadCompleted || life_stage_ == kClosing) { + if (life_stage_ == kLoadCompleted) { if (!closure.is_null()) closure.Run(); return; diff --git a/chrome/browser/devtools/devtools_window.h b/chrome/browser/devtools/devtools_window.h index 5cf23b1..2bfa5f0 100644 --- a/chrome/browser/devtools/devtools_window.h +++ b/chrome/browser/devtools/devtools_window.h @@ -13,7 +13,6 @@ class Browser; class BrowserWindow; -class DevToolsWindowTesting; class DevToolsEventForwarder; namespace content { @@ -72,6 +71,11 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate, static DevToolsWindow* OpenDevToolsWindow( content::RenderViewHost* inspected_rvh); + static DevToolsWindow* OpenDevToolsWindowForTest( + content::RenderViewHost* inspected_rvh, bool is_docked); + static DevToolsWindow* OpenDevToolsWindowForTest( + Browser* browser, bool is_docked); + // Perform specified action for current WebContents inside a |browser|. // This may close currently open DevTools window. static DevToolsWindow* ToggleDevToolsWindow( @@ -92,6 +96,9 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate, static void InspectElement( content::RenderViewHost* inspected_rvh, int x, int y); + Browser* browser_for_test() { return browser_; } + content::WebContents* web_contents_for_test() { return main_web_contents_; } + // Sets closure to be called after load is done. If already loaded, calls // closure immediately. void SetLoadCompletedCallback(const base::Closure& closure); @@ -174,7 +181,8 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate, static void OnPageCloseCanceled(content::WebContents* contents); private: - friend class DevToolsWindowTesting; + friend class DevToolsSanityTest; + friend class BrowserWindowControllerTest; // DevTools lifecycle typically follows this way: // - Toggle/Open: client call; @@ -207,22 +215,19 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate, content::RenderViewHost* inspected_rvh, bool shared_worker_frontend, bool external_frontend, - bool can_dock, - const std::string& settings); + bool can_dock); static GURL GetDevToolsURL(Profile* profile, const GURL& base_url, bool shared_worker_frontend, bool external_frontend, - bool can_dock, - const std::string& settings); + bool can_dock); static DevToolsWindow* FindDevToolsWindow(content::DevToolsAgentHost*); static DevToolsWindow* AsDevToolsWindow(content::WebContents*); static DevToolsWindow* CreateDevToolsWindowForWorker(Profile* profile); static DevToolsWindow* ToggleDevToolsWindow( content::RenderViewHost* inspected_rvh, bool force_open, - const DevToolsToggleAction& action, - const std::string& settings); + const DevToolsToggleAction& action); static std::string GetDevToolsWindowPlacementPrefKey(); @@ -290,6 +295,7 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate, void Show(const DevToolsToggleAction& action); void DoAction(const DevToolsToggleAction& action); void LoadCompleted(); + void SetIsDockedAndShowImmediatelyForTest(bool is_docked); void UpdateBrowserToolbar(); void UpdateBrowserWindow(); content::WebContents* GetInspectedWebContents(); @@ -305,12 +311,12 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate, const bool can_dock_; LifeStage life_stage_; DevToolsToggleAction action_on_load_; + bool ignore_set_is_docked_; DevToolsContentsResizingStrategy contents_resizing_strategy_; // True if we're in the process of handling a beforeunload event originating // from the inspected webcontents, see InterceptPageBeforeUnload for details. bool intercepted_page_beforeunload_; base::Closure load_completed_callback_; - base::Closure close_callback_; base::TimeTicks inspect_element_start_time_; scoped_ptr<DevToolsEventForwarder> event_forwarder_; diff --git a/chrome/browser/devtools/devtools_window_testing.cc b/chrome/browser/devtools/devtools_window_testing.cc deleted file mode 100644 index aa1ee4b..0000000 --- a/chrome/browser/devtools/devtools_window_testing.cc +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/devtools/devtools_window_testing.h" - -#include "base/lazy_instance.h" -#include "chrome/browser/devtools/devtools_window.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "content/public/browser/devtools_agent_host.h" -#include "content/public/browser/render_view_host.h" -#include "content/public/browser/web_contents.h" -#include "content/public/test/test_utils.h" - -namespace { - -typedef std::vector<DevToolsWindowTesting*> DevToolsWindowTestings; -base::LazyInstance<DevToolsWindowTestings>::Leaky g_instances = - LAZY_INSTANCE_INITIALIZER; - -} - -DevToolsWindowTesting::DevToolsWindowTesting(DevToolsWindow* window) - : devtools_window_(window) { - DCHECK(window); - window->close_callback_ = - base::Bind(&DevToolsWindowTesting::WindowClosed, window); - g_instances.Get().push_back(this); -} - -DevToolsWindowTesting::~DevToolsWindowTesting() { - DevToolsWindowTestings* instances = g_instances.Pointer(); - DevToolsWindowTestings::iterator it( - std::find(instances->begin(), instances->end(), this)); - DCHECK(it != instances->end()); - instances->erase(it); - if (!close_callback_.is_null()) { - close_callback_.Run(); - close_callback_ = base::Closure(); - } -} - -// static -DevToolsWindowTesting* DevToolsWindowTesting::Get(DevToolsWindow* window) { - DevToolsWindowTesting* testing = DevToolsWindowTesting::Find(window); - if (!testing) - testing = new DevToolsWindowTesting(window); - return testing; -} - -// static -DevToolsWindowTesting* DevToolsWindowTesting::Find(DevToolsWindow* window) { - if (g_instances == NULL) - return NULL; - DevToolsWindowTestings* instances = g_instances.Pointer(); - for (DevToolsWindowTestings::iterator it(instances->begin()); - it != instances->end(); - ++it) { - if ((*it)->devtools_window_ == window) - return *it; - } - return NULL; -} - -Browser* DevToolsWindowTesting::browser() { - return devtools_window_->browser_; -} - -content::WebContents* DevToolsWindowTesting::main_web_contents() { - return devtools_window_->main_web_contents_; -} - -content::WebContents* DevToolsWindowTesting::toolbox_web_contents() { - return devtools_window_->toolbox_web_contents_; -} - -void DevToolsWindowTesting::SetInspectedPageBounds(const gfx::Rect& bounds) { - devtools_window_->SetInspectedPageBounds(bounds); -} - -void DevToolsWindowTesting::SetCloseCallback(const base::Closure& closure) { - close_callback_ = closure; -} - -// static -void DevToolsWindowTesting::WindowClosed(DevToolsWindow* window) { - DevToolsWindowTesting* testing = DevToolsWindowTesting::Find(window); - if (testing) - delete testing; -} - -// static -void DevToolsWindowTesting::WaitForDevToolsWindowLoad(DevToolsWindow* window) { - scoped_refptr<content::MessageLoopRunner> runner = - new content::MessageLoopRunner; - window->SetLoadCompletedCallback(runner->QuitClosure()); - runner->Run(); -} - -// static -DevToolsWindow* DevToolsWindowTesting::OpenDevToolsWindowSync( - content::RenderViewHost* inspected_rvh, - bool is_docked) { - std::string settings = is_docked ? - "{\"currentDockState\":\"\\\"bottom\\\"\"}" : - "{\"currentDockState\":\"\\\"undocked\\\"\"}"; - DevToolsWindow* window = DevToolsWindow::ToggleDevToolsWindow( - inspected_rvh, true, DevToolsToggleAction::Show(), settings); - WaitForDevToolsWindowLoad(window); - return window; -} - -// static -DevToolsWindow* DevToolsWindowTesting::OpenDevToolsWindowSync( - Browser* browser, - bool is_docked) { - return OpenDevToolsWindowSync( - browser->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), - is_docked); -} - -// static -DevToolsWindow* DevToolsWindowTesting::OpenDevToolsWindowForWorkerSync( - Profile* profile, content::DevToolsAgentHost* worker_agent) { - DevToolsWindow* window = DevToolsWindow::OpenDevToolsWindowForWorker( - profile, worker_agent); - WaitForDevToolsWindowLoad(window); - return window; -} - -// static -void DevToolsWindowTesting::CloseDevToolsWindow( - DevToolsWindow* window) { - if (window->is_docked_) { - window->CloseWindow(); - } else { - window->browser_->window()->Close(); - } -} - -// static -void DevToolsWindowTesting::CloseDevToolsWindowSync( - DevToolsWindow* window) { - scoped_refptr<content::MessageLoopRunner> runner = - new content::MessageLoopRunner; - DevToolsWindowTesting::Get(window)->SetCloseCallback(runner->QuitClosure()); - CloseDevToolsWindow(window); - runner->Run(); -} diff --git a/chrome/browser/devtools/devtools_window_testing.h b/chrome/browser/devtools/devtools_window_testing.h deleted file mode 100644 index 38e5e73..0000000 --- a/chrome/browser/devtools/devtools_window_testing.h +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_TESTING_H_ -#define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_TESTING_H_ - -#include "base/callback.h" -#include "chrome/browser/devtools/devtools_window.h" -#include "ui/gfx/rect.h" - -class Browser; -class Profile; - -namespace content { -class DevToolsAgentHost; -class RenderViewHost; -class WebContents; -} - -class DevToolsWindowTesting { - public: - virtual ~DevToolsWindowTesting(); - - // The following methods block until DevToolsWindow is completely loaded. - static DevToolsWindow* OpenDevToolsWindowSync( - content::RenderViewHost* inspected_rvh, bool is_docked); - static DevToolsWindow* OpenDevToolsWindowSync( - Browser* browser, bool is_docked); - static DevToolsWindow* OpenDevToolsWindowForWorkerSync( - Profile* profile, content::DevToolsAgentHost* worker_agent); - - // Closes the window like it was user-initiated. - static void CloseDevToolsWindow(DevToolsWindow* window); - // Blocks until window is closed. - static void CloseDevToolsWindowSync(DevToolsWindow* window); - - static DevToolsWindowTesting* Get(DevToolsWindow* window); - - Browser* browser(); - content::WebContents* main_web_contents(); - content::WebContents* toolbox_web_contents(); - void SetInspectedPageBounds(const gfx::Rect& bounds); - void SetCloseCallback(const base::Closure& closure); - - private: - friend class DevToolsWindow; - - explicit DevToolsWindowTesting(DevToolsWindow* window); - static void WaitForDevToolsWindowLoad(DevToolsWindow* window); - static void WindowClosed(DevToolsWindow* window); - static DevToolsWindowTesting* Find(DevToolsWindow* window); - - DevToolsWindow* devtools_window_; - base::Closure close_callback_; - - DISALLOW_COPY_AND_ASSIGN(DevToolsWindowTesting); -}; - -#endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_TESTING_H_ diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc index 29041a5..1121e20 100644 --- a/chrome/browser/policy/policy_browsertest.cc +++ b/chrome/browser/policy/policy_browsertest.cc @@ -31,7 +31,7 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/content_settings/tab_specific_content_settings.h" -#include "chrome/browser/devtools/devtools_window_testing.h" +#include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/download/download_prefs.h" #include "chrome/browser/extensions/api/messaging/native_message_process_host.h" #include "chrome/browser/extensions/crx_installer.h" @@ -1411,7 +1411,7 @@ IN_PROC_BROWSER_TEST_F(PolicyTest, DeveloperToolsDisabled) { content::WindowedNotificationObserver close_observer( content::NOTIFICATION_WEB_CONTENTS_DESTROYED, content::Source<content::WebContents>( - DevToolsWindowTesting::Get(devtools_window)->main_web_contents())); + devtools_window->web_contents_for_test())); UpdateProviderPolicy(policies); // wait for devtools close close_observer.Wait(); diff --git a/chrome/browser/task_manager/task_manager_browsertest.cc b/chrome/browser/task_manager/task_manager_browsertest.cc index 8275879..78043a0 100644 --- a/chrome/browser/task_manager/task_manager_browsertest.cc +++ b/chrome/browser/task_manager/task_manager_browsertest.cc @@ -8,7 +8,7 @@ #include "base/strings/stringprintf.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/devtools/devtools_window_testing.h" +#include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/infobars/infobar_service.h" @@ -731,37 +731,38 @@ IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsNewDockedWindow) { ShowTaskManager(); // Task manager shown BEFORE dev tools window. ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchAnyTab())); - DevToolsWindow* devtools = - DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), true); + DevToolsWindow::OpenDevToolsWindowForTest( + browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), + true); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab())); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab())); - DevToolsWindowTesting::CloseDevToolsWindowSync(devtools); } IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsNewUndockedWindow) { ShowTaskManager(); // Task manager shown BEFORE dev tools window. ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchAnyTab())); - DevToolsWindow* devtools = - DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), false); - ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(3, MatchAnyTab())); - ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(3, MatchAnyTab())); - DevToolsWindowTesting::CloseDevToolsWindowSync(devtools); + DevToolsWindow::OpenDevToolsWindowForTest( + browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), + false); + ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab())); + ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab())); } IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsOldDockedWindow) { - DevToolsWindow* devtools = - DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), true); + DevToolsWindow::OpenDevToolsWindowForTest( + browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), + true); + ShowTaskManager(); // Task manager shown AFTER dev tools window. ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab())); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab())); - DevToolsWindowTesting::CloseDevToolsWindowSync(devtools); } IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsOldUnockedWindow) { - DevToolsWindow* devtools = - DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), false); + DevToolsWindow::OpenDevToolsWindowForTest( + browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), + false); ShowTaskManager(); // Task manager shown AFTER dev tools window. - ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(3, MatchAnyTab())); - ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(3, MatchAnyTab())); - DevToolsWindowTesting::CloseDevToolsWindowSync(devtools); + ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab())); + ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab())); } diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc index 5686c58..0585f14 100644 --- a/chrome/browser/ui/browser_browsertest.cc +++ b/chrome/browser/ui/browser_browsertest.cc @@ -18,7 +18,7 @@ #include "chrome/browser/command_updater.h" #include "chrome/browser/content_settings/host_content_settings_map.h" #include "chrome/browser/defaults.h" -#include "chrome/browser/devtools/devtools_window_testing.h" +#include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/tab_helper.h" @@ -1374,7 +1374,9 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, ShouldShowLocationBar) { NEW_WINDOW)); ASSERT_TRUE(app_window); - DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), false); + DevToolsWindow::OpenDevToolsWindowForTest( + browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), + false); // The launch should have created a new app browser and a dev tools browser. ASSERT_EQ(3u, diff --git a/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm b/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm index c22e9ce..7ba3a71 100644 --- a/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm +++ b/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm @@ -9,7 +9,7 @@ #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/devtools/devtools_window_testing.h" +#include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/infobars/infobar_service.h" #include "chrome/browser/infobars/simple_alert_infobar_delegate.h" #include "chrome/browser/profiles/profile.h" @@ -134,6 +134,11 @@ class BrowserWindowControllerTest : public InProcessBrowserTest { return height; } + void SetDevToolsWindowContentsBounds( + DevToolsWindow* window, const gfx::Rect& bounds) { + window->SetInspectedPageBounds(bounds); + } + private: DISALLOW_COPY_AND_ASSIGN(BrowserWindowControllerTest); }; @@ -361,10 +366,9 @@ IN_PROC_BROWSER_TEST_F(BrowserWindowControllerTest, StatusBubblePositioning) { NSPoint origin = [controller() statusBubbleBaseFrame].origin; - DevToolsWindow* devtools_window = - DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), true); - DevToolsWindowTesting::Get(devtools_window)->SetInspectedPageBounds( - gfx::Rect(10, 10, 100, 100)); + DevToolsWindow* devtools_window = DevToolsWindow::OpenDevToolsWindowForTest( + browser(), true); + SetDevToolsWindowContentsBounds(devtools_window, gfx::Rect(10, 10, 100, 100)); NSPoint originWithDevTools = [controller() statusBubbleBaseFrame].origin; EXPECT_FALSE(NSEqualPoints(origin, originWithDevTools)); diff --git a/chrome/browser/ui/cocoa/dev_tools_controller_browsertest.mm b/chrome/browser/ui/cocoa/dev_tools_controller_browsertest.mm index 516a7e7..e22f829 100644 --- a/chrome/browser/ui/cocoa/dev_tools_controller_browsertest.mm +++ b/chrome/browser/ui/cocoa/dev_tools_controller_browsertest.mm @@ -5,7 +5,6 @@ #import "chrome/browser/ui/cocoa/dev_tools_controller.h" #include "chrome/browser/devtools/devtools_window.h" -#include "chrome/browser/devtools/devtools_window_testing.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_window.h" @@ -25,11 +24,17 @@ class DevToolsControllerTest : public InProcessBrowserTest { protected: void OpenDevToolsWindow() { devtools_window_ = - DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), true); + DevToolsWindow::OpenDevToolsWindowForTest(browser(), true); } void CloseDevToolsWindow() { - DevToolsWindowTesting::CloseDevToolsWindowSync(devtools_window_); + content::WindowedNotificationObserver close_observer( + content::NOTIFICATION_WEB_CONTENTS_DESTROYED, + content::Source<content::WebContents>( + devtools_window_->web_contents_for_test())); + DevToolsWindow::ToggleDevToolsWindow( + browser(), DevToolsToggleAction::Toggle()); + close_observer.Wait(); } content::WebContents* web_contents() { diff --git a/chrome/browser/ui/cocoa/view_id_util_browsertest.mm b/chrome/browser/ui/cocoa/view_id_util_browsertest.mm index a0b0a44..6c5e9a8 100644 --- a/chrome/browser/ui/cocoa/view_id_util_browsertest.mm +++ b/chrome/browser/ui/cocoa/view_id_util_browsertest.mm @@ -7,7 +7,7 @@ #include "base/prefs/pref_service.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h" -#include "chrome/browser/devtools/devtools_window_testing.h" +#include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/download/download_shelf.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" @@ -47,7 +47,7 @@ class ViewIDTest : public InProcessBrowserTest { chrome::ShowFindBar(browser()); // Make sure docked devtools is created to test VIEW_ID_DEV_TOOLS_DOCKED - DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), true); + DevToolsWindow::OpenDevToolsWindowForTest(browser(), true); // Make sure download shelf is created to test VIEW_ID_DOWNLOAD_SHELF browser()->window()->GetDownloadShelf()->Show(); diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index b094fbc..25dd009 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1019,8 +1019,6 @@ 'browser/devtools/device/adb/mock_adb_server.h', 'browser/devtools/device/port_forwarding_browsertest.cc', 'browser/devtools/device/usb/android_usb_browsertest.cc', - 'browser/devtools/devtools_window_testing.cc', - 'browser/devtools/devtools_window_testing.h', 'browser/devtools/devtools_sanity_browsertest.cc', 'browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc', 'browser/dom_distiller/tab_utils_browsertest.cc', diff --git a/chrome/test/base/ui_test_utils.cc b/chrome/test/base/ui_test_utils.cc index 978835b..2fa3c02 100644 --- a/chrome/test/base/ui_test_utils.cc +++ b/chrome/test/base/ui_test_utils.cc @@ -28,6 +28,7 @@ #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h" +#include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/extensions/extension_action.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/profiles/profile.h" @@ -267,6 +268,13 @@ void NavigateToURLBlockUntilNavigationsComplete(Browser* browser, BROWSER_TEST_WAIT_FOR_NAVIGATION); } +void WaitUntilDevToolsWindowLoaded(DevToolsWindow* window) { + scoped_refptr<content::MessageLoopRunner> runner = + new content::MessageLoopRunner; + window->SetLoadCompletedCallback(runner->QuitClosure()); + runner->Run(); +} + base::FilePath GetTestFilePath(const base::FilePath& dir, const base::FilePath& file) { base::FilePath path; diff --git a/chrome/test/base/ui_test_utils.h b/chrome/test/base/ui_test_utils.h index 9e690d1..7c15ce8 100644 --- a/chrome/test/base/ui_test_utils.h +++ b/chrome/test/base/ui_test_utils.h @@ -28,6 +28,7 @@ class AppModalDialog; class Browser; +class DevToolsWindow; class LocationBar; class Profile; class SkBitmap; @@ -110,6 +111,9 @@ void NavigateToURLBlockUntilNavigationsComplete(Browser* browser, const GURL& url, int number_of_navigations); +// Blocks until DevTools window is loaded. +void WaitUntilDevToolsWindowLoaded(DevToolsWindow* window); + // Generate the file path for testing a particular test. // The file for the tests is all located in // test_root_directory/dir/<file> |