123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* 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/. */
- #ifndef mozilla_LoadInfo_h
- #define mozilla_LoadInfo_h
- #include "nsIContentPolicy.h"
- #include "nsILoadInfo.h"
- #include "nsIPrincipal.h"
- #include "nsIWeakReferenceUtils.h" // for nsWeakPtr
- #include "nsIURI.h"
- #include "nsTArray.h"
- #include "mozilla/BasePrincipal.h"
- class nsINode;
- class nsPIDOMWindowOuter;
- namespace mozilla {
- namespace dom {
- class XMLHttpRequestMainThread;
- }
- namespace net {
- class OptionalLoadInfoArgs;
- } // namespace net
- namespace ipc {
- // we have to forward declare that function so we can use it as a friend.
- nsresult
- LoadInfoArgsToLoadInfo(const mozilla::net::OptionalLoadInfoArgs& aLoadInfoArgs,
- nsILoadInfo** outLoadInfo);
- } // namespace ipc
- namespace net {
- /**
- * Class that provides an nsILoadInfo implementation.
- *
- * Note that there is no reason why this class should be MOZ_EXPORT, but
- * Thunderbird relies on some insane hacks which require this, so we'll leave it
- * as is for now, but hopefully we'll be able to remove the MOZ_EXPORT keyword
- * from this class at some point. See bug 1149127 for the discussion.
- */
- class MOZ_EXPORT LoadInfo final : public nsILoadInfo
- {
- public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSILOADINFO
- // aLoadingPrincipal MUST NOT BE NULL.
- LoadInfo(nsIPrincipal* aLoadingPrincipal,
- nsIPrincipal* aTriggeringPrincipal,
- nsINode* aLoadingContext,
- nsSecurityFlags aSecurityFlags,
- nsContentPolicyType aContentPolicyType);
- // Constructor used for TYPE_DOCUMENT loads which have a different
- // loadingContext than other loads. This ContextForTopLevelLoad is
- // only used for content policy checks.
- LoadInfo(nsPIDOMWindowOuter* aOuterWindow,
- nsIPrincipal* aTriggeringPrincipal,
- nsISupports* aContextForTopLevelLoad,
- nsSecurityFlags aSecurityFlags);
- // create an exact copy of the loadinfo
- already_AddRefed<nsILoadInfo> Clone() const;
- // hands off!!! don't use CloneWithNewSecFlags unless you know
- // exactly what you are doing - it should only be used within
- // nsBaseChannel::Redirect()
- already_AddRefed<nsILoadInfo>
- CloneWithNewSecFlags(nsSecurityFlags aSecurityFlags) const;
- // creates a copy of the loadinfo which is appropriate to use for a
- // separate request. I.e. not for a redirect or an inner channel, but
- // when a separate request is made with the same security properties.
- already_AddRefed<nsILoadInfo> CloneForNewRequest() const;
- void SetIsPreflight();
- void SetUpgradeInsecureRequests();
- void SetIsFromProcessingFrameAttributes();
- private:
- // private constructor that is only allowed to be called from within
- // HttpChannelParent and FTPChannelParent declared as friends undeneath.
- // In e10s we can not serialize nsINode, hence we store the innerWindowID.
- // Please note that aRedirectChain uses swapElements.
- LoadInfo(nsIPrincipal* aLoadingPrincipal,
- nsIPrincipal* aTriggeringPrincipal,
- nsIPrincipal* aPrincipalToInherit,
- nsSecurityFlags aSecurityFlags,
- nsContentPolicyType aContentPolicyType,
- LoadTainting aTainting,
- bool aUpgradeInsecureRequests,
- bool aVerifySignedContent,
- bool aEnforceSRI,
- bool aForceAllowDataURI,
- bool aForceInheritPrincipalDropped,
- uint64_t aInnerWindowID,
- uint64_t aOuterWindowID,
- uint64_t aParentOuterWindowID,
- uint64_t aFrameOuterWindowID,
- bool aEnforceSecurity,
- bool aInitialSecurityCheckDone,
- bool aIsThirdPartyRequest,
- const NeckoOriginAttributes& aOriginAttributes,
- nsTArray<nsCOMPtr<nsIPrincipal>>& aRedirectChainIncludingInternalRedirects,
- nsTArray<nsCOMPtr<nsIPrincipal>>& aRedirectChain,
- const nsTArray<nsCString>& aUnsafeHeaders,
- bool aForcePreflight,
- bool aIsPreflight,
- bool aLoadTriggeredFromExternal);
- LoadInfo(const LoadInfo& rhs);
- friend nsresult
- mozilla::ipc::LoadInfoArgsToLoadInfo(
- const mozilla::net::OptionalLoadInfoArgs& aLoadInfoArgs,
- nsILoadInfo** outLoadInfo);
- ~LoadInfo();
- void ComputeIsThirdPartyContext(nsPIDOMWindowOuter* aOuterWindow);
- // This function is the *only* function which can change the securityflags
- // of a loadinfo. It only exists because of the XHR code. Don't call it
- // from anywhere else!
- void SetIncludeCookiesSecFlag();
- friend class mozilla::dom::XMLHttpRequestMainThread;
- // if you add a member, please also update the copy constructor
- nsCOMPtr<nsIPrincipal> mLoadingPrincipal;
- nsCOMPtr<nsIPrincipal> mTriggeringPrincipal;
- nsCOMPtr<nsIPrincipal> mPrincipalToInherit;
- nsWeakPtr mLoadingContext;
- nsWeakPtr mContextForTopLevelLoad;
- nsSecurityFlags mSecurityFlags;
- nsContentPolicyType mInternalContentPolicyType;
- LoadTainting mTainting;
- bool mUpgradeInsecureRequests;
- bool mVerifySignedContent;
- bool mEnforceSRI;
- bool mForceAllowDataURI;
- bool mForceInheritPrincipalDropped;
- uint64_t mInnerWindowID;
- uint64_t mOuterWindowID;
- uint64_t mParentOuterWindowID;
- uint64_t mFrameOuterWindowID;
- bool mEnforceSecurity;
- bool mInitialSecurityCheckDone;
- bool mIsThirdPartyContext;
- NeckoOriginAttributes mOriginAttributes;
- nsTArray<nsCOMPtr<nsIPrincipal>> mRedirectChainIncludingInternalRedirects;
- nsTArray<nsCOMPtr<nsIPrincipal>> mRedirectChain;
- nsTArray<nsCString> mCorsUnsafeHeaders;
- bool mForcePreflight;
- bool mIsPreflight;
- bool mLoadTriggeredFromExternal;
- // Is true if this load was triggered by processing the attributes of the
- // browsing context container.
- // See nsILoadInfo.isFromProcessingFrameAttributes
- bool mIsFromProcessingFrameAttributes;
- };
- } // namespace net
- } // namespace mozilla
- #endif // mozilla_LoadInfo_h
|