summaryrefslogtreecommitdiffstats
path: root/docshell/base/LoadContext.h
diff options
context:
space:
mode:
Diffstat (limited to 'docshell/base/LoadContext.h')
-rw-r--r--docshell/base/LoadContext.h123
1 files changed, 123 insertions, 0 deletions
diff --git a/docshell/base/LoadContext.h b/docshell/base/LoadContext.h
new file mode 100644
index 000000000..966e7b47f
--- /dev/null
+++ b/docshell/base/LoadContext.h
@@ -0,0 +1,123 @@
+/* -*- 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/. */
+
+#ifndef LoadContext_h
+#define LoadContext_h
+
+#include "SerializedLoadContext.h"
+#include "mozilla/Attributes.h"
+#include "mozilla/BasePrincipal.h"
+#include "nsIWeakReferenceUtils.h"
+#include "mozilla/dom/Element.h"
+#include "nsIInterfaceRequestor.h"
+#include "nsILoadContext.h"
+
+namespace mozilla {
+
+/**
+ * Class that provides nsILoadContext info in Parent process. Typically copied
+ * from Child via SerializedLoadContext.
+ *
+ * Note: this is not the "normal" or "original" nsILoadContext. That is
+ * typically provided by nsDocShell. This is only used when the original
+ * docshell is in a different process and we need to copy certain values from
+ * it.
+ *
+ * Note: we also generate a new nsILoadContext using LoadContext(uint32_t aAppId)
+ * to separate the safebrowsing cookie.
+ */
+
+class LoadContext final
+ : public nsILoadContext
+ , public nsIInterfaceRequestor
+{
+public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSILOADCONTEXT
+ NS_DECL_NSIINTERFACEREQUESTOR
+
+ // appId/inIsolatedMozBrowser arguments override those in SerializedLoadContext
+ // provided by child process.
+ LoadContext(const IPC::SerializedLoadContext& aToCopy,
+ dom::Element* aTopFrameElement,
+ DocShellOriginAttributes& aAttrs)
+ : mTopFrameElement(do_GetWeakReference(aTopFrameElement))
+ , mNestedFrameId(0)
+ , mIsContent(aToCopy.mIsContent)
+ , mUseRemoteTabs(aToCopy.mUseRemoteTabs)
+ , mOriginAttributes(aAttrs)
+#ifdef DEBUG
+ , mIsNotNull(aToCopy.mIsNotNull)
+#endif
+ {
+ }
+
+ // appId/inIsolatedMozBrowser arguments override those in SerializedLoadContext
+ // provided by child process.
+ LoadContext(const IPC::SerializedLoadContext& aToCopy,
+ uint64_t aNestedFrameId,
+ DocShellOriginAttributes& aAttrs)
+ : mTopFrameElement(nullptr)
+ , mNestedFrameId(aNestedFrameId)
+ , mIsContent(aToCopy.mIsContent)
+ , mUseRemoteTabs(aToCopy.mUseRemoteTabs)
+ , mOriginAttributes(aAttrs)
+#ifdef DEBUG
+ , mIsNotNull(aToCopy.mIsNotNull)
+#endif
+ {
+ }
+
+ LoadContext(dom::Element* aTopFrameElement,
+ bool aIsContent,
+ bool aUsePrivateBrowsing,
+ bool aUseRemoteTabs,
+ const DocShellOriginAttributes& aAttrs)
+ : mTopFrameElement(do_GetWeakReference(aTopFrameElement))
+ , mNestedFrameId(0)
+ , mIsContent(aIsContent)
+ , mUseRemoteTabs(aUseRemoteTabs)
+ , mOriginAttributes(aAttrs)
+#ifdef DEBUG
+ , mIsNotNull(true)
+#endif
+ {
+ }
+
+ // Constructor taking reserved origin attributes.
+ explicit LoadContext(DocShellOriginAttributes& aAttrs)
+ : mTopFrameElement(nullptr)
+ , mNestedFrameId(0)
+ , mIsContent(false)
+ , mUseRemoteTabs(false)
+ , mOriginAttributes(aAttrs)
+#ifdef DEBUG
+ , mIsNotNull(true)
+#endif
+ {
+ }
+
+ // Constructor for creating a LoadContext with a given principal's appId and
+ // browser flag.
+ explicit LoadContext(nsIPrincipal* aPrincipal,
+ nsILoadContext* aOptionalBase = nullptr);
+
+private:
+ ~LoadContext() {}
+
+ nsWeakPtr mTopFrameElement;
+ uint64_t mNestedFrameId;
+ bool mIsContent;
+ bool mUseRemoteTabs;
+ DocShellOriginAttributes mOriginAttributes;
+#ifdef DEBUG
+ bool mIsNotNull;
+#endif
+};
+
+} // namespace mozilla
+
+#endif // LoadContext_h