diff -r 000000000000 -r 6474c204b198 xpfe/appshell/src/nsXULWindow.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xpfe/appshell/src/nsXULWindow.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,178 @@ +/* -*- 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 nsXULWindow_h__ +#define nsXULWindow_h__ + +// Local Includes +#include "nsChromeTreeOwner.h" +#include "nsContentTreeOwner.h" + +// Helper classes +#include "nsCOMPtr.h" +#include "nsTArray.h" +#include "nsString.h" +#include "nsWeakReference.h" +#include "nsCOMArray.h" +#include "nsRect.h" + +// Interfaces needed +#include "nsIBaseWindow.h" +#include "nsIDocShell.h" +#include "nsIDocShellTreeItem.h" +#include "nsIDOMWindow.h" +#include "nsIInterfaceRequestor.h" +#include "nsIInterfaceRequestorUtils.h" +#include "nsIXULWindow.h" +#include "nsIPrompt.h" +#include "nsIAuthPrompt.h" +#include "nsIXULBrowserWindow.h" +#include "nsIWeakReference.h" +#include "nsIWidgetListener.h" + +namespace mozilla { +namespace dom { +class Element; +} +} + +// nsXULWindow + +#define NS_XULWINDOW_IMPL_CID \ +{ /* 8eaec2f3-ed02-4be2-8e0f-342798477298 */ \ + 0x8eaec2f3, \ + 0xed02, \ + 0x4be2, \ + { 0x8e, 0x0f, 0x34, 0x27, 0x98, 0x47, 0x72, 0x98 } \ +} + +class nsContentShellInfo; + +class nsXULWindow : public nsIBaseWindow, + public nsIInterfaceRequestor, + public nsIXULWindow, + public nsSupportsWeakReference +{ +friend class nsChromeTreeOwner; +friend class nsContentTreeOwner; + +public: + NS_DECL_THREADSAFE_ISUPPORTS + + NS_DECL_NSIINTERFACEREQUESTOR + NS_DECL_NSIXULWINDOW + NS_DECL_NSIBASEWINDOW + + NS_DECLARE_STATIC_IID_ACCESSOR(NS_XULWINDOW_IMPL_CID) + + void LockUntilChromeLoad() { mLockedUntilChromeLoad = true; } + bool IsLocked() const { return mLockedUntilChromeLoad; } + void IgnoreXULSizeMode(bool aEnable) { mIgnoreXULSizeMode = aEnable; } + +protected: + enum persistentAttributes { + PAD_MISC = 0x1, + PAD_POSITION = 0x2, + PAD_SIZE = 0x4 + }; + + nsXULWindow(uint32_t aChromeFlags); + virtual ~nsXULWindow(); + + NS_IMETHOD EnsureChromeTreeOwner(); + NS_IMETHOD EnsureContentTreeOwner(); + NS_IMETHOD EnsurePrimaryContentTreeOwner(); + NS_IMETHOD EnsurePrompter(); + NS_IMETHOD EnsureAuthPrompter(); + + void OnChromeLoaded(); + void StaggerPosition(int32_t &aRequestedX, int32_t &aRequestedY, + int32_t aSpecWidth, int32_t aSpecHeight); + bool LoadPositionFromXUL(); + bool LoadSizeFromXUL(); + bool LoadMiscPersistentAttributesFromXUL(); + void SyncAttributesToWidget(); + NS_IMETHOD SavePersistentAttributes(); + + NS_IMETHOD GetWindowDOMWindow(nsIDOMWindow** aDOMWindow); + mozilla::dom::Element* GetWindowDOMElement() const; + + // See nsIDocShellTreeOwner for docs on next two methods + NS_HIDDEN_(nsresult) ContentShellAdded(nsIDocShellTreeItem* aContentShell, + bool aPrimary, bool aTargetable, + const nsAString& aID); + NS_HIDDEN_(nsresult) ContentShellRemoved(nsIDocShellTreeItem* aContentShell); + NS_IMETHOD SizeShellTo(nsIDocShellTreeItem* aShellItem, int32_t aCX, + int32_t aCY); + NS_IMETHOD ExitModalLoop(nsresult aStatus); + NS_IMETHOD CreateNewChromeWindow(int32_t aChromeFlags, nsIXULWindow **_retval); + NS_IMETHOD CreateNewContentWindow(int32_t aChromeFlags, nsIXULWindow **_retval); + + void EnableParent(bool aEnable); + bool ConstrainToZLevel(bool aImmediate, nsWindowZ *aPlacement, + nsIWidget *aReqBelow, nsIWidget **aActualBelow); + void PlaceWindowLayersBehind(uint32_t aLowLevel, uint32_t aHighLevel, + nsIXULWindow *aBehind); + void SetContentScrollbarVisibility(bool aVisible); + bool GetContentScrollbarVisibility(); + void PersistentAttributesDirty(uint32_t aDirtyFlags); + + nsChromeTreeOwner* mChromeTreeOwner; + nsContentTreeOwner* mContentTreeOwner; + nsContentTreeOwner* mPrimaryContentTreeOwner; + nsCOMPtr mWindow; + nsCOMPtr mDocShell; + nsCOMPtr mDOMWindow; + nsCOMPtr mParentWindow; + nsCOMPtr mPrompter; + nsCOMPtr mAuthPrompter; + nsCOMPtr mXULBrowserWindow; + nsCOMPtr mPrimaryContentShell; + nsTArray mContentShells; // array of doc shells by id + nsresult mModalStatus; + bool mContinueModalLoop; + bool mDebuting; // being made visible right now + bool mChromeLoaded; // True when chrome has loaded + bool mShowAfterLoad; + bool mIntrinsicallySized; + bool mCenterAfterLoad; + bool mIsHiddenWindow; + bool mLockedUntilChromeLoad; + bool mIgnoreXULSize; + bool mIgnoreXULPosition; + bool mChromeFlagsFrozen; + bool mIgnoreXULSizeMode; + // mDestroying is used to prevent reentry into into Destroy(), which can + // otherwise happen due to script running as we tear down various things. + bool mDestroying; + uint32_t mContextFlags; + uint32_t mPersistentAttributesDirty; // persistentAttributes + uint32_t mPersistentAttributesMask; + uint32_t mChromeFlags; + nsString mTitle; + nsIntRect mOpenerScreenRect; // the screen rect of the opener + + nsCOMArray mTargetableShells; // targetable shells only +}; + +NS_DEFINE_STATIC_IID_ACCESSOR(nsXULWindow, NS_XULWINDOW_IMPL_CID) + +// nsContentShellInfo +// Used to map shell IDs to nsIDocShellTreeItems. + +class nsContentShellInfo +{ +public: + nsContentShellInfo(const nsAString& aID, + nsIWeakReference* aContentShell); + ~nsContentShellInfo(); + +public: + nsAutoString id; // The identifier of the content shell + nsWeakPtr child; // content shell (weak reference to nsIDocShellTreeItem) +}; + +#endif /* nsXULWindow_h__ */