gecko-dev/netwerk/ipc/NeckoChannelParams.ipdlh

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

373 строки
13 KiB
Plaintext
Исходник Обычный вид История

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set sw=2 ts=8 et tw=80 ft=c: */
/* 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/. */
include protocol PHttpChannel;
include protocol PFTPChannel;
include protocol PChildToParentStream;
include BlobTypes;
include ClientIPCTypes;
include URIParams;
include IPCServiceWorkerDescriptor;
include IPCStream;
include PBackgroundSharedTypes;
include DOMTypes;
using mozilla::OriginAttributes from "mozilla/ipc/BackgroundUtils.h";
using RequestHeaderTuples from "mozilla/net/PHttpChannelParams.h";
using struct nsHttpAtom from "nsHttp.h";
using class mozilla::net::nsHttpResponseHead from "nsHttpResponseHead.h";
using class mozilla::TimeStamp from "mozilla/TimeStamp.h";
namespace mozilla {
namespace net {
//-----------------------------------------------------------------------------
// CookieSettings IPDL structs
//-----------------------------------------------------------------------------
struct CookiePermissionData
{
PrincipalInfo principalInfo;
uint32_t cookiePermission;
};
struct CookieSettingsArgs
{
// Copy of the cookie behavior and permissions for the top-level document.
uint32_t cookieBehavior;
CookiePermissionData[] cookiePermissions;
bool isFixed;
};
//-----------------------------------------------------------------------------
// Preferrer alternative data type
//-----------------------------------------------------------------------------
struct PreferredAlternativeDataTypeParams
{
nsCString type;
nsCString contentType;
bool deliverAltData;
};
//-----------------------------------------------------------------------------
// LoadInfo IPDL structs
//-----------------------------------------------------------------------------
struct RedirectHistoryEntryInfo
{
PrincipalInfo principalInfo;
URIParams? referrerUri;
nsCString remoteAddress;
};
struct LoadInfoArgs
{
PrincipalInfo? requestingPrincipalInfo;
PrincipalInfo triggeringPrincipalInfo;
PrincipalInfo? principalToInheritInfo;
PrincipalInfo? sandboxedLoadingPrincipalInfo;
PrincipalInfo? topLevelPrincipalInfo;
PrincipalInfo? topLevelStorageAreaPrincipalInfo;
URIParams? resultPrincipalURI;
uint32_t securityFlags;
uint32_t contentPolicyType;
uint32_t tainting;
bool blockAllMixedContent;
bool upgradeInsecureRequests;
bool browserUpgradeInsecureRequests;
bool browserWouldUpgradeInsecureRequests;
bool forceAllowDataURI;
bool allowInsecureRedirectToDataURI;
bool bypassCORSChecks;
bool skipContentPolicyCheckForWebRequest;
bool forceInheritPrincipalDropped;
uint64_t innerWindowID;
uint64_t outerWindowID;
uint64_t parentOuterWindowID;
uint64_t topOuterWindowID;
uint64_t frameOuterWindowID;
uint64_t browsingContextID;
uint64_t frameBrowsingContextID;
bool initialSecurityCheckDone;
bool isInThirdPartyContext;
bool isDocshellReload;
bool isFormSubmission;
bool sendCSPViolationEvents;
OriginAttributes originAttributes;
RedirectHistoryEntryInfo[] redirectChainIncludingInternalRedirects;
RedirectHistoryEntryInfo[] redirectChain;
/**
* Ancestor data for use with the WebRequest API.
* See nsILoadInfo.idl for details.
*/
PrincipalInfo[] ancestorPrincipals;
uint64_t[] ancestorOuterWindowIDs;
/**
* ClientInfo structure representing the window or worker that triggered
* this network request. May be Nothing if its a system internal request.
*/
IPCClientInfo? clientInfo;
/**
* Non-subresource requests will result in the creation of a window or
* worker client. The reserved and initial ClientInfo values represent
* this resulting client. An initial ClientInfo represents an initial
* about:blank window that will be re-used while a reserved ClientInfo
* represents a to-be-newly-created window/worker.
*/
IPCClientInfo? reservedClientInfo;
IPCClientInfo? initialClientInfo;
/**
* Subresource loads may have a controller set based on their owning
* window/worker client. We must send this across IPC to support
* performing interception in the parent.
*/
IPCServiceWorkerDescriptor? controller;
nsCString[] corsUnsafeHeaders;
bool forcePreflight;
bool isPreflight;
bool loadTriggeredFromExternal;
bool serviceWorkerTaintingSynthesized;
bool documentHasUserInteracted;
bool documentHasLoaded;
nsString cspNonce;
bool skipContentSniffing;
bool isFromProcessingFrameAttributes;
CookieSettingsArgs cookieSettings;
uint32_t requestBlockingReason;
CSPInfo? cspToInheritInfo;
};
/**
* This structure is used to carry selected properties of a LoadInfo
* object to child processes to merge LoadInfo changes from the parent
* process. We don't want to use LoadInfoArgs for that since it's
* too huge and we only care about small subpart of properties anyway.
*/
struct ParentLoadInfoForwarderArgs
{
// WebExtextensions' WebRequest API allows extensions to intercept and
// redirect a channel to a data URI. This modifications happens in
// the parent and needs to be mirrored to the child so that security
// checks can pass.
bool allowInsecureRedirectToDataURI;
// WebExtextensions WebRequest API allows extentions to redirect a channel
// Before the CORS-preflight was fetched, which can lead into unexpeced CORS blocks.
// We can set this to skip the Cors Checks for the old Channel.
bool bypassCORSChecks;
// The ServiceWorker controller that may be set in the parent when
// interception occurs.
IPCServiceWorkerDescriptor? controller;
// The service worker may synthesize a Response with a particular
// tainting value.
uint32_t tainting;
Bug 1572933: Introduce an attribute to raise the cache priority. r=pbro,mayhemer For now, when we turn on `disable cache` switch in DevTools[1], web page loads the contents without using the cache. Furthermore, DevTools as well comes to load the contents DevTools inspects without using the cache. And, if the loaded contents from the web page and DevTools was different, becomes impossible to inspect the content correctly. Thus, in order to make DevTools refer the same content the web page loaded, makes DevTools load the contents inspecting from the cache at first, no matter if disables the switch or not. When turns on disable cache in DevTools, `LOAD_BYPASS_CACHE` flag is set into `loadFlags` in the `docshell`.[2] The other hand, the content DevTools inspects is loaded from a channel DevTools creates with `LOAD_FROM_CACHE` flag.[3] However, because this channel is belong to same `loadGroup` of the `docshell`, `LOAD_BYPASS_CACHE` is inherited and is choosen even if `LOAD_FROM_CACHE` is set. Thus, in this patch, we introduce an attribute `preferCacheLoadOverBypass` which raises the priority for `LOAD_FROM_CACHE` above `LOAD_BYPASS_CACHE` and `LOAD_BYPASS_LOCAL_CACHE`. [1] https://developer.mozilla.org/en-US/docs/Tools/Settings#Advanced_settings [2] https://searchfox.org/mozilla-central/source/devtools/server/actors/targets/browsing-context.js#1227 [3] https://searchfox.org/mozilla-central/source/devtools/shared/DevToolsUtils.js#542-544 Differential Revision: https://phabricator.services.mozilla.com/D44626 --HG-- extra : moz-landing-system : lando
2019-09-09 03:57:05 +03:00
// This flag is used for any browsing context where we should not sniff
// the content type. E.g if an iframe has the XCTO nosniff header, then
// that flag is set to true so we skip content sniffing for that browsing
bool skipContentSniffing;
// We must also note that the tainting value was explicitly set
// by the service worker.
bool serviceWorkerTaintingSynthesized;
bool documentHasUserInteracted;
bool documentHasLoaded;
CookieSettingsArgs? cookieSettings;
uint32_t requestBlockingReason;
// IMPORTANT: when you add new properites here you must also update
// LoadInfoToParentLoadInfoForwarder and MergeParentLoadInfoForwarder
// in BackgroundUtils.cpp/.h!
};
/**
* This structure is used to carry selected properties of a LoadInfo
* object to the parent process that might have changed in the child
* during a redirect. We don't want to use LoadInfoArgs for that since
* it's too huge and we only care about small subpart of properties
* anyway.
*/
struct ChildLoadInfoForwarderArgs
{
// The reserved and initial ClientInfo values may change during a
// redirect if the new channel is cross-origin to the old channel.
IPCClientInfo? reservedClientInfo;
IPCClientInfo? initialClientInfo;
// The ServiceWorker controller may be cleared in the child during
// a redirect.
IPCServiceWorkerDescriptor? controller;
uint32_t requestBlockingReason;
};
//-----------------------------------------------------------------------------
// HTTP IPDL structs
//-----------------------------------------------------------------------------
struct CorsPreflightArgs
{
nsCString[] unsafeHeaders;
};
struct HttpChannelOpenArgs
{
URIParams uri;
// - TODO: bug 571161: unclear if any HTTP channel clients ever
// set originalURI != uri (about:credits?); also not clear if
// chrome channel would ever need to know. Get rid of next arg?
URIParams? original;
URIParams? doc;
nsIReferrerInfo referrerInfo;
URIParams? apiRedirectTo;
URIParams? topWindowURI;
nsIPrincipal? contentBlockingAllowListPrincipal;
uint32_t loadFlags;
RequestHeaderTuples requestHeaders;
nsCString requestMethod;
IPCStream? uploadStream;
bool uploadStreamHasHeaders;
int16_t priority;
uint32_t classOfService;
uint8_t redirectionLimit;
bool allowSTS;
uint32_t thirdPartyFlags;
bool resumeAt;
uint64_t startPos;
nsCString entityID;
bool chooseApplicationCache;
nsCString appCacheClientID;
bool allowSpdy;
bool allowAltSvc;
bool beConservative;
uint32_t tlsFlags;
LoadInfoArgs? loadInfo;
nsHttpResponseHead? synthesizedResponseHead;
nsCString synthesizedSecurityInfoSerialization;
uint32_t cacheKey;
uint64_t requestContextID;
CorsPreflightArgs? preflightArgs;
uint32_t initialRwin;
bool blockAuthPrompt;
bool suspendAfterSynthesizeResponse;
bool allowStaleCacheContent;
Bug 1572933: Introduce an attribute to raise the cache priority. r=pbro,mayhemer For now, when we turn on `disable cache` switch in DevTools[1], web page loads the contents without using the cache. Furthermore, DevTools as well comes to load the contents DevTools inspects without using the cache. And, if the loaded contents from the web page and DevTools was different, becomes impossible to inspect the content correctly. Thus, in order to make DevTools refer the same content the web page loaded, makes DevTools load the contents inspecting from the cache at first, no matter if disables the switch or not. When turns on disable cache in DevTools, `LOAD_BYPASS_CACHE` flag is set into `loadFlags` in the `docshell`.[2] The other hand, the content DevTools inspects is loaded from a channel DevTools creates with `LOAD_FROM_CACHE` flag.[3] However, because this channel is belong to same `loadGroup` of the `docshell`, `LOAD_BYPASS_CACHE` is inherited and is choosen even if `LOAD_FROM_CACHE` is set. Thus, in this patch, we introduce an attribute `preferCacheLoadOverBypass` which raises the priority for `LOAD_FROM_CACHE` above `LOAD_BYPASS_CACHE` and `LOAD_BYPASS_LOCAL_CACHE`. [1] https://developer.mozilla.org/en-US/docs/Tools/Settings#Advanced_settings [2] https://searchfox.org/mozilla-central/source/devtools/server/actors/targets/browsing-context.js#1227 [3] https://searchfox.org/mozilla-central/source/devtools/shared/DevToolsUtils.js#542-544 Differential Revision: https://phabricator.services.mozilla.com/D44626 --HG-- extra : moz-landing-system : lando
2019-09-09 03:57:05 +03:00
bool preferCacheLoadOverBypass;
nsCString contentTypeHint;
uint32_t corsMode;
uint32_t redirectMode;
uint64_t channelId;
nsString integrityMetadata;
uint64_t contentWindowId;
PreferredAlternativeDataTypeParams[] preferredAlternativeTypes;
uint64_t topLevelOuterContentWindowId;
TimeStamp launchServiceWorkerStart;
TimeStamp launchServiceWorkerEnd;
TimeStamp dispatchFetchEventStart;
TimeStamp dispatchFetchEventEnd;
TimeStamp handleFetchEventStart;
TimeStamp handleFetchEventEnd;
bool forceMainDocumentChannel;
TimeStamp navigationStartTimeStamp;
bool hasNonEmptySandboxingFlag;
};
struct HttpChannelConnectArgs
{
uint32_t registrarId;
bool shouldIntercept;
};
union HttpChannelCreationArgs
{
HttpChannelOpenArgs; // For AsyncOpen: the common case.
HttpChannelConnectArgs; // Used for redirected-to channels
};
//-----------------------------------------------------------------------------
// FTP IPDL structs
//-----------------------------------------------------------------------------
struct FTPChannelOpenArgs
{
URIParams uri;
uint64_t startPos;
nsCString entityID;
IPCStream? uploadStream;
LoadInfoArgs? loadInfo;
uint32_t loadFlags;
};
struct FTPChannelConnectArgs
{
uint32_t channelId;
};
union FTPChannelCreationArgs
{
FTPChannelOpenArgs; // For AsyncOpen: the common case.
FTPChannelConnectArgs; // Used for redirected-to channels
};
struct HttpChannelDiverterArgs
{
PHttpChannel mChannel;
bool mApplyConversion;
};
union ChannelDiverterArgs
{
HttpChannelDiverterArgs;
PFTPChannel;
};
struct CookieStruct
{
nsCString name;
nsCString value;
nsCString host;
nsCString path;
int64_t expiry;
int64_t lastAccessed;
int64_t creationTime;
bool isHttpOnly;
bool isSession;
bool isSecure;
int32_t sameSite;
int32_t rawSameSite;
};
struct DocumentChannelCreationArgs {
URIParams? topWindowURI;
DocShellLoadStateInit loadState;
LoadInfoArgs loadInfo;
PrincipalInfo? contentBlockingAllowListPrincipal;
nsString? initiatorType;
nsString customUserAgent;
uint64_t channelId;
uint32_t loadFlags;
uint32_t loadType;
uint32_t cacheKey;
bool isActive;
bool isTopLevelDoc;
};
} // namespace ipc
} // namespace mozilla