OLD | NEW |
| (Empty) |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "content/browser/worker_host/worker_document_set.h" | |
6 | |
7 #include "base/logging.h" | |
8 | |
9 namespace content { | |
10 | |
11 WorkerDocumentSet::WorkerDocumentSet() { | |
12 } | |
13 | |
14 void WorkerDocumentSet::Add(BrowserMessageFilter* parent, | |
15 unsigned long long document_id, | |
16 int render_process_id, | |
17 int render_frame_id) { | |
18 DocumentInfo info(parent, document_id, render_process_id, render_frame_id); | |
19 document_set_.insert(info); | |
20 } | |
21 | |
22 bool WorkerDocumentSet::Contains(BrowserMessageFilter* parent, | |
23 unsigned long long document_id) const { | |
24 for (DocumentInfoSet::const_iterator i = document_set_.begin(); | |
25 i != document_set_.end(); ++i) { | |
26 if (i->filter() == parent && i->document_id() == document_id) | |
27 return true; | |
28 } | |
29 return false; | |
30 } | |
31 | |
32 bool WorkerDocumentSet::ContainsExternalRenderer( | |
33 int worker_process_id) const { | |
34 for (DocumentInfoSet::const_iterator i = document_set_.begin(); | |
35 i != document_set_.end(); ++i) { | |
36 if (i->render_process_id() != worker_process_id) | |
37 return true; | |
38 } | |
39 return false; | |
40 } | |
41 | |
42 void WorkerDocumentSet::Remove(BrowserMessageFilter* parent, | |
43 unsigned long long document_id) { | |
44 for (DocumentInfoSet::iterator i = document_set_.begin(); | |
45 i != document_set_.end(); i++) { | |
46 if (i->filter() == parent && i->document_id() == document_id) { | |
47 document_set_.erase(i); | |
48 break; | |
49 } | |
50 } | |
51 // Should not be duplicate copies in the document set. | |
52 DCHECK(!Contains(parent, document_id)); | |
53 } | |
54 | |
55 void WorkerDocumentSet::RemoveAll(BrowserMessageFilter* parent) { | |
56 for (DocumentInfoSet::iterator i = document_set_.begin(); | |
57 i != document_set_.end();) { | |
58 | |
59 // Note this idiom is somewhat tricky - calling document_set_.erase(iter) | |
60 // invalidates any iterators that point to the element being removed, so | |
61 // bump the iterator beyond the item being removed before calling erase. | |
62 if (i->filter() == parent) { | |
63 DocumentInfoSet::iterator item_to_delete = i++; | |
64 document_set_.erase(item_to_delete); | |
65 } else { | |
66 ++i; | |
67 } | |
68 } | |
69 } | |
70 | |
71 WorkerDocumentSet::DocumentInfo::DocumentInfo( | |
72 BrowserMessageFilter* filter, unsigned long long document_id, | |
73 int render_process_id, int render_frame_id) | |
74 : filter_(filter), | |
75 document_id_(document_id), | |
76 render_process_id_(render_process_id), | |
77 render_frame_id_(render_frame_id) { | |
78 } | |
79 | |
80 WorkerDocumentSet::~WorkerDocumentSet() { | |
81 } | |
82 | |
83 } // namespace content | |
OLD | NEW |