summaryrefslogtreecommitdiffstats
path: root/chromium/content/browser/shared_worker/shared_worker_instance.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/shared_worker/shared_worker_instance.cc')
-rw-r--r--chromium/content/browser/shared_worker/shared_worker_instance.cc68
1 files changed, 68 insertions, 0 deletions
diff --git a/chromium/content/browser/shared_worker/shared_worker_instance.cc b/chromium/content/browser/shared_worker/shared_worker_instance.cc
new file mode 100644
index 00000000000..ea8e02db705
--- /dev/null
+++ b/chromium/content/browser/shared_worker/shared_worker_instance.cc
@@ -0,0 +1,68 @@
+// 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/shared_worker_instance.h"
+
+#include "base/logging.h"
+
+namespace content {
+
+SharedWorkerInstance::SharedWorkerInstance(
+ const GURL& url,
+ const base::string16& name,
+ const base::string16& content_security_policy,
+ blink::WebContentSecurityPolicyType security_policy_type,
+ ResourceContext* resource_context,
+ const WorkerStoragePartitionId& partition_id)
+ : url_(url),
+ name_(name),
+ content_security_policy_(content_security_policy),
+ security_policy_type_(security_policy_type),
+ resource_context_(resource_context),
+ partition_id_(partition_id) {
+ DCHECK(resource_context_);
+}
+
+SharedWorkerInstance::SharedWorkerInstance(const SharedWorkerInstance& other)
+ : url_(other.url_),
+ name_(other.name_),
+ content_security_policy_(other.content_security_policy_),
+ security_policy_type_(other.security_policy_type_),
+ resource_context_(other.resource_context_),
+ partition_id_(other.partition_id_) {
+}
+
+SharedWorkerInstance::~SharedWorkerInstance() {}
+
+bool SharedWorkerInstance::Matches(const GURL& match_url,
+ const base::string16& match_name,
+ const WorkerStoragePartitionId& partition_id,
+ ResourceContext* resource_context) const {
+ // ResourceContext equivalence is being used as a proxy to ensure we only
+ // matched shared workers within the same BrowserContext.
+ if (resource_context_ != resource_context)
+ return false;
+
+ // We must be in the same storage partition otherwise sharing will violate
+ // isolation.
+ if (!partition_id_.Equals(partition_id))
+ return false;
+
+ if (url_.GetOrigin() != match_url.GetOrigin())
+ return false;
+
+ if (name_.empty() && match_name.empty())
+ return url_ == match_url;
+
+ return name_ == match_name;
+}
+
+bool SharedWorkerInstance::Matches(const SharedWorkerInstance& other) const {
+ return Matches(other.url(),
+ other.name(),
+ other.partition_id(),
+ other.resource_context());
+}
+
+} // namespace content