1// Copyright 2014 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/shared_worker/shared_worker_instance.h"
6
7#include "base/logging.h"
8
9namespace content {
10
11SharedWorkerInstance::SharedWorkerInstance(
12    const GURL& url,
13    const base::string16& name,
14    const base::string16& content_security_policy,
15    blink::WebContentSecurityPolicyType security_policy_type,
16    ResourceContext* resource_context,
17    const WorkerStoragePartitionId& partition_id)
18    : url_(url),
19      name_(name),
20      content_security_policy_(content_security_policy),
21      security_policy_type_(security_policy_type),
22      resource_context_(resource_context),
23      partition_id_(partition_id) {
24  DCHECK(resource_context_);
25}
26
27SharedWorkerInstance::SharedWorkerInstance(const SharedWorkerInstance& other)
28    : url_(other.url_),
29      name_(other.name_),
30      content_security_policy_(other.content_security_policy_),
31      security_policy_type_(other.security_policy_type_),
32      resource_context_(other.resource_context_),
33      partition_id_(other.partition_id_) {
34}
35
36SharedWorkerInstance::~SharedWorkerInstance() {}
37
38bool SharedWorkerInstance::Matches(const GURL& match_url,
39                                   const base::string16& match_name,
40                                   const WorkerStoragePartitionId& partition_id,
41                                   ResourceContext* resource_context) const {
42  // ResourceContext equivalence is being used as a proxy to ensure we only
43  // matched shared workers within the same BrowserContext.
44  if (resource_context_ != resource_context)
45    return false;
46
47  // We must be in the same storage partition otherwise sharing will violate
48  // isolation.
49  if (!partition_id_.Equals(partition_id))
50    return false;
51
52  if (url_.GetOrigin() != match_url.GetOrigin())
53    return false;
54
55  if (name_.empty() && match_name.empty())
56    return url_ == match_url;
57
58  return name_ == match_name;
59}
60
61bool SharedWorkerInstance::Matches(const SharedWorkerInstance& other) const {
62  return Matches(other.url(),
63                 other.name(),
64                 other.partition_id(),
65                 other.resource_context());
66}
67
68}  // namespace content
69