diff options
author | dgozman@chromium.org <dgozman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-08 22:46:19 +0000 |
---|---|---|
committer | dgozman@chromium.org <dgozman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-08 22:47:50 +0000 |
commit | d3607a09b3587fe43705b932c99193fbc951c1e8 (patch) | |
tree | f1e2404e9e151fa2ff88f5f434c6a3277d637e56 /content/browser/devtools/devtools_manager_unittest.cc | |
parent | ed50a2fd22c824e01ba754b91f81cbdbbc3c7f10 (diff) | |
download | chromium_src-d3607a09b3587fe43705b932c99193fbc951c1e8.zip chromium_src-d3607a09b3587fe43705b932c99193fbc951c1e8.tar.gz chromium_src-d3607a09b3587fe43705b932c99193fbc951c1e8.tar.bz2 |
[DevTools] Make DevTools clients talk directly to DevToolsAgentHost instead of using DevToolsManager.
Previously, client used methods on DevToolsManager passing |this| to most of them.
Instead, it should hold a scoped_refptr to inspected DevToolsAgentHost and talk
to it directly. This creates a single clean entry point for the client, and allows
in the future to handle browser-wide protocol messages and debug multiple hosts at once.
BUG=401073
TBR=kalman@chromium.org
Review URL: https://codereview.chromium.org/449043002
Cr-Commit-Position: refs/heads/master@{#288452}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@288452 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/devtools/devtools_manager_unittest.cc')
-rw-r--r-- | content/browser/devtools/devtools_manager_unittest.cc | 78 |
1 files changed, 29 insertions, 49 deletions
diff --git a/content/browser/devtools/devtools_manager_unittest.cc b/content/browser/devtools/devtools_manager_unittest.cc index 79b7654..588e530 100644 --- a/content/browser/devtools/devtools_manager_unittest.cc +++ b/content/browser/devtools/devtools_manager_unittest.cc @@ -10,7 +10,6 @@ #include "content/common/view_messages.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/devtools_agent_host.h" -#include "content/public/browser/devtools_client_host.h" #include "content/public/browser/devtools_external_agent_proxy.h" #include "content/public/browser/devtools_external_agent_proxy_delegate.h" #include "content/public/browser/web_contents_delegate.h" @@ -24,7 +23,7 @@ using base::TimeDelta; namespace content { namespace { -class TestDevToolsClientHost : public DevToolsClientHost { +class TestDevToolsClientHost : public DevToolsAgentHostClient { public: TestDevToolsClientHost() : last_sent_message(NULL), @@ -35,24 +34,30 @@ class TestDevToolsClientHost : public DevToolsClientHost { EXPECT_TRUE(closed_); } - virtual void Close(DevToolsManager* manager) { + void Close() { EXPECT_FALSE(closed_); close_counter++; - manager->ClientHostClosing(this); + agent_host_->DetachClient(); closed_ = true; } - virtual void InspectedContentsClosing() OVERRIDE { + + virtual void AgentHostClosed( + DevToolsAgentHost* agent_host, bool replaced) OVERRIDE { FAIL(); } - virtual void DispatchOnInspectorFrontend( - const std::string& message) OVERRIDE { + virtual void DispatchProtocolMessage( + DevToolsAgentHost* agent_host, const std::string& message) OVERRIDE { last_sent_message = &message; } - virtual void ReplacedWithAnotherClient() OVERRIDE { + void InspectAgentHost(DevToolsAgentHost* agent_host) { + agent_host_ = agent_host; + agent_host_->AttachClient(this); } + DevToolsAgentHost* agent_host() { return agent_host_.get(); } + static void ResetCounters() { close_counter = 0; } @@ -63,6 +68,7 @@ class TestDevToolsClientHost : public DevToolsClientHost { private: bool closed_; + scoped_refptr<DevToolsAgentHost> agent_host_; DISALLOW_COPY_AND_ASSIGN(TestDevToolsClientHost); }; @@ -98,42 +104,21 @@ class DevToolsManagerTest : public RenderViewHostImplTestHarness { }; TEST_F(DevToolsManagerTest, OpenAndManuallyCloseDevToolsClientHost) { - DevToolsManager* manager = DevToolsManager::GetInstance(); - scoped_refptr<DevToolsAgentHost> agent( DevToolsAgentHost::GetOrCreateFor(web_contents())); EXPECT_FALSE(agent->IsAttached()); TestDevToolsClientHost client_host; - manager->RegisterDevToolsClientHostFor(agent.get(), &client_host); + client_host.InspectAgentHost(agent.get()); // Test that the connection is established. EXPECT_TRUE(agent->IsAttached()); - EXPECT_EQ(agent, manager->GetDevToolsAgentHostFor(&client_host)); EXPECT_EQ(0, TestDevToolsClientHost::close_counter); - client_host.Close(manager); + client_host.Close(); EXPECT_EQ(1, TestDevToolsClientHost::close_counter); EXPECT_FALSE(agent->IsAttached()); } -TEST_F(DevToolsManagerTest, ForwardMessageToClient) { - DevToolsManagerImpl* manager = DevToolsManagerImpl::GetInstance(); - - TestDevToolsClientHost client_host; - scoped_refptr<DevToolsAgentHost> agent_host( - DevToolsAgentHost::GetOrCreateFor(web_contents())); - manager->RegisterDevToolsClientHostFor(agent_host.get(), &client_host); - EXPECT_EQ(0, TestDevToolsClientHost::close_counter); - - std::string m = "test message"; - agent_host = DevToolsAgentHost::GetOrCreateFor(web_contents()); - manager->DispatchOnInspectorFrontend(agent_host.get(), m); - EXPECT_TRUE(&m == client_host.last_sent_message); - - client_host.Close(manager); - EXPECT_EQ(1, TestDevToolsClientHost::close_counter); -} - TEST_F(DevToolsManagerTest, NoUnresponsiveDialogInInspectedContents) { TestRenderViewHost* inspected_rvh = test_rvh(); inspected_rvh->set_render_view_created(true); @@ -144,8 +129,7 @@ TEST_F(DevToolsManagerTest, NoUnresponsiveDialogInInspectedContents) { TestDevToolsClientHost client_host; scoped_refptr<DevToolsAgentHost> agent_host(DevToolsAgentHost::GetOrCreateFor( WebContents::FromRenderViewHost(inspected_rvh))); - DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor( - agent_host.get(), &client_host); + client_host.InspectAgentHost(agent_host.get()); // Start with a short timeout. inspected_rvh->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); @@ -158,7 +142,7 @@ TEST_F(DevToolsManagerTest, NoUnresponsiveDialogInInspectedContents) { EXPECT_FALSE(delegate.renderer_unresponsive_received()); // Now close devtools and check that the notification is delivered. - client_host.Close(DevToolsManager::GetInstance()); + client_host.Close(); // Start with a short timeout. inspected_rvh->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); // Wait long enough for first timeout and see if it fired. @@ -181,26 +165,25 @@ TEST_F(DevToolsManagerTest, ReattachOnCancelPendingNavigation) { EXPECT_FALSE(contents()->cross_navigation_pending()); TestDevToolsClientHost client_host; - DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); - devtools_manager->RegisterDevToolsClientHostFor( - DevToolsAgentHost::GetOrCreateFor(web_contents()).get(), &client_host); + client_host.InspectAgentHost( + DevToolsAgentHost::GetOrCreateFor(web_contents()).get()); // Navigate to new site which should get a new RenderViewHost. const GURL url2("http://www.yahoo.com"); controller().LoadURL( url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); EXPECT_TRUE(contents()->cross_navigation_pending()); - EXPECT_EQ(devtools_manager->GetDevToolsAgentHostFor(&client_host), - DevToolsAgentHost::GetOrCreateFor(web_contents())); + EXPECT_EQ(client_host.agent_host(), + DevToolsAgentHost::GetOrCreateFor(web_contents())); // Interrupt pending navigation and navigate back to the original site. controller().LoadURL( url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); contents()->TestDidNavigate(rvh(), 1, url, PAGE_TRANSITION_TYPED); EXPECT_FALSE(contents()->cross_navigation_pending()); - EXPECT_EQ(devtools_manager->GetDevToolsAgentHostFor(&client_host), + EXPECT_EQ(client_host.agent_host(), DevToolsAgentHost::GetOrCreateFor(web_contents())); - client_host.Close(DevToolsManager::GetInstance()); + client_host.Close(); } class TestExternalAgentDelegate: public DevToolsExternalAgentProxyDelegate { @@ -245,16 +228,13 @@ TEST_F(DevToolsManagerTest, TestExternalProxy) { DevToolsAgentHost::Create(delegate); EXPECT_EQ(agent_host, DevToolsAgentHost::GetForId(agent_host->GetId())); - DevToolsManager* manager = DevToolsManager::GetInstance(); - TestDevToolsClientHost client_host; - manager->RegisterDevToolsClientHostFor(agent_host.get(), &client_host); - - manager->DispatchOnInspectorBackend(&client_host, "message1"); - manager->DispatchOnInspectorBackend(&client_host, "message2"); - manager->DispatchOnInspectorBackend(&client_host, "message2"); + client_host.InspectAgentHost(agent_host.get()); + agent_host->DispatchProtocolMessage("message1"); + agent_host->DispatchProtocolMessage("message2"); + agent_host->DispatchProtocolMessage("message2"); - client_host.Close(manager); + client_host.Close(); } } // namespace content |