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

Unified Diff: chrome/browser/worker_host/worker_document_set.cc

Issue 509016: Refactored code to allow associating workers with multiple renderers. (Closed)
Patch Set: Disabled overly-aggressive assertion in ResourceDispatcherHost. Created 10 years, 11 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
« no previous file with comments | « chrome/browser/worker_host/worker_document_set.h ('k') | chrome/browser/worker_host/worker_process_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/worker_host/worker_document_set.cc
diff --git a/chrome/browser/worker_host/worker_document_set.cc b/chrome/browser/worker_host/worker_document_set.cc
new file mode 100644
index 0000000000000000000000000000000000000000..2e4d9aa23d920e9827eb646f77bbec11418e603a
--- /dev/null
+++ b/chrome/browser/worker_host/worker_document_set.cc
@@ -0,0 +1,64 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/worker_host/worker_document_set.h"
+
+WorkerDocumentSet::WorkerDocumentSet() {
+}
+
+void WorkerDocumentSet::Add(IPC::Message::Sender* parent,
+ unsigned long long document_id,
+ int renderer_id,
+ int render_view_route_id) {
+ DocumentInfo info(parent, document_id, renderer_id, render_view_route_id);
+ document_set_.insert(info);
+}
+
+bool WorkerDocumentSet::Contains(IPC::Message::Sender* parent,
+ unsigned long long document_id) const {
+ for (DocumentInfoSet::const_iterator i = document_set_.begin();
+ i != document_set_.end(); ++i) {
+ if (i->sender() == parent && i->document_id() == document_id)
+ return true;
+ }
+ return false;
+}
+
+void WorkerDocumentSet::Remove(IPC::Message::Sender* parent,
+ unsigned long long document_id) {
+ for (DocumentInfoSet::iterator i = document_set_.begin();
+ i != document_set_.end(); i++) {
+ if (i->sender() == parent && i->document_id() == document_id) {
+ document_set_.erase(i);
+ break;
+ }
+ }
+ // Should not be duplicate copies in the document set.
+ DCHECK(!Contains(parent, document_id));
+}
+
+void WorkerDocumentSet::RemoveAll(IPC::Message::Sender* parent) {
+ 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->sender() == parent) {
+ DocumentInfoSet::iterator item_to_delete = i++;
+ document_set_.erase(item_to_delete);
+ } else {
+ ++i;
+ }
+ }
+}
+
+WorkerDocumentSet::DocumentInfo::DocumentInfo(
+ IPC::Message::Sender* sender, unsigned long long document_id,
+ int renderer_id, int render_view_route_id)
+ : sender_(sender),
+ document_id_(document_id),
+ renderer_id_(renderer_id),
+ render_view_route_id_(render_view_route_id) {
+}
« no previous file with comments | « chrome/browser/worker_host/worker_document_set.h ('k') | chrome/browser/worker_host/worker_process_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698