OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_BROWSER_WORKER_HOST_WORKER_PROCESS_HOST_H_ | 5 #ifndef CONTENT_BROWSER_WORKER_HOST_WORKER_PROCESS_HOST_H_ |
6 #define CONTENT_BROWSER_WORKER_HOST_WORKER_PROCESS_HOST_H_ | 6 #define CONTENT_BROWSER_WORKER_HOST_WORKER_PROCESS_HOST_H_ |
7 | 7 |
8 #include <list> | 8 #include <list> |
| 9 #include <string> |
9 #include <utility> | 10 #include <utility> |
10 | 11 |
11 #include "base/basictypes.h" | 12 #include "base/basictypes.h" |
12 #include "base/file_path.h" | 13 #include "base/file_path.h" |
13 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
14 #include "content/common/content_export.h" | 15 #include "content/common/content_export.h" |
15 #include "content/browser/worker_host/worker_document_set.h" | 16 #include "content/browser/worker_host/worker_document_set.h" |
| 17 #include "content/browser/worker_host/worker_storage_partition.h" |
16 #include "content/public/browser/browser_child_process_host_delegate.h" | 18 #include "content/public/browser/browser_child_process_host_delegate.h" |
17 #include "content/public/browser/browser_child_process_host_iterator.h" | 19 #include "content/public/browser/browser_child_process_host_iterator.h" |
18 #include "googleurl/src/gurl.h" | 20 #include "googleurl/src/gurl.h" |
19 #include "ipc/ipc_sender.h" | 21 #include "ipc/ipc_sender.h" |
20 | 22 |
21 class BrowserChildProcessHostImpl; | 23 class BrowserChildProcessHostImpl; |
| 24 class ChromeAppCacheService; |
| 25 class IndexedDBContextImpl; |
22 | 26 |
23 namespace content { | 27 namespace content { |
24 class ResourceContext; | 28 class ResourceContext; |
25 class WorkerServiceImpl; | 29 class WorkerServiceImpl; |
26 } // namespace content | 30 } // namespace content |
27 | 31 |
| 32 namespace fileapi { |
| 33 class FileSystemContext; |
| 34 } // namespace fileapi |
| 35 |
| 36 namespace webkit_database { |
| 37 class DatabaseTracker; |
| 38 } // namespace webkit_database |
| 39 |
28 // The WorkerProcessHost is the interface that represents the browser side of | 40 // The WorkerProcessHost is the interface that represents the browser side of |
29 // the browser <-> worker communication channel. There will be one | 41 // the browser <-> worker communication channel. There will be one |
30 // WorkerProcessHost per worker process. Currently each worker runs in its own | 42 // WorkerProcessHost per worker process. Currently each worker runs in its own |
31 // process, but that may change. However, we do assume (by storing a | 43 // process, but that may change. However, we do assume (by storing a |
32 // net::URLRequestContext) that a WorkerProcessHost serves a single | 44 // net::URLRequestContext) that a WorkerProcessHost serves a single |
33 // BrowserContext. | 45 // BrowserContext. |
34 class WorkerProcessHost : public content::BrowserChildProcessHostDelegate, | 46 class WorkerProcessHost : public content::BrowserChildProcessHostDelegate, |
35 public IPC::Sender { | 47 public IPC::Sender { |
36 public: | 48 public: |
37 // Contains information about each worker instance, needed to forward messages | 49 // Contains information about each worker instance, needed to forward messages |
38 // between the renderer and worker processes. | 50 // between the renderer and worker processes. |
39 class WorkerInstance { | 51 class WorkerInstance { |
40 public: | 52 public: |
41 WorkerInstance(const GURL& url, | 53 WorkerInstance(const GURL& url, |
42 const string16& name, | 54 const string16& name, |
43 int worker_route_id, | 55 int worker_route_id, |
44 int parent_process_id, | 56 int parent_process_id, |
45 int64 main_resource_appcache_id, | 57 int64 main_resource_appcache_id, |
46 content::ResourceContext* resource_context); | 58 content::ResourceContext* resource_context, |
| 59 const WorkerStoragePartition& partition); |
47 // Used for pending instances. Rest of the parameters are ignored. | 60 // Used for pending instances. Rest of the parameters are ignored. |
48 WorkerInstance(const GURL& url, | 61 WorkerInstance(const GURL& url, |
49 bool shared, | 62 bool shared, |
50 const string16& name, | 63 const string16& name, |
51 content::ResourceContext* resource_context); | 64 content::ResourceContext* resource_context, |
| 65 const WorkerStoragePartition& partition); |
52 ~WorkerInstance(); | 66 ~WorkerInstance(); |
53 | 67 |
54 // Unique identifier for a worker client. | 68 // Unique identifier for a worker client. |
55 typedef std::pair<WorkerMessageFilter*, int> FilterInfo; | 69 typedef std::pair<WorkerMessageFilter*, int> FilterInfo; |
56 | 70 |
57 // APIs to manage the filter list for a given instance. | 71 // APIs to manage the filter list for a given instance. |
58 void AddFilter(WorkerMessageFilter* filter, int route_id); | 72 void AddFilter(WorkerMessageFilter* filter, int route_id); |
59 void RemoveFilter(WorkerMessageFilter* filter, int route_id); | 73 void RemoveFilter(WorkerMessageFilter* filter, int route_id); |
60 void RemoveFilters(WorkerMessageFilter* filter); | 74 void RemoveFilters(WorkerMessageFilter* filter); |
61 bool HasFilter(WorkerMessageFilter* filter, int route_id) const; | 75 bool HasFilter(WorkerMessageFilter* filter, int route_id) const; |
62 bool RendererIsParent(int render_process_id, int render_view_id) const; | 76 bool RendererIsParent(int render_process_id, int render_view_id) const; |
63 int NumFilters() const { return filters_.size(); } | 77 int NumFilters() const { return filters_.size(); } |
64 // Returns the single filter (must only be one). | 78 // Returns the single filter (must only be one). |
65 FilterInfo GetFilter() const; | 79 FilterInfo GetFilter() const; |
66 | 80 |
67 typedef std::list<FilterInfo> FilterList; | 81 typedef std::list<FilterInfo> FilterList; |
68 const FilterList& filters() const { return filters_; } | 82 const FilterList& filters() const { return filters_; } |
69 | 83 |
70 // Checks if this WorkerInstance matches the passed url/name params | 84 // Checks if this WorkerInstance matches the passed url/name params |
71 // (per the comparison algorithm in the WebWorkers spec). This API only | 85 // (per the comparison algorithm in the WebWorkers spec). This API only |
72 // applies to shared workers. | 86 // applies to shared workers. |
73 bool Matches( | 87 bool Matches( |
74 const GURL& url, | 88 const GURL& url, |
75 const string16& name, | 89 const string16& name, |
| 90 const WorkerStoragePartition& partition, |
76 content::ResourceContext* resource_context) const; | 91 content::ResourceContext* resource_context) const; |
77 | 92 |
78 // Shares the passed instance's WorkerDocumentSet with this instance. This | 93 // Shares the passed instance's WorkerDocumentSet with this instance. This |
79 // instance's current WorkerDocumentSet is dereferenced (and freed if this | 94 // instance's current WorkerDocumentSet is dereferenced (and freed if this |
80 // is the only reference) as a result. | 95 // is the only reference) as a result. |
81 void ShareDocumentSet(const WorkerInstance& instance) { | 96 void ShareDocumentSet(const WorkerInstance& instance) { |
82 worker_document_set_ = instance.worker_document_set_; | 97 worker_document_set_ = instance.worker_document_set_; |
83 }; | 98 }; |
84 | 99 |
85 // Accessors | 100 // Accessors |
86 bool closed() const { return closed_; } | 101 bool closed() const { return closed_; } |
87 void set_closed(bool closed) { closed_ = closed; } | 102 void set_closed(bool closed) { closed_ = closed; } |
88 const GURL& url() const { return url_; } | 103 const GURL& url() const { return url_; } |
89 const string16 name() const { return name_; } | 104 const string16 name() const { return name_; } |
90 int worker_route_id() const { return worker_route_id_; } | 105 int worker_route_id() const { return worker_route_id_; } |
91 int parent_process_id() const { return parent_process_id_; } | 106 int parent_process_id() const { return parent_process_id_; } |
92 int64 main_resource_appcache_id() const { | 107 int64 main_resource_appcache_id() const { |
93 return main_resource_appcache_id_; | 108 return main_resource_appcache_id_; |
94 } | 109 } |
95 WorkerDocumentSet* worker_document_set() const { | 110 WorkerDocumentSet* worker_document_set() const { |
96 return worker_document_set_; | 111 return worker_document_set_; |
97 } | 112 } |
98 content::ResourceContext* resource_context() const { | 113 content::ResourceContext* resource_context() const { |
99 return resource_context_; | 114 return resource_context_; |
100 } | 115 } |
| 116 const WorkerStoragePartition& partition() const { |
| 117 return partition_; |
| 118 } |
101 | 119 |
102 private: | 120 private: |
103 // Set of all filters (clients) associated with this worker. | 121 // Set of all filters (clients) associated with this worker. |
104 GURL url_; | 122 GURL url_; |
105 bool closed_; | 123 bool closed_; |
106 string16 name_; | 124 string16 name_; |
107 int worker_route_id_; | 125 int worker_route_id_; |
108 int parent_process_id_; | 126 int parent_process_id_; |
109 int64 main_resource_appcache_id_; | 127 int64 main_resource_appcache_id_; |
110 FilterList filters_; | 128 FilterList filters_; |
111 scoped_refptr<WorkerDocumentSet> worker_document_set_; | 129 scoped_refptr<WorkerDocumentSet> worker_document_set_; |
112 content::ResourceContext* const resource_context_; | 130 content::ResourceContext* const resource_context_; |
| 131 WorkerStoragePartition partition_; |
113 }; | 132 }; |
114 | 133 |
115 explicit WorkerProcessHost(content::ResourceContext* resource_context); | 134 WorkerProcessHost(content::ResourceContext* resource_context, |
| 135 const WorkerStoragePartition& partition); |
116 virtual ~WorkerProcessHost(); | 136 virtual ~WorkerProcessHost(); |
117 | 137 |
118 // IPC::Sender implementation: | 138 // IPC::Sender implementation: |
119 virtual bool Send(IPC::Message* message) OVERRIDE; | 139 virtual bool Send(IPC::Message* message) OVERRIDE; |
120 | 140 |
121 // Starts the process. Returns true iff it succeeded. | 141 // Starts the process. Returns true iff it succeeded. |
122 // |render_process_id| is the renderer process responsible for starting this | 142 // |render_process_id| is the renderer process responsible for starting this |
123 // worker. | 143 // worker. |
124 bool Init(int render_process_id); | 144 bool Init(int render_process_id); |
125 | 145 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 // Updates the title shown in the task manager. | 208 // Updates the title shown in the task manager. |
189 void UpdateTitle(); | 209 void UpdateTitle(); |
190 | 210 |
191 // Return a vector of all the render process/render view IDs that use the | 211 // Return a vector of all the render process/render view IDs that use the |
192 // given worker. | 212 // given worker. |
193 std::vector<std::pair<int, int> > GetRenderViewIDsForWorker(int route_id); | 213 std::vector<std::pair<int, int> > GetRenderViewIDsForWorker(int route_id); |
194 | 214 |
195 Instances instances_; | 215 Instances instances_; |
196 | 216 |
197 content::ResourceContext* const resource_context_; | 217 content::ResourceContext* const resource_context_; |
| 218 WorkerStoragePartition partition_; |
198 | 219 |
199 // A reference to the filter associated with this worker process. We need to | 220 // A reference to the filter associated with this worker process. We need to |
200 // keep this around since we'll use it when forward messages to the worker | 221 // keep this around since we'll use it when forward messages to the worker |
201 // process. | 222 // process. |
202 scoped_refptr<WorkerMessageFilter> worker_message_filter_; | 223 scoped_refptr<WorkerMessageFilter> worker_message_filter_; |
203 | 224 |
204 scoped_ptr<BrowserChildProcessHostImpl> process_; | 225 scoped_ptr<BrowserChildProcessHostImpl> process_; |
205 | 226 |
206 DISALLOW_COPY_AND_ASSIGN(WorkerProcessHost); | 227 DISALLOW_COPY_AND_ASSIGN(WorkerProcessHost); |
207 }; | 228 }; |
208 | 229 |
209 class WorkerProcessHostIterator | 230 class WorkerProcessHostIterator |
210 : public content::BrowserChildProcessHostTypeIterator<WorkerProcessHost> { | 231 : public content::BrowserChildProcessHostTypeIterator<WorkerProcessHost> { |
211 public: | 232 public: |
212 WorkerProcessHostIterator() | 233 WorkerProcessHostIterator() |
213 : content::BrowserChildProcessHostTypeIterator<WorkerProcessHost>( | 234 : content::BrowserChildProcessHostTypeIterator<WorkerProcessHost>( |
214 content::PROCESS_TYPE_WORKER) { | 235 content::PROCESS_TYPE_WORKER) { |
215 } | 236 } |
216 }; | 237 }; |
217 | 238 |
218 #endif // CONTENT_BROWSER_WORKER_HOST_WORKER_PROCESS_HOST_H_ | 239 #endif // CONTENT_BROWSER_WORKER_HOST_WORKER_PROCESS_HOST_H_ |
OLD | NEW |