blob: f3ef7d2636d39221e029a428ad9d03af424b070d [file] [log] [blame]
// Copyright 2014 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 "content/browser/shared_worker/worker_document_set.h"
#include "base/logging.h"
namespace content {
WorkerDocumentSet::WorkerDocumentSet() {
}
void WorkerDocumentSet::Add(BrowserMessageFilter* parent,
unsigned long long document_id,
int render_process_id,
int render_frame_id) {
DocumentInfo info(parent, document_id, render_process_id, render_frame_id);
document_set_.insert(info);
}
bool WorkerDocumentSet::Contains(BrowserMessageFilter* parent,
unsigned long long document_id) const {
for (DocumentInfoSet::const_iterator i = document_set_.begin();
i != document_set_.end(); ++i) {
if (i->filter() == parent && i->document_id() == document_id)
return true;
}
return false;
}
bool WorkerDocumentSet::ContainsExternalRenderer(
int worker_process_id) const {
for (DocumentInfoSet::const_iterator i = document_set_.begin();
i != document_set_.end(); ++i) {
if (i->render_process_id() != worker_process_id)
return true;
}
return false;
}
void WorkerDocumentSet::Remove(BrowserMessageFilter* parent,
unsigned long long document_id) {
for (DocumentInfoSet::iterator i = document_set_.begin();
i != document_set_.end(); i++) {
if (i->filter() == 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(BrowserMessageFilter* 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->filter() == parent) {
DocumentInfoSet::iterator item_to_delete = i++;
document_set_.erase(item_to_delete);
} else {
++i;
}
}
}
WorkerDocumentSet::DocumentInfo::DocumentInfo(
BrowserMessageFilter* filter, unsigned long long document_id,
int render_process_id, int render_frame_id)
: filter_(filter),
document_id_(document_id),
render_process_id_(render_process_id),
render_frame_id_(render_frame_id) {
}
WorkerDocumentSet::~WorkerDocumentSet() {
}
} // namespace content