mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 01:35:35 +00:00
796e6049b6
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
110 lines
3.6 KiB
C++
110 lines
3.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/. */
|
|
|
|
#ifndef mozilla_dom_BrowserBridgeParent_h
|
|
#define mozilla_dom_BrowserBridgeParent_h
|
|
|
|
#include "mozilla/dom/PBrowserBridgeParent.h"
|
|
#include "mozilla/Tuple.h"
|
|
#include "mozilla/dom/ipc/IdType.h"
|
|
|
|
namespace mozilla {
|
|
|
|
namespace a11y {
|
|
class DocAccessibleParent;
|
|
}
|
|
|
|
namespace dom {
|
|
|
|
class BrowserParent;
|
|
|
|
/**
|
|
* BrowserBridgeParent implements the parent actor part of the PBrowserBridge
|
|
* protocol. See PBrowserBridge for more information.
|
|
*/
|
|
class BrowserBridgeParent : public PBrowserBridgeParent {
|
|
public:
|
|
NS_INLINE_DECL_REFCOUNTING(BrowserBridgeParent, final);
|
|
|
|
BrowserBridgeParent();
|
|
|
|
nsresult InitWithProcess(ContentParent* aContentParent,
|
|
const nsString& aPresentationURL,
|
|
const WindowGlobalInit& aWindowInit,
|
|
uint32_t aChromeFlags, TabId aTabId);
|
|
|
|
BrowserParent* GetBrowserParent() { return mBrowserParent; }
|
|
|
|
CanonicalBrowsingContext* GetBrowsingContext();
|
|
|
|
// Get our manager actor.
|
|
BrowserParent* Manager();
|
|
|
|
#if defined(ACCESSIBILITY)
|
|
/**
|
|
* Get the accessible for this iframe's embedder OuterDocAccessible.
|
|
* This returns the actor for the containing document and the unique id of
|
|
* the embedder accessible within that document.
|
|
*/
|
|
Tuple<a11y::DocAccessibleParent*, uint64_t> GetEmbedderAccessible() {
|
|
return Tuple<a11y::DocAccessibleParent*, uint64_t>(mEmbedderAccessibleDoc,
|
|
mEmbedderAccessibleID);
|
|
}
|
|
#endif // defined(ACCESSIBILITY)
|
|
|
|
// Tear down this BrowserBridgeParent.
|
|
void Destroy();
|
|
|
|
protected:
|
|
friend class PBrowserBridgeParent;
|
|
|
|
mozilla::ipc::IPCResult RecvShow(const OwnerShowInfo&);
|
|
mozilla::ipc::IPCResult RecvScrollbarPreferenceChanged(ScrollbarPreference);
|
|
mozilla::ipc::IPCResult RecvLoadURL(const nsCString& aUrl);
|
|
mozilla::ipc::IPCResult RecvResumeLoad(uint64_t aPendingSwitchID);
|
|
mozilla::ipc::IPCResult RecvUpdateDimensions(const nsIntRect& aRect,
|
|
const ScreenIntSize& aSize);
|
|
mozilla::ipc::IPCResult RecvUpdateEffects(const EffectsInfo& aEffects);
|
|
mozilla::ipc::IPCResult RecvRenderLayers(const bool& aEnabled,
|
|
const LayersObserverEpoch& aEpoch);
|
|
|
|
mozilla::ipc::IPCResult RecvNavigateByKey(const bool& aForward,
|
|
const bool& aForDocumentNavigation);
|
|
|
|
mozilla::ipc::IPCResult RecvDispatchSynthesizedMouseEvent(
|
|
const WidgetMouseEvent& aEvent);
|
|
|
|
mozilla::ipc::IPCResult RecvWillChangeProcess();
|
|
|
|
mozilla::ipc::IPCResult RecvActivate();
|
|
|
|
mozilla::ipc::IPCResult RecvDeactivate(const bool& aWindowLowering);
|
|
|
|
mozilla::ipc::IPCResult RecvSetIsUnderHiddenEmbedderElement(
|
|
const bool& aIsUnderHiddenEmbedderElement);
|
|
|
|
#ifdef ACCESSIBILITY
|
|
mozilla::ipc::IPCResult RecvSetEmbedderAccessible(PDocAccessibleParent* aDoc,
|
|
uint64_t aID);
|
|
#endif
|
|
|
|
void ActorDestroy(ActorDestroyReason aWhy) override;
|
|
|
|
private:
|
|
~BrowserBridgeParent();
|
|
|
|
RefPtr<BrowserParent> mBrowserParent;
|
|
#ifdef ACCESSIBILITY
|
|
RefPtr<a11y::DocAccessibleParent> mEmbedderAccessibleDoc;
|
|
uint64_t mEmbedderAccessibleID = 0;
|
|
#endif // ACCESSIBILITY
|
|
};
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif // !defined(mozilla_dom_BrowserBridgeParent_h)
|