Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/docshell/base/LoadContext.cpp
Line
Count
Source (jump to first uncovered line)
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/. */
6
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"
15
16
namespace mozilla {
17
18
NS_IMPL_ISUPPORTS(LoadContext, nsILoadContext, nsIInterfaceRequestor)
19
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
30
0
{
31
0
  mOriginAttributes = aPrincipal->OriginAttributesRef();
32
0
  if (!aOptionalBase) {
33
0
    return;
34
0
  }
35
0
36
0
  MOZ_ALWAYS_SUCCEEDS(aOptionalBase->GetIsContent(&mIsContent));
37
0
  MOZ_ALWAYS_SUCCEEDS(aOptionalBase->GetUseRemoteTabs(&mUseRemoteTabs));
38
0
  MOZ_ALWAYS_SUCCEEDS(aOptionalBase->GetUseTrackingProtection(&mUseTrackingProtection));
39
0
}
40
41
//-----------------------------------------------------------------------------
42
// LoadContext::nsILoadContext
43
//-----------------------------------------------------------------------------
44
45
NS_IMETHODIMP
46
LoadContext::GetAssociatedWindow(mozIDOMWindowProxy**)
47
0
{
48
0
  MOZ_ASSERT(mIsNotNull);
49
0
50
0
  // can't support this in the parent process
51
0
  return NS_ERROR_UNEXPECTED;
52
0
}
53
54
NS_IMETHODIMP
55
LoadContext::GetTopWindow(mozIDOMWindowProxy**)
56
0
{
57
0
  MOZ_ASSERT(mIsNotNull);
58
0
59
0
  // can't support this in the parent process
60
0
  return NS_ERROR_UNEXPECTED;
61
0
}
62
63
NS_IMETHODIMP
64
LoadContext::GetTopFrameElement(dom::Element** aElement)
65
0
{
66
0
  nsCOMPtr<dom::Element> element = do_QueryReferent(mTopFrameElement);
67
0
  element.forget(aElement);
68
0
  return NS_OK;
69
0
}
70
71
NS_IMETHODIMP
72
LoadContext::GetNestedFrameId(uint64_t* aId)
73
0
{
74
0
  NS_ENSURE_ARG(aId);
75
0
  *aId = mNestedFrameId;
76
0
  return NS_OK;
77
0
}
78
79
NS_IMETHODIMP
80
LoadContext::GetIsContent(bool* aIsContent)
81
0
{
82
0
  MOZ_ASSERT(mIsNotNull);
83
0
84
0
  NS_ENSURE_ARG_POINTER(aIsContent);
85
0
86
0
  *aIsContent = mIsContent;
87
0
  return NS_OK;
88
0
}
89
90
NS_IMETHODIMP
91
LoadContext::GetUsePrivateBrowsing(bool* aUsePrivateBrowsing)
92
0
{
93
0
  MOZ_ASSERT(mIsNotNull);
94
0
95
0
  NS_ENSURE_ARG_POINTER(aUsePrivateBrowsing);
96
0
97
0
  *aUsePrivateBrowsing = mOriginAttributes.mPrivateBrowsingId > 0;
98
0
  return NS_OK;
99
0
}
100
101
NS_IMETHODIMP
102
LoadContext::SetUsePrivateBrowsing(bool aUsePrivateBrowsing)
103
0
{
104
0
  MOZ_ASSERT(mIsNotNull);
105
0
106
0
  // We shouldn't need this on parent...
107
0
  return NS_ERROR_UNEXPECTED;
108
0
}
109
110
NS_IMETHODIMP
111
LoadContext::SetPrivateBrowsing(bool aUsePrivateBrowsing)
112
0
{
113
0
  MOZ_ASSERT(mIsNotNull);
114
0
115
0
  // We shouldn't need this on parent...
116
0
  return NS_ERROR_UNEXPECTED;
117
0
}
118
119
NS_IMETHODIMP
120
LoadContext::GetUseRemoteTabs(bool* aUseRemoteTabs)
121
0
{
122
0
  MOZ_ASSERT(mIsNotNull);
123
0
124
0
  NS_ENSURE_ARG_POINTER(aUseRemoteTabs);
125
0
126
0
  *aUseRemoteTabs = mUseRemoteTabs;
127
0
  return NS_OK;
128
0
}
129
130
NS_IMETHODIMP
131
LoadContext::SetRemoteTabs(bool aUseRemoteTabs)
132
0
{
133
0
  MOZ_ASSERT(mIsNotNull);
134
0
135
0
  // We shouldn't need this on parent...
136
0
  return NS_ERROR_UNEXPECTED;
137
0
}
138
139
NS_IMETHODIMP
140
LoadContext::GetIsInIsolatedMozBrowserElement(bool* aIsInIsolatedMozBrowserElement)
141
0
{
142
0
  MOZ_ASSERT(mIsNotNull);
143
0
144
0
  NS_ENSURE_ARG_POINTER(aIsInIsolatedMozBrowserElement);
145
0
146
0
  *aIsInIsolatedMozBrowserElement = mOriginAttributes.mInIsolatedMozBrowser;
147
0
  return NS_OK;
148
0
}
149
150
NS_IMETHODIMP
151
LoadContext::GetScriptableOriginAttributes(JS::MutableHandleValue aAttrs)
152
0
{
153
0
  JSContext* cx = nsContentUtils::GetCurrentJSContext();
154
0
  MOZ_ASSERT(cx);
155
0
156
0
  bool ok = ToJSValue(cx, mOriginAttributes, aAttrs);
157
0
  NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE);
158
0
  return NS_OK;
159
0
}
160
161
NS_IMETHODIMP_(void)
162
LoadContext::GetOriginAttributes(mozilla::OriginAttributes& aAttrs)
163
0
{
164
0
  aAttrs = mOriginAttributes;
165
0
}
166
167
NS_IMETHODIMP
168
LoadContext::GetUseTrackingProtection(bool* aUseTrackingProtection)
169
0
{
170
0
  MOZ_ASSERT(mIsNotNull);
171
0
172
0
  NS_ENSURE_ARG_POINTER(aUseTrackingProtection);
173
0
174
0
  *aUseTrackingProtection = mUseTrackingProtection;
175
0
  return NS_OK;
176
0
}
177
178
NS_IMETHODIMP
179
LoadContext::SetUseTrackingProtection(bool aUseTrackingProtection)
180
0
{
181
0
  MOZ_ASSERT_UNREACHABLE("Should only be set through nsDocShell");
182
0
183
0
  return NS_ERROR_UNEXPECTED;
184
0
}
185
186
//-----------------------------------------------------------------------------
187
// LoadContext::nsIInterfaceRequestor
188
//-----------------------------------------------------------------------------
189
NS_IMETHODIMP
190
LoadContext::GetInterface(const nsIID& aIID, void** aResult)
191
0
{
192
0
  NS_ENSURE_ARG_POINTER(aResult);
193
0
  *aResult = nullptr;
194
0
195
0
  if (aIID.Equals(NS_GET_IID(nsILoadContext))) {
196
0
    *aResult = static_cast<nsILoadContext*>(this);
197
0
    NS_ADDREF_THIS();
198
0
    return NS_OK;
199
0
  }
200
0
201
0
  return NS_NOINTERFACE;
202
0
}
203
204
static already_AddRefed<nsILoadContext>
205
CreateInstance(bool aPrivate)
206
0
{
207
0
  OriginAttributes oa;
208
0
  oa.mPrivateBrowsingId = aPrivate ? 1 : 0;
209
0
210
0
  nsCOMPtr<nsILoadContext> lc = new LoadContext(oa);
211
0
212
0
  return lc.forget();
213
0
}
214
215
already_AddRefed<nsILoadContext>
216
CreateLoadContext()
217
0
{
218
0
  return CreateInstance(false);
219
0
}
220
221
already_AddRefed<nsILoadContext>
222
CreatePrivateLoadContext()
223
0
{
224
0
  return CreateInstance(true);
225
0
}
226
227
} // namespace mozilla