Index: content/renderer/render_view_browsertest.cc |
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc |
index e778fdc90c54a18f51a6a9a982936c9227193680..164feeccf11557bac65a2de22caff9459b0e1362 100644 |
--- a/content/renderer/render_view_browsertest.cc |
+++ b/content/renderer/render_view_browsertest.cc |
@@ -31,6 +31,7 @@ |
#include "content/public/test/render_view_test.h" |
#include "content/public/test/test_utils.h" |
#include "content/renderer/accessibility/renderer_accessibility.h" |
+#include "content/renderer/devtools/devtools_agent.h" |
#include "content/renderer/history_controller.h" |
#include "content/renderer/history_serialization.h" |
#include "content/renderer/navigation_state_impl.h" |
@@ -288,6 +289,36 @@ class RenderViewImplTest : public RenderViewTest { |
scoped_ptr<MockKeyboard> mock_keyboard_; |
}; |
+class DevToolsAgentTest : public RenderViewImplTest { |
+ public: |
+ void Attach() { |
+ std::string host_id = "host_id"; |
+ agent()->OnAttach(host_id); |
+ } |
+ |
+ void Detach() { |
+ agent()->OnDetach(); |
+ } |
+ |
+ bool IsPaused() { |
+ return agent()->paused_; |
+ } |
+ |
+ void DispatchDevToolsMessage(const std::string& message) { |
+ agent()->OnDispatchOnInspectorBackend(message); |
+ } |
+ |
+ void CloseWhilePaused() { |
+ EXPECT_TRUE(IsPaused()); |
+ view()->NotifyOnClose(); |
+ } |
+ |
+ private: |
+ DevToolsAgent* agent() { |
+ return frame()->devtools_agent(); |
+ } |
+}; |
+ |
// Test for https://crbug.com/461191. |
TEST_F(RenderViewImplTest, RenderFrameMessageAfterDetach) { |
// Create a new main frame RenderFrame so that we don't interfere with the |
@@ -2340,4 +2371,20 @@ TEST_F(RenderViewImplTest, HistoryIsProperlyUpdatedOnNavigation) { |
view()->historyForwardListCount() + 1); |
} |
+TEST_F(DevToolsAgentTest, DevToolsResumeOnClose) { |
+ Attach(); |
+ EXPECT_FALSE(IsPaused()); |
+ DispatchDevToolsMessage("{\"id\":1,\"method\":\"Debugger.enable\"}"); |
+ |
+ // Executing javascript will pause the thread and create nested message loop. |
+ // Posting task simulates message coming from browser. |
+ base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind( |
+ &DevToolsAgentTest::CloseWhilePaused, base::Unretained(this))); |
+ ExecuteJavaScript("debugger;"); |
+ |
+ // CloseWhilePaused should resume execution and continue here. |
+ EXPECT_FALSE(IsPaused()); |
+ Detach(); |
+} |
+ |
} // namespace content |