Commit a9cc57a8 authored by gab@chromium.org's avatar gab@chromium.org

Revert of [DevTools] Move DevToolsWindow testing code to a separate class....

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
parent 197c92cc
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include "content/public/browser/native_web_keyboard_event.h" #include "content/public/browser/native_web_keyboard_event.h"
#include "content/public/browser/navigation_controller.h" #include "content/public/browser/navigation_controller.h"
#include "content/public/browser/navigation_entry.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_frame_host.h"
#include "content/public/browser/render_process_host.h" #include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h" #include "content/public/browser/render_view_host.h"
...@@ -48,6 +49,7 @@ ...@@ -48,6 +49,7 @@
#include "content/public/common/content_client.h" #include "content/public/common/content_client.h"
#include "content/public/common/page_transition_types.h" #include "content/public/common/page_transition_types.h"
#include "content/public/common/url_constants.h" #include "content/public/common/url_constants.h"
#include "content/public/test/test_utils.h"
#include "third_party/WebKit/public/web/WebInputEvent.h" #include "third_party/WebKit/public/web/WebInputEvent.h"
#include "ui/events/keycodes/keyboard_codes.h" #include "ui/events/keycodes/keyboard_codes.h"
...@@ -316,11 +318,6 @@ DevToolsWindow::~DevToolsWindow() { ...@@ -316,11 +318,6 @@ DevToolsWindow::~DevToolsWindow() {
std::find(instances->begin(), instances->end(), this)); std::find(instances->begin(), instances->end(), this));
DCHECK(it != instances->end()); DCHECK(it != instances->end());
instances->erase(it); instances->erase(it);
if (!close_callback_.is_null()) {
close_callback_.Run();
close_callback_ = base::Closure();
}
} }
// static // static
...@@ -406,16 +403,7 @@ DevToolsWindow* DevToolsWindow::GetInstanceForInspectedWebContents( ...@@ -406,16 +403,7 @@ DevToolsWindow* DevToolsWindow::GetInstanceForInspectedWebContents(
// static // static
bool DevToolsWindow::IsDevToolsWindow(content::WebContents* web_contents) { bool DevToolsWindow::IsDevToolsWindow(content::WebContents* web_contents) {
if (!web_contents || g_instances == NULL) return AsDevToolsWindow(web_contents) != 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;
} }
// static // static
...@@ -437,21 +425,40 @@ DevToolsWindow* DevToolsWindow::OpenDevToolsWindowForWorker( ...@@ -437,21 +425,40 @@ DevToolsWindow* DevToolsWindow::OpenDevToolsWindowForWorker(
DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker( DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker(
Profile* profile) { Profile* profile) {
content::RecordAction(base::UserMetricsAction("DevTools_InspectWorker")); content::RecordAction(base::UserMetricsAction("DevTools_InspectWorker"));
return Create(profile, GURL(), NULL, true, false, false, ""); return Create(profile, GURL(), NULL, true, false, false);
} }
// static // static
DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( DevToolsWindow* DevToolsWindow::OpenDevToolsWindow(
content::RenderViewHost* inspected_rvh) { content::RenderViewHost* inspected_rvh) {
return ToggleDevToolsWindow( return ToggleDevToolsWindow(
inspected_rvh, true, DevToolsToggleAction::Show(), ""); inspected_rvh, true, DevToolsToggleAction::Show());
} }
// static // static
DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( DevToolsWindow* DevToolsWindow::OpenDevToolsWindow(
content::RenderViewHost* inspected_rvh, content::RenderViewHost* inspected_rvh,
const DevToolsToggleAction& action) { 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 // static
...@@ -466,7 +473,7 @@ DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( ...@@ -466,7 +473,7 @@ DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow(
return ToggleDevToolsWindow( return ToggleDevToolsWindow(
browser->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), browser->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(),
action.type() == DevToolsToggleAction::kInspect, action, ""); action.type() == DevToolsToggleAction::kInspect, action);
} }
// static // static
...@@ -477,7 +484,7 @@ void DevToolsWindow::OpenExternalFrontend( ...@@ -477,7 +484,7 @@ void DevToolsWindow::OpenExternalFrontend(
DevToolsWindow* window = FindDevToolsWindow(agent_host); DevToolsWindow* window = FindDevToolsWindow(agent_host);
if (!window) { if (!window) {
window = Create(profile, DevToolsUI::GetProxyURL(frontend_url), NULL, window = Create(profile, DevToolsUI::GetProxyURL(frontend_url), NULL,
false, true, false, ""); false, true, false);
content::DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor( content::DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor(
agent_host, window->bindings_->frontend_host()); agent_host, window->bindings_->frontend_host());
} }
...@@ -488,8 +495,7 @@ void DevToolsWindow::OpenExternalFrontend( ...@@ -488,8 +495,7 @@ void DevToolsWindow::OpenExternalFrontend(
DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow(
content::RenderViewHost* inspected_rvh, content::RenderViewHost* inspected_rvh,
bool force_open, bool force_open,
const DevToolsToggleAction& action, const DevToolsToggleAction& action) {
const std::string& settings) {
scoped_refptr<DevToolsAgentHost> agent( scoped_refptr<DevToolsAgentHost> agent(
DevToolsAgentHost::GetOrCreateFor(inspected_rvh)); DevToolsAgentHost::GetOrCreateFor(inspected_rvh));
content::DevToolsManager* manager = content::DevToolsManager::GetInstance(); content::DevToolsManager* manager = content::DevToolsManager::GetInstance();
...@@ -500,8 +506,7 @@ DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( ...@@ -500,8 +506,7 @@ DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow(
inspected_rvh->GetProcess()->GetBrowserContext()); inspected_rvh->GetProcess()->GetBrowserContext());
content::RecordAction( content::RecordAction(
base::UserMetricsAction("DevTools_InspectRenderer")); base::UserMetricsAction("DevTools_InspectRenderer"));
window = Create( window = Create(profile, GURL(), inspected_rvh, false, false, true);
profile, GURL(), inspected_rvh, false, false, true, settings);
manager->RegisterDevToolsClientHostFor(agent.get(), manager->RegisterDevToolsClientHostFor(agent.get(),
window->bindings_->frontend_host()); window->bindings_->frontend_host());
do_open = true; do_open = true;
...@@ -695,6 +700,7 @@ DevToolsWindow::DevToolsWindow(Profile* profile, ...@@ -695,6 +700,7 @@ DevToolsWindow::DevToolsWindow(Profile* profile,
// Passing "dockSide=undocked" parameter ensures proper UI. // Passing "dockSide=undocked" parameter ensures proper UI.
life_stage_(can_dock ? kNotLoaded : kIsDockedSet), life_stage_(can_dock ? kNotLoaded : kIsDockedSet),
action_on_load_(DevToolsToggleAction::NoOp()), action_on_load_(DevToolsToggleAction::NoOp()),
ignore_set_is_docked_(false),
intercepted_page_beforeunload_(false) { intercepted_page_beforeunload_(false) {
// Set up delegate, so we get fully-functional window immediately. // Set up delegate, so we get fully-functional window immediately.
// It will not appear in UI though until |life_stage_ == kLoadCompleted|. // It will not appear in UI though until |life_stage_ == kLoadCompleted|.
...@@ -726,8 +732,7 @@ DevToolsWindow* DevToolsWindow::Create( ...@@ -726,8 +732,7 @@ DevToolsWindow* DevToolsWindow::Create(
content::RenderViewHost* inspected_rvh, content::RenderViewHost* inspected_rvh,
bool shared_worker_frontend, bool shared_worker_frontend,
bool external_frontend, bool external_frontend,
bool can_dock, bool can_dock) {
const std::string& settings) {
if (inspected_rvh) { if (inspected_rvh) {
// Check for a place to dock. // Check for a place to dock.
Browser* browser = NULL; Browser* browser = NULL;
...@@ -746,7 +751,7 @@ DevToolsWindow* DevToolsWindow::Create( ...@@ -746,7 +751,7 @@ DevToolsWindow* DevToolsWindow::Create(
GURL url(GetDevToolsURL(profile, frontend_url, GURL url(GetDevToolsURL(profile, frontend_url,
shared_worker_frontend, shared_worker_frontend,
external_frontend, external_frontend,
can_dock, settings)); can_dock));
return new DevToolsWindow(profile, url, inspected_rvh, can_dock); return new DevToolsWindow(profile, url, inspected_rvh, can_dock);
} }
...@@ -755,8 +760,7 @@ GURL DevToolsWindow::GetDevToolsURL(Profile* profile, ...@@ -755,8 +760,7 @@ GURL DevToolsWindow::GetDevToolsURL(Profile* profile,
const GURL& base_url, const GURL& base_url,
bool shared_worker_frontend, bool shared_worker_frontend,
bool external_frontend, bool external_frontend,
bool can_dock, bool can_dock) {
const std::string& settings) {
// Compatibility errors are encoded with data urls, pass them // Compatibility errors are encoded with data urls, pass them
// through with no decoration. // through with no decoration.
if (base_url.SchemeIs("data")) if (base_url.SchemeIs("data"))
...@@ -773,8 +777,6 @@ GURL DevToolsWindow::GetDevToolsURL(Profile* profile, ...@@ -773,8 +777,6 @@ GURL DevToolsWindow::GetDevToolsURL(Profile* profile,
url_string += "&remoteFrontend=true"; url_string += "&remoteFrontend=true";
if (can_dock) if (can_dock)
url_string += "&can_dock=true"; url_string += "&can_dock=true";
if (settings.size())
url_string += "&settings=" + settings;
return GURL(url_string); return GURL(url_string);
} }
...@@ -1028,8 +1030,27 @@ void DevToolsWindow::MoveWindow(int x, int y) { ...@@ -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) { void DevToolsWindow::SetIsDocked(bool dock_requested) {
if (life_stage_ == kClosing) if (ignore_set_is_docked_ || life_stage_ == kClosing)
return; return;
DCHECK(can_dock_ || !dock_requested); DCHECK(can_dock_ || !dock_requested);
...@@ -1240,7 +1261,7 @@ void DevToolsWindow::LoadCompleted() { ...@@ -1240,7 +1261,7 @@ void DevToolsWindow::LoadCompleted() {
} }
void DevToolsWindow::SetLoadCompletedCallback(const base::Closure& closure) { void DevToolsWindow::SetLoadCompletedCallback(const base::Closure& closure) {
if (life_stage_ == kLoadCompleted || life_stage_ == kClosing) { if (life_stage_ == kLoadCompleted) {
if (!closure.is_null()) if (!closure.is_null())
closure.Run(); closure.Run();
return; return;
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
class Browser; class Browser;
class BrowserWindow; class BrowserWindow;
class DevToolsWindowTesting;
class DevToolsEventForwarder; class DevToolsEventForwarder;
namespace content { namespace content {
...@@ -72,6 +71,11 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate, ...@@ -72,6 +71,11 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate,
static DevToolsWindow* OpenDevToolsWindow( static DevToolsWindow* OpenDevToolsWindow(
content::RenderViewHost* inspected_rvh); 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|. // Perform specified action for current WebContents inside a |browser|.
// This may close currently open DevTools window. // This may close currently open DevTools window.
static DevToolsWindow* ToggleDevToolsWindow( static DevToolsWindow* ToggleDevToolsWindow(
...@@ -92,6 +96,9 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate, ...@@ -92,6 +96,9 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate,
static void InspectElement( static void InspectElement(
content::RenderViewHost* inspected_rvh, int x, int y); 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 // Sets closure to be called after load is done. If already loaded, calls
// closure immediately. // closure immediately.
void SetLoadCompletedCallback(const base::Closure& closure); void SetLoadCompletedCallback(const base::Closure& closure);
...@@ -174,7 +181,8 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate, ...@@ -174,7 +181,8 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate,
static void OnPageCloseCanceled(content::WebContents* contents); static void OnPageCloseCanceled(content::WebContents* contents);
private: private:
friend class DevToolsWindowTesting; friend class DevToolsSanityTest;
friend class BrowserWindowControllerTest;
// DevTools lifecycle typically follows this way: // DevTools lifecycle typically follows this way:
// - Toggle/Open: client call; // - Toggle/Open: client call;
...@@ -207,22 +215,19 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate, ...@@ -207,22 +215,19 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate,
content::RenderViewHost* inspected_rvh, content::RenderViewHost* inspected_rvh,
bool shared_worker_frontend, bool shared_worker_frontend,
bool external_frontend, bool external_frontend,
bool can_dock, bool can_dock);
const std::string& settings);
static GURL GetDevToolsURL(Profile* profile, static GURL GetDevToolsURL(Profile* profile,
const GURL& base_url, const GURL& base_url,
bool shared_worker_frontend, bool shared_worker_frontend,
bool external_frontend, bool external_frontend,
bool can_dock, bool can_dock);
const std::string& settings);
static DevToolsWindow* FindDevToolsWindow(content::DevToolsAgentHost*); static DevToolsWindow* FindDevToolsWindow(content::DevToolsAgentHost*);
static DevToolsWindow* AsDevToolsWindow(content::WebContents*); static DevToolsWindow* AsDevToolsWindow(content::WebContents*);
static DevToolsWindow* CreateDevToolsWindowForWorker(Profile* profile); static DevToolsWindow* CreateDevToolsWindowForWorker(Profile* profile);
static DevToolsWindow* ToggleDevToolsWindow( static DevToolsWindow* ToggleDevToolsWindow(
content::RenderViewHost* inspected_rvh, content::RenderViewHost* inspected_rvh,
bool force_open, bool force_open,
const DevToolsToggleAction& action, const DevToolsToggleAction& action);
const std::string& settings);
static std::string GetDevToolsWindowPlacementPrefKey(); static std::string GetDevToolsWindowPlacementPrefKey();
...@@ -290,6 +295,7 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate, ...@@ -290,6 +295,7 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate,
void Show(const DevToolsToggleAction& action); void Show(const DevToolsToggleAction& action);
void DoAction(const DevToolsToggleAction& action); void DoAction(const DevToolsToggleAction& action);
void LoadCompleted(); void LoadCompleted();
void SetIsDockedAndShowImmediatelyForTest(bool is_docked);
void UpdateBrowserToolbar(); void UpdateBrowserToolbar();
void UpdateBrowserWindow(); void UpdateBrowserWindow();
content::WebContents* GetInspectedWebContents(); content::WebContents* GetInspectedWebContents();
...@@ -305,12 +311,12 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate, ...@@ -305,12 +311,12 @@ class DevToolsWindow : public DevToolsUIBindings::Delegate,
const bool can_dock_; const bool can_dock_;
LifeStage life_stage_; LifeStage life_stage_;
DevToolsToggleAction action_on_load_; DevToolsToggleAction action_on_load_;
bool ignore_set_is_docked_;
DevToolsContentsResizingStrategy contents_resizing_strategy_; DevToolsContentsResizingStrategy contents_resizing_strategy_;
// True if we're in the process of handling a beforeunload event originating // True if we're in the process of handling a beforeunload event originating
// from the inspected webcontents, see InterceptPageBeforeUnload for details. // from the inspected webcontents, see InterceptPageBeforeUnload for details.
bool intercepted_page_beforeunload_; bool intercepted_page_beforeunload_;
base::Closure load_completed_callback_; base::Closure load_completed_callback_;
base::Closure close_callback_;
base::TimeTicks inspect_element_start_time_; base::TimeTicks inspect_element_start_time_;
scoped_ptr<DevToolsEventForwarder> event_forwarder_; scoped_ptr<DevToolsEventForwarder> event_forwarder_;
......
// 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();
}
// 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_
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/content_settings/tab_specific_content_settings.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/download/download_prefs.h"
#include "chrome/browser/extensions/api/messaging/native_message_process_host.h" #include "chrome/browser/extensions/api/messaging/native_message_process_host.h"
#include "chrome/browser/extensions/crx_installer.h" #include "chrome/browser/extensions/crx_installer.h"
...@@ -1411,7 +1411,7 @@ IN_PROC_BROWSER_TEST_F(PolicyTest, DeveloperToolsDisabled) { ...@@ -1411,7 +1411,7 @@ IN_PROC_BROWSER_TEST_F(PolicyTest, DeveloperToolsDisabled) {
content::WindowedNotificationObserver close_observer( content::WindowedNotificationObserver close_observer(
content::NOTIFICATION_WEB_CONTENTS_DESTROYED, content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
content::Source<content::WebContents>( content::Source<content::WebContents>(
DevToolsWindowTesting::Get(devtools_window)->main_web_contents())); devtools_window->web_contents_for_test()));
UpdateProviderPolicy(policies); UpdateProviderPolicy(policies);
// wait for devtools close // wait for devtools close
close_observer.Wait(); close_observer.Wait();
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.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_browsertest.h"
#include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/infobars/infobar_service.h" #include "chrome/browser/infobars/infobar_service.h"
...@@ -731,37 +731,38 @@ IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsNewDockedWindow) { ...@@ -731,37 +731,38 @@ IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsNewDockedWindow) {
ShowTaskManager(); // Task manager shown BEFORE dev tools window. ShowTaskManager(); // Task manager shown BEFORE dev tools window.
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchAnyTab())); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchAnyTab()));
DevToolsWindow* devtools = DevToolsWindow::OpenDevToolsWindowForTest(
DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), true); browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(),
true);
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab())); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab()));
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab())); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab()));
DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
} }
IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsNewUndockedWindow) { IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsNewUndockedWindow) {
ShowTaskManager(); // Task manager shown BEFORE dev tools window. ShowTaskManager(); // Task manager shown BEFORE dev tools window.
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchAnyTab())); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, MatchAnyTab()));
DevToolsWindow* devtools = DevToolsWindow::OpenDevToolsWindowForTest(
DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), false); browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(),
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(3, MatchAnyTab())); false);
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(3, MatchAnyTab())); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab()));
DevToolsWindowTesting::CloseDevToolsWindowSync(devtools); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab()));
} }
IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsOldDockedWindow) { IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsOldDockedWindow) {
DevToolsWindow* devtools = DevToolsWindow::OpenDevToolsWindowForTest(
DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), true); browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(),
true);
ShowTaskManager(); // Task manager shown AFTER dev tools window. ShowTaskManager(); // Task manager shown AFTER dev tools window.
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab())); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab()));
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab())); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab()));
DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
} }
IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsOldUnockedWindow) { IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DevToolsOldUnockedWindow) {
DevToolsWindow* devtools = DevToolsWindow::OpenDevToolsWindowForTest(
DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), false); browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(),
false);
ShowTaskManager(); // Task manager shown AFTER dev tools window. ShowTaskManager(); // Task manager shown AFTER dev tools window.
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(3, MatchAnyTab())); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab()));
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(3, MatchAnyTab())); ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(2, MatchAnyTab()));
DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
} }
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include "chrome/browser/command_updater.h" #include "chrome/browser/command_updater.h"
#include "chrome/browser/content_settings/host_content_settings_map.h" #include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/defaults.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_browsertest.h"
#include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/tab_helper.h" #include "chrome/browser/extensions/tab_helper.h"
...@@ -1374,7 +1374,9 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, ShouldShowLocationBar) { ...@@ -1374,7 +1374,9 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, ShouldShowLocationBar) {
NEW_WINDOW)); NEW_WINDOW));
ASSERT_TRUE(app_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. // The launch should have created a new app browser and a dev tools browser.
ASSERT_EQ(3u, ASSERT_EQ(3u,
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chrome/browser/browser_process.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/infobar_service.h"
#include "chrome/browser/infobars/simple_alert_infobar_delegate.h" #include "chrome/browser/infobars/simple_alert_infobar_delegate.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
...@@ -134,6 +134,11 @@ class BrowserWindowControllerTest : public InProcessBrowserTest { ...@@ -134,6 +134,11 @@ class BrowserWindowControllerTest : public InProcessBrowserTest {
return height; return height;
} }
void SetDevToolsWindowContentsBounds(
DevToolsWindow* window, const gfx::Rect& bounds) {
window->SetInspectedPageBounds(bounds);
}
private: private:
DISALLOW_COPY_AND_ASSIGN(BrowserWindowControllerTest); DISALLOW_COPY_AND_ASSIGN(BrowserWindowControllerTest);
}; };
...@@ -361,10 +366,9 @@ IN_PROC_BROWSER_TEST_F(BrowserWindowControllerTest, ...@@ -361,10 +366,9 @@ IN_PROC_BROWSER_TEST_F(BrowserWindowControllerTest,
StatusBubblePositioning) { StatusBubblePositioning) {
NSPoint origin = [controller() statusBubbleBaseFrame].origin; NSPoint origin = [controller() statusBubbleBaseFrame].origin;
DevToolsWindow* devtools_window = DevToolsWindow* devtools_window = DevToolsWindow::OpenDevToolsWindowForTest(
DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), true); browser(), true);
DevToolsWindowTesting::Get(devtools_window)->SetInspectedPageBounds( SetDevToolsWindowContentsBounds(devtools_window, gfx::Rect(10, 10, 100, 100));
gfx::Rect(10, 10, 100, 100));
NSPoint originWithDevTools = [controller() statusBubbleBaseFrame].origin; NSPoint originWithDevTools = [controller() statusBubbleBaseFrame].origin;
EXPECT_FALSE(NSEqualPoints(origin, originWithDevTools)); EXPECT_FALSE(NSEqualPoints(origin, originWithDevTools));
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#import "chrome/browser/ui/cocoa/dev_tools_controller.h" #import "chrome/browser/ui/cocoa/dev_tools_controller.h"
#include "chrome/browser/devtools/devtools_window.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.h"
#include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/browser_window.h"
...@@ -25,11 +24,17 @@ class DevToolsControllerTest : public InProcessBrowserTest { ...@@ -25,11 +24,17 @@ class DevToolsControllerTest : public InProcessBrowserTest {
protected: protected:
void OpenDevToolsWindow() { void OpenDevToolsWindow() {
devtools_window_ = devtools_window_ =
DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), true); DevToolsWindow::OpenDevToolsWindowForTest(browser(), true);
} }
void CloseDevToolsWindow() { 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() { content::WebContents* web_contents() {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
#include "base/prefs/pref_service.h" #include "base/prefs/pref_service.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chrome/browser/bookmarks/bookmark_model_factory.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/download/download_shelf.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
...@@ -47,7 +47,7 @@ class ViewIDTest : public InProcessBrowserTest { ...@@ -47,7 +47,7 @@ class ViewIDTest : public InProcessBrowserTest {
chrome::ShowFindBar(browser()); chrome::ShowFindBar(browser());
// Make sure docked devtools is created to test VIEW_ID_DEV_TOOLS_DOCKED // 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 // Make sure download shelf is created to test VIEW_ID_DOWNLOAD_SHELF
browser()->window()->GetDownloadShelf()->Show(); browser()->window()->GetDownloadShelf()->Show();
......
...@@ -1019,8 +1019,6 @@ ...@@ -1019,8 +1019,6 @@
'browser/devtools/device/adb/mock_adb_server.h', 'browser/devtools/device/adb/mock_adb_server.h',
'browser/devtools/device/port_forwarding_browsertest.cc', 'browser/devtools/device/port_forwarding_browsertest.cc',
'browser/devtools/device/usb/android_usb_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/devtools/devtools_sanity_browsertest.cc',
'browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc', 'browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc',
'browser/dom_distiller/tab_utils_browsertest.cc', 'browser/dom_distiller/tab_utils_browsertest.cc',
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.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/extensions/extension_action.h"
#include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
...@@ -267,6 +268,13 @@ void NavigateToURLBlockUntilNavigationsComplete(Browser* browser, ...@@ -267,6 +268,13 @@ void NavigateToURLBlockUntilNavigationsComplete(Browser* browser,
BROWSER_TEST_WAIT_FOR_NAVIGATION); 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, base::FilePath GetTestFilePath(const base::FilePath& dir,
const base::FilePath& file) { const base::FilePath& file) {
base::FilePath path; base::FilePath path;
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
class AppModalDialog; class AppModalDialog;
class Browser; class Browser;
class DevToolsWindow;
class LocationBar; class LocationBar;
class Profile; class Profile;
class SkBitmap; class SkBitmap;
...@@ -110,6 +111,9 @@ void NavigateToURLBlockUntilNavigationsComplete(Browser* browser, ...@@ -110,6 +111,9 @@ void NavigateToURLBlockUntilNavigationsComplete(Browser* browser,
const GURL& url, const GURL& url,
int number_of_navigations); int number_of_navigations);
// Blocks until DevTools window is loaded.
void WaitUntilDevToolsWindowLoaded(DevToolsWindow* window);
// Generate the file path for testing a particular test. // Generate the file path for testing a particular test.
// The file for the tests is all located in // The file for the tests is all located in
// test_root_directory/dir/<file> // test_root_directory/dir/<file>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment