| Index: content/browser/appcache/appcache_request_handler.cc
|
| diff --git a/content/browser/appcache/appcache_request_handler.cc b/content/browser/appcache/appcache_request_handler.cc
|
| index 870fa7d35200c73a52989a24241190d1cd360aa3..1e2fe1b5ace9b85fab68b04a5174b20dc45fd1c6 100644
|
| --- a/content/browser/appcache/appcache_request_handler.cc
|
| +++ b/content/browser/appcache/appcache_request_handler.cc
|
| @@ -9,8 +9,13 @@
|
| #include "base/bind.h"
|
| #include "content/browser/appcache/appcache.h"
|
| #include "content/browser/appcache/appcache_backend_impl.h"
|
| +#include "content/browser/appcache/appcache_host.h"
|
| +#include "content/browser/appcache/appcache_navigation_handle_core.h"
|
| #include "content/browser/appcache/appcache_policy.h"
|
| #include "content/browser/appcache/appcache_request.h"
|
| +#include "content/browser/appcache/appcache_url_loader_factory.h"
|
| +#include "content/browser/appcache/appcache_url_loader_job.h"
|
| +#include "content/browser/appcache/appcache_url_loader_request.h"
|
| #include "content/browser/appcache/appcache_url_request_job.h"
|
| #include "content/browser/service_worker/service_worker_request_handler.h"
|
| #include "net/url_request/url_request.h"
|
| @@ -223,6 +228,18 @@ void AppCacheRequestHandler::MaybeCompleteCrossSiteTransferInOldProcess(
|
| CompleteCrossSiteTransfer(old_process_id_, old_host_id_);
|
| }
|
|
|
| +// static
|
| +std::unique_ptr<AppCacheRequestHandler>
|
| +AppCacheRequestHandler::InitializeForNavigationNetworkService(
|
| + const ResourceRequest& request,
|
| + AppCacheNavigationHandleCore* appcache_handle_core) {
|
| + std::unique_ptr<AppCacheRequestHandler> handler =
|
| + appcache_handle_core->host()->CreateRequestHandler(
|
| + AppCacheURLLoaderRequest::Create(request), request.resource_type,
|
| + request.should_reset_appcache);
|
| + return handler;
|
| +}
|
| +
|
| void AppCacheRequestHandler::OnDestructionImminent(AppCacheHost* host) {
|
| storage()->CancelDelegateCallbacks(this);
|
| host_ = NULL; // no need to RemoveObserver, the host is being deleted
|
| @@ -316,12 +333,22 @@ std::unique_ptr<AppCacheJob> AppCacheRequestHandler::MaybeLoadMainResource(
|
| // If a page falls into the scope of a ServiceWorker, any matching AppCaches
|
| // should be ignored. This depends on the ServiceWorker handler being invoked
|
| // prior to the AppCache handler.
|
| - if (ServiceWorkerRequestHandler::IsControlledByServiceWorker(
|
| + // TODO(ananta)
|
| + // We need to handle this for AppCache requests initiated for the network
|
| + // service
|
| + if (request_->GetURLRequest() &&
|
| + ServiceWorkerRequestHandler::IsControlledByServiceWorker(
|
| request_->GetURLRequest())) {
|
| host_->enable_cache_selection(false);
|
| return nullptr;
|
| }
|
|
|
| + if (storage()->IsInitialized() &&
|
| + service_->storage()->usage_map()->find(request_->GetURL().GetOrigin()) ==
|
| + service_->storage()->usage_map()->end()) {
|
| + return nullptr;
|
| + }
|
| +
|
| host_->enable_cache_selection(true);
|
|
|
| const AppCacheHost* spawning_host =
|
| @@ -503,4 +530,19 @@ void AppCacheRequestHandler::OnCacheSelectionComplete(AppCacheHost* host) {
|
| ContinueMaybeLoadSubResource();
|
| }
|
|
|
| +void AppCacheRequestHandler::MaybeCreateLoader(
|
| + const ResourceRequest& resource_request,
|
| + ResourceContext* resource_context,
|
| + LoaderCallback callback) {
|
| + // MaybeLoadMainResource will invoke navigation_request_job's methods
|
| + // asynchronously via AppCacheStorage::Delegate.
|
| + navigation_request_job_ = MaybeLoadMainResource(nullptr);
|
| + if (!navigation_request_job_.get()) {
|
| + std::move(callback).Run(StartLoaderCallback());
|
| + return;
|
| + }
|
| + navigation_request_job_->AsURLLoaderJob()->set_loader_callback(
|
| + std::move(callback));
|
| +}
|
| +
|
| } // namespace content
|
|
|