| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/time.h" | 6 #include "base/time.h" |
| 7 #include "content/browser/debugger/devtools_client_host.h" | 7 #include "content/browser/debugger/devtools_manager_impl.h" |
| 8 #include "content/browser/debugger/devtools_manager.h" | |
| 9 #include "content/browser/debugger/render_view_devtools_agent_host.h" | 8 #include "content/browser/debugger/render_view_devtools_agent_host.h" |
| 10 #include "content/browser/mock_content_browser_client.h" | 9 #include "content/browser/mock_content_browser_client.h" |
| 11 #include "content/browser/renderer_host/test_render_view_host.h" | 10 #include "content/browser/renderer_host/test_render_view_host.h" |
| 12 #include "content/browser/tab_contents/tab_contents_delegate.h" | 11 #include "content/browser/tab_contents/tab_contents_delegate.h" |
| 13 #include "content/browser/tab_contents/test_tab_contents.h" | 12 #include "content/browser/tab_contents/test_tab_contents.h" |
| 14 #include "content/common/view_messages.h" | 13 #include "content/common/view_messages.h" |
| 15 #include "content/public/browser/content_browser_client.h" | 14 #include "content/public/browser/content_browser_client.h" |
| 15 #include "content/public/browser/devtools/devtools_agent_host_registry.h" |
| 16 #include "content/public/browser/devtools/devtools_client_host.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 18 |
| 18 using base::TimeDelta; | 19 using base::TimeDelta; |
| 20 using content::DevToolsAgentHost; |
| 21 using content::DevToolsAgentHostRegistry; |
| 22 using content::DevToolsClientHost; |
| 23 using content::DevToolsManager; |
| 24 using content::DevToolsManagerImpl; |
| 19 | 25 |
| 20 namespace { | 26 namespace { |
| 21 | 27 |
| 22 class TestDevToolsClientHost : public DevToolsClientHost { | 28 class TestDevToolsClientHost : public DevToolsClientHost { |
| 23 public: | 29 public: |
| 24 TestDevToolsClientHost() | 30 TestDevToolsClientHost() |
| 25 : last_sent_message(NULL), | 31 : last_sent_message(NULL), |
| 26 closed_(false) { | 32 closed_(false) { |
| 27 } | 33 } |
| 28 | 34 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 private: | 91 private: |
| 86 bool renderer_unresponsive_received_; | 92 bool renderer_unresponsive_received_; |
| 87 }; | 93 }; |
| 88 | 94 |
| 89 class DevToolsManagerTestBrowserClient | 95 class DevToolsManagerTestBrowserClient |
| 90 : public content::MockContentBrowserClient { | 96 : public content::MockContentBrowserClient { |
| 91 public: | 97 public: |
| 92 DevToolsManagerTestBrowserClient() { | 98 DevToolsManagerTestBrowserClient() { |
| 93 } | 99 } |
| 94 | 100 |
| 95 virtual DevToolsManager* GetDevToolsManager() OVERRIDE { | |
| 96 return &dev_tools_manager_; | |
| 97 } | |
| 98 | |
| 99 virtual bool ShouldSwapProcessesForNavigation( | 101 virtual bool ShouldSwapProcessesForNavigation( |
| 100 const GURL& current_url, | 102 const GURL& current_url, |
| 101 const GURL& new_url) OVERRIDE { | 103 const GURL& new_url) OVERRIDE { |
| 102 return true; | 104 return true; |
| 103 } | 105 } |
| 104 | 106 |
| 105 private: | 107 private: |
| 106 DevToolsManager dev_tools_manager_; | |
| 107 | |
| 108 DISALLOW_COPY_AND_ASSIGN(DevToolsManagerTestBrowserClient); | 108 DISALLOW_COPY_AND_ASSIGN(DevToolsManagerTestBrowserClient); |
| 109 }; | 109 }; |
| 110 | 110 |
| 111 } // namespace | 111 } // namespace |
| 112 | 112 |
| 113 class DevToolsManagerTest : public RenderViewHostTestHarness { | 113 class DevToolsManagerTest : public RenderViewHostTestHarness { |
| 114 public: | 114 public: |
| 115 DevToolsManagerTest() : RenderViewHostTestHarness() { | 115 DevToolsManagerTest() : RenderViewHostTestHarness() { |
| 116 } | 116 } |
| 117 | 117 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 128 RenderViewHostTestHarness::TearDown(); | 128 RenderViewHostTestHarness::TearDown(); |
| 129 content::GetContentClient()->set_browser(original_browser_client_); | 129 content::GetContentClient()->set_browser(original_browser_client_); |
| 130 } | 130 } |
| 131 | 131 |
| 132 private: | 132 private: |
| 133 content::ContentBrowserClient* original_browser_client_; | 133 content::ContentBrowserClient* original_browser_client_; |
| 134 DevToolsManagerTestBrowserClient browser_client_; | 134 DevToolsManagerTestBrowserClient browser_client_; |
| 135 }; | 135 }; |
| 136 | 136 |
| 137 TEST_F(DevToolsManagerTest, OpenAndManuallyCloseDevToolsClientHost) { | 137 TEST_F(DevToolsManagerTest, OpenAndManuallyCloseDevToolsClientHost) { |
| 138 DevToolsManager manager; | 138 DevToolsManagerImpl manager; |
| 139 | 139 |
| 140 DevToolsClientHost* host = manager.GetDevToolsClientHostFor(rvh()); | 140 DevToolsAgentHost* agent = |
| 141 DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh()); |
| 142 DevToolsClientHost* host = manager.GetDevToolsClientHostFor(agent); |
| 141 EXPECT_TRUE(NULL == host); | 143 EXPECT_TRUE(NULL == host); |
| 142 | 144 |
| 143 TestDevToolsClientHost client_host; | 145 TestDevToolsClientHost client_host; |
| 144 manager.RegisterDevToolsClientHostFor(rvh(), &client_host); | 146 manager.RegisterDevToolsClientHostFor(agent, &client_host); |
| 145 // Test that just registered devtools host is returned. | 147 // Test that just registered devtools host is returned. |
| 146 host = manager.GetDevToolsClientHostFor(rvh()); | 148 host = manager.GetDevToolsClientHostFor(agent); |
| 147 EXPECT_TRUE(&client_host == host); | 149 EXPECT_TRUE(&client_host == host); |
| 148 EXPECT_EQ(0, TestDevToolsClientHost::close_counter); | 150 EXPECT_EQ(0, TestDevToolsClientHost::close_counter); |
| 149 | 151 |
| 150 // Test that the same devtools host is returned. | 152 // Test that the same devtools host is returned. |
| 151 host = manager.GetDevToolsClientHostFor(rvh()); | 153 host = manager.GetDevToolsClientHostFor(agent); |
| 152 EXPECT_TRUE(&client_host == host); | 154 EXPECT_TRUE(&client_host == host); |
| 153 EXPECT_EQ(0, TestDevToolsClientHost::close_counter); | 155 EXPECT_EQ(0, TestDevToolsClientHost::close_counter); |
| 154 | 156 |
| 155 client_host.Close(); | 157 client_host.Close(); |
| 156 EXPECT_EQ(1, TestDevToolsClientHost::close_counter); | 158 EXPECT_EQ(1, TestDevToolsClientHost::close_counter); |
| 157 host = manager.GetDevToolsClientHostFor(rvh()); | 159 host = manager.GetDevToolsClientHostFor(agent); |
| 158 EXPECT_TRUE(NULL == host); | 160 EXPECT_TRUE(NULL == host); |
| 159 } | 161 } |
| 160 | 162 |
| 161 TEST_F(DevToolsManagerTest, ForwardMessageToClient) { | 163 TEST_F(DevToolsManagerTest, ForwardMessageToClient) { |
| 162 DevToolsManager manager; | 164 DevToolsManagerImpl manager; |
| 163 | 165 |
| 164 TestDevToolsClientHost client_host; | 166 TestDevToolsClientHost client_host; |
| 165 manager.RegisterDevToolsClientHostFor(rvh(), &client_host); | 167 DevToolsAgentHost* agent_host = |
| 168 DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh()); |
| 169 manager.RegisterDevToolsClientHostFor(agent_host, &client_host); |
| 166 EXPECT_EQ(0, TestDevToolsClientHost::close_counter); | 170 EXPECT_EQ(0, TestDevToolsClientHost::close_counter); |
| 167 | 171 |
| 168 IPC::Message m; | 172 IPC::Message m; |
| 169 DevToolsAgentHost* agent_host = RenderViewDevToolsAgentHost::FindFor(rvh()); | 173 agent_host = DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh()); |
| 170 manager.ForwardToDevToolsClient(agent_host, m); | 174 manager.ForwardToDevToolsClient(agent_host, m); |
| 171 EXPECT_TRUE(&m == client_host.last_sent_message); | 175 EXPECT_TRUE(&m == client_host.last_sent_message); |
| 172 | 176 |
| 173 client_host.Close(); | 177 client_host.Close(); |
| 174 EXPECT_EQ(1, TestDevToolsClientHost::close_counter); | 178 EXPECT_EQ(1, TestDevToolsClientHost::close_counter); |
| 175 } | 179 } |
| 176 | 180 |
| 177 TEST_F(DevToolsManagerTest, NoUnresponsiveDialogInInspectedTab) { | 181 TEST_F(DevToolsManagerTest, NoUnresponsiveDialogInInspectedTab) { |
| 178 TestRenderViewHost* inspected_rvh = rvh(); | 182 TestRenderViewHost* inspected_rvh = rvh(); |
| 179 inspected_rvh->set_render_view_created(true); | 183 inspected_rvh->set_render_view_created(true); |
| 180 EXPECT_FALSE(contents()->delegate()); | 184 EXPECT_FALSE(contents()->delegate()); |
| 181 TestTabContentsDelegate delegate; | 185 TestTabContentsDelegate delegate; |
| 182 contents()->set_delegate(&delegate); | 186 contents()->set_delegate(&delegate); |
| 183 | 187 |
| 184 TestDevToolsClientHost client_host; | 188 TestDevToolsClientHost client_host; |
| 185 content::GetContentClient()->browser()->GetDevToolsManager()-> | 189 DevToolsAgentHost* agent_host = |
| 186 RegisterDevToolsClientHostFor(inspected_rvh, &client_host); | 190 DevToolsAgentHostRegistry::GetDevToolsAgentHost(inspected_rvh); |
| 191 DevToolsManager::GetInstance()-> |
| 192 RegisterDevToolsClientHostFor(agent_host, &client_host); |
| 187 | 193 |
| 188 // Start with a short timeout. | 194 // Start with a short timeout. |
| 189 inspected_rvh->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); | 195 inspected_rvh->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); |
| 190 // Wait long enough for first timeout and see if it fired. | 196 // Wait long enough for first timeout and see if it fired. |
| 191 MessageLoop::current()->PostDelayedTask(FROM_HERE, | 197 MessageLoop::current()->PostDelayedTask(FROM_HERE, |
| 192 new MessageLoop::QuitTask(), 10); | 198 new MessageLoop::QuitTask(), 10); |
| 193 MessageLoop::current()->Run(); | 199 MessageLoop::current()->Run(); |
| 194 EXPECT_FALSE(delegate.renderer_unresponsive_received()); | 200 EXPECT_FALSE(delegate.renderer_unresponsive_received()); |
| 195 | 201 |
| 196 // Now close devtools and check that the notification is delivered. | 202 // Now close devtools and check that the notification is delivered. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 213 controller().LoadURL( | 219 controller().LoadURL( |
| 214 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); | 220 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); |
| 215 ViewHostMsg_FrameNavigate_Params params1; | 221 ViewHostMsg_FrameNavigate_Params params1; |
| 216 InitNavigateParams(¶ms1, 1, url, content::PAGE_TRANSITION_TYPED); | 222 InitNavigateParams(¶ms1, 1, url, content::PAGE_TRANSITION_TYPED); |
| 217 TestRenderViewHost* orig_rvh = rvh(); | 223 TestRenderViewHost* orig_rvh = rvh(); |
| 218 contents()->TestDidNavigate(orig_rvh, params1); | 224 contents()->TestDidNavigate(orig_rvh, params1); |
| 219 EXPECT_FALSE(contents()->cross_navigation_pending()); | 225 EXPECT_FALSE(contents()->cross_navigation_pending()); |
| 220 | 226 |
| 221 TestDevToolsClientHost client_host; | 227 TestDevToolsClientHost client_host; |
| 222 DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); | 228 DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); |
| 223 devtools_manager->RegisterDevToolsClientHostFor(rvh(), &client_host); | 229 devtools_manager->RegisterDevToolsClientHostFor( |
| 230 DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh()), |
| 231 &client_host); |
| 224 | 232 |
| 225 // Navigate to new site which should get a new RenderViewHost. | 233 // Navigate to new site which should get a new RenderViewHost. |
| 226 const GURL url2("http://www.yahoo.com"); | 234 const GURL url2("http://www.yahoo.com"); |
| 227 controller().LoadURL( | 235 controller().LoadURL( |
| 228 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); | 236 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); |
| 229 EXPECT_TRUE(contents()->cross_navigation_pending()); | 237 EXPECT_TRUE(contents()->cross_navigation_pending()); |
| 230 EXPECT_EQ(&client_host, | 238 EXPECT_EQ(&client_host, devtools_manager->GetDevToolsClientHostFor( |
| 231 devtools_manager->GetDevToolsClientHostFor(pending_rvh())); | 239 DevToolsAgentHostRegistry::GetDevToolsAgentHost(pending_rvh()))); |
| 232 | 240 |
| 233 // Interrupt pending navigation and navigate back to the original site. | 241 // Interrupt pending navigation and navigate back to the original site. |
| 234 controller().LoadURL( | 242 controller().LoadURL( |
| 235 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); | 243 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); |
| 236 contents()->TestDidNavigate(orig_rvh, params1); | 244 contents()->TestDidNavigate(orig_rvh, params1); |
| 237 EXPECT_FALSE(contents()->cross_navigation_pending()); | 245 EXPECT_FALSE(contents()->cross_navigation_pending()); |
| 238 EXPECT_EQ(&client_host, devtools_manager->GetDevToolsClientHostFor(rvh())); | 246 EXPECT_EQ(&client_host, devtools_manager->GetDevToolsClientHostFor( |
| 247 DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh()))); |
| 239 client_host.Close(); | 248 client_host.Close(); |
| 240 } | 249 } |
| OLD | NEW |