Bug 1470678 [wpt PR 11640] - Add a test for text-decoration in tables quirk, a=testonly
[gecko.git] / docshell / base / LoadContext.cpp
blobf437bdc9119005994608252ead09b850158bdb1f
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"
16 namespace mozilla {
18 NS_IMPL_ISUPPORTS(LoadContext, nsILoadContext, nsIInterfaceRequestor)
20 LoadContext::LoadContext(nsIPrincipal* aPrincipal,
21 nsILoadContext* aOptionalBase)
22 : mTopFrameElement(nullptr)
23 , mNestedFrameId(0)
24 , mIsContent(true)
25 , mUseRemoteTabs(false)
26 , mUseTrackingProtection(false)
27 #ifdef DEBUG
28 , mIsNotNull(true)
29 #endif
31 mOriginAttributes = aPrincipal->OriginAttributesRef();
32 if (!aOptionalBase) {
33 return;
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 //-----------------------------------------------------------------------------
45 NS_IMETHODIMP
46 LoadContext::GetAssociatedWindow(mozIDOMWindowProxy**)
48 MOZ_ASSERT(mIsNotNull);
50 // can't support this in the parent process
51 return NS_ERROR_UNEXPECTED;
54 NS_IMETHODIMP
55 LoadContext::GetTopWindow(mozIDOMWindowProxy**)
57 MOZ_ASSERT(mIsNotNull);
59 // can't support this in the parent process
60 return NS_ERROR_UNEXPECTED;
63 NS_IMETHODIMP
64 LoadContext::GetTopFrameElement(dom::Element** aElement)
66 nsCOMPtr<dom::Element> element = do_QueryReferent(mTopFrameElement);
67 element.forget(aElement);
68 return NS_OK;
71 NS_IMETHODIMP
72 LoadContext::GetNestedFrameId(uint64_t* aId)
74 NS_ENSURE_ARG(aId);
75 *aId = mNestedFrameId;
76 return NS_OK;
79 NS_IMETHODIMP
80 LoadContext::GetIsContent(bool* aIsContent)
82 MOZ_ASSERT(mIsNotNull);
84 NS_ENSURE_ARG_POINTER(aIsContent);
86 *aIsContent = mIsContent;
87 return NS_OK;
90 NS_IMETHODIMP
91 LoadContext::GetUsePrivateBrowsing(bool* aUsePrivateBrowsing)
93 MOZ_ASSERT(mIsNotNull);
95 NS_ENSURE_ARG_POINTER(aUsePrivateBrowsing);
97 *aUsePrivateBrowsing = mOriginAttributes.mPrivateBrowsingId > 0;
98 return NS_OK;
101 NS_IMETHODIMP
102 LoadContext::SetUsePrivateBrowsing(bool aUsePrivateBrowsing)
104 MOZ_ASSERT(mIsNotNull);
106 // We shouldn't need this on parent...
107 return NS_ERROR_UNEXPECTED;
110 NS_IMETHODIMP
111 LoadContext::SetPrivateBrowsing(bool aUsePrivateBrowsing)
113 MOZ_ASSERT(mIsNotNull);
115 // We shouldn't need this on parent...
116 return NS_ERROR_UNEXPECTED;
119 NS_IMETHODIMP
120 LoadContext::GetUseRemoteTabs(bool* aUseRemoteTabs)
122 MOZ_ASSERT(mIsNotNull);
124 NS_ENSURE_ARG_POINTER(aUseRemoteTabs);
126 *aUseRemoteTabs = mUseRemoteTabs;
127 return NS_OK;
130 NS_IMETHODIMP
131 LoadContext::SetRemoteTabs(bool aUseRemoteTabs)
133 MOZ_ASSERT(mIsNotNull);
135 // We shouldn't need this on parent...
136 return NS_ERROR_UNEXPECTED;
139 NS_IMETHODIMP
140 LoadContext::GetIsInIsolatedMozBrowserElement(bool* aIsInIsolatedMozBrowserElement)
142 MOZ_ASSERT(mIsNotNull);
144 NS_ENSURE_ARG_POINTER(aIsInIsolatedMozBrowserElement);
146 *aIsInIsolatedMozBrowserElement = mOriginAttributes.mInIsolatedMozBrowser;
147 return NS_OK;
150 NS_IMETHODIMP
151 LoadContext::GetScriptableOriginAttributes(JS::MutableHandleValue aAttrs)
153 JSContext* cx = nsContentUtils::GetCurrentJSContext();
154 MOZ_ASSERT(cx);
156 bool ok = ToJSValue(cx, mOriginAttributes, aAttrs);
157 NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE);
158 return NS_OK;
161 NS_IMETHODIMP_(void)
162 LoadContext::GetOriginAttributes(mozilla::OriginAttributes& aAttrs)
164 aAttrs = mOriginAttributes;
167 NS_IMETHODIMP
168 LoadContext::GetUseTrackingProtection(bool* aUseTrackingProtection)
170 MOZ_ASSERT(mIsNotNull);
172 NS_ENSURE_ARG_POINTER(aUseTrackingProtection);
174 *aUseTrackingProtection = mUseTrackingProtection;
175 return NS_OK;
178 NS_IMETHODIMP
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 //-----------------------------------------------------------------------------
189 NS_IMETHODIMP
190 LoadContext::GetInterface(const nsIID& aIID, void** aResult)
192 NS_ENSURE_ARG_POINTER(aResult);
193 *aResult = nullptr;
195 if (aIID.Equals(NS_GET_IID(nsILoadContext))) {
196 *aResult = static_cast<nsILoadContext*>(this);
197 NS_ADDREF_THIS();
198 return NS_OK;
201 return NS_NOINTERFACE;
204 static nsresult
205 CreateTestInstance(bool aPrivate, nsISupports *aOuter, REFNSIID aIID, void **aResult)
207 // Shamelessly modified from NS_GENERIC_FACTORY_CONSTRUCTOR
208 *aResult = nullptr;
210 if (aOuter) {
211 return NS_ERROR_NO_AGGREGATION;
214 OriginAttributes oa;
215 oa.mPrivateBrowsingId = aPrivate ? 1 : 0;
217 RefPtr<LoadContext> lc = new LoadContext(oa);
219 return lc->QueryInterface(aIID, aResult);
222 nsresult
223 CreateTestLoadContext(nsISupports *aOuter, REFNSIID aIID, void **aResult)
225 return CreateTestInstance(false, aOuter, aIID, aResult);
228 nsresult
229 CreatePrivateTestLoadContext(nsISupports *aOuter, REFNSIID aIID, void **aResult)
231 return CreateTestInstance(true, aOuter, aIID, aResult);
234 } // namespace mozilla