fune/dom/ipc/BrowserBridgeHost.cpp
Tim Huang 4b67d42692 Bug 1639195 - Part 1: Make BrowserChild::RecvLoadURL() to use the correct triggering princpal. r=ckerschb,mattwoodrow
This patch makes the triggering princpal to be propagated to the
BrowserChild when calling LoadURL in nsFrameLoader. And use it as the
triggering principal for loading instead of the system principal.

Differential Revision: https://phabricator.services.mozilla.com/D75965
2020-05-19 20:22:34 +00:00

93 lines
2.6 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/dom/BrowserBridgeHost.h"
#include "mozilla/Unused.h"
namespace mozilla {
namespace dom {
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(BrowserBridgeHost)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_END
NS_IMPL_CYCLE_COLLECTION(BrowserBridgeHost)
NS_IMPL_CYCLE_COLLECTING_ADDREF(BrowserBridgeHost)
NS_IMPL_CYCLE_COLLECTING_RELEASE(BrowserBridgeHost)
BrowserBridgeHost::BrowserBridgeHost(BrowserBridgeChild* aChild)
: mBridge(aChild) {}
TabId BrowserBridgeHost::GetTabId() const { return mBridge->GetTabId(); }
mozilla::layers::LayersId BrowserBridgeHost::GetLayersId() const {
return mBridge->GetLayersId();
}
BrowsingContext* BrowserBridgeHost::GetBrowsingContext() const {
return mBridge->GetBrowsingContext();
}
nsILoadContext* BrowserBridgeHost::GetLoadContext() const {
return mBridge->GetLoadContext();
}
void BrowserBridgeHost::LoadURL(nsIURI* aURI,
nsIPrincipal* aTriggeringPrincipal) {
MOZ_ASSERT(aURI);
MOZ_ASSERT(aTriggeringPrincipal);
nsAutoCString spec;
aURI->GetSpec(spec);
Unused << mBridge->SendLoadURL(spec, aTriggeringPrincipal);
}
void BrowserBridgeHost::ResumeLoad(uint64_t aPendingSwitchId) {
Unused << mBridge->SendResumeLoad(aPendingSwitchId);
}
void BrowserBridgeHost::DestroyStart() { DestroyComplete(); }
void BrowserBridgeHost::DestroyComplete() {
if (!mBridge) {
return;
}
Unused << mBridge->Send__delete__(mBridge);
mBridge = nullptr;
}
bool BrowserBridgeHost::Show(const OwnerShowInfo& aShowInfo) {
Unused << mBridge->SendShow(aShowInfo);
return true;
}
void BrowserBridgeHost::UpdateDimensions(const nsIntRect& aRect,
const ScreenIntSize& aSize) {
Unused << mBridge->SendUpdateDimensions(aRect, aSize);
}
void BrowserBridgeHost::UpdateEffects(EffectsInfo aEffects) {
if (!mBridge || mEffectsInfo == aEffects) {
return;
}
mEffectsInfo = aEffects;
Unused << mBridge->SendUpdateEffects(mEffectsInfo);
}
already_AddRefed<nsIWidget> BrowserBridgeHost::GetWidget() const {
RefPtr<Element> owner = mBridge->GetFrameLoader()->GetOwnerContent();
nsCOMPtr<nsIWidget> widget = nsContentUtils::WidgetForContent(owner);
if (!widget) {
widget = nsContentUtils::WidgetForDocument(owner->OwnerDoc());
}
return widget.forget();
}
} // namespace dom
} // namespace mozilla