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 7de4fd7fcd1c14eeab59fc51e8498223d1a1ed6d..7f0972f954d116853a8ad75fe4f2091bb0930152 100644 |
--- a/content/public/test/browser_test_utils.h |
+++ b/content/public/test/browser_test_utils.h |
@@ -434,6 +434,44 @@ class FrameWatcher : public BrowserMessageFilter { |
DISALLOW_COPY_AND_ASSIGN(FrameWatcher); |
}; |
+// 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_ |