summaryrefslogtreecommitdiffstats
path: root/xpfe/appshell/nsWebShellWindow.h
diff options
context:
space:
mode:
Diffstat (limited to 'xpfe/appshell/nsWebShellWindow.h')
-rw-r--r--xpfe/appshell/nsWebShellWindow.h116
1 files changed, 116 insertions, 0 deletions
diff --git a/xpfe/appshell/nsWebShellWindow.h b/xpfe/appshell/nsWebShellWindow.h
new file mode 100644
index 000000000..e2b796161
--- /dev/null
+++ b/xpfe/appshell/nsWebShellWindow.h
@@ -0,0 +1,116 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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 nsWebShellWindow_h__
+#define nsWebShellWindow_h__
+
+#include "mozilla/Mutex.h"
+#include "nsIWebProgressListener.h"
+#include "nsITimer.h"
+#include "nsCOMPtr.h"
+#include "nsXULWindow.h"
+#include "nsIWidgetListener.h"
+#include "nsITabParent.h"
+
+/* Forward declarations.... */
+class nsIURI;
+
+struct nsWidgetInitData;
+
+namespace mozilla {
+class WebShellWindowTimerCallback;
+} // namespace mozilla
+
+class nsWebShellWindow final : public nsXULWindow,
+ public nsIWebProgressListener
+{
+public:
+
+ // The implementation of non-refcounted nsIWidgetListener, which would hold a
+ // strong reference on stack before calling nsWebShellWindow
+ class WidgetListenerDelegate : public nsIWidgetListener
+ {
+ public:
+ explicit WidgetListenerDelegate(nsWebShellWindow* aWebShellWindow)
+ : mWebShellWindow(aWebShellWindow) {}
+
+ virtual nsIXULWindow* GetXULWindow() override;
+ virtual nsIPresShell* GetPresShell() override;
+ virtual bool WindowMoved(nsIWidget* aWidget, int32_t x, int32_t y) override;
+ virtual bool WindowResized(nsIWidget* aWidget, int32_t aWidth, int32_t aHeight) override;
+ virtual bool RequestWindowClose(nsIWidget* aWidget) override;
+ virtual void SizeModeChanged(nsSizeMode sizeMode) override;
+ virtual void UIResolutionChanged() override;
+ virtual void FullscreenChanged(bool aInFullscreen) override;
+ virtual void OSToolbarButtonPressed() override;
+ virtual bool ZLevelChanged(bool aImmediate,
+ nsWindowZ *aPlacement,
+ nsIWidget* aRequestBelow,
+ nsIWidget** aActualBelow) override;
+ virtual void WindowActivated() override;
+ virtual void WindowDeactivated() override;
+
+ private:
+ // The lifetime of WidgetListenerDelegate is bound to nsWebShellWindow so
+ // we just use a raw pointer here.
+ nsWebShellWindow* mWebShellWindow;
+ };
+
+ explicit nsWebShellWindow(uint32_t aChromeFlags);
+
+ // nsISupports interface...
+ NS_DECL_ISUPPORTS_INHERITED
+
+ // nsWebShellWindow methods...
+ nsresult Initialize(nsIXULWindow * aParent, nsIXULWindow * aOpener,
+ nsIURI* aUrl,
+ int32_t aInitialWidth, int32_t aInitialHeight,
+ bool aIsHiddenWindow,
+ nsITabParent *aOpeningTab,
+ mozIDOMWindowProxy *aOpenerWIndow,
+ nsWidgetInitData& widgetInitData);
+
+ nsresult Toolbar();
+
+ // nsIWebProgressListener
+ NS_DECL_NSIWEBPROGRESSLISTENER
+
+ // nsIBaseWindow
+ NS_IMETHOD Destroy() override;
+
+ // nsIWidgetListener
+ nsIXULWindow* GetXULWindow() { return this; }
+ nsIPresShell* GetPresShell();
+ bool WindowMoved(nsIWidget* aWidget, int32_t x, int32_t y);
+ bool WindowResized(nsIWidget* aWidget, int32_t aWidth, int32_t aHeight);
+ bool RequestWindowClose(nsIWidget* aWidget);
+ void SizeModeChanged(nsSizeMode sizeMode);
+ void UIResolutionChanged();
+ void FullscreenChanged(bool aInFullscreen);
+ void OSToolbarButtonPressed();
+ bool ZLevelChanged(bool aImmediate, nsWindowZ *aPlacement,
+ nsIWidget* aRequestBelow, nsIWidget** aActualBelow);
+ void WindowActivated();
+ void WindowDeactivated();
+
+protected:
+ friend class mozilla::WebShellWindowTimerCallback;
+
+ virtual ~nsWebShellWindow();
+
+ void LoadContentAreas();
+ bool ExecuteCloseHandler();
+ void ConstrainToOpenerScreen(int32_t* aX, int32_t* aY);
+
+ nsCOMPtr<nsITimer> mSPTimer;
+ mozilla::Mutex mSPTimerLock;
+ WidgetListenerDelegate mWidgetListenerDelegate;
+
+ void SetPersistenceTimer(uint32_t aDirtyFlags);
+ void FirePersistenceTimer();
+};
+
+
+#endif /* nsWebShellWindow_h__ */