|  | // 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, | 
|  | blink::WebAddressSpace creation_address_space, | 
|  | ResourceContext* resource_context, | 
|  | const WorkerStoragePartitionId& partition_id, | 
|  | blink::WebSharedWorkerCreationContextType creation_context_type) | 
|  | : url_(url), | 
|  | name_(name), | 
|  | content_security_policy_(content_security_policy), | 
|  | security_policy_type_(security_policy_type), | 
|  | creation_address_space_(creation_address_space), | 
|  | resource_context_(resource_context), | 
|  | partition_id_(partition_id), | 
|  | creation_context_type_(creation_context_type) { | 
|  | 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_), | 
|  | creation_address_space_(other.creation_address_space_), | 
|  | resource_context_(other.resource_context_), | 
|  | partition_id_(other.partition_id_), | 
|  | creation_context_type_(other.creation_context_type_) {} | 
|  |  | 
|  | 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_ != match_name || url_ != match_url) | 
|  | return false; | 
|  | return true; | 
|  | } | 
|  |  | 
|  | bool SharedWorkerInstance::Matches(const SharedWorkerInstance& other) const { | 
|  | return Matches(other.url(), | 
|  | other.name(), | 
|  | other.partition_id(), | 
|  | other.resource_context()); | 
|  | } | 
|  |  | 
|  | }  // namespace content |