diff --git a/mozilla/browser/base/content/browser.js b/mozilla/browser/base/content/browser.js index 84e28b89795..0386ca9353f 100644 --- a/mozilla/browser/base/content/browser.js +++ b/mozilla/browser/base/content/browser.js @@ -358,6 +358,12 @@ function prepareForStartup() // initialize observers and listeners window.XULBrowserWindow = new nsBrowserStatusHandler(); + window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebNavigation) + .QueryInterface(Components.interfaces.nsIDocShellTreeItem).treeOwner + .QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIXULWindow) + .XULBrowserWindow = window.XULBrowserWindow; window.browserContentListener = new nsBrowserContentListener(window, gBrowser); @@ -621,6 +627,12 @@ function Shutdown() window.XULBrowserWindow.destroy(); window.XULBrowserWindow = null; + window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebNavigation) + .QueryInterface(Components.interfaces.nsIDocShellTreeItem).treeOwner + .QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIXULWindow) + .XULBrowserWindow = null; window.browserContentListener.close(); // Close the app core. diff --git a/mozilla/mail/base/content/mailWindow.js b/mozilla/mail/base/content/mailWindow.js index 23f4399c880..cff9ad4a8a7 100644 --- a/mozilla/mail/base/content/mailWindow.js +++ b/mozilla/mail/base/content/mailWindow.js @@ -129,7 +129,12 @@ function CreateMailWindowGlobals() // set the JS implementation of status feedback before creating the c++ one.. window.MsgStatusFeedback = new nsMsgStatusFeedback(); // double register the status feedback object as the xul browser window implementation - window.XULBrowserWindow = window.MsgStatusFeedback; + window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebNavigation) + .QueryInterface(Components.interfaces.nsIDocShellTreeItem).treeOwner + .QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIXULWindow) + .XULBrowserWindow = window.MsgStatusFeedback; statusFeedback = Components.classes[statusFeedbackContractID].createInstance(); statusFeedback = statusFeedback.QueryInterface(Components.interfaces.nsIMsgStatusFeedback); diff --git a/mozilla/mailnews/base/resources/content/mailWindow.js b/mozilla/mailnews/base/resources/content/mailWindow.js index 1e42cd4328e..e8be7ffb9ac 100644 --- a/mozilla/mailnews/base/resources/content/mailWindow.js +++ b/mozilla/mailnews/base/resources/content/mailWindow.js @@ -148,7 +148,12 @@ function CreateMailWindowGlobals() // set the JS implementation of status feedback before creating the c++ one.. window.MsgStatusFeedback = new nsMsgStatusFeedback(); // double register the status feedback object as the xul browser window implementation - window.XULBrowserWindow = window.MsgStatusFeedback; + window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebNavigation) + .QueryInterface(Components.interfaces.nsIDocShellTreeItem).treeOwner + .QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIXULWindow) + .XULBrowserWindow = window.MsgStatusFeedback; statusFeedback = Components.classes[statusFeedbackContractID].createInstance(); statusFeedback = statusFeedback.QueryInterface(Components.interfaces.nsIMsgStatusFeedback); diff --git a/mozilla/xpfe/appshell/public/nsIXULWindow.idl b/mozilla/xpfe/appshell/public/nsIXULWindow.idl index 768193de187..52300a01405 100644 --- a/mozilla/xpfe/appshell/public/nsIXULWindow.idl +++ b/mozilla/xpfe/appshell/public/nsIXULWindow.idl @@ -45,8 +45,9 @@ interface nsIDocShell; interface nsIDocShellTreeItem; +interface nsIXULBrowserWindow; -[scriptable, uuid(D9CB00E0-CA39-11d3-B029-00A024FFC08C)] +[scriptable, uuid(5d72a699-a252-4161-a45f-e7d35e78b7f3)] interface nsIXULWindow : nsISupports { /** @@ -124,5 +125,7 @@ interface nsIXULWindow : nsISupports @return the newly minted window */ nsIXULWindow createNewWindow(in PRInt32 aChromeFlags); + + attribute nsIXULBrowserWindow XULBrowserWindow; }; diff --git a/mozilla/xpfe/appshell/src/nsContentTreeOwner.cpp b/mozilla/xpfe/appshell/src/nsContentTreeOwner.cpp index ec0e6a2e935..7826b22c7ea 100644 --- a/mozilla/xpfe/appshell/src/nsContentTreeOwner.cpp +++ b/mozilla/xpfe/appshell/src/nsContentTreeOwner.cpp @@ -57,7 +57,6 @@ #include "nsIAuthPrompt.h" #include "nsIWindowMediator.h" #include "nsIXULBrowserWindow.h" -#include "nsPIDOMWindow.h" // Needed for nsIDocument::FlushPendingNotifications(...) #include "nsIDOMDocument.h" @@ -355,15 +354,8 @@ nsContentTreeOwner::GetPersistence(PRBool* aPersistPosition, NS_IMETHODIMP nsContentTreeOwner::SetStatus(PRUint32 aStatusType, const PRUnichar* aStatus) { - nsCOMPtr domWindow; - mXULWindow->GetWindowDOMWindow(getter_AddRefs(domWindow)); - nsCOMPtr piDOMWindow(do_QueryInterface(domWindow)); - if(!piDOMWindow) - return NS_OK; - - nsCOMPtr xpConnectObj; - piDOMWindow->GetObjectProperty(NS_LITERAL_STRING("XULBrowserWindow").get(), getter_AddRefs(xpConnectObj)); - nsCOMPtr xulBrowserWindow(do_QueryInterface(xpConnectObj)); + nsCOMPtr xulBrowserWindow; + mXULWindow->GetXULBrowserWindow(getter_AddRefs(xulBrowserWindow)); if (xulBrowserWindow) { @@ -389,9 +381,11 @@ NS_IMETHODIMP nsContentTreeOwner::SetStatus(PRUint32 aStatusType, const PRUnicha // force the flushing... // // XXXbz no, this is nasty because we're flushing at all! + nsCOMPtr domWindow; nsCOMPtr domDoc; nsCOMPtr doc; + mXULWindow->GetWindowDOMWindow(getter_AddRefs(domWindow)); domWindow->GetDocument(getter_AddRefs(domDoc)); doc = do_QueryInterface(domDoc); diff --git a/mozilla/xpfe/appshell/src/nsXULWindow.cpp b/mozilla/xpfe/appshell/src/nsXULWindow.cpp index 1c8605645a3..7bf00708ccb 100644 --- a/mozilla/xpfe/appshell/src/nsXULWindow.cpp +++ b/mozilla/xpfe/appshell/src/nsXULWindow.cpp @@ -2063,6 +2063,18 @@ void nsXULWindow::PersistentAttributesDirty(PRUint32 aDirtyFlags) { mPersistentAttributesDirty |= aDirtyFlags & mPersistentAttributesMask; } +NS_IMETHODIMP nsXULWindow::GetXULBrowserWindow(nsIXULBrowserWindow * *aXULBrowserWindow) +{ + NS_IF_ADDREF(*aXULBrowserWindow = mXULBrowserWindow); + return NS_OK; +} + +NS_IMETHODIMP nsXULWindow::SetXULBrowserWindow(nsIXULBrowserWindow * aXULBrowserWindow) +{ + mXULBrowserWindow = aXULBrowserWindow; + return NS_OK; +} + //***************************************************************************** // nsXULWindow: Accessors //***************************************************************************** diff --git a/mozilla/xpfe/appshell/src/nsXULWindow.h b/mozilla/xpfe/appshell/src/nsXULWindow.h index dbd4828c5ad..32268252f98 100644 --- a/mozilla/xpfe/appshell/src/nsXULWindow.h +++ b/mozilla/xpfe/appshell/src/nsXULWindow.h @@ -63,6 +63,7 @@ #include "nsIPrompt.h" #include "nsIAuthPrompt.h" #include "nsGUIEvent.h" +#include "nsIXULBrowserWindow.h" // nsXULWindow @@ -140,6 +141,7 @@ protected: nsCOMPtr mParentWindow; nsCOMPtr mPrompter; nsCOMPtr mAuthPrompter; + nsCOMPtr mXULBrowserWindow; nsVoidArray mContentShells; nsresult mModalStatus; PRPackedBool mContinueModalLoop; diff --git a/mozilla/xpfe/browser/resources/content/navigator.js b/mozilla/xpfe/browser/resources/content/navigator.js index e42ea5101a9..3c19626d478 100644 --- a/mozilla/xpfe/browser/resources/content/navigator.js +++ b/mozilla/xpfe/browser/resources/content/navigator.js @@ -474,6 +474,12 @@ function Startup() // initialize observers and listeners window.XULBrowserWindow = new nsBrowserStatusHandler(); + window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebNavigation) + .QueryInterface(Components.interfaces.nsIDocShellTreeItem).treeOwner + .QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIXULWindow) + .XULBrowserWindow = window.XULBrowserWindow; addPrefListener(gButtonPrefListener); addPrefListener(gTabStripPrefListener); @@ -737,6 +743,12 @@ function Shutdown() window.XULBrowserWindow.destroy(); window.XULBrowserWindow = null; + window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebNavigation) + .QueryInterface(Components.interfaces.nsIDocShellTreeItem).treeOwner + .QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIXULWindow) + .XULBrowserWindow = null; BrowserFlushBookmarksAndHistory();