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

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

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
Index: chrome/browser/worker_host/worker_document_set.h
diff --git a/chrome/browser/worker_host/worker_document_set.h b/chrome/browser/worker_host/worker_document_set.h
new file mode 100644
index 0000000000000000000000000000000000000000..57c166906bcd97a4d50fd4219b5896396fc1d139
--- /dev/null
+++ b/chrome/browser/worker_host/worker_document_set.h
@@ -0,0 +1,85 @@
+// 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.
+
+#ifndef CHROME_BROWSER_WORKER_HOST_WORKER_DOCUMENT_SET_H_
+#define CHROME_BROWSER_WORKER_HOST_WORKER_DOCUMENT_SET_H_
+
+#include <set>
+
+#include "base/basictypes.h"
+#include "base/ref_counted.h"
+#include "ipc/ipc_message.h"
+
+// The WorkerDocumentSet tracks all of the DOM documents associated with a
+// set of workers. With nested workers, multiple workers can share the same
+// WorkerDocumentSet (meaning that they all share the same lifetime, and will
+// all exit when the last document in that set exits, per the WebWorkers spec).
+class WorkerDocumentSet : public base::RefCounted<WorkerDocumentSet> {
+ public:
+ WorkerDocumentSet();
+
+ // The information we track for each document
+ class DocumentInfo {
+ public:
+ DocumentInfo(IPC::Message::Sender* sender, unsigned long long document_id,
+ int renderer_id, int render_view_route_id);
+ IPC::Message::Sender* sender() const { return sender_; }
+ unsigned long long document_id() const { return document_id_; }
+ int renderer_id() const { return renderer_id_; }
+ int render_view_route_id() const { return render_view_route_id_; }
+
+ // Define operator "<", which is used to determine uniqueness within
+ // the set.
+ bool operator <(DocumentInfo other) const {
+ // Items are identical if the sender and document_id are identical,
+ // otherwise create an arbitrary stable ordering based on the document
+ // id/sender.
+ if (sender() == other.sender()) {
+ return document_id() < other.document_id();
+ } else {
+ return reinterpret_cast<unsigned long long>(sender()) <
+ reinterpret_cast<unsigned long long>(other.sender());
+ }
+ }
+
+ private:
+ IPC::Message::Sender* sender_;
+ unsigned long long document_id_;
+ int renderer_id_;
+ int render_view_route_id_;
+ };
+
+ // Adds a document to a shared worker's document set. Also includes the
+ // associated renderer_id the document is associated with, to enable
+ // communication with the parent tab for things like http auth dialogs.
+ void Add(IPC::Message::Sender* parent,
+ unsigned long long document_id,
+ int renderer_id,
+ int render_view_route_id);
+
+ // Checks to see if a document is in a shared worker's document set.
+ bool Contains(IPC::Message::Sender* parent,
+ unsigned long long document_id) const;
+
+ // Removes a specific document from a worker's document set when that document
+ // is detached.
+ void Remove(IPC::Message::Sender* parent, unsigned long long document_id);
+
+ // Invoked when a render process exits, to remove all associated documents
+ // from a worker's document set.
+ void RemoveAll(IPC::Message::Sender* parent);
+
+ bool IsEmpty() const { return document_set_.empty(); }
+
+ // Define a typedef for convenience here when declaring iterators, etc.
+ typedef std::set<DocumentInfo> DocumentInfoSet;
+
+ // Returns the set of documents associated with this worker.
+ const DocumentInfoSet& documents() { return document_set_; }
+
+ private:
+ DocumentInfoSet document_set_;
+};
+
+#endif // CHROME_BROWSER_WORKER_HOST_WORKER_DOCUMENT_SET_H_
« no previous file with comments | « chrome/browser/renderer_host/resource_request_details.h ('k') | chrome/browser/worker_host/worker_document_set.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698