BrowserBridgeChild.h (3870B)
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 #ifndef mozilla_dom_BrowserBridgeChild_h 8 #define mozilla_dom_BrowserBridgeChild_h 9 10 #include "mozilla/dom/BrowserChild.h" 11 #include "mozilla/dom/PBrowserBridgeChild.h" 12 #include "mozilla/dom/ipc/IdType.h" 13 14 namespace mozilla::dom { 15 class BrowsingContext; 16 class ContentChild; 17 class BrowserBridgeHost; 18 19 /** 20 * BrowserBridgeChild implements the child actor part of the PBrowserBridge 21 * protocol. See PBrowserBridge for more information. 22 */ 23 class BrowserBridgeChild : public PBrowserBridgeChild { 24 public: 25 typedef mozilla::layers::LayersId LayersId; 26 27 NS_INLINE_DECL_REFCOUNTING(BrowserBridgeChild, final); 28 29 BrowserChild* Manager() { 30 MOZ_ASSERT(CanSend()); 31 return static_cast<BrowserChild*>(PBrowserBridgeChild::Manager()); 32 } 33 34 TabId GetTabId() { return mId; } 35 36 LayersId GetLayersId() { return mLayersId; } 37 38 nsFrameLoader* GetFrameLoader() const { return mFrameLoader; } 39 40 BrowsingContext* GetBrowsingContext() { return mBrowsingContext; } 41 42 nsILoadContext* GetLoadContext(); 43 44 void NavigateByKey(bool aForward, bool aForDocumentNavigation); 45 46 void Activate(uint64_t aActionId); 47 48 void Deactivate(bool aWindowLowering, uint64_t aActionId); 49 50 already_AddRefed<BrowserBridgeHost> FinishInit(nsFrameLoader* aFrameLoader); 51 52 #if defined(ACCESSIBILITY) 53 void SetEmbedderAccessible(PDocAccessibleChild* aDoc, uint64_t aID) { 54 MOZ_ASSERT((aDoc && aID) || (!aDoc && !aID)); 55 mEmbedderAccessibleID = aID; 56 (void)SendSetEmbedderAccessible(aDoc, aID); 57 } 58 59 uint64_t GetEmbedderAccessibleID() { return mEmbedderAccessibleID; } 60 #endif // defined(ACCESSIBILITY) 61 62 static BrowserBridgeChild* GetFrom(nsFrameLoader* aFrameLoader); 63 64 static BrowserBridgeChild* GetFrom(nsIContent* aContent); 65 66 BrowserBridgeChild(BrowsingContext* aBrowsingContext, TabId aId, 67 const LayersId& aLayersId); 68 69 protected: 70 friend class ContentChild; 71 friend class PBrowserBridgeChild; 72 73 mozilla::ipc::IPCResult RecvRequestFocus(const bool& aCanRaise, 74 const CallerType aCallerType); 75 76 mozilla::ipc::IPCResult RecvMoveFocus(const bool& aForward, 77 const bool& aForDocumentNavigation); 78 79 // TODO: Use MOZ_CAN_RUN_SCRIPT when it gains IPDL support (bug 1539864) 80 MOZ_CAN_RUN_SCRIPT_BOUNDARY mozilla::ipc::IPCResult 81 RecvMaybeFireEmbedderLoadEvents( 82 EmbedderElementEventType aFireEventAtEmbeddingElement); 83 84 mozilla::ipc::IPCResult RecvIntrinsicSizeOrRatioChanged( 85 const Maybe<IntrinsicSize>& aIntrinsicSize, 86 const Maybe<AspectRatio>& aIntrinsicRatio); 87 88 mozilla::ipc::IPCResult RecvImageLoadComplete(const nsresult& aResult); 89 90 MOZ_CAN_RUN_SCRIPT_BOUNDARY 91 mozilla::ipc::IPCResult RecvScrollRectIntoView( 92 const nsRect& aRect, const ScrollAxis& aVertical, 93 const ScrollAxis& aHorizontal, const ScrollFlags& aScrollFlags, 94 const int32_t& aAppUnitsPerDevPixel); 95 96 MOZ_CAN_RUN_SCRIPT_BOUNDARY 97 mozilla::ipc::IPCResult RecvSubFrameCrashed(); 98 99 void ActorDestroy(ActorDestroyReason aWhy) override; 100 101 private: 102 ~BrowserBridgeChild(); 103 104 void UnblockOwnerDocsLoadEvent(); 105 106 TabId mId; 107 LayersId mLayersId; 108 bool mHadInitialLoad = false; 109 RefPtr<nsFrameLoader> mFrameLoader; 110 RefPtr<BrowsingContext> mBrowsingContext; 111 #if defined(ACCESSIBILITY) 112 // We need to keep track of the embedder accessible id we last sent to the 113 // parent process. 114 uint64_t mEmbedderAccessibleID = 0; 115 #endif // defined(ACCESSIBILITY) 116 }; 117 118 } // namespace mozilla::dom 119 120 #endif // !defined(mozilla_dom_BrowserBridgeParent_h)