Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2193)

Unified Diff: content/browser/loader/resource_requester_info.cc

Issue 2497223002: Introduce a new ResourceRequesterInfo type for NavigationPreload. (Closed)
Patch Set: incorporated mmenke's comment Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/loader/resource_requester_info.cc
diff --git a/content/browser/loader/resource_requester_info.cc b/content/browser/loader/resource_requester_info.cc
index 3e71b2967ac306eb47b4e8affe718d16a57f210e..7b4f1e502475f8e9e8ca3b8ac3c76e671d0d8f00 100644
--- a/content/browser/loader/resource_requester_info.cc
+++ b/content/browser/loader/resource_requester_info.cc
@@ -10,10 +10,25 @@
#include "content/browser/blob_storage/chrome_blob_storage_context.h"
#include "content/browser/service_worker/service_worker_context_wrapper.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/resource_context.h"
+#include "content/public/common/browser_side_navigation_policy.h"
#include "storage/browser/fileapi/file_system_context.h"
namespace content {
+namespace {
+
+void GetContextsCallbackForNavigationPreload(
+ scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
+ ResourceType resource_type,
+ ResourceContext** resource_context_out,
+ net::URLRequestContext** request_context_out) {
+ *resource_context_out = service_worker_context->resource_context();
+ *request_context_out = (*resource_context_out)->GetRequestContext();
+}
+
+} // namespace
+
ResourceRequesterInfo::ResourceRequesterInfo(
RequesterType type,
int child_id,
@@ -85,4 +100,31 @@ ResourceRequesterInfo::CreateForDownloadOrPageSave(int child_id) {
GetContextsCallback()));
}
+scoped_refptr<ResourceRequesterInfo>
+ResourceRequesterInfo::CreateForNavigationPreload(
+ ResourceRequesterInfo* original_request_info) {
+ GetContextsCallback get_contexts_callback =
+ original_request_info->get_contexts_callback_;
+ if (IsBrowserSideNavigationEnabled()) {
+ DCHECK(original_request_info->IsBrowserSideNavigation());
+ DCHECK(!get_contexts_callback);
+ DCHECK(original_request_info->service_worker_context());
+ // The requester info for browser side navigation doesn't have the
+ // get_contexts_callback. So create the callback here which gets the
+ // ResourceContext and the URLRequestContext form ServiceWorkerContext.
+ get_contexts_callback =
+ base::Bind(&GetContextsCallbackForNavigationPreload,
+ scoped_refptr<ServiceWorkerContextWrapper>(
+ original_request_info->service_worker_context()));
+ } else {
+ DCHECK(original_request_info->IsRenderer());
+ DCHECK(get_contexts_callback);
+ }
+
+ return scoped_refptr<ResourceRequesterInfo>(new ResourceRequesterInfo(
+ RequesterType::NAVIGATION_PRELOAD, -1, nullptr /* appcache_service */,
+ nullptr /* blob_storage_context */, nullptr /* file_system_context */,
+ original_request_info->service_worker_context(), get_contexts_callback));
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698