// static RequestMode InternalRequest::MapChannelToRequestMode(nsIChannel* aChannel) { MOZ_ASSERT(aChannel); nsCOMPtr<nsILoadInfo> loadInfo; MOZ_ALWAYS_SUCCEEDS(aChannel->GetLoadInfo(getter_AddRefs(loadInfo))); nsContentPolicyType contentPolicy = loadInfo->InternalContentPolicyType(); if (IsNavigationContentPolicy(contentPolicy)) { return RequestMode::Navigate; } // TODO: remove the worker override once securityMode is fully implemented // (bug 1189945) if (IsWorkerContentPolicy(contentPolicy)) { return RequestMode::Same_origin; } uint32_t securityMode = loadInfo->GetSecurityMode(); switch (securityMode) { case nsILoadInfo::SEC_REQUIRE_SAME_ORIGIN_DATA_INHERITS: case nsILoadInfo::SEC_REQUIRE_SAME_ORIGIN_DATA_IS_BLOCKED: return RequestMode::Same_origin; case nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS: case nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL: return RequestMode::No_cors; case nsILoadInfo::SEC_REQUIRE_CORS_DATA_INHERITS: // TODO: Check additional flag force-preflight after bug 1199693 (bug // 1189945) return RequestMode::Cors; default: MOZ_ASSERT_UNREACHABLE("Unexpected security mode!"); return RequestMode::Same_origin; } }
// static RequestMode InternalRequest::MapChannelToRequestMode(nsIChannel* aChannel) { MOZ_ASSERT(aChannel); nsCOMPtr<nsILoadInfo> loadInfo; MOZ_ALWAYS_TRUE(NS_SUCCEEDED(aChannel->GetLoadInfo(getter_AddRefs(loadInfo)))); // RequestMode deviates from our internal security mode for navigations. // While navigations normally allow cross origin we must set a same-origin // RequestMode to get the correct service worker interception restrictions // in place. // TODO: remove the worker override once securityMode is fully implemented (bug 1189945) nsContentPolicyType contentPolicy = loadInfo->InternalContentPolicyType(); if (IsNavigationContentPolicy(contentPolicy) || IsWorkerContentPolicy(contentPolicy)) { return RequestMode::Same_origin; } uint32_t securityMode; MOZ_ALWAYS_TRUE(NS_SUCCEEDED(loadInfo->GetSecurityMode(&securityMode))); switch(securityMode) { case nsILoadInfo::SEC_REQUIRE_SAME_ORIGIN_DATA_INHERITS: case nsILoadInfo::SEC_REQUIRE_SAME_ORIGIN_DATA_IS_BLOCKED: return RequestMode::Same_origin; case nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS: case nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL: return RequestMode::No_cors; case nsILoadInfo::SEC_REQUIRE_CORS_DATA_INHERITS: // TODO: Check additional flag force-preflight after bug 1199693 (bug 1189945) return RequestMode::Cors; default: // TODO: assert never reached after CorsMode flag removed (bug 1189945) MOZ_ASSERT(securityMode == nsILoadInfo::SEC_NORMAL); break; } // TODO: remove following code once securityMode is fully implemented (bug 1189945) // We only support app:// protocol interception in non-release builds. #ifndef RELEASE_BUILD nsCOMPtr<nsIJARChannel> jarChannel = do_QueryInterface(aChannel); if (jarChannel) { return RequestMode::No_cors; } #endif nsCOMPtr<nsIHttpChannelInternal> httpChannel = do_QueryInterface(aChannel); uint32_t corsMode; MOZ_ALWAYS_TRUE(NS_SUCCEEDED(httpChannel->GetCorsMode(&corsMode))); // This cast is valid due to static asserts in ServiceWorkerManager.cpp. return static_cast<RequestMode>(corsMode); }
// static RequestMode InternalRequest::MapChannelToRequestMode(nsIChannel* aChannel) { MOZ_ASSERT(aChannel); nsCOMPtr<nsILoadInfo> loadInfo; MOZ_ALWAYS_SUCCEEDS(aChannel->GetLoadInfo(getter_AddRefs(loadInfo))); nsContentPolicyType contentPolicy = loadInfo->InternalContentPolicyType(); if (IsNavigationContentPolicy(contentPolicy)) { return RequestMode::Navigate; } // TODO: remove the worker override once securityMode is fully implemented (bug 1189945) if (IsWorkerContentPolicy(contentPolicy)) { return RequestMode::Same_origin; } uint32_t securityMode; MOZ_ALWAYS_SUCCEEDS(loadInfo->GetSecurityMode(&securityMode)); switch(securityMode) { case nsILoadInfo::SEC_REQUIRE_SAME_ORIGIN_DATA_INHERITS: case nsILoadInfo::SEC_REQUIRE_SAME_ORIGIN_DATA_IS_BLOCKED: return RequestMode::Same_origin; case nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS: case nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL: return RequestMode::No_cors; case nsILoadInfo::SEC_REQUIRE_CORS_DATA_INHERITS: // TODO: Check additional flag force-preflight after bug 1199693 (bug 1189945) return RequestMode::Cors; default: // TODO: assert never reached after CorsMode flag removed (bug 1189945) MOZ_ASSERT(securityMode == nsILoadInfo::SEC_NORMAL); break; } // TODO: remove following code once securityMode is fully implemented (bug 1189945) nsCOMPtr<nsIHttpChannelInternal> httpChannel = do_QueryInterface(aChannel); uint32_t corsMode; MOZ_ALWAYS_SUCCEEDS(httpChannel->GetCorsMode(&corsMode)); MOZ_ASSERT(corsMode != nsIHttpChannelInternal::CORS_MODE_NAVIGATE); // This cast is valid due to static asserts in ServiceWorkerManager.cpp. return static_cast<RequestMode>(corsMode); }
bool InternalRequest::IsNavigationRequest() const { return IsNavigationContentPolicy(mContentPolicyType); }