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..23afd341c2f612a43b6ca5505717dbb6724f8164 100644 |
--- a/content/public/test/browser_test_utils.cc |
+++ b/content/public/test/browser_test_utils.cc |
@@ -1013,4 +1013,75 @@ void FrameWatcher::WaitFrames(int frames_to_wait) { |
run_loop.Run(); |
} |
+RenderViewHostDeletedObserver::RenderViewHostDeletedObserver( |
+ RenderViewHost* rvh) |
+ : WebContentsObserver(WebContents::FromRenderViewHost(rvh)), |
+ process_id_(rvh->GetProcess()->GetID()), |
+ routing_id_(rvh->GetRoutingID()), |
+ deleted_(false) { |
+} |
+ |
+RenderViewHostDeletedObserver::~RenderViewHostDeletedObserver() { |
+} |
+ |
+void RenderViewHostDeletedObserver::RenderViewDeleted( |
+ RenderViewHost* render_view_host) { |
+ if (render_view_host->GetProcess()->GetID() == process_id_ && |
+ render_view_host->GetRoutingID() == routing_id_) { |
+ deleted_ = true; |
+ |
+ if (runner_.get()) { |
+ runner_->Quit(); |
+ runner_.reset(nullptr); |
nasko
2015/06/26 11:46:11
Do you really need to delete the RunLoop object? I
lfg
2015/06/26 16:49:39
Good catch, this is a bug. Fixed.
|
+ } |
+ } |
+} |
+ |
+bool RenderViewHostDeletedObserver::deleted() { |
+ return deleted_; |
+} |
+ |
+void RenderViewHostDeletedObserver::WaitUntilDeleted() { |
+ if (deleted_) |
+ return; |
+ |
+ runner_.reset(new base::RunLoop()); |
+ runner_->Run(); |
+} |
+ |
+RenderFrameHostDeletedObserver::RenderFrameHostDeletedObserver( |
+ RenderFrameHost* rfh) |
+ : WebContentsObserver(WebContents::FromRenderFrameHost(rfh)), |
+ process_id_(rfh->GetProcess()->GetID()), |
+ routing_id_(rfh->GetRoutingID()), |
+ deleted_(false) { |
+} |
+ |
+RenderFrameHostDeletedObserver::~RenderFrameHostDeletedObserver() { |
+} |
+ |
+void RenderFrameHostDeletedObserver::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(); |
nasko
2015/06/26 11:46:11
Why the inconsistency between the two classes? The
lfg
2015/06/26 16:49:39
I had fixed this one before, but not the other sin
nasko
2015/06/29 08:22:09
Yes, we should only expose code that is needed. Al
|
+ } |
+} |
+ |
+bool RenderFrameHostDeletedObserver::deleted() { |
+ return deleted_; |
+} |
+ |
+void RenderFrameHostDeletedObserver::WaitUntilDeleted() { |
+ if (deleted_) |
+ return; |
+ |
+ runner_.reset(new base::RunLoop()); |
+ runner_->Run(); |
+ runner_.reset(nullptr); |
+} |
+ |
} // namespace content |