1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/browser/service_worker/service_worker_script_cache_map.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/logging.h" 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/browser/service_worker/service_worker_context_core.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/browser/service_worker/service_worker_storage.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/browser/service_worker/service_worker_version.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/common/service_worker/service_worker_types.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace content { 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ServiceWorkerScriptCacheMap::ServiceWorkerScriptCacheMap( 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ServiceWorkerVersion* owner, 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::WeakPtr<ServiceWorkerContextCore> context) 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : owner_(owner), 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci context_(context) { 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ServiceWorkerScriptCacheMap::~ServiceWorkerScriptCacheMap() { 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)int64 ServiceWorkerScriptCacheMap::Lookup(const GURL& url) { 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ResourceIDMap::const_iterator found = resource_ids_.find(url); 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (found == resource_ids_.end()) 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return kInvalidServiceWorkerResponseId; 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return found->second; 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ServiceWorkerScriptCacheMap::NotifyStartedCaching( 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& url, int64 resource_id) { 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(kInvalidServiceWorkerResponseId, Lookup(url)); 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(owner_->status() == ServiceWorkerVersion::NEW || 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch owner_->status() == ServiceWorkerVersion::INSTALLING); 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_ids_[url] = resource_id; 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch context_->storage()->StoreUncommittedResponseId(resource_id); 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ServiceWorkerScriptCacheMap::NotifyFinishedCaching( 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GURL& url, const net::URLRequestStatus& status) { 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_NE(kInvalidServiceWorkerResponseId, Lookup(url)); 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(owner_->status() == ServiceWorkerVersion::NEW || 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch owner_->status() == ServiceWorkerVersion::INSTALLING); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!status.is_success()) { 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) context_->storage()->DoomUncommittedResponse(Lookup(url)); 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_ids_.erase(url); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (owner_->script_url() == url) 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci main_script_status_ = status; 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ServiceWorkerScriptCacheMap::GetResources( 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::vector<ServiceWorkerDatabase::ResourceRecord>* resources) { 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(resources->empty()); 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (ResourceIDMap::const_iterator it = resource_ids_.begin(); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) it != resource_ids_.end(); ++it) { 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resources->push_back( 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ServiceWorkerDatabase::ResourceRecord(it->second, it->first)); 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ServiceWorkerScriptCacheMap::SetResources( 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::vector<ServiceWorkerDatabase::ResourceRecord>& resources) { 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(resource_ids_.empty()); 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) typedef std::vector<ServiceWorkerDatabase::ResourceRecord> RecordVector; 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (RecordVector::const_iterator it = resources.begin(); 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) it != resources.end(); ++it) { 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_ids_[it->url] = it->resource_id; 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace content 75