// Copyright (c) 2011 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 "webkit/appcache/appcache_backend_impl.h" #include "base/stl_util.h" #include "webkit/appcache/appcache.h" #include "webkit/appcache/appcache_group.h" #include "webkit/appcache/appcache_service.h" #include "webkit/appcache/web_application_cache_host_impl.h" namespace appcache { AppCacheBackendImpl::AppCacheBackendImpl() : service_(NULL), frontend_(NULL), process_id_(0) { } AppCacheBackendImpl::~AppCacheBackendImpl() { STLDeleteValues(&hosts_); if (service_) service_->UnregisterBackend(this); } void AppCacheBackendImpl::Initialize(AppCacheService* service, AppCacheFrontend* frontend, int process_id) { DCHECK(!service_ && !frontend_ && frontend && service); service_ = service; frontend_ = frontend; process_id_ = process_id; service_->RegisterBackend(this); } bool AppCacheBackendImpl::RegisterHost(int id) { if (GetHost(id)) return false; hosts_.insert( HostMap::value_type(id, new AppCacheHost(id, frontend_, service_))); return true; } bool AppCacheBackendImpl::UnregisterHost(int id) { HostMap::iterator found = hosts_.find(id); if (found == hosts_.end()) return false; delete found->second; hosts_.erase(found); return true; } bool AppCacheBackendImpl::SetSpawningHostId( int host_id, int spawning_host_id) { AppCacheHost* host = GetHost(host_id); if (!host) return false; host->SetSpawningHostId(process_id_, spawning_host_id); return true; } bool AppCacheBackendImpl::SelectCache( int host_id, const GURL& document_url, const int64 cache_document_was_loaded_from, const GURL& manifest_url) { AppCacheHost* host = GetHost(host_id); if (!host) return false; host->SelectCache(document_url, cache_document_was_loaded_from, manifest_url); return true; } bool AppCacheBackendImpl::SelectCacheForWorker( int host_id, int parent_process_id, int parent_host_id) { AppCacheHost* host = GetHost(host_id); if (!host) return false; host->SelectCacheForWorker(parent_process_id, parent_host_id); return true; } bool AppCacheBackendImpl::SelectCacheForSharedWorker( int host_id, int64 appcache_id) { AppCacheHost* host = GetHost(host_id); if (!host) return false; host->SelectCacheForSharedWorker(appcache_id); return true; } bool AppCacheBackendImpl::MarkAsForeignEntry( int host_id, const GURL& document_url, int64 cache_document_was_loaded_from) { AppCacheHost* host = GetHost(host_id); if (!host) return false; host->MarkAsForeignEntry(document_url, cache_document_was_loaded_from); return true; } bool AppCacheBackendImpl::GetStatusWithCallback( int host_id, const GetStatusCallback& callback, void* callback_param) { AppCacheHost* host = GetHost(host_id); if (!host) return false; host->GetStatusWithCallback(callback, callback_param); return true; } bool AppCacheBackendImpl::StartUpdateWithCallback( int host_id, const StartUpdateCallback& callback, void* callback_param) { AppCacheHost* host = GetHost(host_id); if (!host) return false; host->StartUpdateWithCallback(callback, callback_param); return true; } bool AppCacheBackendImpl::SwapCacheWithCallback( int host_id, const SwapCacheCallback& callback, void* callback_param) { AppCacheHost* host = GetHost(host_id); if (!host) return false; host->SwapCacheWithCallback(callback, callback_param); return true; } void AppCacheBackendImpl::GetResourceList( int host_id, std::vector* resource_infos) { AppCacheHost* host = GetHost(host_id); if (!host) return; host->GetResourceList(resource_infos); } } // namespace appcache