forked from mirrors/gecko-dev
Backed out changeset f71e3eff7a8c (bug 1602318) Backed out changeset 0e0bdebf223b (bug 1602318) Backed out changeset 44e82f4339a1 (bug 1602318) Backed out changeset 5f341ebd8591 (bug 1602318) Backed out changeset 088ea9d20617 (bug 1602318) Backed out changeset 5de6321939f2 (bug 1602318) Backed out changeset f5742e84912b (bug 1602318) Backed out changeset 13bec3079540 (bug 1602318) Backed out changeset 6c24ba022911 (bug 1602318) Backed out changeset 5d0fc0102a7f (bug 1602318) Backed out changeset fc4efd11e643 (bug 1602318) Backed out changeset 028bd63e710d (bug 1602318) Backed out changeset 21ad350f9617 (bug 1602318) Backed out changeset 8f27319f2c34 (bug 1602318) Backed out changeset db2832973382 (bug 1602318) Backed out changeset 1756c7584491 (bug 1602318) Backed out changeset 983e5a9abe02 (bug 1602318) Backed out changeset a1b9429b3298 (bug 1602318) Backed out changeset 7d1c0d968a09 (bug 1602318) Backed out changeset a3b056ec6be3 (bug 1602318)
214 lines
5.4 KiB
C++
214 lines
5.4 KiB
C++
/* -*- 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/. */
|
|
|
|
#include "mozilla/Assertions.h"
|
|
#include "mozilla/BasePrincipal.h"
|
|
#include "mozilla/LoadContext.h"
|
|
#include "mozilla/Preferences.h"
|
|
#include "mozilla/dom/Element.h"
|
|
#include "mozilla/dom/ScriptSettings.h" // for AutoJSAPI
|
|
#include "nsContentUtils.h"
|
|
#include "xpcpublic.h"
|
|
|
|
namespace mozilla {
|
|
|
|
NS_IMPL_ISUPPORTS(LoadContext, nsILoadContext, nsIInterfaceRequestor)
|
|
|
|
LoadContext::LoadContext(nsIPrincipal* aPrincipal,
|
|
nsILoadContext* aOptionalBase)
|
|
: mTopFrameElement(nullptr),
|
|
mNestedFrameId(0),
|
|
mIsContent(true),
|
|
mUseRemoteTabs(false),
|
|
mUseRemoteSubframes(false),
|
|
mUseTrackingProtection(false),
|
|
#ifdef DEBUG
|
|
mIsNotNull(true),
|
|
#endif
|
|
mOriginAttributes(aPrincipal->OriginAttributesRef()) {
|
|
if (!aOptionalBase) {
|
|
return;
|
|
}
|
|
|
|
MOZ_ALWAYS_SUCCEEDS(aOptionalBase->GetIsContent(&mIsContent));
|
|
MOZ_ALWAYS_SUCCEEDS(aOptionalBase->GetUseRemoteTabs(&mUseRemoteTabs));
|
|
MOZ_ALWAYS_SUCCEEDS(
|
|
aOptionalBase->GetUseRemoteSubframes(&mUseRemoteSubframes));
|
|
MOZ_ALWAYS_SUCCEEDS(
|
|
aOptionalBase->GetUseTrackingProtection(&mUseTrackingProtection));
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// LoadContext::nsILoadContext
|
|
//-----------------------------------------------------------------------------
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::GetAssociatedWindow(mozIDOMWindowProxy**) {
|
|
MOZ_ASSERT(mIsNotNull);
|
|
|
|
// can't support this in the parent process
|
|
return NS_ERROR_UNEXPECTED;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::GetTopWindow(mozIDOMWindowProxy**) {
|
|
MOZ_ASSERT(mIsNotNull);
|
|
|
|
// can't support this in the parent process
|
|
return NS_ERROR_UNEXPECTED;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::GetTopFrameElement(dom::Element** aElement) {
|
|
nsCOMPtr<dom::Element> element = do_QueryReferent(mTopFrameElement);
|
|
element.forget(aElement);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::GetNestedFrameId(uint64_t* aId) {
|
|
NS_ENSURE_ARG(aId);
|
|
*aId = mNestedFrameId;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::GetIsContent(bool* aIsContent) {
|
|
MOZ_ASSERT(mIsNotNull);
|
|
|
|
NS_ENSURE_ARG_POINTER(aIsContent);
|
|
|
|
*aIsContent = mIsContent;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::GetUsePrivateBrowsing(bool* aUsePrivateBrowsing) {
|
|
MOZ_ASSERT(mIsNotNull);
|
|
|
|
NS_ENSURE_ARG_POINTER(aUsePrivateBrowsing);
|
|
|
|
*aUsePrivateBrowsing = mOriginAttributes.mPrivateBrowsingId > 0;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::SetUsePrivateBrowsing(bool aUsePrivateBrowsing) {
|
|
MOZ_ASSERT(mIsNotNull);
|
|
|
|
// We shouldn't need this on parent...
|
|
return NS_ERROR_UNEXPECTED;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::SetPrivateBrowsing(bool aUsePrivateBrowsing) {
|
|
MOZ_ASSERT(mIsNotNull);
|
|
|
|
// We shouldn't need this on parent...
|
|
return NS_ERROR_UNEXPECTED;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::GetUseRemoteTabs(bool* aUseRemoteTabs) {
|
|
MOZ_ASSERT(mIsNotNull);
|
|
|
|
NS_ENSURE_ARG_POINTER(aUseRemoteTabs);
|
|
|
|
*aUseRemoteTabs = mUseRemoteTabs;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::SetRemoteTabs(bool aUseRemoteTabs) {
|
|
MOZ_ASSERT(mIsNotNull);
|
|
|
|
// We shouldn't need this on parent...
|
|
return NS_ERROR_UNEXPECTED;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::GetUseRemoteSubframes(bool* aUseRemoteSubframes) {
|
|
MOZ_ASSERT(mIsNotNull);
|
|
|
|
NS_ENSURE_ARG_POINTER(aUseRemoteSubframes);
|
|
|
|
*aUseRemoteSubframes = mUseRemoteSubframes;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::SetRemoteSubframes(bool aUseRemoteSubframes) {
|
|
MOZ_ASSERT(mIsNotNull);
|
|
|
|
// We shouldn't need this on parent...
|
|
return NS_ERROR_UNEXPECTED;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::GetScriptableOriginAttributes(JSContext* aCx,
|
|
JS::MutableHandleValue aAttrs) {
|
|
bool ok = ToJSValue(aCx, mOriginAttributes, aAttrs);
|
|
NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP_(void)
|
|
LoadContext::GetOriginAttributes(mozilla::OriginAttributes& aAttrs) {
|
|
aAttrs = mOriginAttributes;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::GetUseTrackingProtection(bool* aUseTrackingProtection) {
|
|
MOZ_ASSERT(mIsNotNull);
|
|
|
|
NS_ENSURE_ARG_POINTER(aUseTrackingProtection);
|
|
|
|
*aUseTrackingProtection = mUseTrackingProtection;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
LoadContext::SetUseTrackingProtection(bool aUseTrackingProtection) {
|
|
MOZ_ASSERT_UNREACHABLE("Should only be set through nsDocShell");
|
|
|
|
return NS_ERROR_UNEXPECTED;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// LoadContext::nsIInterfaceRequestor
|
|
//-----------------------------------------------------------------------------
|
|
NS_IMETHODIMP
|
|
LoadContext::GetInterface(const nsIID& aIID, void** aResult) {
|
|
NS_ENSURE_ARG_POINTER(aResult);
|
|
*aResult = nullptr;
|
|
|
|
if (aIID.Equals(NS_GET_IID(nsILoadContext))) {
|
|
*aResult = static_cast<nsILoadContext*>(this);
|
|
NS_ADDREF_THIS();
|
|
return NS_OK;
|
|
}
|
|
|
|
return NS_NOINTERFACE;
|
|
}
|
|
|
|
static already_AddRefed<nsILoadContext> CreateInstance(bool aPrivate) {
|
|
OriginAttributes oa;
|
|
oa.mPrivateBrowsingId = aPrivate ? 1 : 0;
|
|
|
|
nsCOMPtr<nsILoadContext> lc = new LoadContext(oa);
|
|
|
|
return lc.forget();
|
|
}
|
|
|
|
already_AddRefed<nsILoadContext> CreateLoadContext() {
|
|
return CreateInstance(false);
|
|
}
|
|
|
|
already_AddRefed<nsILoadContext> CreatePrivateLoadContext() {
|
|
return CreateInstance(true);
|
|
}
|
|
|
|
} // namespace mozilla
|