Index: content/browser/frame_host/navigation_request.cc |
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc |
index 94f061ad1f3236a509801b56c99981317f673394..62196e2fa858e25d894e7e14a94a44957b383043 100644 |
--- a/content/browser/frame_host/navigation_request.cc |
+++ b/content/browser/frame_host/navigation_request.cc |
@@ -13,6 +13,7 @@ |
#include "content/browser/loader/navigation_url_loader.h" |
#include "content/browser/site_instance_impl.h" |
#include "content/common/resource_request_body.h" |
+#include "content/common/service_worker/service_worker_types.h" |
#include "content/public/browser/navigation_controller.h" |
#include "content/public/browser/navigation_throttle.h" |
#include "content/public/browser/stream_handle.h" |
@@ -20,6 +21,7 @@ |
#include "net/base/load_flags.h" |
#include "net/http/http_request_headers.h" |
#include "net/url_request/redirect_info.h" |
+#include "third_party/WebKit/public/web/WebSandboxFlags.h" |
namespace content { |
@@ -50,6 +52,19 @@ int LoadFlagFromNavigationType(FrameMsg_Navigate_Type::Value navigation_type) { |
return load_flags; |
} |
+// Next ServiceWorkerProviderHost ID for navigations, starts at -2 and keeps |
+// going down. |
+int g_next_navigation_provider_id = -2; |
+ |
+// Returns the next ServiceWorkerProviderHost ID for navigations, |
+// kInvalidServiceWorkerProviderId if the frame is sandboxed. |
+int GetNextNavigationProviderId(blink::WebSandboxFlags sandbox_flags) { |
+ if ((sandbox_flags & blink::WebSandboxFlags::Origin) == |
+ blink::WebSandboxFlags::Origin) |
+ return kInvalidServiceWorkerProviderId; |
+ return g_next_navigation_provider_id--; |
+} |
+ |
} // namespace |
// static |
@@ -209,6 +224,16 @@ bool NavigationRequest::BeginNavigation() { |
return false; |
} |
+ // Initialize the service_worker_provider_id here. |
+ blink::WebSandboxFlags sandbox_flags = |
+ frame_tree_node_->current_replication_state().sandbox_flags; |
+ int service_worker_provider_id = GetNextNavigationProviderId(sandbox_flags); |
+ |
+ info_->service_worker_provider_id = service_worker_provider_id; |
+ request_params_.service_worker_provider_id = service_worker_provider_id; |
+ navigation_handle_->set_service_worker_provider_id( |
+ service_worker_provider_id); |
+ |
loader_ = NavigationURLLoader::Create( |
frame_tree_node_->navigator()->GetController()->GetBrowserContext(), |
info_.Pass(), this); |