1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/browser/shared_worker/shared_worker_instance.h"
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/logging.h"
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace content {
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)SharedWorkerInstance::SharedWorkerInstance(
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const GURL& url,
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const base::string16& name,
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const base::string16& content_security_policy,
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    blink::WebContentSecurityPolicyType security_policy_type,
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    ResourceContext* resource_context,
175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    const WorkerStoragePartitionId& partition_id)
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : url_(url),
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      name_(name),
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content_security_policy_(content_security_policy),
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      security_policy_type_(security_policy_type),
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      resource_context_(resource_context),
235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      partition_id_(partition_id) {
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  DCHECK(resource_context_);
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochSharedWorkerInstance::SharedWorkerInstance(const SharedWorkerInstance& other)
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    : url_(other.url_),
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      name_(other.name_),
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      content_security_policy_(other.content_security_policy_),
31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      security_policy_type_(other.security_policy_type_),
32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      resource_context_(other.resource_context_),
335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      partition_id_(other.partition_id_) {
345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochSharedWorkerInstance::~SharedWorkerInstance() {}
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool SharedWorkerInstance::Matches(const GURL& match_url,
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                   const base::string16& match_name,
405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                   const WorkerStoragePartitionId& partition_id,
415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                   ResourceContext* resource_context) const {
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // ResourceContext equivalence is being used as a proxy to ensure we only
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // matched shared workers within the same BrowserContext.
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (resource_context_ != resource_context)
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return false;
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // We must be in the same storage partition otherwise sharing will violate
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // isolation.
495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (!partition_id_.Equals(partition_id))
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return false;
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (url_.GetOrigin() != match_url.GetOrigin())
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return false;
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (name_.empty() && match_name.empty())
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return url_ == match_url;
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return name_ == match_name;
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool SharedWorkerInstance::Matches(const SharedWorkerInstance& other) const {
625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return Matches(other.url(),
635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 other.name(),
645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 other.partition_id(),
655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 other.resource_context());
66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace content
69