/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
namespace mozilla::dom { // The global is used to extract the principal.
SafeRefPtr<InternalRequest> InternalRequest::GetRequestConstructorCopy(
nsIGlobalObject* aGlobal, ErrorResult& aRv) const {
MOZ_RELEASE_ASSERT(!mURLList.IsEmpty(), "Internal Request's urlList should not be empty when " "copied from constructor."); auto copy =
MakeSafeRefPtr<InternalRequest>(mURLList.LastElement(), mFragment);
copy->SetMethod(mMethod);
copy->mHeaders = new InternalHeaders(*mHeaders);
copy->SetUnsafeRequest();
copy->mBodyStream = mBodyStream;
copy->mBodyLength = mBodyLength; // The "client" is not stored in our implementation. Fetch API users should // use the appropriate window/document/principal and other Gecko security // mechanisms as appropriate.
copy->mReferrer = mReferrer;
copy->mReferrerPolicy = mReferrerPolicy;
copy->mEnvironmentReferrerPolicy = mEnvironmentReferrerPolicy;
copy->mIntegrity = mIntegrity;
copy->mMozErrors = mMozErrors;
/* static */
RequestDestination InternalRequest::MapContentPolicyTypeToRequestDestination(
nsContentPolicyType aContentPolicyType) { switch (aContentPolicyType) { case nsIContentPolicy::TYPE_OTHER: return RequestDestination::_empty; case nsIContentPolicy::TYPE_INTERNAL_SCRIPT: case nsIContentPolicy::TYPE_INTERNAL_SCRIPT_PRELOAD: case nsIContentPolicy::TYPE_INTERNAL_MODULE: case nsIContentPolicy::TYPE_INTERNAL_MODULE_PRELOAD: case nsIContentPolicy::TYPE_INTERNAL_SERVICE_WORKER: case nsIContentPolicy::TYPE_INTERNAL_WORKER_IMPORT_SCRIPTS: case nsIContentPolicy::TYPE_INTERNAL_CHROMEUTILS_COMPILED_SCRIPT: case nsIContentPolicy::TYPE_INTERNAL_FRAME_MESSAGEMANAGER_SCRIPT: case nsIContentPolicy::TYPE_SCRIPT: return RequestDestination::Script; case nsIContentPolicy::TYPE_INTERNAL_WORKER: case nsIContentPolicy::TYPE_INTERNAL_WORKER_STATIC_MODULE: return RequestDestination::Worker; case nsIContentPolicy::TYPE_INTERNAL_SHARED_WORKER: return RequestDestination::Sharedworker; case nsIContentPolicy::TYPE_IMAGESET: case nsIContentPolicy::TYPE_INTERNAL_IMAGE: case nsIContentPolicy::TYPE_INTERNAL_IMAGE_PRELOAD: case nsIContentPolicy::TYPE_INTERNAL_IMAGE_FAVICON: case nsIContentPolicy::TYPE_IMAGE: return RequestDestination::Image; case nsIContentPolicy::TYPE_STYLESHEET: case nsIContentPolicy::TYPE_INTERNAL_STYLESHEET: case nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD: return RequestDestination::Style; case nsIContentPolicy::TYPE_OBJECT: case nsIContentPolicy::TYPE_INTERNAL_OBJECT: return RequestDestination::Object; case nsIContentPolicy::TYPE_INTERNAL_EMBED: return RequestDestination::Embed; case nsIContentPolicy::TYPE_DOCUMENT: return RequestDestination::Document; case nsIContentPolicy::TYPE_SUBDOCUMENT: case nsIContentPolicy::TYPE_INTERNAL_IFRAME: return RequestDestination::Iframe; case nsIContentPolicy::TYPE_INTERNAL_FRAME: return RequestDestination::Frame; case nsIContentPolicy::TYPE_PING: return RequestDestination::_empty; case nsIContentPolicy::TYPE_XMLHTTPREQUEST: case nsIContentPolicy::TYPE_INTERNAL_XMLHTTPREQUEST_ASYNC: case nsIContentPolicy::TYPE_INTERNAL_XMLHTTPREQUEST_SYNC: return RequestDestination::_empty; case nsIContentPolicy::TYPE_INTERNAL_EVENTSOURCE: return RequestDestination::_empty; case nsIContentPolicy::TYPE_OBJECT_SUBREQUEST: return RequestDestination::_empty; case nsIContentPolicy::TYPE_DTD: case nsIContentPolicy::TYPE_INTERNAL_DTD: case nsIContentPolicy::TYPE_INTERNAL_FORCE_ALLOWED_DTD: return RequestDestination::_empty; case nsIContentPolicy::TYPE_FONT: case nsIContentPolicy::TYPE_INTERNAL_FONT_PRELOAD: case nsIContentPolicy::TYPE_UA_FONT: return RequestDestination::Font; case nsIContentPolicy::TYPE_MEDIA: return RequestDestination::_empty; case nsIContentPolicy::TYPE_INTERNAL_AUDIO: return RequestDestination::Audio; case nsIContentPolicy::TYPE_INTERNAL_VIDEO: return RequestDestination::Video; case nsIContentPolicy::TYPE_INTERNAL_TRACK: return RequestDestination::Track; case nsIContentPolicy::TYPE_WEBSOCKET: return RequestDestination::_empty; case nsIContentPolicy::TYPE_CSP_REPORT: return RequestDestination::Report; case nsIContentPolicy::TYPE_XSLT: return RequestDestination::Xslt; case nsIContentPolicy::TYPE_BEACON: return RequestDestination::_empty; case nsIContentPolicy::TYPE_FETCH: case nsIContentPolicy::TYPE_INTERNAL_FETCH_PRELOAD: return RequestDestination::_empty; case nsIContentPolicy::TYPE_WEB_MANIFEST: return RequestDestination::Manifest; case nsIContentPolicy::TYPE_SAVEAS_DOWNLOAD: return RequestDestination::_empty; case nsIContentPolicy::TYPE_SPECULATIVE: return RequestDestination::_empty; case nsIContentPolicy::TYPE_INTERNAL_AUDIOWORKLET: return RequestDestination::Audioworklet; case nsIContentPolicy::TYPE_INTERNAL_PAINTWORKLET: return RequestDestination::Paintworklet; case nsIContentPolicy::TYPE_PROXIED_WEBRTC_MEDIA: return RequestDestination::_empty; case nsIContentPolicy::TYPE_WEB_IDENTITY: return RequestDestination::_empty; case nsIContentPolicy::TYPE_WEB_TRANSPORT: return RequestDestination::_empty; case nsIContentPolicy::TYPE_INTERNAL_EXTERNAL_RESOURCE: return RequestDestination::Image; case nsIContentPolicy::TYPE_JSON: case nsIContentPolicy::TYPE_INTERNAL_JSON_PRELOAD: return RequestDestination::Json; case nsIContentPolicy::TYPE_INVALID: case nsIContentPolicy::TYPE_END: break; // Do not add default: so that compilers can catch the missing case.
}
// static bool InternalRequest::IsNavigationContentPolicy(
nsContentPolicyType aContentPolicyType) { // https://fetch.spec.whatwg.org/#navigation-request-context // // A navigation request context is one of "form", "frame", "hyperlink", // "iframe", "internal" (as long as context frame type is not "none"), // "location", "metarefresh", and "prerender". // // Note, all of these request types are effectively initiated by nsDocShell. return aContentPolicyType == nsIContentPolicy::TYPE_DOCUMENT ||
aContentPolicyType == nsIContentPolicy::TYPE_SUBDOCUMENT ||
aContentPolicyType == nsIContentPolicy::TYPE_INTERNAL_FRAME ||
aContentPolicyType == nsIContentPolicy::TYPE_INTERNAL_IFRAME;
}
// static bool InternalRequest::IsWorkerContentPolicy(
nsContentPolicyType aContentPolicyType) { // https://fetch.spec.whatwg.org/#worker-request-context // // A worker request context is one of "serviceworker", "sharedworker", and // "worker". // // Note, service workers are not included here because currently there is // no way to generate a Request with a "serviceworker" RequestDestination. // ServiceWorker scripts cannot be intercepted. return aContentPolicyType == nsIContentPolicy::TYPE_INTERNAL_WORKER ||
aContentPolicyType == nsIContentPolicy::TYPE_INTERNAL_SHARED_WORKER;
}
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;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.