Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Unified Diff: webkit/browser/appcache/appcache_group.cc

Issue 344493002: Move all remaining appcache-related code to content namespace (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/browser/appcache/appcache_group.cc
diff --git a/webkit/browser/appcache/appcache_group.cc b/webkit/browser/appcache/appcache_group.cc
deleted file mode 100644
index f5ad43d9fa49fe0ba11cb997ea74a104a2c9a3ad..0000000000000000000000000000000000000000
--- a/webkit/browser/appcache/appcache_group.cc
+++ /dev/null
@@ -1,264 +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_group.h"
-
-#include <algorithm>
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/message_loop/message_loop.h"
-#include "webkit/browser/appcache/appcache.h"
-#include "webkit/browser/appcache/appcache_host.h"
-#include "webkit/browser/appcache/appcache_service_impl.h"
-#include "webkit/browser/appcache/appcache_storage.h"
-#include "webkit/browser/appcache/appcache_update_job.h"
-
-namespace appcache {
-
-class AppCacheGroup;
-
-// Use this helper class because we cannot make AppCacheGroup a derived class
-// of AppCacheHost::Observer as it would create a circular dependency between
-// AppCacheHost and AppCacheGroup.
-class AppCacheGroup::HostObserver : public AppCacheHost::Observer {
- public:
- explicit HostObserver(AppCacheGroup* group) : group_(group) {}
-
- // Methods for AppCacheHost::Observer.
- virtual void OnCacheSelectionComplete(AppCacheHost* host) OVERRIDE {} // N/A
- virtual void OnDestructionImminent(AppCacheHost* host) OVERRIDE {
- group_->HostDestructionImminent(host);
- }
- private:
- AppCacheGroup* group_;
-};
-
-AppCacheGroup::AppCacheGroup(AppCacheStorage* storage,
- const GURL& manifest_url,
- int64 group_id)
- : group_id_(group_id),
- manifest_url_(manifest_url),
- update_status_(IDLE),
- is_obsolete_(false),
- is_being_deleted_(false),
- newest_complete_cache_(NULL),
- update_job_(NULL),
- storage_(storage),
- is_in_dtor_(false) {
- storage_->working_set()->AddGroup(this);
- host_observer_.reset(new HostObserver(this));
-}
-
-AppCacheGroup::~AppCacheGroup() {
- DCHECK(old_caches_.empty());
- DCHECK(!newest_complete_cache_);
- DCHECK(restart_update_task_.IsCancelled());
- DCHECK(queued_updates_.empty());
-
- is_in_dtor_ = true;
-
- if (update_job_)
- delete update_job_;
- DCHECK_EQ(IDLE, update_status_);
-
- storage_->working_set()->RemoveGroup(this);
- storage_->DeleteResponses(manifest_url_, newly_deletable_response_ids_);
-}
-
-void AppCacheGroup::AddUpdateObserver(UpdateObserver* observer) {
- // If observer being added is a host that has been queued for later update,
- // add observer to a different observer list.
- AppCacheHost* host = static_cast<AppCacheHost*>(observer);
- if (queued_updates_.find(host) != queued_updates_.end())
- queued_observers_.AddObserver(observer);
- else
- observers_.AddObserver(observer);
-}
-
-void AppCacheGroup::RemoveUpdateObserver(UpdateObserver* observer) {
- observers_.RemoveObserver(observer);
- queued_observers_.RemoveObserver(observer);
-}
-
-void AppCacheGroup::AddCache(AppCache* complete_cache) {
- DCHECK(complete_cache->is_complete());
- complete_cache->set_owning_group(this);
-
- if (!newest_complete_cache_) {
- newest_complete_cache_ = complete_cache;
- return;
- }
-
- if (complete_cache->IsNewerThan(newest_complete_cache_)) {
- old_caches_.push_back(newest_complete_cache_);
- newest_complete_cache_ = complete_cache;
-
- // Update hosts of older caches to add a reference to the newest cache.
- for (Caches::iterator it = old_caches_.begin();
- it != old_caches_.end(); ++it) {
- AppCache::AppCacheHosts& hosts = (*it)->associated_hosts();
- for (AppCache::AppCacheHosts::iterator host_it = hosts.begin();
- host_it != hosts.end(); ++host_it) {
- (*host_it)->SetSwappableCache(this);
- }
- }
- } else {
- old_caches_.push_back(complete_cache);
- }
-}
-
-void AppCacheGroup::RemoveCache(AppCache* cache) {
- DCHECK(cache->associated_hosts().empty());
- if (cache == newest_complete_cache_) {
- AppCache* tmp_cache = newest_complete_cache_;
- newest_complete_cache_ = NULL;
- tmp_cache->set_owning_group(NULL); // may cause this group to be deleted
- } else {
- scoped_refptr<AppCacheGroup> protect(this);
-
- Caches::iterator it =
- std::find(old_caches_.begin(), old_caches_.end(), cache);
- if (it != old_caches_.end()) {
- AppCache* tmp_cache = *it;
- old_caches_.erase(it);
- tmp_cache->set_owning_group(NULL); // may cause group to be released
- }
-
- if (!is_obsolete() && old_caches_.empty() &&
- !newly_deletable_response_ids_.empty()) {
- storage_->DeleteResponses(manifest_url_, newly_deletable_response_ids_);
- newly_deletable_response_ids_.clear();
- }
- }
-}
-
-void AppCacheGroup::AddNewlyDeletableResponseIds(
- std::vector<int64>* response_ids) {
- if (is_being_deleted() || (!is_obsolete() && old_caches_.empty())) {
- storage_->DeleteResponses(manifest_url_, *response_ids);
- response_ids->clear();
- return;
- }
-
- if (newly_deletable_response_ids_.empty()) {
- newly_deletable_response_ids_.swap(*response_ids);
- return;
- }
- newly_deletable_response_ids_.insert(
- newly_deletable_response_ids_.end(),
- response_ids->begin(), response_ids->end());
- response_ids->clear();
-}
-
-void AppCacheGroup::StartUpdateWithNewMasterEntry(
- AppCacheHost* host, const GURL& new_master_resource) {
- DCHECK(!is_obsolete() && !is_being_deleted());
- if (is_in_dtor_)
- return;
-
- if (!update_job_)
- update_job_ = new AppCacheUpdateJob(storage_->service(), this);
-
- update_job_->StartUpdate(host, new_master_resource);
-
- // Run queued update immediately as an update has been started manually.
- if (!restart_update_task_.IsCancelled()) {
- restart_update_task_.Cancel();
- RunQueuedUpdates();
- }
-}
-
-void AppCacheGroup::CancelUpdate() {
- if (update_job_) {
- delete update_job_;
- DCHECK(!update_job_);
- DCHECK_EQ(IDLE, update_status_);
- }
-}
-
-void AppCacheGroup::QueueUpdate(AppCacheHost* host,
- const GURL& new_master_resource) {
- DCHECK(update_job_ && host && !new_master_resource.is_empty());
- queued_updates_.insert(QueuedUpdates::value_type(host, new_master_resource));
-
- // Need to know when host is destroyed.
- host->AddObserver(host_observer_.get());
-
- // If host is already observing for updates, move host to queued observers
- // list so that host is not notified when the current update completes.
- if (FindObserver(host, observers_)) {
- observers_.RemoveObserver(host);
- queued_observers_.AddObserver(host);
- }
-}
-
-void AppCacheGroup::RunQueuedUpdates() {
- if (!restart_update_task_.IsCancelled())
- restart_update_task_.Cancel();
-
- if (queued_updates_.empty())
- return;
-
- QueuedUpdates updates_to_run;
- queued_updates_.swap(updates_to_run);
- DCHECK(queued_updates_.empty());
-
- for (QueuedUpdates::iterator it = updates_to_run.begin();
- it != updates_to_run.end(); ++it) {
- AppCacheHost* host = it->first;
- host->RemoveObserver(host_observer_.get());
- if (FindObserver(host, queued_observers_)) {
- queued_observers_.RemoveObserver(host);
- observers_.AddObserver(host);
- }
-
- if (!is_obsolete() && !is_being_deleted())
- StartUpdateWithNewMasterEntry(host, it->second);
- }
-}
-
-bool AppCacheGroup::FindObserver(UpdateObserver* find_me,
- const ObserverList<UpdateObserver>& observer_list) {
- return observer_list.HasObserver(find_me);
-}
-
-void AppCacheGroup::ScheduleUpdateRestart(int delay_ms) {
- DCHECK(restart_update_task_.IsCancelled());
- restart_update_task_.Reset(
- base::Bind(&AppCacheGroup::RunQueuedUpdates, this));
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- restart_update_task_.callback(),
- base::TimeDelta::FromMilliseconds(delay_ms));
-}
-
-void AppCacheGroup::HostDestructionImminent(AppCacheHost* host) {
- queued_updates_.erase(host);
- if (queued_updates_.empty() && !restart_update_task_.IsCancelled())
- restart_update_task_.Cancel();
-}
-
-void AppCacheGroup::SetUpdateAppCacheStatus(UpdateAppCacheStatus status) {
- if (status == update_status_)
- return;
-
- update_status_ = status;
-
- if (status != IDLE) {
- DCHECK(update_job_);
- } else {
- update_job_ = NULL;
-
- // Observers may release us in these callbacks, so we protect against
- // deletion by adding an extra ref in this scope (but only if we're not
- // in our destructor).
- scoped_refptr<AppCacheGroup> protect(is_in_dtor_ ? NULL : this);
- FOR_EACH_OBSERVER(UpdateObserver, observers_, OnUpdateComplete(this));
- if (!queued_updates_.empty())
- ScheduleUpdateRestart(kUpdateRestartDelayMs);
- }
-}
-
-} // namespace appcache

Powered by Google App Engine
This is Rietveld 408576698