Index: content/browser/shared_worker/worker_document_set.cc |
diff --git a/content/browser/shared_worker/worker_document_set.cc b/content/browser/shared_worker/worker_document_set.cc |
index f8981adbc2b735b416df263c1b6c4fbdcb1efeeb..fda6b4c33868a0c38d67de597f78fba644795caf 100644 |
--- a/content/browser/shared_worker/worker_document_set.cc |
+++ b/content/browser/shared_worker/worker_document_set.cc |
@@ -64,6 +64,23 @@ void WorkerDocumentSet::RemoveAll(BrowserMessageFilter* parent) { |
} |
} |
+void WorkerDocumentSet::RemoveRenderFrame(int render_process_id, |
+ int render_frame_id) { |
+ for (DocumentInfoSet::iterator i = document_set_.begin(); |
+ i != document_set_.end();) { |
+ // Note this idiom is somewhat tricky - calling document_set_.erase(iter) |
+ // invalidates any iterators that point to the element being removed, so |
+ // bump the iterator beyond the item being removed before calling erase. |
+ if (i->render_process_id() == render_process_id && |
+ i->render_frame_id() == render_frame_id) { |
+ DocumentInfoSet::iterator item_to_delete = i++; |
+ document_set_.erase(item_to_delete); |
no sievers
2016/08/24 23:44:37
same as: document_set_.erase(i++)
horo
2016/08/25 00:03:29
Done.
|
+ } else { |
+ ++i; |
+ } |
+ } |
+} |
+ |
WorkerDocumentSet::DocumentInfo::DocumentInfo( |
BrowserMessageFilter* filter, unsigned long long document_id, |
int render_process_id, int render_frame_id) |