tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

nsWindowRoot.h (3491B)


      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 nsWindowRoot_h__
      8 #define nsWindowRoot_h__
      9 
     10 class nsIGlobalObject;
     11 
     12 #include "mozilla/Attributes.h"
     13 #include "mozilla/EventListenerManager.h"
     14 #include "nsCycleCollectionParticipant.h"
     15 #include "nsHashKeys.h"
     16 #include "nsIWeakReferenceUtils.h"
     17 #include "nsPIWindowRoot.h"
     18 #include "nsTHashSet.h"
     19 
     20 class nsWindowRoot final : public nsPIWindowRoot {
     21 public:
     22  explicit nsWindowRoot(nsPIDOMWindowOuter* aWindow);
     23 
     24  NS_DECL_ISUPPORTS_INHERITED
     25  NS_IMETHOD_(void) DeleteCycleCollectable() override;
     26 
     27  mozilla::EventListenerManager* GetExistingListenerManager() const override;
     28  mozilla::EventListenerManager* GetOrCreateListenerManager() override;
     29 
     30  bool ComputeDefaultWantsUntrusted(mozilla::ErrorResult& aRv) final;
     31 
     32  // TODO: Convert this to MOZ_CAN_RUN_SCRIPT (bug 1415230)
     33  MOZ_CAN_RUN_SCRIPT_BOUNDARY bool DispatchEvent(
     34      mozilla::dom::Event& aEvent, mozilla::dom::CallerType aCallerType,
     35      mozilla::ErrorResult& aRv) override;
     36 
     37  void GetEventTargetParent(mozilla::EventChainPreVisitor& aVisitor) override;
     38 
     39  nsresult PostHandleEvent(mozilla::EventChainPostVisitor& aVisitor) override;
     40 
     41  // nsPIWindowRoot
     42 
     43  nsPIDOMWindowOuter* GetWindow() override;
     44 
     45  nsresult GetControllers(bool aForVisibleWindow,
     46                          nsIControllers** aResult) override;
     47  nsresult GetControllerForCommand(const char* aCommand, bool aForVisibleWindow,
     48                                   nsIController** _retval) override;
     49 
     50  void GetEnabledDisabledCommands(
     51      nsTArray<nsCString>& aEnabledCommands,
     52      nsTArray<nsCString>& aDisabledCommands) override;
     53 
     54  already_AddRefed<nsINode> GetPopupNode() override;
     55  void SetPopupNode(nsINode* aNode) override;
     56 
     57  void SetParentTarget(mozilla::dom::EventTarget* aTarget) override {
     58    mParent = aTarget;
     59  }
     60  mozilla::dom::EventTarget* GetParentTarget() override { return mParent; }
     61  nsPIDOMWindowOuter* GetOwnerGlobalForBindingsInternal() override;
     62  nsIGlobalObject* GetOwnerGlobal() const override;
     63 
     64  nsIGlobalObject* GetParentObject();
     65 
     66  JSObject* WrapObject(JSContext*, JS::Handle<JSObject*> aGivenProto) override;
     67 
     68  NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsWindowRoot)
     69 
     70  void AddBrowser(nsIRemoteTab* aBrowser) override;
     71  void RemoveBrowser(nsIRemoteTab* aBrowser) override;
     72  void EnumerateBrowsers(BrowserEnumerator aEnumFunc, void* aArg) override;
     73 
     74 protected:
     75  virtual ~nsWindowRoot();
     76 
     77  void GetEnabledDisabledCommandsForControllers(
     78      nsIControllers* aControllers, nsTHashSet<nsCString>& aCommandsHandled,
     79      nsTArray<nsCString>& aEnabledCommands,
     80      nsTArray<nsCString>& aDisabledCommands);
     81 
     82  // Members
     83  nsCOMPtr<nsPIDOMWindowOuter> mWindow;
     84  // We own the manager, which owns event listeners attached to us.
     85  RefPtr<mozilla::EventListenerManager> mListenerManager;  // [Strong]
     86  nsWeakPtr mPopupNode;
     87 
     88  nsCOMPtr<mozilla::dom::EventTarget> mParent;
     89 
     90  // The BrowserParents that are currently registered with this top-level
     91  // window.
     92  using WeakBrowserTable = nsTHashSet<RefPtr<nsIWeakReference>>;
     93  WeakBrowserTable mWeakBrowsers;
     94 };
     95 
     96 extern already_AddRefed<mozilla::dom::EventTarget> NS_NewWindowRoot(
     97    nsPIDOMWindowOuter* aWindow);
     98 
     99 #endif