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/LoadContext.h"
10 #include "mozilla/Preferences.h"
11 #include "mozilla/dom/Element.h"
12 #include "mozilla/dom/ScriptSettings.h" // for AutoJSAPI
13 #include "nsContentUtils.h"
14 #include "xpcpublic.h"
18 NS_IMPL_ISUPPORTS(LoadContext
, nsILoadContext
, nsIInterfaceRequestor
)
20 LoadContext::LoadContext(nsIPrincipal
* aPrincipal
,
21 nsILoadContext
* aOptionalBase
)
22 : mTopFrameElement(nullptr)
25 , mUseRemoteTabs(false)
26 , mUseTrackingProtection(false)
31 mOriginAttributes
= aPrincipal
->OriginAttributesRef();
36 MOZ_ALWAYS_SUCCEEDS(aOptionalBase
->GetIsContent(&mIsContent
));
37 MOZ_ALWAYS_SUCCEEDS(aOptionalBase
->GetUseRemoteTabs(&mUseRemoteTabs
));
38 MOZ_ALWAYS_SUCCEEDS(aOptionalBase
->GetUseTrackingProtection(&mUseTrackingProtection
));
41 //-----------------------------------------------------------------------------
42 // LoadContext::nsILoadContext
43 //-----------------------------------------------------------------------------
46 LoadContext::GetAssociatedWindow(mozIDOMWindowProxy
**)
48 MOZ_ASSERT(mIsNotNull
);
50 // can't support this in the parent process
51 return NS_ERROR_UNEXPECTED
;
55 LoadContext::GetTopWindow(mozIDOMWindowProxy
**)
57 MOZ_ASSERT(mIsNotNull
);
59 // can't support this in the parent process
60 return NS_ERROR_UNEXPECTED
;
64 LoadContext::GetTopFrameElement(dom::Element
** aElement
)
66 nsCOMPtr
<dom::Element
> element
= do_QueryReferent(mTopFrameElement
);
67 element
.forget(aElement
);
72 LoadContext::GetNestedFrameId(uint64_t* aId
)
75 *aId
= mNestedFrameId
;
80 LoadContext::GetIsContent(bool* aIsContent
)
82 MOZ_ASSERT(mIsNotNull
);
84 NS_ENSURE_ARG_POINTER(aIsContent
);
86 *aIsContent
= mIsContent
;
91 LoadContext::GetUsePrivateBrowsing(bool* aUsePrivateBrowsing
)
93 MOZ_ASSERT(mIsNotNull
);
95 NS_ENSURE_ARG_POINTER(aUsePrivateBrowsing
);
97 *aUsePrivateBrowsing
= mOriginAttributes
.mPrivateBrowsingId
> 0;
102 LoadContext::SetUsePrivateBrowsing(bool aUsePrivateBrowsing
)
104 MOZ_ASSERT(mIsNotNull
);
106 // We shouldn't need this on parent...
107 return NS_ERROR_UNEXPECTED
;
111 LoadContext::SetPrivateBrowsing(bool aUsePrivateBrowsing
)
113 MOZ_ASSERT(mIsNotNull
);
115 // We shouldn't need this on parent...
116 return NS_ERROR_UNEXPECTED
;
120 LoadContext::GetUseRemoteTabs(bool* aUseRemoteTabs
)
122 MOZ_ASSERT(mIsNotNull
);
124 NS_ENSURE_ARG_POINTER(aUseRemoteTabs
);
126 *aUseRemoteTabs
= mUseRemoteTabs
;
131 LoadContext::SetRemoteTabs(bool aUseRemoteTabs
)
133 MOZ_ASSERT(mIsNotNull
);
135 // We shouldn't need this on parent...
136 return NS_ERROR_UNEXPECTED
;
140 LoadContext::GetIsInIsolatedMozBrowserElement(bool* aIsInIsolatedMozBrowserElement
)
142 MOZ_ASSERT(mIsNotNull
);
144 NS_ENSURE_ARG_POINTER(aIsInIsolatedMozBrowserElement
);
146 *aIsInIsolatedMozBrowserElement
= mOriginAttributes
.mInIsolatedMozBrowser
;
151 LoadContext::GetScriptableOriginAttributes(JS::MutableHandleValue aAttrs
)
153 JSContext
* cx
= nsContentUtils::GetCurrentJSContext();
156 bool ok
= ToJSValue(cx
, mOriginAttributes
, aAttrs
);
157 NS_ENSURE_TRUE(ok
, NS_ERROR_FAILURE
);
162 LoadContext::GetOriginAttributes(mozilla::OriginAttributes
& aAttrs
)
164 aAttrs
= mOriginAttributes
;
168 LoadContext::GetUseTrackingProtection(bool* aUseTrackingProtection
)
170 MOZ_ASSERT(mIsNotNull
);
172 NS_ENSURE_ARG_POINTER(aUseTrackingProtection
);
174 *aUseTrackingProtection
= mUseTrackingProtection
;
179 LoadContext::SetUseTrackingProtection(bool aUseTrackingProtection
)
181 MOZ_ASSERT_UNREACHABLE("Should only be set through nsDocShell");
183 return NS_ERROR_UNEXPECTED
;
186 //-----------------------------------------------------------------------------
187 // LoadContext::nsIInterfaceRequestor
188 //-----------------------------------------------------------------------------
190 LoadContext::GetInterface(const nsIID
& aIID
, void** aResult
)
192 NS_ENSURE_ARG_POINTER(aResult
);
195 if (aIID
.Equals(NS_GET_IID(nsILoadContext
))) {
196 *aResult
= static_cast<nsILoadContext
*>(this);
201 return NS_NOINTERFACE
;
205 CreateTestInstance(bool aPrivate
, nsISupports
*aOuter
, REFNSIID aIID
, void **aResult
)
207 // Shamelessly modified from NS_GENERIC_FACTORY_CONSTRUCTOR
211 return NS_ERROR_NO_AGGREGATION
;
215 oa
.mPrivateBrowsingId
= aPrivate
? 1 : 0;
217 RefPtr
<LoadContext
> lc
= new LoadContext(oa
);
219 return lc
->QueryInterface(aIID
, aResult
);
223 CreateTestLoadContext(nsISupports
*aOuter
, REFNSIID aIID
, void **aResult
)
225 return CreateTestInstance(false, aOuter
, aIID
, aResult
);
229 CreatePrivateTestLoadContext(nsISupports
*aOuter
, REFNSIID aIID
, void **aResult
)
231 return CreateTestInstance(true, aOuter
, aIID
, aResult
);
234 } // namespace mozilla