Back to index

lightning-sunbird  0.9+nobinonly
Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | Friends
nsGlobalWindow Class Reference

#include <nsGlobalWindow.h>

Inheritance diagram for nsGlobalWindow:
Inheritance graph
[legend]
Collaboration diagram for nsGlobalWindow:
Collaboration graph
[legend]

List of all members.

Public Member Functions

nsPIDOMWindowGetPrivateParent ()
void ReallyCloseWindow ()
virtual NS_DECL_ISUPPORTS void SetContext (nsIScriptContext *aContext)
virtual nsIScriptContextGetContext ()
virtual nsresult SetNewDocument (nsIDOMDocument *aDocument, nsISupports *aState, PRBool aRemoveEventListeners, PRBool aClearScopeHint)
virtual void SetDocShell (nsIDocShell *aDocShell)
virtual nsIDocShellGetDocShell ()
virtual void SetOpenerWindow (nsIDOMWindowInternal *aOpener)
virtual void SetGlobalObjectOwner (nsIScriptGlobalObjectOwner *aOwner)
 Let the script global object know who its owner is.
virtual
nsIScriptGlobalObjectOwner
GetGlobalObjectOwner ()
 Get the owner of the script global object.
virtual nsresult HandleDOMEvent (nsPresContext *aPresContext, nsEvent *aEvent, nsIDOMEvent **aDOMEvent, PRUint32 aFlags, nsEventStatus *aEventStatus)
virtual JSObjectGetGlobalJSObject ()
virtual void OnFinalize (JSObject *aJSObject)
 Called when the global JSObject is finalized.
virtual void SetScriptsEnabled (PRBool aEnabled, PRBool aFireTimeouts)
 Called to enable/disable scripts.
virtual nsresult SetNewArguments (PRUint32 aArgc, void *aArgv)
 Set a new arguments array for this window.
virtual nsIPrincipalGetPrincipal ()
NS_DECL_NSIDOMWINDOW
NS_DECL_NSIDOMWINDOW2
NS_DECL_NSIDOMWINDOWINTERNAL
NS_DECL_NSIDOMJSWINDOW
NS_DECL_NSIDOMEVENTTARGET
NS_DECL_NSIDOM3EVENTTARGET
NS_DECL_NSIDOMNSEVENTTARGET
NS_IMETHOD 
AddEventListenerByIID (nsIDOMEventListener *aListener, const nsIID &aIID)
NS_IMETHOD RemoveEventListenerByIID (nsIDOMEventListener *aListener, const nsIID &aIID)
NS_IMETHOD GetListenerManager (nsIEventListenerManager **aInstancePtrResult)
NS_IMETHOD HandleEvent (nsIDOMEvent *aEvent)
NS_IMETHOD GetSystemEventGroup (nsIDOMEventGroup **aGroup)
virtual nsIDOMGCParticipantGetSCCIndex ()
 Get a reference node for what is known to be a strongly connected component of nsIDOMGCParticipants.
virtual void AppendReachableList (nsCOMArray< nsIDOMGCParticipant > &aArray)
 Append the list of nsIDOMGCPartipants reachable from this one via C++ getters exposed to script that return a different result from |GetSCCIndex|.
virtual NS_HIDDEN_ (nsPIDOMWindow *) GetPrivateRoot()
virtual NS_HIDDEN_ (nsresult) GetObjectProperty(const PRUnichar *aProperty
virtual NS_HIDDEN_ (nsresult) Activate()
virtual NS_HIDDEN_ (nsresult) Deactivate()
virtual NS_HIDDEN_ (nsIFocusController *) GetRootFocusController()
virtual NS_HIDDEN_ (void) SetOpenerScriptURL(nsIURI *aURI)
virtual NS_HIDDEN_ (PopupControlState) PushPopupControlState(PopupControlState state
virtual NS_HIDDEN_ (void) PopPopupControlState(PopupControlState state) const
virtual NS_HIDDEN_ (PopupControlState) GetPopupControlState() const
virtual NS_HIDDEN_ (OpenAllowValue) GetOpenAllow(const nsAString &aName)
virtual NS_HIDDEN_ (nsresult) SaveWindowState(nsISupports **aState)
virtual NS_HIDDEN_ (nsresult) RestoreWindowState(nsISupports *aState)
virtual NS_HIDDEN_ (PRBool) WouldReuseInnerWindow(nsIDocument *aNewDocument)
virtual NS_HIDDEN_ (void) SetOpenerWindow(nsIDOMWindowInternal *aOpener
virtual NS_HIDDEN_ (nsresult) FireDelayedDOMEvents()
virtual NS_HIDDEN_ (void) EnterModalState()
virtual NS_HIDDEN_ (void) LeaveModalState()
virtual NS_HIDDEN_ (void) SetOpenerScriptPrincipal(nsIPrincipal *aPrincipal)
virtual NS_HIDDEN_ (nsIPrincipal *) GetOpenerScriptPrincipal()
NS_DECL_NSIDOMVIEWCSS
NS_DECL_NSIDOMABSTRACTVIEW
NS_DECL_NSIDOMSTORAGEWINDOW
NS_DECL_NSIINTERFACEREQUESTOR
NS_DECL_NSIOBSERVER 
nsGlobalWindow (nsGlobalWindow *aOuterWindow)
nsIScriptContextGetContextInternal ()
nsGlobalWindowGetOuterWindowInternal ()
nsGlobalWindowGetCurrentInnerWindowInternal ()
nsIDocShellGetDocShellInternal ()
PRBool IsFrozen () const
PRBool IsCreatingInnerWindow () const
virtual void SetOpenerScriptPrincipal (nsIPrincipal *aPrincipal)=0
virtual nsIPrincipalGetOpenerScriptPrincipal ()=0
virtual void SetOpenerWindow (nsIDOMWindowInternal *aOpener, PRBool aOriginalOpener)=0
 Set the opener window.
virtual nsresult FireDelayedDOMEvents ()=0
 Fire any DOM notification events related to things that happened while the window was frozen.
virtual void EnterModalState ()=0
 Callback for notifying a window about a modal dialog being opened/closed with the window as a parent.
virtual void LeaveModalState ()=0
virtual nsPIDOMWindowGetPrivateRoot ()=0
virtual nsresult GetObjectProperty (const PRUnichar *aProperty, nsISupports **aObject)=0
virtual nsresult Activate ()=0
virtual nsresult Deactivate ()=0
nsIChromeEventHandlerGetChromeEventHandler () const
PRBool HasMutationListeners (PRUint32 aMutationEventType) const
void SetMutationListeners (PRUint32 aType)
virtual nsIFocusControllerGetRootFocusController ()=0
nsIDOMDocumentGetExtantDocument () const
nsIDOMElementGetFrameElementInternal () const
void SetFrameElementInternal (nsIDOMElement *aFrameElement)
PRBool IsLoadingOrRunningTimeout () const
PRBool IsLoading () const
PRBool IsHandlingResizeEvent () const
virtual void SetOpenerScriptURL (nsIURI *aURI)=0
virtual PopupControlState PushPopupControlState (PopupControlState aState, PRBool aForce) const =0
virtual void PopPopupControlState (PopupControlState state) const =0
virtual PopupControlState GetPopupControlState () const =0
virtual OpenAllowValue GetOpenAllow (const nsAString &aName)=0
virtual nsresult SaveWindowState (nsISupports **aState)=0
virtual nsresult RestoreWindowState (nsISupports *aState)=0
nsPIDOMWindowGetOuterWindow ()
nsPIDOMWindowGetCurrentInnerWindow () const
PRBool IsInnerWindow () const
PRBool IsOuterWindow () const
virtual PRBool WouldReuseInnerWindow (nsIDocument *aNewDocument)=0
void alert (in DOMString text)
boolean confirm (in DOMString text)
DOMString prompt (in DOMString aMessage, in DOMString aInitial, in DOMString aTitle, in unsigned long aSavePassword)
void focus ()
void blur ()
void back ()
void forward ()
void home ()
void stop ()
void print ()
void moveTo (in long xPos, in long yPos)
void moveBy (in long xDif, in long yDif)
void resizeTo (in long width, in long height)
void resizeBy (in long widthDif, in long heightDif)
void scroll (in long xScroll, in long yScroll)
nsIDOMWindow open (in DOMString url, in DOMString name, in DOMString options)
 Open a new window with this one as the parent.
nsIDOMWindow openDialog (in DOMString url, in DOMString name, in DOMString options, in nsISupports aExtraArgument)
void close ()
void updateCommands (in DOMString action)
boolean find (in DOMString str, in boolean caseSensitive, in boolean backwards, in boolean wrapAround, in boolean wholeWord, in boolean searchInFrames, in boolean showDialog)
DOMString atob (in DOMString aAsciiString)
DOMString btoa (in DOMString aBase64Data)
void scrollTo (in long xScroll, in long yScroll)
 Method for scrolling this window to an absolute pixel offset.
void scrollBy (in long xScrollDif, in long yScrollDif)
 Method for scrolling this window to a pixel offset relative to the current scroll position.
nsISelection getSelection ()
 Method for accessing this window's selection object.
void scrollByLines (in long numLines)
 Method for scrolling this window by a number of lines.
void scrollByPages (in long numPages)
 Method for scrolling this window by a number of pages.
void sizeToContent ()
 Method for sizing this window to the content in the window.
void dump (in DOMString str)
long setTimeout ()
 These methods take typeless arguments and optional arguments, the first argument is either a function or a string, the second argument must be a number (ms) and the rest of the arguments (2 ...
long setInterval ()
void clearTimeout ()
 These methods take one optional argument that's the timer ID to clear.
void clearInterval ()
void setResizable (in boolean resizable)
void captureEvents (in long eventFlags)
void releaseEvents (in long eventFlags)
void routeEvent (in nsIDOMEvent evt)
void enableExternalCapture ()
void disableExternalCapture ()
DOMString prompt ()
 The prompt method takes up to four arguments, the arguments are message, initial prompt value, title and a save password flag.
nsIDOMWindow open ()
 These are the scriptable versions of nsIDOMWindowInternal::open() and nsIDOMWindowInternal::openDialog() that take 3 optional arguments.
nsIDOMWindow openDialog ()
boolean find ()
void addEventListener (in DOMString type, in nsIDOMEventListener listener, in boolean useCapture)
 This method allows the registration of event listeners on the event target.
void removeEventListener (in DOMString type, in nsIDOMEventListener listener, in boolean useCapture)
 This method allows the removal of event listeners from the event target.
boolean dispatchEvent (in nsIDOMEvent evt) raises (DOMException)
 This method allows the dispatch of events into the implementations event model.
void addGroupedEventListener (in DOMString type, in nsIDOMEventListener listener, in boolean useCapture, in nsIDOMEventGroup evtGroup)
void removeGroupedEventListener (in DOMString type, in nsIDOMEventListener listener, in boolean useCapture, in nsIDOMEventGroup evtGroup)
boolean canTrigger (in DOMString type)
boolean isRegisteredHere (in DOMString type)
void addEventListener (in DOMString type, in nsIDOMEventListener listener, in boolean useCapture, in boolean wantsUntrusted)
 This method is the same as the addEventListener() method defined in nsIDOMEventTarget, but it takes one additional argument which lets callers control whether or not they want to receive untrusted events (synthetic events generated by untrusted code)
nsIDOMCSSStyleDeclaration getComputedStyle (in nsIDOMElement elt, in DOMString pseudoElt)
void getInterface (in nsIIDRef uuid,[iid_is(uuid), retval] out nsQIResult result)
 Retrieves the specified interface pointer.
void observe (in nsISupports aSubject, in string aTopic, in wstring aData)
 Observe will be called when there is a notification for the topic |aTopic|.

Static Public Member Functions

static nsGlobalWindowFromWrapper (nsIXPConnectWrappedNative *wrapper)
static void ShutDown ()
static PRBool IsCallerChrome ()

Public Attributes

virtual nsISupports ** aObject
virtual PRBool aForce const
virtual PRBool aOriginalOpener
readonly attribute
nsIDOMWindowInternal 
window
readonly attribute
nsIDOMWindowInternal 
self
readonly attribute nsIDOMNavigator navigator
readonly attribute nsIDOMScreen screen
readonly attribute nsIDOMHistory history
readonly attribute nsIDOMWindow content
readonly attribute nsIPrompt prompter
readonly attribute nsIDOMBarProp menubar
readonly attribute nsIDOMBarProp toolbar
readonly attribute nsIDOMBarProp locationbar
readonly attribute nsIDOMBarProp personalbar
readonly attribute nsIDOMBarProp statusbar
readonly attribute nsIDOMBarProp directories
readonly attribute boolean closed
readonly attribute nsIDOMCrypto crypto
readonly attribute nsIDOMPkcs11 pkcs11
readonly attribute nsIControllers controllers
attribute nsIDOMWindowInternal opener
attribute DOMString status
attribute DOMString defaultStatus
readonly attribute nsIDOMLocation location
attribute long innerWidth
attribute long innerHeight
attribute long outerWidth
attribute long outerHeight
attribute long screenX
attribute long screenY
readonly attribute long pageXOffset
readonly attribute long pageYOffset
readonly attribute long scrollMaxX
readonly attribute long scrollMaxY
readonly attribute unsigned long length
attribute boolean fullScreen
readonly attribute nsIDOMElement frameElement
readonly attribute
nsIDOMEventTarget 
windowRoot
 Get the window root for this window.
readonly attribute nsIDOMDocument document
 Accessor for the document in this window.
readonly attribute nsIDOMWindow parent
 Accessor for this window's parent window, or the window itself if there is no parent, or if the parent is of different type (i.e.
readonly attribute nsIDOMWindow top
 Accessor for the root of this hierarchy of windows.
readonly attribute nsIDOMBarProp scrollbars
 Accessor for the object that controls whether or not scrollbars are shown in this window.
readonly attribute
nsIDOMWindowCollection 
frames
 Accessor for the child windows in this window.
attribute DOMString name
 Set/Get the name of this window.
attribute float textZoom
 Set/Get the document scale factor as a multiplier on the default size.
readonly attribute long scrollX
 Accessor for the current x scroll position in this window in pixels.
readonly attribute long scrollY
 Accessor for the current y scroll position in this window in pixels.
readonly attribute nsIDOMWindow frames
 window.frames in Netscape 4.x and IE is just a reference to the window itself (i.e.
readonly attribute
nsIDOMDocumentView 
document
readonly attribute nsIDOMStorage sessionStorage
 Session storage for the current browsing context.
readonly attribute
nsIDOMStorageList 
globalStorage
 Global storage, accessible by domain.
PRCList * next
PRCList * prev

Protected Member Functions

virtual ~nsGlobalWindow ()
void CleanUp ()
void ClearControllers ()
void FreeInnerObjects (JSContext *cx)
nsresult SetNewDocument (nsIDOMDocument *aDocument, nsISupports *aState, PRBool aRemoveEventListeners, PRBool aClearScopeHint, PRBool aIsInternalCall)
nsIDOMWindowInternalGetParentInternal ()
PRBool IsPopupSpamWindow ()
void SetPopupSpamWindow (PRBool aPopup)
 NS_HIDDEN_ (nsresult) OpenInternal(const nsAString &aUrl
nsresult SetTimeoutOrInterval (PRBool aIsInterval, PRInt32 *aReturn)
void RunTimeout (nsTimeout *aTimeout)
nsresult ClearTimeoutOrInterval ()
void ClearAllTimeouts ()
void InsertTimeoutIntoList (nsTimeout **aInsertionPoint, nsTimeout *aTimeout)
nsresult GetTreeOwner (nsIDocShellTreeOwner **aTreeOwner)
nsresult GetTreeOwner (nsIBaseWindow **aTreeOwner)
nsresult GetWebBrowserChrome (nsIWebBrowserChrome **aBrowserChrome)
nsresult GetScrollInfo (nsIScrollableView **aScrollableView, float *aP2T, float *aT2P)
nsresult SecurityCheckURL (const char *aURL)
nsresult BuildURIfromBase (const char *aURL, nsIURI **aBuiltURI, PRBool *aFreeSecurityPass, JSContext **aCXused)
PopupControlState CheckForAbusePoint ()
OpenAllowValue CheckOpenAllow (PopupControlState aAbuseLevel)
void FireAbuseEvents (PRBool aBlocked, PRBool aWindow, const nsAString &aPopupURL, const nsAString &aPopupWindowFeatures)
void FlushPendingNotifications (mozFlushType aType)
void EnsureSizeUpToDate ()
void EnsureReflowFlushAndPaint ()
nsresult CheckSecurityWidthAndHeight (PRInt32 *width, PRInt32 *height)
nsresult CheckSecurityLeftAndTop (PRInt32 *left, PRInt32 *top)
nsresult FindInternal (const nsAString &aStr, PRBool caseSensitive, PRBool backwards, PRBool wrapAround, PRBool wholeWord, PRBool searchInFrames, PRBool showDialog, PRBool *aReturn)
nsresult ConvertCharset (const nsAString &aStr, char **aDest)
PRBool GetBlurSuppression ()
nsresult GetScrollXY (PRInt32 *aScrollX, PRInt32 *aScrollY, PRBool aDoFlush)
nsresult GetScrollMaxXY (PRInt32 *aScrollMaxX, PRInt32 *aScrollMaxY)
PRBool IsFrame ()
PRBool DispatchCustomEvent (const char *aEventName)
PRBool WindowExists (const nsAString &aName, PRBool aLookForCallerOnJSStack)
already_AddRefed< nsIWidgetGetMainWidget ()
void SuspendTimeouts ()
virtual nsresult ResumeTimeouts ()
void Freeze ()
void Thaw ()
PRBool IsInModalState ()

Static Protected Member Functions

static void CloseWindow (nsISupports *aWindow)
static void ClearWindowScope (nsISupports *aWindow)
static void TimerCallback (nsITimer *aTimer, void *aClosure)
static PRBool CanSetProperty (const char *aPrefName)
static void MakeScriptDialogTitle (nsAString &aOutTitle)

Protected Attributes

const nsAString & aName
const nsAString const nsAString & aOptions
const nsAString const
nsAString PRBool 
aDialog
const nsAString const
nsAString PRBool PRBool 
aCalledNoScript
const nsAString const
nsAString PRBool PRBool PRBool 
aDoJSFixups
const nsAString const
nsAString PRBool PRBool PRBool
jsval
argv
const nsAString const
nsAString PRBool PRBool PRBool
jsval PRUint32 
argc
const nsAString const
nsAString PRBool PRBool PRBool
jsval PRUint32 nsISupports * 
aExtraArgument
const nsAString const
nsAString PRBool PRBool PRBool
jsval PRUint32 nsISupports
nsIPrincipal
aCalleePrincipal
const nsAString const
nsAString PRBool PRBool PRBool
jsval PRUint32 nsISupports
nsIPrincipal nsIDOMWindow ** 
aReturn
PRPackedBool mIsFrozen: 1
PRPackedBool mFullScreen: 1
PRPackedBool mIsClosed: 1
PRPackedBool mInClose: 1
PRPackedBool mHavePendingClose: 1
PRPackedBool mHadOriginalOpener: 1
PRPackedBool mIsPopupSpam: 1
PRPackedBool mCreatingInnerWindow: 1
PRUint32 mModalStateDepth
nsCOMPtr< nsIScriptContextmContext
nsCOMPtr< nsIDOMWindowInternalmOpener
nsCOMPtr< nsIControllersmControllers
JSObjectmArguments
nsRefPtr< nsNavigatormNavigator
nsRefPtr< nsScreenmScreen
nsRefPtr< nsHistorymHistory
nsRefPtr< nsDOMWindowListmFrames
nsRefPtr< nsBarPropmMenubar
nsRefPtr< nsBarPropmToolbar
nsRefPtr< nsBarPropmLocationbar
nsRefPtr< nsBarPropmPersonalbar
nsRefPtr< nsBarPropmStatusbar
nsRefPtr< nsBarPropmScrollbars
nsCOMPtr< nsIWeakReferencemWindowUtils
nsRefPtr< nsLocationmLocation
nsString mStatus
nsString mDefaultStatus
nsIScriptGlobalObjectOwnermGlobalObjectOwner
nsIDocShellmDocShell
nsCOMPtr< nsIDOMCryptomCrypto
nsCOMPtr< nsIDOMPkcs11mPkcs11
nsCOMPtr< nsIDOMStorageListgGlobalStorageList
nsCOMPtr
< nsIXPConnectJSObjectHolder
mInnerWindowHolder
nsCOMPtr< nsIPrincipalmOpenerScriptPrincipal
nsCOMPtr< nsIEventListenerManagermListenerManager
nsTimeoutmTimeouts
nsTimeout ** mTimeoutInsertionPoint
PRUint32 mTimeoutPublicIdCounter
PRUint32 mTimeoutFiringDepth
nsCOMPtr< nsIDOMStoragemSessionStorage
nsCOMPtr< nsIPrincipalmDocumentPrincipal
JSObjectmJSObject
nsDataHashtable
< nsStringHashKey, PRBool > * 
mPendingStorageEvents
nsCOMPtr< nsIChromeEventHandlermChromeEventHandler
nsCOMPtr< nsIDOMDocumentmDocument
nsIDOMElementmFrameElement
nsTimeoutmRunningTimeout
PRUint32 mMutationBits
PRPackedBool mIsDocumentLoaded
PRPackedBool mIsHandlingResizeEvent
PRPackedBool mIsInnerWindow
nsPIDOMWindowmInnerWindow
nsPIDOMWindowmOuterWindow

Static Protected Attributes

static nsIScriptSecurityManagersSecMan = nsnull
static nsIFactorysComputedDOMStyleFactory = nsnull

Friends

class WindowStateHolder
class nsDOMScriptableHelper
class nsDOMWindowUtils

Detailed Description

Definition at line 139 of file nsGlobalWindow.h.


Constructor & Destructor Documentation

Definition at line 328 of file nsGlobalWindow.cpp.

  : nsPIDOMWindow_MOZILLA_1_8_BRANCH2(aOuterWindow),
    mIsFrozen(PR_FALSE),
    mFullScreen(PR_FALSE),
    mIsClosed(PR_FALSE), 
    mInClose(PR_FALSE), 
    mHavePendingClose(PR_FALSE),
    mHadOriginalOpener(PR_FALSE),
    mIsPopupSpam(PR_FALSE),
    mCreatingInnerWindow(PR_FALSE),
    mModalStateDepth(0),
    mArguments(nsnull),
    mGlobalObjectOwner(nsnull),
    mDocShell(nsnull),
    mTimeouts(nsnull),
    mTimeoutInsertionPoint(&mTimeouts),
    mTimeoutPublicIdCounter(1),
    mTimeoutFiringDepth(0),
    mJSObject(nsnull),
    mPendingStorageEvents(nsnull)
#ifdef DEBUG
    , mSetOpenerWindowCalled(PR_FALSE)
#endif
{
  nsLayoutStatics::AddRef();

  // Initialize the PRCList (this).
  PR_INIT_CLIST(this);

  if (aOuterWindow) {
    // |this| is an inner window, add this inner window to the outer
    // window list of inners.
    PR_INSERT_AFTER(this, aOuterWindow);
  } else {
    // |this| is an outer window. Outer windows start out frozen and
    // remain frozen until they get an inner window, so freeze this
    // outer window here.
    Freeze();
  }

  // We could have failed the first time through trying
  // to create the entropy collector, so we should
  // try to get one until we succeed.
  if (gRefCnt++ == 0 || !gEntropyCollector) {
    CallGetService(NS_ENTROPYCOLLECTOR_CONTRACTID, &gEntropyCollector);
  }
#ifdef DEBUG
  printf("++DOMWINDOW == %d\n", gRefCnt);
#endif

#ifdef PR_LOGGING
  if (!gDOMLeakPRLog)
    gDOMLeakPRLog = PR_NewLogModule("DOMLeak");

  if (gDOMLeakPRLog)
    PR_LOG(gDOMLeakPRLog, PR_LOG_DEBUG,
           ("DOMWINDOW %p created outer=%p", this, aOuterWindow));
#endif

  if (!sSecMan) {
    CallGetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &sSecMan);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

nsGlobalWindow::~nsGlobalWindow ( ) [protected, virtual]

Definition at line 392 of file nsGlobalWindow.cpp.

{
  if (!--gRefCnt) {
    NS_IF_RELEASE(gEntropyCollector);
  }
#ifdef DEBUG
  printf("--DOMWINDOW == %d\n", gRefCnt);
#endif

#ifdef PR_LOGGING
  if (gDOMLeakPRLog)
    PR_LOG(gDOMLeakPRLog, PR_LOG_DEBUG,
           ("DOMWINDOW %p destroyed", this));
#endif

  if (IsOuterWindow()) {
    // An outer window is destroyed with inner windows still possibly
    // alive, iterate through the inner windows and null out their
    // back pointer to this outer, and pull them out of the list of
    // inner windows.

    nsGlobalWindow *w;
    while ((w = (nsGlobalWindow *)PR_LIST_HEAD(this)) != this) {
      NS_ASSERTION(w->mOuterWindow == this, "Uh, bad outer window pointer?");

      w->mOuterWindow = nsnull;

      PR_REMOVE_AND_INIT_LINK(w);
    }
  } else {
    if (mListenerManager) {
      mListenerManager->Disconnect();
      mListenerManager = nsnull;
    }

    // An inner window is destroyed, pull it out of the outer window's
    // list if inner windows.

    PR_REMOVE_LINK(this);

    // If our outer window's inner window is this window, null out the
    // outer window's reference to this window that's being deleted.
    nsGlobalWindow *outer = GetOuterWindowInternal();
    if (outer && outer->mInnerWindow == this) {
      outer->mInnerWindow = nsnull;
    }

    nsCOMPtr<nsIObserverService> observerService =
      do_GetService("@mozilla.org/observer-service;1");

    if (observerService) {
      observerService->RemoveObserver(this, "dom-storage-changed");
    }
  }

  mDocument = nsnull;           // Forces Release

  NS_ASSERTION(!mArguments, "mArguments wasn't cleaned up properly!");

  CleanUp();

  delete mPendingStorageEvents;

  nsLayoutStatics::Release();
}

Here is the call graph for this function:


Member Function Documentation

virtual nsresult nsPIDOMWindow::Activate ( ) [pure virtual, inherited]
void nsIDOMNSEventTarget::addEventListener ( in DOMString  type,
in nsIDOMEventListener  listener,
in boolean  useCapture,
in boolean  wantsUntrusted 
) [inherited]

This method is the same as the addEventListener() method defined in nsIDOMEventTarget, but it takes one additional argument which lets callers control whether or not they want to receive untrusted events (synthetic events generated by untrusted code)

Parameters:
typeSee the type argument to the same method in nsIDOMEventTarget.
listenerSee the listener argument to the same method in nsIDOMEventTarget.
useCaptureSee the listener argument to the same method in nsIDOMEventTarget.
wantsUntrustedIf false, the listener will not receive any untrusted events (see above), if true, the listener will receive events whether or not they're trusted
void nsIDOMEventTarget::addEventListener ( in DOMString  type,
in nsIDOMEventListener  listener,
in boolean  useCapture 
) [inherited]

This method allows the registration of event listeners on the event target.

If an EventListener is added to an EventTarget while it is processing an event, it will not be triggered by the current actions but may be triggered during a later stage of event flow, such as the bubbling phase.

If multiple identical EventListeners are registered on the same EventTarget with the same parameters the duplicate instances are discarded. They do not cause the EventListener to be called twice and since they are discarded they do not need to be removed with the removeEventListener method.

Parameters:
typeThe event type for which the user is registering
listenerThe listener parameter takes an interface implemented by the user which contains the methods to be called when the event occurs.
useCaptureIf true, useCapture indicates that the user wishes to initiate capture. After initiating capture, all events of the specified type will be dispatched to the registered EventListener before being dispatched to any EventTargets beneath them in the tree. Events which are bubbling upward through the tree will not trigger an EventListener designated to use capture.

Implements nsIDOMEventReceiver.

Definition at line 5439 of file nsGlobalWindow.cpp.

{
  nsCOMPtr<nsIEventListenerManager> manager;

  if (NS_SUCCEEDED (GetListenerManager(getter_AddRefs(manager)))) {
    manager->AddEventListenerByIID(aListener, aIID, NS_EVENT_FLAG_BUBBLE);
    return NS_OK;
  }
  return NS_ERROR_FAILURE;
}

Here is the call graph for this function:

void nsIDOM3EventTarget::addGroupedEventListener ( in DOMString  type,
in nsIDOMEventListener  listener,
in boolean  useCapture,
in nsIDOMEventGroup  evtGroup 
) [inherited]
void nsIDOMWindowInternal::alert ( in DOMString  text) [inherited]

Append the list of nsIDOMGCPartipants reachable from this one via C++ getters exposed to script that return a different result from |GetSCCIndex|.

The caller is responsible for taking the transitive closure of |AppendReachableList|.

This will only be called on objects that are returned by GetSCCIndex.

null pointers may be appended; they will be ignored by the caller.

Implements nsIDOMGCParticipant.

Definition at line 5523 of file nsGlobalWindow.cpp.

{
  AppendToReachableList(mChromeEventHandler, aArray);
  AppendToReachableList(mDocument, aArray);
  // XXXldb Do we want this to go both ways?
  if (IsOuterWindow()) {
    AppendToReachableList(mInnerWindow, aArray);
  } else {
    AppendToReachableList(mOuterWindow, aArray);
  }
}

Here is the call graph for this function:

DOMString nsIDOMWindowInternal::atob ( in DOMString  aAsciiString) [inherited]
DOMString nsIDOMWindowInternal::btoa ( in DOMString  aBase64Data) [inherited]
nsresult nsGlobalWindow::BuildURIfromBase ( const char *  aURL,
nsIURI **  aBuiltURI,
PRBool aFreeSecurityPass,
JSContext **  aCXused 
) [protected]

Definition at line 7317 of file nsGlobalWindow.cpp.

{
  nsIScriptContext *scx = GetContextInternal();
  JSContext *cx = nsnull;

  *aBuiltURI = nsnull;
  *aFreeSecurityPass = PR_FALSE;
  if (aCXused)
    *aCXused = nsnull;

  // get JSContext
  NS_ASSERTION(scx, "opening window missing its context");
  NS_ASSERTION(mDocument, "opening window missing its document");
  if (!scx || !mDocument)
    return NS_ERROR_FAILURE;

  nsCOMPtr<nsIDOMChromeWindow> chrome_win =
    do_QueryInterface(NS_STATIC_CAST(nsIDOMWindow *, this));

  if (IsCallerChrome() && !chrome_win) {
    // If open() is called from chrome on a non-chrome window, we'll
    // use the context from the window on which open() is being called
    // to prevent giving chrome priveleges to new windows opened in
    // such a way. This also makes us get the appropriate base URI for
    // the below URI resolution code.

    cx = (JSContext *)scx->GetNativeContext();
  } else {
    // get the JSContext from the call stack
    nsCOMPtr<nsIThreadJSContextStack> stack(do_GetService(sJSStackContractID));
    if (stack)
      stack->Peek(&cx);
  }

  /* resolve the URI, which could be relative to the calling window
     (note the algorithm to get the base URI should match the one
     used to actually kick off the load in nsWindowWatcher.cpp). */
  nsCAutoString charset(NS_LITERAL_CSTRING("UTF-8")); // default to utf-8
  nsIURI* baseURI = nsnull;
  nsCOMPtr<nsIURI> uriToLoad;
  nsCOMPtr<nsIDOMWindow> sourceWindow;

  if (cx) {
    nsIScriptContext *scriptcx = nsJSUtils::GetDynamicScriptContext(cx);
    if (scriptcx)
      sourceWindow = do_QueryInterface(scriptcx->GetGlobalObject());
  }

  if (!sourceWindow) {
    sourceWindow = do_QueryInterface(NS_ISUPPORTS_CAST(nsIDOMWindow *, this));
    *aFreeSecurityPass = PR_TRUE;
  }

  if (sourceWindow) {
    nsCOMPtr<nsIDOMDocument> domDoc;
    sourceWindow->GetDocument(getter_AddRefs(domDoc));
    nsCOMPtr<nsIDocument> doc(do_QueryInterface(domDoc));
    if (doc) {
      baseURI = doc->GetBaseURI();
      charset = doc->GetDocumentCharacterSet();
    }
  }

  if (aCXused)
    *aCXused = cx;
  return NS_NewURI(aBuiltURI, nsDependentCString(aURL), charset.get(), baseURI);
}

Here is the call graph for this function:

Here is the caller graph for this function:

PRBool nsGlobalWindow::CanSetProperty ( const char *  aPrefName) [static, protected]

Definition at line 4312 of file nsGlobalWindow.cpp.

{
  // Chrome can set any property.
  if (IsCallerChrome()) {
    return PR_TRUE;
  }

  // If the pref is set to true, we can not set the property
  // and vice versa.
  return !nsContentUtils::GetBoolPref(aPrefName, PR_TRUE);
}

Here is the call graph for this function:

boolean nsIDOM3EventTarget::canTrigger ( in DOMString  type) [inherited]
void nsIDOMJSWindow::captureEvents ( in long  eventFlags) [inherited]

Definition at line 4332 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_OUTER(CheckForAbusePoint, (), openAbused);

  NS_ASSERTION(mDocShell, "Must have docshell");
  
  nsCOMPtr<nsIDocShellTreeItem> item(do_QueryInterface(mDocShell));

  NS_ASSERTION(item, "Docshell doesn't implenent nsIDocShellTreeItem?");

  PRInt32 type = nsIDocShellTreeItem::typeChrome;
  item->GetItemType(&type);
  if (type != nsIDocShellTreeItem::typeContent)
    return openAllowed;

  // level of abuse we've detected, initialized to the current popup
  // state
  PopupControlState abuse = gPopupControlState;

  // limit the number of simultaneously open popups
  if (abuse == openAbused || abuse == openControlled) {
    PRInt32 popupMax = nsContentUtils::GetIntPref("dom.popup_maximum", -1);
    if (popupMax >= 0 && gOpenPopupSpamCount >= popupMax)
      abuse = openOverridden;
  }

  return abuse;
}

Here is the call graph for this function:

Definition at line 4365 of file nsGlobalWindow.cpp.

{
  NS_PRECONDITION(GetDocShell(), "Must have docshell");

  OpenAllowValue allowWindow = allowNoAbuse; // (also used for openControlled)
  
  if (aAbuseLevel >= openAbused) {
    allowWindow = allowNot;

    // However it might still not be blocked. For now we use both our
    // location and the top window's location when determining whether
    // a popup open request is whitelisted or not. This isn't ideal
    // when dealing with iframe/frame documents, but it'll do for
    // now. Getting the iframe/frame case right would require some
    // changes to the frontend's handling of popup events etc.
    if (aAbuseLevel == openAbused) {
      nsCOMPtr<nsIDOMWindow> topWindow;
      GetTop(getter_AddRefs(topWindow));

      nsCOMPtr<nsPIDOMWindow> topPIWin(do_QueryInterface(topWindow));

      if (topPIWin && (!IsPopupBlocked(topPIWin->GetExtantDocument()) ||
                       !IsPopupBlocked(mDocument))) {
        allowWindow = allowWhitelisted;
      }
    }
  }

  return allowWindow;
}

Here is the call graph for this function:

nsresult nsGlobalWindow::CheckSecurityLeftAndTop ( PRInt32 left,
PRInt32 top 
) [protected]

Definition at line 2904 of file nsGlobalWindow.cpp.

{
  // This one is harder. We have to get the screen size and window dimensions.

  // Check security state for use in determing window dimensions

  NS_ENSURE_TRUE(sSecMan, NS_ERROR_FAILURE);

  PRBool enabled;
  nsresult res = sSecMan->IsCapabilityEnabled("UniversalBrowserWrite",
                                              &enabled);
  if (NS_FAILED(res)) {
    enabled = PR_FALSE;
  }

  if (!enabled) {
    // if attempting to move the window, hide any open popups
    nsCOMPtr<nsIPresShell> presShell;
    mDocShell->GetPresShell(getter_AddRefs(presShell));
    nsCOMPtr<nsIPresShell_MOZILLA_1_8_BRANCH> presShell18 = do_QueryInterface(presShell);
    if (presShell18)
      presShell18->HidePopups();

    PRInt32 screenLeft, screenTop, screenWidth, screenHeight;
    PRInt32 winLeft, winTop, winWidth, winHeight;

    nsGlobalWindow* rootWindow =
      NS_STATIC_CAST(nsGlobalWindow*, GetPrivateRoot());
    if (rootWindow) {
      rootWindow->FlushPendingNotifications(Flush_Layout);
    }

    // Get the window size
    nsCOMPtr<nsIBaseWindow> treeOwner;
    GetTreeOwner(getter_AddRefs(treeOwner));
    if (treeOwner)
      treeOwner->GetPositionAndSize(&winLeft, &winTop, &winWidth, &winHeight);

    // Get the screen dimensions
    // XXX This should use nsIScreenManager once it's fully fleshed out.
    nsCOMPtr<nsIDOMScreen> screen;
    GetScreen(getter_AddRefs(screen));
    if (screen) {
      screen->GetAvailLeft(&screenLeft);
      screen->GetAvailWidth(&screenWidth);
      screen->GetAvailHeight(&screenHeight);
#if defined(XP_MAC) || defined(XP_MACOSX)
      /* The mac's coordinate system is different from the assumed Windows'
         system. It offsets by the height of the menubar so that a window
         placed at (0,0) will be entirely visible. Unfortunately that
         correction is made elsewhere (in Widget) and the meaning of
         the Avail... coordinates is overloaded. Here we allow a window
         to be placed at (0,0) because it does make sense to do so.
      */
      screen->GetTop(&screenTop);
#else
      screen->GetAvailTop(&screenTop);
#endif
    }

    if (screen && treeOwner) {
      if (aLeft) {
        if (screenLeft+screenWidth < *aLeft+winWidth)
          *aLeft = screenLeft+screenWidth - winWidth;
        if (screenLeft > *aLeft)
          *aLeft = screenLeft;
      }
      if (aTop) {
        if (screenTop+screenHeight < *aTop+winHeight)
          *aTop = screenTop+screenHeight - winHeight;
        if (screenTop > *aTop)
          *aTop = screenTop;
      }
    } else {
      if (aLeft)
        *aLeft = 0;
      if (aTop)
        *aTop = 0;
    }
  }

  return NS_OK;
}

Here is the call graph for this function:

nsresult nsGlobalWindow::CheckSecurityWidthAndHeight ( PRInt32 width,
PRInt32 height 
) [protected]

Definition at line 2867 of file nsGlobalWindow.cpp.

{
  if (!nsContentUtils::IsCallerTrustedForWrite()) {
    // if attempting to resize the window, hide any open popups
    nsCOMPtr<nsIPresShell> presShell;
    mDocShell->GetPresShell(getter_AddRefs(presShell));

    nsCOMPtr<nsIPresShell_MOZILLA_1_8_BRANCH> presShell18 = do_QueryInterface(presShell);
    if (presShell18)
      presShell18->HidePopups();
  }

  // This one is easy. Just ensure the variable is greater than 100;
  if ((aWidth && *aWidth < 100) || (aHeight && *aHeight < 100)) {
    // Check security state for use in determing window dimensions

    NS_ENSURE_TRUE(sSecMan, NS_ERROR_FAILURE);

    PRBool enabled;
    nsresult res = sSecMan->IsCapabilityEnabled("UniversalBrowserWrite",
                                                &enabled);

    if (NS_FAILED(res) || !enabled) {
      //sec check failed
      if (aWidth && *aWidth < 100) {
        *aWidth = 100;
      }
      if (aHeight && *aHeight < 100) {
        *aHeight = 100;
      }
    }
  }

  return NS_OK;
}

Here is the call graph for this function:

void nsGlobalWindow::CleanUp ( ) [protected]

Definition at line 467 of file nsGlobalWindow.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 7153 of file nsGlobalWindow.cpp.

{
  nsTimeout *timeout, *next;
  nsIScriptContext *scx = GetContextInternal();

  for (timeout = mTimeouts; timeout; timeout = next) {
    /* If RunTimeout() is higher up on the stack for this
       window, e.g. as a result of document.write from a timeout,
       then we need to reset the list insertion point for
       newly-created timeouts in case the user adds a timeout,
       before we pop the stack back to RunTimeout. */
    if (mRunningTimeout == timeout)
      mTimeoutInsertionPoint = &mTimeouts;

    next = timeout->mNext;

    if (timeout->mTimer) {
      timeout->mTimer->Cancel();
      timeout->mTimer = nsnull;

      // Drop the count since the timer isn't going to hold on
      // anymore.
      timeout->Release(scx);
    }

    // Set timeout->mCleared to true to indicate that the timeout was
    // cleared and taken out of the list of timeouts
    timeout->mCleared = PR_TRUE;

    // Drop the count since we're removing it from the list.
    timeout->Release(scx);
  }

  mTimeouts = NULL;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 505 of file nsGlobalWindow.cpp.

{
  if (mControllers) {
    PRUint32 count;
    mControllers->GetControllerCount(&count);

    while (count--) {
      nsCOMPtr<nsIController> controller;
      mControllers->GetControllerAt(count, getter_AddRefs(controller));

      nsCOMPtr<nsIControllerContext> context = do_QueryInterface(controller);
      if (context)
        context->SetCommandContext(nsnull);
    }

    mControllers = nsnull;
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

These methods take one optional argument that's the timer ID to clear.

Often in existing code these methods are passed undefined, which is a nop so we need to support that as well.

Definition at line 7079 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_INNER(ClearTimeoutOrInterval, (), NS_ERROR_NOT_INITIALIZED);

  nsresult rv = NS_OK;
  nsCOMPtr<nsIXPCNativeCallContext> ncc;

  rv = nsContentUtils::XPConnect()->
    GetCurrentNativeCallContext(getter_AddRefs(ncc));
  NS_ENSURE_SUCCESS(rv, rv);

  if (!ncc)
    return NS_ERROR_NOT_AVAILABLE;

  JSContext *cx = nsnull;

  rv = ncc->GetJSContext(&cx);
  NS_ENSURE_SUCCESS(rv, rv);

  PRUint32 argc;

  ncc->GetArgc(&argc);

  if (argc < 1) {
    // No arguments, return early.

    return NS_OK;
  }

  jsval *argv = nsnull;

  ncc->GetArgvPtr(&argv);

  int32 timer_id;

  if (argv[0] == JSVAL_VOID || !::JS_ValueToInt32(cx, argv[0], &timer_id) ||
      timer_id <= 0) {
    // Undefined or non-positive number passed as argument, return
    // early.

    return NS_OK;
  }

  PRUint32 public_id = (PRUint32)timer_id;
  nsTimeout **top, *timeout;
  nsIScriptContext *scx = GetContextInternal();

  for (top = &mTimeouts; (timeout = *top) != NULL; top = &timeout->mNext) {
    if (timeout->mPublicId == public_id) {
      if (timeout->mRunning) {
        /* We're running from inside the timeout. Mark this
           timeout for deferred deletion by the code in
           RunTimeout() */
        timeout->mInterval = 0;
      }
      else {
        /* Delete the timeout from the pending timeout list */
        *top = timeout->mNext;

        if (timeout->mTimer) {
          timeout->mTimer->Cancel();
          timeout->mTimer = nsnull;
          timeout->Release(scx);
        }
        timeout->Release(scx);
      }
      break;
    }
  }

  return NS_OK;
}

Here is the call graph for this function:

void nsGlobalWindow::ClearWindowScope ( nsISupports *  aWindow) [static, protected]

Definition at line 6395 of file nsGlobalWindow.cpp.

{
  nsCOMPtr<nsIScriptGlobalObject> sgo(do_QueryInterface(aWindow));

  nsIScriptContext *scx = sgo->GetContext();

  if (scx) {
    JSContext *cx = (JSContext *)scx->GetNativeContext();
    JSObject *global = sgo->GetGlobalJSObject();

    if (global) {
      // Clear global and its prototype chain, but not Object.prototype.
      ::JS_ClearScope(cx, global);
      for (JSObject *o = ::JS_GetPrototype(cx, global), *next;
           o && (next = ::JS_GetPrototype(cx, o)); o = next)
        ::JS_ClearScope(cx, o);
      ::JS_ClearWatchPointsForObject(cx, global);
    }

    ::JS_ClearRegExpStatics(cx);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

Here is the caller graph for this function:

void nsGlobalWindow::CloseWindow ( nsISupports *  aWindow) [static, protected]

Definition at line 6374 of file nsGlobalWindow.cpp.

{
  nsCOMPtr<nsPIDOMWindow> win(do_QueryInterface(aWindow));

  nsGlobalWindow* globalWin =
    NS_STATIC_CAST(nsGlobalWindow *,
                   NS_STATIC_CAST(nsPIDOMWindow*, win));

  // Need to post an event for closing, otherwise window and 
  // presshell etc. may get destroyed while creating frames, bug 338897.
  nsCloseEvent* ev = new nsCloseEvent(globalWin);
  if (ev) {
    if (NS_FAILED(ev->PostCloseEvent())) {
      PL_DestroyEvent(ev);
    }
  }
  // else if OOM, better not to close. That might cause a crash.
}

Here is the call graph for this function:

boolean nsIDOMWindowInternal::confirm ( in DOMString  text) [inherited]
nsresult nsGlobalWindow::ConvertCharset ( const nsAString &  aStr,
char **  aDest 
) [protected]

Definition at line 4957 of file nsGlobalWindow.cpp.

{
  nsresult result = NS_OK;
  nsCOMPtr<nsIUnicodeEncoder> encoder;

  nsCOMPtr<nsICharsetConverterManager>
    ccm(do_GetService(kCharsetConverterManagerCID));
  NS_ENSURE_TRUE(ccm, NS_ERROR_FAILURE);

  // Get the document character set
  nsCAutoString charset(NS_LITERAL_CSTRING("UTF-8")); // default to utf-8
  if (mDocument) {
    nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));

    if (doc)
      charset = doc->GetDocumentCharacterSet();
  }

  // Get an encoder for the character set
  result = ccm->GetUnicodeEncoderRaw(charset.get(),
                                     getter_AddRefs(encoder));
  if (NS_FAILED(result))
    return result;

  result = encoder->Reset();
  if (NS_FAILED(result))
    return result;

  PRInt32 maxByteLen, srcLen;
  srcLen = aStr.Length();

  const nsPromiseFlatString& flatSrc = PromiseFlatString(aStr);
  const PRUnichar* src = flatSrc.get();

  // Get the expected length of result string
  result = encoder->GetMaxLength(src, srcLen, &maxByteLen);
  if (NS_FAILED(result))
    return result;

  // Allocate a buffer of the maximum length
  *aDest = (char *) nsMemory::Alloc(maxByteLen + 1);
  PRInt32 destLen2, destLen = maxByteLen;
  if (!*aDest)
    return NS_ERROR_OUT_OF_MEMORY;

  // Convert from unicode to the character set
  result = encoder->Convert(src, &srcLen, *aDest, &destLen);
  if (NS_FAILED(result)) {    
    nsMemory::Free(*aDest);
    *aDest = nsnull;
    return result;
  }

  // Allow the encoder to finish the conversion
  destLen2 = maxByteLen - destLen;
  encoder->Finish(*aDest + destLen, &destLen2);
  (*aDest)[destLen + destLen2] = '\0';

  return result;
}

Here is the call graph for this function:

virtual nsresult nsPIDOMWindow::Deactivate ( ) [pure virtual, inherited]
PRBool nsGlobalWindow::DispatchCustomEvent ( const char *  aEventName) [protected]

Definition at line 3114 of file nsGlobalWindow.cpp.

{
  nsCOMPtr<nsIDOMDocumentEvent> doc(do_QueryInterface(mDocument));
  nsCOMPtr<nsIDOMEvent> event;

  PRBool defaultActionEnabled = PR_TRUE;

  if (doc) {
    doc->CreateEvent(NS_LITERAL_STRING("Events"), getter_AddRefs(event));

    nsCOMPtr<nsIPrivateDOMEvent> privateEvent(do_QueryInterface(event));
    if (privateEvent) {
      event->InitEvent(NS_ConvertASCIItoUTF16(aEventName), PR_TRUE, PR_TRUE);

      privateEvent->SetTrusted(PR_TRUE);

      DispatchEvent(event, &defaultActionEnabled);
    }
  }

  return defaultActionEnabled;
}

Here is the call graph for this function:

boolean nsIDOMEventTarget::dispatchEvent ( in nsIDOMEvent  evt) raises (DOMException) [inherited]

This method allows the dispatch of events into the implementations event model.

Events dispatched in this manner will have the same capturing and bubbling behavior as events dispatched directly by the implementation. The target of the event is the EventTarget on which dispatchEvent is called.

Parameters:
evtSpecifies the event type, behavior, and contextual information to be used in processing the event.
Returns:
Indicates whether any of the listeners which handled the event called preventDefault. If preventDefault was called the value is false, else the value is true.
Exceptions:
UNSPECIFIED_EVENT_TYPE_ERR,:Raised if the Event's type was not specified by initializing the event before dispatchEvent was called. Specification of the Event's type as null or an empty string will also trigger this exception.
void nsIDOMJSWindow::dump ( in DOMString  str) [inherited]

Definition at line 3299 of file nsGlobalWindow.cpp.

{
  NS_ASSERTION(mDocShell, "EnsureReflowFlushAndPaint() called with no "
               "docshell!");

  nsCOMPtr<nsIPresShell> presShell;
  mDocShell->GetPresShell(getter_AddRefs(presShell));

  if (!presShell)
    return;

  // Flush pending reflows.
  nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));

  if (doc) {
    doc->FlushPendingNotifications(Flush_Layout);
  }

  // Unsuppress painting.
  presShell->UnsuppressPainting();
}

Here is the call graph for this function:

Definition at line 7413 of file nsGlobalWindow.cpp.

{
  // If we're a subframe, make sure our size is up to date.  It's OK that this
  // crosses the content/chrome boundary, since chrome can have pending reflows
  // too.
  nsGlobalWindow *parent =
    NS_STATIC_CAST(nsGlobalWindow *, GetPrivateParent());
  if (parent) {
    parent->FlushPendingNotifications(Flush_Layout);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

virtual void nsPIDOMWindow_MOZILLA_1_8_BRANCH::EnterModalState ( ) [pure virtual, inherited]

Callback for notifying a window about a modal dialog being opened/closed with the window as a parent.

boolean nsIDOMJSWindow::find ( ) [inherited]
boolean nsIDOMWindowInternal::find ( in DOMString  str,
in boolean  caseSensitive,
in boolean  backwards,
in boolean  wrapAround,
in boolean  wholeWord,
in boolean  searchInFrames,
in boolean  showDialog 
) [inherited]
nsresult nsGlobalWindow::FindInternal ( const nsAString &  aStr,
PRBool  caseSensitive,
PRBool  backwards,
PRBool  wrapAround,
PRBool  wholeWord,
PRBool  searchInFrames,
PRBool  showDialog,
PRBool aReturn 
) [protected]

Definition at line 5142 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_OUTER(FindInternal, (aStr, caseSensitive, backwards, wrapAround,
                                  wholeWord, searchInFrames, showDialog,
                                  aDidFind), NS_ERROR_NOT_INITIALIZED);

  NS_ENSURE_ARG_POINTER(aDidFind);
  nsresult rv = NS_OK;
  *aDidFind = PR_FALSE;

  nsCOMPtr<nsIWebBrowserFind> finder(do_GetInterface(mDocShell));

  // Set the options of the search
  rv = finder->SetSearchString(PromiseFlatString(aStr).get());
  NS_ENSURE_SUCCESS(rv, rv);
  finder->SetMatchCase(caseSensitive);
  finder->SetFindBackwards(backwards);
  finder->SetWrapFind(wrapAround);
  finder->SetEntireWord(wholeWord);
  finder->SetSearchFrames(searchInFrames);

  // the nsIWebBrowserFind is initialized to use this window
  // as the search root, but uses focus to set the current search
  // frame. If we're being called from JS (as here), this window
  // should be the current search frame.
  nsCOMPtr<nsIWebBrowserFindInFrames> framesFinder(do_QueryInterface(finder));
  if (framesFinder) {
    framesFinder->SetRootSearchFrame(this);   // paranoia
    framesFinder->SetCurrentSearchFrame(this);
  }
  
  // The Find API does not accept empty strings. Launch the Find Dialog.
  if (aStr.IsEmpty() || showDialog) {
    // See if the find dialog is already up using nsIWindowMediator
    nsCOMPtr<nsIWindowMediator> windowMediator =
      do_GetService(kWindowMediatorCID);

    nsCOMPtr<nsIDOMWindowInternal> findDialog;

    if (windowMediator) {
      windowMediator->GetMostRecentWindow(NS_LITERAL_STRING("findInPage").get(),
                                          getter_AddRefs(findDialog));
    }

    if (findDialog) {
      // The Find dialog is already open, bring it to the top.
      rv = findDialog->Focus();
    } else { // Open a Find dialog
      if (finder) {
        nsCOMPtr<nsIDOMWindow> dialog;
        rv = OpenDialog(NS_LITERAL_STRING("chrome://global/content/finddialog.xul"),
                        NS_LITERAL_STRING("_blank"),
                        NS_LITERAL_STRING("chrome, resizable=no, dependent=yes"),
                        finder, getter_AddRefs(dialog));
      }
    }
  } else {
    // Launch the search with the passed in search string
    rv = finder->FindNext(aDidFind);
    NS_ENSURE_SUCCESS(rv, rv);
  }

  return rv;
}

Here is the call graph for this function:

void nsGlobalWindow::FireAbuseEvents ( PRBool  aBlocked,
PRBool  aWindow,
const nsAString &  aPopupURL,
const nsAString &  aPopupWindowFeatures 
) [protected]

Definition at line 4408 of file nsGlobalWindow.cpp.

{
  // fetch the URI of the window requesting the opened window

  nsCOMPtr<nsIDOMWindow> topWindow;
  GetTop(getter_AddRefs(topWindow));
  if (!topWindow)
    return;

  nsCOMPtr<nsIDOMDocument> topDoc;
  topWindow->GetDocument(getter_AddRefs(topDoc));

  nsCOMPtr<nsIURI> popupURI;

  // build the URI of the would-have-been popup window
  // (see nsWindowWatcher::URIfromURL)

  // first, fetch the opener's base URI

  nsIURI *baseURL = 0;

  nsCOMPtr<nsIJSContextStack> stack = do_GetService(sJSStackContractID);
  nsCOMPtr<nsIDOMWindow> contextWindow;
  if (stack) {
    JSContext *cx = nsnull;
    stack->Peek(&cx);
    if (cx) {
      nsIScriptContext *currentCX = nsJSUtils::GetDynamicScriptContext(cx);
      if (currentCX) {
        contextWindow = do_QueryInterface(currentCX->GetGlobalObject());
      }
    }
  }
  if (!contextWindow)
    contextWindow = NS_STATIC_CAST(nsIDOMWindow*,this);

  nsCOMPtr<nsIDOMDocument> domdoc;
  contextWindow->GetDocument(getter_AddRefs(domdoc));
  nsCOMPtr<nsIDocument> doc(do_QueryInterface(domdoc));
  if (doc)
    baseURL = doc->GetBaseURI();

  // use the base URI to build what would have been the popup's URI
  nsCOMPtr<nsIIOService> ios(do_GetService(NS_IOSERVICE_CONTRACTID));
  if (ios)
    ios->NewURI(NS_ConvertUCS2toUTF8(aPopupURL), 0, baseURL,
                getter_AddRefs(popupURI));

  // fire an event chock full of informative URIs
  if (aBlocked)
    FirePopupBlockedEvent(topDoc, this, popupURI, aPopupWindowFeatures);
  if (aWindow)
    FirePopupWindowEvent(topDoc);
}

Here is the call graph for this function:

Fire any DOM notification events related to things that happened while the window was frozen.

Definition at line 7404 of file nsGlobalWindow.cpp.

{
  nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
  if (doc) {
    doc->FlushPendingNotifications(aType);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 525 of file nsGlobalWindow.cpp.

{
  NS_ASSERTION(IsInnerWindow(), "Don't free inner objects on an outer window");

  ClearAllTimeouts();

  mChromeEventHandler = nsnull;

  if (mListenerManager) {
    mListenerManager->Disconnect();
    mListenerManager = nsnull;
  }

  if (mDocument) {
    nsCOMPtr<nsIDocument> doc =
      do_QueryInterface(mDocument);

    // Remember the document's principal.
    mDocumentPrincipal = doc->GetPrincipal();
  }

  // Remove our reference to the document and the document principal.
  mDocument = nsnull;

  if (mJSObject && cx) {
    // Clear mJSObject and its prototype chain, but not Object.prototype.
    ::JS_ClearScope(cx, mJSObject);
    for (JSObject *o = ::JS_GetPrototype(cx, mJSObject), *next;
         o && (next = ::JS_GetPrototype(cx, o)); o = next)
      ::JS_ClearScope(cx, o);
    ::JS_ClearWatchPointsForObject(cx, mJSObject);

    nsWindowSH::InvalidateGlobalScopePolluter(cx, mJSObject);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsGlobalWindow::Freeze ( ) [inline, protected]

Definition at line 472 of file nsGlobalWindow.h.

  {
    NS_ASSERTION(!IsFrozen(), "Double-freezing?");
    mIsFrozen = PR_TRUE;
  }

Here is the call graph for this function:

Here is the caller graph for this function:

static nsGlobalWindow* nsGlobalWindow::FromWrapper ( nsIXPConnectWrappedNative wrapper) [inline, static]

Definition at line 272 of file nsGlobalWindow.h.

  {
    // Make sure this matches the casts we do in QueryInterface().
    return (nsGlobalWindow *)(nsIScriptGlobalObject *)wrapper->Native();
  }

Here is the caller graph for this function:

Definition at line 5019 of file nsGlobalWindow.cpp.

{
  nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
  GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
  PRBool suppress = PR_FALSE;
  if (treeOwnerAsWin)
    treeOwnerAsWin->GetBlurSuppression(&suppress);
  return suppress;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 98 of file nsPIDOMWindow.h.

  {
    return mChromeEventHandler;
  }

Here is the caller graph for this function:

nsIDOMCSSStyleDeclaration nsIDOMViewCSS::getComputedStyle ( in nsIDOMElement  elt,
in DOMString  pseudoElt 
) [inherited]

Implements nsIScriptGlobalObject.

Definition at line 636 of file nsGlobalWindow.cpp.

Here is the caller graph for this function:

Definition at line 278 of file nsGlobalWindow.h.

  {
    if (mOuterWindow) {
      return GetOuterWindowInternal()->mContext;
    }

    return mContext;
  }

Here is the call graph for this function:

Here is the caller graph for this function:

nsPIDOMWindow* nsPIDOMWindow::GetCurrentInnerWindow ( ) const [inline, inherited]

Definition at line 285 of file nsPIDOMWindow.h.

  {
    return mInnerWindow;
  }

Here is the caller graph for this function:

Definition at line 292 of file nsGlobalWindow.h.

Here is the caller graph for this function:

Implements nsIScriptGlobalObject.

Definition at line 1571 of file nsGlobalWindow.cpp.

{
  return GetDocShellInternal();
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 297 of file nsGlobalWindow.h.

  {
    if (mOuterWindow) {
      return GetOuterWindowInternal()->mDocShell;
    }

    return mDocShell;
  }

Here is the call graph for this function:

Here is the caller graph for this function:

nsIDOMDocument* nsPIDOMWindow::GetExtantDocument ( ) const [inline, inherited]

Definition at line 156 of file nsPIDOMWindow.h.

  {
    return mDocument;
  }

Here is the caller graph for this function:

nsIDOMElement* nsPIDOMWindow::GetFrameElementInternal ( ) const [inline, inherited]

Definition at line 164 of file nsPIDOMWindow.h.

  {
    if (mOuterWindow) {
      return mOuterWindow->GetFrameElementInternal();
    }

    NS_ASSERTION(!IsInnerWindow(),
                 "GetFrameElementInternal() called on orphan inner window");

    return mFrameElement;
  }

Here is the call graph for this function:

Here is the caller graph for this function:

Implements nsIScriptGlobalObject.

Definition at line 1838 of file nsGlobalWindow.cpp.

{
  return mJSObject;
}

Here is the caller graph for this function:

Get the owner of the script global object.

The method addrefs the returned reference according to regular XPCOM rules, even though the internal reference itself is a "weak" reference.

Implements nsIScriptGlobalObject.

Definition at line 1611 of file nsGlobalWindow.cpp.

void nsIInterfaceRequestor::getInterface ( in nsIIDRef  uuid,
[iid_is(uuid), retval] out nsQIResult  result 
) [inherited]

Retrieves the specified interface pointer.

Parameters:
uuidThe IID of the interface being requested.
result[out] The interface pointer to be filled in if the interface is accessible.
Returns:
NS_OK - interface was successfully returned. NS_NOINTERFACE - interface not accessible. NS_ERROR* - method failure.

Implements nsIDOMEventReceiver.

Definition at line 5467 of file nsGlobalWindow.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 3190 of file nsGlobalWindow.cpp.

{
  nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
  GetTreeOwner(getter_AddRefs(treeOwnerAsWin));

  nsIWidget *widget = nsnull;

  if (treeOwnerAsWin) {
    treeOwnerAsWin->GetMainWidget(&widget);
  }

  return widget;
}

Here is the call graph for this function:

virtual nsresult nsPIDOMWindow::GetObjectProperty ( const PRUnichar aProperty,
nsISupports **  aObject 
) [pure virtual, inherited]
virtual OpenAllowValue nsPIDOMWindow::GetOpenAllow ( const nsAString &  aName) [pure virtual, inherited]
nsPIDOMWindow* nsPIDOMWindow::GetOuterWindow ( ) [inline, inherited]

Definition at line 280 of file nsPIDOMWindow.h.

  {
    return mIsInnerWindow ? mOuterWindow : this;
  }

Here is the caller graph for this function:

Definition at line 287 of file nsGlobalWindow.h.

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 6146 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_OUTER(GetParentInternal, (), nsnull);

  nsIDOMWindowInternal *parentInternal = nsnull;

  nsCOMPtr<nsIDOMWindow> parent;
  GetParent(getter_AddRefs(parent));

  if (parent && parent != NS_STATIC_CAST(nsIDOMWindow *, this)) {
    nsCOMPtr<nsIDOMWindowInternal> tmp(do_QueryInterface(parent));
    NS_ASSERTION(parent, "Huh, parent not an nsIDOMWindowInternal?");

    parentInternal = tmp;
  }

  return parentInternal;
}

Here is the call graph for this function:

Here is the caller graph for this function:

virtual PopupControlState nsPIDOMWindow::GetPopupControlState ( ) const [pure virtual, inherited]

Implements nsIScriptObjectPrincipal.

Definition at line 1921 of file nsGlobalWindow.cpp.

{
  if (mDocument) {
    // If we have a document, get the principal from the document
    nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
    NS_ENSURE_TRUE(doc, nsnull);

    return doc->GetPrincipal();
  }

  if (mDocumentPrincipal) {
    return mDocumentPrincipal;
  }

  // If we don't have a principal and we don't have a document we
  // ask the parent window for the principal. This can happen when
  // loading a frameset that has a <frame src="javascript:xxx">, in
  // that case the global window is used in JS before we've loaded
  // a document into the window.

  nsCOMPtr<nsIScriptObjectPrincipal> objPrincipal =
    do_QueryInterface(GetParentInternal());

  if (objPrincipal) {
    return objPrincipal->GetPrincipal();
  }

  return nsnull;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 5540 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_OUTER(GetPrivateParent, (), nsnull);

  nsCOMPtr<nsIDOMWindow> parent;
  GetParent(getter_AddRefs(parent));

  if (NS_STATIC_CAST(nsIDOMWindow *, this) == parent.get()) {
    nsCOMPtr<nsIContent> chromeElement(do_QueryInterface(mChromeEventHandler));
    if (!chromeElement)
      return nsnull;             // This is ok, just means a null parent.

    nsIDocument* doc = chromeElement->GetDocument();
    if (!doc)
      return nsnull;             // This is ok, just means a null parent.

    nsIScriptGlobalObject *globalObject = doc->GetScriptGlobalObject();
    if (!globalObject)
      return nsnull;             // This is ok, just means a null parent.

    parent = do_QueryInterface(globalObject);
  }

  if (parent) {
    return NS_STATIC_CAST(nsGlobalWindow *,
                          NS_STATIC_CAST(nsIDOMWindow*, parent.get()));
  }

  return nsnull;
}

Here is the call graph for this function:

Here is the caller graph for this function:

virtual nsPIDOMWindow* nsPIDOMWindow::GetPrivateRoot ( ) [pure virtual, inherited]

Here is the caller graph for this function:

virtual nsIFocusController* nsPIDOMWindow::GetRootFocusController ( ) [pure virtual, inherited]

Here is the caller graph for this function:

Get a reference node for what is known to be a strongly connected component of nsIDOMGCParticipants.

For example, DOM trees are strongly connected, so can return the root node to greatly reduce the number of nodes on which we need to run graph algorithms.

Note that it's acceptable for nodes in a single strongly connected component to return different values for GetSCCIndex, as long as those two values claim that they're reachable from each other in AppendReachableList.

Implements nsIDOMGCParticipant.

Definition at line 5509 of file nsGlobalWindow.cpp.

{
  return this;
}
nsresult nsGlobalWindow::GetScrollInfo ( nsIScrollableView **  aScrollableView,
float *  aP2T,
float *  aT2P 
) [protected]

Definition at line 7289 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_OUTER(GetScrollInfo, (aScrollableView, aP2T, aT2P),
                   NS_ERROR_NOT_INITIALIZED);

  *aScrollableView = nsnull;
  *aP2T = 0.0f;
  *aT2P = 0.0f;

  if (!mDocShell) {
    return NS_OK;
  }

  nsCOMPtr<nsPresContext> presContext;
  mDocShell->GetPresContext(getter_AddRefs(presContext));
  if (presContext) {
    *aP2T = presContext->PixelsToTwips();
    *aT2P = presContext->TwipsToPixels();

    nsIViewManager* vm = presContext->GetViewManager();
    if (vm)
      return vm->GetRootScrollableView(aScrollableView);
  }
  return NS_OK;
}

Here is the call graph for this function:

Here is the caller graph for this function:

nsresult nsGlobalWindow::GetScrollMaxXY ( PRInt32 aScrollMaxX,
PRInt32 aScrollMaxY 
) [protected]

Definition at line 3001 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_OUTER(GetScrollMaxXY, (aScrollMaxX, aScrollMaxY),
                   NS_ERROR_NOT_INITIALIZED);

  nsresult rv;
  nsIScrollableView *view = nsnull;      // no addref/release for views
  float p2t, t2p;

  FlushPendingNotifications(Flush_Layout);
  GetScrollInfo(&view, &p2t, &t2p);
  if (!view)
    return NS_OK;      // bug 230965 changed from NS_ERROR_FAILURE

  nsSize scrolledSize;
  rv = view->GetContainerSize(&scrolledSize.width, &scrolledSize.height);
  NS_ENSURE_SUCCESS(rv, rv);

  nsRect portRect = view->View()->GetBounds();

  if (aScrollMaxX)
    *aScrollMaxX = PR_MAX(0,
      (PRInt32)floor(t2p*(scrolledSize.width - portRect.width)));
  if (aScrollMaxY)
    *aScrollMaxY = PR_MAX(0,
      (PRInt32)floor(t2p*(scrolledSize.height - portRect.height)));

  return NS_OK;
}

Here is the call graph for this function:

nsresult nsGlobalWindow::GetScrollXY ( PRInt32 aScrollX,
PRInt32 aScrollY,
PRBool  aDoFlush 
) [protected]

Definition at line 3048 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_OUTER(GetScrollXY, (aScrollX, aScrollY, aDoFlush),
                   NS_ERROR_NOT_INITIALIZED);

  nsresult rv;
  nsIScrollableView *view = nsnull;      // no addref/release for views
  float p2t, t2p;

  if (aDoFlush) {
    FlushPendingNotifications(Flush_Layout);
  } else {
    EnsureSizeUpToDate();
  }
  
  GetScrollInfo(&view, &p2t, &t2p);
  if (!view)
    return NS_OK;      // bug 202206 changed from NS_ERROR_FAILURE

  nscoord xPos, yPos;
  rv = view->GetScrollPosition(xPos, yPos);
  NS_ENSURE_SUCCESS(rv, rv);

  if ((xPos != 0 || yPos != 0) && !aDoFlush) {
    // Oh, well.  This is the expensive case -- the window is scrolled and we
    // didn't actually flush yet.  Repeat, but with a flush, since the content
    // may get shorter and hence our scroll position may decrease.
    return GetScrollXY(aScrollX, aScrollY, PR_TRUE);
  }
  
  if (aScrollX)
    *aScrollX = NSTwipsToIntPixels(xPos, t2p);
  if (aScrollY)
    *aScrollY = NSTwipsToIntPixels(yPos, t2p);

  return NS_OK;
}

Here is the call graph for this function:

Method for accessing this window's selection object.

Implements nsIDOMEventReceiver.

Definition at line 5495 of file nsGlobalWindow.cpp.

{
  nsCOMPtr<nsIEventListenerManager> manager;
  if (NS_SUCCEEDED(GetListenerManager(getter_AddRefs(manager))) && manager) {
    return manager->GetSystemEventGroupLM(aGroup);
  }
  return NS_ERROR_FAILURE;
}

Here is the call graph for this function:

Definition at line 7235 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_OUTER(GetTreeOwner, (aTreeOwner), NS_ERROR_NOT_INITIALIZED);

  nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(mDocShell));

  // If there's no docShellAsItem, this window must have been closed,
  // in that case there is no tree owner.

  if (!docShellAsItem) {
    *aTreeOwner = nsnull;

    return NS_OK;
  }

  return docShellAsItem->GetTreeOwner(aTreeOwner);
}

Here is the call graph for this function:

Here is the caller graph for this function:

nsresult nsGlobalWindow::GetTreeOwner ( nsIBaseWindow **  aTreeOwner) [protected]

Definition at line 7254 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_OUTER(GetTreeOwner, (aTreeOwner), NS_ERROR_NOT_INITIALIZED);

  nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(mDocShell));
  nsCOMPtr<nsIDocShellTreeOwner> treeOwner;

  // If there's no docShellAsItem, this window must have been closed,
  // in that case there is no tree owner.

  if (docShellAsItem) {
    docShellAsItem->GetTreeOwner(getter_AddRefs(treeOwner));
  }

  if (!treeOwner) {
    *aTreeOwner = nsnull;
    return NS_OK;
  }

  return CallQueryInterface(treeOwner, aTreeOwner);
}

Here is the call graph for this function:

Definition at line 7277 of file nsGlobalWindow.cpp.

{
  nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
  GetTreeOwner(getter_AddRefs(treeOwner));

  nsCOMPtr<nsIWebBrowserChrome> browserChrome(do_GetInterface(treeOwner));
  NS_IF_ADDREF(*aBrowserChrome = browserChrome);

  return NS_OK;
}

Here is the call graph for this function:

Here is the caller graph for this function:

nsresult nsGlobalWindow::HandleDOMEvent ( nsPresContext aPresContext,
nsEvent aEvent,
nsIDOMEvent **  aDOMEvent,
PRUint32  aFlags,
nsEventStatus aEventStatus 
) [virtual]

Implements nsIScriptGlobalObject.

Definition at line 1619 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_INNER(HandleDOMEvent,
                   (aPresContext, aEvent, aDOMEvent, aFlags, aEventStatus),
                   NS_OK);

  nsGlobalWindow *outer = GetOuterWindowInternal();

  // Make sure to tell the event that dispatch has started.
  NS_MARK_EVENT_DISPATCH_STARTED(aEvent);

  nsresult ret = NS_OK;
  PRBool externalDOMEvent = PR_FALSE;
  nsIDOMEvent *domEvent = nsnull;
  static PRUint32 count = 0;

  /* mChromeEventHandler and mContext go dangling in the middle of this
     function under some circumstances (events that destroy the window)
     without this addref. */
  nsCOMPtr<nsIChromeEventHandler> kungFuDeathGrip1(mChromeEventHandler);
  nsCOMPtr<nsIScriptContext> kungFuDeathGrip2(GetContextInternal());

  /* If this is a mouse event, use the struct to provide entropy for
   * the system.
   */
  if (gEntropyCollector &&
      (NS_EVENT_FLAG_CAPTURE & aFlags) &&
      (aEvent->message == NS_MOUSE_MOVE)) {
    //I'd like to not come in here if there is a mChromeEventHandler
    //present, but there is always one when the message is
    //NS_MOUSE_MOVE.
    //
    //Chances are this counter will overflow during the life of the
    //process, but that's OK for our case. Means we get a little
    //more entropy.
    if (count++ % 100 == 0) {
      //Since the high bits seem to be zero's most of the time,
      //let's only take the lowest half of the point structure.
      PRInt16 myCoord[4];

      myCoord[0] = aEvent->point.x;
      myCoord[1] = aEvent->point.y;
      myCoord[2] = aEvent->refPoint.x;
      myCoord[3] = aEvent->refPoint.y;
      gEntropyCollector->RandomUpdate((void*)myCoord, sizeof(myCoord));
      gEntropyCollector->RandomUpdate((void*)&aEvent->time, sizeof(PRUint32));
    }
  }

  if (NS_IS_TRUSTED_EVENT(aEvent)) {
    if (aEvent->message == NS_MOUSE_LEFT_BUTTON_DOWN) {
      gMouseDown = PR_TRUE;
    } else if (aEvent->message == NS_MOUSE_LEFT_BUTTON_UP) {
      gMouseDown = PR_FALSE;
      if (gDragServiceDisabled) {
        nsCOMPtr<nsIDragService_1_8_BRANCH> ds18 =
          do_GetService("@mozilla.org/widget/dragservice;1");
        NS_WARN_IF_FALSE(ds18, "No drag service?");
        if (ds18) {
          gDragServiceDisabled = PR_FALSE;
          ds18->Unsuppress();
        }
      }
    }
  }

  // if the window is deactivated while in full screen mode,
  // restore OS chrome, and hide it again upon re-activation
  if (outer && outer->mFullScreen && (NS_EVENT_FLAG_BUBBLE & aFlags)) {
    if (aEvent->message == NS_DEACTIVATE || aEvent->message == NS_ACTIVATE) {
      nsCOMPtr<nsIFullScreen> fullScreen =
        do_GetService("@mozilla.org/browser/fullscreen;1");
      if (fullScreen) {
        if (aEvent->message == NS_DEACTIVATE)
          fullScreen->ShowAllOSChrome();
        else
          fullScreen->HideAllOSChrome();
      }
    }
  }

  if (NS_EVENT_FLAG_INIT & aFlags) {
    if (aDOMEvent) {
      if (*aDOMEvent) {
        externalDOMEvent = PR_TRUE;
      }
    }
    else {
      aDOMEvent = &domEvent;
    }
    aEvent->flags |= aFlags;
    aFlags &= ~(NS_EVENT_FLAG_CANT_BUBBLE | NS_EVENT_FLAG_CANT_CANCEL);
    aFlags |= NS_EVENT_FLAG_BUBBLE | NS_EVENT_FLAG_CAPTURE;

    // Execute bindingdetached handlers before we tear ourselves
    // down.
    if (aEvent->message == NS_PAGE_UNLOAD && mDocument &&
        !(aFlags & NS_EVENT_FLAG_SYSTEM_EVENT)) {
      nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
      doc->BindingManager()->ExecuteDetachedHandlers();
    }
  }

  if (aEvent->message == NS_PAGE_UNLOAD) {
    mIsDocumentLoaded = PR_FALSE;
  }

  // Capturing stage
  if ((NS_EVENT_FLAG_CAPTURE & aFlags) && mChromeEventHandler) {
    // Check chrome document capture here.
    // XXX The chrome can not handle this, see bug 51211
    if (aEvent->message != NS_IMAGE_LOAD) {
      mChromeEventHandler->HandleChromeEvent(aPresContext, aEvent, aDOMEvent,
                                             aFlags & NS_EVENT_CAPTURE_MASK,
                                             aEventStatus);
    }
  }

  if (aEvent->message == NS_RESIZE_EVENT) {
    mIsHandlingResizeEvent = PR_TRUE;
  }

  // Local handling stage
  if (outer && (aEvent->message != NS_BLUR_CONTENT || !GetBlurSuppression()) &&
      mListenerManager &&
      !((NS_EVENT_FLAG_CANT_BUBBLE & aEvent->flags) &&
        (NS_EVENT_FLAG_BUBBLE & aFlags) &&
        !(NS_EVENT_FLAG_INIT & aFlags))) {
    aEvent->flags |= aFlags;
    mListenerManager->HandleEvent(aPresContext, aEvent, aDOMEvent,
                                  outer, aFlags, aEventStatus);
    aEvent->flags &= ~aFlags;
  }

  if (aEvent->message == NS_RESIZE_EVENT) {
    mIsHandlingResizeEvent = PR_FALSE;
  }

  if (aEvent->message == NS_PAGE_LOAD) {
    mIsDocumentLoaded = PR_TRUE;
  }

  // Bubbling stage
  if ((NS_EVENT_FLAG_BUBBLE & aFlags) && mChromeEventHandler) {
    // Bubble to a chrome document if it exists
    // XXX Need a way to know if an event should really bubble or not.
    // For now filter out load and unload, since they cause problems.
    if ((aEvent->message != NS_PAGE_LOAD) &&
        (aEvent->message != NS_PAGE_UNLOAD) &&
        (aEvent->message != NS_IMAGE_LOAD) &&
        (aEvent->message != NS_FOCUS_CONTENT) &&
        (aEvent->message != NS_BLUR_CONTENT)) {
      mChromeEventHandler->HandleChromeEvent(aPresContext, aEvent,
                                             aDOMEvent,
                                             aFlags & NS_EVENT_BUBBLE_MASK,
                                             aEventStatus);
    }
  }

  if (aEvent->message == NS_PAGE_LOAD) {
    nsCOMPtr<nsIContent> content(do_QueryInterface(GetFrameElementInternal()));

    nsCOMPtr<nsIDocShellTreeItem> treeItem =
      do_QueryInterface(GetDocShellInternal());

    PRInt32 itemType = nsIDocShellTreeItem::typeChrome;

    if (treeItem) {
      treeItem->GetItemType(&itemType);
    }

    if (content && GetParentInternal() &&
        itemType != nsIDocShellTreeItem::typeChrome) {
      // If we're not in chrome, or at a chrome boundary, fire the
      // onload event for the frame element.

      nsEventStatus status = nsEventStatus_eIgnore;
      nsEvent event(NS_IS_TRUSTED_EVENT(aEvent), NS_PAGE_LOAD);

      // Most of the time we could get a pres context to pass in here,
      // but not always (i.e. if this window is not shown there won't
      // be a pres context available). Since we're not firing a GUI
      // event we don't need a pres context anyway so we just pass
      // null as the pres context all the time here.

      ret = content->HandleDOMEvent(nsnull, &event, nsnull,
                                    NS_EVENT_FLAG_INIT, &status);
    }
  }

  if (NS_EVENT_FLAG_INIT & aFlags) {
    // We're leaving the DOM event loop so if we created an event,
    // release here.
    if (*aDOMEvent && !externalDOMEvent) {
      nsrefcnt rc;
      NS_RELEASE2(*aDOMEvent, rc);
      if (rc) {
        // Okay, so someone in the DOM loop (a listener, JS object) still has
        // a ref to the DOM Event but the internal data hasn't been malloc'd.
        // Force a copy of the data here so the DOM Event is still valid.
        nsCOMPtr<nsIPrivateDOMEvent>
          privateEvent(do_QueryInterface(*aDOMEvent));
        if (privateEvent)
          privateEvent->DuplicatePrivateData();
      }
      aDOMEvent = nsnull;
    }

    // Now that we're done with this event, remove the flag that says
    // we're in the process of dispatching this event.
    NS_MARK_EVENT_DISPATCH_DONE(aEvent);
  }

  return ret;
}

Here is the call graph for this function:

Implements nsIDOMEventReceiver.

Definition at line 5488 of file nsGlobalWindow.cpp.

{
  PRBool defaultActionEnabled;
  return DispatchEvent(aEvent, &defaultActionEnabled);
}
PRBool nsPIDOMWindow::HasMutationListeners ( PRUint32  aMutationEventType) const [inline, inherited]

Definition at line 103 of file nsPIDOMWindow.h.

  {
    const nsPIDOMWindow *win;

    if (IsOuterWindow()) {
      win = GetCurrentInnerWindow();

      if (!win) {
        NS_ERROR("No current inner window available!");

        return PR_FALSE;
      }
    } else {
      if (!mOuterWindow) {
        NS_ERROR("HasMutationListeners() called on orphan inner window!");

        return PR_FALSE;
      }

      win = this;
    }

    return (win->mMutationBits & aMutationEventType) != 0;
  }

Here is the call graph for this function:

void nsGlobalWindow::InsertTimeoutIntoList ( nsTimeout **  aInsertionPoint,
nsTimeout aTimeout 
) [protected]

Definition at line 7190 of file nsGlobalWindow.cpp.

{
  NS_ASSERTION(IsInnerWindow(),
               "InsertTimeoutIntoList() called on outer window!");

  nsTimeout *to;

  NS_ASSERTION(aList,
               "nsGlobalWindow::InsertTimeoutIntoList null timeoutList");
  while ((to = *aList) != nsnull) {
    if (to->mWhen > aTimeout->mWhen)
      break;
    aList = &to->mNext;
  }
  aTimeout->mFiringDepth = 0;
  aTimeout->mNext = to;
  *aList = aTimeout;

  // Increment the timeout's reference count since it's now held on to
  // by the list
  aTimeout->AddRef();
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 3356 of file nsGlobalWindow.cpp.

{
  NS_ENSURE_TRUE(sSecMan, PR_FALSE);

  PRBool isChrome = PR_FALSE;
  nsresult rv = sSecMan->SubjectPrincipalIsSystem(&isChrome);

  return NS_SUCCEEDED(rv) ? isChrome : PR_FALSE;
}

Here is the caller graph for this function:

Definition at line 311 of file nsGlobalWindow.h.

  {
    return  mCreatingInnerWindow;
  }

Here is the caller graph for this function:

PRBool nsGlobalWindow::IsFrame ( ) [inline, protected]

Definition at line 455 of file nsGlobalWindow.h.

  {
    return GetParentInternal() != nsnull;
  }

Here is the call graph for this function:

PRBool nsGlobalWindow::IsFrozen ( ) const [inline]

Definition at line 306 of file nsGlobalWindow.h.

  {
    return mIsFrozen;
  }

Here is the caller graph for this function:

PRBool nsPIDOMWindow::IsHandlingResizeEvent ( ) const [inline, inherited]

Definition at line 230 of file nsPIDOMWindow.h.

  {
    const nsPIDOMWindow *win;

    if (IsOuterWindow()) {
      win = GetCurrentInnerWindow();

      if (!win) {
        NS_ERROR("No current inner window available!");

        return PR_FALSE;
      }
    } else {
      if (!mOuterWindow) {
        NS_ERROR("IsHandlingResizeEvent() called on orphan inner window!");

        return PR_FALSE;
      }

      win = this;
    }

    return win->mIsHandlingResizeEvent;
  }

Here is the call graph for this function:

Definition at line 4891 of file nsGlobalWindow.cpp.

{
  nsCOMPtr<nsIDOMWindow> top;
  GetTop(getter_AddRefs(top));

  if (!top) {
    NS_ERROR("Uh, IsInModalState() called w/o a reachable top window?");

    return PR_FALSE;
  }

  return NS_STATIC_CAST(nsGlobalWindow *,
                        NS_STATIC_CAST(nsIDOMWindow *,
                                       top.get()))->mModalStateDepth != 0;
}

Here is the call graph for this function:

PRBool nsPIDOMWindow::IsInnerWindow ( ) const [inline, inherited]

Definition at line 290 of file nsPIDOMWindow.h.

  {
    return mIsInnerWindow;
  }

Here is the caller graph for this function:

PRBool nsPIDOMWindow::IsLoading ( ) const [inline, inherited]

Definition at line 205 of file nsPIDOMWindow.h.

  {
    const nsPIDOMWindow *win;

    if (IsOuterWindow()) {
      win = GetCurrentInnerWindow();

      if (!win) {
        NS_ERROR("No current inner window available!");

        return PR_FALSE;
      }
    } else {
      if (!mOuterWindow) {
        NS_ERROR("IsLoading() called on orphan inner window!");

        return PR_FALSE;
      }

      win = this;
    }

    return !win->mIsDocumentLoaded;
  }

Here is the call graph for this function:

PRBool nsPIDOMWindow::IsLoadingOrRunningTimeout ( ) const [inline, inherited]

Definition at line 193 of file nsPIDOMWindow.h.

  {
    const nsPIDOMWindow *win = GetCurrentInnerWindow();

    if (!win) {
      win = this;
    }

    return !win->mIsDocumentLoaded || win->mRunningTimeout;
  }

Here is the call graph for this function:

PRBool nsPIDOMWindow::IsOuterWindow ( ) const [inline, inherited]

Definition at line 295 of file nsPIDOMWindow.h.

  {
    return !IsInnerWindow();
  }

Here is the call graph for this function:

Here is the caller graph for this function:

PRBool nsGlobalWindow::IsPopupSpamWindow ( ) [inline, protected]

Definition at line 339 of file nsGlobalWindow.h.

Here is the call graph for this function:

Here is the caller graph for this function:

boolean nsIDOM3EventTarget::isRegisteredHere ( in DOMString  type) [inherited]
virtual void nsPIDOMWindow_MOZILLA_1_8_BRANCH::LeaveModalState ( ) [pure virtual, inherited]
void nsGlobalWindow::MakeScriptDialogTitle ( nsAString &  aOutTitle) [static, protected]

Definition at line 3368 of file nsGlobalWindow.cpp.

{
  aOutTitle.Truncate();

  // Try to get a host from the running principal -- this will do the
  // right thing for javascript: and data: documents.

  nsresult rv = NS_OK;
  NS_WARN_IF_FALSE(sSecMan, "Global Window has no security manager!");
  
  nsCOMPtr<nsIStringBundleService> stringBundleService =
    do_GetService(kCStringBundleServiceCID);
  
  if (sSecMan && stringBundleService) {
    nsCOMPtr<nsIPrincipal> principal;
    rv = sSecMan->GetSubjectPrincipal(getter_AddRefs(principal));

    if (NS_SUCCEEDED(rv) && principal) {
      nsCOMPtr<nsIURI> uri;
      rv = principal->GetURI(getter_AddRefs(uri));

      if (NS_SUCCEEDED(rv) && uri) {
        // remove user:pass for privacy and spoof prevention

        nsCOMPtr<nsIURIFixup> fixup(do_GetService(NS_URIFIXUP_CONTRACTID));
        if (fixup) {
          nsCOMPtr<nsIURI> fixedURI;
          rv = fixup->CreateExposableURI(uri, getter_AddRefs(fixedURI));
          if (NS_SUCCEEDED(rv) && fixedURI) {
            nsCAutoString host;
            fixedURI->GetHost(host);

            if (!host.IsEmpty()) {
              // if this URI has a host we'll show it. For other
              // schemes (e.g. file:) we fall back to the localized
              // generic string

              nsCAutoString prepath;
              fixedURI->GetPrePath(prepath);

              nsCOMPtr<nsIStringBundle> stringBundle;
              stringBundleService->CreateBundle(kDOMBundleURL,
                                                getter_AddRefs(stringBundle));
              if (stringBundle) {
                nsXPIDLString tempString;
                const PRUnichar *formatStrings[1];
                NS_ConvertUTF8toUTF16 ucsPrePath(prepath);
                formatStrings[0] = ucsPrePath.get();
                stringBundle->FormatStringFromName(NS_LITERAL_STRING("ScriptDlgHeading").get(),
                                                   formatStrings, 1, getter_Copies(tempString));
                if (tempString) {
                  aOutTitle = tempString.get();
                }
              }
            }
          }
        }
      }
    }
    else { // failed to get subject principal
      NS_WARNING("No script principal? Who is calling alert/confirm/prompt?!");
    }
  }

  if (aOutTitle.IsEmpty() && stringBundleService) {
    // We didn't find a host so use the generic heading
    nsCOMPtr<nsIStringBundle> stringBundle;
    stringBundleService->CreateBundle(kDOMBundleURL,
                                      getter_AddRefs(stringBundle));
    if (stringBundle) {
      nsXPIDLString tempString;
      stringBundle->GetStringFromName(NS_LITERAL_STRING("ScriptDlgGenericHeading").get(),
                                      getter_Copies(tempString));
      if (tempString)
        aOutTitle = tempString.get();
    }
  }

  // Just in case
  if (aOutTitle.IsEmpty()) {
    NS_WARNING("could not get ScriptDlgGenericHeading string from string bundle");
    aOutTitle.AssignLiteral("[Script]");
  }
}

Here is the call graph for this function:

void nsIDOMWindowInternal::moveBy ( in long  xDif,
in long  yDif 
) [inherited]
void nsIDOMWindowInternal::moveTo ( in long  xPos,
in long  yPos 
) [inherited]
virtual nsGlobalWindow::NS_HIDDEN_ ( nsPIDOMWindow ) [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( nsresult  ) const [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( nsresult  ) [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( nsresult  ) [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( void  ) [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( void  ) const [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( PopupControlState  ) const [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( OpenAllowValue  ) const [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( nsresult  ) [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( nsresult  ) [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( PRBool  ) [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( void  ) [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( nsresult  ) [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( void  ) [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( void  ) [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( void  ) [virtual]
virtual nsGlobalWindow::NS_HIDDEN_ ( nsIPrincipal ) [virtual]
nsGlobalWindow::NS_HIDDEN_ ( nsresult  ) const [protected]
Parameters:
aURLthe URL to load in the new window
aNamethe name to use for the new window
aOptionsthe window options to use for the new window
aDialogtrue when called from variants of OpenDialog. If this is true, this method will skip popup blocking checks. The aDialog argument is passed on to the window watcher.
aCalledNoScripttrue when called via the [noscript] open() and openDialog() methods. When this is true, we do NOT want to use the JS stack for things like caller determination.
aDoJSFixupstrue when this is the content-accessible JS version of window opening. When true, popups do not cause us to throw, we save the caller's principal in the new window for later consumption, and we make sure that there is a document in the newly-opened window. Note that this last will only be done if the newly-opened window is non-chrome.
argvThe arguments to pass to the new window. The first three args, if present, will be aURL, aName, and aOptions. So this param only matters if there are more than 3 arguments.
argcThe number of arguments in argv.
aExtraArgumentAnother way to pass arguments in. This is mutually exclusive with the argv/argc approach.
aReturn[out] The window that was opened, if any.
Note:
that the boolean args are const because the function shouldn't be messing with them. That also makes it easier for the compiler to sort out its build warning stuff.
void nsIObserver::observe ( in nsISupports  aSubject,
in string  aTopic,
in wstring  aData 
) [inherited]

Observe will be called when there is a notification for the topic |aTopic|.

This assumes that the object implementing this interface has been registered with an observer service such as the nsIObserverService.

If you expect multiple topics/subjects, the impl is responsible for filtering.

You should not modify, add, remove, or enumerate notifications in the implemention of observe.

Parameters:
aSubject: Notification specific interface pointer.
aTopic: The notification topic or subject.
aData: Notification specific wide string. subject event.
void nsGlobalWindow::OnFinalize ( JSObject aJSObject) [virtual]

Called when the global JSObject is finalized.

Implements nsIScriptGlobalObject.

Definition at line 1844 of file nsGlobalWindow.cpp.

{
  if (aJSObject == mJSObject) {
    mJSObject = nsnull;
  } else if (mJSObject) {
    NS_ERROR("Huh? XPConnect created more than one wrapper for this global!");
  } else {
    NS_WARNING("Weird, we're finalized with a null mJSObject?");
  }
}

These are the scriptable versions of nsIDOMWindowInternal::open() and nsIDOMWindowInternal::openDialog() that take 3 optional arguments.

Unlike the nsIDOMWindowInternal methods, these methods assume that they are called from JavaScript and hence will look on the JS context stack to determine the caller and hence correct security context for doing their search for an existing named window. Also, these methods will set the default charset on the newly opened window based on the current document charset in the caller.

nsIDOMWindow nsIDOMWindowInternal::open ( in DOMString  url,
in DOMString  name,
in DOMString  options 
) [inherited]

Open a new window with this one as the parent.

This method will NOT examine the JS stack for purposes of determining a caller. This window will be used for security checks during the search by name and the default character set on the newly opened window will just be the default character set of this window.

nsIDOMWindow nsIDOMWindowInternal::openDialog ( in DOMString  url,
in DOMString  name,
in DOMString  options,
in nsISupports  aExtraArgument 
) [inherited]
virtual void nsPIDOMWindow::PopPopupControlState ( PopupControlState  state) const [pure virtual, inherited]
DOMString nsIDOMJSWindow::prompt ( ) [inherited]

The prompt method takes up to four arguments, the arguments are message, initial prompt value, title and a save password flag.

DOMString nsIDOMWindowInternal::prompt ( in DOMString  aMessage,
in DOMString  aInitial,
in DOMString  aTitle,
in unsigned long  aSavePassword 
) [inherited]
virtual PopupControlState nsPIDOMWindow::PushPopupControlState ( PopupControlState  aState,
PRBool  aForce 
) const [pure virtual, inherited]

Here is the caller graph for this function:

Definition at line 4805 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_OUTER_VOID(ReallyCloseWindow, ());

  // Make sure we never reenter this method.
  mHavePendingClose = PR_TRUE;

  nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
  GetTreeOwner(getter_AddRefs(treeOwnerAsWin));

  // If there's no treeOwnerAsWin, this window must already be closed.

  if (treeOwnerAsWin) {

    // but if we're a browser window we could be in some nasty
    // self-destroying cascade that we should mostly ignore

    nsCOMPtr<nsIDocShellTreeItem> docItem(do_QueryInterface(mDocShell));
    if (docItem) {
      nsCOMPtr<nsIBrowserDOMWindow> bwin;
      nsCOMPtr<nsIDocShellTreeItem> rootItem;
      docItem->GetRootTreeItem(getter_AddRefs(rootItem));
      nsCOMPtr<nsIDOMWindow> rootWin(do_GetInterface(rootItem));
      nsCOMPtr<nsIDOMChromeWindow> chromeWin(do_QueryInterface(rootWin));
      if (chromeWin)
        chromeWin->GetBrowserDOMWindow(getter_AddRefs(bwin));

      if (rootWin) {
        /* Normally we destroy the entire window, but not if
           this DOM window belongs to a tabbed browser and doesn't
           correspond to a tab. This allows a well-behaved tab
           to destroy the container as it should but is a final measure
           to prevent an errant tab from doing so when it shouldn't.
           This works because we reach this code when we shouldn't only
           in the particular circumstance that we belong to a tab
           that has just been closed (and is therefore already missing
           from the list of browsers) (and has an unload handler
           that closes the window). */
        // XXXbz now that we have mHavePendingClose, is this needed?
        PRBool isTab = PR_FALSE;
        if (rootWin == this ||
            !bwin || (bwin->IsTabContentWindow(GetOuterWindowInternal(),
                                               &isTab), isTab))
          treeOwnerAsWin->Destroy();
      }
    }

    CleanUp();
  }
}

Here is the call graph for this function:

void nsIDOMJSWindow::releaseEvents ( in long  eventFlags) [inherited]
void nsIDOMEventTarget::removeEventListener ( in DOMString  type,
in nsIDOMEventListener  listener,
in boolean  useCapture 
) [inherited]

This method allows the removal of event listeners from the event target.

If an EventListener is removed from an EventTarget while it is processing an event, it will not be triggered by the current actions. EventListeners can never be invoked after being removed. Calling removeEventListener with arguments which do not identify any currently registered EventListener on the EventTarget has no effect.

Parameters:
typeSpecifies the event type of the EventListener being removed.
listenerThe EventListener parameter indicates the EventListener to be removed.
useCaptureSpecifies whether the EventListener being removed was registered as a capturing listener or not. If a listener was registered twice, one with capture and one without, each must be removed separately. Removal of a capturing listener does not affect a non-capturing version of the same listener, and vice versa.

Implements nsIDOMEventReceiver.

Definition at line 5452 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_INNER(RemoveEventListenerByIID, (aListener, aIID),
                   NS_ERROR_NOT_INITIALIZED);

  if (mListenerManager) {
    mListenerManager->RemoveEventListenerByIID(aListener, aIID,
                                               NS_EVENT_FLAG_BUBBLE);
    return NS_OK;
  }
  return NS_ERROR_FAILURE;
}
void nsIDOM3EventTarget::removeGroupedEventListener ( in DOMString  type,
in nsIDOMEventListener  listener,
in boolean  useCapture,
in nsIDOMEventGroup  evtGroup 
) [inherited]
void nsIDOMWindowInternal::resizeBy ( in long  widthDif,
in long  heightDif 
) [inherited]
void nsIDOMWindowInternal::resizeTo ( in long  width,
in long  height 
) [inherited]
virtual nsresult nsPIDOMWindow::RestoreWindowState ( nsISupports *  aState) [pure virtual, inherited]
nsresult nsGlobalWindow::ResumeTimeouts ( ) [protected, virtual]

Implements nsPIDOMWindow.

Definition at line 7592 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_INNER(ResumeTimeouts, (), NS_ERROR_NOT_INITIALIZED);

  // Restore all of the timeouts, using the stored time remaining
  // (stored in timeout->mWhen).

  PRTime now = PR_Now();
  nsresult rv;

  for (nsTimeout *t = mTimeouts; t; t = t->mNext) {
    // Make sure to cast the unsigned PR_USEC_PER_MSEC to signed
    // PRTime to make the division do the right thing on 64-bit
    // platforms whether t->mWhen is positive or negative (which is
    // likely to always be positive here, but cast anyways for
    // consistency).
    PRUint32 delay =
      PR_MAX(((PRUint32)(t->mWhen / (PRTime)PR_USEC_PER_MSEC)),
              DOM_MIN_TIMEOUT_VALUE);

    // Set mWhen back to the time when the timer is supposed to
    // fire.
    t->mWhen += now;

    t->mTimer = do_CreateInstance("@mozilla.org/timer;1");
    NS_ENSURE_TRUE(t->mTimer, NS_ERROR_OUT_OF_MEMORY);

    rv = t->mTimer->InitWithFuncCallback(TimerCallback, t, delay,
                                         nsITimer::TYPE_ONE_SHOT);
    if (NS_FAILED(rv)) {
      t->mTimer = nsnull;
      return rv;
    }

    // Add a reference for the new timer's closure.
    t->AddRef();
  }

  // Resume our children as well.
  nsCOMPtr<nsIDocShellTreeNode> node =
    do_QueryInterface(GetDocShellInternal());
  if (node) {
    PRInt32 childCount = 0;
    node->GetChildCount(&childCount);

    for (PRInt32 i = 0; i < childCount; ++i) {
      nsCOMPtr<nsIDocShellTreeItem> childShell;
      node->GetChildAt(i, getter_AddRefs(childShell));
      NS_ASSERTION(childShell, "null child shell");

      nsCOMPtr<nsPIDOMWindow> pWin = do_GetInterface(childShell);
      if (pWin) {
        nsGlobalWindow *win =
          NS_STATIC_CAST(nsGlobalWindow*,
                         NS_STATIC_CAST(nsPIDOMWindow*, pWin));

        NS_ASSERTION(win->IsOuterWindow(), "Expected outer window");
        nsGlobalWindow* inner = win->GetCurrentInnerWindowInternal();
        if (inner) {
          inner->Thaw();
        }

        rv = win->ResumeTimeouts();
        NS_ENSURE_SUCCESS(rv, rv);
      }
    }
  }

  return NS_OK;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsGlobalWindow::RunTimeout ( nsTimeout aTimeout) [protected]

Definition at line 6693 of file nsGlobalWindow.cpp.

{
  NS_ASSERTION(IsInnerWindow(), "Timeout running on outer window!");
  NS_ASSERTION(!IsFrozen(), "Timeout running on a window in the bfcache!");

  // Make sure that the script context doesn't go away as a result of
  // running timeouts
  nsCOMPtr<nsIScriptContext> scx = GetContextInternal();

  if (!scx) {
    // No context means this window was closed or never properly
    // initialized.

    return;
  }

  if (!scx->GetScriptsEnabled()) {
    // Scripts were enabled once in this window (unless aTimeout ==
    // nsnull) but now scripts are disabled (we might be in
    // print-preview, for instance), this means we shouldn't run any
    // timeouts at this point.
    //
    // If scripts are enabled in this window again we'll fire the
    // timeouts that are due at that point.

    return;
  }

  nsTimeout *next, *prev, *timeout;
  nsTimeout *last_expired_timeout, **last_insertion_point;
  nsTimeout dummy_timeout;
  JSContext *cx;
  PRUint32 firingDepth = mTimeoutFiringDepth + 1;

  // Make sure that the window and the script context don't go away as
  // a result of running timeouts
  nsCOMPtr<nsIScriptGlobalObject> windowKungFuDeathGrip(this);

  cx = (JSContext *)scx->GetNativeContext();

  // A native timer has gone off. See which of our timeouts need
  // servicing
  PRTime now = PR_Now();
  PRTime deadline;

  if (aTimeout && aTimeout->mWhen > now) {
    // The OS timer fired early (yikes!), and possibly out of order
    // too. Set |deadline| to be the time when the OS timer *should*
    // have fired so that any timers that *should* have fired before
    // aTimeout *will* be fired now. This happens most of the time on
    // Win2k.

    deadline = aTimeout->mWhen;
  } else {
    deadline = now;
  }

  // The timeout list is kept in deadline order. Discover the latest
  // timeout whose deadline has expired. On some platforms, native
  // timeout events fire "early", so we need to test the timer as well
  // as the deadline.
  last_expired_timeout = nsnull;
  for (timeout = mTimeouts; timeout; timeout = timeout->mNext) {
    if (((timeout == aTimeout) || (timeout->mWhen <= deadline)) &&
        (timeout->mFiringDepth == 0)) {
      // Mark any timeouts that are on the list to be fired with the
      // firing depth so that we can reentrantly run timeouts
      timeout->mFiringDepth = firingDepth;
      last_expired_timeout = timeout;
    }
  }

  // Maybe the timeout that the event was fired for has been deleted
  // and there are no others timeouts with deadlines that make them
  // eligible for execution yet. Go away.
  if (!last_expired_timeout) {
    return;
  }

  // Insert a dummy timeout into the list of timeouts between the
  // portion of the list that we are about to process now and those
  // timeouts that will be processed in a future call to
  // win_run_timeout(). This dummy timeout serves as the head of the
  // list for any timeouts inserted as a result of running a timeout.
  dummy_timeout.mFiringDepth = firingDepth;
  dummy_timeout.mNext = last_expired_timeout->mNext;
  last_expired_timeout->mNext = &dummy_timeout;

  // Don't let ClearWindowTimeouts throw away our stack-allocated
  // dummy timeout.
  dummy_timeout.AddRef();
  dummy_timeout.AddRef();

  last_insertion_point = mTimeoutInsertionPoint;
  mTimeoutInsertionPoint = &dummy_timeout.mNext;

  prev = nsnull;
  for (timeout = mTimeouts; timeout != &dummy_timeout && !IsFrozen(); timeout = next) {
    next = timeout->mNext;

    if (timeout->mFiringDepth != firingDepth) {
      // We skip the timeout since it's on the list to run at another
      // depth.

      prev = timeout;

      continue;
    }

    // The timeout is on the list to run at this depth, go ahead and
    // process it.

    nsTimeout *last_running_timeout = mRunningTimeout;
    mRunningTimeout = timeout;
    timeout->mRunning = PR_TRUE;

    // Push this timeout's popup control state, which should only be
    // eabled the first time a timeout fires that was created while
    // popups were enabled and with a delay less than
    // "dom.disable_open_click_delay".
    nsAutoPopupStatePusher popupStatePusher(timeout->mPopupState);

    // Clear the timeout's popup state, if any, to prevent interval
    // timeouts from repeatedly opening poups.
    timeout->mPopupState = openAbused;

    // Hold on to the timeout in case mExpr or mFunObj releases its
    // doc.
    timeout->AddRef();

    ++gRunningTimeoutDepth;
    ++mTimeoutFiringDepth;

    if (timeout->mExpr) {
      // Evaluate the timeout expression.
      const PRUnichar *script =
        NS_REINTERPRET_CAST(const PRUnichar *,
                            ::JS_GetStringChars(timeout->mExpr));

      PRBool is_undefined;
      scx->EvaluateString(nsDependentString(script), mJSObject,
                          timeout->mPrincipal, timeout->mFileName,
                          timeout->mLineNo, timeout->mVersion, nsnull,
                          &is_undefined);
    } else {
      // Add a "secret" final argument that indicates timeout lateness
      // in milliseconds
      PRTime lateness = now - timeout->mWhen;

      // Make sure to cast the unsigned PR_USEC_PER_MSEC to signed
      // PRTime to make the division do the right thing on 64-bit
      // platforms whether lateness is positive or negative.
      timeout->mArgv[timeout->mArgc] =
        INT_TO_JSVAL((jsint)(lateness / (PRTime)PR_USEC_PER_MSEC));

      jsval dummy;
      scx->CallEventHandler(mJSObject, timeout->mFunObj, timeout->mArgc + 1,
                            timeout->mArgv, &dummy);
    }

    --mTimeoutFiringDepth;
    --gRunningTimeoutDepth;

    mRunningTimeout = last_running_timeout;
    timeout->mRunning = PR_FALSE;

    // We ignore any failures from calling EvaluateString() or
    // CallEventHandler() on the context here since we're in a loop
    // where we're likely to be running timeouts whose OS timers
    // didn't fire in time and we don't want to not fire those timers
    // now just because execution of one timer failed. We can't
    // propagate the error to anyone who cares about it from this
    // point anyway so we just drop it.

    // If all timeouts were cleared and |timeout != aTimeout| then
    // |timeout| may be the last reference to the timeout so check if
    // it was cleared before releasing it.
    PRBool timeout_was_cleared = timeout->mCleared;

    timeout->Release(scx);

    if (timeout_was_cleared) {
      // The running timeout's window was cleared, this means that
      // ClearAllTimeouts() was called from a *nested* call, possibly
      // through a timeout that fired while a modal (to this window)
      // dialog was open or through other non-obvious paths.

      mTimeoutInsertionPoint = last_insertion_point;

      return;
    }

    PRBool isInterval = PR_FALSE;

    // If we have a regular interval timer, we re-schedule the
    // timeout, accounting for clock drift.
    if (timeout->mInterval) {
      // Compute time to next timeout for interval timer.
      // Also check if the next interval timeout is overdue. If so,
      // then restart the interval from now.
      PRTime nextInterval = (PRTime)timeout->mInterval * PR_USEC_PER_MSEC;
      if (nextInterval + timeout->mWhen <= now)
        nextInterval += now;
      else
        nextInterval += timeout->mWhen;

      PRTime delay = nextInterval - PR_Now();

      // Make sure the delay is at least DOM_MIN_TIMEOUT_VALUE.
      // Note: We must cast the rhs expression to PRTime to work
      // around what looks like a compiler bug on x86_64.
      if (delay < (PRTime)(DOM_MIN_TIMEOUT_VALUE * PR_USEC_PER_MSEC)) {
        delay = DOM_MIN_TIMEOUT_VALUE * PR_USEC_PER_MSEC;
      }

      if (timeout->mTimer) {
        timeout->mWhen = nextInterval;

        // Reschedule the OS timer. Don't bother returning any error
        // codes if this fails since the callers of this method
        // doesn't care about them nobody who cares about them
        // anyways.

        // Make sure to cast the unsigned PR_USEC_PER_MSEC to signed
        // PRTime to make the division do the right thing on 64-bit
        // platforms whether delay is positive or negative (which we
        // know is always positive here, but cast anyways for
        // consistency).
        nsresult rv = timeout->mTimer->
          InitWithFuncCallback(TimerCallback, timeout,
                               (PRInt32)(delay / (PRTime)PR_USEC_PER_MSEC),
                               nsITimer::TYPE_ONE_SHOT);

        if (NS_FAILED(rv)) {
          NS_ERROR("Error initializing timer for DOM timeout!");

          // We failed to initialize the new OS timer, this timer does
          // us no good here so we just cancel it (just in case) and
          // null out the pointer to the OS timer, this will release the
          // OS timer. As we continue executing the code below we'll end
          // up deleting the timeout since it's not an interval timeout
          // any more (since timeout->mTimer == nsnull).
          timeout->mTimer->Cancel();
          timeout->mTimer = nsnull;

          // Now that the OS timer no longer has a reference to the
          // timeout we need to drop that reference.
          timeout->Release(scx);
        }
      } else {
        NS_ASSERTION(IsFrozen(), "How'd our timer end up null if we're not frozen?");

        timeout->mWhen = delay;
        isInterval = PR_TRUE;
      }
    }

    if (timeout->mTimer) {
      if (timeout->mInterval) {
        isInterval = PR_TRUE;
      } else {
        // The timeout still has an OS timer, and it's not an
        // interval, that means that the OS timer could still fire (if
        // it didn't already, i.e. aTimeout == timeout), cancel the OS
        // timer and release it's reference to the timeout.
        timeout->mTimer->Cancel();
        timeout->mTimer = nsnull;

        timeout->Release(scx);
      }
    }

    // Running a timeout can cause another timeout to be deleted, so
    // we need to reset the pointer to the following timeout.
    next = timeout->mNext;

    if (!prev) {
      mTimeouts = next;
    } else {
      prev->mNext = next;
    }

    // Release the timeout struct since it's out of the list
    timeout->Release(scx);

    if (isInterval) {
      // Reschedule an interval timeout. Insert interval timeout
      // onto list sorted in deadline order.

      InsertTimeoutIntoList(mTimeoutInsertionPoint, timeout);
    }
  }

  // Take the dummy timeout off the head of the list
  if (!prev) {
    mTimeouts = dummy_timeout.mNext;
  } else {
    prev->mNext = dummy_timeout.mNext;
  }

  mTimeoutInsertionPoint = last_insertion_point;
}

Here is the call graph for this function:

Here is the caller graph for this function:

virtual nsresult nsPIDOMWindow::SaveWindowState ( nsISupports **  aState) [pure virtual, inherited]
void nsIDOMWindowInternal::scroll ( in long  xScroll,
in long  yScroll 
) [inherited]
void nsIDOMWindow::scrollBy ( in long  xScrollDif,
in long  yScrollDif 
) [inherited]

Method for scrolling this window to a pixel offset relative to the current scroll position.

void nsIDOMWindow::scrollByLines ( in long  numLines) [inherited]

Method for scrolling this window by a number of lines.

void nsIDOMWindow::scrollByPages ( in long  numPages) [inherited]

Method for scrolling this window by a number of pages.

void nsIDOMWindow::scrollTo ( in long  xScroll,
in long  yScroll 
) [inherited]

Method for scrolling this window to an absolute pixel offset.

nsresult nsGlobalWindow::SecurityCheckURL ( const char *  aURL) [protected]

Definition at line 7388 of file nsGlobalWindow.cpp.

{
  JSContext       *cx;
  PRBool           freePass;
  nsCOMPtr<nsIURI> uri;

  if (NS_FAILED(BuildURIfromBase(aURL, getter_AddRefs(uri), &freePass, &cx)))
    return NS_ERROR_FAILURE;

  if (!freePass && NS_FAILED(sSecMan->CheckLoadURIFromScript(cx, uri)))
    return NS_ERROR_FAILURE;

  return NS_OK;
}

Here is the call graph for this function:

Implements nsIScriptGlobalObject.

Definition at line 603 of file nsGlobalWindow.cpp.

{
  NS_ASSERTION(IsOuterWindow(), "Uh, SetContext() called on inner window!");
  NS_ASSERTION(!aContext || !mContext, "Bad call to SetContext()!");

  // if setting the context to null, then we won't get to clean up the
  // named reference, so do it now
  if (!aContext) {
    NS_WARNING("Possibly early removal of script object, see bug #41608");
  } else {
    JSContext *cx = (JSContext *)aContext->GetNativeContext();

    mJSObject = ::JS_GetGlobalObject(cx);
  }

  if (mContext) {
    mContext->SetOwner(nsnull);
  }

  mContext = aContext;

  if (mContext) {
    if (IsFrame()) {
      // This window is a [i]frame, don't bother GC'ing when the
      // frame's context is destroyed since a GC will happen when the
      // frameset or host document is destroyed anyway.

      mContext->SetGCOnDestruction(PR_FALSE);
    }
  }
}

Here is the call graph for this function:

void nsGlobalWindow::SetDocShell ( nsIDocShell aDocShell) [virtual]

Implements nsIScriptGlobalObject.

Definition at line 1432 of file nsGlobalWindow.cpp.

{
  NS_ASSERTION(IsOuterWindow(), "Uh, SetDocShell() called on inner window!");

  if (aDocShell == mDocShell)
    return;

  // SetDocShell(nsnull) means the window is being torn down. Drop our
  // reference to the script context, allowing it to be deleted
  // later. Meanwhile, keep our weak reference to the script object
  // (mJSObject) so that it can be retrieved later (until it is
  // finalized by the JS GC).

  if (!aDocShell && mContext) {
    NS_ASSERTION(!mTimeouts, "Uh, outer window holds timeouts!");

    JSContext *cx = (JSContext *)mContext->GetNativeContext();
    // Call FreeInnerObjects on all inner windows, not just the current
    // one, since some could be held by WindowStateHolder objects that
    // are GC-owned.
    for (nsGlobalWindow *inner = (nsGlobalWindow *)PR_LIST_HEAD(this);
         inner != this;
         inner = (nsGlobalWindow*)PR_NEXT_LINK(inner)) {
      NS_ASSERTION(inner->mOuterWindow == this, "bad outer window pointer");
      inner->FreeInnerObjects(cx);
    }

    nsGlobalWindow *currentInner = GetCurrentInnerWindowInternal();

    if (currentInner) {
      nsCOMPtr<nsIDocument> doc =
        do_QueryInterface(mDocument);

      // Remember the document's principal.
      mDocumentPrincipal = doc->GetPrincipal();

      // Release our document reference
      mDocument = nsnull;

      if (mJSObject) {
        // Clear mJSObject and its prototype chain, but not Object.prototype.
        ::JS_ClearScope(cx, mJSObject);
        for (JSObject *o = ::JS_GetPrototype(cx, mJSObject), *next;
             o && (next = ::JS_GetPrototype(cx, o)); o = next)
          ::JS_ClearScope(cx, o);
        ::JS_ClearWatchPointsForObject(cx, mJSObject);

        // An outer window shouldn't have a global scope polluter, but
        // in case code on a webpage took one and put it in an outer
        // object's prototype, we need to invalidate it nonetheless.
        nsWindowSH::InvalidateGlobalScopePolluter(cx, mJSObject);
      }

      ::JS_ClearRegExpStatics(cx);
    }

    // if we are closing the window while in full screen mode, be sure
    // to restore os chrome
    if (mFullScreen) {
      nsIFocusController *focusController =
        nsGlobalWindow::GetRootFocusController();
      PRBool isActive = PR_FALSE;
      if (focusController)
        focusController->GetActive(&isActive);
      // only restore OS chrome if the closing window was active

      if (isActive) {
        nsCOMPtr<nsIFullScreen> fullScreen =
          do_GetService("@mozilla.org/browser/fullscreen;1");

        if (fullScreen)
          fullScreen->ShowAllOSChrome();
      }
    }

    ClearControllers();

    mChromeEventHandler = nsnull; // force release now

    if (mArguments) { 
      // We got no new document after someone called
      // SetNewArguments(), drop our reference to the arguments.
      ::JS_UnlockGCThing(cx, mArguments);
      mArguments = nsnull;
    }

    mInnerWindowHolder = nsnull;

    mContext->GC();

    if (mContext) {
      mContext->SetOwner(nsnull);
      mContext = nsnull;          // force release now
    }
  }

  mDocShell = aDocShell;        // Weak Reference

  if (mNavigator)
    mNavigator->SetDocShell(aDocShell);
  if (mLocation)
    mLocation->SetDocShell(aDocShell);
  if (mHistory)
    mHistory->SetDocShell(aDocShell);
  if (mFrames)
    mFrames->SetDocShell(aDocShell);
  if (mScreen)
    mScreen->SetDocShell(aDocShell);

  if (mDocShell) {
    // tell our member elements about the new browserwindow
    if (mMenubar) {
      nsCOMPtr<nsIWebBrowserChrome> browserChrome;
      GetWebBrowserChrome(getter_AddRefs(browserChrome));
      mMenubar->SetWebBrowserChrome(browserChrome);
    }

    // Get our enclosing chrome shell and retrieve its global window impl, so
    // that we can do some forwarding to the chrome document.
    mDocShell->GetChromeEventHandler(getter_AddRefs(mChromeEventHandler));
    if (!mChromeEventHandler) {
      // We have no chrome event handler. If we have a parent,
      // get our chrome event handler from the parent. If
      // we don't have a parent, then we need to make a new
      // window root object that will function as a chrome event
      // handler and receive all events that occur anywhere inside
      // our window.
      nsCOMPtr<nsIDOMWindow> parentWindow;
      GetParent(getter_AddRefs(parentWindow));
      if (parentWindow.get() != NS_STATIC_CAST(nsIDOMWindow*,this)) {
        nsCOMPtr<nsPIDOMWindow> piWindow(do_QueryInterface(parentWindow));
        mChromeEventHandler = piWindow->GetChromeEventHandler();
      }
      else NS_NewWindowRoot(this, getter_AddRefs(mChromeEventHandler));
    }
  }
}

Here is the call graph for this function:

void nsPIDOMWindow::SetFrameElementInternal ( nsIDOMElement aFrameElement) [inline, inherited]

Definition at line 176 of file nsPIDOMWindow.h.

  {
    if (IsOuterWindow()) {
      mFrameElement = aFrameElement;

      return;
    }

    if (!mOuterWindow) {
      NS_ERROR("frameElement set on inner window with no outer!");

      return;
    }

    mOuterWindow->SetFrameElementInternal(aFrameElement);
  }

Here is the call graph for this function:

Here is the caller graph for this function:

Let the script global object know who its owner is.

The script global object should not addref the owner. It will be told when the owner goes away.

Returns:
NS_OK if the method is successful

Implements nsIScriptGlobalObject.

Definition at line 1603 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_OUTER_VOID(SetGlobalObjectOwner, (aOwner));

  mGlobalObjectOwner = aOwner;  // Note this is supposed to be a weak ref.
}
void nsPIDOMWindow::SetMutationListeners ( PRUint32  aType) [inline, inherited]

Definition at line 128 of file nsPIDOMWindow.h.

  {
    nsPIDOMWindow *win;

    if (IsOuterWindow()) {
      win = GetCurrentInnerWindow();

      if (!win) {
        NS_ERROR("No inner window available to set mutation bits on!");

        return;
      }
    } else {
      if (!mOuterWindow) {
        NS_ERROR("HasMutationListeners() called on orphan inner window!");

        return;
      }

      win = this;
    }

    win->mMutationBits |= aType;
  }

Here is the call graph for this function:

nsresult nsGlobalWindow::SetNewArguments ( PRUint32  aArgc,
void aArgv 
) [virtual]

Set a new arguments array for this window.

This will be set on the window right away (if there's an existing document) and it will also be installed on the window when the next document is loaded. If argc is nonzero, argv must be non-null.

Parameters:
aArgcthe number of args
aArgvthe pointer to the args. This may be cast to jsval* and the args are found at ((jsval*)aArgv)[0], ..., ((jsval*)aArgv)[aArgc - 1]

Implements nsIScriptGlobalObject.

Definition at line 1869 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_OUTER(SetNewArguments, (aArgc, aArgv), NS_ERROR_NOT_INITIALIZED);

  JSContext *cx;
  NS_ENSURE_TRUE(mContext &&
                 (cx = (JSContext *)mContext->GetNativeContext()),
                 NS_ERROR_NOT_INITIALIZED);

  if (mArguments) {
    ::JS_UnlockGCThing(cx, mArguments);
    mArguments = nsnull;
  }
  
  if (aArgc == 0) {
    return NS_OK;
  }

  jsval* argv = NS_STATIC_CAST(jsval*, aArgv);

  NS_ASSERTION(argv, "Must have argv!");

  JSObject *argArray = ::JS_NewArrayObject(cx, aArgc, argv);

  NS_ENSURE_TRUE(argArray, NS_ERROR_OUT_OF_MEMORY);
  
  // Note that currentInner may be non-null if someone's doing a
  // window.open with an existing window name.
  nsGlobalWindow *currentInner = GetCurrentInnerWindowInternal();
  
  jsval args = OBJECT_TO_JSVAL(argArray);

  // The object newborn keeps argArray alive across this set.
  if (currentInner && currentInner->mJSObject) {
    if (!::JS_SetProperty(cx, currentInner->mJSObject, "arguments", &args)) {
      return NS_ERROR_FAILURE;
    }
  }

  // Hold on to the arguments so that we can re-set them once the next
  // document is loaded.
  mArguments = argArray;
  ::JS_LockGCThing(cx, mArguments);

  return NS_OK;
}

Here is the call graph for this function:

nsresult nsGlobalWindow::SetNewDocument ( nsIDOMDocument aDocument,
nsISupports *  aState,
PRBool  aRemoveEventListeners,
PRBool  aClearScopeHint 
) [virtual]

Implements nsIScriptGlobalObject.

Definition at line 912 of file nsGlobalWindow.cpp.

{
  return SetNewDocument(aDocument, aState, aRemoveEventListeners,
                        aClearScopeHint, PR_FALSE);
}

Here is the caller graph for this function:

nsresult nsGlobalWindow::SetNewDocument ( nsIDOMDocument aDocument,
nsISupports *  aState,
PRBool  aRemoveEventListeners,
PRBool  aClearScopeHint,
PRBool  aIsInternalCall 
) [protected]

Definition at line 922 of file nsGlobalWindow.cpp.

{
  NS_WARN_IF_FALSE(mDocumentPrincipal == nsnull,
                   "mDocumentPrincipal prematurely set!");
#ifdef PR_LOGGING
  if (IsInnerWindow() && aDocument && gDOMLeakPRLog &&
      PR_LOG_TEST(gDOMLeakPRLog, PR_LOG_DEBUG)) {
    nsCOMPtr<nsIDocument> newDoc(do_QueryInterface(aDocument));
    nsIURI *uri = nsnull;
    if (newDoc)
      uri = newDoc->GetDocumentURI();
    nsCAutoString spec;
    if (uri)
      uri->GetSpec(spec);
    PR_LogPrint("DOMWINDOW %p SetNewDocument %s", this, spec.get());
  }
#endif

  if (IsOuterWindow() && IsFrozen()) {
    // This outer is now getting its first inner, thaw the outer now
    // that it's ready and is getting an inner window.

    Thaw();
  }

  if (!aIsInternalCall && IsInnerWindow()) {
    if (!mOuterWindow) {
      return NS_ERROR_NOT_INITIALIZED;
    }

    return GetOuterWindowInternal()->SetNewDocument(aDocument,
                                                    aState,
                                                    aRemoveEventListeners,
                                                    aClearScopeHint, PR_TRUE);
  }

  if (!aDocument) {
    NS_ERROR("SetNewDocument(null) called!");

    return NS_ERROR_INVALID_ARG;
  }

  NS_ASSERTION(!GetCurrentInnerWindow() ||
               GetCurrentInnerWindow()->GetExtantDocument() == mDocument,
               "Uh, mDocument doesn't match the current inner window "
               "document!");

  nsCOMPtr<nsIDocument> newDoc(do_QueryInterface(aDocument));
  NS_ENSURE_TRUE(newDoc, NS_ERROR_FAILURE);

  nsresult rv = NS_OK;

  nsCOMPtr<nsIDocument> oldDoc(do_QueryInterface(mDocument));

  // Always clear watchpoints, to deal with two cases:
  // 1.  The first document for this window is loading, and a miscreant has
  //     preset watchpoints on the window object in order to attack the new
  //     document's privileged information.
  // 2.  A document loaded and used watchpoints on its own window, leaving
  //     them set until the next document loads. We must clean up window
  //     watchpoints here.
  // Watchpoints set on document and subordinate objects are all cleared
  // when those sub-window objects are finalized, after JS_ClearScope and
  // a GC run that finds them to be garbage.

  // XXXjst: Update above comment.
  nsIScriptContext *scx = GetContextInternal();
  NS_ENSURE_TRUE(scx, NS_ERROR_NOT_INITIALIZED);

  JSContext *cx = (JSContext *)scx->GetNativeContext();

  // clear smartcard events, our document has gone away.
  if (mCrypto) {
    mCrypto->SetEnableSmartCardEvents(PR_FALSE);
  }

  if (!mDocument) {
    // First document load.

    // Get our private root. If it is equal to us, then we need to
    // attach our global key bindings that handle browser scrolling
    // and other browser commands.
    nsIDOMWindowInternal *internal = nsGlobalWindow::GetPrivateRoot();

    if (internal == NS_STATIC_CAST(nsIDOMWindowInternal *, this)) {
      nsCOMPtr<nsIXBLService> xblService = do_GetService("@mozilla.org/xbl;1");
      if (xblService) {
        nsCOMPtr<nsIDOMEventReceiver> rec =
          do_QueryInterface(mChromeEventHandler);
        xblService->AttachGlobalKeyHandler(rec);

        // for now, the only way to get drag/drop is to use the XUL
        // wrapper. There are just too many things that need to be
        // added to hookup DnD with XBL (pinkerton)
        //xblService->AttachGlobalDragHandler(rec);
      }
    }
  }

  /* No mDocShell means we're either an inner window or we're already
     been partially closed down.  When that happens, setting status
     isn't a big requirement, so don't. (Doesn't happen under normal
     circumstances, but bug 49615 describes a case.) */

  SetStatus(EmptyString());
  SetDefaultStatus(EmptyString());

  // This code should not be called during shutdown any more (now that
  // we don't ever call SetNewDocument(nsnull), so no need to null
  // check xpc here.
  nsIXPConnect *xpc = nsContentUtils::XPConnect();

  PRBool reUseInnerWindow = WouldReuseInnerWindow(newDoc);

  // XXX We used to share event listeners between inner windows in special
  // circumstances (that were remarkably close to the conditions that we set
  // reUseInnerWindow in) but that left dangling pointers to the old (destroyed)
  // inner window (bug 303765). Setting this here should be a no-op.
  aRemoveEventListeners = !reUseInnerWindow;

  // Remember the old document's principal.
  nsIPrincipal *oldPrincipal = nsnull;

  if (oldDoc) {
    oldPrincipal = oldDoc->GetPrincipal();
  }

  // Drop our reference to the navigator object unless we're reusing
  // the existing inner window or the new document is from the same
  // origin as the old document.
  if (!reUseInnerWindow && mNavigator && oldPrincipal) {
    nsIPrincipal *newPrincipal = newDoc->GetPrincipal();
    rv = NS_ERROR_FAILURE;

    if (newPrincipal) {
      rv = sSecMan->CheckSameOriginPrincipal(oldPrincipal, newPrincipal);
    }

    if (NS_FAILED(rv)) {
      // Different origins.  Release the navigator object so it gets
      // recreated for the new document.  The plugins or mime types
      // arrays may have changed. See bug 150087.
      mNavigator->SetDocShell(nsnull);

      mNavigator = nsnull;
    }
  }

  if (mNavigator && newDoc != oldDoc) {
    // We didn't drop our reference to our old navigator object and
    // we're loading a new document. Notify the navigator object about
    // the new document load so that it can make sure it is ready for
    // the new document.

    mNavigator->LoadingNewDocument();
  }

  // Set mDocument even if this is an outer window to avoid
  // having to *always* reach into the inner window to find the
  // document.

  mDocument = aDocument;

  if (IsOuterWindow()) {
    scx->WillInitializeContext();

    nsGlobalWindow *currentInner = GetCurrentInnerWindowInternal();

    if (currentInner && !currentInner->IsFrozen()) {
      if (!reUseInnerWindow) {
        currentInner->ClearAllTimeouts();

        currentInner->mChromeEventHandler = nsnull;
      }

      if (aRemoveEventListeners && currentInner->mListenerManager) {
        currentInner->mListenerManager->Disconnect();
        currentInner->mListenerManager = nsnull;
      }

      if (!reUseInnerWindow || newDoc != oldDoc) {
        nsWindowSH::InvalidateGlobalScopePolluter(cx, currentInner->mJSObject);
      }
    }

    nsRefPtr<nsGlobalWindow> newInnerWindow;

    nsCOMPtr<nsIDOMChromeWindow> thisChrome =
      do_QueryInterface(NS_STATIC_CAST(nsIDOMWindow *, this));
    nsCOMPtr<nsIXPConnectJSObjectHolder> navigatorHolder;

    PRUint32 flags = 0;

    // Make sure to clear scope on the outer window *before* we
    // initialize the new inner window. If we don't, things
    // (Object.prototype etc) could leak from the old outer to the new
    // inner scope.
    ::JS_ClearScope(cx, mJSObject);
    ::JS_ClearWatchPointsForObject(cx, mJSObject);

    // Clear the regexp statics for the new page unconditionally.
    // XXX They don't get restored on the inner window when we go back.
    ::JS_ClearRegExpStatics(cx);

    if (reUseInnerWindow) {
      // We're reusing the current inner window.
      NS_ASSERTION(!currentInner->IsFrozen(),
                   "We should never be reusing a shared inner window");
      newInnerWindow = currentInner;
    } else {
      if (aState) {
        nsCOMPtr<WindowStateHolder> wsh = do_QueryInterface(aState);
        NS_ASSERTION(wsh, "What kind of weird state are you giving me here?");

        newInnerWindow = wsh->GetInnerWindow();
        mInnerWindowHolder = wsh->GetInnerWindowHolder();

        // These assignments addref.
        mNavigator = wsh->GetNavigator();
        mLocation = wsh->GetLocation();

        if (mNavigator) {
          // Update mNavigator's docshell pointer now.
          mNavigator->SetDocShell(mDocShell);
          mNavigator->LoadingNewDocument();
        }
      } else {
        if (thisChrome) {
          newInnerWindow = new nsGlobalChromeWindow(this);

          flags = nsIXPConnect::FLAG_SYSTEM_GLOBAL_OBJECT;
        } else {
          newInnerWindow = new nsGlobalWindow(this);
        }

        if (newInnerWindow) {
          nsCOMPtr<nsIObserverService> observerService =
            do_GetService("@mozilla.org/observer-service;1", &rv);
          NS_ENSURE_SUCCESS(rv, rv);

          observerService->AddObserver(newInnerWindow, "dom-storage-changed",
                                       PR_TRUE);
        }

        mLocation = nsnull;
      }

      if (!newInnerWindow) {
        return NS_ERROR_OUT_OF_MEMORY;
      }

      if (!aState) {
        // This is redundant if we're restoring from a previous inner window.
        nsIScriptGlobalObject *sgo =
          (nsIScriptGlobalObject *)newInnerWindow.get();

        // Freeze the outer window and null out the inner window so
        // that initializing classes on the new inner doesn't end up
        // reaching into the old inner window for classes etc.
        //
        // [This happens with Object.prototype when XPConnect creates
        // a temporary global while initializing classes; the reason
        // being that xpconnect creates the temp global w/o a parent
        // and proto, which makes the JS engine look up classes in
        // cx->globalObject, i.e. this outer window].

        mInnerWindow = nsnull;

        Freeze();
        mCreatingInnerWindow = PR_TRUE;
        rv = xpc->
          InitClassesWithNewWrappedGlobal(cx, sgo, NS_GET_IID(nsISupports),
                                          flags,
                                          getter_AddRefs(mInnerWindowHolder));
        mCreatingInnerWindow = PR_FALSE;
        Thaw();

        NS_ENSURE_SUCCESS(rv, rv);

        mInnerWindowHolder->GetJSObject(&newInnerWindow->mJSObject);
      }

      if (currentInner && currentInner->mJSObject) {
        if (mNavigator && !aState) {
          // Hold on to the navigator wrapper so that we can set
          // window.navigator in the new window to point to the same
          // object (assuming we didn't change origins etc). See bug
          // 163645 for more on why we need this.

          nsIDOMNavigator* navigator =
            NS_STATIC_CAST(nsIDOMNavigator*, mNavigator.get());
          xpc->WrapNative(cx, currentInner->mJSObject, navigator,
                          NS_GET_IID(nsIDOMNavigator),
                          getter_AddRefs(navigatorHolder));
        }

        PRBool termFuncSet = PR_FALSE;

        if (oldDoc == newDoc) {
          nsCOMPtr<nsIJSContextStack> stack =
            do_GetService(sJSStackContractID);

          JSContext *cx = nsnull;

          if (stack) {
            stack->Peek(&cx);
          }

          nsIScriptContext *callerScx;
          if (cx && (callerScx = GetScriptContextFromJSContext(cx))) {
            // We're called from document.open() (and document.open() is
            // called from JS), clear the scope etc in a termination
            // function on the calling context to prevent clearing the
            // calling scope.
            NS_ASSERTION(!currentInner->IsFrozen(),
                "How does this opened window get into session history");
            callerScx->SetTerminationFunction(ClearWindowScope,
                                              NS_STATIC_CAST(nsIDOMWindow *,
                                                             currentInner));

            termFuncSet = PR_TRUE;
          }
        }

        // Don't clear scope on our current inner window if it's going to be
        // held in the bfcache.
        if (!currentInner->IsFrozen()) {
          if (!termFuncSet) {
            // Clear currentInner->mJSObject and its prototype chain,
            // but not Object.prototype.
            ::JS_ClearScope(cx, currentInner->mJSObject);
            for (JSObject *o = ::JS_GetPrototype(cx, currentInner->mJSObject), *next;
                 o && (next = ::JS_GetPrototype(cx, o)); o = next)
              ::JS_ClearScope(cx, o);
            ::JS_ClearWatchPointsForObject(cx, currentInner->mJSObject);
          }

          // Make the current inner window release its strong references
          // to the document to prevent it from keeping everything
          // around. But remember the document's principal.
          currentInner->mDocument = nsnull;
          currentInner->mDocumentPrincipal = oldPrincipal;
        }
      }

      mInnerWindow = newInnerWindow;
    }

    if (!aState && !reUseInnerWindow) {
      // Loading a new page and creating a new inner window, *not*
      // restoring from session history.

      // InitClassesWithNewWrappedGlobal() for the new inner window
      // sets the global object in cx to be the new wrapped global. We
      // don't want that, but re-initializing the outer window will
      // fix that for us. And perhaps more importantly, this will
      // ensure that the outer window gets a new prototype so we don't
      // leak prototype properties from the old inner window to the
      // new one.

      scx->InitContext(this);

      // *Don't* call JS_ClearScope here since it's unnecessary
      // and it confuses the JS engine as to which Function is
      // on which window. See bug 343966.

      // Make the inner and outer window both share the same
      // prototype. The prototype we share is the outer window's
      // prototype, this way XPConnect can still find the wrapper to
      // use when making a call like alert() (w/o qualifying it with
      // "window."). XPConnect looks up the wrapper based on the
      // function object's parent, which is the object the function
      // was called on, and when calling alert() we'll be calling the
      // alert() function from the outer window's prototype off of the
      // inner window. In this case XPConnect is able to find the
      // outer (through the JSExtendedClass hook outerObject), so this
      // prototype sharing works.

      // We do *not* want to use anything else out of the outer
      // object's prototype chain than the first prototype, which is
      // the XPConnect prototype. The rest we want from the inner
      // window's prototype, i.e. the global scope polluter and
      // Object.prototype. This way the outer also gets the benefits
      // of the global scope polluter, and the inner window's
      // Object.prototype.
      JSObject *proto = ::JS_GetPrototype(cx, mJSObject);
      JSObject *innerProto = ::JS_GetPrototype(cx, newInnerWindow->mJSObject);
      JSObject *innerProtoProto = ::JS_GetPrototype(cx, innerProto);

      ::JS_SetPrototype(cx, newInnerWindow->mJSObject, proto);
      ::JS_SetPrototype(cx, proto, innerProtoProto);
    }

    // Now that the prototype is all set up, install the global scope
    // polluter. This must happen after the above prototype fixup. If
    // the GSP was to be installed on the inner window's real
    // prototype (as it would be if this was done before the prototype
    // fixup above) we would end up holding the GSP alive (through
    // XPConnect's internal marking of wrapper prototypes) as long as
    // the inner window was around, and if the GSP had properties on
    // it that held an element alive we'd hold the document alive,
    // which could hold event handlers alive, which hold the context
    // alive etc.

    if ((!reUseInnerWindow || newDoc != oldDoc) && !aState) {
      nsCOMPtr<nsIHTMLDocument> html_doc(do_QueryInterface(mDocument));
      nsWindowSH::InstallGlobalScopePolluter(cx, newInnerWindow->mJSObject,
                                             html_doc);
    }

    if (aState) {
      // Restoring from session history.

      nsCOMPtr<WindowStateHolder> wsh = do_QueryInterface(aState);
      NS_ASSERTION(wsh, "What kind of weird state are you giving me here?");

      // Restore the prototype for the Window/ChromeWindow class in
      // the outer window scope.
      nsCOMPtr<nsIClassInfo> ci =
        do_QueryInterface((nsIScriptGlobalObject *)this);

      rv = xpc->RestoreWrappedNativePrototype(cx, mJSObject, ci,
                                              wsh->GetOuterProto());
      NS_ENSURE_SUCCESS(rv, rv);

      // Refresh the outer window's prototype to what it was when the
      // window state was saved. This will make the outer window
      // object (and wrapper) pick up the prototype it had when the
      // window state was saved. This means Object.prototype etc from
      // the old inner will again be on the outer window's prototype
      // chain.

      nsCOMPtr<nsIXPConnectWrappedNative> wrapper;
      rv = xpc->GetWrappedNativeOfJSObject(cx, mJSObject,
                                           getter_AddRefs(wrapper));
      NS_ENSURE_SUCCESS(rv, rv);

      rv = wrapper->RefreshPrototype();
      NS_ENSURE_SUCCESS(rv, rv);
    }

    if (newDoc) {
      newDoc->SetScriptGlobalObject(newInnerWindow);
    }

    if (!aState) {
      if (reUseInnerWindow) {
        if (newInnerWindow->mDocument != aDocument) {
          newInnerWindow->mDocument = aDocument;

          // We're reusing the inner window for a new document. In this
          // case we don't clear the inner window's scope, but we must
          // make sure the cached document property gets updated.

          ::JS_DeleteProperty(cx, currentInner->mJSObject, "document");
        }
      } else {
        rv = newInnerWindow->SetNewDocument(aDocument, nsnull,
                                            aRemoveEventListeners,
                                            aClearScopeHint, PR_TRUE);
        NS_ENSURE_SUCCESS(rv, rv);

        // Initialize DOM classes etc on the inner window.
        rv = scx->InitClasses(newInnerWindow->mJSObject);
        NS_ENSURE_SUCCESS(rv, rv);

        if (navigatorHolder) {
          // Restore window.navigator onto the new inner window.
          JSObject *nav;
          navigatorHolder->GetJSObject(&nav);

          ::JS_DefineProperty(cx, newInnerWindow->mJSObject, "navigator",
                              OBJECT_TO_JSVAL(nav), nsnull, nsnull,
                              JSPROP_ENUMERATE);
        }
      }

      if (mArguments) {
        jsval args = OBJECT_TO_JSVAL(mArguments);

        ::JS_SetProperty(cx, newInnerWindow->mJSObject, "arguments",
                         &args);

        ::JS_UnlockGCThing(cx, mArguments);
        mArguments = nsnull;
      }

      // Give the new inner window our chrome event handler (since it
      // doesn't have one).
      newInnerWindow->mChromeEventHandler = mChromeEventHandler;
    }

    // Add an extra ref in case we release mContext during GC.
    nsCOMPtr<nsIScriptContext> kungFuDeathGrip = scx;
    scx->GC();

    scx->DidInitializeContext();
  }

  // Clear our mutation bitfield.
  mMutationBits = 0;

  return NS_OK;
}
virtual void nsPIDOMWindow_MOZILLA_1_8_BRANCH2::SetOpenerScriptPrincipal ( nsIPrincipal aPrincipal) [pure virtual, inherited]
virtual void nsPIDOMWindow::SetOpenerScriptURL ( nsIURI aURI) [pure virtual, inherited]

Implements nsIScriptGlobalObject.

Definition at line 1577 of file nsGlobalWindow.cpp.

{
  SetOpenerWindow(aOpener, PR_TRUE);
}
virtual void nsPIDOMWindow_MOZILLA_1_8_BRANCH::SetOpenerWindow ( nsIDOMWindowInternal aOpener,
PRBool  aOriginalOpener 
) [pure virtual, inherited]

Set the opener window.

aOriginalOpener is true if and only if this is the original opener for the window. That is, it can only be true at most once during the life cycle of a window, and then only the first time SetOpenerWindow is called. It might never be true, of course, if the window does not have an opener when it's created.

void nsGlobalWindow::SetPopupSpamWindow ( PRBool  aPopup) [inline, protected]

Definition at line 348 of file nsGlobalWindow.h.

  {
    if (IsInnerWindow() && !mOuterWindow) {
      NS_ERROR("SetPopupSpamWindow() called on inner window w/o an outer!");

      return;
    }

    GetOuterWindowInternal()->mIsPopupSpam = aPopup;
  }

Here is the call graph for this function:

Here is the caller graph for this function:

void nsIDOMJSWindow::setResizable ( in boolean  resizable) [inherited]
void nsGlobalWindow::SetScriptsEnabled ( PRBool  aEnabled,
PRBool  aFireTimeouts 
) [virtual]

Called to enable/disable scripts.

Implements nsIScriptGlobalObject.

Definition at line 1856 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_INNER_VOID(SetScriptsEnabled, (aEnabled, aFireTimeouts));

  if (aEnabled && aFireTimeouts) {
    // Scripts are enabled (again?) on this context, run timeouts that
    // fired on this context while scripts were disabled.

    RunTimeout(nsnull);
  }
}

Here is the call graph for this function:

These methods take typeless arguments and optional arguments, the first argument is either a function or a string, the second argument must be a number (ms) and the rest of the arguments (2 ...

n) are passed to the callback function

nsresult nsGlobalWindow::SetTimeoutOrInterval ( PRBool  aIsInterval,
PRInt32 aReturn 
) [protected]

Definition at line 6426 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_INNER(SetTimeoutOrInterval, (aIsInterval, aReturn),
                   NS_ERROR_NOT_INITIALIZED);

  nsIScriptContext *scx = GetContextInternal();

  if (!scx) {
    // This window was already closed, or never properly initialized,
    // don't let a timer be scheduled on such a window.

    return NS_ERROR_NOT_INITIALIZED;
  }

  nsCOMPtr<nsIXPCNativeCallContext> ncc;
  nsresult rv = nsContentUtils::XPConnect()->
    GetCurrentNativeCallContext(getter_AddRefs(ncc));
  NS_ENSURE_SUCCESS(rv, rv);

  if (!ncc)
    return NS_ERROR_NOT_AVAILABLE;

  JSContext *cx = nsnull;

  rv = ncc->GetJSContext(&cx);
  NS_ENSURE_SUCCESS(rv, rv);

  PRUint32 argc;
  jsval *argv = nsnull;

  ncc->GetArgc(&argc);
  ncc->GetArgvPtr(&argv);

  JSString *expr = nsnull;
  JSObject *funobj = nsnull;
  nsTimeout *timeout;
  jsdouble interval = 0.0;

  if (argc < 1) {
    ::JS_ReportError(cx, "Function %s requires at least 1 parameter",
                     aIsInterval ? kSetIntervalStr : kSetTimeoutStr);

    return ncc->SetExceptionWasThrown(PR_TRUE);
  }

  if (argc > 1 && !::JS_ValueToNumber(cx, argv[1], &interval)) {
    ::JS_ReportError(cx,
                     "Second argument to %s must be a millisecond interval",
                     aIsInterval ? kSetIntervalStr : kSetTimeoutStr);

    return ncc->SetExceptionWasThrown(PR_TRUE);
  }

  switch (::JS_TypeOfValue(cx, argv[0])) {
  case JSTYPE_FUNCTION:
    funobj = JSVAL_TO_OBJECT(argv[0]);
    break;

  case JSTYPE_STRING:
  case JSTYPE_OBJECT:
    expr = ::JS_ValueToString(cx, argv[0]);
    if (!expr)
      return NS_ERROR_OUT_OF_MEMORY;
    argv[0] = STRING_TO_JSVAL(expr);
    break;

  default:
    ::JS_ReportError(cx, "useless %s call (missing quotes around argument?)",
                     aIsInterval ? kSetIntervalStr : kSetTimeoutStr);

    return ncc->SetExceptionWasThrown(PR_TRUE);
  }

  // If we don't have a document (we could have been unloaded since
  // the call to setTimeout was made), do nothing.
  if (!mDocument) {
    return NS_OK;
  }

  if (interval < DOM_MIN_TIMEOUT_VALUE) {
    // Don't allow timeouts less than DOM_MIN_TIMEOUT_VALUE from
    // now...

    interval = DOM_MIN_TIMEOUT_VALUE;
  }

  // Make sure we don't proceed with a interval larger than our timer
  // code can handle.
  if (interval > PR_IntervalToMilliseconds(DOM_MAX_TIMEOUT_VALUE)) {
    interval = PR_IntervalToMilliseconds(DOM_MAX_TIMEOUT_VALUE);
  }

  timeout = new nsTimeout();
  if (!timeout)
    return NS_ERROR_OUT_OF_MEMORY;

  // Increment the timeout's reference count to represent this function's hold
  // on the timeout.
  timeout->AddRef();

  if (aIsInterval) {
    timeout->mInterval = (PRInt32)interval;
  }

  if (expr) {
    if (!::JS_AddNamedRoot(cx, &timeout->mExpr, "timeout.mExpr")) {
      timeout->Release(scx);

      return NS_ERROR_OUT_OF_MEMORY;
    }

    timeout->mExpr = expr;
  } else if (funobj) {
    // Leave an extra slot for a secret final argument that
    // indicates to the called function how "late" the timeout is.
    timeout->mArgv =
      (jsval *) PR_MALLOC(((argc > 1) ? argc - 1 : 1) * sizeof(jsval));

    if (!timeout->mArgv) {
      timeout->Release(scx);

      return NS_ERROR_OUT_OF_MEMORY;
    }

    if (!::JS_AddNamedRoot(cx, &timeout->mFunObj, "timeout.mFunObj")) {
      timeout->Release(scx);

      return NS_ERROR_FAILURE;
    }

    timeout->mFunObj = funobj;
    timeout->mArgc = 0;

    for (PRInt32 i = 2; (PRUint32)i < argc; ++i) {
      timeout->mArgv[i - 2] = argv[i];

      if (!::JS_AddNamedRoot(cx, &timeout->mArgv[i - 2], "timeout.mArgv[i]")) {
        timeout->Release(scx);

        return NS_ERROR_FAILURE;
      }

      timeout->mArgc++;
    }
  }

  nsCOMPtr<nsIPrincipal> ourPrincipal = GetPrincipal();

  const char *filename;
  if (nsJSUtils::GetCallingLocation(cx, &filename, &timeout->mLineNo,
                                    ourPrincipal)) {
    timeout->mFileName = PL_strdup(filename);

    if (!timeout->mFileName) {
      timeout->Release(scx);

      return NS_ERROR_OUT_OF_MEMORY;
    }
  }

  timeout->mVersion = ::JS_VersionToString(::JS_GetVersion(cx));

  // Get principal of currently executing code, save for execution of timeout.
  // If either our principals subsume the subject principal, or we're from the
  // same origin, then use the subject principal. Otherwise, use our principal
  // to avoid running script in elevated principals.

  nsCOMPtr<nsIPrincipal> subjectPrincipal;
  rv = sSecMan->GetSubjectPrincipal(getter_AddRefs(subjectPrincipal));
  if (NS_FAILED(rv)) {
    timeout->Release(scx);

    return NS_ERROR_FAILURE;
  }

  PRBool subsumes = PR_FALSE;

  // Note the direction of this test: We don't allow chrome setTimeouts on
  // content windows, but we do allow content setTimeouts on chrome windows.
  rv = ourPrincipal->Subsumes(subjectPrincipal, &subsumes);
  if (NS_FAILED(rv)) {
    timeout->Release(scx);

    return NS_ERROR_FAILURE;
  }

  if (subsumes) {
    timeout->mPrincipal = subjectPrincipal;
  } else {
    // Subsumes does a very strict equality test. Allow sites of the same origin
    // to set timeouts on each other.

    rv = sSecMan->CheckSameOriginPrincipal(subjectPrincipal, ourPrincipal);
    timeout->mPrincipal = NS_SUCCEEDED(rv) ? subjectPrincipal : ourPrincipal;
    rv = NS_OK;
  }

  PRTime delta = (PRTime)interval * PR_USEC_PER_MSEC;

  if (!IsFrozen()) {
    // If we're not currently frozen, then we set timeout->mWhen to be the
    // actual firing time of the timer (i.e., now + delta). We also actually
    // create a timer and fire it off.

    timeout->mWhen = PR_Now() + delta;

    timeout->mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
    if (NS_FAILED(rv)) {
      timeout->Release(scx);

      return rv;
    }

    rv = timeout->mTimer->InitWithFuncCallback(TimerCallback, timeout,
                                               (PRInt32)interval,
                                               nsITimer::TYPE_ONE_SHOT);
    if (NS_FAILED(rv)) {
      timeout->Release(scx);

      return rv;
    }

    // The timeout is now also held in the timer's closure.
    timeout->AddRef();
  } else {
    // If we are frozen, however, then we instead simply set timeout->mWhen to
    // be the "time remaining" in the timeout (i.e., the interval itself). We
    // don't create a timer for it, since that will happen when we are thawed
    // and the timeout will then get a timer and run to completion.

    timeout->mWhen = delta;
  }

  timeout->mWindow = this;
  NS_ADDREF(timeout->mWindow);

  // No popups from timeouts by default
  timeout->mPopupState = openAbused;

  if (gRunningTimeoutDepth == 0 && gPopupControlState < openAbused) {
    // This timeout is *not* set from another timeout and it's set
    // while popups are enabled. Propagate the state to the timeout if
    // its delay (interval) is equal to or less than what
    // "dom.disable_open_click_delay" is set to (in ms).

    PRInt32 delay =
      nsContentUtils::GetIntPref("dom.disable_open_click_delay");

    if (interval <= delay) {
      timeout->mPopupState = gPopupControlState;
    }
  }

  InsertTimeoutIntoList(mTimeoutInsertionPoint, timeout);

  timeout->mPublicId = ++mTimeoutPublicIdCounter;
  *aReturn = timeout->mPublicId;

  // Our hold on the timeout is expiring. Note that this should not actually
  // free the timeout (since the list should have taken ownership as well).
  timeout->Release(scx);

  return NS_OK;
}

Here is the call graph for this function:

Definition at line 460 of file nsGlobalWindow.cpp.

Here is the caller graph for this function:

Method for sizing this window to the content in the window.

Definition at line 7536 of file nsGlobalWindow.cpp.

{
  FORWARD_TO_INNER_VOID(SuspendTimeouts, ());

  PRTime now = PR_Now();
  for (nsTimeout *t = mTimeouts; t; t = t->mNext) {
    // Change mWhen to be the time remaining for this timer.    
    if (t->mWhen > now)
      t->mWhen -= now;
    else
      t->mWhen = 0;

    // Drop the XPCOM timer; we'll reschedule when restoring the state.
    if (t->mTimer) {
      t->mTimer->Cancel();
      t->mTimer = nsnull;

      // Drop the reference that the timer's closure had on this timeout, we'll
      // add it back in ResumeTimeouts. Note that it shouldn't matter that we're
      // passing null for the context, since this shouldn't actually release this
      // timeout.
      t->Release(nsnull);
    }
  }

  // Suspend our children as well.
  nsCOMPtr<nsIDocShellTreeNode> node =
    do_QueryInterface(GetDocShellInternal());
  if (node) {
    PRInt32 childCount = 0;
    node->GetChildCount(&childCount);

    for (PRInt32 i = 0; i < childCount; ++i) {
      nsCOMPtr<nsIDocShellTreeItem> childShell;
      node->GetChildAt(i, getter_AddRefs(childShell));
      NS_ASSERTION(childShell, "null child shell");

      nsCOMPtr<nsPIDOMWindow> pWin = do_GetInterface(childShell);
      if (pWin) {
        nsGlobalWindow *win =
          NS_STATIC_CAST(nsGlobalWindow*,
                         NS_STATIC_CAST(nsPIDOMWindow*, pWin));

        win->SuspendTimeouts();

        NS_ASSERTION(win->IsOuterWindow(), "Expected outer window");
        nsGlobalWindow* inner = win->GetCurrentInnerWindowInternal();
        if (inner) {
          inner->Freeze();
        }
      }
    }
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsGlobalWindow::Thaw ( ) [inline, protected]

Definition at line 478 of file nsGlobalWindow.h.

Here is the caller graph for this function:

void nsGlobalWindow::TimerCallback ( nsITimer aTimer,
void aClosure 
) [static, protected]

Definition at line 7216 of file nsGlobalWindow.cpp.

{
  nsTimeout *timeout = (nsTimeout *)aClosure;

  // Hold on to the timeout to ensure it doesn't go away while it's
  // being handled (aka kungFuDeathGrip).
  timeout->AddRef();

  timeout->mWindow->RunTimeout(timeout);

  // Drop our reference to the timeout now that we're done with it.
  timeout->Release(nsnull);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsIDOMWindowInternal::updateCommands ( in DOMString  action) [inherited]
PRBool nsGlobalWindow::WindowExists ( const nsAString &  aName,
PRBool  aLookForCallerOnJSStack 
) [protected]

Definition at line 3164 of file nsGlobalWindow.cpp.

{
  NS_PRECONDITION(IsOuterWindow(), "Must be outer window");
  NS_PRECONDITION(mDocShell, "Must have docshell");

  nsCOMPtr<nsIDocShellTreeItem> caller;
  if (aLookForCallerOnJSStack) {
    caller = GetCallerDocShellTreeItem();
  }

  nsCOMPtr<nsIDocShellTreeItem> docShell = do_QueryInterface(mDocShell);
  NS_ASSERTION(docShell,
               "Docshell doesn't implement nsIDocShellTreeItem?");

  if (!caller) {
    caller = docShell;
  }

  nsCOMPtr<nsIDocShellTreeItem> namedItem;
  docShell->FindItemWithName(PromiseFlatString(aName).get(), nsnull, caller,
                             getter_AddRefs(namedItem));
  return namedItem != nsnull;
}

Here is the call graph for this function:

virtual PRBool nsPIDOMWindow::WouldReuseInnerWindow ( nsIDocument aNewDocument) [pure virtual, inherited]

Here is the caller graph for this function:


Friends And Related Function Documentation

friend class nsDOMScriptableHelper [friend]

Definition at line 566 of file nsGlobalWindow.h.

friend class nsDOMWindowUtils [friend]

Definition at line 567 of file nsGlobalWindow.h.

friend class WindowStateHolder [friend]

Definition at line 319 of file nsGlobalWindow.h.


Member Data Documentation

const nsAString const nsAString PRBool PRBool nsGlobalWindow::aCalledNoScript [protected]

Definition at line 391 of file nsGlobalWindow.h.

Definition at line 391 of file nsGlobalWindow.h.

const nsAString const nsAString PRBool nsGlobalWindow::aDialog [protected]

Definition at line 391 of file nsGlobalWindow.h.

const nsAString const nsAString PRBool PRBool PRBool nsGlobalWindow::aDoJSFixups [protected]

Definition at line 391 of file nsGlobalWindow.h.

const nsAString const nsAString PRBool PRBool PRBool jsval PRUint32 nsISupports* nsGlobalWindow::aExtraArgument [protected]

Definition at line 391 of file nsGlobalWindow.h.

const nsAString& nsGlobalWindow::aName [protected]

Definition at line 391 of file nsGlobalWindow.h.

virtual nsISupports** nsGlobalWindow::aObject

Definition at line 224 of file nsGlobalWindow.h.

const nsAString const nsAString& nsGlobalWindow::aOptions [protected]

Definition at line 391 of file nsGlobalWindow.h.

Definition at line 243 of file nsGlobalWindow.h.

Definition at line 391 of file nsGlobalWindow.h.

const nsAString const nsAString PRBool PRBool PRBool jsval PRUint32 nsGlobalWindow::argc [protected]

Definition at line 391 of file nsGlobalWindow.h.

const nsAString const nsAString PRBool PRBool PRBool jsval* nsGlobalWindow::argv [protected]

Definition at line 391 of file nsGlobalWindow.h.

Definition at line 81 of file nsIDOMWindowInternal.idl.

virtual PRBool aForce nsGlobalWindow::const

Definition at line 231 of file nsGlobalWindow.h.

Definition at line 59 of file nsIDOMWindowInternal.idl.

Definition at line 87 of file nsIDOMWindowInternal.idl.

Definition at line 82 of file nsIDOMWindowInternal.idl.

Definition at line 93 of file nsIDOMWindowInternal.idl.

Definition at line 80 of file nsIDOMWindowInternal.idl.

Definition at line 54 of file nsIDOMAbstractView.idl.

Accessor for the document in this window.

Definition at line 62 of file nsIDOMWindow.idl.

Definition at line 197 of file nsIDOMWindowInternal.idl.

Accessor for the child windows in this window.

Definition at line 91 of file nsIDOMWindow.idl.

window.frames in Netscape 4.x and IE is just a reference to the window itself (i.e.

window.frames === window), but this doesn't make sense from a generic API point of view so that's why this is JS specific.

This property is "replaceable" in JavaScript.

Definition at line 101 of file nsIDOMJSWindow.idl.

Definition at line 119 of file nsIDOMWindowInternal.idl.

Definition at line 542 of file nsGlobalWindow.h.

Global storage, accessible by domain.

Definition at line 62 of file nsIDOMStorageWindow.idl.

Definition at line 56 of file nsIDOMWindowInternal.idl.

Definition at line 101 of file nsIDOMWindowInternal.idl.

Definition at line 100 of file nsIDOMWindowInternal.idl.

readonly attribute unsigned long nsIDOMWindowInternal::length [inherited]

Definition at line 117 of file nsIDOMWindowInternal.idl.

Definition at line 97 of file nsIDOMWindowInternal.idl.

Definition at line 71 of file nsIDOMWindowInternal.idl.

Definition at line 521 of file nsGlobalWindow.h.

Definition at line 318 of file nsPIDOMWindow.h.

Definition at line 518 of file nsGlobalWindow.h.

Definition at line 520 of file nsGlobalWindow.h.

Definition at line 514 of file nsGlobalWindow.h.

Definition at line 539 of file nsGlobalWindow.h.

Definition at line 535 of file nsGlobalWindow.h.

Definition at line 538 of file nsGlobalWindow.h.

Definition at line 319 of file nsPIDOMWindow.h.

Definition at line 557 of file nsGlobalWindow.h.

Definition at line 65 of file nsIDOMWindowInternal.idl.

Definition at line 322 of file nsPIDOMWindow.h.

Definition at line 525 of file nsGlobalWindow.h.

Definition at line 502 of file nsGlobalWindow.h.

Definition at line 537 of file nsGlobalWindow.h.

Definition at line 509 of file nsGlobalWindow.h.

Definition at line 508 of file nsGlobalWindow.h.

Definition at line 524 of file nsGlobalWindow.h.

Definition at line 504 of file nsGlobalWindow.h.

nsPIDOMWindow* nsPIDOMWindow::mInnerWindow [protected, inherited]

Definition at line 334 of file nsPIDOMWindow.h.

Definition at line 544 of file nsGlobalWindow.h.

Definition at line 503 of file nsGlobalWindow.h.

Definition at line 329 of file nsPIDOMWindow.h.

Definition at line 498 of file nsGlobalWindow.h.

Definition at line 330 of file nsPIDOMWindow.h.

Definition at line 331 of file nsPIDOMWindow.h.

Definition at line 510 of file nsGlobalWindow.h.

Definition at line 558 of file nsGlobalWindow.h.

Definition at line 549 of file nsGlobalWindow.h.

Definition at line 533 of file nsGlobalWindow.h.

Definition at line 528 of file nsGlobalWindow.h.

Definition at line 526 of file nsGlobalWindow.h.

Definition at line 516 of file nsGlobalWindow.h.

PRUint32 nsPIDOMWindow::mMutationBits [protected, inherited]

Definition at line 327 of file nsPIDOMWindow.h.

Definition at line 522 of file nsGlobalWindow.h.

Definition at line 519 of file nsGlobalWindow.h.

Definition at line 545 of file nsGlobalWindow.h.

nsPIDOMWindow* nsPIDOMWindow::mOuterWindow [protected, inherited]

Definition at line 335 of file nsPIDOMWindow.h.

Definition at line 560 of file nsGlobalWindow.h.

Definition at line 529 of file nsGlobalWindow.h.

Definition at line 540 of file nsGlobalWindow.h.

nsTimeout* nsPIDOMWindow::mRunningTimeout [protected, inherited]

Definition at line 325 of file nsPIDOMWindow.h.

Definition at line 523 of file nsGlobalWindow.h.

Definition at line 531 of file nsGlobalWindow.h.

Definition at line 554 of file nsGlobalWindow.h.

Definition at line 534 of file nsGlobalWindow.h.

Definition at line 530 of file nsGlobalWindow.h.

Definition at line 553 of file nsGlobalWindow.h.

Definition at line 551 of file nsGlobalWindow.h.

Definition at line 552 of file nsGlobalWindow.h.

Definition at line 550 of file nsGlobalWindow.h.

Definition at line 527 of file nsGlobalWindow.h.

Definition at line 532 of file nsGlobalWindow.h.

attribute DOMString nsIDOMWindow::name [inherited]

Set/Get the name of this window.

This attribute is "replaceable" in JavaScript

Definition at line 98 of file nsIDOMWindow.idl.

Definition at line 54 of file nsIDOMWindowInternal.idl.

PRCList* PRCListStr::next [inherited]

Definition at line 49 of file prclist.h.

Definition at line 89 of file nsIDOMWindowInternal.idl.

Definition at line 103 of file nsIDOMWindowInternal.idl.

Definition at line 102 of file nsIDOMWindowInternal.idl.

Definition at line 108 of file nsIDOMWindowInternal.idl.

Definition at line 109 of file nsIDOMWindowInternal.idl.

Accessor for this window's parent window, or the window itself if there is no parent, or if the parent is of different type (i.e.

this does not cross chrome-content boundaries).

Definition at line 69 of file nsIDOMWindow.idl.

Definition at line 74 of file nsIDOMWindowInternal.idl.

Definition at line 83 of file nsIDOMWindowInternal.idl.

PRCList* PRCListStr::prev [inherited]

Definition at line 50 of file prclist.h.

Definition at line 62 of file nsIDOMWindowInternal.idl.

Definition at line 569 of file nsGlobalWindow.h.

Definition at line 55 of file nsIDOMWindowInternal.idl.

Definition at line 104 of file nsIDOMWindowInternal.idl.

Definition at line 105 of file nsIDOMWindowInternal.idl.

Accessor for the object that controls whether or not scrollbars are shown in this window.

This attribute is "replaceable" in JavaScript

Definition at line 86 of file nsIDOMWindow.idl.

Definition at line 113 of file nsIDOMWindowInternal.idl.

Definition at line 114 of file nsIDOMWindowInternal.idl.

readonly attribute long nsIDOMWindow::scrollX [inherited]

Accessor for the current x scroll position in this window in pixels.

This attribute is "replaceable" in JavaScript

Definition at line 115 of file nsIDOMWindow.idl.

readonly attribute long nsIDOMWindow::scrollY [inherited]

Accessor for the current y scroll position in this window in pixels.

This attribute is "replaceable" in JavaScript

Definition at line 123 of file nsIDOMWindow.idl.

Definition at line 52 of file nsIDOMWindowInternal.idl.

Session storage for the current browsing context.

Definition at line 57 of file nsIDOMStorageWindow.idl.

Definition at line 568 of file nsGlobalWindow.h.

attribute DOMString nsIDOMWindowInternal::status [inherited]

Definition at line 92 of file nsIDOMWindowInternal.idl.

Definition at line 77 of file nsIDOMWindowInternal.idl.

attribute float nsIDOMWindow::textZoom [inherited]

Set/Get the document scale factor as a multiplier on the default size.

When setting this attribute, a NS_ERROR_NOT_IMPLEMENTED error may be returned by implementations not supporting zoom. Implementations not supporting zoom should return 1.0 all the time for the Get operation. 1.0 is equals normal size, i.e. no zoom.

Definition at line 107 of file nsIDOMWindow.idl.

Definition at line 68 of file nsIDOMWindowInternal.idl.

Accessor for the root of this hierarchy of windows.

This root may be the window itself if there is no parent, or if the parent is of different type (i.e. this does not cross chrome-content boundaries).

This property is "replaceable" in JavaScript

Definition at line 78 of file nsIDOMWindow.idl.

Definition at line 49 of file nsIDOMWindowInternal.idl.

Get the window root for this window.

This is useful for hooking up event listeners to this window and every other window nested in the window root.

Definition at line 48 of file nsIDOMWindow2.idl.


The documentation for this class was generated from the following files: