Bug 1807268 - Fix verifyOpenAllInNewTabsOptionTest UI test r=ohorvath
[gecko.git] / docshell / base / LoadContext.cpp
blob2e501be221d80b77fadf68a2dcb38446ea8b1a53
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "mozilla/Assertions.h"
8 #include "mozilla/BasePrincipal.h"
9 #include "mozilla/dom/ToJSValue.h"
10 #include "mozilla/LoadContext.h"
11 #include "mozilla/Preferences.h"
12 #include "mozilla/dom/Element.h"
13 #include "mozilla/dom/ScriptSettings.h" // for AutoJSAPI
14 #include "mozilla/dom/BrowsingContext.h"
15 #include "nsContentUtils.h"
16 #include "xpcpublic.h"
18 namespace mozilla {
20 NS_IMPL_ISUPPORTS(LoadContext, nsILoadContext, nsIInterfaceRequestor)
22 LoadContext::LoadContext(const IPC::SerializedLoadContext& aToCopy,
23 dom::Element* aTopFrameElement,
24 OriginAttributes& aAttrs)
25 : mTopFrameElement(do_GetWeakReference(aTopFrameElement)),
26 mIsContent(aToCopy.mIsContent),
27 mUseRemoteTabs(aToCopy.mUseRemoteTabs),
28 mUseRemoteSubframes(aToCopy.mUseRemoteSubframes),
29 mUseTrackingProtection(aToCopy.mUseTrackingProtection),
30 #ifdef DEBUG
31 mIsNotNull(aToCopy.mIsNotNull),
32 #endif
33 mOriginAttributes(aAttrs) {
36 LoadContext::LoadContext(OriginAttributes& aAttrs)
37 : mTopFrameElement(nullptr),
38 mIsContent(false),
39 mUseRemoteTabs(false),
40 mUseRemoteSubframes(false),
41 mUseTrackingProtection(false),
42 #ifdef DEBUG
43 mIsNotNull(true),
44 #endif
45 mOriginAttributes(aAttrs) {
48 LoadContext::LoadContext(nsIPrincipal* aPrincipal,
49 nsILoadContext* aOptionalBase)
50 : mTopFrameElement(nullptr),
51 mIsContent(true),
52 mUseRemoteTabs(false),
53 mUseRemoteSubframes(false),
54 mUseTrackingProtection(false),
55 #ifdef DEBUG
56 mIsNotNull(true),
57 #endif
58 mOriginAttributes(aPrincipal->OriginAttributesRef()) {
59 if (!aOptionalBase) {
60 return;
63 MOZ_ALWAYS_SUCCEEDS(aOptionalBase->GetIsContent(&mIsContent));
64 MOZ_ALWAYS_SUCCEEDS(aOptionalBase->GetUseRemoteTabs(&mUseRemoteTabs));
65 MOZ_ALWAYS_SUCCEEDS(
66 aOptionalBase->GetUseRemoteSubframes(&mUseRemoteSubframes));
67 MOZ_ALWAYS_SUCCEEDS(
68 aOptionalBase->GetUseTrackingProtection(&mUseTrackingProtection));
71 LoadContext::~LoadContext() = default;
73 //-----------------------------------------------------------------------------
74 // LoadContext::nsILoadContext
75 //-----------------------------------------------------------------------------
77 NS_IMETHODIMP
78 LoadContext::GetAssociatedWindow(mozIDOMWindowProxy**) {
79 MOZ_ASSERT(mIsNotNull);
81 // can't support this in the parent process
82 return NS_ERROR_UNEXPECTED;
85 NS_IMETHODIMP
86 LoadContext::GetTopWindow(mozIDOMWindowProxy**) {
87 MOZ_ASSERT(mIsNotNull);
89 // can't support this in the parent process
90 return NS_ERROR_UNEXPECTED;
93 NS_IMETHODIMP
94 LoadContext::GetTopFrameElement(dom::Element** aElement) {
95 nsCOMPtr<dom::Element> element = do_QueryReferent(mTopFrameElement);
96 element.forget(aElement);
97 return NS_OK;
100 NS_IMETHODIMP
101 LoadContext::GetIsContent(bool* aIsContent) {
102 MOZ_ASSERT(mIsNotNull);
104 NS_ENSURE_ARG_POINTER(aIsContent);
106 *aIsContent = mIsContent;
107 return NS_OK;
110 NS_IMETHODIMP
111 LoadContext::GetUsePrivateBrowsing(bool* aUsePrivateBrowsing) {
112 MOZ_ASSERT(mIsNotNull);
114 NS_ENSURE_ARG_POINTER(aUsePrivateBrowsing);
116 *aUsePrivateBrowsing = mOriginAttributes.mPrivateBrowsingId > 0;
117 return NS_OK;
120 NS_IMETHODIMP
121 LoadContext::SetUsePrivateBrowsing(bool aUsePrivateBrowsing) {
122 MOZ_ASSERT(mIsNotNull);
124 // We shouldn't need this on parent...
125 return NS_ERROR_UNEXPECTED;
128 NS_IMETHODIMP
129 LoadContext::SetPrivateBrowsing(bool aUsePrivateBrowsing) {
130 MOZ_ASSERT(mIsNotNull);
132 // We shouldn't need this on parent...
133 return NS_ERROR_UNEXPECTED;
136 NS_IMETHODIMP
137 LoadContext::GetUseRemoteTabs(bool* aUseRemoteTabs) {
138 MOZ_ASSERT(mIsNotNull);
140 NS_ENSURE_ARG_POINTER(aUseRemoteTabs);
142 *aUseRemoteTabs = mUseRemoteTabs;
143 return NS_OK;
146 NS_IMETHODIMP
147 LoadContext::SetRemoteTabs(bool aUseRemoteTabs) {
148 MOZ_ASSERT(mIsNotNull);
150 // We shouldn't need this on parent...
151 return NS_ERROR_UNEXPECTED;
154 NS_IMETHODIMP
155 LoadContext::GetUseRemoteSubframes(bool* aUseRemoteSubframes) {
156 MOZ_ASSERT(mIsNotNull);
158 NS_ENSURE_ARG_POINTER(aUseRemoteSubframes);
160 *aUseRemoteSubframes = mUseRemoteSubframes;
161 return NS_OK;
164 NS_IMETHODIMP
165 LoadContext::SetRemoteSubframes(bool aUseRemoteSubframes) {
166 MOZ_ASSERT(mIsNotNull);
168 // We shouldn't need this on parent...
169 return NS_ERROR_UNEXPECTED;
172 NS_IMETHODIMP
173 LoadContext::GetScriptableOriginAttributes(
174 JSContext* aCx, JS::MutableHandle<JS::Value> aAttrs) {
175 bool ok = ToJSValue(aCx, mOriginAttributes, aAttrs);
176 NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE);
177 return NS_OK;
180 NS_IMETHODIMP_(void)
181 LoadContext::GetOriginAttributes(mozilla::OriginAttributes& aAttrs) {
182 aAttrs = mOriginAttributes;
185 NS_IMETHODIMP
186 LoadContext::GetUseTrackingProtection(bool* aUseTrackingProtection) {
187 MOZ_ASSERT(mIsNotNull);
189 NS_ENSURE_ARG_POINTER(aUseTrackingProtection);
191 *aUseTrackingProtection = mUseTrackingProtection;
192 return NS_OK;
195 NS_IMETHODIMP
196 LoadContext::SetUseTrackingProtection(bool aUseTrackingProtection) {
197 MOZ_ASSERT_UNREACHABLE("Should only be set through nsDocShell");
199 return NS_ERROR_UNEXPECTED;
202 //-----------------------------------------------------------------------------
203 // LoadContext::nsIInterfaceRequestor
204 //-----------------------------------------------------------------------------
205 NS_IMETHODIMP
206 LoadContext::GetInterface(const nsIID& aIID, void** aResult) {
207 NS_ENSURE_ARG_POINTER(aResult);
208 *aResult = nullptr;
210 if (aIID.Equals(NS_GET_IID(nsILoadContext))) {
211 *aResult = static_cast<nsILoadContext*>(this);
212 NS_ADDREF_THIS();
213 return NS_OK;
216 return NS_NOINTERFACE;
219 static already_AddRefed<nsILoadContext> CreateInstance(bool aPrivate) {
220 OriginAttributes oa;
221 oa.mPrivateBrowsingId = aPrivate ? 1 : 0;
223 nsCOMPtr<nsILoadContext> lc = new LoadContext(oa);
225 return lc.forget();
228 already_AddRefed<nsILoadContext> CreateLoadContext() {
229 return CreateInstance(false);
232 already_AddRefed<nsILoadContext> CreatePrivateLoadContext() {
233 return CreateInstance(true);
236 } // namespace mozilla