nsDocShellTreeOwner.h (3457B)
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 nsDocShellTreeOwner_h__ 8 #define nsDocShellTreeOwner_h__ 9 10 // Helper Classes 11 #include "nsCOMPtr.h" 12 #include "nsString.h" 13 14 // Interfaces Needed 15 #include "nsIBaseWindow.h" 16 #include "nsIDocShellTreeOwner.h" 17 #include "nsIInterfaceRequestor.h" 18 #include "nsIInterfaceRequestorUtils.h" 19 #include "nsIWebBrowserChrome.h" 20 #include "nsIDOMEventListener.h" 21 #include "nsIWebProgressListener.h" 22 #include "nsWeakReference.h" 23 #include "nsITimer.h" 24 #include "nsIPrompt.h" 25 #include "nsIAuthPrompt.h" 26 #include "nsITooltipTextProvider.h" 27 #include "nsCTooltipTextProvider.h" 28 29 namespace mozilla { 30 namespace dom { 31 class Event; 32 class EventTarget; 33 } // namespace dom 34 } // namespace mozilla 35 36 class nsIDocShellTreeItem; 37 class nsWebBrowser; 38 class ChromeTooltipListener; 39 40 class nsDocShellTreeOwner final : public nsIDocShellTreeOwner, 41 public nsIBaseWindow, 42 public nsIInterfaceRequestor, 43 public nsIWebProgressListener, 44 public nsIDOMEventListener, 45 public nsSupportsWeakReference { 46 friend class nsWebBrowser; 47 48 public: 49 NS_DECL_ISUPPORTS 50 51 NS_DECL_NSIBASEWINDOW 52 NS_DECL_NSIDOCSHELLTREEOWNER 53 NS_DECL_NSIDOMEVENTLISTENER 54 NS_DECL_NSIINTERFACEREQUESTOR 55 NS_DECL_NSIWEBPROGRESSLISTENER 56 57 protected: 58 nsDocShellTreeOwner(); 59 virtual ~nsDocShellTreeOwner(); 60 61 void WebBrowser(nsWebBrowser* aWebBrowser); 62 63 nsWebBrowser* WebBrowser(); 64 NS_IMETHOD SetTreeOwner(nsIDocShellTreeOwner* aTreeOwner); 65 NS_IMETHOD SetWebBrowserChrome(nsIWebBrowserChrome* aWebBrowserChrome); 66 67 NS_IMETHOD AddChromeListeners(); 68 NS_IMETHOD RemoveChromeListeners(); 69 70 void EnsurePrompter(); 71 void EnsureAuthPrompter(); 72 73 void AddToWatcher(); 74 void RemoveFromWatcher(); 75 76 void EnsureContentTreeOwner(); 77 78 // These helper functions return the correct instances of the requested 79 // interfaces. If the object passed to SetWebBrowserChrome() implements 80 // nsISupportsWeakReference, then these functions call QueryReferent on 81 // that object. Otherwise, they return an addrefed pointer. If the 82 // WebBrowserChrome object doesn't exist, they return nullptr. 83 already_AddRefed<nsIWebBrowserChrome> GetWebBrowserChrome(); 84 already_AddRefed<nsIBaseWindow> GetOwnerWin(); 85 already_AddRefed<nsIInterfaceRequestor> GetOwnerRequestor(); 86 87 protected: 88 // Weak References 89 nsWebBrowser* mWebBrowser; 90 nsIDocShellTreeOwner* mTreeOwner; 91 nsIDocShellTreeItem* mPrimaryContentShell; 92 93 nsIWebBrowserChrome* mWebBrowserChrome; 94 nsIBaseWindow* mOwnerWin; 95 nsIInterfaceRequestor* mOwnerRequestor; 96 97 nsWeakPtr mWebBrowserChromeWeak; // nsIWebBrowserChrome 98 99 // the objects that listen for chrome events like context menus and tooltips. 100 // They are separate objects to avoid circular references between |this| 101 // and the DOM. 102 RefPtr<ChromeTooltipListener> mChromeTooltipListener; 103 104 RefPtr<nsDocShellTreeOwner> mContentTreeOwner; 105 106 nsCOMPtr<nsIPrompt> mPrompter; 107 nsCOMPtr<nsIAuthPrompt> mAuthPrompter; 108 nsCOMPtr<nsIRemoteTab> mPrimaryRemoteTab; 109 }; 110 111 #endif /* nsDocShellTreeOwner_h__ */