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_client_host.h" |
8 #include "content/browser/debugger/devtools_manager.h" | 8 #include "content/browser/debugger/devtools_manager.h" |
9 #include "content/browser/debugger/render_view_devtools_agent_host.h" | 9 #include "content/browser/debugger/render_view_devtools_agent_host.h" |
10 #include "content/browser/mock_content_browser_client.h" | 10 #include "content/browser/mock_content_browser_client.h" |
11 #include "content/browser/renderer_host/test_render_view_host.h" | 11 #include "content/browser/renderer_host/test_render_view_host.h" |
12 #include "content/browser/tab_contents/tab_contents_delegate.h" | 12 #include "content/browser/tab_contents/tab_contents_delegate.h" |
13 #include "content/browser/tab_contents/test_tab_contents.h" | 13 #include "content/browser/tab_contents/test_tab_contents.h" |
| 14 #include "content/common/view_messages.h" |
14 #include "content/public/browser/content_browser_client.h" | 15 #include "content/public/browser/content_browser_client.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
16 | 17 |
17 using base::TimeDelta; | 18 using base::TimeDelta; |
18 | 19 |
19 namespace { | 20 namespace { |
20 | 21 |
21 class TestDevToolsClientHost : public DevToolsClientHost { | 22 class TestDevToolsClientHost : public DevToolsClientHost { |
22 public: | 23 public: |
23 TestDevToolsClientHost() | 24 TestDevToolsClientHost() |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 class DevToolsManagerTestBrowserClient | 89 class DevToolsManagerTestBrowserClient |
89 : public content::MockContentBrowserClient { | 90 : public content::MockContentBrowserClient { |
90 public: | 91 public: |
91 DevToolsManagerTestBrowserClient() { | 92 DevToolsManagerTestBrowserClient() { |
92 } | 93 } |
93 | 94 |
94 virtual DevToolsManager* GetDevToolsManager() OVERRIDE { | 95 virtual DevToolsManager* GetDevToolsManager() OVERRIDE { |
95 return &dev_tools_manager_; | 96 return &dev_tools_manager_; |
96 } | 97 } |
97 | 98 |
| 99 virtual bool ShouldSwapProcessesForNavigation( |
| 100 const GURL& current_url, |
| 101 const GURL& new_url) OVERRIDE { |
| 102 return true; |
| 103 } |
| 104 |
98 private: | 105 private: |
99 DevToolsManager dev_tools_manager_; | 106 DevToolsManager dev_tools_manager_; |
100 | 107 |
101 DISALLOW_COPY_AND_ASSIGN(DevToolsManagerTestBrowserClient); | 108 DISALLOW_COPY_AND_ASSIGN(DevToolsManagerTestBrowserClient); |
102 }; | 109 }; |
103 | 110 |
104 } // namespace | 111 } // namespace |
105 | 112 |
106 class DevToolsManagerTest : public RenderViewHostTestHarness { | 113 class DevToolsManagerTest : public RenderViewHostTestHarness { |
107 public: | 114 public: |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 // Start with a short timeout. | 198 // Start with a short timeout. |
192 inspected_rvh->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); | 199 inspected_rvh->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); |
193 // Wait long enough for first timeout and see if it fired. | 200 // Wait long enough for first timeout and see if it fired. |
194 MessageLoop::current()->PostDelayedTask(FROM_HERE, | 201 MessageLoop::current()->PostDelayedTask(FROM_HERE, |
195 new MessageLoop::QuitTask(), 10); | 202 new MessageLoop::QuitTask(), 10); |
196 MessageLoop::current()->Run(); | 203 MessageLoop::current()->Run(); |
197 EXPECT_TRUE(delegate.renderer_unresponsive_received()); | 204 EXPECT_TRUE(delegate.renderer_unresponsive_received()); |
198 | 205 |
199 contents()->set_delegate(NULL); | 206 contents()->set_delegate(NULL); |
200 } | 207 } |
| 208 |
| 209 TEST_F(DevToolsManagerTest, ReattachOnCancelPendingNavigation) { |
| 210 contents()->transition_cross_site = true; |
| 211 TestRenderViewHost* orig_rvh = rvh(); |
| 212 // Navigate to URL. First URL should use first RenderViewHost. |
| 213 const GURL url("http://www.google.com"); |
| 214 controller().LoadURL( |
| 215 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); |
| 216 ViewHostMsg_FrameNavigate_Params params1; |
| 217 InitNavigateParams(¶ms1, 1, url, content::PAGE_TRANSITION_TYPED); |
| 218 contents()->TestDidNavigate(orig_rvh, params1); |
| 219 EXPECT_FALSE(contents()->cross_navigation_pending()); |
| 220 |
| 221 TestDevToolsClientHost client_host; |
| 222 DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); |
| 223 devtools_manager->RegisterDevToolsClientHostFor(rvh(), &client_host); |
| 224 |
| 225 // Navigate to new site which should get a new RenderViewHost. |
| 226 const GURL url2("http://www.yahoo.com"); |
| 227 controller().LoadURL( |
| 228 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); |
| 229 EXPECT_TRUE(contents()->cross_navigation_pending()); |
| 230 EXPECT_EQ(&client_host, |
| 231 devtools_manager->GetDevToolsClientHostFor(pending_rvh())); |
| 232 |
| 233 // Interrupt pending navigation and navigate back to the original site. |
| 234 controller().LoadURL( |
| 235 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); |
| 236 contents()->TestDidNavigate(orig_rvh, params1); |
| 237 EXPECT_FALSE(contents()->cross_navigation_pending()); |
| 238 EXPECT_EQ(&client_host, devtools_manager->GetDevToolsClientHostFor(rvh())); |
| 239 client_host.Close(); |
| 240 } |
OLD | NEW |