Chromium Code Reviews| 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 |