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 @@ ...@@ -8,6 +8,7 @@
#include "base/message_loop.h" #include "base/message_loop.h"
#include "base/stl_util-inl.h" #include "base/stl_util-inl.h"
#include "webkit/appcache/appcache_backend_impl.h" #include "webkit/appcache/appcache_backend_impl.h"
#include "webkit/appcache/appcache_entry.h"
#include "webkit/appcache/appcache_storage_impl.h" #include "webkit/appcache/appcache_storage_impl.h"
namespace appcache { namespace appcache {
...@@ -60,6 +61,43 @@ void AppCacheService::AsyncHelper::Cancel() { ...@@ -60,6 +61,43 @@ void AppCacheService::AsyncHelper::Cancel() {
service_ = NULL; 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 ------- // DeleteHelper -------
class AppCacheService::DeleteHelper : public AsyncHelper { class AppCacheService::DeleteHelper : public AsyncHelper {
...@@ -82,6 +120,7 @@ class AppCacheService::DeleteHelper : public AsyncHelper { ...@@ -82,6 +120,7 @@ class AppCacheService::DeleteHelper : public AsyncHelper {
appcache::AppCacheGroup* group, bool success); appcache::AppCacheGroup* group, bool success);
GURL manifest_url_; GURL manifest_url_;
DISALLOW_COPY_AND_ASSIGN(DeleteHelper);
}; };
void AppCacheService::DeleteHelper::OnGroupLoaded( void AppCacheService::DeleteHelper::OnGroupLoaded(
...@@ -121,6 +160,7 @@ class AppCacheService::GetInfoHelper : AsyncHelper { ...@@ -121,6 +160,7 @@ class AppCacheService::GetInfoHelper : AsyncHelper {
virtual void OnAllInfo(AppCacheInfoCollection* collection); virtual void OnAllInfo(AppCacheInfoCollection* collection);
scoped_refptr<AppCacheInfoCollection> collection_; scoped_refptr<AppCacheInfoCollection> collection_;
DISALLOW_COPY_AND_ASSIGN(GetInfoHelper);
}; };
void AppCacheService::GetInfoHelper::OnAllInfo( void AppCacheService::GetInfoHelper::OnAllInfo(
...@@ -155,6 +195,14 @@ void AppCacheService::Initialize(const FilePath& cache_directory, ...@@ -155,6 +195,14 @@ void AppCacheService::Initialize(const FilePath& cache_directory,
storage_.reset(storage); 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, void AppCacheService::GetAllAppCacheInfo(AppCacheInfoCollection* collection,
net::CompletionCallback* callback) { net::CompletionCallback* callback) {
DCHECK(collection); DCHECK(collection);
......
...@@ -58,6 +58,11 @@ class AppCacheService { ...@@ -58,6 +58,11 @@ class AppCacheService {
storage_->PurgeMemory(); 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 // Populates 'collection' with info about all of the appcaches stored
// within the service, 'callback' is invoked upon completion. The service // within the service, 'callback' is invoked upon completion. The service
// acquires a reference to the 'collection' until until completion. // acquires a reference to the 'collection' until until completion.
...@@ -103,6 +108,7 @@ class AppCacheService { ...@@ -103,6 +108,7 @@ class AppCacheService {
protected: protected:
class AsyncHelper; class AsyncHelper;
class CanHandleOfflineHelper;
class DeleteHelper; class DeleteHelper;
class GetInfoHelper; 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