Commit beb13401 authored by michaeln@google.com's avatar michaeln@google.com

AppCache: Add a helper method to AppCacheService to test if a request can be handled while offline.

BUG=65547, chromium-os:9559
TEST=none

Review URL: http://codereview.chromium.org/6269016

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72433 0039d316-1c4b-4281-b951-d872f2087c98
parent 203445cd
......@@ -8,6 +8,7 @@
#include "base/message_loop.h"
#include "base/stl_util-inl.h"
#include "webkit/appcache/appcache_backend_impl.h"
#include "webkit/appcache/appcache_entry.h"
#include "webkit/appcache/appcache_storage_impl.h"
namespace appcache {
......@@ -60,6 +61,43 @@ void AppCacheService::AsyncHelper::Cancel() {
service_ = NULL;
}
// CanHandleOfflineHelper -------
class AppCacheService::CanHandleOfflineHelper : AsyncHelper {
public:
CanHandleOfflineHelper(
AppCacheService* service, const GURL& url,
net::CompletionCallback* callback)
: AsyncHelper(service, callback), url_(url) {
}
virtual void Start() {
service_->storage()->FindResponseForMainRequest(url_, this);
}
private:
// AppCacheStorage::Delegate override
virtual void OnMainResponseFound(
const GURL& url, const AppCacheEntry& entry,
const GURL& fallback_url, const AppCacheEntry& fallback_entry,
int64 cache_id, const GURL& mainfest_url,
bool was_blocked_by_policy);
GURL url_;
DISALLOW_COPY_AND_ASSIGN(CanHandleOfflineHelper);
};
void AppCacheService::CanHandleOfflineHelper::OnMainResponseFound(
const GURL& url, const AppCacheEntry& entry,
const GURL& fallback_url, const AppCacheEntry& fallback_entry,
int64 cache_id, const GURL& mainfest_url,
bool was_blocked_by_policy) {
bool can = !was_blocked_by_policy &&
(entry.has_response_id() || fallback_entry.has_response_id());
CallCallback(can ? net::OK : net::ERR_FAILED);
delete this;
}
// DeleteHelper -------
class AppCacheService::DeleteHelper : public AsyncHelper {
......@@ -82,6 +120,7 @@ class AppCacheService::DeleteHelper : public AsyncHelper {
appcache::AppCacheGroup* group, bool success);
GURL manifest_url_;
DISALLOW_COPY_AND_ASSIGN(DeleteHelper);
};
void AppCacheService::DeleteHelper::OnGroupLoaded(
......@@ -121,6 +160,7 @@ class AppCacheService::GetInfoHelper : AsyncHelper {
virtual void OnAllInfo(AppCacheInfoCollection* collection);
scoped_refptr<AppCacheInfoCollection> collection_;
DISALLOW_COPY_AND_ASSIGN(GetInfoHelper);
};
void AppCacheService::GetInfoHelper::OnAllInfo(
......@@ -155,6 +195,14 @@ void AppCacheService::Initialize(const FilePath& cache_directory,
storage_.reset(storage);
}
void AppCacheService::CanHandleMainResourceOffline(
const GURL& url,
net::CompletionCallback* callback) {
CanHandleOfflineHelper* helper =
new CanHandleOfflineHelper(this, url, callback);
helper->Start();
}
void AppCacheService::GetAllAppCacheInfo(AppCacheInfoCollection* collection,
net::CompletionCallback* callback) {
DCHECK(collection);
......
......@@ -58,6 +58,11 @@ class AppCacheService {
storage_->PurgeMemory();
}
// Determines if a request for 'url' can be satisfied while offline.
// This method always completes asynchronously.
void CanHandleMainResourceOffline(const GURL& url,
net::CompletionCallback* callback);
// Populates 'collection' with info about all of the appcaches stored
// within the service, 'callback' is invoked upon completion. The service
// acquires a reference to the 'collection' until until completion.
......@@ -103,6 +108,7 @@ class AppCacheService {
protected:
class AsyncHelper;
class CanHandleOfflineHelper;
class DeleteHelper;
class GetInfoHelper;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment