summaryrefslogtreecommitdiff
path: root/embedding/browser/nsWebBrowser.h
diff options
context:
space:
mode:
Diffstat (limited to 'embedding/browser/nsWebBrowser.h')
-rw-r--r--embedding/browser/nsWebBrowser.h185
1 files changed, 185 insertions, 0 deletions
diff --git a/embedding/browser/nsWebBrowser.h b/embedding/browser/nsWebBrowser.h
new file mode 100644
index 0000000000..80c106cb9e
--- /dev/null
+++ b/embedding/browser/nsWebBrowser.h
@@ -0,0 +1,185 @@
+/* -*- 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 "nsAutoPtr.h"
+#include "nsCOMPtr.h"
+
+// Interfaces needed
+#include "nsCWebBrowser.h"
+#include "nsIBaseWindow.h"
+#include "nsIDocShell.h"
+#include "nsIDocShellTreeItem.h"
+#include "nsIInterfaceRequestor.h"
+#include "nsIInterfaceRequestorUtils.h"
+#include "nsIScrollable.h"
+#include "nsISHistory.h"
+#include "nsITextScroll.h"
+#include "nsIWidget.h"
+#include "nsIWebProgress.h"
+#include "nsISecureBrowserUI.h"
+#include "nsIWebBrowser.h"
+#include "nsIWebNavigation.h"
+#include "nsIWebBrowserSetup.h"
+#include "nsIWebBrowserPersist.h"
+#include "nsIWebBrowserFocus.h"
+#include "nsIWebBrowserStream.h"
+#include "nsIWindowWatcher.h"
+#include "nsIPrintSettings.h"
+#include "nsEmbedStream.h"
+#include "nsIWidgetListener.h"
+
+#include "mozilla/BasePrincipal.h"
+#include "nsTArray.h"
+#include "nsWeakPtr.h"
+
+class nsWebBrowserInitInfo
+{
+public:
+ // nsIBaseWindow Stuff
+ int32_t x;
+ int32_t y;
+ int32_t cx;
+ int32_t cy;
+ bool visible;
+ nsCOMPtr<nsISHistory> sessionHistory;
+ nsString name;
+};
+
+class nsWebBrowserListenerState
+{
+public:
+ bool Equals(nsIWeakReference* aListener, const nsIID& aID)
+ {
+ return mWeakPtr.get() == aListener && mID.Equals(aID);
+ }
+
+ nsWeakPtr mWeakPtr;
+ nsIID mID;
+};
+
+// {cda5863a-aa9c-411e-be49-ea0d525ab4b5} -
+#define NS_WEBBROWSER_CID \
+ { 0xcda5863a, 0xaa9c, 0x411e, { 0xbe, 0x49, 0xea, 0x0d, 0x52, 0x5a, 0xb4, 0xb5 } }
+
+
+class nsWebBrowser final : public nsIWebBrowser,
+ public nsIWebNavigation,
+ public nsIWebBrowserSetup,
+ public nsIDocShellTreeItem,
+ public nsIBaseWindow,
+ public nsIScrollable,
+ public nsITextScroll,
+ public nsIInterfaceRequestor,
+ public nsIWebBrowserPersist,
+ public nsIWebBrowserFocus,
+ public nsIWebProgressListener,
+ public nsIWebBrowserStream,
+ public nsSupportsWeakReference
+{
+ friend class nsDocShellTreeOwner;
+
+public:
+
+ // The implementation of non-refcounted nsIWidgetListener, which would hold a
+ // strong reference on stack before calling nsWebBrowser.
+ class WidgetListenerDelegate : public nsIWidgetListener
+ {
+ public:
+ explicit WidgetListenerDelegate(nsWebBrowser* aWebBrowser)
+ : mWebBrowser(aWebBrowser) {}
+ 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;
+ };
+
+ nsWebBrowser();
+
+ NS_DECL_ISUPPORTS
+
+ NS_DECL_NSIBASEWINDOW
+ NS_DECL_NSIDOCSHELLTREEITEM
+ NS_DECL_NSIINTERFACEREQUESTOR
+ NS_DECL_NSISCROLLABLE
+ NS_DECL_NSITEXTSCROLL
+ NS_DECL_NSIWEBBROWSER
+ NS_DECL_NSIWEBNAVIGATION
+ NS_DECL_NSIWEBBROWSERSETUP
+ NS_DECL_NSIWEBBROWSERPERSIST
+ NS_DECL_NSICANCELABLE
+ NS_DECL_NSIWEBBROWSERFOCUS
+ NS_DECL_NSIWEBBROWSERSTREAM
+ NS_DECL_NSIWEBPROGRESSLISTENER
+
+protected:
+ virtual ~nsWebBrowser();
+ NS_IMETHOD InternalDestroy();
+
+ // XXXbz why are these NS_IMETHOD? They're not interface methods!
+ NS_IMETHOD SetDocShell(nsIDocShell* aDocShell);
+ NS_IMETHOD EnsureDocShellTreeOwner();
+ NS_IMETHOD BindListener(nsISupports* aListener, const nsIID& aIID);
+ NS_IMETHOD UnBindListener(nsISupports* aListener, const nsIID& aIID);
+ NS_IMETHOD EnableGlobalHistory(bool aEnable);
+
+ // nsIWidgetListener
+ virtual void WindowRaised(nsIWidget* aWidget);
+ virtual void WindowLowered(nsIWidget* aWidget);
+ bool PaintWindow(nsIWidget* aWidget, mozilla::LayoutDeviceIntRegion aRegion);
+
+protected:
+ RefPtr<nsDocShellTreeOwner> mDocShellTreeOwner;
+ nsCOMPtr<nsIDocShell> mDocShell;
+ nsCOMPtr<nsIInterfaceRequestor> mDocShellAsReq;
+ nsCOMPtr<nsIBaseWindow> mDocShellAsWin;
+ nsCOMPtr<nsIWebNavigation> mDocShellAsNav;
+ nsCOMPtr<nsIScrollable> mDocShellAsScrollable;
+ nsCOMPtr<nsITextScroll> mDocShellAsTextScroll;
+ mozilla::DocShellOriginAttributes mOriginAttributes;
+
+ nsCOMPtr<nsIWidget> mInternalWidget;
+ nsCOMPtr<nsIWindowWatcher> mWWatch;
+ nsAutoPtr<nsWebBrowserInitInfo> mInitInfo;
+ uint32_t mContentType;
+ bool mActivating;
+ bool mShouldEnableHistory;
+ bool mIsActive;
+ nativeWindow mParentNativeWindow;
+ nsIWebProgressListener* mProgressListener;
+ nsCOMPtr<nsIWebProgress> mWebProgress;
+
+ nsCOMPtr<nsIPrintSettings> mPrintSettings;
+
+ WidgetListenerDelegate mWidgetListenerDelegate;
+
+ // cached background color
+ nscolor mBackgroundColor;
+
+ // persistence object
+ nsCOMPtr<nsIWebBrowserPersist> mPersist;
+ uint32_t mPersistCurrentState;
+ nsresult mPersistResult;
+ uint32_t mPersistFlags;
+
+ // stream
+ RefPtr<nsEmbedStream> mStream;
+
+ // Weak Reference interfaces...
+ nsIWidget* mParentWidget;
+ nsAutoPtr<nsTArray<nsWebBrowserListenerState> > mListenerArray;
+};
+
+#endif /* nsWebBrowser_h__ */