mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-08 12:19:05 +02:00
So that we can get the correct client offset value and store other metrics
there and reuse them when the top browser window moves.
The client offset, browser window title bar and window decorated frame width,
is necessary to get element positions in OOP iframes in screen coordinates
for drag-and-drop etc.
This change also fixes event.screen{X,Y}. A mochitest in this commit fails
without this change with enabling fission at least on Linux. Note that in the
mochitest we have to use nsIDOMWindowUtils.synthesizeNativeMouseClick instead
of nsIDOMWindowUtils.sendMouseEvent since sendMouseEvent doesn't work in fission
world (bug 1528935).
Differential Revision: https://phabricator.services.mozilla.com/D62190
--HG--
extra : moz-landing-system : lando
89 lines
2.5 KiB
C++
89 lines
2.5 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) {
|
|
nsAutoCString spec;
|
|
aURI->GetSpec(spec);
|
|
Unused << mBridge->SendLoadURL(spec);
|
|
}
|
|
|
|
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
|