Index: content/public/test/browser_test_utils.cc |
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc |
index 001ceeaab81a8e46bfd863aba448a2d735da27fb..55fa908ad9b0eba9b2d02ed0366cce04c0a301aa 100644 |
--- a/content/public/test/browser_test_utils.cc |
+++ b/content/public/test/browser_test_utils.cc |
@@ -1013,4 +1013,39 @@ void FrameWatcher::WaitFrames(int frames_to_wait) { |
run_loop.Run(); |
} |
+RenderFrameDeletedObserver::RenderFrameDeletedObserver( |
+ RenderFrameHost* rfh) |
+ : WebContentsObserver(WebContents::FromRenderFrameHost(rfh)), |
+ process_id_(rfh->GetProcess()->GetID()), |
+ routing_id_(rfh->GetRoutingID()), |
+ deleted_(false) { |
+} |
+ |
+RenderFrameDeletedObserver::~RenderFrameDeletedObserver() { |
+} |
+ |
+void RenderFrameDeletedObserver::RenderFrameDeleted( |
+ RenderFrameHost* render_frame_host) { |
+ if (render_frame_host->GetProcess()->GetID() == process_id_ && |
+ render_frame_host->GetRoutingID() == routing_id_) { |
+ deleted_ = true; |
+ |
+ if (runner_.get()) |
+ runner_->Quit(); |
+ } |
+} |
+ |
+bool RenderFrameDeletedObserver::deleted() { |
+ return deleted_; |
+} |
+ |
+void RenderFrameDeletedObserver::WaitUntilDeleted() { |
+ if (deleted_) |
+ return; |
+ |
+ runner_.reset(new base::RunLoop()); |
+ runner_->Run(); |
+ runner_.reset(nullptr); |
+} |
+ |
} // namespace content |