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_agent_host_registry.h" |
| 16 #include "content/public/browser/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 |
29 virtual ~TestDevToolsClientHost() { | 35 virtual ~TestDevToolsClientHost() { |
30 EXPECT_TRUE(closed_); | 36 EXPECT_TRUE(closed_); |
31 } | 37 } |
32 | 38 |
33 virtual void Close() { | 39 virtual void Close(DevToolsManager* manager) { |
34 EXPECT_FALSE(closed_); | 40 EXPECT_FALSE(closed_); |
35 close_counter++; | 41 close_counter++; |
36 NotifyCloseListener(); | 42 manager->ClientHostClosing(this); |
37 closed_ = true; | 43 closed_ = true; |
38 } | 44 } |
39 virtual void InspectedTabClosing() { | 45 virtual void InspectedTabClosing() { |
40 Close(); | 46 FAIL(); |
41 } | 47 } |
42 | 48 |
43 virtual void SetInspectedTabUrl(const std::string& url) { | 49 virtual void SetInspectedTabUrl(const std::string& url) { |
44 } | 50 } |
45 | 51 |
46 virtual void SendMessageToClient(const IPC::Message& message) { | 52 virtual void DispatchOnInspectorFrontend(const std::string& message) { |
47 last_sent_message = &message; | 53 last_sent_message = &message; |
48 } | 54 } |
49 | 55 |
50 virtual void TabReplaced(TabContents* new_tab) { | 56 virtual void TabReplaced(TabContents* new_tab) { |
51 } | 57 } |
52 | 58 |
53 static void ResetCounters() { | 59 static void ResetCounters() { |
54 close_counter = 0; | 60 close_counter = 0; |
55 } | 61 } |
56 | 62 |
57 static int close_counter; | 63 static int close_counter; |
58 | 64 |
59 const IPC::Message* last_sent_message; | 65 const std::string* last_sent_message; |
60 | 66 |
61 private: | 67 private: |
62 bool closed_; | 68 bool closed_; |
63 | 69 |
64 virtual void FrameNavigating(const std::string& url) {} | 70 virtual void FrameNavigating(const std::string& url) {} |
65 | 71 |
66 DISALLOW_COPY_AND_ASSIGN(TestDevToolsClientHost); | 72 DISALLOW_COPY_AND_ASSIGN(TestDevToolsClientHost); |
67 }; | 73 }; |
68 | 74 |
69 int TestDevToolsClientHost::close_counter = 0; | 75 int TestDevToolsClientHost::close_counter = 0; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 RenderViewHostTestHarness::TearDown(); | 128 RenderViewHostTestHarness::TearDown(); |
123 content::GetContentClient()->set_browser(original_browser_client_); | 129 content::GetContentClient()->set_browser(original_browser_client_); |
124 } | 130 } |
125 | 131 |
126 private: | 132 private: |
127 content::ContentBrowserClient* original_browser_client_; | 133 content::ContentBrowserClient* original_browser_client_; |
128 DevToolsManagerTestBrowserClient browser_client_; | 134 DevToolsManagerTestBrowserClient browser_client_; |
129 }; | 135 }; |
130 | 136 |
131 TEST_F(DevToolsManagerTest, OpenAndManuallyCloseDevToolsClientHost) { | 137 TEST_F(DevToolsManagerTest, OpenAndManuallyCloseDevToolsClientHost) { |
132 DevToolsManager manager; | 138 DevToolsManagerImpl manager; |
133 | 139 |
134 DevToolsClientHost* host = manager.GetDevToolsClientHostFor(rvh()); | 140 DevToolsAgentHost* agent = |
| 141 DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh()); |
| 142 DevToolsClientHost* host = manager.GetDevToolsClientHostFor(agent); |
135 EXPECT_TRUE(NULL == host); | 143 EXPECT_TRUE(NULL == host); |
136 | 144 |
137 TestDevToolsClientHost client_host; | 145 TestDevToolsClientHost client_host; |
138 manager.RegisterDevToolsClientHostFor(rvh(), &client_host); | 146 manager.RegisterDevToolsClientHostFor(agent, &client_host); |
139 // Test that just registered devtools host is returned. | 147 // Test that just registered devtools host is returned. |
140 host = manager.GetDevToolsClientHostFor(rvh()); | 148 host = manager.GetDevToolsClientHostFor(agent); |
141 EXPECT_TRUE(&client_host == host); | 149 EXPECT_TRUE(&client_host == host); |
142 EXPECT_EQ(0, TestDevToolsClientHost::close_counter); | 150 EXPECT_EQ(0, TestDevToolsClientHost::close_counter); |
143 | 151 |
144 // Test that the same devtools host is returned. | 152 // Test that the same devtools host is returned. |
145 host = manager.GetDevToolsClientHostFor(rvh()); | 153 host = manager.GetDevToolsClientHostFor(agent); |
146 EXPECT_TRUE(&client_host == host); | 154 EXPECT_TRUE(&client_host == host); |
147 EXPECT_EQ(0, TestDevToolsClientHost::close_counter); | 155 EXPECT_EQ(0, TestDevToolsClientHost::close_counter); |
148 | 156 |
149 client_host.Close(); | 157 client_host.Close(&manager); |
150 EXPECT_EQ(1, TestDevToolsClientHost::close_counter); | 158 EXPECT_EQ(1, TestDevToolsClientHost::close_counter); |
151 host = manager.GetDevToolsClientHostFor(rvh()); | 159 host = manager.GetDevToolsClientHostFor(agent); |
152 EXPECT_TRUE(NULL == host); | 160 EXPECT_TRUE(NULL == host); |
153 } | 161 } |
154 | 162 |
155 TEST_F(DevToolsManagerTest, ForwardMessageToClient) { | 163 TEST_F(DevToolsManagerTest, ForwardMessageToClient) { |
156 DevToolsManager manager; | 164 DevToolsManagerImpl manager; |
157 | 165 |
158 TestDevToolsClientHost client_host; | 166 TestDevToolsClientHost client_host; |
159 manager.RegisterDevToolsClientHostFor(rvh(), &client_host); | 167 DevToolsAgentHost* agent_host = |
| 168 DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh()); |
| 169 manager.RegisterDevToolsClientHostFor(agent_host, &client_host); |
160 EXPECT_EQ(0, TestDevToolsClientHost::close_counter); | 170 EXPECT_EQ(0, TestDevToolsClientHost::close_counter); |
161 | 171 |
162 IPC::Message m; | 172 std::string m = "test message"; |
163 DevToolsAgentHost* agent_host = RenderViewDevToolsAgentHost::FindFor(rvh()); | 173 agent_host = DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh()); |
164 manager.ForwardToDevToolsClient(agent_host, m); | 174 manager.DispatchOnInspectorFrontend(agent_host, m); |
165 EXPECT_TRUE(&m == client_host.last_sent_message); | 175 EXPECT_TRUE(&m == client_host.last_sent_message); |
166 | 176 |
167 client_host.Close(); | 177 client_host.Close(&manager); |
168 EXPECT_EQ(1, TestDevToolsClientHost::close_counter); | 178 EXPECT_EQ(1, TestDevToolsClientHost::close_counter); |
169 } | 179 } |
170 | 180 |
171 TEST_F(DevToolsManagerTest, NoUnresponsiveDialogInInspectedTab) { | 181 TEST_F(DevToolsManagerTest, NoUnresponsiveDialogInInspectedTab) { |
172 TestRenderViewHost* inspected_rvh = rvh(); | 182 TestRenderViewHost* inspected_rvh = rvh(); |
173 inspected_rvh->set_render_view_created(true); | 183 inspected_rvh->set_render_view_created(true); |
174 EXPECT_FALSE(contents()->delegate()); | 184 EXPECT_FALSE(contents()->delegate()); |
175 TestTabContentsDelegate delegate; | 185 TestTabContentsDelegate delegate; |
176 contents()->set_delegate(&delegate); | 186 contents()->set_delegate(&delegate); |
177 | 187 |
178 TestDevToolsClientHost client_host; | 188 TestDevToolsClientHost client_host; |
| 189 DevToolsAgentHost* agent_host = |
| 190 DevToolsAgentHostRegistry::GetDevToolsAgentHost(inspected_rvh); |
179 DevToolsManager::GetInstance()-> | 191 DevToolsManager::GetInstance()-> |
180 RegisterDevToolsClientHostFor(inspected_rvh, &client_host); | 192 RegisterDevToolsClientHostFor(agent_host, &client_host); |
181 | 193 |
182 // Start with a short timeout. | 194 // Start with a short timeout. |
183 inspected_rvh->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); | 195 inspected_rvh->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); |
184 // Wait long enough for first timeout and see if it fired. | 196 // Wait long enough for first timeout and see if it fired. |
185 MessageLoop::current()->PostDelayedTask(FROM_HERE, | 197 MessageLoop::current()->PostDelayedTask(FROM_HERE, |
186 new MessageLoop::QuitTask(), 10); | 198 new MessageLoop::QuitTask(), 10); |
187 MessageLoop::current()->Run(); | 199 MessageLoop::current()->Run(); |
188 EXPECT_FALSE(delegate.renderer_unresponsive_received()); | 200 EXPECT_FALSE(delegate.renderer_unresponsive_received()); |
189 | 201 |
190 // Now close devtools and check that the notification is delivered. | 202 // Now close devtools and check that the notification is delivered. |
191 client_host.Close(); | 203 client_host.Close(DevToolsManager::GetInstance()); |
192 // Start with a short timeout. | 204 // Start with a short timeout. |
193 inspected_rvh->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); | 205 inspected_rvh->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); |
194 // Wait long enough for first timeout and see if it fired. | 206 // Wait long enough for first timeout and see if it fired. |
195 MessageLoop::current()->PostDelayedTask(FROM_HERE, | 207 MessageLoop::current()->PostDelayedTask(FROM_HERE, |
196 new MessageLoop::QuitTask(), 10); | 208 new MessageLoop::QuitTask(), 10); |
197 MessageLoop::current()->Run(); | 209 MessageLoop::current()->Run(); |
198 EXPECT_TRUE(delegate.renderer_unresponsive_received()); | 210 EXPECT_TRUE(delegate.renderer_unresponsive_received()); |
199 | 211 |
200 contents()->set_delegate(NULL); | 212 contents()->set_delegate(NULL); |
201 } | 213 } |
202 | 214 |
203 TEST_F(DevToolsManagerTest, ReattachOnCancelPendingNavigation) { | 215 TEST_F(DevToolsManagerTest, ReattachOnCancelPendingNavigation) { |
204 contents()->transition_cross_site = true; | 216 contents()->transition_cross_site = true; |
205 // Navigate to URL. First URL should use first RenderViewHost. | 217 // Navigate to URL. First URL should use first RenderViewHost. |
206 const GURL url("http://www.google.com"); | 218 const GURL url("http://www.google.com"); |
207 controller().LoadURL( | 219 controller().LoadURL( |
208 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); | 220 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); |
209 ViewHostMsg_FrameNavigate_Params params1; | 221 ViewHostMsg_FrameNavigate_Params params1; |
210 InitNavigateParams(¶ms1, 1, url, content::PAGE_TRANSITION_TYPED); | 222 InitNavigateParams(¶ms1, 1, url, content::PAGE_TRANSITION_TYPED); |
211 TestRenderViewHost* orig_rvh = rvh(); | 223 TestRenderViewHost* orig_rvh = rvh(); |
212 contents()->TestDidNavigate(orig_rvh, params1); | 224 contents()->TestDidNavigate(orig_rvh, params1); |
213 EXPECT_FALSE(contents()->cross_navigation_pending()); | 225 EXPECT_FALSE(contents()->cross_navigation_pending()); |
214 | 226 |
215 TestDevToolsClientHost client_host; | 227 TestDevToolsClientHost client_host; |
216 DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); | 228 DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); |
217 devtools_manager->RegisterDevToolsClientHostFor(rvh(), &client_host); | 229 devtools_manager->RegisterDevToolsClientHostFor( |
| 230 DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh()), |
| 231 &client_host); |
218 | 232 |
219 // Navigate to new site which should get a new RenderViewHost. | 233 // Navigate to new site which should get a new RenderViewHost. |
220 const GURL url2("http://www.yahoo.com"); | 234 const GURL url2("http://www.yahoo.com"); |
221 controller().LoadURL( | 235 controller().LoadURL( |
222 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); | 236 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); |
223 EXPECT_TRUE(contents()->cross_navigation_pending()); | 237 EXPECT_TRUE(contents()->cross_navigation_pending()); |
224 EXPECT_EQ(&client_host, | 238 EXPECT_EQ(&client_host, devtools_manager->GetDevToolsClientHostFor( |
225 devtools_manager->GetDevToolsClientHostFor(pending_rvh())); | 239 DevToolsAgentHostRegistry::GetDevToolsAgentHost(pending_rvh()))); |
226 | 240 |
227 // Interrupt pending navigation and navigate back to the original site. | 241 // Interrupt pending navigation and navigate back to the original site. |
228 controller().LoadURL( | 242 controller().LoadURL( |
229 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); | 243 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); |
230 contents()->TestDidNavigate(orig_rvh, params1); | 244 contents()->TestDidNavigate(orig_rvh, params1); |
231 EXPECT_FALSE(contents()->cross_navigation_pending()); | 245 EXPECT_FALSE(contents()->cross_navigation_pending()); |
232 EXPECT_EQ(&client_host, devtools_manager->GetDevToolsClientHostFor(rvh())); | 246 EXPECT_EQ(&client_host, devtools_manager->GetDevToolsClientHostFor( |
233 client_host.Close(); | 247 DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh()))); |
| 248 client_host.Close(DevToolsManager::GetInstance()); |
234 } | 249 } |
OLD | NEW |