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..5ea30673024d9638350539ac4acf2bed6137f591 100644 |
--- a/content/browser/appcache/appcache_request_handler.cc |
+++ b/content/browser/appcache/appcache_request_handler.cc |
@@ -9,10 +9,16 @@ |
#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 "content/browser/url_loader_factory_getter.h" |
#include "net/url_request/url_request.h" |
#include "net/url_request/url_request_job.h" |
@@ -223,6 +229,20 @@ void AppCacheRequestHandler::MaybeCompleteCrossSiteTransferInOldProcess( |
CompleteCrossSiteTransfer(old_process_id_, old_host_id_); |
} |
+// static |
+std::unique_ptr<AppCacheRequestHandler> |
+AppCacheRequestHandler::InitializeForNavigationNetworkService( |
+ const ResourceRequest& request, |
+ AppCacheNavigationHandleCore* appcache_handle_core, |
+ URLLoaderFactoryGetter* url_loader_factory_getter) { |
+ std::unique_ptr<AppCacheRequestHandler> handler = |
+ appcache_handle_core->host()->CreateRequestHandler( |
+ AppCacheURLLoaderRequest::Create(request), request.resource_type, |
+ request.should_reset_appcache); |
+ handler->url_loader_factory_getter_ = url_loader_factory_getter; |
+ return handler; |
+} |
+ |
void AppCacheRequestHandler::OnDestructionImminent(AppCacheHost* host) { |
storage()->CancelDelegateCallbacks(this); |
host_ = NULL; // no need to RemoveObserver, the host is being deleted |
@@ -316,12 +336,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 +533,19 @@ void AppCacheRequestHandler::OnCacheSelectionComplete(AppCacheHost* host) { |
ContinueMaybeLoadSubResource(); |
} |
+void AppCacheRequestHandler::MaybeCreateLoader( |
+ const ResourceRequest& resource_request, |
+ ResourceContext* resource_context, |
+ LoaderCallback callback) { |
+ navigation_request_job_ = MaybeLoadMainResource(nullptr); |
+ if (!navigation_request_job_.get()) { |
+ std::move(callback).Run(StartLoaderCallback()); |
+ return; |
+ } |
+ navigation_request_job_->AsURLLoaderJob()->SetURLLoaderFactoryGetter( |
+ url_loader_factory_getter_.get()); |
+ navigation_request_job_->AsURLLoaderJob()->set_loader_callback( |
+ std::move(callback)); |
kinuko
2017/06/08 10:31:21
nit: for readability maybe could we have a comment
ananta
2017/06/08 13:48:55
Done.
|
+} |
+ |
} // namespace content |