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