service_worker_provider_host.cc revision 116680a4aac90f2aa7413d9095a592090648e557
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/service_worker/service_worker_provider_host.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/stl_util.h" 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/browser/message_port_message_filter.h" 9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/browser/service_worker/service_worker_context_core.h" 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/browser/service_worker/service_worker_context_request_handler.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/browser/service_worker/service_worker_controllee_request_handler.h" 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/browser/service_worker/service_worker_dispatcher_host.h" 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/browser/service_worker/service_worker_handle.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/browser/service_worker/service_worker_utils.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/service_worker/service_worker_version.h" 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/common/service_worker/service_worker_messages.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace content { 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static const int kDocumentMainThreadId = 0; 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ServiceWorkerProviderHost::ServiceWorkerProviderHost( 23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int process_id, int provider_id, 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::WeakPtr<ServiceWorkerContextCore> context, 25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ServiceWorkerDispatcherHost* dispatcher_host) 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : process_id_(process_id), 27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch provider_id_(provider_id), 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch context_(context), 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch dispatcher_host_(dispatcher_host) { 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ServiceWorkerProviderHost::~ServiceWorkerProviderHost() { 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (controlling_version_) 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch controlling_version_->RemoveControllee(this); 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (active_version_) 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch active_version_->RemovePotentialControllee(this); 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (waiting_version_) 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch waiting_version_->RemovePotentialControllee(this); 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (installing_version_) 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch installing_version_->RemovePotentialControllee(this); 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void ServiceWorkerProviderHost::SetDocumentUrl(const GURL& url) { 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(!url.has_ref()); 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) document_url_ = url; 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ServiceWorkerProviderHost::SetControllerVersion( 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ServiceWorkerVersion* version) { 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(CanAssociateVersion(version)); 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (version == controlling_version_) 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<ServiceWorkerVersion> previous_version = controlling_version_; 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch controlling_version_ = version; 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (version) 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch version->AddControllee(this); 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (previous_version) 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch previous_version->RemoveControllee(this); 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!dispatcher_host_) 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; // Could be NULL in some tests. 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dispatcher_host_->Send(new ServiceWorkerMsg_SetControllerServiceWorker( 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kDocumentMainThreadId, provider_id(), CreateHandleAndPass(version))); 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ServiceWorkerProviderHost::SetActiveVersion( 68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ServiceWorkerVersion* version) { 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(CanAssociateVersion(version)); 70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (version == active_version_) 71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return; 72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_refptr<ServiceWorkerVersion> previous_version = active_version_; 73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch active_version_ = version; 74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (version) 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch version->AddPotentialControllee(this); 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (previous_version) 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch previous_version->RemovePotentialControllee(this); 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!dispatcher_host_) 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return; // Could be NULL in some tests. 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dispatcher_host_->Send(new ServiceWorkerMsg_SetActiveServiceWorker( 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kDocumentMainThreadId, provider_id(), CreateHandleAndPass(version))); 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ServiceWorkerProviderHost::SetWaitingVersion( 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ServiceWorkerVersion* version) { 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(CanAssociateVersion(version)); 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (version == waiting_version_) 90a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return; 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<ServiceWorkerVersion> previous_version = waiting_version_; 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) waiting_version_ = version; 93a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (version) 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch version->AddPotentialControllee(this); 95a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (previous_version) 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch previous_version->RemovePotentialControllee(this); 97a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 98a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (!dispatcher_host_) 99a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return; // Could be NULL in some tests. 100a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dispatcher_host_->Send(new ServiceWorkerMsg_SetWaitingServiceWorker( 102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kDocumentMainThreadId, provider_id(), CreateHandleAndPass(version))); 103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ServiceWorkerProviderHost::SetInstallingVersion( 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ServiceWorkerVersion* version) { 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(CanAssociateVersion(version)); 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (version == installing_version_) 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<ServiceWorkerVersion> previous_version = installing_version_; 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch installing_version_ = version; 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (version) 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch version->AddPotentialControllee(this); 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (previous_version) 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch previous_version->RemovePotentialControllee(this); 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!dispatcher_host_) 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; // Could be NULL in some tests. 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dispatcher_host_->Send(new ServiceWorkerMsg_SetInstallingServiceWorker( 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kDocumentMainThreadId, provider_id(), CreateHandleAndPass(version))); 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ServiceWorkerProviderHost::UnsetVersion(ServiceWorkerVersion* version) { 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!version) 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (installing_version_ == version) 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetInstallingVersion(NULL); 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch else if (waiting_version_ == version) 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetWaitingVersion(NULL); 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch else if (active_version_ == version) 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetActiveVersion(NULL); 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch else if (controlling_version_ == version) 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetControllerVersion(NULL); 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 137c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool ServiceWorkerProviderHost::SetHostedVersionId(int64 version_id) { 138c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!context_) 139c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; // System is shutting down. 140c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (active_version_) 141c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return false; // Unexpected bad message. 142c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ServiceWorkerVersion* live_version = context_->GetLiveVersion(version_id); 144c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!live_version) 145c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; // Was deleted before it got started. 146c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 147c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ServiceWorkerVersionInfo info = live_version->GetInfo(); 148c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (info.running_status != ServiceWorkerVersion::STARTING || 149c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch info.process_id != process_id_) { 150c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // If we aren't trying to start this version in our process 151c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // something is amiss. 152c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return false; 153c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 154c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu running_hosted_version_ = live_version; 156c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; 157c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuscoped_ptr<ServiceWorkerRequestHandler> 1605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuServiceWorkerProviderHost::CreateRequestHandler( 161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ResourceType::Type resource_type, 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context) { 1635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (IsHostToRunningServiceWorker()) { 1645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return scoped_ptr<ServiceWorkerRequestHandler>( 1655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new ServiceWorkerContextRequestHandler( 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) context_, AsWeakPtr(), blob_storage_context, resource_type)); 1675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (ServiceWorkerUtils::IsMainResourceType(resource_type) || 1695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu active_version()) { 1705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return scoped_ptr<ServiceWorkerRequestHandler>( 1715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new ServiceWorkerControlleeRequestHandler( 172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) context_, AsWeakPtr(), blob_storage_context, resource_type)); 1735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return scoped_ptr<ServiceWorkerRequestHandler>(); 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ServiceWorkerProviderHost::CanAssociateVersion( 178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ServiceWorkerVersion* version) { 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!context_) 180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (running_hosted_version_) 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!version) 184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 185f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ServiceWorkerVersion* already_associated_version = NULL; 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (controlling_version_) 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch already_associated_version = controlling_version_; 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (active_version_) 190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch already_associated_version = active_version_; 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch else if (waiting_version_) 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch already_associated_version = waiting_version_; 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch else if (installing_version_) 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch already_associated_version = installing_version_; 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return !already_associated_version || 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch already_associated_version->registration_id() == 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch version->registration_id(); 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 201010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void ServiceWorkerProviderHost::PostMessage( 202010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const base::string16& message, 203010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::vector<int>& sent_message_port_ids) { 204010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (!dispatcher_host_) 205010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; // Could be NULL in some tests. 206010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 207010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::vector<int> new_routing_ids; 208010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) dispatcher_host_->message_port_message_filter()-> 209010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) UpdateMessagePortsWithNewRoutes(sent_message_port_ids, 210010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &new_routing_ids); 211010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 212010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) dispatcher_host_->Send( 213010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) new ServiceWorkerMsg_MessageToDocument( 214010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kDocumentMainThreadId, provider_id(), 215010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) message, 216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) sent_message_port_ids, 217010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) new_routing_ids)); 218010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 219010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)ServiceWorkerObjectInfo ServiceWorkerProviderHost::CreateHandleAndPass( 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ServiceWorkerVersion* version) { 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ServiceWorkerObjectInfo info; 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (context_ && version) { 224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<ServiceWorkerHandle> handle = 225f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ServiceWorkerHandle::Create(context_, dispatcher_host_, 226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kDocumentMainThreadId, version); 227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) info = handle->GetObjectInfo(); 228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dispatcher_host_->RegisterServiceWorkerHandle(handle.Pass()); 229f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 230f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return info; 231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool ServiceWorkerProviderHost::IsContextAlive() { 234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return context_ != NULL; 235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace content 238