| Index: webkit/appcache/appcache_host.cc
|
| diff --git a/webkit/appcache/appcache_host.cc b/webkit/appcache/appcache_host.cc
|
| index cb040ef0dd681472f9197704dc415344240c1379..ddc9bd2ede544daada51b5a33252798104c0132f 100644
|
| --- a/webkit/appcache/appcache_host.cc
|
| +++ b/webkit/appcache/appcache_host.cc
|
| @@ -9,6 +9,7 @@
|
| #include "base/stringprintf.h"
|
| #include "webkit/appcache/appcache.h"
|
| #include "webkit/appcache/appcache_backend_impl.h"
|
| +#include "webkit/appcache/appcache_policy.h"
|
| #include "webkit/appcache/appcache_request_handler.h"
|
| #include "webkit/quota/quota_manager.h"
|
|
|
| @@ -95,6 +96,19 @@ void AppCacheHost::SelectCache(const GURL& document_url,
|
|
|
| if (!manifest_url.is_empty() &&
|
| (manifest_url.GetOrigin() == document_url.GetOrigin())) {
|
| + DCHECK(!first_party_url_.is_empty());
|
| + AppCachePolicy* policy = service()->appcache_policy();
|
| + if (policy &&
|
| + !policy->CanCreateAppCache(manifest_url, first_party_url_)) {
|
| + FinishCacheSelection(NULL, NULL);
|
| + std::vector<int> host_ids(1, host_id_);
|
| + frontend_->OnEventRaised(host_ids, CHECKING_EVENT);
|
| + frontend_->OnErrorEventRaised(
|
| + host_ids, "Cache creation was blocked by the content policy");
|
| + frontend_->OnContentBlocked(host_id_, manifest_url);
|
| + return;
|
| + }
|
| +
|
| // Note: The client detects if the document was not loaded using HTTP GET
|
| // and invokes SelectCache without a manifest url, so that detection step
|
| // is also skipped here. See WebApplicationCacheHostImpl.cc
|
| @@ -267,8 +281,12 @@ AppCacheRequestHandler* AppCacheHost::CreateRequestHandler(
|
| return NULL;
|
| }
|
|
|
| - if (AppCacheRequestHandler::IsMainResourceType(resource_type))
|
| + if (AppCacheRequestHandler::IsMainResourceType(resource_type)) {
|
| + // Store the first party origin so that it can be used later in SelectCache
|
| + // for checking whether the creation of the appcache is allowed.
|
| + first_party_url_ = request->first_party_for_cookies();
|
| return new AppCacheRequestHandler(this, resource_type);
|
| + }
|
|
|
| if ((associated_cache() && associated_cache()->is_complete()) ||
|
| is_selection_pending()) {
|
| @@ -421,10 +439,6 @@ void AppCacheHost::OnUpdateComplete(AppCacheGroup* group) {
|
| }
|
| }
|
|
|
| -void AppCacheHost::OnContentBlocked(AppCacheGroup* group) {
|
| - frontend_->OnContentBlocked(host_id_, group->manifest_url());
|
| -}
|
| -
|
| void AppCacheHost::SetSwappableCache(AppCacheGroup* group) {
|
| if (!group) {
|
| swappable_cache_ = NULL;
|
|
|