| Index: webkit/browser/appcache/appcache.cc
 | 
| diff --git a/webkit/browser/appcache/appcache.cc b/webkit/browser/appcache/appcache.cc
 | 
| deleted file mode 100644
 | 
| index 9179a4090f79f2c1ec1cf17d395b3f2aaa2c6801..0000000000000000000000000000000000000000
 | 
| --- a/webkit/browser/appcache/appcache.cc
 | 
| +++ /dev/null
 | 
| @@ -1,324 +0,0 @@
 | 
| -// Copyright (c) 2012 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/browser/appcache/appcache.h"
 | 
| -
 | 
| -#include <algorithm>
 | 
| -
 | 
| -#include "base/logging.h"
 | 
| -#include "base/stl_util.h"
 | 
| -#include "webkit/browser/appcache/appcache_executable_handler.h"
 | 
| -#include "webkit/browser/appcache/appcache_group.h"
 | 
| -#include "webkit/browser/appcache/appcache_host.h"
 | 
| -#include "webkit/browser/appcache/appcache_storage.h"
 | 
| -#include "webkit/common/appcache/appcache_interfaces.h"
 | 
| -
 | 
| -namespace appcache {
 | 
| -
 | 
| -AppCache::AppCache(AppCacheStorage* storage, int64 cache_id)
 | 
| -    : cache_id_(cache_id),
 | 
| -      owning_group_(NULL),
 | 
| -      online_whitelist_all_(false),
 | 
| -      is_complete_(false),
 | 
| -      cache_size_(0),
 | 
| -      storage_(storage) {
 | 
| -  storage_->working_set()->AddCache(this);
 | 
| -}
 | 
| -
 | 
| -AppCache::~AppCache() {
 | 
| -  DCHECK(associated_hosts_.empty());
 | 
| -  if (owning_group_.get()) {
 | 
| -    DCHECK(is_complete_);
 | 
| -    owning_group_->RemoveCache(this);
 | 
| -  }
 | 
| -  DCHECK(!owning_group_.get());
 | 
| -  storage_->working_set()->RemoveCache(this);
 | 
| -  STLDeleteContainerPairSecondPointers(
 | 
| -      executable_handlers_.begin(), executable_handlers_.end());
 | 
| -}
 | 
| -
 | 
| -void AppCache::UnassociateHost(AppCacheHost* host) {
 | 
| -  associated_hosts_.erase(host);
 | 
| -}
 | 
| -
 | 
| -void AppCache::AddEntry(const GURL& url, const AppCacheEntry& entry) {
 | 
| -  DCHECK(entries_.find(url) == entries_.end());
 | 
| -  entries_.insert(EntryMap::value_type(url, entry));
 | 
| -  cache_size_ += entry.response_size();
 | 
| -}
 | 
| -
 | 
| -bool AppCache::AddOrModifyEntry(const GURL& url, const AppCacheEntry& entry) {
 | 
| -  std::pair<EntryMap::iterator, bool> ret =
 | 
| -      entries_.insert(EntryMap::value_type(url, entry));
 | 
| -
 | 
| -  // Entry already exists.  Merge the types of the new and existing entries.
 | 
| -  if (!ret.second)
 | 
| -    ret.first->second.add_types(entry.types());
 | 
| -  else
 | 
| -    cache_size_ += entry.response_size();  // New entry. Add to cache size.
 | 
| -  return ret.second;
 | 
| -}
 | 
| -
 | 
| -void AppCache::RemoveEntry(const GURL& url) {
 | 
| -  EntryMap::iterator found = entries_.find(url);
 | 
| -  DCHECK(found != entries_.end());
 | 
| -  cache_size_ -= found->second.response_size();
 | 
| -  entries_.erase(found);
 | 
| -}
 | 
| -
 | 
| -AppCacheEntry* AppCache::GetEntry(const GURL& url) {
 | 
| -  EntryMap::iterator it = entries_.find(url);
 | 
| -  return (it != entries_.end()) ? &(it->second) : NULL;
 | 
| -}
 | 
| -
 | 
| -const AppCacheEntry* AppCache::GetEntryAndUrlWithResponseId(
 | 
| -    int64 response_id, GURL* optional_url_out) {
 | 
| -  for (EntryMap::const_iterator iter = entries_.begin();
 | 
| -       iter !=  entries_.end(); ++iter) {
 | 
| -    if (iter->second.response_id() == response_id) {
 | 
| -      if (optional_url_out)
 | 
| -        *optional_url_out = iter->first;
 | 
| -      return &iter->second;
 | 
| -    }
 | 
| -  }
 | 
| -  return NULL;
 | 
| -}
 | 
| -
 | 
| -AppCacheExecutableHandler* AppCache::GetExecutableHandler(int64 response_id) {
 | 
| -  HandlerMap::const_iterator found = executable_handlers_.find(response_id);
 | 
| -  if (found != executable_handlers_.end())
 | 
| -    return found->second;
 | 
| -  return NULL;
 | 
| -}
 | 
| -
 | 
| -AppCacheExecutableHandler* AppCache::GetOrCreateExecutableHandler(
 | 
| -    int64 response_id, net::IOBuffer* handler_source) {
 | 
| -  AppCacheExecutableHandler* handler = GetExecutableHandler(response_id);
 | 
| -  if (handler)
 | 
| -    return handler;
 | 
| -
 | 
| -  GURL handler_url;
 | 
| -  const AppCacheEntry* entry = GetEntryAndUrlWithResponseId(
 | 
| -      response_id, &handler_url);
 | 
| -  if (!entry || !entry->IsExecutable())
 | 
| -    return NULL;
 | 
| -
 | 
| -  DCHECK(storage_->service()->handler_factory());
 | 
| -  scoped_ptr<AppCacheExecutableHandler> own_ptr =
 | 
| -      storage_->service()->handler_factory()->
 | 
| -          CreateHandler(handler_url, handler_source);
 | 
| -  handler = own_ptr.release();
 | 
| -  if (!handler)
 | 
| -    return NULL;
 | 
| -  executable_handlers_[response_id] = handler;
 | 
| -  return handler;
 | 
| -}
 | 
| -
 | 
| -GURL AppCache::GetNamespaceEntryUrl(const NamespaceVector& namespaces,
 | 
| -                                    const GURL& namespace_url) const {
 | 
| -  size_t count = namespaces.size();
 | 
| -  for (size_t i = 0; i < count; ++i) {
 | 
| -    if (namespaces[i].namespace_url == namespace_url)
 | 
| -      return namespaces[i].target_url;
 | 
| -  }
 | 
| -  NOTREACHED();
 | 
| -  return GURL();
 | 
| -}
 | 
| -
 | 
| -namespace {
 | 
| -bool SortNamespacesByLength(
 | 
| -    const Namespace& lhs, const Namespace& rhs) {
 | 
| -  return lhs.namespace_url.spec().length() > rhs.namespace_url.spec().length();
 | 
| -}
 | 
| -}
 | 
| -
 | 
| -void AppCache::InitializeWithManifest(Manifest* manifest) {
 | 
| -  DCHECK(manifest);
 | 
| -  intercept_namespaces_.swap(manifest->intercept_namespaces);
 | 
| -  fallback_namespaces_.swap(manifest->fallback_namespaces);
 | 
| -  online_whitelist_namespaces_.swap(manifest->online_whitelist_namespaces);
 | 
| -  online_whitelist_all_ = manifest->online_whitelist_all;
 | 
| -
 | 
| -  // Sort the namespaces by url string length, longest to shortest,
 | 
| -  // since longer matches trump when matching a url to a namespace.
 | 
| -  std::sort(intercept_namespaces_.begin(), intercept_namespaces_.end(),
 | 
| -            SortNamespacesByLength);
 | 
| -  std::sort(fallback_namespaces_.begin(), fallback_namespaces_.end(),
 | 
| -            SortNamespacesByLength);
 | 
| -}
 | 
| -
 | 
| -void AppCache::InitializeWithDatabaseRecords(
 | 
| -    const AppCacheDatabase::CacheRecord& cache_record,
 | 
| -    const std::vector<AppCacheDatabase::EntryRecord>& entries,
 | 
| -    const std::vector<AppCacheDatabase::NamespaceRecord>& intercepts,
 | 
| -    const std::vector<AppCacheDatabase::NamespaceRecord>& fallbacks,
 | 
| -    const std::vector<AppCacheDatabase::OnlineWhiteListRecord>& whitelists) {
 | 
| -  DCHECK(cache_id_ == cache_record.cache_id);
 | 
| -  online_whitelist_all_ = cache_record.online_wildcard;
 | 
| -  update_time_ = cache_record.update_time;
 | 
| -
 | 
| -  for (size_t i = 0; i < entries.size(); ++i) {
 | 
| -    const AppCacheDatabase::EntryRecord& entry = entries.at(i);
 | 
| -    AddEntry(entry.url, AppCacheEntry(entry.flags, entry.response_id,
 | 
| -                                      entry.response_size));
 | 
| -  }
 | 
| -  DCHECK(cache_size_ == cache_record.cache_size);
 | 
| -
 | 
| -  for (size_t i = 0; i < intercepts.size(); ++i)
 | 
| -    intercept_namespaces_.push_back(intercepts.at(i).namespace_);
 | 
| -
 | 
| -  for (size_t i = 0; i < fallbacks.size(); ++i)
 | 
| -    fallback_namespaces_.push_back(fallbacks.at(i).namespace_);
 | 
| -
 | 
| -  // Sort the fallback namespaces by url string length, longest to shortest,
 | 
| -  // since longer matches trump when matching a url to a namespace.
 | 
| -  std::sort(intercept_namespaces_.begin(), intercept_namespaces_.end(),
 | 
| -            SortNamespacesByLength);
 | 
| -  std::sort(fallback_namespaces_.begin(), fallback_namespaces_.end(),
 | 
| -            SortNamespacesByLength);
 | 
| -
 | 
| -  for (size_t i = 0; i < whitelists.size(); ++i) {
 | 
| -    const AppCacheDatabase::OnlineWhiteListRecord& record = whitelists.at(i);
 | 
| -    online_whitelist_namespaces_.push_back(
 | 
| -        Namespace(APPCACHE_NETWORK_NAMESPACE,
 | 
| -                  record.namespace_url,
 | 
| -                  GURL(),
 | 
| -                  record.is_pattern));
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void AppCache::ToDatabaseRecords(
 | 
| -    const AppCacheGroup* group,
 | 
| -    AppCacheDatabase::CacheRecord* cache_record,
 | 
| -    std::vector<AppCacheDatabase::EntryRecord>* entries,
 | 
| -    std::vector<AppCacheDatabase::NamespaceRecord>* intercepts,
 | 
| -    std::vector<AppCacheDatabase::NamespaceRecord>* fallbacks,
 | 
| -    std::vector<AppCacheDatabase::OnlineWhiteListRecord>* whitelists) {
 | 
| -  DCHECK(group && cache_record && entries && fallbacks && whitelists);
 | 
| -  DCHECK(entries->empty() && fallbacks->empty() && whitelists->empty());
 | 
| -
 | 
| -  cache_record->cache_id = cache_id_;
 | 
| -  cache_record->group_id = group->group_id();
 | 
| -  cache_record->online_wildcard = online_whitelist_all_;
 | 
| -  cache_record->update_time = update_time_;
 | 
| -  cache_record->cache_size = 0;
 | 
| -
 | 
| -  for (EntryMap::const_iterator iter = entries_.begin();
 | 
| -       iter != entries_.end(); ++iter) {
 | 
| -    entries->push_back(AppCacheDatabase::EntryRecord());
 | 
| -    AppCacheDatabase::EntryRecord& record = entries->back();
 | 
| -    record.url = iter->first;
 | 
| -    record.cache_id = cache_id_;
 | 
| -    record.flags = iter->second.types();
 | 
| -    record.response_id = iter->second.response_id();
 | 
| -    record.response_size = iter->second.response_size();
 | 
| -    cache_record->cache_size += record.response_size;
 | 
| -  }
 | 
| -
 | 
| -  GURL origin = group->manifest_url().GetOrigin();
 | 
| -
 | 
| -  for (size_t i = 0; i < intercept_namespaces_.size(); ++i) {
 | 
| -    intercepts->push_back(AppCacheDatabase::NamespaceRecord());
 | 
| -    AppCacheDatabase::NamespaceRecord& record = intercepts->back();
 | 
| -    record.cache_id = cache_id_;
 | 
| -    record.origin = origin;
 | 
| -    record.namespace_ = intercept_namespaces_[i];
 | 
| -  }
 | 
| -
 | 
| -  for (size_t i = 0; i < fallback_namespaces_.size(); ++i) {
 | 
| -    fallbacks->push_back(AppCacheDatabase::NamespaceRecord());
 | 
| -    AppCacheDatabase::NamespaceRecord& record = fallbacks->back();
 | 
| -    record.cache_id = cache_id_;
 | 
| -    record.origin = origin;
 | 
| -    record.namespace_ = fallback_namespaces_[i];
 | 
| -  }
 | 
| -
 | 
| -  for (size_t i = 0; i < online_whitelist_namespaces_.size(); ++i) {
 | 
| -    whitelists->push_back(AppCacheDatabase::OnlineWhiteListRecord());
 | 
| -    AppCacheDatabase::OnlineWhiteListRecord& record = whitelists->back();
 | 
| -    record.cache_id = cache_id_;
 | 
| -    record.namespace_url = online_whitelist_namespaces_[i].namespace_url;
 | 
| -    record.is_pattern = online_whitelist_namespaces_[i].is_pattern;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -bool AppCache::FindResponseForRequest(const GURL& url,
 | 
| -    AppCacheEntry* found_entry, GURL* found_intercept_namespace,
 | 
| -    AppCacheEntry* found_fallback_entry, GURL* found_fallback_namespace,
 | 
| -    bool* found_network_namespace) {
 | 
| -  // Ignore fragments when looking up URL in the cache.
 | 
| -  GURL url_no_ref;
 | 
| -  if (url.has_ref()) {
 | 
| -    GURL::Replacements replacements;
 | 
| -    replacements.ClearRef();
 | 
| -    url_no_ref = url.ReplaceComponents(replacements);
 | 
| -  } else {
 | 
| -    url_no_ref = url;
 | 
| -  }
 | 
| -
 | 
| -  // 6.6.6 Changes to the networking model
 | 
| -
 | 
| -  AppCacheEntry* entry = GetEntry(url_no_ref);
 | 
| -  if (entry) {
 | 
| -    *found_entry = *entry;
 | 
| -    return true;
 | 
| -  }
 | 
| -
 | 
| -  if ((*found_network_namespace = IsInNetworkNamespace(url_no_ref)))
 | 
| -    return true;
 | 
| -
 | 
| -  const Namespace* intercept_namespace = FindInterceptNamespace(url_no_ref);
 | 
| -  if (intercept_namespace) {
 | 
| -    entry = GetEntry(intercept_namespace->target_url);
 | 
| -    DCHECK(entry);
 | 
| -    *found_entry = *entry;
 | 
| -    *found_intercept_namespace = intercept_namespace->namespace_url;
 | 
| -    return true;
 | 
| -  }
 | 
| -
 | 
| -  const Namespace* fallback_namespace = FindFallbackNamespace(url_no_ref);
 | 
| -  if (fallback_namespace) {
 | 
| -    entry = GetEntry(fallback_namespace->target_url);
 | 
| -    DCHECK(entry);
 | 
| -    *found_fallback_entry = *entry;
 | 
| -    *found_fallback_namespace = fallback_namespace->namespace_url;
 | 
| -    return true;
 | 
| -  }
 | 
| -
 | 
| -  *found_network_namespace = online_whitelist_all_;
 | 
| -  return *found_network_namespace;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -void AppCache::ToResourceInfoVector(AppCacheResourceInfoVector* infos) const {
 | 
| -  DCHECK(infos && infos->empty());
 | 
| -  for (EntryMap::const_iterator iter = entries_.begin();
 | 
| -       iter !=  entries_.end(); ++iter) {
 | 
| -    infos->push_back(AppCacheResourceInfo());
 | 
| -    AppCacheResourceInfo& info = infos->back();
 | 
| -    info.url = iter->first;
 | 
| -    info.is_master = iter->second.IsMaster();
 | 
| -    info.is_manifest = iter->second.IsManifest();
 | 
| -    info.is_intercept = iter->second.IsIntercept();
 | 
| -    info.is_fallback = iter->second.IsFallback();
 | 
| -    info.is_foreign = iter->second.IsForeign();
 | 
| -    info.is_explicit = iter->second.IsExplicit();
 | 
| -    info.size = iter->second.response_size();
 | 
| -    info.response_id = iter->second.response_id();
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -const Namespace* AppCache::FindNamespace(
 | 
| -    const NamespaceVector& namespaces,
 | 
| -    const GURL& url) {
 | 
| -  size_t count = namespaces.size();
 | 
| -  for (size_t i = 0; i < count; ++i) {
 | 
| -    if (namespaces[i].IsMatch(url))
 | 
| -      return &namespaces[i];
 | 
| -  }
 | 
| -  return NULL;
 | 
| -}
 | 
| -
 | 
| -}  // namespace appcache
 | 
| 
 |