Index: content/public/test/browser_test_utils.h |
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h |
index bcc424fe289b905f19049d4e425572d041c48322..957292014871b5a4ea09122745bd4391a2d80346 100644 |
--- a/content/public/test/browser_test_utils.h |
+++ b/content/public/test/browser_test_utils.h |
@@ -404,6 +404,45 @@ class WebContentsAddedObserver { |
DISALLOW_COPY_AND_ASSIGN(WebContentsAddedObserver); |
}; |
+// This observer keeps track of the last deleted RenderViewHost to avoid |
+// accessing it and causing use-after-free condition. |
+class RenderViewHostDeletedObserver : public WebContentsObserver { |
+ public: |
+ RenderViewHostDeletedObserver(RenderViewHost* rvh); |
+ ~RenderViewHostDeletedObserver() override; |
+ void RenderViewDeleted(RenderViewHost* render_view_host) override; |
+ bool deleted(); |
+ void WaitUntilDeleted(); |
+ |
+ private: |
+ int process_id_; |
+ int routing_id_; |
+ bool deleted_; |
+ scoped_ptr<base::RunLoop> runner_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RenderViewHostDeletedObserver); |
+}; |
+ |
+// This observer keeps track of the last deleted RenderFrameHost to avoid |
+// accessing it and causing use-after-free condition. |
+class RenderFrameHostDeletedObserver : public WebContentsObserver { |
+ public: |
+ RenderFrameHostDeletedObserver(RenderFrameHost* rfh); |
+ ~RenderFrameHostDeletedObserver() override; |
+ void RenderFrameDeleted(RenderFrameHost* render_frame_host) override; |
+ bool deleted(); |
+ void WaitUntilDeleted(); |
+ |
+ private: |
+ int process_id_; |
+ int routing_id_; |
+ bool deleted_; |
+ scoped_ptr<base::RunLoop> runner_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RenderFrameHostDeletedObserver); |
+}; |
+ |
+ |
} // namespace content |
#endif // CONTENT_PUBLIC_TEST_BROWSER_TEST_UTILS_H_ |