Index: content/browser/debugger/devtools_manager_unittest.cc |
diff --git a/content/browser/debugger/devtools_manager_unittest.cc b/content/browser/debugger/devtools_manager_unittest.cc |
index 62accb22ac9182d025a72fd029224519d602f373..304bcd97bd220dac86199202f906211d9474f8b0 100644 |
--- a/content/browser/debugger/devtools_manager_unittest.cc |
+++ b/content/browser/debugger/devtools_manager_unittest.cc |
@@ -3,11 +3,16 @@ |
// found in the LICENSE file. |
#include "base/basictypes.h" |
+#include "base/time.h" |
#include "content/browser/debugger/devtools_client_host.h" |
#include "content/browser/debugger/devtools_manager.h" |
#include "content/browser/renderer_host/test_render_view_host.h" |
+#include "content/browser/tab_contents/tab_contents_delegate.h" |
+#include "content/browser/tab_contents/test_tab_contents.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+using base::TimeDelta; |
+ |
namespace { |
class TestDevToolsClientHost : public DevToolsClientHost { |
@@ -59,6 +64,24 @@ class TestDevToolsClientHost : public DevToolsClientHost { |
int TestDevToolsClientHost::close_counter = 0; |
+ |
+class TestTabContentsDelegate : public TabContentsDelegate { |
+ public: |
+ TestTabContentsDelegate() : renderer_unresponsive_received_(false) {} |
+ |
+ // Notification that the tab is hung. |
+ virtual void RendererUnresponsive(TabContents* source) { |
+ renderer_unresponsive_received_ = true; |
+ } |
+ |
+ bool renderer_unresponsive_received() const { |
+ return renderer_unresponsive_received_; |
+ } |
+ |
+ private: |
+ bool renderer_unresponsive_received_; |
+}; |
+ |
} // namespace |
class DevToolsManagerTest : public RenderViewHostTestHarness { |
@@ -111,3 +134,38 @@ TEST_F(DevToolsManagerTest, ForwardMessageToClient) { |
client_host.Close(); |
EXPECT_EQ(1, TestDevToolsClientHost::close_counter); |
} |
+ |
+TEST_F(DevToolsManagerTest, NoUnresponsiveDialogInInspectedTab) { |
+ TestRenderViewHost* inspected_rvh = rvh(); |
+ inspected_rvh->set_render_view_created(true); |
+ EXPECT_FALSE(contents()->delegate()); |
+ TestTabContentsDelegate delegate; |
+ contents()->set_delegate(&delegate); |
+ |
+ testing_browser_process_.get()->SetDevToolsManager(new DevToolsManager()); |
+ DevToolsManager* manager = DevToolsManager::GetInstance(); |
+ ASSERT_TRUE(manager); |
+ |
+ TestDevToolsClientHost client_host; |
+ manager->RegisterDevToolsClientHostFor(inspected_rvh, &client_host); |
+ |
+ // Start with a short timeout. |
+ inspected_rvh->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); |
+ // Wait long enough for first timeout and see if it fired. |
+ MessageLoop::current()->PostDelayedTask(FROM_HERE, |
+ new MessageLoop::QuitTask(), 10); |
+ MessageLoop::current()->Run(); |
+ EXPECT_FALSE(delegate.renderer_unresponsive_received()); |
+ |
+ // Now close devtools and check that the notification is delivered. |
+ 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. |
+ MessageLoop::current()->PostDelayedTask(FROM_HERE, |
+ new MessageLoop::QuitTask(), 10); |
+ MessageLoop::current()->Run(); |
+ EXPECT_TRUE(delegate.renderer_unresponsive_received()); |
+ |
+ contents()->set_delegate(NULL); |
+} |