Index: webkit/appcache/appcache_service.cc |
diff --git a/webkit/appcache/appcache_service.cc b/webkit/appcache/appcache_service.cc |
index eca61c5a58e08e091b4448689c57cf60e4d91564..73552c9cd4bc94fba8d9c27a6a3a4ab97c2db06d 100644 |
--- a/webkit/appcache/appcache_service.cc |
+++ b/webkit/appcache/appcache_service.cc |
@@ -12,6 +12,7 @@ |
#include "webkit/appcache/appcache_backend_impl.h" |
#include "webkit/appcache/appcache_entry.h" |
#include "webkit/appcache/appcache_histograms.h" |
+#include "webkit/appcache/appcache_policy.h" |
#include "webkit/appcache/appcache_quota_client.h" |
#include "webkit/appcache/appcache_response.h" |
#include "webkit/appcache/appcache_storage_impl.h" |
@@ -77,11 +78,17 @@ class AppCacheService::CanHandleOfflineHelper : AsyncHelper { |
public: |
CanHandleOfflineHelper( |
AppCacheService* service, const GURL& url, |
- net::CompletionCallback* callback) |
- : AsyncHelper(service, callback), url_(url) { |
+ const GURL& first_party, net::CompletionCallback* callback) |
+ : AsyncHelper(service, callback), url_(url), first_party_(first_party) { |
} |
virtual void Start() { |
+ AppCachePolicy* policy = service_->appcache_policy(); |
+ if (policy && !policy->CanLoadAppCache(url_, first_party_)) { |
+ CallCallback(net::ERR_FAILED); |
+ delete this; |
+ return; |
+ } |
service_->storage()->FindResponseForMainRequest(url_, GURL(), this); |
} |
@@ -90,20 +97,18 @@ class AppCacheService::CanHandleOfflineHelper : AsyncHelper { |
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); |
+ int64 cache_id, const GURL& mainfest_url); |
GURL url_; |
+ GURL first_party_; |
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()); |
+ int64 cache_id, const GURL& manifest_url) { |
+ bool can = (entry.has_response_id() || fallback_entry.has_response_id()); |
CallCallback(can ? net::OK : net::ERR_FAILED); |
delete this; |
} |
@@ -438,9 +443,10 @@ void AppCacheService::Initialize(const FilePath& cache_directory, |
void AppCacheService::CanHandleMainResourceOffline( |
const GURL& url, |
+ const GURL& first_party, |
net::CompletionCallback* callback) { |
CanHandleOfflineHelper* helper = |
- new CanHandleOfflineHelper(this, url, callback); |
+ new CanHandleOfflineHelper(this, url, first_party, callback); |
helper->Start(); |
} |