diff options
Diffstat (limited to 'toolkit/components/browser/nsWebBrowser.h')
-rw-r--r-- | toolkit/components/browser/nsWebBrowser.h | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/toolkit/components/browser/nsWebBrowser.h b/toolkit/components/browser/nsWebBrowser.h new file mode 100644 index 0000000000..f2cbaeb938 --- /dev/null +++ b/toolkit/components/browser/nsWebBrowser.h @@ -0,0 +1,164 @@ +/* -*- 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 nsWebBrowser_h__ +#define nsWebBrowser_h__ + +// Local Includes +#include "nsDocShellTreeOwner.h" + +// Core Includes +#include "nsCOMPtr.h" +#include "nsCycleCollectionParticipant.h" + +// Interfaces needed +#include "nsIBaseWindow.h" +#include "nsIDocShell.h" +#include "nsIDocShellTreeItem.h" +#include "nsIInterfaceRequestor.h" +#include "nsIInterfaceRequestorUtils.h" +#include "nsIWidget.h" +#include "nsIWebProgress.h" +#include "nsIWebBrowser.h" +#include "nsIWebNavigation.h" +#include "nsIWebBrowserPersist.h" +#include "nsIWindowWatcher.h" +#include "nsIPrintSettings.h" +#include "nsIWidgetListener.h" + +#include "mozilla/BasePrincipal.h" +#include "nsTArray.h" +#include "nsIWeakReferenceUtils.h" + +class nsWebBrowserInitInfo { + public: + // nsIBaseWindow Stuff + int32_t x; + int32_t y; + int32_t cx; + int32_t cy; + bool visible; + nsString name; +}; + +// {cda5863a-aa9c-411e-be49-ea0d525ab4b5} - +#define NS_WEBBROWSER_CID \ + { \ + 0xcda5863a, 0xaa9c, 0x411e, { \ + 0xbe, 0x49, 0xea, 0x0d, 0x52, 0x5a, 0xb4, 0xb5 \ + } \ + } + +class mozIDOMWindowProxy; +class nsDocShell; + +namespace mozilla { +namespace dom { +class WindowGlobalChild; +} // namespace dom +} // namespace mozilla + +class nsWebBrowser final : public nsIWebBrowser, + public nsIWebNavigation, + public nsIDocShellTreeItem, + public nsIBaseWindow, + public nsIInterfaceRequestor, + public nsIWebBrowserPersist, + public nsIWebProgressListener, + public nsSupportsWeakReference { + friend class nsDocShellTreeOwner; + + public: + // The implementation of non-refcounted nsIWidgetListener, which would hold a + // strong reference on stack before calling nsWebBrowser's + // MOZ_CAN_RUN_SCRIPT methods. + class WidgetListenerDelegate : public nsIWidgetListener { + public: + explicit WidgetListenerDelegate(nsWebBrowser* aWebBrowser) + : mWebBrowser(aWebBrowser) {} + MOZ_CAN_RUN_SCRIPT_BOUNDARY virtual void WindowActivated() override; + MOZ_CAN_RUN_SCRIPT_BOUNDARY virtual void WindowDeactivated() override; + MOZ_CAN_RUN_SCRIPT_BOUNDARY virtual bool PaintWindow( + nsIWidget* aWidget, mozilla::LayoutDeviceIntRegion aRegion) override; + + private: + // The lifetime of WidgetListenerDelegate is bound to nsWebBrowser so we + // just use raw pointer here. + nsWebBrowser* mWebBrowser; + }; + + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsWebBrowser, nsIWebBrowser) + + NS_DECL_NSIBASEWINDOW + NS_DECL_NSIDOCSHELLTREEITEM + NS_DECL_NSIINTERFACEREQUESTOR + NS_DECL_NSIWEBBROWSER + NS_DECL_NSIWEBNAVIGATION + NS_DECL_NSIWEBBROWSERPERSIST + NS_DECL_NSICANCELABLE + NS_DECL_NSIWEBPROGRESSLISTENER + + void SetAllowDNSPrefetch(bool aAllowPrefetch); + // TODO: Convert FocusDeactivate() to MOZ_CAN_RUN_SCRIPT + MOZ_CAN_RUN_SCRIPT_BOUNDARY void FocusActivate(uint64_t aActionId); + // TODO: Convert FocusDeactivate() to MOZ_CAN_RUN_SCRIPT + MOZ_CAN_RUN_SCRIPT_BOUNDARY void FocusDeactivate(uint64_t aActionId); + void SetWillChangeProcess(); + + static already_AddRefed<nsWebBrowser> Create( + nsIWebBrowserChrome* aContainerWindow, nsIWidget* aParentWidget, + mozilla::dom::BrowsingContext* aBrowsingContext, + mozilla::dom::WindowGlobalChild* aInitialWindowChild); + + protected: + virtual ~nsWebBrowser(); + void InternalDestroy(); + + void SetDocShell(nsDocShell* aDocShell); + void EnsureDocShellTreeOwner(); + + nsIWidget* EnsureWidget(); + + // nsIWidgetListener methods for WidgetListenerDelegate. + MOZ_CAN_RUN_SCRIPT void WindowActivated(); + MOZ_CAN_RUN_SCRIPT void WindowDeactivated(); + MOZ_CAN_RUN_SCRIPT bool PaintWindow(nsIWidget* aWidget, + mozilla::LayoutDeviceIntRegion aRegion); + + explicit nsWebBrowser(int aItemType); + + protected: + RefPtr<nsDocShellTreeOwner> mDocShellTreeOwner; + RefPtr<nsDocShell> mDocShell; + mozilla::OriginAttributes mOriginAttributes; + + nsCOMPtr<nsIWidget> mInternalWidget; + nsCOMPtr<nsIWindowWatcher> mWWatch; + const uint32_t mContentType; + bool mShouldEnableHistory; + bool mWillChangeProcess; + nativeWindow mParentNativeWindow; + nsIWebProgressListener* mProgressListener; + + nsCOMPtr<nsIPrintSettings> mPrintSettings; + + WidgetListenerDelegate mWidgetListenerDelegate; + + // cached background color + nscolor mBackgroundColor; + + // persistence object + nsCOMPtr<nsIWebBrowserPersist> mPersist; + uint32_t mPersistCurrentState; + nsresult mPersistResult; + uint32_t mPersistFlags; + + // Weak Reference interfaces... + nsIWidget* mParentWidget; +}; + +#endif /* nsWebBrowser_h__ */ |