Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(54)

Unified Diff: content/public/test/browser_test_utils.cc

Issue 1155993003: Fix accessibility with out-of-process iframes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698