2001-09-25 22:43:09 +00:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* ***** BEGIN LICENSE BLOCK *****
|
|
|
|
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
1998-07-16 01:16:47 +00:00
|
|
|
*
|
2001-09-25 22:43:09 +00:00
|
|
|
* The contents of this file are subject to the Netscape Public License
|
|
|
|
* Version 1.1 (the "License"); you may not use this file except in
|
|
|
|
* compliance with the License. You may obtain a copy of the License at
|
|
|
|
* http://www.mozilla.org/NPL/
|
1998-07-16 01:16:47 +00:00
|
|
|
*
|
2001-09-25 22:43:09 +00:00
|
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
|
|
* for the specific language governing rights and limitations under the
|
|
|
|
* License.
|
1998-07-16 01:16:47 +00:00
|
|
|
*
|
1999-11-06 03:40:37 +00:00
|
|
|
* The Original Code is mozilla.org code.
|
|
|
|
*
|
2001-09-25 22:43:09 +00:00
|
|
|
* The Initial Developer of the Original Code is
|
|
|
|
* Netscape Communications Corporation.
|
|
|
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
|
|
|
* the Initial Developer. All Rights Reserved.
|
1999-11-06 03:40:37 +00:00
|
|
|
*
|
2001-09-25 22:43:09 +00:00
|
|
|
* Contributor(s):
|
2000-02-08 13:40:10 +00:00
|
|
|
* Travis Bogard <travis@netscape.com>
|
2000-08-09 03:30:46 +00:00
|
|
|
* Brendan Eich <brendan@mozilla.org>
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
* David Hyatt (hyatt@netscape.com)
|
2001-04-18 06:06:31 +00:00
|
|
|
* Dan Rosen <dr@netscape.com>
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
* Vidur Apparao <vidur@netscape.com>
|
|
|
|
* Johnny Stenback <jst@netscape.com>
|
2001-09-25 22:43:09 +00:00
|
|
|
*
|
|
|
|
*
|
|
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
|
|
* use your version of this file under the terms of the NPL, indicate your
|
|
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
|
|
* the provisions above, a recipient may use your version of this file under
|
|
|
|
* the terms of any one of the NPL, the GPL or the LGPL.
|
|
|
|
*
|
|
|
|
* ***** END LICENSE BLOCK ***** */
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
// Local Includes
|
1998-07-24 05:05:42 +00:00
|
|
|
#include "nsGlobalWindow.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsScreen.h"
|
|
|
|
#include "nsHistory.h"
|
|
|
|
#include "nsBarProps.h"
|
|
|
|
|
|
|
|
// Helper Classes
|
|
|
|
#include "nsCOMPtr.h"
|
|
|
|
#include "nsXPIDLString.h"
|
|
|
|
#include "nsJSUtils.h"
|
1998-07-16 01:16:47 +00:00
|
|
|
#include "prmem.h"
|
2000-08-22 03:51:17 +00:00
|
|
|
#include "jsdbgapi.h" // for JS_ClearWatchPointsForObject
|
2000-08-23 17:27:06 +00:00
|
|
|
#include "nsReadableUtils.h"
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
#include "nsDOMClassInfo.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
|
|
|
|
// Other Classes
|
2000-12-30 19:22:22 +00:00
|
|
|
#include "nsIEventListenerManager.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsEscape.h"
|
|
|
|
#include "nsStyleCoord.h"
|
|
|
|
#include "nsMimeTypeArray.h"
|
|
|
|
#include "nsNetUtil.h"
|
|
|
|
#include "nsPluginArray.h"
|
2001-04-04 22:09:56 +00:00
|
|
|
#include "nsIPluginHost.h"
|
2001-05-02 22:04:10 +00:00
|
|
|
#include "nsIJVMManager.h"
|
2001-02-22 03:01:34 +00:00
|
|
|
#include "nsContentCID.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
|
|
|
|
// Interfaces Needed
|
2001-10-31 23:43:27 +00:00
|
|
|
#include "nsIWidget.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsIBaseWindow.h"
|
|
|
|
#include "nsICharsetConverterManager.h"
|
2000-02-10 04:56:56 +00:00
|
|
|
#include "nsICodebasePrincipal.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsIContent.h"
|
2002-02-01 14:52:11 +00:00
|
|
|
#include "nsIWebBrowserPrint.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsIContentViewerEdit.h"
|
|
|
|
#include "nsIDocShell.h"
|
2000-03-30 22:38:32 +00:00
|
|
|
#include "nsIDocShellLoadInfo.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsIDocShellTreeItem.h"
|
|
|
|
#include "nsIDocShellTreeNode.h"
|
2001-05-17 02:15:27 +00:00
|
|
|
#include "nsIDocCharset.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsIDocument.h"
|
2000-05-11 19:17:07 +00:00
|
|
|
#include "nsIDOMCrypto.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsIDOMDocument.h"
|
2000-04-26 13:58:56 +00:00
|
|
|
#include "nsIDOMDocumentView.h"
|
2002-02-20 03:33:52 +00:00
|
|
|
#include "nsIDOMElement.h"
|
|
|
|
#include "nsIDOMDocumentEvent.h"
|
|
|
|
#include "nsIDOMEvent.h"
|
2000-05-11 19:17:07 +00:00
|
|
|
#include "nsIDOMPkcs11.h"
|
2002-01-05 02:20:55 +00:00
|
|
|
#include "nsIEmbeddingSiteWindow2.h"
|
1999-10-18 15:06:38 +00:00
|
|
|
#include "nsIEventQueueService.h"
|
2000-04-24 04:41:27 +00:00
|
|
|
#include "nsIEventStateManager.h"
|
2001-05-11 21:05:08 +00:00
|
|
|
#include "nsIHttpProtocolHandler.h"
|
2000-03-31 03:33:49 +00:00
|
|
|
#include "nsIJSContextStack.h"
|
2000-10-15 23:23:12 +00:00
|
|
|
#include "nsIJSRuntimeService.h"
|
2000-02-08 22:45:45 +00:00
|
|
|
#include "nsIMarkupDocumentViewer.h"
|
2000-03-29 09:48:41 +00:00
|
|
|
#include "nsIPref.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsIPresShell.h"
|
1998-07-24 05:05:42 +00:00
|
|
|
#include "nsIPrivateDOMEvent.h"
|
2001-08-31 04:06:39 +00:00
|
|
|
#include "nsIProgrammingLanguage.h"
|
2001-04-10 18:30:25 +00:00
|
|
|
#include "nsIAuthPrompt.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsIServiceManager.h"
|
|
|
|
#include "nsIScriptGlobalObjectOwner.h"
|
1999-07-07 07:50:03 +00:00
|
|
|
#include "nsIScriptSecurityManager.h"
|
2001-01-27 16:58:15 +00:00
|
|
|
#include "nsIScrollableView.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsISelectionController.h"
|
2000-09-14 11:45:01 +00:00
|
|
|
#include "nsISelection.h"
|
2000-04-28 14:02:29 +00:00
|
|
|
#include "nsIFrameSelection.h"
|
2000-08-22 03:51:17 +00:00
|
|
|
#include "nsISidebar.h" // XXX for sidebar HACK, see bug 20721
|
2000-08-07 20:55:36 +00:00
|
|
|
#include "nsIPrompt.h"
|
2000-04-24 04:41:27 +00:00
|
|
|
#include "nsIStyleContext.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsIWebNavigation.h"
|
|
|
|
#include "nsIWebBrowser.h"
|
|
|
|
#include "nsIWebBrowserChrome.h"
|
2001-09-30 19:56:32 +00:00
|
|
|
#include "nsIWebBrowserFind.h" // For window.find()
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsIWebShell.h"
|
2001-09-30 19:56:32 +00:00
|
|
|
#include "nsIWindowMediator.h" // For window.find()
|
2000-05-17 06:38:43 +00:00
|
|
|
#include "nsIComputedDOMStyle.h"
|
2000-10-30 23:33:34 +00:00
|
|
|
#include "nsIEntropyCollector.h"
|
2000-05-11 19:17:07 +00:00
|
|
|
#include "nsDOMCID.h"
|
2000-05-03 13:03:17 +00:00
|
|
|
#include "nsDOMError.h"
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
#include "nsIWindowWatcher.h"
|
2001-02-17 02:46:48 +00:00
|
|
|
#include "nsPIWindowWatcher.h"
|
2001-07-16 02:40:48 +00:00
|
|
|
#include "nsIContentViewer.h"
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
#include "nsISupportsPrimitives.h"
|
|
|
|
#include "nsDOMClassInfo.h"
|
|
|
|
#include "nsIJSNativeInitializer.h"
|
2002-02-20 03:33:52 +00:00
|
|
|
#include "nsIFullScreen.h"
|
2002-03-20 11:23:13 +00:00
|
|
|
#include "nsIStringBundle.h"
|
2002-01-12 12:37:31 +00:00
|
|
|
|
2002-02-06 04:37:26 +00:00
|
|
|
#include "plbase64.h"
|
|
|
|
|
2002-01-15 01:11:16 +00:00
|
|
|
#include "nsIPrintSettings.h"
|
1999-04-20 19:41:17 +00:00
|
|
|
|
2000-11-04 08:21:20 +00:00
|
|
|
#include "nsWindowRoot.h"
|
|
|
|
|
2000-09-22 05:02:20 +00:00
|
|
|
// XXX An unfortunate dependency exists here (two XUL files).
|
2000-02-11 00:57:54 +00:00
|
|
|
#include "nsIDOMXULDocument.h"
|
|
|
|
#include "nsIDOMXULCommandDispatcher.h"
|
2000-09-22 05:02:20 +00:00
|
|
|
|
2000-09-08 06:59:14 +00:00
|
|
|
#include "nsIBindingManager.h"
|
2000-09-22 05:02:20 +00:00
|
|
|
#include "nsIXBLService.h"
|
|
|
|
|
2000-02-11 00:57:54 +00:00
|
|
|
|
2002-06-19 00:42:23 +00:00
|
|
|
#define DOM_MIN_TIMEOUT_VALUE 10 // 10ms
|
|
|
|
|
|
|
|
|
2002-05-17 22:24:06 +00:00
|
|
|
static nsIEntropyCollector* gEntropyCollector = nsnull;
|
|
|
|
static PRInt32 gRefCnt = 0;
|
|
|
|
nsIXPConnect *GlobalWindowImpl::sXPConnect = nsnull;
|
|
|
|
nsIScriptSecurityManager *GlobalWindowImpl::sSecMan = nsnull;
|
2000-10-30 23:33:34 +00:00
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
// CIDs
|
1999-10-18 15:06:38 +00:00
|
|
|
static NS_DEFINE_IID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
|
1999-04-28 20:33:43 +00:00
|
|
|
static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID);
|
2001-05-02 22:04:10 +00:00
|
|
|
static NS_DEFINE_CID(kJVMServiceCID, NS_JVMMANAGER_CID);
|
2001-05-11 21:05:08 +00:00
|
|
|
static NS_DEFINE_CID(kHTTPHandlerCID, NS_HTTPPROTOCOLHANDLER_CID);
|
2000-02-08 13:40:10 +00:00
|
|
|
static NS_DEFINE_CID(kXULControllersCID, NS_XULCONTROLLERS_CID);
|
2000-08-22 03:51:17 +00:00
|
|
|
static NS_DEFINE_CID(kCharsetConverterManagerCID,
|
|
|
|
NS_ICHARSETCONVERTERMANAGER_CID);
|
2000-05-11 19:17:07 +00:00
|
|
|
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
2001-09-30 19:56:32 +00:00
|
|
|
static NS_DEFINE_CID(kWindowMediatorCID, NS_WINDOWMEDIATOR_CID); // For window.find()
|
2002-03-20 11:23:13 +00:00
|
|
|
static NS_DEFINE_CID(kCStringBundleServiceCID, NS_STRINGBUNDLESERVICE_CID);
|
|
|
|
|
2001-06-20 01:25:09 +00:00
|
|
|
static const char *sWindowWatcherContractID = "@mozilla.org/embedcomp/window-watcher;1";
|
|
|
|
static const char *sJSStackContractID = "@mozilla.org/js/xpc/ContextStack;1";
|
2002-02-26 05:28:26 +00:00
|
|
|
|
2002-03-20 11:23:13 +00:00
|
|
|
static const char *kDOMBundleURL = "chrome://global/locale/commonDialogs.properties";
|
|
|
|
|
|
|
|
|
2000-05-11 19:17:07 +00:00
|
|
|
|
2001-04-04 23:48:03 +00:00
|
|
|
static const char * const kCryptoContractID = NS_CRYPTO_CONTRACTID;
|
|
|
|
static const char * const kPkcs11ContractID = NS_PKCS11_CONTRACTID;
|
1999-10-14 10:58:25 +00:00
|
|
|
|
2002-04-12 10:11:00 +00:00
|
|
|
static PRBool CanSetProperty(const char * prefName)
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefServiceCID));
|
|
|
|
if (!prefs) {
|
|
|
|
return PR_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
PRBool prefValue = PR_TRUE;
|
|
|
|
// if pref is set to true, we can't set the property
|
|
|
|
prefs->GetBoolPref(prefName, &prefValue);
|
|
|
|
|
|
|
|
return !prefValue;
|
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
//*** GlobalWindowImpl: Object Management
|
|
|
|
//*****************************************************************************
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
GlobalWindowImpl::GlobalWindowImpl() :
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
mJSObject(nsnull), mNavigator(nsnull), mScreen(nsnull), mHistory(nsnull),
|
|
|
|
mFrames(nsnull), mLocation(nsnull), mMenubar(nsnull), mToolbar(nsnull),
|
|
|
|
mLocationbar(nsnull), mPersonalbar(nsnull), mStatusbar(nsnull),
|
|
|
|
mScrollbars(nsnull), mTimeouts(nsnull), mTimeoutInsertionPoint(&mTimeouts),
|
|
|
|
mRunningTimeout(nsnull), mTimeoutPublicIdCounter(1), mTimeoutFiringDepth(0),
|
2001-08-15 05:35:02 +00:00
|
|
|
mTimeoutsWereCleared(PR_FALSE), mFirstDocumentLoad(PR_TRUE),
|
2002-03-08 21:48:28 +00:00
|
|
|
mIsScopeClear(PR_TRUE), mIsDocumentLoaded(PR_FALSE),
|
|
|
|
mLastMouseButtonAction(LL_ZERO), mFullScreen(PR_FALSE),
|
|
|
|
mOriginalPos(nsnull), mOriginalSize(nsnull),
|
2002-02-20 03:33:52 +00:00
|
|
|
mGlobalObjectOwner(nsnull),
|
2002-04-17 04:17:16 +00:00
|
|
|
mDocShell(nsnull), mMutationBits(0), mChromeEventHandler(nsnull),
|
|
|
|
mFrameElement(nsnull)
|
1999-12-17 00:50:17 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_INIT_REFCNT();
|
2001-05-18 00:02:52 +00:00
|
|
|
// 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) {
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsCOMPtr<nsIEntropyCollector> enCol =
|
|
|
|
do_GetService(NS_ENTROPYCOLLECTOR_CONTRACTID);
|
|
|
|
|
2000-10-30 23:33:34 +00:00
|
|
|
if (enCol) {
|
|
|
|
gEntropyCollector = enCol;
|
|
|
|
NS_ADDREF(gEntropyCollector);
|
|
|
|
}
|
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
|
|
|
if (!sXPConnect) {
|
|
|
|
nsServiceManager::GetService(nsIXPConnect::GetCID(),
|
|
|
|
nsIXPConnect::GetIID(),
|
|
|
|
(nsISupports **)&sXPConnect);
|
|
|
|
}
|
2002-05-17 22:24:06 +00:00
|
|
|
|
|
|
|
if (!sSecMan) {
|
|
|
|
nsServiceManager::GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID,
|
|
|
|
NS_GET_IID(nsIScriptSecurityManager),
|
|
|
|
(nsISupports **)&sSecMan);
|
|
|
|
}
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
GlobalWindowImpl::~GlobalWindowImpl()
|
|
|
|
{
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (!--gRefCnt) {
|
|
|
|
NS_IF_RELEASE(gEntropyCollector);
|
|
|
|
}
|
|
|
|
|
|
|
|
mDocument = nsnull; // Forces Release
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
CleanUp();
|
1999-12-17 00:50:17 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
// static
|
|
|
|
void
|
|
|
|
GlobalWindowImpl::ShutDown()
|
|
|
|
{
|
|
|
|
NS_IF_RELEASE(sXPConnect);
|
2002-05-17 22:24:06 +00:00
|
|
|
NS_IF_RELEASE(sSecMan);
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
|
|
|
#ifdef DEBUG_jst
|
|
|
|
printf ("---- Leaked %d GlobalWindowImpl's\n", gRefCnt);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
void GlobalWindowImpl::CleanUp()
|
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IF_RELEASE(mNavigator);
|
|
|
|
NS_IF_RELEASE(mScreen);
|
|
|
|
NS_IF_RELEASE(mHistory);
|
|
|
|
NS_IF_RELEASE(mMenubar);
|
|
|
|
NS_IF_RELEASE(mToolbar);
|
|
|
|
NS_IF_RELEASE(mLocationbar);
|
|
|
|
NS_IF_RELEASE(mPersonalbar);
|
|
|
|
NS_IF_RELEASE(mStatusbar);
|
|
|
|
NS_IF_RELEASE(mScrollbars);
|
|
|
|
NS_IF_RELEASE(mLocation);
|
|
|
|
NS_IF_RELEASE(mFrames);
|
|
|
|
mOpener = nsnull; // Forces Release
|
2001-02-17 19:02:25 +00:00
|
|
|
mControllers = nsnull; // Forces Release
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
mContext = nsnull; // Forces Release
|
2001-06-26 21:29:08 +00:00
|
|
|
mChromeEventHandler = nsnull; // Forces Release
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl::nsISupports
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
2000-02-08 13:40:10 +00:00
|
|
|
|
1998-07-16 01:16:47 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
// QueryInterface implementation for GlobalWindowImpl
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_INTERFACE_MAP_BEGIN(GlobalWindowImpl)
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIScriptGlobalObject)
|
2000-09-01 01:54:35 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIDOMWindowInternal)
|
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIDOMWindow)
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIDOMJSWindow)
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIScriptGlobalObject)
|
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectPrincipal)
|
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIDOMEventReceiver)
|
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIDOMEventTarget)
|
|
|
|
NS_INTERFACE_MAP_ENTRY(nsPIDOMWindow)
|
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIDOMViewCSS)
|
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIDOMAbstractView)
|
|
|
|
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
|
2001-05-17 02:15:27 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor)
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Window)
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_INTERFACE_MAP_END
|
1998-07-16 01:16:47 +00:00
|
|
|
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMPL_ADDREF(GlobalWindowImpl)
|
|
|
|
NS_IMPL_RELEASE(GlobalWindowImpl)
|
|
|
|
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl::nsIScriptGlobalObject
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetContext(nsIScriptContext* aContext)
|
1999-05-14 03:10:51 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
// 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");
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
} else {
|
|
|
|
JSContext *cx = (JSContext *)aContext->GetNativeContext();
|
|
|
|
|
|
|
|
mJSObject = ::JS_GetGlobalObject(cx);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
mContext = aContext;
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
2001-10-19 04:13:37 +00:00
|
|
|
if (mContext) {
|
2001-10-31 23:52:52 +00:00
|
|
|
nsCOMPtr<nsIDOMWindowInternal> parent;
|
|
|
|
GetParentInternal(getter_AddRefs(parent));
|
2001-10-19 04:13:37 +00:00
|
|
|
|
2001-10-31 23:52:52 +00:00
|
|
|
if (parent) {
|
2001-10-19 04:13:37 +00:00
|
|
|
// 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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1999-05-14 03:10:51 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetContext(nsIScriptContext ** aContext)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
*aContext = mContext;
|
|
|
|
NS_IF_ADDREF(*aContext);
|
|
|
|
return NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1999-07-27 20:51:39 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetNewDocument(nsIDOMDocument* aDocument,
|
|
|
|
PRBool removeEventListeners)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-09-20 23:38:28 +00:00
|
|
|
if (!aDocument) {
|
|
|
|
if (mDocument) {
|
|
|
|
// Cache the old principal now that the document is being removed.
|
|
|
|
nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
|
|
|
|
NS_ENSURE_TRUE(doc, NS_ERROR_FAILURE);
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
doc->GetPrincipal(getter_AddRefs(mDocumentPrincipal));
|
2000-09-20 23:38:28 +00:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// let go of the old cached principal
|
|
|
|
mDocumentPrincipal = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-08-09 03:30:46 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// 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.
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (mContext && mJSObject)
|
|
|
|
::JS_ClearWatchPointsForObject((JSContext *)mContext->GetNativeContext(),
|
|
|
|
mJSObject);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2002-06-27 01:27:00 +00:00
|
|
|
// Release the navigator object so that it will be recreated for the
|
|
|
|
// new document The plugins or mime types array may have
|
|
|
|
// changed. See bug 150087
|
|
|
|
if (mNavigator) {
|
|
|
|
mNavigator->SetDocShell(nsnull);
|
|
|
|
|
|
|
|
NS_RELEASE(mNavigator);
|
|
|
|
}
|
2002-06-21 19:34:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (mFirstDocumentLoad) {
|
2000-09-22 05:02:20 +00:00
|
|
|
if (aDocument) {
|
2000-09-14 06:18:09 +00:00
|
|
|
mFirstDocumentLoad = PR_FALSE;
|
2000-09-22 05:02:20 +00:00
|
|
|
}
|
2000-09-14 06:18:09 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
mDocument = aDocument;
|
2000-09-22 05:02:20 +00:00
|
|
|
|
|
|
|
if (mDocument) {
|
|
|
|
// Get our private root. If it is equal to us, then we
|
2002-02-09 03:36:55 +00:00
|
|
|
// need to attach our global key bindings that handle
|
2000-09-22 05:02:20 +00:00
|
|
|
// browser scrolling and other browser commands.
|
|
|
|
nsCOMPtr<nsIDOMWindowInternal> internal;
|
|
|
|
GetPrivateRoot(getter_AddRefs(internal));
|
2000-11-04 08:21:20 +00:00
|
|
|
nsCOMPtr<nsIDOMWindowInternal> us(do_QueryInterface(NS_STATIC_CAST(nsIDOMWindow*,this)));
|
2000-09-22 05:02:20 +00:00
|
|
|
if (internal == us) {
|
|
|
|
nsresult rv;
|
2002-02-09 03:36:55 +00:00
|
|
|
nsCOMPtr<nsIXBLService> xblService =
|
2001-07-25 07:54:28 +00:00
|
|
|
do_GetService("@mozilla.org/xbl;1", &rv);
|
2000-09-22 05:02:20 +00:00
|
|
|
if (xblService) {
|
2000-11-04 08:21:20 +00:00
|
|
|
nsCOMPtr<nsIDOMEventReceiver> rec(do_QueryInterface(mChromeEventHandler));
|
2000-09-22 05:02:20 +00:00
|
|
|
xblService->AttachGlobalKeyHandler(rec);
|
2002-02-09 03:36:55 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
// 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)
|
2001-01-23 00:41:54 +00:00
|
|
|
//xblService->AttachGlobalDragHandler(rec);
|
2000-09-22 05:02:20 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
|
|
|
}
|
2000-08-09 03:30:46 +00:00
|
|
|
|
2000-10-06 00:22:56 +00:00
|
|
|
/* No mDocShell means we've 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.) */
|
2000-12-03 01:21:54 +00:00
|
|
|
/* We only want to do this when we're setting a new document rather
|
|
|
|
than going away. See bug 61840. */
|
|
|
|
if (mDocShell && aDocument) {
|
2000-10-06 00:22:56 +00:00
|
|
|
SetStatus(nsString());
|
|
|
|
SetDefaultStatus(nsString());
|
|
|
|
}
|
2000-08-29 02:04:44 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (mDocument) {
|
|
|
|
nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
|
|
|
|
nsCOMPtr<nsIURI> docURL;
|
2000-08-09 03:30:46 +00:00
|
|
|
|
2001-07-13 01:30:44 +00:00
|
|
|
// If we had a document in this window the document most likely
|
|
|
|
// made our scope "unclear"
|
|
|
|
|
|
|
|
mIsScopeClear = PR_FALSE;
|
2001-07-11 09:09:30 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (doc) {
|
2001-06-20 03:27:48 +00:00
|
|
|
doc->GetDocumentURL(getter_AddRefs(docURL));
|
2000-08-22 03:51:17 +00:00
|
|
|
doc = nsnull; // Forces release now
|
|
|
|
}
|
2000-08-09 03:30:46 +00:00
|
|
|
|
2001-10-02 00:54:44 +00:00
|
|
|
if (removeEventListeners && mListenerManager) {
|
2001-10-01 02:08:30 +00:00
|
|
|
mListenerManager->RemoveAllListeners(PR_FALSE);
|
|
|
|
mListenerManager = nsnull;
|
|
|
|
}
|
|
|
|
|
2001-07-12 03:13:28 +00:00
|
|
|
if (docURL) {
|
2002-03-06 07:48:55 +00:00
|
|
|
nsCAutoString url;
|
2001-07-13 01:30:44 +00:00
|
|
|
|
2002-03-06 07:48:55 +00:00
|
|
|
docURL->GetSpec(url);
|
2000-08-09 03:30:46 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
//about:blank URL's do not have ClearScope called on page change.
|
2002-03-06 07:48:55 +00:00
|
|
|
if (strcmp(url.get(), "about:blank") != 0) {
|
2000-08-22 03:51:17 +00:00
|
|
|
ClearAllTimeouts();
|
2000-08-09 03:30:46 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (mSidebar) {
|
|
|
|
mSidebar->SetWindow(nsnull);
|
|
|
|
mSidebar = nsnull;
|
2000-08-09 03:30:46 +00:00
|
|
|
}
|
1998-07-16 01:16:47 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (mContext && mJSObject) {
|
|
|
|
// if (mContext && mJSObject && aDocument) {
|
2000-08-26 23:35:50 +00:00
|
|
|
// not doing this unless there's a new document prevents a closed window's
|
|
|
|
// JS properties from going away (that's good) and causes everything,
|
|
|
|
// and I mean everything, to be leaked (that's bad)
|
2002-04-27 00:03:47 +00:00
|
|
|
|
|
|
|
::JS_ClearScope((JSContext *)mContext->GetNativeContext(),
|
|
|
|
mJSObject);
|
2001-07-13 01:30:44 +00:00
|
|
|
|
|
|
|
mIsScopeClear = PR_TRUE;
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
2000-08-09 03:30:46 +00:00
|
|
|
}
|
1999-06-15 03:17:11 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
//XXX Should this be outside the about:blank clearscope exception?
|
|
|
|
mDocument = nsnull; // Forces Release
|
|
|
|
}
|
|
|
|
|
2001-05-23 00:15:54 +00:00
|
|
|
if (mContext && aDocument) {
|
2000-08-22 03:51:17 +00:00
|
|
|
// Add an extra ref in case we release mContext during GC.
|
|
|
|
nsCOMPtr<nsIScriptContext> kungFuDeathGrip = mContext;
|
|
|
|
kungFuDeathGrip->GC();
|
|
|
|
}
|
1999-11-16 23:11:50 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
mDocument = aDocument;
|
1999-05-27 21:06:51 +00:00
|
|
|
|
2002-04-27 00:03:47 +00:00
|
|
|
if (mDocument && mContext) {
|
|
|
|
if (mIsScopeClear) {
|
|
|
|
mContext->InitContext(this);
|
|
|
|
} else if (mJSObject) {
|
|
|
|
// If we didn't clear the scope (i.e. the old document was
|
|
|
|
// about:blank) then we need to update the cached document
|
|
|
|
// property on the window to reflect the new document and not
|
|
|
|
// the old one.
|
|
|
|
|
|
|
|
JSContext *cx = (JSContext *)mContext->GetNativeContext();
|
|
|
|
|
|
|
|
nsWindowSH::CacheDocumentProperty(cx, mJSObject, this);
|
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2000-11-27 07:55:20 +00:00
|
|
|
// Clear our mutation bitfield.
|
|
|
|
mMutationBits = 0;
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1999-06-09 19:04:18 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetDocShell(nsIDocShell* aDocShell)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-09-22 05:02:20 +00:00
|
|
|
if (aDocShell == mDocShell)
|
|
|
|
return NS_OK;
|
|
|
|
|
2000-08-26 23:35:50 +00:00
|
|
|
/* SetDocShell(nsnull) means the window is being torn down. Set the
|
|
|
|
"closed" JS property, Drop our reference to the script context,
|
|
|
|
allowing it to be deleted later, and hand off our reference
|
|
|
|
to the script object (held via a named JS root) to the context
|
|
|
|
so it will be unrooted later. Meanwhile, keep our weak reference
|
|
|
|
to the script object so it can be retrieved later, as the JS glue
|
|
|
|
is wont to do. */
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!aDocShell && mContext) {
|
2000-10-15 23:23:12 +00:00
|
|
|
ClearAllTimeouts();
|
2001-08-15 05:35:02 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (mJSObject) {
|
2000-08-22 03:51:17 +00:00
|
|
|
// Indicate that the window is now closed. Since we've
|
|
|
|
// cleared scope, we have to explicitly set a property.
|
|
|
|
jsval val = BOOLEAN_TO_JSVAL(JS_TRUE);
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
::JS_SetProperty((JSContext *)mContext->GetNativeContext(),
|
|
|
|
mJSObject, "closed", &val);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
2002-02-20 03:33:52 +00:00
|
|
|
// if we are closing the window while in full screen mode,
|
|
|
|
// be sure to restore os chrome
|
|
|
|
if (mFullScreen) {
|
|
|
|
nsCOMPtr<nsIFocusController> focusController;
|
|
|
|
GetRootFocusController(getter_AddRefs(focusController));
|
|
|
|
PRBool isActive = PR_FALSE;
|
|
|
|
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();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
mContext = nsnull; // force release now
|
2001-02-17 19:02:25 +00:00
|
|
|
mControllers = nsnull; // force release now
|
2001-06-26 21:29:08 +00:00
|
|
|
mChromeEventHandler = nsnull; // force release now
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
mDocShell = aDocShell; // Weak Reference
|
|
|
|
|
|
|
|
if (mLocation)
|
|
|
|
mLocation->SetDocShell(aDocShell);
|
2001-01-23 22:29:41 +00:00
|
|
|
if (mNavigator)
|
|
|
|
mNavigator->SetDocShell(aDocShell);
|
2000-08-22 03:51:17 +00:00
|
|
|
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.
|
2000-11-04 08:21:20 +00:00
|
|
|
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));
|
|
|
|
nsCOMPtr<nsIChromeEventHandler> handler;
|
|
|
|
piWindow->GetChromeEventHandler(getter_AddRefs(mChromeEventHandler));
|
|
|
|
}
|
|
|
|
else NS_NewWindowRoot(this, getter_AddRefs(mChromeEventHandler));
|
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-08-07 04:45:03 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetDocShell(nsIDocShell ** aDocShell)
|
1999-02-10 16:25:11 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
*aDocShell = mDocShell;
|
|
|
|
NS_IF_ADDREF(*aDocShell);
|
|
|
|
return NS_OK;
|
1999-02-10 16:25:11 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetOpenerWindow(nsIDOMWindowInternal* aOpener)
|
1998-09-03 01:19:58 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
mOpener = aOpener;
|
|
|
|
return NS_OK;
|
1999-12-03 09:24:22 +00:00
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetGlobalObjectOwner(nsIScriptGlobalObjectOwner* aOwner)
|
1999-12-03 09:24:22 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
mGlobalObjectOwner = aOwner; // Note this is supposed to be a weak ref.
|
|
|
|
return NS_OK;
|
1999-12-03 09:24:22 +00:00
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetGlobalObjectOwner(nsIScriptGlobalObjectOwner ** aOwner)
|
1999-12-03 09:24:22 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_ARG_POINTER(aOwner);
|
1999-12-03 09:24:22 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aOwner = mGlobalObjectOwner;
|
|
|
|
NS_IF_ADDREF(*aOwner);
|
|
|
|
return NS_OK;
|
1998-09-03 01:19:58 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::HandleDOMEvent(nsIPresContext* aPresContext,
|
|
|
|
nsEvent* aEvent,
|
|
|
|
nsIDOMEvent** aDOMEvent,
|
|
|
|
PRUint32 aFlags,
|
|
|
|
nsEventStatus* aEventStatus)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult ret = NS_OK;
|
2001-04-17 05:52:11 +00:00
|
|
|
PRBool externalDOMEvent = PR_FALSE;
|
2000-08-22 03:51:17 +00:00
|
|
|
nsIDOMEvent *domEvent = nsnull;
|
2001-05-18 00:02:52 +00:00
|
|
|
static PRUint32 count = 0;
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
/* mChromeEventHandler and mContext go dangling in the middle of this
|
2000-02-08 13:40:10 +00:00
|
|
|
function under some circumstances (events that destroy the window)
|
|
|
|
without this addref. */
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIChromeEventHandler> kungFuDeathGrip1(mChromeEventHandler);
|
|
|
|
nsCOMPtr<nsIScriptContext> kungFuDeathGrip2(mContext);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
/* If this is a mouse event, use the struct to provide entropy for
|
2000-10-30 23:33:34 +00:00
|
|
|
* the system.
|
|
|
|
*/
|
2002-02-09 03:36:55 +00:00
|
|
|
if (gEntropyCollector &&
|
|
|
|
(NS_EVENT_FLAG_BUBBLE != aFlags) &&
|
2001-05-18 00:02:52 +00:00
|
|
|
(aEvent->message == NS_MOUSE_MOVE)) {
|
|
|
|
//I'd like to not come in here if there is a mChromeEventHandler
|
2002-02-09 03:36:55 +00:00
|
|
|
//present, but there is always one when the message is
|
2001-05-18 00:02:52 +00:00
|
|
|
//NS_MOUSE_MOVE.
|
|
|
|
//
|
|
|
|
//Chances are this counter will overflow during the life of the
|
2002-02-09 03:36:55 +00:00
|
|
|
//process, but that's OK for our case. Means we get a little
|
2001-05-18 00:02:52 +00:00
|
|
|
//more entropy.
|
|
|
|
if (count++ % 100 == 0) {
|
2002-02-09 03:36:55 +00:00
|
|
|
//Since the high bits seem to be zero's most of the time,
|
2001-05-18 00:02:52 +00:00
|
|
|
//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));
|
|
|
|
}
|
2000-10-30 23:33:34 +00:00
|
|
|
}
|
|
|
|
|
2002-02-20 03:33:52 +00:00
|
|
|
// if the window is deactivated while in full screen mode,
|
|
|
|
// restore OS chrome, and hide it again upon re-activation
|
|
|
|
if (mFullScreen && (NS_EVENT_FLAG_CAPTURE != 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();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (NS_EVENT_FLAG_INIT & aFlags) {
|
2001-04-17 05:52:11 +00:00
|
|
|
if (aDOMEvent) {
|
|
|
|
if (*aDOMEvent) {
|
2002-02-09 03:36:55 +00:00
|
|
|
externalDOMEvent = PR_TRUE;
|
2001-04-17 05:52:11 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
2000-08-22 03:51:17 +00:00
|
|
|
aDOMEvent = &domEvent;
|
|
|
|
}
|
2002-04-20 01:48:32 +00:00
|
|
|
aEvent->flags = aFlags;
|
2000-08-22 03:51:17 +00:00
|
|
|
aFlags &= ~(NS_EVENT_FLAG_CANT_BUBBLE | NS_EVENT_FLAG_CANT_CANCEL);
|
2000-09-08 06:59:14 +00:00
|
|
|
|
|
|
|
// Execute bindingdetached handlers before we tear ourselves
|
|
|
|
// down.
|
2002-04-20 01:48:32 +00:00
|
|
|
if (aEvent->message == NS_PAGE_UNLOAD && mDocument) {
|
2000-09-08 06:59:14 +00:00
|
|
|
nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
|
|
|
|
nsCOMPtr<nsIBindingManager> bindingManager;
|
|
|
|
doc->GetBindingManager(getter_AddRefs(bindingManager));
|
|
|
|
if (bindingManager)
|
|
|
|
bindingManager->ExecuteDetachedHandlers();
|
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2001-08-31 04:06:39 +00:00
|
|
|
if (aEvent->message == NS_PAGE_UNLOAD) {
|
|
|
|
mIsDocumentLoaded = PR_FALSE;
|
2002-03-08 21:48:28 +00:00
|
|
|
} else if ((aEvent->message >= NS_MOUSE_LEFT_BUTTON_UP &&
|
|
|
|
aEvent->message <= NS_MOUSE_RIGHT_BUTTON_DOWN) ||
|
|
|
|
(aEvent->message >= NS_MOUSE_LEFT_DOUBLECLICK &&
|
|
|
|
aEvent->message <= NS_MOUSE_RIGHT_CLICK)) {
|
|
|
|
mLastMouseButtonAction = PR_Now();
|
2001-08-31 04:06:39 +00:00
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Capturing stage
|
2002-04-20 01:48:32 +00:00
|
|
|
if ((NS_EVENT_FLAG_BUBBLE != aFlags) && mChromeEventHandler) {
|
2000-08-22 03:51:17 +00:00
|
|
|
// Check chrome document capture here.
|
2000-10-05 21:40:13 +00:00
|
|
|
// XXX The chrome can not handle this, see bug 51211
|
|
|
|
if (aEvent->message != NS_IMAGE_LOAD) {
|
|
|
|
mChromeEventHandler->HandleChromeEvent(aPresContext, aEvent, aDOMEvent,
|
2002-04-20 01:48:32 +00:00
|
|
|
NS_EVENT_FLAG_CAPTURE,
|
2000-10-05 21:40:13 +00:00
|
|
|
aEventStatus);
|
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Local handling stage
|
2002-04-20 01:48:32 +00:00
|
|
|
if (mListenerManager && !(aEvent->flags & NS_EVENT_FLAG_STOP_DISPATCH) &&
|
|
|
|
!((NS_EVENT_FLAG_BUBBLE & aFlags) &&
|
|
|
|
(NS_EVENT_FLAG_CANT_BUBBLE & aEvent->flags))) {
|
2000-08-22 03:51:17 +00:00
|
|
|
aEvent->flags |= aFlags;
|
|
|
|
mListenerManager->HandleEvent(aPresContext, aEvent, aDOMEvent, this,
|
|
|
|
aFlags, aEventStatus);
|
|
|
|
aEvent->flags &= ~aFlags;
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2001-08-31 04:06:39 +00:00
|
|
|
if (aEvent->message == NS_PAGE_LOAD)
|
|
|
|
mIsDocumentLoaded = PR_TRUE;
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Bubbling stage
|
2002-04-20 01:48:32 +00:00
|
|
|
if ((NS_EVENT_FLAG_CAPTURE != aFlags) && mChromeEventHandler) {
|
2000-08-22 03:51:17 +00:00
|
|
|
// 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) &&
|
2000-09-07 20:37:01 +00:00
|
|
|
(aEvent->message != NS_IMAGE_LOAD) &&
|
2000-08-22 03:51:17 +00:00
|
|
|
(aEvent->message != NS_FOCUS_CONTENT) &&
|
|
|
|
(aEvent->message != NS_BLUR_CONTENT)) {
|
|
|
|
mChromeEventHandler->HandleChromeEvent(aPresContext, aEvent,
|
2002-04-20 01:48:32 +00:00
|
|
|
aDOMEvent, NS_EVENT_FLAG_BUBBLE,
|
2000-08-22 03:51:17 +00:00
|
|
|
aEventStatus);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-04-17 04:17:16 +00:00
|
|
|
if (aEvent->message == NS_PAGE_LOAD) {
|
|
|
|
nsCOMPtr<nsIContent> content(do_QueryInterface(mFrameElement));
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDOMWindowInternal> parent;
|
|
|
|
GetParentInternal(getter_AddRefs(parent));
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> treeItem(do_QueryInterface(mDocShell));
|
|
|
|
|
|
|
|
PRInt32 itemType = nsIDocShellTreeItem::typeChrome;
|
|
|
|
|
|
|
|
if (treeItem) {
|
|
|
|
treeItem->GetItemType(&itemType);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (content && parent && 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;
|
|
|
|
|
|
|
|
event.eventStructType = NS_EVENT;
|
|
|
|
event.message = NS_PAGE_LOAD;
|
|
|
|
|
2002-05-29 17:56:50 +00:00
|
|
|
// 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.
|
|
|
|
|
|
|
|
return content->HandleDOMEvent(nsnull, &event, nsnull,
|
|
|
|
NS_EVENT_FLAG_INIT, &status);
|
2002-04-17 04:17:16 +00:00
|
|
|
}
|
|
|
|
}
|
2001-08-31 04:06:39 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (NS_EVENT_FLAG_INIT & aFlags) {
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
// We're leaving the DOM event loop so if we created an event,
|
|
|
|
// release here.
|
2001-04-17 05:52:11 +00:00
|
|
|
if (*aDOMEvent && !externalDOMEvent) {
|
2000-08-22 03:51:17 +00:00
|
|
|
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();
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
2001-04-17 05:52:11 +00:00
|
|
|
aDOMEvent = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return ret;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
JSObject *
|
|
|
|
GlobalWindowImpl::GetGlobalJSObject()
|
|
|
|
{
|
|
|
|
return mJSObject;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::OnFinalize(JSObject *aJSObject)
|
|
|
|
{
|
|
|
|
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?");
|
|
|
|
}
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2001-11-27 09:18:28 +00:00
|
|
|
NS_IMETHODIMP
|
2002-02-09 02:48:31 +00:00
|
|
|
GlobalWindowImpl::SetScriptsEnabled(PRBool aEnabled, PRBool aFireTimeouts)
|
2001-11-27 09:18:28 +00:00
|
|
|
{
|
2002-02-09 02:48:31 +00:00
|
|
|
if (aEnabled && aFireTimeouts) {
|
2001-11-27 09:18:28 +00:00
|
|
|
// Scripts are enabled (again?) on this context, run timeouts that
|
|
|
|
// fired on this context while scripts were disabled.
|
|
|
|
|
|
|
|
RunTimeout(nsnull);
|
|
|
|
}
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl::nsIScriptObjectPrincipal
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetPrincipal(nsIPrincipal** result)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-09-20 23:38:28 +00:00
|
|
|
NS_ENSURE_ARG_POINTER(result);
|
2000-09-19 05:21:00 +00:00
|
|
|
|
2000-09-20 23:38:28 +00:00
|
|
|
if (mDocument) {
|
|
|
|
// If we have a document, get the principal from the document
|
|
|
|
nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
|
|
|
|
NS_ENSURE_TRUE(doc, NS_ERROR_FAILURE);
|
2000-09-19 05:21:00 +00:00
|
|
|
|
2000-09-20 23:38:28 +00:00
|
|
|
return doc->GetPrincipal(result);
|
|
|
|
}
|
2000-09-19 05:21:00 +00:00
|
|
|
|
2000-09-20 23:38:28 +00:00
|
|
|
if (mDocumentPrincipal) {
|
|
|
|
*result = mDocumentPrincipal;
|
|
|
|
NS_ADDREF(*result);
|
2000-09-19 05:21:00 +00:00
|
|
|
|
2000-09-20 23:38:28 +00:00
|
|
|
return NS_OK;
|
2000-09-19 05:21:00 +00:00
|
|
|
}
|
2000-07-13 21:48:25 +00:00
|
|
|
|
2000-09-20 23:38:28 +00:00
|
|
|
// 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.
|
2001-10-31 23:52:52 +00:00
|
|
|
nsCOMPtr<nsIDOMWindowInternal> parent;
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2001-10-31 23:52:52 +00:00
|
|
|
GetParentInternal(getter_AddRefs(parent));
|
2000-07-13 21:48:25 +00:00
|
|
|
|
2001-10-31 23:52:52 +00:00
|
|
|
if (parent) {
|
2000-09-20 23:38:28 +00:00
|
|
|
nsCOMPtr<nsIScriptObjectPrincipal> objPrincipal(do_QueryInterface(parent));
|
|
|
|
|
|
|
|
if (objPrincipal) {
|
|
|
|
return objPrincipal->GetPrincipal(result);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NS_ERROR_FAILURE;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl::nsIDOMWindow
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetDocument(nsIDOMDocument** aDocument)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2002-04-17 04:17:16 +00:00
|
|
|
// lazily instantiate an about:blank document if necessary, and if
|
|
|
|
// we have what it takes to do so. Note that domdoc here is the same
|
|
|
|
// thing as our mDocument, but we don't have to explicitly set the
|
|
|
|
// member variable because the docshell has already called
|
|
|
|
// SetNewDocument().
|
2001-11-16 02:14:53 +00:00
|
|
|
if (!mDocument && mDocShell)
|
|
|
|
nsCOMPtr<nsIDOMDocument> domdoc(do_GetInterface(mDocShell));
|
|
|
|
|
2000-09-01 01:54:35 +00:00
|
|
|
*aDocument = mDocument;
|
|
|
|
NS_IF_ADDREF(*aDocument);
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
2002-02-06 03:48:20 +00:00
|
|
|
// like GetDocument, but merely fetches the document if it already exists
|
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetExtantDocument(nsIDOMDocument** aDocument)
|
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(aDocument);
|
|
|
|
*aDocument = mDocument;
|
|
|
|
NS_IF_ADDREF(*aDocument);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-09-01 01:54:35 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl::nsIDOMWindowInternal
|
|
|
|
//*****************************************************************************
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetWindow(nsIDOMWindowInternal** aWindow)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-09-01 01:54:35 +00:00
|
|
|
*aWindow = NS_STATIC_CAST(nsIDOMWindowInternal *, this);
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ADDREF(*aWindow);
|
|
|
|
return NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetSelf(nsIDOMWindowInternal** aWindow)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-09-01 01:54:35 +00:00
|
|
|
*aWindow = NS_STATIC_CAST(nsIDOMWindowInternal *, this);
|
|
|
|
NS_ADDREF(*aWindow);
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetNavigator(nsIDOMNavigator** aNavigator)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mNavigator) {
|
2001-01-23 22:29:41 +00:00
|
|
|
mNavigator = new NavigatorImpl(mDocShell);
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_TRUE(mNavigator, NS_ERROR_OUT_OF_MEMORY);
|
|
|
|
NS_ADDREF(mNavigator);
|
|
|
|
}
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aNavigator = mNavigator;
|
|
|
|
NS_ADDREF(*aNavigator);
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetScreen(nsIDOMScreen** aScreen)
|
1999-01-28 23:12:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mScreen && mDocShell) {
|
|
|
|
mScreen = new ScreenImpl(mDocShell);
|
|
|
|
NS_ENSURE_TRUE(mScreen, NS_ERROR_OUT_OF_MEMORY);
|
|
|
|
NS_ADDREF(mScreen);
|
|
|
|
}
|
|
|
|
|
|
|
|
*aScreen = mScreen;
|
|
|
|
NS_ADDREF(*aScreen);
|
|
|
|
return NS_OK;
|
1999-01-28 23:12:54 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetHistory(nsIDOMHistory** aHistory)
|
1999-01-28 23:12:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mHistory && mDocShell) {
|
|
|
|
mHistory = new HistoryImpl(mDocShell);
|
|
|
|
NS_ENSURE_TRUE(mHistory, NS_ERROR_OUT_OF_MEMORY);
|
|
|
|
NS_ADDREF(mHistory);
|
|
|
|
}
|
|
|
|
*aHistory = mHistory;
|
|
|
|
NS_ADDREF(*aHistory);
|
|
|
|
return NS_OK;
|
1999-01-28 23:12:54 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetParent(nsIDOMWindow** aParent)
|
1999-06-09 19:04:18 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_ARG_POINTER(aParent);
|
|
|
|
*aParent = nsnull;
|
|
|
|
if (!mDocShell)
|
|
|
|
return NS_OK;
|
1999-06-09 19:04:18 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(mDocShell));
|
|
|
|
NS_ENSURE_TRUE(docShellAsItem, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeItem> parent;
|
|
|
|
docShellAsItem->GetSameTypeParent(getter_AddRefs(parent));
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (parent) {
|
|
|
|
nsCOMPtr<nsIScriptGlobalObject> globalObject(do_GetInterface(parent));
|
|
|
|
NS_ENSURE_SUCCESS(CallQueryInterface(globalObject.get(), aParent),
|
|
|
|
NS_ERROR_FAILURE);
|
|
|
|
}
|
|
|
|
else {
|
2000-09-01 01:54:35 +00:00
|
|
|
*aParent = NS_STATIC_CAST(nsIDOMWindowInternal *, this);
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ADDREF(*aParent);
|
|
|
|
}
|
|
|
|
return NS_OK;
|
1999-06-09 19:04:18 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetTop(nsIDOMWindow** aTop)
|
1999-06-09 19:04:18 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult ret = NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aTop = nsnull;
|
|
|
|
if (mDocShell) {
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(mDocShell));
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> root;
|
|
|
|
docShellAsItem->GetSameTypeRootTreeItem(getter_AddRefs(root));
|
|
|
|
|
|
|
|
if (root) {
|
|
|
|
nsCOMPtr<nsIScriptGlobalObject> globalObject(do_GetInterface(root));
|
|
|
|
CallQueryInterface(globalObject.get(), aTop);
|
|
|
|
}
|
|
|
|
}
|
1999-06-09 19:04:18 +00:00
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
return ret;
|
1999-06-09 19:04:18 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetContent(nsIDOMWindow** aContent)
|
1999-06-09 19:04:18 +00:00
|
|
|
{
|
2000-02-08 13:40:10 +00:00
|
|
|
*aContent = nsnull;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwner));
|
|
|
|
NS_ENSURE_TRUE(treeOwner, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> primaryContent;
|
|
|
|
treeOwner->GetPrimaryContentShell(getter_AddRefs(primaryContent));
|
|
|
|
|
2000-09-01 01:54:35 +00:00
|
|
|
nsCOMPtr<nsIDOMWindowInternal> domWindow(do_GetInterface(primaryContent));
|
2000-02-08 13:40:10 +00:00
|
|
|
*aContent = domWindow;
|
|
|
|
NS_IF_ADDREF(*aContent);
|
1999-06-09 19:04:18 +00:00
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-02-16 07:13:59 +00:00
|
|
|
// XXX for sidebar HACK, see bug 20721
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetSidebar(nsISidebar** aSidebar)
|
2000-02-16 07:13:59 +00:00
|
|
|
{
|
|
|
|
nsresult rv = NS_OK;
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mSidebar) {
|
2000-09-13 23:57:52 +00:00
|
|
|
mSidebar = do_CreateInstance(NS_SIDEBAR_CONTRACTID, &rv);
|
2000-02-16 07:13:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (mSidebar) {
|
2000-09-01 01:54:35 +00:00
|
|
|
nsIDOMWindowInternal *win = NS_STATIC_CAST(nsIDOMWindowInternal *, this);
|
2000-02-16 07:13:59 +00:00
|
|
|
/* no addref */
|
|
|
|
mSidebar->SetWindow(win);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
*aSidebar = mSidebar;
|
|
|
|
NS_IF_ADDREF(*aSidebar);
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetPrompter(nsIPrompt** aPrompt)
|
2000-08-07 20:55:36 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mDocShell)
|
2000-08-07 20:55:36 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPrompt> prompter(do_GetInterface(mDocShell));
|
|
|
|
NS_ENSURE_TRUE(prompter, NS_ERROR_NO_INTERFACE);
|
|
|
|
|
|
|
|
NS_ADDREF(*aPrompt = prompter);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetMenubar(nsIDOMBarProp** aMenubar)
|
1999-06-09 19:04:18 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mMenubar) {
|
|
|
|
mMenubar = new MenubarPropImpl();
|
|
|
|
if (mMenubar) {
|
|
|
|
NS_ADDREF(mMenubar);
|
|
|
|
nsCOMPtr<nsIWebBrowserChrome> browserChrome;
|
|
|
|
if (mDocShell &&
|
|
|
|
NS_SUCCEEDED(GetWebBrowserChrome(getter_AddRefs(browserChrome)))) {
|
2002-02-16 01:15:52 +00:00
|
|
|
mMenubar->SetWebBrowserChrome(browserChrome);
|
1999-06-19 22:15:14 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
1999-06-09 19:04:18 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aMenubar = mMenubar;
|
|
|
|
NS_IF_ADDREF(mMenubar);
|
|
|
|
return NS_OK;
|
1999-06-09 19:04:18 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetToolbar(nsIDOMBarProp** aToolbar)
|
1999-06-09 19:04:18 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mToolbar) {
|
|
|
|
mToolbar = new ToolbarPropImpl();
|
|
|
|
if (mToolbar) {
|
|
|
|
NS_ADDREF(mToolbar);
|
|
|
|
nsCOMPtr<nsIWebBrowserChrome> browserChrome;
|
|
|
|
if (mDocShell &&
|
|
|
|
NS_SUCCEEDED(GetWebBrowserChrome(getter_AddRefs(browserChrome)))) {
|
|
|
|
mToolbar->SetWebBrowserChrome(browserChrome);
|
1999-06-19 22:15:14 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
1999-06-09 19:04:18 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aToolbar = mToolbar;
|
|
|
|
NS_IF_ADDREF(mToolbar);
|
|
|
|
return NS_OK;
|
1999-06-09 19:04:18 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetLocationbar(nsIDOMBarProp** aLocationbar)
|
1999-06-09 19:04:18 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mLocationbar) {
|
|
|
|
mLocationbar = new LocationbarPropImpl();
|
|
|
|
if (mLocationbar) {
|
|
|
|
NS_ADDREF(mLocationbar);
|
|
|
|
nsCOMPtr<nsIWebBrowserChrome> browserChrome;
|
|
|
|
if (mDocShell &&
|
|
|
|
NS_SUCCEEDED(GetWebBrowserChrome(getter_AddRefs(browserChrome)))) {
|
|
|
|
mLocationbar->SetWebBrowserChrome(browserChrome);
|
1999-06-19 22:15:14 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
1999-06-09 19:04:18 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aLocationbar = mLocationbar;
|
|
|
|
NS_IF_ADDREF(mLocationbar);
|
|
|
|
return NS_OK;
|
1999-06-09 19:04:18 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetPersonalbar(nsIDOMBarProp** aPersonalbar)
|
1999-06-09 19:04:18 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mPersonalbar) {
|
|
|
|
mPersonalbar = new PersonalbarPropImpl();
|
|
|
|
if (mPersonalbar) {
|
|
|
|
NS_ADDREF(mPersonalbar);
|
|
|
|
nsCOMPtr<nsIWebBrowserChrome> browserChrome;
|
|
|
|
if (mDocShell &&
|
|
|
|
NS_SUCCEEDED(GetWebBrowserChrome(getter_AddRefs(browserChrome)))) {
|
|
|
|
mPersonalbar->SetWebBrowserChrome(browserChrome);
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aPersonalbar = mPersonalbar;
|
|
|
|
NS_IF_ADDREF(mPersonalbar);
|
|
|
|
return NS_OK;
|
1999-06-09 19:04:18 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetStatusbar(nsIDOMBarProp** aStatusbar)
|
1998-08-13 23:37:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mStatusbar) {
|
|
|
|
mStatusbar = new StatusbarPropImpl();
|
|
|
|
if (mStatusbar) {
|
|
|
|
NS_ADDREF(mStatusbar);
|
|
|
|
nsCOMPtr<nsIWebBrowserChrome> browserChrome;
|
|
|
|
if (mDocShell &&
|
|
|
|
NS_SUCCEEDED(GetWebBrowserChrome(getter_AddRefs(browserChrome)))) {
|
|
|
|
mStatusbar->SetWebBrowserChrome(browserChrome);
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
1998-08-13 23:37:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aStatusbar = mStatusbar;
|
|
|
|
NS_IF_ADDREF(mStatusbar);
|
|
|
|
return NS_OK;
|
1998-08-13 23:37:54 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetScrollbars(nsIDOMBarProp** aScrollbars)
|
1998-09-03 01:19:58 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mScrollbars) {
|
2002-02-16 01:15:52 +00:00
|
|
|
mScrollbars = new ScrollbarsPropImpl(this);
|
2000-08-22 03:51:17 +00:00
|
|
|
if (mScrollbars) {
|
|
|
|
NS_ADDREF(mScrollbars);
|
|
|
|
nsCOMPtr<nsIWebBrowserChrome> browserChrome;
|
|
|
|
if (mDocShell &&
|
|
|
|
NS_SUCCEEDED(GetWebBrowserChrome(getter_AddRefs(browserChrome)))) {
|
|
|
|
mScrollbars->SetWebBrowserChrome(browserChrome);
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aScrollbars = mScrollbars;
|
|
|
|
NS_IF_ADDREF(mScrollbars);
|
|
|
|
return NS_OK;
|
1998-09-03 01:19:58 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetDirectories(nsIDOMBarProp** aDirectories)
|
1998-08-13 23:37:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
return GetPersonalbar(aDirectories);
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1998-08-15 00:13:51 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetClosed(PRBool* aClosed)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
*aClosed = !mDocShell;
|
|
|
|
return NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1999-12-17 22:25:22 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetFrames(nsIDOMWindowCollection** aFrames)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mFrames && mDocShell) {
|
|
|
|
mFrames = new nsDOMWindowList(mDocShell);
|
|
|
|
NS_ENSURE_TRUE(mFrames, NS_ERROR_OUT_OF_MEMORY);
|
|
|
|
NS_ADDREF(mFrames);
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aFrames = NS_STATIC_CAST(nsIDOMWindowCollection *, mFrames);
|
|
|
|
NS_IF_ADDREF(mFrames);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetCrypto(nsIDOMCrypto** aCrypto)
|
2000-05-11 19:17:07 +00:00
|
|
|
{
|
|
|
|
nsresult rv;
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mCrypto) {
|
2000-09-13 23:57:52 +00:00
|
|
|
mCrypto = do_CreateInstance(kCryptoContractID, &rv);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-05-11 19:17:07 +00:00
|
|
|
*aCrypto = mCrypto;
|
2000-05-16 23:52:42 +00:00
|
|
|
NS_IF_ADDREF(*aCrypto);
|
|
|
|
return NS_OK;
|
2000-05-11 19:17:07 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetPkcs11(nsIDOMPkcs11** aPkcs11)
|
2000-05-11 19:17:07 +00:00
|
|
|
{
|
|
|
|
nsresult rv;
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mPkcs11) {
|
2000-09-13 23:57:52 +00:00
|
|
|
mPkcs11 = do_CreateInstance(kPkcs11ContractID, &rv);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-05-11 19:17:07 +00:00
|
|
|
*aPkcs11 = mPkcs11;
|
2000-05-16 23:52:42 +00:00
|
|
|
NS_IF_ADDREF(*aPkcs11);
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
2000-05-11 19:17:07 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetControllers(nsIControllers** aResult)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mControllers) {
|
|
|
|
mControllers = do_CreateInstance(kXULControllersCID);
|
|
|
|
NS_ENSURE_TRUE(mControllers, NS_ERROR_FAILURE);
|
2000-02-15 01:08:04 +00:00
|
|
|
#ifdef DOM_CONTROLLER
|
2000-08-22 03:51:17 +00:00
|
|
|
// Add in the default controller
|
|
|
|
nsDOMWindowController *domController = new nsDOMWindowController(this);
|
|
|
|
if (domController) {
|
|
|
|
nsCOMPtr<nsIController> controller(domController);
|
|
|
|
mControllers->AppendController(controller);
|
|
|
|
}
|
2000-02-15 01:08:04 +00:00
|
|
|
#endif // DOM_CONTROLLER
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
*aResult = mControllers;
|
|
|
|
NS_ADDREF(*aResult);
|
|
|
|
return NS_OK;
|
1998-08-13 23:37:54 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetOpener(nsIDOMWindowInternal** aOpener)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
2002-02-26 04:50:21 +00:00
|
|
|
*aOpener = nsnull;
|
2002-02-28 00:22:59 +00:00
|
|
|
// First, check if we were called from a privileged chrome script
|
2002-05-17 22:24:06 +00:00
|
|
|
|
|
|
|
NS_ENSURE_TRUE(sSecMan, NS_ERROR_FAILURE);
|
2002-02-28 00:22:59 +00:00
|
|
|
PRBool inChrome;
|
2002-05-17 22:24:06 +00:00
|
|
|
nsresult rv = sSecMan->SubjectPrincipalIsSystem(&inChrome);
|
2002-02-28 00:22:59 +00:00
|
|
|
if (NS_SUCCEEDED(rv) && inChrome) {
|
|
|
|
*aOpener = mOpener;
|
|
|
|
NS_IF_ADDREF(*aOpener);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2002-02-26 04:50:21 +00:00
|
|
|
// We don't want to reveal the opener if the opener is a mail window,
|
|
|
|
// because opener can be used to spoof the contents of a message (bug 105050).
|
|
|
|
// So, we look in the opener's root docshell to see if it's a mail window.
|
|
|
|
nsCOMPtr<nsIScriptGlobalObject> openerSGO(do_QueryInterface(mOpener));
|
|
|
|
if (openerSGO) {
|
|
|
|
nsCOMPtr<nsIDocShell> openerDocShell;
|
|
|
|
openerSGO->GetDocShell(getter_AddRefs(openerDocShell));
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(openerDocShell));
|
|
|
|
if (docShellAsItem) {
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> openerRootItem;
|
|
|
|
docShellAsItem->GetRootTreeItem(getter_AddRefs(openerRootItem));
|
|
|
|
nsCOMPtr<nsIDocShell> openerRootDocShell(do_QueryInterface(openerRootItem));
|
|
|
|
if (openerRootDocShell) {
|
|
|
|
PRUint32 appType;
|
|
|
|
nsresult rv = openerRootDocShell->GetAppType(&appType);
|
|
|
|
if (NS_SUCCEEDED(rv) && appType != nsIDocShell::APP_TYPE_MAIL) {
|
|
|
|
*aOpener = mOpener;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IF_ADDREF(*aOpener);
|
|
|
|
return NS_OK;
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetOpener(nsIDOMWindowInternal* aOpener)
|
1998-08-07 04:45:03 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
mOpener = aOpener;
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1999-06-15 03:17:11 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::GetStatus(nsAString& aStatus)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
aStatus = mStatus;
|
|
|
|
return NS_OK;
|
1998-08-13 23:37:54 +00:00
|
|
|
}
|
1998-08-07 04:45:03 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::SetStatus(const nsAString& aStatus)
|
1999-06-26 21:48:29 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_status_change is true,
|
|
|
|
* prevent setting window.status by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_status_change") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
mStatus = aStatus;
|
1999-06-26 21:48:29 +00:00
|
|
|
|
2002-02-05 06:04:56 +00:00
|
|
|
nsCOMPtr<nsIWebBrowserChrome> browserChrome;
|
|
|
|
GetWebBrowserChrome(getter_AddRefs(browserChrome));
|
|
|
|
if(browserChrome) {
|
|
|
|
browserChrome->SetStatus(nsIWebBrowserChrome::STATUS_SCRIPT,
|
|
|
|
PromiseFlatString(aStatus).get());
|
|
|
|
}
|
1999-06-26 21:48:29 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1999-06-26 21:48:29 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::GetDefaultStatus(nsAString& aDefaultStatus)
|
1998-08-13 23:37:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
aDefaultStatus = mDefaultStatus;
|
|
|
|
return NS_OK;
|
1998-08-13 23:37:54 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::SetDefaultStatus(const nsAString& aDefaultStatus)
|
1998-08-21 21:39:27 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_status_change is true,
|
|
|
|
* prevent setting window.defaultStatus by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_status_change") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
mDefaultStatus = aDefaultStatus;
|
1998-08-21 21:39:27 +00:00
|
|
|
|
2002-04-12 10:11:00 +00:00
|
|
|
nsCOMPtr<nsIWebBrowserChrome> browserChrome;
|
|
|
|
GetWebBrowserChrome(getter_AddRefs(browserChrome));
|
|
|
|
if (browserChrome) {
|
|
|
|
browserChrome->SetStatus(nsIWebBrowserChrome::STATUS_SCRIPT_DEFAULT,
|
|
|
|
PromiseFlatString(aDefaultStatus).get());
|
|
|
|
}
|
1998-08-21 21:39:27 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-08-21 21:39:27 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::GetName(nsAString& aName)
|
1998-08-13 23:37:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsXPIDLString name;
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(mDocShell));
|
|
|
|
if (docShellAsItem)
|
|
|
|
docShellAsItem->GetName(getter_Copies(name));
|
1998-08-13 23:37:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
aName.Assign(name);
|
|
|
|
return NS_OK;
|
1998-08-13 23:37:54 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::SetName(const nsAString& aName)
|
1998-08-13 23:37:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(mDocShell));
|
|
|
|
if (docShellAsItem)
|
2001-04-02 19:40:52 +00:00
|
|
|
result = docShellAsItem->SetName(PromiseFlatString(aName).get());
|
2000-08-22 03:51:17 +00:00
|
|
|
return result;
|
1998-08-13 23:37:54 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetInnerWidth(PRInt32* aInnerWidth)
|
1998-08-13 23:37:54 +00:00
|
|
|
{
|
2002-02-05 05:47:22 +00:00
|
|
|
FlushPendingNotifications(PR_TRUE);
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> docShellWin(do_QueryInterface(mDocShell));
|
|
|
|
*aInnerWidth = 0;
|
2002-05-20 20:06:29 +00:00
|
|
|
PRInt32 notused;
|
2000-08-22 03:51:17 +00:00
|
|
|
if (docShellWin)
|
2002-05-20 20:06:29 +00:00
|
|
|
docShellWin->GetSize(aInnerWidth, ¬used);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
|
|
|
return NS_OK;
|
1998-08-13 23:37:54 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetInnerWidth(PRInt32 aInnerWidth)
|
1998-08-13 23:37:54 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_move_resize is true,
|
|
|
|
* prevent setting window.innerWidth by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_move_resize") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(mDocShell));
|
|
|
|
NS_ENSURE_TRUE(docShellAsItem, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellParent;
|
|
|
|
docShellAsItem->GetSameTypeParent(getter_AddRefs(docShellParent));
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
// It's only valid to access this from a top window. Doesn't work from
|
2000-08-22 03:51:17 +00:00
|
|
|
// sub-frames.
|
|
|
|
if (docShellParent)
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
return NS_OK; // Silent failure
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
|
|
|
|
docShellAsItem->GetTreeOwner(getter_AddRefs(treeOwner));
|
|
|
|
NS_ENSURE_TRUE(treeOwner, NS_ERROR_FAILURE);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(CheckSecurityWidthAndHeight(&aInnerWidth, nsnull),
|
|
|
|
NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIBaseWindow> docShellAsWin(do_QueryInterface(mDocShell));
|
2002-05-20 20:06:29 +00:00
|
|
|
PRInt32 notused, cy = 0;
|
|
|
|
docShellAsWin->GetSize(¬used, &cy);
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(treeOwner->SizeShellTo(docShellAsItem, aInnerWidth, cy),
|
|
|
|
NS_ERROR_FAILURE);
|
1998-08-13 23:37:54 +00:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetInnerHeight(PRInt32* aInnerHeight)
|
1998-08-13 23:37:54 +00:00
|
|
|
{
|
2002-02-05 05:47:22 +00:00
|
|
|
FlushPendingNotifications(PR_TRUE);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
|
|
|
nsCOMPtr<nsIBaseWindow> docShellWin(do_QueryInterface(mDocShell));
|
|
|
|
*aInnerHeight = 0;
|
2002-05-20 20:06:29 +00:00
|
|
|
PRInt32 notused;
|
2000-08-22 03:51:17 +00:00
|
|
|
if (docShellWin)
|
2002-05-20 20:06:29 +00:00
|
|
|
docShellWin->GetSize(¬used, aInnerHeight);
|
1999-07-16 01:14:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetInnerHeight(PRInt32 aInnerHeight)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_move_resize is true,
|
|
|
|
* prevent setting window.innerHeight by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_move_resize") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(mDocShell));
|
|
|
|
NS_ENSURE_TRUE(docShellAsItem, NS_ERROR_FAILURE);
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellParent;
|
|
|
|
docShellAsItem->GetSameTypeParent(getter_AddRefs(docShellParent));
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
// It's only valid to access this from a top window. Doesn't work from
|
2000-08-22 03:51:17 +00:00
|
|
|
// sub-frames.
|
|
|
|
if (docShellParent)
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
return NS_OK; // Silent failure
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
|
|
|
|
docShellAsItem->GetTreeOwner(getter_AddRefs(treeOwner));
|
|
|
|
NS_ENSURE_TRUE(treeOwner, NS_ERROR_FAILURE);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(CheckSecurityWidthAndHeight(nsnull, &aInnerHeight),
|
|
|
|
NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIBaseWindow> docShellAsWin(do_QueryInterface(mDocShell));
|
2002-05-20 20:06:29 +00:00
|
|
|
PRInt32 cx = 0, notused;
|
|
|
|
docShellAsWin->GetSize(&cx, ¬used);
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(treeOwner->
|
|
|
|
SizeShellTo(docShellAsItem, cx, aInnerHeight),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
return NS_OK;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetOuterWidth(PRInt32* aOuterWidth)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE);
|
1999-03-29 23:48:47 +00:00
|
|
|
|
2002-02-05 05:47:22 +00:00
|
|
|
FlushPendingNotifications(PR_TRUE);
|
2002-05-20 20:06:29 +00:00
|
|
|
PRInt32 notused;
|
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetSize(aOuterWidth, ¬used),
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetOuterWidth(PRInt32 aOuterWidth)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_move_resize is true,
|
|
|
|
* prevent setting window.outerWidth by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_move_resize") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE);
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(CheckSecurityWidthAndHeight(&aOuterWidth, nsnull),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2002-05-20 20:06:29 +00:00
|
|
|
PRInt32 notused, cy;
|
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetSize(¬used, &cy), NS_ERROR_FAILURE);
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->SetSize(aOuterWidth, cy, PR_TRUE),
|
|
|
|
NS_ERROR_FAILURE);
|
1999-07-28 07:03:29 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetOuterHeight(PRInt32* aOuterHeight)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE);
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2002-02-05 05:47:22 +00:00
|
|
|
FlushPendingNotifications(PR_TRUE);
|
2000-02-11 07:14:41 +00:00
|
|
|
|
2002-05-20 20:06:29 +00:00
|
|
|
PRInt32 notused;
|
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetSize(¬used, aOuterHeight),
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ERROR_FAILURE);
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetOuterHeight(PRInt32 aOuterHeight)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_move_resize is true,
|
|
|
|
* prevent setting window.outerHeight by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_move_resize") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(CheckSecurityWidthAndHeight(nsnull, &aOuterHeight),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2002-05-20 20:06:29 +00:00
|
|
|
PRInt32 cx, notused;
|
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetSize(&cx, ¬used), NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->SetSize(cx, aOuterHeight, PR_TRUE),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetScreenX(PRInt32* aScreenX)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE);
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2001-06-22 00:48:50 +00:00
|
|
|
PRInt32 y;
|
|
|
|
|
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetPosition(aScreenX, &y),
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ERROR_FAILURE);
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetScreenX(PRInt32 aScreenX)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_move_resize is true,
|
|
|
|
* prevent setting window.screenX by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_move_resize") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE);
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(CheckSecurityLeftAndTop(&aScreenX, nsnull),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2001-06-22 00:48:50 +00:00
|
|
|
PRInt32 x, y;
|
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetPosition(&x, &y),
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->SetPosition(aScreenX, y),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetScreenY(PRInt32* aScreenY)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE);
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2001-06-22 00:48:50 +00:00
|
|
|
PRInt32 x;
|
|
|
|
|
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetPosition(&x, aScreenY),
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ERROR_FAILURE);
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetScreenY(PRInt32 aScreenY)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_move_resize is true,
|
|
|
|
* prevent setting window.screenY by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_move_resize") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE);
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(CheckSecurityLeftAndTop(nsnull, &aScreenY),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2001-06-22 00:48:50 +00:00
|
|
|
PRInt32 x, y;
|
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetPosition(&x, &y),
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->SetPosition(x, aScreenY),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2000-06-21 00:20:39 +00:00
|
|
|
nsresult
|
2000-08-22 03:51:17 +00:00
|
|
|
GlobalWindowImpl::CheckSecurityWidthAndHeight(PRInt32* aWidth,
|
|
|
|
PRInt32* aHeight)
|
2000-06-21 00:20:39 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
// This one is easy. Just ensure the variable is greater than 100;
|
2000-06-21 00:20:39 +00:00
|
|
|
if ((aWidth && *aWidth < 100) || (aHeight && *aHeight < 100)) {
|
2000-08-22 03:51:17 +00:00
|
|
|
// Check security state for use in determing window dimensions
|
2002-05-17 22:24:06 +00:00
|
|
|
|
|
|
|
NS_ENSURE_TRUE(sSecMan, NS_ERROR_FAILURE);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
PRBool enabled;
|
2002-05-17 22:24:06 +00:00
|
|
|
nsresult res = sSecMan->IsCapabilityEnabled("UniversalBrowserWrite",
|
|
|
|
&enabled);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
|
|
|
if (NS_FAILED(res) || !enabled) {
|
|
|
|
//sec check failed
|
|
|
|
if (aWidth && *aWidth < 100) {
|
|
|
|
*aWidth = 100;
|
|
|
|
}
|
|
|
|
if (aHeight && *aHeight < 100) {
|
|
|
|
*aHeight = 100;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
GlobalWindowImpl::CheckSecurityLeftAndTop(PRInt32* aLeft, PRInt32* aTop)
|
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
// This one is harder. We have to get the screen size and window dimensions.
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Check security state for use in determing window dimensions
|
2002-05-17 22:24:06 +00:00
|
|
|
|
|
|
|
NS_ENSURE_TRUE(sSecMan, NS_ERROR_FAILURE);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
PRBool enabled;
|
2002-05-17 22:24:06 +00:00
|
|
|
nsresult res = sSecMan->IsCapabilityEnabled("UniversalBrowserWrite",
|
|
|
|
&enabled);
|
2000-06-21 00:20:39 +00:00
|
|
|
if (NS_FAILED(res)) {
|
2000-08-22 03:51:17 +00:00
|
|
|
enabled = PR_FALSE;
|
2000-06-21 00:20:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!enabled) {
|
2001-03-09 02:12:51 +00:00
|
|
|
PRInt32 screenLeft, screenTop, screenWidth, screenHeight;
|
|
|
|
PRInt32 winLeft, winTop, winWidth, winHeight;
|
|
|
|
|
2002-02-05 05:47:22 +00:00
|
|
|
FlushPendingNotifications(PR_TRUE);
|
2001-03-09 02:12:51 +00:00
|
|
|
|
|
|
|
// Get the window size
|
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwner;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwner));
|
|
|
|
if (treeOwner)
|
|
|
|
treeOwner->GetPositionAndSize(&winLeft, &winTop, &winWidth, &winHeight);
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Get the screen dimensions
|
2001-03-09 02:12:51 +00:00
|
|
|
// XXX This should use nsIScreenManager once it's fully fleshed out.
|
2000-06-21 00:20:39 +00:00
|
|
|
nsCOMPtr<nsIDOMScreen> screen;
|
2001-03-09 02:12:51 +00:00
|
|
|
GetScreen(getter_AddRefs(screen));
|
|
|
|
if (screen) {
|
|
|
|
screen->GetAvailLeft(&screenLeft);
|
2000-08-22 03:51:17 +00:00
|
|
|
screen->GetAvailWidth(&screenWidth);
|
|
|
|
screen->GetAvailHeight(&screenHeight);
|
2001-11-10 23:30:13 +00:00
|
|
|
#if defined(XP_MAC) || defined(XP_MACOSX)
|
2001-03-09 02:12:51 +00:00
|
|
|
/* 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
|
2000-06-21 00:20:39 +00:00
|
|
|
}
|
|
|
|
|
2001-03-09 02:12:51 +00:00
|
|
|
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;
|
2000-06-21 00:20:39 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-06-21 00:20:39 +00:00
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetPageXOffset(PRInt32* aPageXOffset)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
return GetScrollX(aPageXOffset);
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetPageYOffset(PRInt32* aPageYOffset)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
return GetScrollY(aPageYOffset);
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetScrollX(PRInt32* aScrollX)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_ARG_POINTER(aScrollX);
|
|
|
|
nsresult result = NS_OK;
|
2001-06-18 07:37:11 +00:00
|
|
|
nsIScrollableView *view = nsnull; // no addref/release for views
|
2000-08-22 03:51:17 +00:00
|
|
|
float p2t, t2p;
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aScrollX = 0;
|
2000-04-02 13:50:36 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
GetScrollInfo(&view, &p2t, &t2p);
|
|
|
|
if (view) {
|
|
|
|
nscoord xPos, yPos;
|
|
|
|
result = view->GetScrollPosition(xPos, yPos);
|
|
|
|
*aScrollX = NSTwipsToIntPixels(xPos, t2p);
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return result;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetScrollY(PRInt32* aScrollY)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_ARG_POINTER(aScrollY);
|
|
|
|
nsresult result = NS_OK;
|
2001-06-18 07:37:11 +00:00
|
|
|
nsIScrollableView *view = nsnull; // no addref/release for views
|
2000-08-22 03:51:17 +00:00
|
|
|
float p2t, t2p;
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aScrollY = 0;
|
2000-04-02 13:50:36 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
GetScrollInfo(&view, &p2t, &t2p);
|
|
|
|
if (view) {
|
|
|
|
nscoord xPos, yPos;
|
|
|
|
result = view->GetScrollPosition(xPos, yPos);
|
|
|
|
*aScrollY = NSTwipsToIntPixels(yPos, t2p);
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return result;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetLength(PRUint32* aLength)
|
Beginnings of massive landing of joki changes.
Relevant nsbeta3+ bugs 43309, 44503, 2634, 2504,5981, 24698, 25758, 33577,
36062, 36217, 41191, 41491, 42356, 42829, 43016
r=saari (joki code). also been tested by heikki and bryner
2000-08-08 21:19:03 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDOMWindowCollection> frames;
|
|
|
|
if (NS_SUCCEEDED(GetFrames(getter_AddRefs(frames))) && frames) {
|
|
|
|
return frames->GetLength(aLength);
|
|
|
|
}
|
|
|
|
return NS_ERROR_FAILURE;
|
Beginnings of massive landing of joki changes.
Relevant nsbeta3+ bugs 43309, 44503, 2634, 2504,5981, 24698, 25758, 33577,
36062, 36217, 41191, 41491, 42356, 42829, 43016
r=saari (joki code). also been tested by heikki and bryner
2000-08-08 21:19:03 +00:00
|
|
|
}
|
|
|
|
|
2002-02-20 03:33:52 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::SetFullScreen(PRBool aFullScreen)
|
|
|
|
{
|
|
|
|
if (aFullScreen == mFullScreen)
|
|
|
|
return NS_OK;
|
|
|
|
|
|
|
|
// SetFullScreen needs to be called on the root window, so get that
|
|
|
|
// via the DocShell tree, and if we are not already the root,
|
|
|
|
// call SetFullScreen on that window instead.
|
|
|
|
nsCOMPtr<nsIDocShell> docShell;
|
|
|
|
GetDocShell(getter_AddRefs(docShell));
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> treeItem = do_QueryInterface(docShell);
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> rootItem;
|
|
|
|
treeItem->GetRootTreeItem(getter_AddRefs(rootItem));
|
|
|
|
nsCOMPtr<nsIDOMWindowInternal> window = do_GetInterface(rootItem);
|
|
|
|
if (!window)
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
if (rootItem != treeItem)
|
|
|
|
return window->SetFullScreen(aFullScreen);
|
|
|
|
|
|
|
|
// make sure we don't try to set full screen on a non-chrome window,
|
|
|
|
// which might happen in embedding world
|
|
|
|
PRInt32 itemType;
|
|
|
|
treeItem->GetItemType(&itemType);
|
|
|
|
if (itemType != nsIDocShellTreeItem::typeChrome)
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
|
|
|
|
// dispatch an onfullscreen DOM event so that XUL apps can
|
|
|
|
// respond visually if we are kicked into full screen mode
|
|
|
|
nsCOMPtr<nsIDOMDocumentEvent> doc(do_QueryInterface(mDocument));
|
|
|
|
nsCOMPtr<nsIDOMEvent> event;
|
|
|
|
doc->CreateEvent(NS_LITERAL_STRING("Events"), getter_AddRefs(event));
|
|
|
|
if (!event)
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
|
|
|
|
event->InitEvent(NS_LITERAL_STRING("fullscreen"), PR_FALSE, PR_TRUE);
|
|
|
|
PRBool allowDefault;
|
|
|
|
DispatchEvent(event, &allowDefault);
|
|
|
|
|
|
|
|
// event handlers can prevent us from going into full-screen mode
|
|
|
|
if (!allowDefault)
|
|
|
|
return NS_OK;
|
|
|
|
|
|
|
|
if (aFullScreen) {
|
|
|
|
// hide window chrome
|
|
|
|
nsCOMPtr<nsIDOMElement> docEl;
|
|
|
|
mDocument->GetDocumentElement(getter_AddRefs(docEl));
|
|
|
|
if (docEl)
|
|
|
|
docEl->SetAttribute(NS_LITERAL_STRING("hidechrome"), NS_LITERAL_STRING("true"));
|
|
|
|
|
|
|
|
// store current position for restoration later on
|
|
|
|
if (!mOriginalPos)
|
|
|
|
mOriginalPos = new nsPoint();
|
|
|
|
if (!mOriginalPos)
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
|
|
|
|
GetScreenX(&(mOriginalPos->x));
|
|
|
|
GetScreenY(&(mOriginalPos->y));
|
|
|
|
|
|
|
|
// store current size for restoration later on
|
|
|
|
if (!mOriginalSize)
|
|
|
|
mOriginalSize = new nsSize();
|
|
|
|
if (!mOriginalSize)
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
|
|
|
|
GetOuterWidth(&(mOriginalSize->width));
|
|
|
|
GetOuterHeight(&(mOriginalSize->height));
|
|
|
|
|
|
|
|
// get screen object so we can measure screen dimensions
|
|
|
|
nsCOMPtr<nsIDOMScreen> screen;
|
|
|
|
GetScreen(getter_AddRefs(screen));
|
|
|
|
PRInt32 width, height;
|
|
|
|
screen->GetWidth(&width);
|
|
|
|
screen->GetHeight(&height);
|
|
|
|
|
|
|
|
// move to origin and size to fill entire screen
|
|
|
|
MoveTo(0, 0);
|
|
|
|
ResizeTo(width, height);
|
|
|
|
|
|
|
|
// hide all OS chrome (like the windows taskbar)
|
|
|
|
nsCOMPtr<nsIFullScreen> fullScreen =
|
|
|
|
do_GetService("@mozilla.org/browser/fullscreen;1");
|
|
|
|
if (fullScreen)
|
|
|
|
fullScreen->HideAllOSChrome();
|
|
|
|
} else {
|
|
|
|
// show window chrome again
|
|
|
|
nsCOMPtr<nsIDOMElement> docEl;
|
|
|
|
mDocument->GetDocumentElement(getter_AddRefs(docEl));
|
|
|
|
if (docEl)
|
|
|
|
docEl->RemoveAttribute(NS_LITERAL_STRING("hidechrome"));
|
|
|
|
|
|
|
|
// restore window to original size/position
|
|
|
|
if (mOriginalPos)
|
|
|
|
MoveTo(mOriginalPos->x, mOriginalPos->y);
|
|
|
|
if (mOriginalSize)
|
|
|
|
ResizeTo(mOriginalSize->width, mOriginalSize->height);
|
|
|
|
|
|
|
|
// show all OS chrome again
|
|
|
|
nsCOMPtr<nsIFullScreen> fullScreen =
|
|
|
|
do_GetService("@mozilla.org/browser/fullscreen;1");
|
|
|
|
if (fullScreen)
|
|
|
|
fullScreen->ShowAllOSChrome();
|
|
|
|
}
|
|
|
|
|
|
|
|
mFullScreen = aFullScreen;
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetFullScreen(PRBool* aFullScreen)
|
|
|
|
{
|
|
|
|
*aFullScreen = mFullScreen;
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::Dump(const nsAString& aStr)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2001-08-30 08:07:07 +00:00
|
|
|
#if !(defined(NS_DEBUG) || defined(MOZ_ENABLE_JS_DUMP))
|
2001-06-22 10:54:23 +00:00
|
|
|
{
|
|
|
|
// In optimized builds we check a pref that controls if we should
|
|
|
|
// enable output from dump() or not, in debug builds it's always
|
|
|
|
// enabled.
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefServiceCID));
|
|
|
|
if (!prefs)
|
|
|
|
return NS_OK;
|
|
|
|
|
|
|
|
PRBool enable_dump = PR_FALSE;
|
|
|
|
|
|
|
|
// if pref doesn't exist, disable dump output.
|
|
|
|
nsresult rv = prefs->GetBoolPref("browser.dom.window.dump.enabled",
|
|
|
|
&enable_dump);
|
|
|
|
|
|
|
|
if (NS_FAILED(rv) || !enable_dump) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2000-08-23 17:27:06 +00:00
|
|
|
char *cstr = ToNewUTF8String(aStr);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
1999-08-03 12:43:06 +00:00
|
|
|
#ifdef XP_MAC
|
2000-08-22 03:51:17 +00:00
|
|
|
// have to convert \r to \n so that printing to the console works
|
|
|
|
char *c = cstr, *cEnd = cstr + aStr.Length();
|
|
|
|
while (c < cEnd) {
|
|
|
|
if (*c == '\r')
|
|
|
|
*c = '\n';
|
|
|
|
c++;
|
|
|
|
}
|
1999-08-03 12:43:06 +00:00
|
|
|
#endif
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (cstr) {
|
2000-10-28 22:17:53 +00:00
|
|
|
printf("%s", cstr);
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCRT::free(cstr);
|
|
|
|
}
|
|
|
|
|
1998-07-16 01:16:47 +00:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2002-02-05 05:47:22 +00:00
|
|
|
void
|
|
|
|
GlobalWindowImpl::EnsureReflowFlushAndPaint()
|
2001-04-25 19:52:49 +00:00
|
|
|
{
|
2002-02-05 05:47:22 +00:00
|
|
|
NS_ASSERTION(mDocShell, "EnsureReflowFlushAndPaint() called with no "
|
|
|
|
"docshell!");
|
2001-04-25 19:52:49 +00:00
|
|
|
|
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
2002-02-05 05:47:22 +00:00
|
|
|
mDocShell->GetPresShell(getter_AddRefs(presShell));
|
2001-04-25 19:52:49 +00:00
|
|
|
|
|
|
|
if (!presShell)
|
|
|
|
return;
|
|
|
|
|
|
|
|
// Flush pending reflows.
|
2002-02-05 05:47:22 +00:00
|
|
|
nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
|
|
|
|
|
|
|
|
if (doc) {
|
|
|
|
doc->FlushPendingNotifications(PR_TRUE, PR_FALSE);
|
|
|
|
}
|
2001-04-25 19:52:49 +00:00
|
|
|
|
|
|
|
// Unsuppress painting.
|
2001-05-01 22:54:11 +00:00
|
|
|
presShell->UnsuppressPainting();
|
2001-04-25 19:52:49 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetTextZoom(float *aZoom)
|
2002-01-16 03:03:53 +00:00
|
|
|
{
|
|
|
|
if (mDocShell) {
|
|
|
|
nsCOMPtr<nsIContentViewer> contentViewer;
|
|
|
|
mDocShell->GetContentViewer(getter_AddRefs(contentViewer));
|
|
|
|
nsCOMPtr<nsIMarkupDocumentViewer> markupViewer(do_QueryInterface(contentViewer));
|
|
|
|
|
|
|
|
if (markupViewer) {
|
|
|
|
return markupViewer->GetTextZoom(aZoom);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetTextZoom(float aZoom)
|
2002-01-16 03:03:53 +00:00
|
|
|
{
|
|
|
|
if (mDocShell) {
|
|
|
|
nsCOMPtr<nsIContentViewer> contentViewer;
|
|
|
|
mDocShell->GetContentViewer(getter_AddRefs(contentViewer));
|
|
|
|
nsCOMPtr<nsIMarkupDocumentViewer> markupViewer(do_QueryInterface(contentViewer));
|
|
|
|
|
|
|
|
if (markupViewer)
|
|
|
|
return markupViewer->SetTextZoom(aZoom);
|
|
|
|
}
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
|
|
|
|
2002-05-17 22:24:06 +00:00
|
|
|
// static
|
2002-03-20 11:23:13 +00:00
|
|
|
nsresult
|
|
|
|
GlobalWindowImpl::CheckSecurityIsChromeCaller(PRBool *aIsChrome)
|
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(aIsChrome);
|
|
|
|
|
|
|
|
*aIsChrome = PR_FALSE;
|
|
|
|
|
|
|
|
// Check if this is a privileged system script
|
2002-05-17 22:24:06 +00:00
|
|
|
|
|
|
|
NS_ENSURE_TRUE(sSecMan, NS_ERROR_FAILURE);
|
2002-03-20 11:23:13 +00:00
|
|
|
|
|
|
|
PRBool isChrome = PR_FALSE;
|
2002-05-17 22:24:06 +00:00
|
|
|
nsresult rv = sSecMan->SubjectPrincipalIsSystem(&isChrome);
|
2002-03-20 11:23:13 +00:00
|
|
|
if (NS_SUCCEEDED(rv)) {
|
|
|
|
*aIsChrome = isChrome;
|
|
|
|
}
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2002-05-17 22:24:06 +00:00
|
|
|
// static
|
|
|
|
PRBool
|
|
|
|
GlobalWindowImpl::IsCallerChrome()
|
|
|
|
{
|
|
|
|
PRBool is_caller_chrome = PR_FALSE;
|
|
|
|
|
|
|
|
nsresult rv = CheckSecurityIsChromeCaller(&is_caller_chrome);
|
|
|
|
NS_ENSURE_SUCCESS(rv, PR_FALSE);
|
|
|
|
|
|
|
|
return is_caller_chrome;
|
|
|
|
}
|
|
|
|
|
2002-03-20 11:23:13 +00:00
|
|
|
void
|
2002-03-24 01:02:53 +00:00
|
|
|
GlobalWindowImpl::MakeScriptDialogTitle(const nsAString &aInTitle, nsAString &aOutTitle)
|
2002-03-20 11:23:13 +00:00
|
|
|
{
|
|
|
|
aOutTitle.Truncate(0);
|
|
|
|
|
|
|
|
// Load the string to be prepended to titles for script
|
|
|
|
// confirm/alert/prompt boxes.
|
|
|
|
|
|
|
|
nsresult rv;
|
|
|
|
nsCOMPtr<nsIStringBundleService> stringBundleService =
|
|
|
|
do_GetService(kCStringBundleServiceCID, &rv);
|
|
|
|
|
|
|
|
if (NS_SUCCEEDED(rv) && stringBundleService) {
|
|
|
|
nsCOMPtr<nsIStringBundle> stringBundle;
|
|
|
|
rv = stringBundleService->CreateBundle(kDOMBundleURL,
|
|
|
|
getter_AddRefs(stringBundle));
|
|
|
|
|
|
|
|
if (stringBundle) {
|
|
|
|
nsAutoString inTitle(aInTitle);
|
|
|
|
nsXPIDLString tempString;
|
|
|
|
const PRUnichar *formatStrings[1];
|
|
|
|
formatStrings[0] = inTitle.get();
|
|
|
|
rv = stringBundle->FormatStringFromName(
|
|
|
|
NS_LITERAL_STRING("ScriptDlgTitle").get(),
|
|
|
|
formatStrings, 1, getter_Copies(tempString));
|
|
|
|
if (tempString)
|
|
|
|
aOutTitle = tempString.get();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Just in case
|
|
|
|
if (aOutTitle.IsEmpty()) {
|
|
|
|
NS_WARNING("could not get ScriptDlgTitle string from string bundle");
|
|
|
|
aOutTitle.Assign(NS_LITERAL_STRING("[Script] "));
|
|
|
|
aOutTitle.Append(aInTitle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::Alert(const nsAString& aString)
|
2000-08-22 03:51:17 +00:00
|
|
|
{
|
|
|
|
NS_ENSURE_STATE(mDocShell);
|
1999-06-18 17:34:08 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsAutoString str;
|
1999-06-11 23:57:25 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
str.Assign(aString);
|
|
|
|
|
|
|
|
// XXX: Concatenation of optional args?
|
1999-11-16 20:05:21 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIPrompt> prompter(do_GetInterface(mDocShell));
|
|
|
|
NS_ENSURE_TRUE(prompter, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2002-03-20 11:23:13 +00:00
|
|
|
// Test whether title needs to prefixed with [script]
|
|
|
|
PRBool isChrome = PR_FALSE;
|
|
|
|
nsAutoString newTitle;
|
|
|
|
const PRUnichar *title = nsnull;
|
|
|
|
nsresult rv = CheckSecurityIsChromeCaller(&isChrome);
|
|
|
|
if (NS_FAILED(rv) || !isChrome) {
|
|
|
|
MakeScriptDialogTitle(NS_LITERAL_STRING(""), newTitle);
|
|
|
|
title = newTitle.get();
|
|
|
|
}
|
|
|
|
NS_WARN_IF_FALSE(!isChrome, "chrome shouldn't be calling alert(), use the prompt service");
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
// Before bringing up the window, unsuppress painting and flush
|
|
|
|
// pending reflows.
|
2002-02-05 05:47:22 +00:00
|
|
|
EnsureReflowFlushAndPaint();
|
2001-04-25 19:52:49 +00:00
|
|
|
|
2002-03-20 11:23:13 +00:00
|
|
|
return prompter->Alert(title, str.get());
|
1999-06-11 23:57:25 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::Confirm(const nsAString& aString, PRBool* aReturn)
|
1999-06-11 23:57:25 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_STATE(mDocShell);
|
|
|
|
|
|
|
|
nsAutoString str;
|
1999-06-11 23:57:25 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aReturn = PR_FALSE;
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
|
|
|
str.Assign(aString);
|
|
|
|
|
|
|
|
// XXX: Concatenation of optional args?
|
1999-11-16 20:05:21 +00:00
|
|
|
|
2002-03-20 11:23:13 +00:00
|
|
|
// Test whether title needs to prefixed with [script]
|
|
|
|
PRBool isChrome = PR_FALSE;
|
|
|
|
nsAutoString newTitle;
|
|
|
|
const PRUnichar *title = nsnull;
|
|
|
|
nsresult rv = CheckSecurityIsChromeCaller(&isChrome);
|
|
|
|
if (NS_FAILED(rv) || !isChrome) {
|
|
|
|
MakeScriptDialogTitle(NS_LITERAL_STRING(""), newTitle);
|
|
|
|
title = newTitle.get();
|
|
|
|
}
|
|
|
|
NS_WARN_IF_FALSE(!isChrome, "chrome shouldn't be calling confirm(), use the prompt service");
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIPrompt> prompter(do_GetInterface(mDocShell));
|
|
|
|
NS_ENSURE_TRUE(prompter, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
// Before bringing up the window, unsuppress painting and flush
|
|
|
|
// pending reflows.
|
2002-02-05 05:47:22 +00:00
|
|
|
EnsureReflowFlushAndPaint();
|
2001-04-25 19:52:49 +00:00
|
|
|
|
2002-03-20 11:23:13 +00:00
|
|
|
return prompter->Confirm(title, str.get(), aReturn);
|
1999-06-11 23:57:25 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::Prompt(const nsAString& aMessage,
|
|
|
|
const nsAString& aInitial,
|
|
|
|
const nsAString& aTitle,
|
2001-05-08 22:43:25 +00:00
|
|
|
PRUint32 aSavePassword,
|
2002-03-24 00:16:18 +00:00
|
|
|
nsAString& aReturn)
|
1999-06-11 23:57:25 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_STATE(mDocShell);
|
1999-06-11 23:57:25 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
aReturn.Truncate(); // XXX Null string!!!
|
|
|
|
|
|
|
|
nsresult rv = NS_OK;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIAuthPrompt> prompter(do_GetInterface(mDocShell));
|
|
|
|
|
|
|
|
NS_ENSURE_TRUE(prompter, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
PRBool b;
|
|
|
|
nsXPIDLString uniResult;
|
|
|
|
|
|
|
|
// Before bringing up the window, unsuppress painting and flush
|
|
|
|
// pending reflows.
|
2002-02-05 05:47:22 +00:00
|
|
|
EnsureReflowFlushAndPaint();
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
2002-03-20 11:23:13 +00:00
|
|
|
// Test whether title needs to prefixed with [script]
|
|
|
|
nsAutoString title;
|
|
|
|
PRBool isChrome = PR_FALSE;
|
|
|
|
rv = CheckSecurityIsChromeCaller(&isChrome);
|
|
|
|
if (NS_FAILED(rv) || !isChrome) {
|
|
|
|
MakeScriptDialogTitle(aTitle, title);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
title.Assign(aTitle);
|
|
|
|
}
|
|
|
|
NS_WARN_IF_FALSE(!isChrome, "chrome shouldn't be calling prompt(), use the prompt service");
|
|
|
|
|
|
|
|
rv = prompter->Prompt(title.get(),
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
PromiseFlatString(aMessage).get(), nsnull,
|
|
|
|
aSavePassword,
|
|
|
|
PromiseFlatString(aInitial).get(),
|
|
|
|
getter_Copies(uniResult), &b);
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
if (uniResult && b) {
|
|
|
|
aReturn.Assign(uniResult);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
SetDOMStringToNull(aReturn);
|
|
|
|
|
|
|
|
// XXX: Since DOMString's can't be null yet we'll haveto do this here...
|
|
|
|
|
|
|
|
if (sXPConnect) {
|
|
|
|
nsCOMPtr<nsIXPCNativeCallContext> ncc;
|
|
|
|
|
|
|
|
sXPConnect->GetCurrentNativeCallContext(getter_AddRefs(ncc));
|
|
|
|
|
|
|
|
if (ncc) {
|
|
|
|
jsval *retval = nsnull;
|
|
|
|
|
|
|
|
rv = ncc->GetRetValPtr(&retval);
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
*retval = JSVAL_NULL;
|
|
|
|
|
|
|
|
ncc->SetReturnValueWasSet(PR_TRUE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::Prompt(nsAString& aReturn)
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
{
|
|
|
|
NS_ENSURE_STATE(mDocShell);
|
|
|
|
NS_ENSURE_STATE(sXPConnect);
|
|
|
|
|
|
|
|
nsresult rv = NS_OK;
|
|
|
|
nsCOMPtr<nsIXPCNativeCallContext> ncc;
|
|
|
|
|
|
|
|
rv = sXPConnect->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);
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsAutoString message, initial, title;
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
|
|
|
PRUint32 argc;
|
|
|
|
jsval *argv = nsnull;
|
|
|
|
|
|
|
|
ncc->GetArgc(&argc);
|
|
|
|
ncc->GetArgvPtr(&argv);
|
|
|
|
|
2001-04-10 18:30:25 +00:00
|
|
|
PRUint32 savePassword = nsIAuthPrompt::SAVE_PASSWORD_NEVER;
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (argc > 0) {
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsJSUtils::ConvertJSValToString(message, cx, argv[0]);
|
2000-06-17 01:57:36 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (argc > 1) {
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsJSUtils::ConvertJSValToString(initial, cx, argv[1]);
|
2000-06-17 01:57:36 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (argc > 2) {
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsJSUtils::ConvertJSValToString(title, cx, argv[2]);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
|
|
|
if (argc > 3) {
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsJSUtils::ConvertJSValToUint32(&savePassword, cx, argv[3]);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
1999-11-16 20:05:21 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
return Prompt(message, initial, title, savePassword, aReturn);
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Focus()
|
1998-09-03 01:19:58 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_flip is true,
|
|
|
|
* prevent setting window.focus() by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_flip") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
2002-01-16 00:11:51 +00:00
|
|
|
if (treeOwnerAsWin) {
|
2002-03-04 22:50:11 +00:00
|
|
|
PRBool isEnabled = PR_TRUE;
|
|
|
|
if (NS_SUCCEEDED(treeOwnerAsWin->GetEnabled(&isEnabled)) && !isEnabled) {
|
|
|
|
NS_WARNING( "Should not try to set the focus on a disabled window" );
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
treeOwnerAsWin->SetVisibility(PR_TRUE);
|
2002-01-16 00:11:51 +00:00
|
|
|
nsCOMPtr<nsIEmbeddingSiteWindow> embeddingWin(do_GetInterface(treeOwnerAsWin));
|
|
|
|
if (embeddingWin)
|
|
|
|
embeddingWin->SetFocus();
|
|
|
|
}
|
1999-07-02 19:43:26 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
2001-05-22 23:52:17 +00:00
|
|
|
if (mDocShell) {
|
2001-08-21 21:18:45 +00:00
|
|
|
mDocShell->GetEldestPresShell(getter_AddRefs(presShell));
|
2001-05-22 23:52:17 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
|
|
|
|
nsresult result = NS_OK;
|
|
|
|
if (presShell) {
|
|
|
|
nsCOMPtr<nsIViewManager> vm;
|
|
|
|
presShell->GetViewManager(getter_AddRefs(vm));
|
|
|
|
if (vm) {
|
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
vm->GetWidget(getter_AddRefs(widget));
|
|
|
|
if (widget)
|
2001-03-19 17:56:04 +00:00
|
|
|
// raise the window since this was a focus call on the window.
|
|
|
|
result = widget->SetFocus(PR_TRUE);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
2001-06-30 00:25:09 +00:00
|
|
|
else {
|
|
|
|
nsCOMPtr<nsIFocusController> focusController;
|
|
|
|
GetRootFocusController(getter_AddRefs(focusController));
|
|
|
|
if (focusController)
|
|
|
|
focusController->SetFocusedWindow(this);
|
|
|
|
}
|
1998-09-03 01:19:58 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return result;
|
1998-09-03 01:19:58 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Blur()
|
2000-01-26 22:48:16 +00:00
|
|
|
{
|
2002-01-05 02:20:55 +00:00
|
|
|
nsresult rv = NS_ERROR_FAILURE;
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2002-01-05 02:20:55 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwner));
|
2002-04-18 21:50:11 +00:00
|
|
|
nsCOMPtr<nsIEmbeddingSiteWindow2> siteWindow(do_GetInterface(treeOwner));
|
2002-01-05 02:20:55 +00:00
|
|
|
if (siteWindow)
|
|
|
|
rv = siteWindow->Blur();
|
2000-01-26 22:48:16 +00:00
|
|
|
|
2002-01-05 02:20:55 +00:00
|
|
|
if (NS_SUCCEEDED(rv))
|
2001-05-22 23:52:17 +00:00
|
|
|
mDocShell->SetHasFocus(PR_FALSE);
|
|
|
|
|
2002-01-05 02:20:55 +00:00
|
|
|
return rv;
|
2000-01-26 22:48:16 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Back()
|
1998-09-04 00:46:06 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(mDocShell));
|
|
|
|
NS_ENSURE_TRUE(webNav, NS_ERROR_FAILURE);
|
1999-12-17 00:50:17 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return webNav->GoBack();
|
1998-09-04 00:46:06 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Forward()
|
1999-10-28 14:12:56 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(mDocShell));
|
|
|
|
NS_ENSURE_TRUE(webNav, NS_ERROR_FAILURE);
|
1999-10-28 14:12:56 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return webNav->GoForward();
|
1999-10-28 14:12:56 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Home()
|
1999-10-28 14:12:56 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mDocShell)
|
|
|
|
return NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefServiceCID));
|
|
|
|
NS_ENSURE_TRUE(prefs, NS_ERROR_FAILURE);
|
1999-10-28 14:12:56 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// if we get here, we know prefs is not null
|
|
|
|
nsXPIDLString url;
|
|
|
|
prefs->GetLocalizedUnicharPref(PREF_BROWSER_STARTUP_HOMEPAGE,
|
|
|
|
getter_Copies(url));
|
|
|
|
nsString homeURL;
|
|
|
|
if (!url) {
|
|
|
|
// if all else fails, use this
|
2000-10-28 22:17:53 +00:00
|
|
|
#ifdef DEBUG_seth
|
|
|
|
printf("all else failed. using %s as the home page\n", DEFAULT_HOME_PAGE);
|
|
|
|
#endif
|
2000-08-22 03:51:17 +00:00
|
|
|
homeURL.AssignWithConversion(DEFAULT_HOME_PAGE);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
homeURL = url;
|
2001-11-30 22:35:33 +00:00
|
|
|
|
|
|
|
nsresult rv;
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(mDocShell));
|
|
|
|
NS_ENSURE_TRUE(webNav, NS_ERROR_FAILURE);
|
2002-02-09 03:36:55 +00:00
|
|
|
rv = webNav->LoadURI(homeURL.get(),
|
2001-11-30 22:35:33 +00:00
|
|
|
nsIWebNavigation::LOAD_FLAGS_NONE,
|
|
|
|
nsnull,
|
|
|
|
nsnull,
|
|
|
|
nsnull);
|
|
|
|
NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE);
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1999-10-28 14:12:56 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Stop()
|
2000-01-15 02:26:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(mDocShell));
|
2001-08-14 04:46:20 +00:00
|
|
|
return webNav->Stop(nsIWebNavigation::STOP_ALL);
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Print()
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2002-02-01 14:52:11 +00:00
|
|
|
nsCOMPtr<nsIWebBrowserPrint> webBrowserPrint;
|
2002-02-09 03:36:55 +00:00
|
|
|
if (NS_SUCCEEDED(GetInterface(NS_GET_IID(nsIWebBrowserPrint),
|
|
|
|
getter_AddRefs(webBrowserPrint)))) {
|
2002-05-07 12:03:37 +00:00
|
|
|
nsCOMPtr<nsIPrintSettings> printSettings;
|
|
|
|
webBrowserPrint->GetGlobalPrintSettings(getter_AddRefs(printSettings));
|
|
|
|
webBrowserPrint->Print(printSettings, nsnull);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
return NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::MoveTo(PRInt32 aXPos, PRInt32 aYPos)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_move_resize is true,
|
|
|
|
* prevent window.moveTo() by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_move_resize") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE);
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(CheckSecurityLeftAndTop(&aXPos, &aYPos),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->SetPosition(aXPos, aYPos),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::MoveBy(PRInt32 aXDif, PRInt32 aYDif)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_move_resize is true,
|
|
|
|
* prevent window.moveBy() by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_move_resize") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE);
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
PRInt32 x, y;
|
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetPosition(&x, &y), NS_ERROR_FAILURE);
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
PRInt32 newX = x + aXDif;
|
|
|
|
PRInt32 newY = y + aYDif;
|
|
|
|
NS_ENSURE_SUCCESS(CheckSecurityLeftAndTop(&newX, &newY), NS_ERROR_FAILURE);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->SetPosition(newX, newY),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::ResizeTo(PRInt32 aWidth, PRInt32 aHeight)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_move_resize is true,
|
|
|
|
* prevent window.resizeTo() by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_move_resize") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE);
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(CheckSecurityWidthAndHeight(&aWidth, &aHeight),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->SetSize(aWidth, aHeight, PR_TRUE),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
2000-01-15 02:26:10 +00:00
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::ResizeBy(PRInt32 aWidthDif, PRInt32 aHeightDif)
|
2000-01-15 02:26:10 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_move_resize is true,
|
|
|
|
* prevent window.resizeBy() by exiting early
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_move_resize") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE);
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
PRInt32 cx, cy;
|
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetSize(&cx, &cy), NS_ERROR_FAILURE);
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
PRInt32 newCX = cx + aWidthDif;
|
|
|
|
PRInt32 newCY = cy + aHeightDif;
|
|
|
|
NS_ENSURE_SUCCESS(CheckSecurityWidthAndHeight(&newCX, &newCY),
|
|
|
|
NS_ERROR_FAILURE);
|
2000-06-21 00:20:39 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->SetSize(newCX, newCY,
|
|
|
|
PR_TRUE), NS_ERROR_FAILURE);
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SizeToContent()
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2002-04-12 10:11:00 +00:00
|
|
|
/*
|
|
|
|
* If caller is not chrome and dom.disable_window_move_resize is true,
|
|
|
|
* block window.SizeToContent() by exiting
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!CanSetProperty("dom.disable_window_move_resize") && !IsCallerChrome()) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(mDocShell));
|
|
|
|
NS_ENSURE_TRUE(docShellAsItem, NS_ERROR_FAILURE);
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellParent;
|
|
|
|
docShellAsItem->GetSameTypeParent(getter_AddRefs(docShellParent));
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
// It's only valid to access this from a top window. Doesn't work from
|
2000-08-22 03:51:17 +00:00
|
|
|
// sub-frames.
|
|
|
|
if (docShellParent)
|
|
|
|
return NS_ERROR_FAILURE;
|
2000-01-15 02:26:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIContentViewer> cv;
|
|
|
|
mDocShell->GetContentViewer(getter_AddRefs(cv));
|
|
|
|
nsCOMPtr<nsIMarkupDocumentViewer> markupViewer(do_QueryInterface(cv));
|
|
|
|
NS_ENSURE_TRUE(markupViewer, NS_ERROR_FAILURE);
|
|
|
|
NS_ENSURE_SUCCESS(markupViewer->SizeToContent(), NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
2000-01-15 02:26:10 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Scroll(PRInt32 aXScroll, PRInt32 aYScroll)
|
1998-10-07 18:06:23 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
return ScrollTo(aXScroll, aYScroll);
|
1998-10-07 18:06:23 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::ScrollTo(PRInt32 aXScroll, PRInt32 aYScroll)
|
1998-10-07 18:06:23 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult result;
|
2001-06-18 07:37:11 +00:00
|
|
|
nsIScrollableView *view = nsnull; // no addref/release for views
|
2000-08-22 03:51:17 +00:00
|
|
|
float p2t, t2p;
|
1999-04-28 20:33:43 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
result = GetScrollInfo(&view, &p2t, &t2p);
|
|
|
|
|
|
|
|
if (view) {
|
2001-06-22 00:48:50 +00:00
|
|
|
// Here we calculate what the max pixel value is that we can
|
|
|
|
// scroll to, we do this by dividing maxint with the pixel to
|
|
|
|
// twips conversion factor, and substracting 4, the 4 comes from
|
|
|
|
// experimenting with this value, anything less makes the view
|
|
|
|
// code not scroll correctly, I have no idea why. -- jst
|
|
|
|
const PRInt32 maxpx = (PRInt32)((float)0x7fffffff / p2t) - 4;
|
|
|
|
|
|
|
|
if (aXScroll > maxpx) {
|
|
|
|
aXScroll = maxpx;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (aYScroll > maxpx) {
|
|
|
|
aYScroll = maxpx;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
result = view->ScrollTo(NSIntPixelsToTwips(aXScroll, p2t),
|
|
|
|
NSIntPixelsToTwips(aYScroll, p2t),
|
|
|
|
NS_VMREFRESH_IMMEDIATE);
|
|
|
|
}
|
2000-06-03 01:01:48 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return result;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1999-06-15 03:17:11 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::ScrollBy(PRInt32 aXScrollDif,
|
|
|
|
PRInt32 aYScrollDif)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult result;
|
2001-06-18 07:37:11 +00:00
|
|
|
nsIScrollableView *view = nsnull; // no addref/release for views
|
2000-08-22 03:51:17 +00:00
|
|
|
float p2t, t2p;
|
|
|
|
|
|
|
|
result = GetScrollInfo(&view, &p2t, &t2p);
|
|
|
|
|
|
|
|
if (view) {
|
|
|
|
nscoord xPos, yPos;
|
|
|
|
result = view->GetScrollPosition(xPos, yPos);
|
|
|
|
if (NS_SUCCEEDED(result)) {
|
2001-06-22 00:48:50 +00:00
|
|
|
result = ScrollTo(NSTwipsToIntPixels(xPos, t2p) + aXScrollDif,
|
|
|
|
NSTwipsToIntPixels(yPos, t2p) + aYScrollDif);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
1999-04-28 20:33:43 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return result;
|
1998-10-07 18:06:23 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::ScrollByLines(PRInt32 numLines)
|
2000-09-13 13:06:07 +00:00
|
|
|
{
|
|
|
|
nsresult result;
|
|
|
|
nsIScrollableView *view = nsnull; // no addref/release for views
|
|
|
|
float p2t, t2p;
|
|
|
|
|
|
|
|
result = GetScrollInfo(&view, &p2t, &t2p);
|
|
|
|
if (view)
|
|
|
|
{
|
|
|
|
result = view->ScrollByLines(0, numLines);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::ScrollByPages(PRInt32 numPages)
|
2000-09-13 13:06:07 +00:00
|
|
|
{
|
|
|
|
nsresult result;
|
|
|
|
nsIScrollableView *view = nsnull; // no addref/release for views
|
|
|
|
float p2t, t2p;
|
|
|
|
|
|
|
|
result = GetScrollInfo(&view, &p2t, &t2p);
|
|
|
|
if (view)
|
|
|
|
{
|
|
|
|
result = view->ScrollByPages(numPages);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-27 00:55:57 +00:00
|
|
|
GlobalWindowImpl::ClearTimeout()
|
1998-10-07 18:06:23 +00:00
|
|
|
{
|
2002-03-27 00:55:57 +00:00
|
|
|
return ClearTimeoutOrInterval();
|
1998-10-07 18:06:23 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-27 00:55:57 +00:00
|
|
|
GlobalWindowImpl::ClearInterval()
|
1999-01-27 04:15:19 +00:00
|
|
|
{
|
2002-03-27 00:55:57 +00:00
|
|
|
return ClearTimeoutOrInterval();
|
1999-01-27 04:15:19 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetTimeout(PRBool *_retval)
|
|
|
|
{
|
|
|
|
return SetTimeoutOrInterval(PR_FALSE, _retval);
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetInterval(PRBool *_retval)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
return SetTimeoutOrInterval(PR_TRUE, _retval);
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1998-10-01 22:21:59 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetResizable(PRBool aResizable)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
// nop
|
|
|
|
|
|
|
|
return NS_OK;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::CaptureEvents(PRInt32 aEventFlags)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIEventListenerManager> manager;
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (NS_SUCCEEDED(GetListenerManager(getter_AddRefs(manager)))) {
|
|
|
|
manager->CaptureEvent(aEventFlags);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::ReleaseEvents(PRInt32 aEventFlags)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIEventListenerManager> manager;
|
2000-02-16 06:59:07 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (NS_SUCCEEDED(GetListenerManager(getter_AddRefs(manager)))) {
|
|
|
|
manager->ReleaseEvent(aEventFlags);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
2000-02-16 06:59:07 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::RouteEvent(nsIDOMEvent* aEvt)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
//XXX Not the best solution -joki
|
|
|
|
return NS_OK;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::EnableExternalCapture()
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::DisableExternalCapture()
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2001-08-31 04:06:39 +00:00
|
|
|
/*
|
2002-01-08 09:19:01 +00:00
|
|
|
* Examine the current document state to see if we're in a way that is
|
|
|
|
* typically abused by web designers. This routine returns PR_TRUE if
|
|
|
|
* we're running a top level script, running an onload or onunload
|
|
|
|
* handler, or running a timeout. The window.open code uses this
|
|
|
|
* routine to determine wether or not to allow the new window.
|
2001-08-31 04:06:39 +00:00
|
|
|
*/
|
|
|
|
PRBool
|
|
|
|
GlobalWindowImpl::CheckForAbusePoint ()
|
|
|
|
{
|
2002-03-08 21:48:28 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeItem> item(do_QueryInterface(mDocShell));
|
2002-01-08 09:19:01 +00:00
|
|
|
|
2002-03-08 21:48:28 +00:00
|
|
|
if (item) {
|
|
|
|
PRInt32 type = nsIDocShellTreeItem::typeChrome;
|
|
|
|
|
|
|
|
item->GetItemType(&type);
|
2002-01-08 09:19:01 +00:00
|
|
|
|
2002-03-08 21:48:28 +00:00
|
|
|
if (type != nsIDocShellTreeItem::typeContent)
|
|
|
|
return PR_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefServiceCID));
|
|
|
|
if (!prefs)
|
|
|
|
return PR_FALSE;
|
|
|
|
|
|
|
|
if (!mIsDocumentLoaded || mRunningTimeout) {
|
|
|
|
PRBool blockOpenOnLoad = PR_FALSE;
|
|
|
|
prefs->GetBoolPref("dom.disable_open_during_load", &blockOpenOnLoad);
|
|
|
|
if (blockOpenOnLoad) {
|
2001-08-31 04:06:39 +00:00
|
|
|
#ifdef DEBUG
|
2002-03-08 21:48:28 +00:00
|
|
|
printf ("*** Scripts executed during (un)load or as a result of "
|
|
|
|
"setTimeout() are potential javascript abuse points.\n");
|
|
|
|
#endif
|
|
|
|
return PR_TRUE;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
PRInt32 clickDelay = 0;
|
|
|
|
prefs->GetIntPref("dom.disable_open_click_delay", &clickDelay);
|
|
|
|
if (clickDelay) {
|
|
|
|
PRTime now, ll_delta;
|
|
|
|
PRInt32 delta;
|
|
|
|
now = PR_Now();
|
|
|
|
LL_SUB(ll_delta, now, mLastMouseButtonAction);
|
|
|
|
LL_L2I(delta, ll_delta);
|
|
|
|
delta /= 1000;
|
|
|
|
if (delta > clickDelay)
|
|
|
|
{
|
|
|
|
#ifdef DEBUG
|
|
|
|
printf ("*** Scripts executed more than %ims after a mouse button "
|
|
|
|
"action are potential javascript abuse points (%i.)\n",
|
|
|
|
clickDelay, delta);
|
2001-08-31 04:06:39 +00:00
|
|
|
#endif
|
2002-01-08 09:19:01 +00:00
|
|
|
return PR_TRUE;
|
|
|
|
}
|
|
|
|
}
|
2001-08-31 04:06:39 +00:00
|
|
|
}
|
2002-02-09 03:36:55 +00:00
|
|
|
|
2001-08-31 04:06:39 +00:00
|
|
|
return PR_FALSE;
|
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::Open(const nsAString& aUrl,
|
|
|
|
const nsAString& aName,
|
|
|
|
const nsAString& aOptions,
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsIDOMWindow **_retval)
|
|
|
|
{
|
|
|
|
return OpenInternal(aUrl, aName, aOptions, PR_FALSE, nsnull, 0, nsnull,
|
|
|
|
_retval);
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Open(nsIDOMWindow **_retval)
|
1999-09-03 22:41:56 +00:00
|
|
|
{
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_ENSURE_STATE(sXPConnect);
|
|
|
|
nsresult rv = NS_OK;
|
2001-08-31 04:06:39 +00:00
|
|
|
|
|
|
|
/* If we're in a commonly abused state (top level script, running a timeout,
|
|
|
|
* or onload/onunload), and the preference is enabled, block the window.open().
|
|
|
|
*/
|
|
|
|
if (CheckForAbusePoint()) {
|
|
|
|
#ifdef DEBUG
|
2002-03-08 21:48:28 +00:00
|
|
|
printf ("*** Blocking window.open.\n");
|
2001-08-31 04:06:39 +00:00
|
|
|
#endif
|
2002-03-08 21:48:28 +00:00
|
|
|
*_retval = nsnull;
|
|
|
|
return NS_OK;
|
2001-08-31 04:06:39 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsCOMPtr<nsIXPCNativeCallContext> ncc;
|
|
|
|
|
|
|
|
rv = sXPConnect->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);
|
|
|
|
|
|
|
|
nsAutoString url, name, options;
|
|
|
|
|
|
|
|
PRUint32 argc;
|
|
|
|
jsval *argv = nsnull;
|
|
|
|
|
|
|
|
ncc->GetArgc(&argc);
|
|
|
|
ncc->GetArgvPtr(&argv);
|
|
|
|
|
|
|
|
if (argc > 0) {
|
|
|
|
nsJSUtils::ConvertJSValToString(url, cx, argv[0]);
|
|
|
|
|
|
|
|
if (argc > 1) {
|
|
|
|
nsJSUtils::ConvertJSValToString(name, cx, argv[1]);
|
|
|
|
|
|
|
|
if (argc > 2) {
|
|
|
|
nsJSUtils::ConvertJSValToString(options, cx, argv[2]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return OpenInternal(url, name, options, PR_FALSE, nsnull, 0, nsnull,
|
|
|
|
_retval);
|
1999-09-03 22:41:56 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
// like Open, but attaches to the new window any extra parameters past
|
2000-02-08 13:40:10 +00:00
|
|
|
// [features] as a JS property named "arguments"
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::OpenDialog(const nsAString& aUrl,
|
|
|
|
const nsAString& aName,
|
|
|
|
const nsAString& aOptions,
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsISupports* aExtraArgument,
|
|
|
|
nsIDOMWindow** _retval)
|
|
|
|
{
|
|
|
|
return OpenInternal(aUrl, aName, aOptions, PR_TRUE, nsnull, 0,
|
|
|
|
aExtraArgument, _retval);
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::OpenDialog(nsIDOMWindow** _retval)
|
|
|
|
{
|
2002-05-17 22:24:06 +00:00
|
|
|
if (!IsCallerChrome()) {
|
|
|
|
return NS_ERROR_DOM_SECURITY_ERR;
|
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_ENSURE_STATE(sXPConnect);
|
|
|
|
|
|
|
|
nsresult rv = NS_OK;
|
|
|
|
nsCOMPtr<nsIXPCNativeCallContext> ncc;
|
|
|
|
|
|
|
|
rv = sXPConnect->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);
|
|
|
|
|
|
|
|
nsAutoString url, name, options;
|
|
|
|
|
|
|
|
PRUint32 argc;
|
|
|
|
jsval *argv = nsnull;
|
|
|
|
|
|
|
|
ncc->GetArgc(&argc);
|
|
|
|
ncc->GetArgvPtr(&argv);
|
|
|
|
|
|
|
|
if (argc > 0) {
|
|
|
|
nsJSUtils::ConvertJSValToString(url, cx, argv[0]);
|
|
|
|
|
|
|
|
if (argc > 1) {
|
|
|
|
nsJSUtils::ConvertJSValToString(name, cx, argv[1]);
|
|
|
|
|
|
|
|
if (argc > 2) {
|
|
|
|
nsJSUtils::ConvertJSValToString(options, cx, argv[2]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return OpenInternal(url, name, options, PR_TRUE, argv, argc, nsnull,
|
|
|
|
_retval);
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetFrames(nsIDOMWindow** aFrames)
|
1999-12-17 06:11:45 +00:00
|
|
|
{
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
*aFrames = this;
|
|
|
|
NS_ADDREF(*aFrames);
|
|
|
|
|
2002-02-05 05:47:22 +00:00
|
|
|
FlushPendingNotifications(PR_FALSE);
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
|
|
|
return NS_OK;
|
1999-12-17 06:11:45 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Close()
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2001-10-16 21:19:05 +00:00
|
|
|
nsCOMPtr<nsIDOMWindow> parent;
|
|
|
|
GetParent(getter_AddRefs(parent));
|
|
|
|
|
|
|
|
if (parent != NS_STATIC_CAST(nsIDOMWindow *, this)) {
|
|
|
|
// window.close() is called on a frame in a frameset, such calls
|
|
|
|
// are ignored.
|
2002-02-26 05:28:26 +00:00
|
|
|
|
2001-10-16 21:19:05 +00:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2002-06-05 00:31:45 +00:00
|
|
|
// Fire a DOM event notifying listeners that this window is about to
|
|
|
|
// be closed. The tab UI code may choose to cancel the default
|
|
|
|
// action for this event, if so, we won't actually close the window
|
|
|
|
// (since the tab UI code will close the tab in stead). Sure, this
|
|
|
|
// could be abused by content code, but do we care? I don't think
|
|
|
|
// so...
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDOMDocumentEvent> doc(do_QueryInterface(mDocument));
|
|
|
|
nsCOMPtr<nsIDOMEvent> event;
|
|
|
|
|
|
|
|
if (doc) {
|
|
|
|
doc->CreateEvent(NS_LITERAL_STRING("Events"), getter_AddRefs(event));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (event) {
|
|
|
|
event->InitEvent(NS_LITERAL_STRING("DOMWindowClose"), PR_TRUE, PR_TRUE);
|
|
|
|
|
|
|
|
PRBool executeDefault = PR_TRUE;
|
|
|
|
DispatchEvent(event, &executeDefault);
|
|
|
|
|
|
|
|
if (!executeDefault) {
|
|
|
|
// Someone chose to prevent the default action for this event,
|
|
|
|
// if so, let's not close this window after all...
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-02-26 05:28:26 +00:00
|
|
|
// Note: the basic security check, rejecting windows not opened through JS,
|
|
|
|
// has been removed. This was approved long ago by ...you're going to call me
|
|
|
|
// on this, aren't you... well it was. And anyway, a better means is coming.
|
|
|
|
// In the new world of application-level interfaces being written in JS, this
|
|
|
|
// security check was causing problems.
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
|
|
|
nsCOMPtr<nsIJSContextStack> stack =
|
2002-03-20 11:23:13 +00:00
|
|
|
do_GetService(sJSStackContractID);
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
2001-08-07 05:27:42 +00:00
|
|
|
JSContext *cx = nsnull;
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
|
|
|
if (stack) {
|
|
|
|
stack->Peek(&cx);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (cx) {
|
2002-02-09 03:36:55 +00:00
|
|
|
nsCOMPtr<nsIScriptContext> currentCX =
|
2001-08-07 05:27:42 +00:00
|
|
|
NS_STATIC_CAST(nsIScriptContext *, ::JS_GetContextPrivate(cx));
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
|
|
|
if (currentCX && currentCX == mContext) {
|
|
|
|
return currentCX->SetTerminationFunction(CloseWindow,
|
|
|
|
NS_STATIC_CAST(nsIDOMWindow *,
|
|
|
|
this));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// If we get past the above we're closing the window right now.
|
|
|
|
return ReallyCloseWindow();
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::ReallyCloseWindow()
|
|
|
|
{
|
2000-02-08 13:40:10 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
|
2001-10-16 06:38:04 +00:00
|
|
|
// If there's no treeOwnerAsWin, this window must already be closed.
|
|
|
|
|
|
|
|
if (treeOwnerAsWin) {
|
|
|
|
treeOwnerAsWin->Destroy();
|
|
|
|
CleanUp();
|
|
|
|
}
|
1999-10-06 22:07:42 +00:00
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
return NS_OK;
|
1999-10-06 22:07:42 +00:00
|
|
|
}
|
|
|
|
|
2002-04-17 04:17:16 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetFrameElement(nsIDOMElement** aFrameElement)
|
|
|
|
{
|
|
|
|
*aFrameElement = nsnull;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDocShell> docShell;
|
|
|
|
GetDocShell(getter_AddRefs(docShell));
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellTI(do_QueryInterface(docShell));
|
|
|
|
|
|
|
|
if (!docShellTI) {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> parent;
|
|
|
|
docShellTI->GetSameTypeParent(getter_AddRefs(parent));
|
|
|
|
|
|
|
|
if (!parent || parent == docShellTI) {
|
|
|
|
// We're at a chrome boundary, don't expose the chrome iframe
|
|
|
|
// element to content code.
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
*aFrameElement = mFrameElement;
|
|
|
|
NS_IF_ADDREF(*aFrameElement);
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetFrameElementInternal(nsIDOMElement** aFrameElement)
|
|
|
|
{
|
|
|
|
*aFrameElement = mFrameElement;
|
|
|
|
NS_IF_ADDREF(*aFrameElement);
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetFrameElementInternal(nsIDOMElement* aFrameElement)
|
|
|
|
{
|
|
|
|
mFrameElement = aFrameElement;
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2002-04-12 02:15:43 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::IsLoadingOrRunningTimeout(PRBool* aResult)
|
|
|
|
{
|
|
|
|
*aResult = !mIsDocumentLoaded || mRunningTimeout;
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::UpdateCommands(const nsAString& anAction)
|
1999-11-25 00:00:21 +00:00
|
|
|
{
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsCOMPtr<nsIDOMWindowInternal> rootWindow;
|
|
|
|
GetPrivateRoot(getter_AddRefs(rootWindow));
|
|
|
|
if (!rootWindow)
|
|
|
|
return NS_OK;
|
2000-02-11 00:57:54 +00:00
|
|
|
|
2000-11-04 08:21:20 +00:00
|
|
|
nsCOMPtr<nsIDOMDocument> document;
|
|
|
|
rootWindow->GetDocument(getter_AddRefs(document));
|
|
|
|
|
|
|
|
if (document) {
|
2000-02-11 00:57:54 +00:00
|
|
|
// See if we contain a XUL document.
|
2000-11-04 08:21:20 +00:00
|
|
|
nsCOMPtr<nsIDOMXULDocument> xulDoc = do_QueryInterface(document);
|
2000-02-11 00:57:54 +00:00
|
|
|
if (xulDoc) {
|
|
|
|
// Retrieve the command dispatcher and call updateCommands on it.
|
|
|
|
nsCOMPtr<nsIDOMXULCommandDispatcher> xulCommandDispatcher;
|
|
|
|
xulDoc->GetCommandDispatcher(getter_AddRefs(xulCommandDispatcher));
|
|
|
|
xulCommandDispatcher->UpdateCommands(anAction);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::Escape(const nsAString& aStr,
|
|
|
|
nsAString& aReturn)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
nsCOMPtr<nsIUnicodeEncoder> encoder;
|
|
|
|
nsAutoString charset;
|
1999-10-06 22:07:42 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsICharsetConverterManager>
|
|
|
|
ccm(do_GetService(kCharsetConverterManagerCID));
|
|
|
|
NS_ENSURE_TRUE(ccm, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Get the document character set
|
2001-12-16 11:58:03 +00:00
|
|
|
charset.Assign(NS_LITERAL_STRING("UTF-8")); // default to utf-8
|
2000-08-22 03:51:17 +00:00
|
|
|
if (mDocument) {
|
|
|
|
nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (doc)
|
|
|
|
result = doc->GetDocumentCharacterSet(charset);
|
|
|
|
}
|
|
|
|
if (NS_FAILED(result))
|
|
|
|
return result;
|
|
|
|
|
|
|
|
// Get an encoder for the character set
|
|
|
|
result = ccm->GetUnicodeEncoder(&charset, getter_AddRefs(encoder));
|
|
|
|
if (NS_FAILED(result))
|
|
|
|
return result;
|
|
|
|
|
|
|
|
result = encoder->Reset();
|
|
|
|
if (NS_FAILED(result))
|
|
|
|
return result;
|
|
|
|
|
|
|
|
PRInt32 maxByteLen, srcLen;
|
|
|
|
srcLen = aStr.Length();
|
2000-09-13 03:24:57 +00:00
|
|
|
|
2001-04-02 19:40:52 +00:00
|
|
|
const nsPromiseFlatString& flatSrc = PromiseFlatString(aStr);
|
2000-09-13 03:24:57 +00:00
|
|
|
const PRUnichar* src = flatSrc.get();
|
2000-08-22 03:51:17 +00:00
|
|
|
|
|
|
|
// 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
|
2000-08-23 17:27:06 +00:00
|
|
|
char* dest = (char *) nsMemory::Alloc(maxByteLen + 1);
|
2000-08-22 03:51:17 +00:00
|
|
|
PRInt32 destLen2, destLen = maxByteLen;
|
|
|
|
if (!dest)
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
2002-02-09 03:36:55 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Convert from unicode to the character set
|
|
|
|
result = encoder->Convert(src, &srcLen, dest, &destLen);
|
|
|
|
if (NS_FAILED(result)) {
|
|
|
|
nsMemory::Free(dest);
|
|
|
|
return result;
|
|
|
|
}
|
1998-10-01 22:21:59 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Allow the encoder to finish the conversion
|
|
|
|
destLen2 = maxByteLen - destLen;
|
|
|
|
encoder->Finish(dest + destLen, &destLen2);
|
|
|
|
dest[destLen + destLen2] = '\0';
|
1999-10-06 22:07:42 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Escape the string
|
|
|
|
char *outBuf =
|
|
|
|
nsEscape(dest, nsEscapeMask(url_XAlphas | url_XPAlphas | url_Path));
|
2001-05-19 11:27:30 +00:00
|
|
|
CopyASCIItoUCS2(nsDependentCString(outBuf), aReturn);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsMemory::Free(outBuf);
|
|
|
|
nsMemory::Free(dest);
|
1999-10-06 22:07:42 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return result;
|
1999-10-06 22:07:42 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::Unescape(const nsAString& aStr,
|
|
|
|
nsAString& aReturn)
|
1999-10-06 22:07:42 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
nsCOMPtr<nsIUnicodeDecoder> decoder;
|
|
|
|
nsAutoString charset;
|
1999-10-06 22:07:42 +00:00
|
|
|
|
2001-08-21 09:02:22 +00:00
|
|
|
aReturn.Truncate();
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsICharsetConverterManager>
|
|
|
|
ccm(do_GetService(kCharsetConverterManagerCID));
|
|
|
|
NS_ENSURE_TRUE(ccm, NS_ERROR_FAILURE);
|
1999-10-06 22:07:42 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Get the document character set
|
2001-12-16 11:58:03 +00:00
|
|
|
charset.Assign(NS_LITERAL_STRING("UTF-8")); // default to utf-8
|
2000-08-22 03:51:17 +00:00
|
|
|
if (mDocument) {
|
|
|
|
nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (doc)
|
|
|
|
result = doc->GetDocumentCharacterSet(charset);
|
|
|
|
}
|
|
|
|
if (NS_FAILED(result))
|
|
|
|
return result;
|
|
|
|
|
|
|
|
// Get an decoder for the character set
|
|
|
|
result = ccm->GetUnicodeDecoder(&charset, getter_AddRefs(decoder));
|
|
|
|
if (NS_FAILED(result))
|
|
|
|
return result;
|
|
|
|
|
|
|
|
result = decoder->Reset();
|
|
|
|
if (NS_FAILED(result))
|
|
|
|
return result;
|
|
|
|
|
|
|
|
// Need to copy to do the two-byte to one-byte deflation
|
2001-08-21 09:02:22 +00:00
|
|
|
char *inBuf = ToNewCString(aStr);
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!inBuf)
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
|
|
|
|
// Unescape the string
|
|
|
|
char *src = nsUnescape(inBuf);
|
|
|
|
|
|
|
|
PRInt32 maxLength, srcLen;
|
2002-02-19 07:36:56 +00:00
|
|
|
srcLen = strlen(src);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
|
|
|
// Get the expected length of the result string
|
|
|
|
result = decoder->GetMaxLength(src, srcLen, &maxLength);
|
2001-08-21 09:02:22 +00:00
|
|
|
if (NS_FAILED(result) || !maxLength) {
|
2000-08-22 03:51:17 +00:00
|
|
|
nsMemory::Free(src);
|
|
|
|
return result;
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Allocate a buffer of the maximum length
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
PRUnichar *dest = (PRUnichar*)nsMemory::Alloc(sizeof(PRUnichar) * maxLength);
|
2000-08-22 03:51:17 +00:00
|
|
|
PRInt32 destLen = maxLength;
|
|
|
|
if (!dest) {
|
|
|
|
nsMemory::Free(src);
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Convert from character set to unicode
|
|
|
|
result = decoder->Convert(src, &srcLen, dest, &destLen);
|
|
|
|
nsMemory::Free(src);
|
|
|
|
if (NS_FAILED(result)) {
|
|
|
|
nsMemory::Free(dest);
|
|
|
|
return result;
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
aReturn.Assign(dest, destLen);
|
|
|
|
nsMemory::Free(dest);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetSelection(nsISelection** aSelection)
|
2000-04-28 14:02:29 +00:00
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(aSelection);
|
|
|
|
*aSelection = nsnull;
|
|
|
|
|
|
|
|
if (!mDocShell)
|
|
|
|
return NS_OK;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
mDocShell->GetPresShell(getter_AddRefs(presShell));
|
|
|
|
|
|
|
|
if (!presShell)
|
|
|
|
return NS_OK;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIFrameSelection> selection;
|
2000-08-22 03:51:17 +00:00
|
|
|
presShell->GetFrameSelection(getter_AddRefs(selection));
|
2000-04-28 14:02:29 +00:00
|
|
|
|
|
|
|
if (!selection)
|
|
|
|
return NS_OK;
|
|
|
|
|
|
|
|
return selection->GetSelection(nsISelectionController::SELECTION_NORMAL,
|
|
|
|
aSelection);
|
|
|
|
}
|
|
|
|
|
2001-09-30 19:56:32 +00:00
|
|
|
// Non-scriptable version of window.find(), part of nsIDOMWindowInternal
|
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::Find(const nsAString& aStr,
|
2001-09-30 19:56:32 +00:00
|
|
|
PRBool aCaseSensitive,
|
|
|
|
PRBool aBackwards,
|
|
|
|
PRBool aWrapAround,
|
|
|
|
PRBool aWholeWord,
|
|
|
|
PRBool aSearchInFrames,
|
|
|
|
PRBool aShowDialog,
|
|
|
|
PRBool *aDidFind)
|
|
|
|
{
|
|
|
|
return FindInternal(aStr, aCaseSensitive, aBackwards, aWrapAround,
|
|
|
|
aWholeWord, aSearchInFrames, aShowDialog, aDidFind);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Scriptable version of window.find() which takes a variable number of
|
|
|
|
// arguments, part of nsIDOMJSWindow.
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Find(PRBool *aDidFind)
|
|
|
|
{
|
|
|
|
NS_ENSURE_STATE(sXPConnect);
|
|
|
|
nsresult rv = NS_OK;
|
|
|
|
|
|
|
|
// We get the arguments passed to the function using the XPConnect native
|
|
|
|
// call context.
|
|
|
|
nsCOMPtr<nsIXPCNativeCallContext> ncc;
|
|
|
|
|
|
|
|
rv = sXPConnect->GetCurrentNativeCallContext(getter_AddRefs(ncc));
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
NS_ASSERTION(ncc, "No Native Call Context."
|
|
|
|
"Please don't call this method from C++.");
|
|
|
|
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);
|
|
|
|
|
|
|
|
// Parse the arguments passed to the function
|
|
|
|
nsAutoString searchStr;
|
|
|
|
PRBool caseSensitive = PR_FALSE;
|
|
|
|
PRBool backwards = PR_FALSE;
|
|
|
|
PRBool wrapAround = PR_FALSE;
|
|
|
|
PRBool showDialog = PR_FALSE;
|
|
|
|
PRBool wholeWord = PR_FALSE;
|
|
|
|
PRBool searchInFrames = PR_FALSE;
|
|
|
|
|
|
|
|
if (argc > 0) {
|
|
|
|
// First arg is the search pattern
|
|
|
|
nsJSUtils::ConvertJSValToString(searchStr, cx, argv[0]);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (argc > 1 && !JS_ValueToBoolean(cx, argv[1], &caseSensitive)) {
|
|
|
|
// Second arg is the case sensitivity
|
|
|
|
caseSensitive = PR_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (argc > 2 && !JS_ValueToBoolean(cx, argv[2], &backwards)) {
|
|
|
|
// Third arg specifies whether to search backwards
|
|
|
|
backwards = PR_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (argc > 3 && !JS_ValueToBoolean(cx, argv[3], &wrapAround)) {
|
|
|
|
// Fourth arg specifies whether we should wrap the search
|
|
|
|
wrapAround = PR_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (argc > 4 && !JS_ValueToBoolean(cx, argv[4], &wholeWord)) {
|
|
|
|
// Fifth arg specifies whether we should show the Find dialog
|
|
|
|
wholeWord = PR_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (argc > 5 && !JS_ValueToBoolean(cx, argv[5], &searchInFrames)) {
|
|
|
|
// Sixth arg specifies whether we should search only for whole words
|
|
|
|
searchInFrames = PR_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (argc > 6 && !JS_ValueToBoolean(cx, argv[6], &showDialog)) {
|
|
|
|
// Seventh arg specifies whether we should search in all frames
|
|
|
|
showDialog = PR_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
return FindInternal(searchStr, caseSensitive, backwards, wrapAround,
|
|
|
|
wholeWord, searchInFrames, showDialog, aDidFind);
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::FindInternal(const nsAString& aStr,
|
2001-09-30 19:56:32 +00:00
|
|
|
PRBool caseSensitive,
|
|
|
|
PRBool backwards,
|
|
|
|
PRBool wrapAround,
|
|
|
|
PRBool wholeWord,
|
|
|
|
PRBool searchInFrames,
|
|
|
|
PRBool showDialog,
|
|
|
|
PRBool *aDidFind)
|
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(aDidFind);
|
|
|
|
nsresult rv = NS_OK;
|
|
|
|
*aDidFind = PR_FALSE;
|
|
|
|
|
|
|
|
// GetInterface(NS_GET_IID(nsIWebBrowserFind))
|
|
|
|
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 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;
|
|
|
|
}
|
|
|
|
|
2002-02-06 04:37:26 +00:00
|
|
|
static PRBool
|
|
|
|
Is8bit(const nsAString& aString)
|
|
|
|
{
|
|
|
|
static const PRUnichar EIGHT_BIT = PRUnichar(~0x00FF);
|
|
|
|
|
|
|
|
nsAString::const_iterator done_reading;
|
|
|
|
aString.EndReading(done_reading);
|
|
|
|
|
|
|
|
// for each chunk of |aString|...
|
|
|
|
PRUint32 fragmentLength = 0;
|
|
|
|
nsAString::const_iterator iter;
|
|
|
|
for (aString.BeginReading(iter); iter != done_reading;
|
|
|
|
iter.advance(PRInt32(fragmentLength))) {
|
|
|
|
fragmentLength = PRUint32(iter.size_forward());
|
|
|
|
const PRUnichar* c = iter.get();
|
|
|
|
const PRUnichar* fragmentEnd = c + fragmentLength;
|
|
|
|
|
|
|
|
// for each character in this chunk...
|
|
|
|
while (c < fragmentEnd)
|
|
|
|
if (*c++ & EIGHT_BIT)
|
|
|
|
return PR_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
return PR_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Atob(const nsAString& aAsciiBase64String,
|
|
|
|
nsAString& aBinaryData)
|
|
|
|
{
|
|
|
|
aBinaryData.Truncate();
|
|
|
|
|
|
|
|
if (!Is8bit(aAsciiBase64String)) {
|
|
|
|
return NS_ERROR_DOM_INVALID_CHARACTER_ERR;
|
|
|
|
}
|
|
|
|
|
|
|
|
char *base64 = ToNewCString(aAsciiBase64String);
|
|
|
|
if (!base64) {
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
}
|
|
|
|
|
|
|
|
PRInt32 dataLen = aAsciiBase64String.Length();
|
|
|
|
|
|
|
|
PRInt32 resultLen = dataLen;
|
|
|
|
if (base64[dataLen - 1] == '=') {
|
|
|
|
if (base64[dataLen - 2] == '=') {
|
|
|
|
resultLen = dataLen - 2;
|
|
|
|
} else {
|
|
|
|
resultLen = dataLen - 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
resultLen = ((resultLen * 3) / 4);
|
|
|
|
|
|
|
|
char *bin_data = PL_Base64Decode(base64, aAsciiBase64String.Length(),
|
|
|
|
nsnull);
|
|
|
|
if (!bin_data) {
|
|
|
|
nsMemory::Free(base64);
|
|
|
|
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
}
|
|
|
|
|
|
|
|
CopyASCIItoUCS2(Substring(bin_data, bin_data + resultLen), aBinaryData);
|
|
|
|
|
|
|
|
nsMemory::Free(base64);
|
|
|
|
PR_Free(bin_data);
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Btoa(const nsAString& aBinaryData,
|
|
|
|
nsAString& aAsciiBase64String)
|
|
|
|
{
|
|
|
|
aAsciiBase64String.Truncate();
|
|
|
|
|
|
|
|
if (!Is8bit(aBinaryData)) {
|
|
|
|
return NS_ERROR_DOM_INVALID_CHARACTER_ERR;
|
|
|
|
}
|
|
|
|
|
|
|
|
char *bin_data = ToNewCString(aBinaryData);
|
|
|
|
if (!bin_data) {
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
}
|
|
|
|
|
|
|
|
PRInt32 resultLen = ((aBinaryData.Length() + 2) / 3) * 4;
|
|
|
|
|
|
|
|
char *base64 = PL_Base64Encode(bin_data, aBinaryData.Length(), nsnull);
|
|
|
|
if (!base64) {
|
|
|
|
nsMemory::Free(bin_data);
|
|
|
|
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
}
|
|
|
|
|
|
|
|
CopyASCIItoUCS2(nsDependentCString(base64, resultLen), aAsciiBase64String);
|
|
|
|
|
|
|
|
PR_Free(base64);
|
|
|
|
nsMemory::Free(bin_data);
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl::nsIDOMEventTarget
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::AddEventListener(const nsAString& aType,
|
2000-08-22 03:51:17 +00:00
|
|
|
nsIDOMEventListener* aListener,
|
|
|
|
PRBool aUseCapture)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2002-04-20 01:48:32 +00:00
|
|
|
nsCOMPtr<nsIEventListenerManager> manager;
|
|
|
|
|
|
|
|
if (NS_SUCCEEDED(GetListenerManager(getter_AddRefs(manager)))) {
|
|
|
|
PRInt32 flags = aUseCapture ? NS_EVENT_FLAG_CAPTURE : NS_EVENT_FLAG_BUBBLE;
|
|
|
|
|
|
|
|
manager->AddEventListenerByType(aListener, aType, flags);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
return NS_ERROR_FAILURE;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1999-09-17 20:13:52 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::RemoveEventListener(const nsAString& aType,
|
2000-08-22 03:51:17 +00:00
|
|
|
nsIDOMEventListener* aListener,
|
|
|
|
PRBool aUseCapture)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2002-04-20 01:48:32 +00:00
|
|
|
if (mListenerManager) {
|
|
|
|
PRInt32 flags = aUseCapture ? NS_EVENT_FLAG_CAPTURE : NS_EVENT_FLAG_BUBBLE;
|
|
|
|
|
|
|
|
mListenerManager->RemoveEventListenerByType(aListener, aType, flags);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
return NS_ERROR_FAILURE;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::DispatchEvent(nsIDOMEvent* aEvent, PRBool* _retval)
|
2000-05-16 11:35:12 +00:00
|
|
|
{
|
|
|
|
if (mDocument) {
|
|
|
|
nsCOMPtr<nsIDocument> idoc(do_QueryInterface(mDocument));
|
|
|
|
if (idoc) {
|
|
|
|
// Obtain a presentation context
|
|
|
|
PRInt32 count = idoc->GetNumberOfShells();
|
|
|
|
if (count == 0)
|
|
|
|
return NS_OK;
|
|
|
|
|
2001-06-20 03:27:48 +00:00
|
|
|
nsCOMPtr<nsIPresShell> shell;
|
|
|
|
idoc->GetShellAt(0, getter_AddRefs(shell));
|
2000-05-16 11:35:12 +00:00
|
|
|
|
|
|
|
// Retrieve the context
|
|
|
|
nsCOMPtr<nsIPresContext> aPresContext;
|
|
|
|
shell->GetPresContext(getter_AddRefs(aPresContext));
|
|
|
|
|
|
|
|
nsCOMPtr<nsIEventStateManager> esm;
|
|
|
|
if (NS_SUCCEEDED(aPresContext->GetEventStateManager(getter_AddRefs(esm)))) {
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
return esm->DispatchNewEvent(NS_STATIC_CAST(nsIScriptGlobalObject *,
|
2001-09-27 21:43:00 +00:00
|
|
|
this), aEvent, _retval);
|
2000-05-16 11:35:12 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl::nsIDOMEventReceiver
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::AddEventListenerByIID(nsIDOMEventListener* aListener,
|
|
|
|
const nsIID& aIID)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIEventListenerManager> manager;
|
1999-06-11 21:49:41 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (NS_OK == GetListenerManager(getter_AddRefs(manager))) {
|
|
|
|
manager->AddEventListenerByIID(aListener, aIID, NS_EVENT_FLAG_BUBBLE);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
return NS_ERROR_FAILURE;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::RemoveEventListenerByIID(nsIDOMEventListener* aListener,
|
|
|
|
const nsIID& aIID)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (mListenerManager) {
|
|
|
|
mListenerManager->RemoveEventListenerByIID(aListener, aIID,
|
|
|
|
NS_EVENT_FLAG_BUBBLE);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
return NS_ERROR_FAILURE;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IMETHODIMP
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
GlobalWindowImpl::GetListenerManager(nsIEventListenerManager **aResult)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2001-05-17 06:04:04 +00:00
|
|
|
if (!mListenerManager) {
|
|
|
|
static NS_DEFINE_CID(kEventListenerManagerCID,
|
|
|
|
NS_EVENTLISTENERMANAGER_CID);
|
|
|
|
nsresult rv;
|
1999-07-12 23:40:01 +00:00
|
|
|
|
2001-05-17 06:04:04 +00:00
|
|
|
mListenerManager = do_CreateInstance(kEventListenerManagerCID, &rv);
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2001-05-17 06:04:04 +00:00
|
|
|
|
|
|
|
return CallQueryInterface(mListenerManager, aResult);
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1999-07-12 23:40:01 +00:00
|
|
|
|
2002-04-20 01:48:32 +00:00
|
|
|
//XXX I need another way around the circular link problem.
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IMETHODIMP
|
2002-04-20 01:48:32 +00:00
|
|
|
GlobalWindowImpl::GetNewListenerManager(nsIEventListenerManager **aResult)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2002-04-20 01:48:32 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
2002-04-20 01:48:32 +00:00
|
|
|
GlobalWindowImpl::HandleEvent(nsIDOMEvent *aEvent)
|
2000-02-16 06:59:07 +00:00
|
|
|
{
|
2002-04-20 01:48:32 +00:00
|
|
|
PRBool noDefault;
|
|
|
|
return DispatchEvent(aEvent, &noDefault);
|
2000-02-16 06:59:07 +00:00
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl::nsPIDOMWindow
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetPrivateParent(nsPIDOMWindow ** aParent)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDOMWindow> parent;
|
|
|
|
*aParent = nsnull; // Set to null so we can bail out later
|
1999-10-15 21:52:37 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
GetParent(getter_AddRefs(parent));
|
(13163, r=alecf, scc, waterson, others; names available on request)
- Fix most of bug 13163 (see TODO for rest). This entails adding a version-string argument to nsIScriptContext::EvaluateString and passing it around lots of places in content sinks.
- Fix leaks and confusion about mSecurityManager and mNameSpaceManager in nsJSEnvironment.cpp. These still need to move from nsJSContext to nsGlobalWindow or thereabouts, jband and vidur are looking at that.
- Added comments and expanded tabs in nsJSEnvironment.cpp, esp. to EvaluateString. Also changed various nsresult vars to be named rv. Also restored brace/style conformity to nsJSProtocolHandler.cpp.
- Factored CompileFunction from AddScriptEventListener to pave the way for brutal sharing of compiled JS event handlers via JS_CloneFunctionObject.
- Lots of nsCOMPtr uses added. I'm using one for mNameSpaceManager. Hold mSecurityManager as a service explicitly, on the other hand (awaiting scc's fix to allow comptrs for services), and release in nsJSContext's dtor (fixing a leak). These two managers should be moved to the window object -- TODO item below.
- Hold JSRuntimeService along with JSRuntime for live of nsJSEnvironment, fix for shaver.
- Fix window.setTimeout etc. so the filename and line number of the timeout expr is propagated. This meant factoring nsJSUtils.cpp code.
- Fix all content sinks to use the same, and up-to-date JavaScript version parsing (whether for script type or for old language attribute); also fix SplitMimeType clones to strip whitespace.
- With waterson, fix bug in brutal-sharing version of XUL content sink: script src= should not evaluate the inline content of its tag.
1999-10-31 00:43:30 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (NS_STATIC_CAST(nsIDOMWindow *, this) == parent.get()) {
|
|
|
|
nsCOMPtr<nsIContent> chromeElement(do_QueryInterface(mChromeEventHandler));
|
|
|
|
if (!chromeElement)
|
|
|
|
return NS_OK; // This is ok, just means a null parent.
|
1999-07-12 23:40:01 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocument> doc;
|
|
|
|
chromeElement->GetDocument(*getter_AddRefs(doc));
|
|
|
|
if (!doc)
|
|
|
|
return NS_OK; // This is ok, just means a null parent.
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIScriptGlobalObject> globalObject;
|
|
|
|
doc->GetScriptGlobalObject(getter_AddRefs(globalObject));
|
|
|
|
if (!globalObject)
|
|
|
|
return NS_OK; // This is ok, just means a null parent.
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
parent = do_QueryInterface(globalObject);
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (parent)
|
|
|
|
CallQueryInterface(parent.get(), aParent);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetPrivateRoot(nsIDOMWindowInternal ** aParent)
|
2000-02-11 00:57:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
*aParent = nsnull; // Set to null so we can bail out later
|
2000-02-11 00:57:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDOMWindow> parent;
|
|
|
|
GetTop(getter_AddRefs(parent));
|
2000-02-11 00:57:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIScriptGlobalObject> parentTop = do_QueryInterface(parent);
|
|
|
|
nsCOMPtr<nsIDocShell> docShell;
|
2000-10-30 23:47:11 +00:00
|
|
|
NS_ASSERTION(parentTop, "cannot get parentTop");
|
|
|
|
if(parentTop == nsnull)
|
|
|
|
return NS_ERROR_FAILURE;
|
2000-08-22 03:51:17 +00:00
|
|
|
parentTop->GetDocShell(getter_AddRefs(docShell));
|
2000-11-04 08:21:20 +00:00
|
|
|
|
|
|
|
// Get the chrome event handler from the doc shell, since we only
|
|
|
|
// want to deal with XUL chrome handlers and not the new kind of
|
|
|
|
// window root handler.
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIChromeEventHandler> chromeEventHandler;
|
|
|
|
docShell->GetChromeEventHandler(getter_AddRefs(chromeEventHandler));
|
2000-02-11 00:57:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIContent> chromeElement(do_QueryInterface(mChromeEventHandler));
|
|
|
|
if (chromeElement) {
|
|
|
|
nsCOMPtr<nsIDocument> doc;
|
|
|
|
chromeElement->GetDocument(*getter_AddRefs(doc));
|
|
|
|
if (doc) {
|
|
|
|
nsCOMPtr<nsIScriptGlobalObject> globalObject;
|
|
|
|
doc->GetScriptGlobalObject(getter_AddRefs(globalObject));
|
|
|
|
|
|
|
|
parent = do_QueryInterface(globalObject);
|
2000-09-01 01:54:35 +00:00
|
|
|
nsCOMPtr<nsIDOMWindow> tempParent;
|
|
|
|
parent->GetTop(getter_AddRefs(tempParent));
|
|
|
|
CallQueryInterface(tempParent, aParent);
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
}
|
2000-02-11 00:57:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (parent) {
|
2000-09-01 01:54:35 +00:00
|
|
|
CallQueryInterface(parent, aParent);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-02-11 00:57:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
2000-02-11 00:57:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetLocation(nsIDOMLocation ** aLocation)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mLocation && mDocShell) {
|
|
|
|
mLocation = new LocationImpl(mDocShell);
|
|
|
|
NS_IF_ADDREF(mLocation);
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aLocation = mLocation;
|
|
|
|
NS_IF_ADDREF(mLocation);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetObjectProperty(const PRUnichar *aProperty,
|
|
|
|
nsISupports ** aObject)
|
2000-03-31 03:33:49 +00:00
|
|
|
{
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_ENSURE_TRUE(mJSObject, NS_ERROR_NOT_AVAILABLE);
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Get JSContext from stack.
|
2001-06-20 01:25:09 +00:00
|
|
|
nsCOMPtr<nsIThreadJSContextStack> stack(do_GetService(sJSStackContractID));
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_TRUE(stack, NS_ERROR_FAILURE);
|
2000-03-31 03:33:49 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
JSContext *cx;
|
|
|
|
NS_ENSURE_SUCCESS(stack->Peek(&cx), NS_ERROR_FAILURE);
|
2000-03-31 03:33:49 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!cx) {
|
|
|
|
stack->GetSafeJSContext(&cx);
|
|
|
|
NS_ENSURE_TRUE(cx, NS_ERROR_FAILURE);
|
|
|
|
}
|
2000-03-31 03:33:49 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
jsval propertyVal;
|
2000-03-31 03:33:49 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (!::JS_LookupUCProperty(cx, mJSObject,
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_REINTERPRET_CAST(const jschar *, aProperty),
|
|
|
|
nsCRT::strlen(aProperty), &propertyVal)) {
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
2000-03-31 03:33:49 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (!nsJSUtils::ConvertJSValToXPCObject(aObject, NS_GET_IID(nsISupports),
|
|
|
|
cx, propertyVal)) {
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
2000-03-31 03:33:49 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
2000-03-31 03:33:49 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Activate()
|
1998-08-07 04:45:03 +00:00
|
|
|
{
|
2000-02-11 23:42:11 +00:00
|
|
|
/*
|
2000-02-08 13:40:10 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
if(treeOwnerAsWin)
|
|
|
|
treeOwnerAsWin->SetVisibility(PR_TRUE);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
mDocShell->GetPresShell(getter_AddRefs(presShell));
|
|
|
|
NS_ENSURE_TRUE(presShell, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIViewManager> vm;
|
|
|
|
presShell->GetViewManager(getter_AddRefs(vm));
|
|
|
|
NS_ENSURE_TRUE(vm, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsIView* rootView;
|
|
|
|
vm->GetRootView(rootView);
|
|
|
|
NS_ENSURE_TRUE(rootView, NS_ERROR_FAILURE);
|
2002-02-09 03:36:55 +00:00
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
rootView->GetWidget(*getter_AddRefs(widget));
|
|
|
|
NS_ENSURE_TRUE(widget, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
return widget->SetFocus();
|
2002-02-09 03:36:55 +00:00
|
|
|
|
2000-02-11 23:42:11 +00:00
|
|
|
*/
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
2002-03-04 22:50:11 +00:00
|
|
|
if (treeOwnerAsWin) {
|
|
|
|
PRBool isEnabled = PR_TRUE;
|
|
|
|
if (NS_SUCCEEDED(treeOwnerAsWin->GetEnabled(&isEnabled)) && !isEnabled) {
|
|
|
|
NS_WARNING( "Should not try to activate a disabled window" );
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
treeOwnerAsWin->SetVisibility(PR_TRUE);
|
2002-03-04 22:50:11 +00:00
|
|
|
}
|
2000-02-11 23:42:11 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
mDocShell->GetPresShell(getter_AddRefs(presShell));
|
2002-01-16 06:43:45 +00:00
|
|
|
if (!presShell) {
|
|
|
|
NS_WARNING( "no preshell for window" );
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
2000-02-11 23:42:11 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIViewManager> vm;
|
|
|
|
presShell->GetViewManager(getter_AddRefs(vm));
|
|
|
|
NS_ENSURE_TRUE(vm, NS_ERROR_FAILURE);
|
2000-02-11 23:42:11 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsIView *rootView;
|
|
|
|
vm->GetRootView(rootView);
|
|
|
|
NS_ENSURE_TRUE(rootView, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
rootView->GetWidget(*getter_AddRefs(widget));
|
|
|
|
NS_ENSURE_TRUE(widget, NS_ERROR_FAILURE);
|
2000-02-11 23:42:11 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsEventStatus status;
|
|
|
|
nsGUIEvent guiEvent;
|
2000-02-11 23:42:11 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
guiEvent.eventStructType = NS_GUI_EVENT;
|
|
|
|
guiEvent.point.x = 0;
|
|
|
|
guiEvent.point.y = 0;
|
|
|
|
guiEvent.time = PR_IntervalNow();
|
|
|
|
guiEvent.nativeMsg = nsnull;
|
2000-09-19 03:14:31 +00:00
|
|
|
guiEvent.message = NS_ACTIVATE;
|
2000-08-22 03:51:17 +00:00
|
|
|
guiEvent.widget = widget;
|
2000-02-11 23:42:11 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
vm->DispatchEvent(&guiEvent, &status);
|
2000-02-11 23:42:11 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1999-05-17 18:52:21 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::Deactivate()
|
1999-05-17 18:52:21 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
mDocShell->GetPresShell(getter_AddRefs(presShell));
|
|
|
|
NS_ENSURE_TRUE(presShell, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIViewManager> vm;
|
|
|
|
presShell->GetViewManager(getter_AddRefs(vm));
|
|
|
|
NS_ENSURE_TRUE(vm, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsIView *rootView;
|
|
|
|
vm->GetRootView(rootView);
|
|
|
|
NS_ENSURE_TRUE(rootView, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
rootView->GetWidget(*getter_AddRefs(widget));
|
|
|
|
NS_ENSURE_TRUE(widget, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsEventStatus status;
|
|
|
|
nsGUIEvent guiEvent;
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
guiEvent.eventStructType = NS_GUI_EVENT;
|
|
|
|
guiEvent.point.x = 0;
|
|
|
|
guiEvent.point.y = 0;
|
|
|
|
guiEvent.time = PR_IntervalNow();
|
|
|
|
guiEvent.nativeMsg = nsnull;
|
|
|
|
guiEvent.message = NS_DEACTIVATE;
|
|
|
|
guiEvent.widget = widget;
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
vm->DispatchEvent(&guiEvent, &status);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1999-05-17 18:52:21 +00:00
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IMETHODIMP
|
2000-11-04 08:21:20 +00:00
|
|
|
GlobalWindowImpl::GetChromeEventHandler(nsIChromeEventHandler** aHandler)
|
2000-06-23 00:42:21 +00:00
|
|
|
{
|
2000-11-04 08:21:20 +00:00
|
|
|
*aHandler = mChromeEventHandler;
|
|
|
|
NS_IF_ADDREF(*aHandler);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
2000-06-23 00:42:21 +00:00
|
|
|
|
2000-11-04 08:21:20 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetRootFocusController(nsIFocusController** aController)
|
|
|
|
{
|
|
|
|
*aController = nsnull;
|
2000-06-23 00:42:21 +00:00
|
|
|
|
2000-09-01 01:54:35 +00:00
|
|
|
nsCOMPtr<nsIDOMWindowInternal> rootWindow;
|
2000-09-22 05:02:20 +00:00
|
|
|
GetPrivateRoot(getter_AddRefs(rootWindow));
|
|
|
|
if (rootWindow) {
|
2000-11-04 08:21:20 +00:00
|
|
|
// Obtain the chrome event handler.
|
|
|
|
nsCOMPtr<nsIChromeEventHandler> chromeHandler;
|
|
|
|
nsCOMPtr<nsPIDOMWindow> piWin(do_QueryInterface(rootWindow));
|
|
|
|
piWin->GetChromeEventHandler(getter_AddRefs(chromeHandler));
|
|
|
|
if (chromeHandler) {
|
|
|
|
nsCOMPtr<nsPIWindowRoot> windowRoot(do_QueryInterface(chromeHandler));
|
|
|
|
if (windowRoot) {
|
2001-05-03 10:09:59 +00:00
|
|
|
windowRoot->GetFocusController(aController);
|
2000-11-04 08:21:20 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
2000-11-27 07:55:20 +00:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
GlobalWindowImpl::HasMutationListeners(PRUint32 aMutationEventType,
|
|
|
|
PRBool* aResult)
|
2000-11-27 07:55:20 +00:00
|
|
|
{
|
|
|
|
*aResult = (mMutationBits & aMutationEventType) != 0;
|
|
|
|
return NS_OK;
|
|
|
|
}
|
2000-11-04 08:21:20 +00:00
|
|
|
|
2000-11-27 07:55:20 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetMutationListeners(PRUint32 aType)
|
|
|
|
{
|
|
|
|
mMutationBits |= aType;
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
2000-06-23 00:42:21 +00:00
|
|
|
}
|
|
|
|
|
2000-05-03 13:03:17 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl::nsIDOMViewCSS
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
2000-05-03 13:03:17 +00:00
|
|
|
|
2000-08-23 17:27:06 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetComputedStyle(nsIDOMElement* aElt,
|
2002-03-24 00:16:18 +00:00
|
|
|
const nsAString& aPseudoElt,
|
2000-08-23 17:27:06 +00:00
|
|
|
nsIDOMCSSStyleDeclaration** aReturn)
|
2000-05-03 13:03:17 +00:00
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(aReturn);
|
2000-05-17 06:38:43 +00:00
|
|
|
NS_ENSURE_ARG_POINTER(aElt);
|
2000-05-03 13:03:17 +00:00
|
|
|
*aReturn = nsnull;
|
|
|
|
|
2000-05-17 06:38:43 +00:00
|
|
|
NS_ENSURE_TRUE(mDocShell, NS_OK);
|
2000-05-03 13:03:17 +00:00
|
|
|
|
2000-05-17 06:38:43 +00:00
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
mDocShell->GetPresShell(getter_AddRefs(presShell));
|
|
|
|
NS_ENSURE_TRUE(presShell, NS_OK);
|
|
|
|
|
|
|
|
nsresult rv = NS_OK;
|
|
|
|
nsCOMPtr<nsIComputedDOMStyle> compStyle;
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
compStyle =
|
2000-09-13 23:57:52 +00:00
|
|
|
do_CreateInstance("@mozilla.org/DOM/Level2/CSS/computedStyleDeclaration;1", &rv);
|
2000-05-17 06:38:43 +00:00
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
rv = compStyle->Init(aElt, aPseudoElt, presShell);
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
return compStyle->QueryInterface(NS_GET_IID(nsIDOMCSSStyleDeclaration),
|
2000-08-22 03:51:17 +00:00
|
|
|
(void **) aReturn);
|
2000-05-03 13:03:17 +00:00
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl::nsIDOMAbstractView
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
1998-08-07 04:45:03 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetDocument(nsIDOMDocumentView ** aDocumentView)
|
2000-04-26 13:58:56 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_ARG_POINTER(aDocumentView);
|
2000-04-26 13:58:56 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult rv = NS_OK;
|
2000-04-26 13:58:56 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (mDocument) {
|
|
|
|
rv = mDocument->QueryInterface(NS_GET_IID(nsIDOMDocumentView),
|
|
|
|
(void **) aDocumentView);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*aDocumentView = nsnull;
|
|
|
|
}
|
2000-04-26 13:58:56 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return rv;
|
2000-04-26 13:58:56 +00:00
|
|
|
}
|
1998-09-03 01:19:58 +00:00
|
|
|
|
2001-05-17 02:15:27 +00:00
|
|
|
///*****************************************************************************
|
|
|
|
// GlobalWindowImpl::nsIInterfaceRequestor
|
2002-02-09 03:36:55 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetInterface(const nsIID & aIID, void **aSink)
|
2001-05-17 02:15:27 +00:00
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(aSink);
|
|
|
|
*aSink = nsnull;
|
|
|
|
|
|
|
|
if (aIID.Equals(NS_GET_IID(nsIDocCharset))) {
|
|
|
|
if (mDocShell) {
|
|
|
|
nsCOMPtr<nsIDocCharset> docCharset(do_QueryInterface(mDocShell));
|
2002-02-01 20:12:35 +00:00
|
|
|
*aSink = docCharset;
|
2001-05-17 02:15:27 +00:00
|
|
|
}
|
|
|
|
}
|
2001-07-24 22:39:11 +00:00
|
|
|
else if (aIID.Equals(NS_GET_IID(nsIWebNavigation))) {
|
|
|
|
if (mDocShell) {
|
2002-02-01 20:12:35 +00:00
|
|
|
nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(mDocShell));
|
2001-07-24 22:39:11 +00:00
|
|
|
*aSink = webNav;
|
|
|
|
}
|
|
|
|
}
|
2002-02-01 14:52:11 +00:00
|
|
|
else if (aIID.Equals(NS_GET_IID(nsIWebBrowserPrint))) {
|
|
|
|
if (mDocShell) {
|
|
|
|
nsCOMPtr<nsIContentViewer> viewer;
|
|
|
|
mDocShell->GetContentViewer(getter_AddRefs(viewer));
|
|
|
|
if (viewer) {
|
|
|
|
nsCOMPtr<nsIWebBrowserPrint> webBrowserPrint(do_QueryInterface(viewer));
|
2002-02-01 20:12:35 +00:00
|
|
|
*aSink = webBrowserPrint;
|
2002-02-01 14:52:11 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2001-05-17 02:15:27 +00:00
|
|
|
else {
|
|
|
|
return QueryInterface(aIID, aSink);
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IF_ADDREF(((nsISupports *) * aSink));
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl: Window Control Functions
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
|
2001-10-31 23:52:52 +00:00
|
|
|
void
|
|
|
|
GlobalWindowImpl::GetParentInternal(nsIDOMWindowInternal **aParent)
|
|
|
|
{
|
|
|
|
*aParent = nsnull;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDOMWindow> parent;
|
|
|
|
|
|
|
|
GetParent(getter_AddRefs(parent));
|
|
|
|
|
|
|
|
if (parent && parent != NS_STATIC_CAST(nsIDOMWindow *, this)) {
|
|
|
|
CallQueryInterface(parent, aParent);
|
|
|
|
NS_ASSERTION(*aParent, "Huh, parent not an nsIDOMWindowInternal?");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
GlobalWindowImpl::OpenInternal(const nsAString& aUrl,
|
|
|
|
const nsAString& aName,
|
|
|
|
const nsAString& aOptions,
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
PRBool aDialog, jsval *argv, PRUint32 argc,
|
|
|
|
nsISupports *aExtraArgument,
|
|
|
|
nsIDOMWindow **aReturn)
|
2000-08-22 03:51:17 +00:00
|
|
|
{
|
2001-02-17 02:46:48 +00:00
|
|
|
nsCOMPtr<nsIDOMWindow> domReturn;
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
char *features = nsnull;
|
|
|
|
char *name = nsnull;
|
|
|
|
char *url = nsnull;
|
2001-06-20 01:25:09 +00:00
|
|
|
nsresult rv = NS_OK;
|
2001-02-17 02:46:48 +00:00
|
|
|
|
|
|
|
*aReturn = nsnull;
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (!aUrl.IsEmpty()) {
|
|
|
|
// fix bug 35076
|
|
|
|
// if the URL contains non ASCII, escape from the first non ASCII char
|
|
|
|
nsAutoString unescapedURL(aUrl);
|
|
|
|
nsAutoString escapedURL;
|
2001-03-23 03:16:51 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (unescapedURL.IsASCII())
|
|
|
|
escapedURL = unescapedURL;
|
|
|
|
else {
|
2001-06-30 11:02:25 +00:00
|
|
|
// const PRUnichar *pt = unescapedURL.get();
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
PRUint32 len = unescapedURL.Length();
|
|
|
|
PRUint32 nonAsciiPos = 0;
|
2001-03-23 03:16:51 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsReadingIterator<PRUnichar> iter, end;
|
|
|
|
unescapedURL.BeginReading(iter);
|
|
|
|
unescapedURL.EndReading(end);
|
|
|
|
|
|
|
|
while (iter != end) {
|
|
|
|
if ((0xFF80 & *iter) != 0)
|
|
|
|
break;
|
|
|
|
|
|
|
|
++nonAsciiPos;
|
|
|
|
|
|
|
|
++iter;
|
2001-03-23 03:16:51 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsAutoString right, escapedRight;
|
|
|
|
unescapedURL.Left(escapedURL, nonAsciiPos);
|
|
|
|
unescapedURL.Right(right, len - nonAsciiPos);
|
|
|
|
if (NS_SUCCEEDED(Escape(right, escapedRight)))
|
|
|
|
escapedURL.Append(escapedRight);
|
|
|
|
else
|
|
|
|
escapedURL = unescapedURL;
|
2001-03-23 03:16:51 +00:00
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
|
|
|
if (!escapedURL.IsEmpty())
|
|
|
|
url = ToNewCString(escapedURL);
|
2001-06-20 01:25:09 +00:00
|
|
|
|
|
|
|
/* Check whether the URI is allowed, but not for dialogs --
|
|
|
|
see bug 56851. The security of this function depends on
|
|
|
|
window.openDialog being inaccessible from web scripts */
|
|
|
|
if (url && !aDialog)
|
|
|
|
rv = SecurityCheckURL(url);
|
2001-02-17 02:46:48 +00:00
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
|
|
|
if (!aName.IsEmpty()) {
|
|
|
|
name = ToNewUTF8String(aName);
|
2001-02-17 02:46:48 +00:00
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
2001-07-13 01:30:44 +00:00
|
|
|
if (!aOptions.IsEmpty() /* IsNullDOMString(aOptions) */) {
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
features = ToNewUTF8String(aOptions);
|
2001-02-17 02:46:48 +00:00
|
|
|
}
|
|
|
|
|
2001-06-20 01:25:09 +00:00
|
|
|
if (NS_SUCCEEDED(rv)) {
|
|
|
|
nsCOMPtr<nsIWindowWatcher> wwatch(do_GetService(sWindowWatcherContractID, &rv));
|
|
|
|
if (wwatch) {
|
|
|
|
if (argc) {
|
|
|
|
nsCOMPtr<nsPIWindowWatcher> pwwatch(do_QueryInterface(wwatch));
|
|
|
|
NS_ENSURE_TRUE(pwwatch, NS_ERROR_UNEXPECTED);
|
|
|
|
|
|
|
|
PRUint32 extraArgc = argc >= 3 ? argc-3 : 0;
|
|
|
|
rv = pwwatch->OpenWindowJS(this, url, name, features, aDialog,
|
|
|
|
extraArgc, argv+3,
|
|
|
|
getter_AddRefs(domReturn));
|
|
|
|
} else {
|
|
|
|
rv = wwatch->OpenWindow(this, url, name, features, aExtraArgument,
|
|
|
|
getter_AddRefs(domReturn));
|
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
2001-06-20 01:25:09 +00:00
|
|
|
if (domReturn)
|
|
|
|
CallQueryInterface(domReturn, aReturn);
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
}
|
2001-02-17 02:46:48 +00:00
|
|
|
}
|
2001-03-23 03:16:51 +00:00
|
|
|
|
2001-06-20 01:25:09 +00:00
|
|
|
if (features)
|
|
|
|
nsMemory::Free(features);
|
|
|
|
if (name)
|
|
|
|
nsMemory::Free(name);
|
|
|
|
if (url)
|
|
|
|
nsMemory::Free(url);
|
2001-03-13 11:37:16 +00:00
|
|
|
|
2001-07-13 01:30:44 +00:00
|
|
|
return rv;
|
1998-08-07 04:45:03 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
void
|
|
|
|
GlobalWindowImpl::CloseWindow(nsISupports *aWindow)
|
1998-08-07 04:45:03 +00:00
|
|
|
{
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsCOMPtr<nsPIDOMWindow> win(do_QueryInterface(aWindow));
|
1998-08-07 04:45:03 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
win->ReallyCloseWindow();
|
1998-08-07 04:45:03 +00:00
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl: Timeout Functions
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
1999-11-17 23:05:29 +00:00
|
|
|
|
2001-04-04 23:48:03 +00:00
|
|
|
static const char * const kSetIntervalStr = "setInterval";
|
|
|
|
static const char * const kSetTimeoutStr = "setTimeout";
|
1998-08-07 04:45:03 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsresult
|
|
|
|
GlobalWindowImpl::SetTimeoutOrInterval(PRBool aIsInterval, PRInt32 *aReturn)
|
1998-08-13 23:37:54 +00:00
|
|
|
{
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_ENSURE_STATE(sXPConnect);
|
|
|
|
|
|
|
|
nsresult rv = NS_OK;
|
|
|
|
nsCOMPtr<nsIXPCNativeCallContext> ncc;
|
|
|
|
|
|
|
|
rv = sXPConnect->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);
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
JSString *expr = nsnull;
|
|
|
|
JSObject *funobj = nsnull;
|
2000-09-15 19:22:03 +00:00
|
|
|
nsTimeoutImpl *timeout;
|
2001-08-10 01:45:54 +00:00
|
|
|
jsdouble interval = 0.0;
|
2000-08-22 03:51:17 +00:00
|
|
|
PRInt64 now, delta;
|
1998-08-13 23:37:54 +00:00
|
|
|
|
2001-08-10 01:45:54 +00:00
|
|
|
if (argc < 1) {
|
2001-08-14 08:05:28 +00:00
|
|
|
::JS_ReportError(cx, "Function %s requires at least 1 parameter",
|
2000-08-22 03:51:17 +00:00
|
|
|
aIsInterval ? kSetIntervalStr : kSetTimeoutStr);
|
2001-08-16 04:05:10 +00:00
|
|
|
|
|
|
|
return ncc->SetExceptionWasThrown(PR_TRUE);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2001-08-10 01:45:54 +00:00
|
|
|
if (argc > 1 && !::JS_ValueToNumber(cx, argv[1], &interval)) {
|
2000-08-22 03:51:17 +00:00
|
|
|
::JS_ReportError(cx,
|
|
|
|
"Second argument to %s must be a millisecond interval",
|
|
|
|
aIsInterval ? kSetIntervalStr : kSetTimeoutStr);
|
2001-08-16 04:05:10 +00:00
|
|
|
|
|
|
|
return ncc->SetExceptionWasThrown(PR_TRUE);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
switch (::JS_TypeOfValue(cx, argv[0])) {
|
|
|
|
case JSTYPE_FUNCTION:
|
|
|
|
funobj = JSVAL_TO_OBJECT(argv[0]);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case JSTYPE_STRING:
|
|
|
|
case JSTYPE_OBJECT:
|
|
|
|
if (!(expr = ::JS_ValueToString(cx, argv[0])))
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
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?)",
|
2000-02-08 13:40:10 +00:00
|
|
|
aIsInterval ? kSetIntervalStr : kSetTimeoutStr);
|
2001-08-16 04:05:10 +00:00
|
|
|
|
|
|
|
return ncc->SetExceptionWasThrown(PR_TRUE);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2002-06-19 00:42:23 +00:00
|
|
|
if (interval < DOM_MIN_TIMEOUT_VALUE) {
|
|
|
|
// Don't allow timeouts less than DOM_MIN_TIMEOUT_VALUE from
|
|
|
|
// now...
|
|
|
|
|
|
|
|
interval = DOM_MIN_TIMEOUT_VALUE;
|
|
|
|
}
|
|
|
|
|
2001-08-15 05:35:02 +00:00
|
|
|
timeout = new nsTimeoutImpl();
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!timeout)
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
|
|
|
|
// Initial ref_count to indicate that this timeout struct will
|
|
|
|
// be held as the closure of a timer.
|
|
|
|
timeout->ref_count = 1;
|
|
|
|
if (aIsInterval)
|
|
|
|
timeout->interval = (PRInt32) interval;
|
|
|
|
if (expr) {
|
|
|
|
if (!::JS_AddNamedRoot(cx, &timeout->expr, "timeout.expr")) {
|
2001-08-15 05:35:02 +00:00
|
|
|
delete timeout;
|
2000-02-08 13:40:10 +00:00
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
timeout->expr = expr;
|
|
|
|
}
|
|
|
|
else if (funobj) {
|
|
|
|
int i;
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
/* Leave an extra slot for a secret final argument that
|
|
|
|
indicates to the called function how "late" the timeout is. */
|
|
|
|
timeout->argv = (jsval *) PR_MALLOC((argc - 1) * sizeof(jsval));
|
|
|
|
if (!timeout->argv) {
|
|
|
|
DropTimeout(timeout);
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!::JS_AddNamedRoot(cx, &timeout->funobj, "timeout.funobj")) {
|
|
|
|
DropTimeout(timeout);
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
|
|
|
timeout->funobj = funobj;
|
|
|
|
|
|
|
|
timeout->argc = 0;
|
|
|
|
for (i = 2; (PRUint32) i < argc; i++) {
|
|
|
|
timeout->argv[i - 2] = argv[i];
|
|
|
|
if (!::JS_AddNamedRoot(cx, &timeout->argv[i - 2], "timeout.argv[i]")) {
|
|
|
|
DropTimeout(timeout);
|
|
|
|
return NS_ERROR_FAILURE;
|
1998-10-06 20:59:39 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
timeout->argc++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *filename;
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (nsJSUtils::GetCallingLocation(cx, &filename, &timeout->lineno)) {
|
2000-08-22 03:51:17 +00:00
|
|
|
timeout->filename = PL_strdup(filename);
|
|
|
|
if (!timeout->filename) {
|
|
|
|
DropTimeout(timeout);
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
timeout->version = ::JS_VersionToString(::JS_GetVersion(cx));
|
|
|
|
|
|
|
|
// Get principal of currently executing code, save for execution of timeout
|
2001-08-15 05:35:02 +00:00
|
|
|
|
2002-05-17 22:24:06 +00:00
|
|
|
rv = sSecMan->GetSubjectPrincipal(getter_AddRefs(timeout->principal));
|
2001-08-15 05:35:02 +00:00
|
|
|
|
|
|
|
if (NS_FAILED(rv)) {
|
|
|
|
DropTimeout(timeout);
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
2001-08-15 05:35:02 +00:00
|
|
|
}
|
1998-08-13 23:37:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
LL_I2L(now, PR_IntervalNow());
|
|
|
|
LL_D2L(delta, PR_MillisecondsToInterval((PRUint32) interval));
|
|
|
|
LL_ADD(timeout->when, now, delta);
|
|
|
|
nsresult err;
|
2000-09-13 23:57:52 +00:00
|
|
|
timeout->timer = do_CreateInstance("@mozilla.org/timer;1", &err);
|
2000-08-22 03:51:17 +00:00
|
|
|
if (NS_OK != err) {
|
|
|
|
DropTimeout(timeout);
|
|
|
|
return err;
|
|
|
|
}
|
1998-08-13 23:37:54 +00:00
|
|
|
|
2001-10-24 06:58:11 +00:00
|
|
|
err = timeout->timer->Init(TimerCallback, timeout, (PRInt32)interval,
|
2002-06-11 20:47:04 +00:00
|
|
|
PR_FALSE);
|
2000-08-22 03:51:17 +00:00
|
|
|
if (NS_OK != err) {
|
|
|
|
DropTimeout(timeout);
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
timeout->window = this;
|
2001-08-15 05:35:02 +00:00
|
|
|
NS_ADDREF(timeout->window);
|
1998-07-24 05:05:42 +00:00
|
|
|
|
2000-09-15 19:22:03 +00:00
|
|
|
InsertTimeoutIntoList(mTimeoutInsertionPoint, timeout);
|
2000-08-22 03:51:17 +00:00
|
|
|
timeout->public_id = ++mTimeoutPublicIdCounter;
|
|
|
|
*aReturn = timeout->public_id;
|
1998-07-24 05:05:42 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-07-24 05:05:42 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
void
|
|
|
|
GlobalWindowImpl::RunTimeout(nsTimeoutImpl *aTimeout)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2001-11-27 09:18:28 +00:00
|
|
|
PRBool scripts_enabled = PR_TRUE;
|
|
|
|
|
2001-12-12 01:01:38 +00:00
|
|
|
if (!mContext) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2001-11-27 09:18:28 +00:00
|
|
|
mContext->GetScriptsEnabled(&scripts_enabled);
|
|
|
|
|
|
|
|
if (!scripts_enabled) {
|
|
|
|
// 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 scrips are enabled in this window again we'll fire the
|
|
|
|
// timeouts that are due at that point.
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
nsTimeoutImpl *next, *prev, *timeout;
|
|
|
|
nsTimeoutImpl *last_expired_timeout, **last_insertion_point;
|
|
|
|
nsTimeoutImpl dummy_timeout;
|
|
|
|
JSContext *cx;
|
2001-10-24 06:58:11 +00:00
|
|
|
PRInt64 now, deadline;
|
2000-02-15 01:32:19 +00:00
|
|
|
nsresult rv;
|
2000-08-22 03:51:17 +00:00
|
|
|
PRUint32 firingDepth = mTimeoutFiringDepth + 1;
|
2000-02-15 01:32:19 +00:00
|
|
|
|
2000-02-26 02:28:27 +00:00
|
|
|
|
2001-10-24 06:58:11 +00:00
|
|
|
// Make sure that the window or the script context don't go away as
|
|
|
|
// a result of running timeouts
|
2001-08-15 05:35:02 +00:00
|
|
|
nsCOMPtr<nsIScriptGlobalObject> windowKungFuDeathGrip(this);
|
|
|
|
nsCOMPtr<nsIScriptContext> contextKungFuDeathGrip(mContext);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2001-08-15 05:35:02 +00:00
|
|
|
cx = (JSContext *)mContext->GetNativeContext();
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2001-10-24 06:58:11 +00:00
|
|
|
// A native timer has gone off. See which of our timeouts need
|
|
|
|
// servicing
|
2000-02-15 01:32:19 +00:00
|
|
|
LL_I2L(now, PR_IntervalNow());
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2001-11-27 09:18:28 +00:00
|
|
|
if (aTimeout && LL_CMP(aTimeout->when, >, now)) {
|
2001-10-24 06:58:11 +00:00
|
|
|
// 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->when;
|
|
|
|
} else {
|
|
|
|
deadline = now;
|
|
|
|
}
|
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
/* 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;
|
2000-08-22 03:51:17 +00:00
|
|
|
for (timeout = mTimeouts; timeout; timeout = timeout->next) {
|
2001-10-24 06:58:11 +00:00
|
|
|
if (((timeout == aTimeout) || !LL_CMP(timeout->when, >, deadline)) &&
|
|
|
|
(timeout->firingDepth == 0)) {
|
2000-02-15 01:32:19 +00:00
|
|
|
/*
|
|
|
|
* Mark any timeouts that are on the list to be fired with the
|
|
|
|
* firing depth so that we can reentrantly run timeouts
|
|
|
|
*/
|
|
|
|
timeout->firingDepth = firingDepth;
|
|
|
|
last_expired_timeout = timeout;
|
2001-08-15 05:35:02 +00:00
|
|
|
|
|
|
|
// If the timeout has a timer it means that it's a timeout
|
|
|
|
// that's due to be fired but it's OS timer hasn't fired yet.
|
|
|
|
// We'll go ahead and handle the timeout now so we can cancel
|
|
|
|
// the OS timer for the timeout and relese the OS timer's
|
|
|
|
// reference to the timeout (and set timeout->timer to nsnull to
|
|
|
|
// indicate that the OS timer no longer owns the timeout).
|
|
|
|
if (timeout->timer) {
|
|
|
|
timeout->timer->Cancel();
|
|
|
|
timeout->timer = nsnull;
|
|
|
|
|
|
|
|
DropTimeout(timeout);
|
|
|
|
}
|
2000-02-15 01:32:19 +00:00
|
|
|
}
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
/* 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. */
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!last_expired_timeout) {
|
2001-08-15 05:35:02 +00:00
|
|
|
return;
|
2000-02-15 01:32:19 +00:00
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
/* 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.firingDepth = firingDepth;
|
|
|
|
dummy_timeout.next = last_expired_timeout->next;
|
|
|
|
last_expired_timeout->next = &dummy_timeout;
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
/* Don't let ClearWindowTimeouts throw away our stack-allocated
|
|
|
|
dummy timeout. */
|
|
|
|
dummy_timeout.ref_count = 2;
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
last_insertion_point = mTimeoutInsertionPoint;
|
|
|
|
mTimeoutInsertionPoint = &dummy_timeout.next;
|
1998-08-13 04:34:53 +00:00
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
prev = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
for (timeout = mTimeouts; timeout != &dummy_timeout; timeout = next) {
|
2000-02-15 01:32:19 +00:00
|
|
|
next = timeout->next;
|
2000-08-22 03:51:17 +00:00
|
|
|
|
|
|
|
/*
|
2002-02-09 03:36:55 +00:00
|
|
|
* Check to see if it should fire at this depth. If it shouldn't, we'll
|
|
|
|
* ignore it
|
2000-02-15 01:32:19 +00:00
|
|
|
*/
|
|
|
|
if (timeout->firingDepth == firingDepth) {
|
2001-08-15 05:35:02 +00:00
|
|
|
nsTimeoutImpl *last_running_timeout = mRunningTimeout;
|
|
|
|
mRunningTimeout = timeout;
|
|
|
|
|
|
|
|
PRBool old_timeouts_were_cleared = mTimeoutsWereCleared;
|
|
|
|
mTimeoutsWereCleared = PR_FALSE;
|
2000-02-08 13:40:10 +00:00
|
|
|
|
|
|
|
/* Hold the timeout in case expr or funobj releases its doc. */
|
|
|
|
HoldTimeout(timeout);
|
2001-08-15 05:35:02 +00:00
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
++mTimeoutFiringDepth;
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (timeout->expr) {
|
2000-02-15 01:32:19 +00:00
|
|
|
/* Evaluate the timeout expression. */
|
2001-08-15 05:35:02 +00:00
|
|
|
const PRUnichar *script =
|
|
|
|
NS_REINTERPRET_CAST(const PRUnichar *,
|
|
|
|
::JS_GetStringChars(timeout->expr));
|
|
|
|
|
2001-10-24 06:58:11 +00:00
|
|
|
nsAutoString retval;
|
|
|
|
PRBool is_undefined;
|
2001-08-15 05:35:02 +00:00
|
|
|
rv = mContext->EvaluateString(nsDependentString(script), mJSObject,
|
|
|
|
timeout->principal, timeout->filename,
|
2001-10-24 06:58:11 +00:00
|
|
|
timeout->lineno, timeout->version,
|
|
|
|
retval, &is_undefined);
|
2001-08-15 05:35:02 +00:00
|
|
|
} else {
|
2000-02-15 01:32:19 +00:00
|
|
|
PRInt64 lateness64;
|
|
|
|
PRInt32 lateness;
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
/* Add "secret" final argument that indicates timeout
|
|
|
|
lateness in milliseconds */
|
|
|
|
LL_SUB(lateness64, now, timeout->when);
|
|
|
|
LL_L2I(lateness, lateness64);
|
|
|
|
lateness = PR_IntervalToMilliseconds(lateness);
|
2000-08-22 03:51:17 +00:00
|
|
|
timeout->argv[timeout->argc] = INT_TO_JSVAL((jsint) lateness);
|
2001-10-24 06:58:11 +00:00
|
|
|
|
|
|
|
PRBool bool_result;
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
rv = mContext->CallEventHandler(mJSObject, timeout->funobj,
|
2000-02-15 01:32:19 +00:00
|
|
|
timeout->argc + 1, timeout->argv,
|
2001-10-24 06:58:11 +00:00
|
|
|
&bool_result, PR_FALSE);
|
2000-02-15 01:32:19 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
--mTimeoutFiringDepth;
|
|
|
|
mRunningTimeout = last_running_timeout;
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2001-08-15 05:35:02 +00:00
|
|
|
PRBool timeouts_were_cleared = mTimeoutsWereCleared;
|
|
|
|
mTimeoutsWereCleared = old_timeouts_were_cleared;
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2001-08-15 05:35:02 +00:00
|
|
|
// 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
|
2001-12-23 23:23:41 +00:00
|
|
|
// didn't fire in time and we don't want to not fire those timers
|
2001-08-15 05:35:02 +00:00
|
|
|
// 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.
|
|
|
|
|
|
|
|
DropTimeout(timeout, contextKungFuDeathGrip);
|
|
|
|
|
|
|
|
// If the timeout is no longer in the list of timeouts in this
|
|
|
|
// window it means that all timeouts were cleared (i.e. the
|
|
|
|
// document was either destroyed or cleared). In that case we
|
|
|
|
// simply return here since all timers were destroyed in the
|
|
|
|
// document where timeout originated from.
|
|
|
|
|
|
|
|
if (timeouts_were_cleared) {
|
2000-02-15 01:32:19 +00:00
|
|
|
mTimeoutInsertionPoint = last_insertion_point;
|
2001-08-15 05:35:02 +00:00
|
|
|
|
|
|
|
return;
|
2000-02-15 01:32:19 +00:00
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
|
|
|
/* If we have a regular interval timer, we re-fire the
|
|
|
|
* timeout, accounting for clock drift.
|
|
|
|
*/
|
2000-08-22 03:51:17 +00:00
|
|
|
if (timeout->interval) {
|
2000-02-15 01:32:19 +00:00
|
|
|
/* Compute time to next timeout for interval timer. */
|
|
|
|
PRInt32 delay32;
|
|
|
|
PRInt64 interval, delay;
|
|
|
|
LL_I2L(interval, PR_MillisecondsToInterval(timeout->interval));
|
|
|
|
LL_ADD(timeout->when, timeout->when, interval);
|
|
|
|
LL_I2L(now, PR_IntervalNow());
|
|
|
|
LL_SUB(delay, timeout->when, now);
|
|
|
|
LL_L2I(delay32, delay);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
/* If the next interval timeout is already supposed to
|
2001-10-24 06:58:11 +00:00
|
|
|
* have happened then run the timeout immediately.
|
2000-02-15 01:32:19 +00:00
|
|
|
*/
|
2000-08-22 03:51:17 +00:00
|
|
|
if (delay32 < 0)
|
2000-02-15 01:32:19 +00:00
|
|
|
delay32 = 0;
|
2001-08-15 05:35:02 +00:00
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
delay32 = PR_IntervalToMilliseconds(delay32);
|
|
|
|
|
|
|
|
/* Reschedule timeout. Account for possible error return in
|
|
|
|
code below that checks for zero toid. */
|
2001-08-15 05:35:02 +00:00
|
|
|
timeout->timer = do_CreateInstance("@mozilla.org/timer;1");
|
|
|
|
|
|
|
|
// Since we're in a loop where we're likely to be running
|
|
|
|
// multiple timeouts that were due to be handled when we
|
|
|
|
// entered this method (but the OS timers for those timeouts
|
|
|
|
// hadn't fired yet) we don't do an early return here just
|
|
|
|
// because we couldn't create a timer for an interval timeout
|
2001-12-23 23:23:41 +00:00
|
|
|
// since we still want to continue running the timeouts that
|
2001-08-15 05:35:02 +00:00
|
|
|
// were due to be handled when we entered this method. This
|
|
|
|
// method is never called by code that cares about success or
|
|
|
|
// failure any way so dropping the error on the floor here is
|
|
|
|
// no big deal.
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2001-08-15 05:35:02 +00:00
|
|
|
if (timeout->timer) {
|
2001-10-24 06:58:11 +00:00
|
|
|
rv = timeout->timer->Init(TimerCallback, timeout, delay32,
|
2002-06-11 20:47:04 +00:00
|
|
|
PR_TRUE);
|
2001-08-15 05:35:02 +00:00
|
|
|
|
|
|
|
// Likewise, don't return early even if we fail to
|
|
|
|
// initialize the new OS timer.
|
|
|
|
|
|
|
|
if (NS_SUCCEEDED(rv)) {
|
|
|
|
// Increment ref_count to indicate that this OS timer is
|
|
|
|
// holding on to the timeout struct.
|
|
|
|
HoldTimeout(timeout);
|
|
|
|
} else {
|
|
|
|
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 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->timer == nsnull).
|
|
|
|
|
|
|
|
timeout->timer = nsnull;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
NS_ERROR("Error creating timer for DOM timeout!");
|
|
|
|
|
|
|
|
// If we weren't able to create a new OS timer for 'timeout'
|
|
|
|
// we'll fall through here and the code below will delete
|
|
|
|
// the timeout (since timeout->timer == nsnull).
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-02-15 01:32:19 +00:00
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
|
|
|
/* Running a timeout can cause another timeout to be deleted,
|
|
|
|
so we need to reset the pointer to the following timeout. */
|
|
|
|
next = timeout->next;
|
2001-08-15 05:35:02 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (!prev) {
|
2000-02-15 01:32:19 +00:00
|
|
|
mTimeouts = next;
|
2001-08-15 05:35:02 +00:00
|
|
|
} else {
|
2000-02-15 01:32:19 +00:00
|
|
|
prev->next = next;
|
|
|
|
}
|
2000-02-26 02:28:27 +00:00
|
|
|
|
|
|
|
PRBool isInterval = (timeout->interval && timeout->timer);
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
// Drop timeout struct since it's out of the list
|
2001-08-15 05:35:02 +00:00
|
|
|
DropTimeout(timeout, contextKungFuDeathGrip);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
|
|
|
if (isInterval) {
|
2001-08-15 05:35:02 +00:00
|
|
|
// Reschedule an interval timeout. Insert interval timeout
|
|
|
|
// onto list sorted in deadline order.
|
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
InsertTimeoutIntoList(mTimeoutInsertionPoint, timeout);
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
2001-08-15 05:35:02 +00:00
|
|
|
} else {
|
|
|
|
// We skip the timeout since it's on the list to run at another
|
|
|
|
// depth.
|
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
prev = timeout;
|
|
|
|
}
|
|
|
|
}
|
1998-07-24 05:05:42 +00:00
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
/* Take the dummy timeout off the head of the list */
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (!prev) {
|
2000-02-15 01:32:19 +00:00
|
|
|
mTimeouts = dummy_timeout.next;
|
2001-08-15 05:35:02 +00:00
|
|
|
} else {
|
2000-02-15 01:32:19 +00:00
|
|
|
prev->next = dummy_timeout.next;
|
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2000-02-15 01:32:19 +00:00
|
|
|
mTimeoutInsertionPoint = last_insertion_point;
|
|
|
|
|
2001-08-15 05:35:02 +00:00
|
|
|
return;
|
1998-07-24 05:05:42 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
void
|
|
|
|
GlobalWindowImpl::DropTimeout(nsTimeoutImpl *aTimeout,
|
|
|
|
nsIScriptContext *aContext)
|
2000-08-22 03:51:17 +00:00
|
|
|
{
|
2000-10-15 23:23:12 +00:00
|
|
|
JSRuntime *rt = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
|
|
|
|
if (--aTimeout->ref_count > 0)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (!aContext)
|
|
|
|
aContext = mContext;
|
|
|
|
if (aContext) {
|
2000-10-15 23:23:12 +00:00
|
|
|
JSContext *cx;
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
cx = (JSContext *)aContext->GetNativeContext();
|
2000-10-15 23:23:12 +00:00
|
|
|
rt = ::JS_GetRuntime(cx);
|
|
|
|
} else {
|
|
|
|
/* XXX The timeout *must* be unrooted, even if !aContext. This can be
|
|
|
|
done without a JS context using the JSRuntime. This is safe enough,
|
|
|
|
but it would be better to drop all a window's timeouts before its
|
|
|
|
context is cleared. Bug 50705 describes a situation where we're not.
|
|
|
|
In that case, at the time the context is cleared, a timeout (actually
|
|
|
|
an Interval) is still active, but temporarily removed from the window's
|
|
|
|
list of timers (placed instead on the timer manager's list). This makes
|
|
|
|
the nearly handy ClearAllTimeouts routine useless, so we we settled on
|
|
|
|
using the JSRuntime rather than relying on the window having a context.
|
|
|
|
It would be good to remedy this workable but clumsy situation someday.
|
|
|
|
*/
|
|
|
|
NS_WARNING("DropTimeout proceeding without context.");
|
2001-08-15 05:35:02 +00:00
|
|
|
nsCOMPtr<nsIJSRuntimeService> rtsvc =
|
|
|
|
do_GetService("@mozilla.org/js/xpc/RuntimeService;1");
|
|
|
|
|
2000-10-15 23:23:12 +00:00
|
|
|
if (rtsvc)
|
|
|
|
rtsvc->GetRuntime(&rt);
|
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2000-10-15 23:23:12 +00:00
|
|
|
NS_ASSERTION(rt, "DropTimeout with no JSRuntime. eek!");
|
|
|
|
if (!rt) // most unexpected. not much choice but to bail.
|
|
|
|
return;
|
|
|
|
|
2001-08-15 05:35:02 +00:00
|
|
|
if (aTimeout->expr) {
|
2000-10-15 23:23:12 +00:00
|
|
|
::JS_RemoveRootRT(rt, &aTimeout->expr);
|
2001-08-15 05:35:02 +00:00
|
|
|
} else if (aTimeout->funobj) {
|
2000-10-15 23:23:12 +00:00
|
|
|
::JS_RemoveRootRT(rt, &aTimeout->funobj);
|
2001-08-15 05:35:02 +00:00
|
|
|
|
2000-10-15 23:23:12 +00:00
|
|
|
if (aTimeout->argv) {
|
|
|
|
int i;
|
|
|
|
for (i = 0; i < aTimeout->argc; i++)
|
|
|
|
::JS_RemoveRootRT(rt, &aTimeout->argv[i]);
|
|
|
|
PR_FREEIF(aTimeout->argv);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
2000-10-15 23:23:12 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (aTimeout->timer) {
|
|
|
|
aTimeout->timer->Cancel();
|
|
|
|
aTimeout->timer = nsnull;
|
|
|
|
}
|
2001-08-15 05:35:02 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
PR_FREEIF(aTimeout->filename);
|
2001-08-15 05:35:02 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IF_RELEASE(aTimeout->window);
|
2001-08-15 05:35:02 +00:00
|
|
|
|
|
|
|
delete aTimeout;
|
1998-07-24 05:05:42 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
void
|
|
|
|
GlobalWindowImpl::HoldTimeout(nsTimeoutImpl *aTimeout)
|
1998-07-24 05:05:42 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
aTimeout->ref_count++;
|
1998-07-24 05:05:42 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsresult
|
2002-03-27 00:55:57 +00:00
|
|
|
GlobalWindowImpl::ClearTimeoutOrInterval()
|
1998-07-24 05:05:42 +00:00
|
|
|
{
|
2002-03-27 00:55:57 +00:00
|
|
|
NS_ENSURE_STATE(sXPConnect);
|
|
|
|
|
|
|
|
nsresult rv = NS_OK;
|
|
|
|
nsCOMPtr<nsIXPCNativeCallContext> ncc;
|
|
|
|
|
|
|
|
rv = sXPConnect->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.
|
1998-07-24 05:05:42 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
|
|
|
}
|
2002-03-27 00:55:57 +00:00
|
|
|
|
|
|
|
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;
|
|
|
|
nsTimeoutImpl **top, *timeout;
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
for (top = &mTimeouts; (timeout = *top) != NULL; top = &timeout->next) {
|
|
|
|
if (timeout->public_id == public_id) {
|
|
|
|
if (mRunningTimeout == timeout) {
|
|
|
|
/* We're running from inside the timeout. Mark this
|
|
|
|
timeout for deferred deletion by the code in
|
|
|
|
win_run_timeout() */
|
|
|
|
timeout->interval = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
/* Delete the timeout from the pending timeout list */
|
|
|
|
*top = timeout->next;
|
2001-08-15 05:35:02 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (timeout->timer) {
|
|
|
|
timeout->timer->Cancel();
|
2001-08-15 05:35:02 +00:00
|
|
|
timeout->timer = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
DropTimeout(timeout);
|
|
|
|
}
|
|
|
|
DropTimeout(timeout);
|
2000-02-08 13:40:10 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2001-08-15 05:35:02 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-07-24 05:05:42 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
void
|
|
|
|
GlobalWindowImpl::ClearAllTimeouts()
|
1998-07-24 05:05:42 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsTimeoutImpl *timeout, *next;
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
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)
|
2000-09-15 19:22:03 +00:00
|
|
|
mTimeoutInsertionPoint = &mTimeouts;
|
2000-08-22 03:51:17 +00:00
|
|
|
|
|
|
|
next = timeout->next;
|
2001-08-15 05:35:02 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (timeout->timer) {
|
|
|
|
timeout->timer->Cancel();
|
2001-08-15 05:35:02 +00:00
|
|
|
timeout->timer = nsnull;
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Drop the count since the timer isn't going to hold on
|
|
|
|
// anymore.
|
2000-02-08 13:40:10 +00:00
|
|
|
DropTimeout(timeout);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2001-08-15 05:35:02 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Drop the count since we're removing it from the list.
|
|
|
|
DropTimeout(timeout);
|
|
|
|
}
|
2001-08-15 05:35:02 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
mTimeouts = NULL;
|
2001-08-15 05:35:02 +00:00
|
|
|
|
|
|
|
mTimeoutsWereCleared = PR_TRUE;
|
1998-07-24 05:05:42 +00:00
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
void
|
|
|
|
GlobalWindowImpl::InsertTimeoutIntoList(nsTimeoutImpl **aList,
|
|
|
|
nsTimeoutImpl *aTimeout)
|
1998-07-24 05:05:42 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsTimeoutImpl *to;
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_ASSERTION(aList,
|
|
|
|
"GlobalWindowImpl::InsertTimeoutIntoList null timeoutList");
|
2000-08-22 03:51:17 +00:00
|
|
|
while ((to = *aList) != nsnull) {
|
|
|
|
if (LL_CMP(to->when, >, aTimeout->when))
|
|
|
|
break;
|
|
|
|
aList = &to->next;
|
|
|
|
}
|
|
|
|
aTimeout->firingDepth = 0;
|
|
|
|
aTimeout->next = to;
|
|
|
|
*aList = aTimeout;
|
2001-10-24 06:58:11 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Increment the ref_count since we're in the list
|
|
|
|
HoldTimeout(aTimeout);
|
1998-07-24 05:05:42 +00:00
|
|
|
}
|
|
|
|
|
2001-10-24 06:58:11 +00:00
|
|
|
// static
|
|
|
|
void
|
|
|
|
GlobalWindowImpl::TimerCallback(nsITimer *aTimer, void *aClosure)
|
1998-07-24 05:05:42 +00:00
|
|
|
{
|
2001-08-15 05:35:02 +00:00
|
|
|
nsTimeoutImpl *timeout = (nsTimeoutImpl *)aClosure;
|
1998-07-24 05:05:42 +00:00
|
|
|
|
2001-08-15 05:35:02 +00:00
|
|
|
// Null out the pointer to the OS timer (aTimer) in the timeout to
|
|
|
|
// to indicate that the timer (aTimer) no longer owns the
|
|
|
|
// timeout. From now on 'timeout' has the reference to the timeout.
|
|
|
|
timeout->timer = nsnull;
|
|
|
|
|
|
|
|
timeout->window->RunTimeout(timeout);
|
|
|
|
|
|
|
|
// Drop timeout's reference to the timeout.
|
|
|
|
timeout->window->DropTimeout(timeout);
|
1998-07-24 05:05:42 +00:00
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl: Helper Functions
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
1999-03-28 22:19:42 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsresult
|
|
|
|
GlobalWindowImpl::GetTreeOwner(nsIDocShellTreeOwner **aTreeOwner)
|
1999-03-28 22:19:42 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(mDocShell));
|
2001-10-16 06:38:04 +00:00
|
|
|
|
|
|
|
// 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;
|
|
|
|
}
|
1999-03-28 22:19:42 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return docShellAsItem->GetTreeOwner(aTreeOwner);
|
1999-03-28 22:19:42 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsresult
|
|
|
|
GlobalWindowImpl::GetTreeOwner(nsIBaseWindow **aTreeOwner)
|
1999-03-28 22:19:42 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(mDocShell));
|
|
|
|
nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
|
2001-10-16 06:38:04 +00:00
|
|
|
|
|
|
|
// 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));
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!treeOwner) {
|
|
|
|
*aTreeOwner = nsnull;
|
|
|
|
return NS_OK;
|
|
|
|
}
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return CallQueryInterface(treeOwner, aTreeOwner);
|
1998-07-24 05:05:42 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsresult
|
2000-08-22 03:51:17 +00:00
|
|
|
GlobalWindowImpl::GetWebBrowserChrome(nsIWebBrowserChrome **aBrowserChrome)
|
1998-07-24 05:05:42 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwner));
|
1998-07-24 05:05:42 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIWebBrowserChrome> browserChrome(do_GetInterface(treeOwner));
|
|
|
|
*aBrowserChrome = browserChrome;
|
|
|
|
NS_IF_ADDREF(*aBrowserChrome);
|
|
|
|
return NS_OK;
|
1998-07-24 05:05:42 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsresult
|
2000-08-22 03:51:17 +00:00
|
|
|
GlobalWindowImpl::GetScrollInfo(nsIScrollableView **aScrollableView,
|
|
|
|
float *aP2T, float *aT2P)
|
1998-07-24 05:05:42 +00:00
|
|
|
{
|
2001-06-18 07:37:11 +00:00
|
|
|
*aScrollableView = nsnull;
|
|
|
|
|
2001-01-13 01:51:45 +00:00
|
|
|
// Flush pending notifications so that the presentation is up to
|
|
|
|
// date.
|
2002-02-05 05:47:22 +00:00
|
|
|
FlushPendingNotifications(PR_TRUE);
|
2001-01-13 01:51:45 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIPresContext> presContext;
|
|
|
|
mDocShell->GetPresContext(getter_AddRefs(presContext));
|
|
|
|
if (presContext) {
|
|
|
|
presContext->GetPixelsToTwips(aP2T);
|
|
|
|
presContext->GetTwipsToPixels(aT2P);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
presContext->GetShell(getter_AddRefs(presShell));
|
|
|
|
if (presShell) {
|
|
|
|
nsCOMPtr<nsIViewManager> vm;
|
|
|
|
presShell->GetViewManager(getter_AddRefs(vm));
|
|
|
|
if (vm)
|
|
|
|
return vm->GetRootScrollableView(aScrollableView);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return NS_OK;
|
1998-07-24 05:05:42 +00:00
|
|
|
}
|
|
|
|
|
2001-06-20 01:25:09 +00:00
|
|
|
nsresult
|
|
|
|
GlobalWindowImpl::SecurityCheckURL(const char *aURL)
|
|
|
|
{
|
|
|
|
nsresult rv;
|
2001-08-07 05:27:42 +00:00
|
|
|
JSContext *cx = nsnull;
|
2001-06-20 01:25:09 +00:00
|
|
|
|
|
|
|
// get JSContext
|
|
|
|
NS_ASSERTION(mContext, "opening window missing its context");
|
|
|
|
NS_ASSERTION(mDocument, "opening window missing its document");
|
2002-05-17 22:24:06 +00:00
|
|
|
if (!mContext || !mDocument || !sSecMan)
|
2001-06-20 01:25:09 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
|
|
|
|
// get the JSContext from the call stack
|
|
|
|
nsCOMPtr<nsIThreadJSContextStack> stack(do_GetService(sJSStackContractID));
|
|
|
|
if (stack)
|
|
|
|
stack->Peek(&cx);
|
|
|
|
if (!cx) // not bloody likely. but if there's no JS on the call stack,
|
|
|
|
return NS_OK; // then we should pass the security check.
|
|
|
|
|
|
|
|
/* 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). */
|
|
|
|
nsCOMPtr<nsIURI> baseURI;
|
|
|
|
nsCOMPtr<nsIURI> uriToLoad;
|
|
|
|
|
2001-08-07 05:27:42 +00:00
|
|
|
nsCOMPtr<nsIScriptContext> scriptcx =
|
|
|
|
NS_STATIC_CAST(nsIScriptContext *, ::JS_GetContextPrivate(cx));
|
2001-06-20 01:25:09 +00:00
|
|
|
if (scriptcx) {
|
2001-06-20 03:27:48 +00:00
|
|
|
nsCOMPtr<nsIScriptGlobalObject> gobj;
|
|
|
|
scriptcx->GetGlobalObject(getter_AddRefs(gobj));
|
2001-06-20 01:25:09 +00:00
|
|
|
nsCOMPtr<nsIDOMWindow> caller(do_QueryInterface(gobj));
|
|
|
|
if (caller) {
|
|
|
|
nsCOMPtr<nsIDOMDocument> callerDOMdoc;
|
|
|
|
caller->GetDocument(getter_AddRefs(callerDOMdoc));
|
|
|
|
nsCOMPtr<nsIDocument> callerDoc(do_QueryInterface(callerDOMdoc));
|
|
|
|
if (callerDoc)
|
2001-06-20 03:27:48 +00:00
|
|
|
callerDoc->GetDocumentURL(getter_AddRefs(baseURI));
|
2001-06-20 01:25:09 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-05-17 22:24:06 +00:00
|
|
|
rv = NS_NewURI(getter_AddRefs(uriToLoad), nsDependentCString(aURL), nsnull,
|
|
|
|
baseURI);
|
2001-06-20 01:25:09 +00:00
|
|
|
if (NS_FAILED(rv))
|
|
|
|
return rv;
|
|
|
|
|
2002-05-17 22:24:06 +00:00
|
|
|
if (NS_FAILED(sSecMan->CheckLoadURIFromScript(cx, uriToLoad))) {
|
2001-06-20 01:25:09 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
2002-05-17 22:24:06 +00:00
|
|
|
}
|
2001-06-20 01:25:09 +00:00
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
void
|
|
|
|
GlobalWindowImpl::FlushPendingNotifications(PRBool aFlushReflows)
|
1999-09-21 14:18:52 +00:00
|
|
|
{
|
2002-02-05 05:47:22 +00:00
|
|
|
nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
|
|
|
|
if (doc) {
|
|
|
|
doc->FlushPendingNotifications(aFlushReflows);
|
2000-08-29 00:14:23 +00:00
|
|
|
}
|
|
|
|
}
|
1999-09-21 14:18:52 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
// QueryInterface implementation for nsGlobalChromeWindow
|
|
|
|
NS_INTERFACE_MAP_BEGIN(nsGlobalChromeWindow)
|
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIDOMChromeWindow)
|
|
|
|
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(ChromeWindow)
|
|
|
|
NS_INTERFACE_MAP_END_INHERITING(GlobalWindowImpl)
|
|
|
|
|
|
|
|
NS_IMPL_ADDREF_INHERITED(nsGlobalChromeWindow, GlobalWindowImpl)
|
|
|
|
NS_IMPL_RELEASE_INHERITED(nsGlobalChromeWindow, GlobalWindowImpl)
|
|
|
|
|
|
|
|
// nsGlobalChromeWindow implementation
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
nsGlobalChromeWindow::GetTitle(nsAString& aTitle)
|
2002-02-09 03:36:55 +00:00
|
|
|
{
|
|
|
|
aTitle = mTitle;
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
nsGlobalChromeWindow::SetTitle(const nsAString& aTitle)
|
2002-02-09 03:36:55 +00:00
|
|
|
{
|
|
|
|
mTitle = aTitle;
|
|
|
|
if(mDocShell) {
|
|
|
|
nsCOMPtr<nsIBaseWindow> docShellAsWin(do_QueryInterface(mDocShell));
|
|
|
|
if(docShellAsWin) {
|
|
|
|
docShellAsWin->SetTitle(PromiseFlatString(mTitle).get());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsGlobalChromeWindow::GetWindowState(PRUint16* aWindowState)
|
|
|
|
{
|
|
|
|
*aWindowState = nsIDOMChromeWindow::STATE_NORMAL;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
nsresult rv = GetMainWidget(getter_AddRefs(widget));
|
|
|
|
|
|
|
|
PRInt32 aMode = 0;
|
|
|
|
|
|
|
|
if (widget) {
|
|
|
|
rv = widget->GetSizeMode(&aMode);
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (aMode) {
|
|
|
|
case nsSizeMode_Minimized:
|
|
|
|
*aWindowState = nsIDOMChromeWindow::STATE_MINIMIZED;
|
|
|
|
break;
|
|
|
|
case nsSizeMode_Maximized:
|
|
|
|
*aWindowState = nsIDOMChromeWindow::STATE_MAXIMIZED;
|
|
|
|
break;
|
|
|
|
case nsSizeMode_Normal:
|
|
|
|
*aWindowState = nsIDOMChromeWindow::STATE_NORMAL;
|
2002-04-17 04:17:16 +00:00
|
|
|
break;
|
2002-02-09 03:36:55 +00:00
|
|
|
default:
|
|
|
|
NS_WARNING("Illegal window state for this chrome window");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsGlobalChromeWindow::Maximize()
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
nsresult rv = GetMainWidget(getter_AddRefs(widget));
|
|
|
|
|
|
|
|
if (widget) {
|
|
|
|
rv = widget->SetSizeMode(nsSizeMode_Maximized);
|
|
|
|
}
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsGlobalChromeWindow::Minimize()
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
nsresult rv = GetMainWidget(getter_AddRefs(widget));
|
|
|
|
|
|
|
|
if (widget) {
|
2002-02-20 03:33:52 +00:00
|
|
|
// minimize doesn't send deactivate events on windows,
|
|
|
|
// so we need to forcefully restore the os chrome
|
|
|
|
nsCOMPtr<nsIFullScreen> fullScreen =
|
|
|
|
do_GetService("@mozilla.org/browser/fullscreen;1");
|
|
|
|
if (fullScreen)
|
|
|
|
fullScreen->ShowAllOSChrome();
|
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
rv = widget->SetSizeMode(nsSizeMode_Minimized);
|
|
|
|
}
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsGlobalChromeWindow::Restore()
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
nsresult rv = GetMainWidget(getter_AddRefs(widget));
|
|
|
|
|
|
|
|
if (widget) {
|
|
|
|
rv = widget->SetSizeMode(nsSizeMode_Normal);
|
|
|
|
}
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsGlobalChromeWindow::GetAttention()
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
nsresult rv = GetMainWidget(getter_AddRefs(widget));
|
|
|
|
|
|
|
|
if (widget) {
|
|
|
|
rv = widget->GetAttention();
|
|
|
|
}
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Note: This call will lock the cursor, it will not change as it moves.
|
|
|
|
//To unlock, the cursor must be set back to CURSOR_AUTO.
|
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
nsGlobalChromeWindow::SetCursor(const nsAString& aCursor)
|
2002-02-09 03:36:55 +00:00
|
|
|
{
|
|
|
|
nsresult rv = NS_OK;
|
|
|
|
PRInt32 cursor;
|
|
|
|
|
|
|
|
if (aCursor.Equals(NS_LITERAL_STRING("auto")))
|
|
|
|
cursor = NS_STYLE_CURSOR_AUTO;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("default")))
|
|
|
|
cursor = NS_STYLE_CURSOR_DEFAULT;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("pointer")))
|
|
|
|
cursor = NS_STYLE_CURSOR_POINTER;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("crosshair")))
|
|
|
|
cursor = NS_STYLE_CURSOR_CROSSHAIR;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("move")))
|
|
|
|
cursor = NS_STYLE_CURSOR_MOVE;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("text")))
|
|
|
|
cursor = NS_STYLE_CURSOR_TEXT;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("wait")))
|
|
|
|
cursor = NS_STYLE_CURSOR_WAIT;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("help")))
|
|
|
|
cursor = NS_STYLE_CURSOR_HELP;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("n-resize")))
|
|
|
|
cursor = NS_STYLE_CURSOR_N_RESIZE;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("s-resize")))
|
|
|
|
cursor = NS_STYLE_CURSOR_S_RESIZE;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("w-resize")))
|
|
|
|
cursor = NS_STYLE_CURSOR_W_RESIZE;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("e-resize")))
|
|
|
|
cursor = NS_STYLE_CURSOR_E_RESIZE;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("ne-resize")))
|
|
|
|
cursor = NS_STYLE_CURSOR_NE_RESIZE;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("nw-resize")))
|
|
|
|
cursor = NS_STYLE_CURSOR_NW_RESIZE;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("se-resize")))
|
|
|
|
cursor = NS_STYLE_CURSOR_SE_RESIZE;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("sw-resize")))
|
|
|
|
cursor = NS_STYLE_CURSOR_SW_RESIZE;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("copy")))
|
|
|
|
cursor = NS_STYLE_CURSOR_COPY; // CSS3
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("alias")))
|
|
|
|
cursor = NS_STYLE_CURSOR_ALIAS;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("context-menu")))
|
|
|
|
cursor = NS_STYLE_CURSOR_CONTEXT_MENU;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("cell")))
|
|
|
|
cursor = NS_STYLE_CURSOR_CELL;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("grab")))
|
|
|
|
cursor = NS_STYLE_CURSOR_GRAB;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("grabbing")))
|
|
|
|
cursor = NS_STYLE_CURSOR_GRABBING;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("spinning")))
|
|
|
|
cursor = NS_STYLE_CURSOR_SPINNING;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("count-up")))
|
|
|
|
cursor = NS_STYLE_CURSOR_COUNT_UP;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("count-down")))
|
|
|
|
cursor = NS_STYLE_CURSOR_COUNT_DOWN;
|
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("count-up-down")))
|
|
|
|
cursor = NS_STYLE_CURSOR_COUNT_UP_DOWN;
|
|
|
|
else
|
|
|
|
return NS_OK;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPresContext> presContext;
|
|
|
|
mDocShell->GetPresContext(getter_AddRefs(presContext));
|
|
|
|
if (presContext) {
|
|
|
|
nsCOMPtr<nsIEventStateManager> esm;
|
|
|
|
if (NS_SUCCEEDED(presContext->GetEventStateManager(getter_AddRefs(esm)))) {
|
|
|
|
// Need root widget.
|
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
mDocShell->GetPresShell(getter_AddRefs(presShell));
|
|
|
|
NS_ENSURE_TRUE(presShell, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIViewManager> vm;
|
|
|
|
presShell->GetViewManager(getter_AddRefs(vm));
|
|
|
|
NS_ENSURE_TRUE(vm, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsIView *rootView;
|
|
|
|
vm->GetRootView(rootView);
|
|
|
|
NS_ENSURE_TRUE(rootView, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
rootView->GetWidget(*getter_AddRefs(widget));
|
|
|
|
NS_ENSURE_TRUE(widget, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
// Call esm and set cursor.
|
|
|
|
rv = esm->SetCursor(cursor, widget, PR_TRUE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsGlobalChromeWindow::GetMainWidget(nsIWidget** aMainWidget)
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
nsresult rv = GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
|
|
|
|
if (treeOwnerAsWin) {
|
|
|
|
rv = treeOwnerAsWin->GetMainWidget(aMainWidget);
|
|
|
|
}
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl: Creator Function (This should go away)
|
2000-08-22 03:51:17 +00:00
|
|
|
//*****************************************************************************
|
1999-07-07 07:50:03 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
nsresult
|
|
|
|
NS_NewScriptGlobalObject(PRBool aIsChrome, nsIScriptGlobalObject **aResult)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
*aResult = nsnull;
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
GlobalWindowImpl *global;
|
|
|
|
|
|
|
|
if (aIsChrome) {
|
|
|
|
global = new nsGlobalChromeWindow();
|
|
|
|
} else {
|
|
|
|
global = new GlobalWindowImpl();
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_TRUE(global, NS_ERROR_OUT_OF_MEMORY);
|
|
|
|
|
|
|
|
return CallQueryInterface(NS_STATIC_CAST(nsIScriptGlobalObject *, global),
|
|
|
|
aResult);
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
//*** NavigatorImpl: Object Management
|
|
|
|
//*****************************************************************************
|
1999-07-07 07:50:03 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
NavigatorImpl::NavigatorImpl(nsIDocShell *aDocShell) :
|
|
|
|
mMimeTypes(nsnull),
|
|
|
|
mPlugins(nsnull),
|
2001-01-23 22:29:41 +00:00
|
|
|
mDocShell(aDocShell)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_INIT_REFCNT();
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
NavigatorImpl::~NavigatorImpl()
|
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IF_RELEASE(mMimeTypes);
|
|
|
|
NS_IF_RELEASE(mPlugins);
|
2002-02-13 04:20:46 +00:00
|
|
|
sPrefInternal_id = JSVAL_VOID;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// NavigatorImpl::nsISupports
|
|
|
|
//*****************************************************************************
|
|
|
|
|
1998-07-16 01:16:47 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
// QueryInterface implementation for NavigatorImpl
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_INTERFACE_MAP_BEGIN(NavigatorImpl)
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMNavigator)
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIDOMNavigator)
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIDOMJSNavigator)
|
|
|
|
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Navigator)
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_INTERFACE_MAP_END
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMPL_ADDREF(NavigatorImpl)
|
|
|
|
NS_IMPL_RELEASE(NavigatorImpl)
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2001-01-23 22:29:41 +00:00
|
|
|
|
|
|
|
void NavigatorImpl::SetDocShell(nsIDocShell *aDocShell)
|
|
|
|
{
|
|
|
|
mDocShell = aDocShell;
|
|
|
|
if (mPlugins)
|
|
|
|
mPlugins->SetDocShell(aDocShell);
|
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// NavigatorImpl::nsIDOMNavigator
|
|
|
|
//*****************************************************************************
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
NavigatorImpl::GetUserAgent(nsAString& aUserAgent)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult res;
|
2001-05-11 21:05:08 +00:00
|
|
|
nsCOMPtr<nsIHttpProtocolHandler>
|
2000-08-22 03:51:17 +00:00
|
|
|
service(do_GetService(kHTTPHandlerCID, &res));
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (NS_SUCCEEDED(res) && service) {
|
2002-03-20 22:50:33 +00:00
|
|
|
nsCAutoString ua;
|
|
|
|
res = service->GetUserAgent(ua);
|
|
|
|
CopyASCIItoUCS2(ua, aUserAgent);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
1999-08-03 19:00:51 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return res;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
NavigatorImpl::GetAppCodeName(nsAString& aAppCodeName)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult res;
|
2001-05-11 21:05:08 +00:00
|
|
|
nsCOMPtr<nsIHttpProtocolHandler>
|
2000-08-22 03:51:17 +00:00
|
|
|
service(do_GetService(kHTTPHandlerCID, &res));
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (NS_SUCCEEDED(res) && service) {
|
2002-03-20 22:50:33 +00:00
|
|
|
nsCAutoString appName;
|
|
|
|
res = service->GetAppName(appName);
|
|
|
|
CopyASCIItoUCS2(appName, aAppCodeName);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
1998-09-17 00:55:35 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return res;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
NavigatorImpl::GetAppVersion(nsAString& aAppVersion)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult res;
|
2001-05-11 21:05:08 +00:00
|
|
|
nsCOMPtr<nsIHttpProtocolHandler>
|
2000-08-22 03:51:17 +00:00
|
|
|
service(do_GetService(kHTTPHandlerCID, &res));
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (NS_SUCCEEDED(res) && service) {
|
2002-03-20 22:50:33 +00:00
|
|
|
nsCAutoString str;
|
|
|
|
res = service->GetAppVersion(str);
|
|
|
|
CopyASCIItoUCS2(str, aAppVersion);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
aAppVersion.Append(NS_LITERAL_STRING(" ("));
|
2002-03-20 22:50:33 +00:00
|
|
|
res = service->GetPlatform(str);
|
2000-08-22 03:51:17 +00:00
|
|
|
if (NS_FAILED(res))
|
|
|
|
return res;
|
|
|
|
|
2001-05-11 21:05:08 +00:00
|
|
|
aAppVersion += NS_ConvertASCIItoUCS2(str);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2002-02-09 03:36:55 +00:00
|
|
|
aAppVersion.Append(NS_LITERAL_STRING("; "));
|
2002-03-20 22:50:33 +00:00
|
|
|
res = service->GetLanguage(str);
|
2000-08-22 03:51:17 +00:00
|
|
|
if (NS_FAILED(res))
|
|
|
|
return res;
|
|
|
|
|
2001-05-11 21:05:08 +00:00
|
|
|
aAppVersion += NS_ConvertASCIItoUCS2(str);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2000-08-23 17:27:06 +00:00
|
|
|
aAppVersion.Append(PRUnichar(')'));
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
1998-09-17 00:55:35 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return res;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
NavigatorImpl::GetAppName(nsAString& aAppName)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-23 17:27:06 +00:00
|
|
|
aAppName.Assign(NS_LITERAL_STRING("Netscape"));
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
NavigatorImpl::GetLanguage(nsAString& aLanguage)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult res;
|
2001-05-11 21:05:08 +00:00
|
|
|
nsCOMPtr<nsIHttpProtocolHandler>
|
2000-08-22 03:51:17 +00:00
|
|
|
service(do_GetService(kHTTPHandlerCID, &res));
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (NS_SUCCEEDED(res) && service) {
|
2002-03-20 22:50:33 +00:00
|
|
|
nsCAutoString lang;
|
|
|
|
res = service->GetLanguage(lang);
|
|
|
|
CopyASCIItoUCS2(lang, aLanguage);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
1998-09-17 00:55:35 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return res;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
NavigatorImpl::GetPlatform(nsAString& aPlatform)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult res;
|
2001-05-11 21:05:08 +00:00
|
|
|
nsCOMPtr<nsIHttpProtocolHandler>
|
2000-08-22 03:51:17 +00:00
|
|
|
service(do_GetService(kHTTPHandlerCID, &res));
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (NS_SUCCEEDED(res) && service) {
|
|
|
|
// sorry for the #if platform ugliness, but Communicator is
|
|
|
|
// likewise hardcoded and we're seeking backward compatibility
|
|
|
|
// here (bug 47080)
|
2000-09-22 04:52:22 +00:00
|
|
|
#if defined(WIN32)
|
|
|
|
aPlatform = NS_LITERAL_STRING("Win32");
|
2002-04-24 00:55:53 +00:00
|
|
|
#elif defined(XP_MAC) || defined(XP_MACOSX)
|
2000-09-22 04:52:22 +00:00
|
|
|
// XXX not sure what to do about Mac OS X on non-PPC, but since Comm 4.x
|
|
|
|
// doesn't know about it this will actually be backward compatible
|
|
|
|
aPlatform = NS_LITERAL_STRING("MacPPC");
|
|
|
|
#else
|
|
|
|
// XXX Communicator uses compiled-in build-time string defines
|
|
|
|
// to indicate the platform it was compiled *for*, not what it is
|
|
|
|
// currently running *on* which is what this does.
|
2002-03-20 22:50:33 +00:00
|
|
|
nsCAutoString plat;
|
|
|
|
res = service->GetOscpu(plat);
|
|
|
|
CopyASCIItoUCS2(plat, aPlatform);
|
2000-09-22 04:52:22 +00:00
|
|
|
#endif
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
1998-09-17 00:55:35 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return res;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
NavigatorImpl::GetOscpu(nsAString& aOSCPU)
|
2000-03-21 22:39:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult res;
|
2001-05-11 21:05:08 +00:00
|
|
|
nsCOMPtr<nsIHttpProtocolHandler>
|
2000-08-22 03:51:17 +00:00
|
|
|
service(do_GetService(kHTTPHandlerCID, &res));
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (NS_SUCCEEDED(res) && service) {
|
2002-03-20 22:50:33 +00:00
|
|
|
nsCAutoString oscpu;
|
|
|
|
res = service->GetOscpu(oscpu);
|
|
|
|
CopyASCIItoUCS2(oscpu, aOSCPU);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-03-21 22:39:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return res;
|
2000-03-21 22:39:54 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
NavigatorImpl::GetVendor(nsAString& aVendor)
|
2000-03-21 22:39:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult res;
|
2001-05-11 21:05:08 +00:00
|
|
|
nsCOMPtr<nsIHttpProtocolHandler>
|
2000-08-22 03:51:17 +00:00
|
|
|
service(do_GetService(kHTTPHandlerCID, &res));
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (NS_SUCCEEDED(res) && service) {
|
2002-03-20 22:50:33 +00:00
|
|
|
nsCAutoString vendor;
|
|
|
|
res = service->GetVendor(vendor);
|
|
|
|
CopyASCIItoUCS2(vendor, aVendor);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-03-21 22:39:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return res;
|
2000-03-21 22:39:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
NavigatorImpl::GetVendorSub(nsAString& aVendorSub)
|
2000-03-21 22:39:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult res;
|
2001-05-11 21:05:08 +00:00
|
|
|
nsCOMPtr<nsIHttpProtocolHandler>
|
2000-08-22 03:51:17 +00:00
|
|
|
service(do_GetService(kHTTPHandlerCID, &res));
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (NS_SUCCEEDED(res) && service) {
|
2002-03-20 22:50:33 +00:00
|
|
|
nsCAutoString vendor;
|
|
|
|
res = service->GetVendorSub(vendor);
|
|
|
|
CopyASCIItoUCS2(vendor, aVendorSub);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-03-21 22:39:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return res;
|
2000-03-21 22:39:54 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
NavigatorImpl::GetProduct(nsAString& aProduct)
|
2000-03-21 22:39:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult res;
|
2001-05-11 21:05:08 +00:00
|
|
|
nsCOMPtr<nsIHttpProtocolHandler>
|
2000-08-22 03:51:17 +00:00
|
|
|
service(do_GetService(kHTTPHandlerCID, &res));
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (NS_SUCCEEDED(res) && service) {
|
2002-03-20 22:50:33 +00:00
|
|
|
nsCAutoString product;
|
|
|
|
res = service->GetProduct(product);
|
|
|
|
CopyASCIItoUCS2(product, aProduct);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-03-21 22:39:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return res;
|
2000-03-21 22:39:54 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
NavigatorImpl::GetProductSub(nsAString& aProductSub)
|
2000-03-21 22:39:54 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult res;
|
2001-05-11 21:05:08 +00:00
|
|
|
nsCOMPtr<nsIHttpProtocolHandler>
|
2000-08-22 03:51:17 +00:00
|
|
|
service(do_GetService(kHTTPHandlerCID, &res));
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (NS_SUCCEEDED(res) && service) {
|
2002-03-20 22:50:33 +00:00
|
|
|
nsCAutoString productSub;
|
|
|
|
res = service->GetProductSub(productSub);
|
|
|
|
CopyASCIItoUCS2(productSub, aProductSub);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
2000-03-21 22:39:54 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return res;
|
2000-03-21 22:39:54 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
NavigatorImpl::GetSecurityPolicy(nsAString& aSecurityPolicy)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
NavigatorImpl::GetMimeTypes(nsIDOMMimeTypeArray **aMimeTypes)
|
1999-04-15 21:44:18 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mMimeTypes) {
|
|
|
|
mMimeTypes = new MimeTypeArrayImpl(this);
|
|
|
|
NS_IF_ADDREF(mMimeTypes);
|
|
|
|
}
|
1999-04-20 19:41:17 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aMimeTypes = mMimeTypes;
|
|
|
|
NS_IF_ADDREF(mMimeTypes);
|
1999-04-20 19:41:17 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1999-04-15 21:44:18 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
NavigatorImpl::GetPlugins(nsIDOMPluginArray **aPlugins)
|
1999-04-15 21:44:18 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (!mPlugins) {
|
2001-01-23 22:29:41 +00:00
|
|
|
mPlugins = new PluginArrayImpl(this, mDocShell);
|
2001-04-04 22:09:56 +00:00
|
|
|
if (!mPlugins)
|
|
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
|
|
|
|
|
NS_ADDREF(mPlugins);
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
1999-04-20 19:41:17 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
*aPlugins = mPlugins;
|
2001-04-04 22:09:56 +00:00
|
|
|
NS_ADDREF(mPlugins);
|
1999-04-20 19:41:17 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1999-04-15 21:44:18 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
NavigatorImpl::GetCookieEnabled(PRBool *aCookieEnabled)
|
1999-12-22 22:42:06 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult rv = NS_OK;
|
|
|
|
*aCookieEnabled = PR_FALSE;
|
1999-12-22 22:42:06 +00:00
|
|
|
|
2001-07-25 07:54:28 +00:00
|
|
|
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefServiceCID, &rv));
|
2001-03-29 02:11:48 +00:00
|
|
|
if (NS_FAILED(rv) || prefs == nsnull)
|
2000-08-22 03:51:17 +00:00
|
|
|
return rv;
|
1999-12-22 22:42:06 +00:00
|
|
|
|
2001-03-29 02:11:48 +00:00
|
|
|
PRInt32 cookieBehaviorPref;
|
|
|
|
rv = prefs->GetIntPref("network.cookie.cookieBehavior", &cookieBehaviorPref);
|
|
|
|
|
|
|
|
if (NS_FAILED(rv))
|
|
|
|
return rv;
|
1999-12-22 22:42:06 +00:00
|
|
|
|
2001-03-29 02:11:48 +00:00
|
|
|
const PRInt32 DONT_USE = 2;
|
|
|
|
*aCookieEnabled = (cookieBehaviorPref != DONT_USE);
|
|
|
|
return rv;
|
|
|
|
}
|
1999-12-22 22:42:06 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
NavigatorImpl::JavaEnabled(PRBool *aReturn)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult rv = NS_OK;
|
|
|
|
*aReturn = PR_FALSE;
|
|
|
|
|
|
|
|
// determine whether user has enabled java.
|
2001-04-04 22:09:56 +00:00
|
|
|
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefServiceCID, &rv));
|
|
|
|
if (NS_FAILED(rv))
|
2000-08-22 03:51:17 +00:00
|
|
|
return rv;
|
1999-05-08 16:37:53 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// if pref doesn't exist, map result to false.
|
2001-04-04 22:09:56 +00:00
|
|
|
if (NS_FAILED(prefs->GetBoolPref("security.enable_java", aReturn))) {
|
2000-08-22 03:51:17 +00:00
|
|
|
*aReturn = PR_FALSE;
|
2001-04-04 22:09:56 +00:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
// if Java is not enabled, result is false and return reight away
|
|
|
|
if (!*aReturn)
|
|
|
|
return NS_OK;
|
|
|
|
|
2001-05-02 22:04:10 +00:00
|
|
|
// Ask the nsIJVMManager if Java is enabled
|
|
|
|
nsCOMPtr<nsIJVMManager> jvmService = do_GetService(kJVMServiceCID);
|
|
|
|
if (jvmService) {
|
|
|
|
jvmService->GetJavaEnabled(aReturn);
|
2001-04-04 22:09:56 +00:00
|
|
|
}
|
2001-05-02 22:04:10 +00:00
|
|
|
else {
|
|
|
|
*aReturn = PR_FALSE;
|
2001-04-04 22:09:56 +00:00
|
|
|
}
|
1999-05-08 16:37:53 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return rv;
|
1998-07-16 01:16:47 +00:00
|
|
|
}
|
1999-08-12 22:08:17 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
NavigatorImpl::TaintEnabled(PRBool *aReturn)
|
1999-08-27 06:05:42 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
*aReturn = PR_FALSE;
|
|
|
|
return NS_OK;
|
1999-08-27 06:05:42 +00:00
|
|
|
}
|
|
|
|
|
2002-02-13 04:20:46 +00:00
|
|
|
jsval
|
|
|
|
NavigatorImpl::sPrefInternal_id = JSVAL_VOID;
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
NavigatorImpl::Preference()
|
1999-08-27 06:05:42 +00:00
|
|
|
{
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsresult rv;
|
|
|
|
nsCOMPtr<nsIXPConnect> xpc(do_GetService(nsIXPConnect::GetCID(), &rv));
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
1999-08-27 06:05:42 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsCOMPtr<nsIXPCNativeCallContext> ncc;
|
1999-08-27 06:05:42 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(ncc));
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
1999-12-18 20:29:29 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
if (!ncc)
|
|
|
|
return NS_ERROR_NOT_AVAILABLE;
|
2000-08-22 03:51:17 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
PRUint32 argc;
|
|
|
|
|
|
|
|
ncc->GetArgc(&argc);
|
|
|
|
|
|
|
|
if (argc == 0) {
|
|
|
|
// No arguments means there's nothing to be done here.
|
|
|
|
|
|
|
|
return NS_OK;
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
1999-12-17 22:25:22 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
jsval *argv = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
ncc->GetArgvPtr(&argv);
|
|
|
|
NS_ENSURE_TRUE(argv, NS_ERROR_UNEXPECTED);
|
|
|
|
|
|
|
|
JSContext *cx = nsnull;
|
|
|
|
|
|
|
|
rv = ncc->GetJSContext(&cx);
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
//--Check to see if the caller is allowed to access prefs
|
2002-05-17 22:24:06 +00:00
|
|
|
if (sPrefInternal_id == JSVAL_VOID) {
|
|
|
|
sPrefInternal_id =
|
|
|
|
STRING_TO_JSVAL(::JS_InternString(cx, "preferenceinternal"));
|
|
|
|
}
|
2002-02-13 04:20:46 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
2001-05-08 19:43:47 +00:00
|
|
|
PRUint32 action;
|
2002-05-17 22:24:06 +00:00
|
|
|
if (argc == 1) {
|
2001-05-08 19:43:47 +00:00
|
|
|
action = nsIXPCSecurityManager::ACCESS_GET_PROPERTY;
|
2002-05-17 22:24:06 +00:00
|
|
|
} else {
|
2001-05-08 19:43:47 +00:00
|
|
|
action = nsIXPCSecurityManager::ACCESS_SET_PROPERTY;
|
2002-05-17 22:24:06 +00:00
|
|
|
}
|
2002-02-13 04:20:46 +00:00
|
|
|
|
2002-05-17 22:24:06 +00:00
|
|
|
nsCOMPtr<nsIScriptSecurityManager> secMan =
|
|
|
|
do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
rv = secMan->CheckPropertyAccess(cx, nsnull, "Navigator", sPrefInternal_id,
|
|
|
|
action);
|
|
|
|
if (NS_FAILED(rv)) {
|
|
|
|
return NS_OK;
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPref> pref(do_GetService(kPrefServiceCID, &rv));
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
JSString *str = ::JS_ValueToString(cx, argv[0]);
|
|
|
|
NS_ENSURE_TRUE(str, NS_ERROR_OUT_OF_MEMORY);
|
|
|
|
|
|
|
|
jsval *retval = nsnull;
|
|
|
|
|
|
|
|
rv = ncc->GetRetValPtr(&retval);
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
char *prefStr = ::JS_GetStringBytes(str);
|
|
|
|
if (argc == 1) {
|
|
|
|
PRInt32 prefType;
|
|
|
|
|
|
|
|
pref->GetPrefType(prefStr, &prefType);
|
|
|
|
|
|
|
|
switch (prefType & nsIPref::ePrefValuetypeMask) {
|
|
|
|
case nsIPref::ePrefString:
|
|
|
|
{
|
|
|
|
nsXPIDLCString prefCharVal;
|
|
|
|
rv = pref->CopyCharPref(prefStr, getter_Copies(prefCharVal));
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
JSString *retStr = ::JS_NewStringCopyZ(cx, prefCharVal);
|
|
|
|
NS_ENSURE_TRUE(retStr, NS_ERROR_OUT_OF_MEMORY);
|
|
|
|
|
|
|
|
*retval = STRING_TO_JSVAL(retStr);
|
|
|
|
|
|
|
|
break;
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
|
|
|
case nsIPref::ePrefInt:
|
|
|
|
{
|
|
|
|
PRInt32 prefIntVal;
|
|
|
|
rv = pref->GetIntPref(prefStr, &prefIntVal);
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
*retval = INT_TO_JSVAL(prefIntVal);
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case nsIPref::ePrefBool:
|
|
|
|
{
|
|
|
|
PRBool prefBoolVal;
|
|
|
|
|
|
|
|
rv = pref->GetBoolPref(prefStr, &prefBoolVal);
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
*retval = BOOLEAN_TO_JSVAL(prefBoolVal);
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
{
|
|
|
|
// Nothing we can do here...
|
|
|
|
|
|
|
|
return ncc->SetReturnValueWasSet(PR_FALSE);
|
1999-11-17 00:43:19 +00:00
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
|
|
|
ncc->SetReturnValueWasSet(PR_TRUE);
|
|
|
|
} else {
|
|
|
|
if (JSVAL_IS_STRING(argv[1])) {
|
|
|
|
JSString *valueJSStr = ::JS_ValueToString(cx, argv[1]);
|
|
|
|
NS_ENSURE_TRUE(valueJSStr, NS_ERROR_OUT_OF_MEMORY);
|
|
|
|
|
|
|
|
rv = pref->SetCharPref(prefStr, ::JS_GetStringBytes(valueJSStr));
|
|
|
|
} else if (JSVAL_IS_INT(argv[1])) {
|
|
|
|
jsint valueInt = JSVAL_TO_INT(argv[1]);
|
|
|
|
|
|
|
|
rv = pref->SetIntPref(prefStr, (PRInt32) valueInt);
|
|
|
|
} else if (JSVAL_IS_BOOLEAN(argv[1])) {
|
|
|
|
JSBool valueBool = JSVAL_TO_BOOLEAN(argv[1]);
|
|
|
|
|
|
|
|
rv = pref->SetBoolPref(prefStr, (PRBool) valueBool);
|
|
|
|
} else if (JSVAL_IS_NULL(argv[1])) {
|
|
|
|
rv = pref->DeleteBranch(prefStr);
|
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
}
|
1999-11-17 00:43:19 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
return rv;
|
1999-10-14 23:28:17 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
2001-07-23 05:36:52 +00:00
|
|
|
nsresult
|
|
|
|
NavigatorImpl::RefreshMIMEArray()
|
|
|
|
{
|
|
|
|
nsresult rv = NS_OK;
|
|
|
|
if (mMimeTypes)
|
|
|
|
rv = mMimeTypes->Refresh();
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
2000-02-15 01:08:04 +00:00
|
|
|
#ifdef XP_MAC
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
//*** DOM Controller Stuff
|
|
|
|
//*****************************************************************************
|
|
|
|
|
1999-12-13 23:13:33 +00:00
|
|
|
#ifdef DOM_CONTROLLER
|
|
|
|
// nsDOMWindowController
|
2001-04-04 23:48:03 +00:00
|
|
|
const char * const sCopyString = "cmd_copy";
|
|
|
|
const char * const sCutString = "cmd_cut";
|
|
|
|
const char * const sPasteString = "cmd_paste";
|
|
|
|
const char * const sSelectAllString = "cmd_selectAll";
|
2001-08-09 09:24:26 +00:00
|
|
|
const char * const sSelectNoneString = "cmd_selectNone";
|
2001-04-18 06:06:31 +00:00
|
|
|
const char * const sCopyLinkString = "cmd_copyLink";
|
|
|
|
const char * const sCopyImageLocationString = "cmd_copyImageLocation";
|
|
|
|
const char * const sCopyImageContentsString = "cmd_copyImageContents";
|
2001-04-04 23:48:03 +00:00
|
|
|
|
|
|
|
const char * const sScrollTopString = "cmd_scrollTop";
|
|
|
|
const char * const sScrollBottomString = "cmd_scrollBottom";
|
|
|
|
const char * const sScrollPageUpString = "cmd_scrollPageUp";
|
|
|
|
const char * const sScrollPageDownString = "cmd_scrollPageDown";
|
|
|
|
const char * const sScrollLineUpString = "cmd_scrollLineUp";
|
|
|
|
const char * const sScrollLineDownString = "cmd_scrollLineDown";
|
|
|
|
const char * const sScrollLeftString = "cmd_scrollLeft";
|
|
|
|
const char * const sScrollRightString = "cmd_scrollRight";
|
1999-12-14 01:38:17 +00:00
|
|
|
|
2001-02-15 05:07:46 +00:00
|
|
|
// These are so the browser can use editor navigation key bindings
|
|
|
|
// helps with accessibility (boolean pref accessibility.browsewithcaret)
|
1999-12-14 01:38:17 +00:00
|
|
|
|
2001-04-04 23:48:03 +00:00
|
|
|
const char * const sSelectCharPreviousString = "cmd_selectCharPrevious";
|
|
|
|
const char * const sSelectCharNextString = "cmd_selectCharNext";
|
1999-12-14 01:38:17 +00:00
|
|
|
|
2001-04-04 23:48:03 +00:00
|
|
|
const char * const sWordPreviousString = "cmd_wordPrevious";
|
|
|
|
const char * const sWordNextString = "cmd_wordNext";
|
|
|
|
const char * const sSelectWordPreviousString = "cmd_selectWordPrevious";
|
|
|
|
const char * const sSelectWordNextString = "cmd_selectWordNext";
|
1999-12-14 01:38:17 +00:00
|
|
|
|
2001-04-04 23:48:03 +00:00
|
|
|
const char * const sBeginLineString = "cmd_beginLine";
|
|
|
|
const char * const sEndLineString = "cmd_endLine";
|
|
|
|
const char * const sSelectBeginLineString = "cmd_selectBeginLine";
|
|
|
|
const char * const sSelectEndLineString = "cmd_selectEndLine";
|
1999-12-15 03:59:38 +00:00
|
|
|
|
2001-04-04 23:48:03 +00:00
|
|
|
const char * const sSelectLinePreviousString = "cmd_selectLinePrevious";
|
|
|
|
const char * const sSelectLineNextString = "cmd_selectLineNext";
|
1999-12-14 01:38:17 +00:00
|
|
|
|
2001-04-04 23:48:03 +00:00
|
|
|
const char * const sSelectPagePreviousString = "cmd_selectPagePrevious";
|
|
|
|
const char * const sSelectPageNextString = "cmd_selectPageNext";
|
2000-05-16 14:28:09 +00:00
|
|
|
|
2001-04-04 23:48:03 +00:00
|
|
|
const char * const sSelectMoveTopString = "cmd_selectMoveTop";
|
|
|
|
const char * const sSelectMoveBottomString = "cmd_selectMoveBottom";
|
1999-12-13 23:13:33 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_IMPL_ADDREF(nsDOMWindowController)
|
|
|
|
NS_IMPL_RELEASE(nsDOMWindowController)
|
1999-12-13 23:13:33 +00:00
|
|
|
|
|
|
|
NS_INTERFACE_MAP_BEGIN(nsDOMWindowController)
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIController)
|
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIController)
|
1999-12-13 23:13:33 +00:00
|
|
|
NS_INTERFACE_MAP_END
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
|
1999-12-14 01:38:17 +00:00
|
|
|
|
2000-09-01 01:54:35 +00:00
|
|
|
nsDOMWindowController::nsDOMWindowController(nsIDOMWindowInternal *aWindow)
|
1999-12-13 23:13:33 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_INIT_REFCNT();
|
|
|
|
mWindow = aWindow;
|
2001-02-15 05:07:46 +00:00
|
|
|
|
Fixes bug 66597, bug 103284, bug 114440, bug 120023, bug 128741, bug 19259. Cleans up browse with caret, makes it work with XML content docs, creates keyboard toggle for it (Accel+shift+K), synchronizes focus and document selection so that users can tab navigate relative to their last find or click in text, or vice versa, makes tabbing move relative to named anchor that has been jumped to. r=bryner, sr=alecf, a=asa
2002-03-10 06:21:48 +00:00
|
|
|
// Set mBrowseWithCaret so we don't need to check pref every time
|
2001-02-15 05:07:46 +00:00
|
|
|
mBrowseWithCaret = PR_FALSE;
|
Fixes bug 66597, bug 103284, bug 114440, bug 120023, bug 128741, bug 19259. Cleans up browse with caret, makes it work with XML content docs, creates keyboard toggle for it (Accel+shift+K), synchronizes focus and document selection so that users can tab navigate relative to their last find or click in text, or vice versa, makes tabbing move relative to named anchor that has been jumped to. r=bryner, sr=alecf, a=asa
2002-03-10 06:21:48 +00:00
|
|
|
nsCOMPtr<nsIEventStateManager> esm;
|
|
|
|
if (NS_SUCCEEDED(GetEventStateManager(getter_AddRefs(esm))))
|
|
|
|
esm->ResetBrowseWithCaret(&mBrowseWithCaret);
|
2002-04-02 01:56:12 +00:00
|
|
|
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefServiceCID));
|
|
|
|
if (prefs)
|
|
|
|
prefs->RegisterCallback("accessibility.browsewithcaret", (PrefChangedFunc)nsDOMWindowController::BrowseWithCaretPrefCallback, (void*)this);
|
|
|
|
}
|
|
|
|
|
|
|
|
nsDOMWindowController::~nsDOMWindowController()
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefServiceCID));
|
|
|
|
if (prefs)
|
|
|
|
prefs->UnregisterCallback("accessibility.browsewithcaret", (PrefChangedFunc)nsDOMWindowController::BrowseWithCaretPrefCallback, (void*)this);
|
Fixes bug 66597, bug 103284, bug 114440, bug 120023, bug 128741, bug 19259. Cleans up browse with caret, makes it work with XML content docs, creates keyboard toggle for it (Accel+shift+K), synchronizes focus and document selection so that users can tab navigate relative to their last find or click in text, or vice versa, makes tabbing move relative to named anchor that has been jumped to. r=bryner, sr=alecf, a=asa
2002-03-10 06:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsDOMWindowController::GetEventStateManager(nsIEventStateManager **aEventStateManager)
|
|
|
|
{
|
|
|
|
*aEventStateManager = nsnull;
|
|
|
|
// Set browse with caret flag so we don't need to every time
|
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
GetPresShell(getter_AddRefs(presShell));
|
|
|
|
|
|
|
|
if (presShell) {
|
|
|
|
nsCOMPtr<nsIPresContext> presContext;
|
|
|
|
presShell->GetPresContext(getter_AddRefs(presContext));
|
|
|
|
if (presContext) {
|
|
|
|
nsCOMPtr<nsIEventStateManager> esm;
|
|
|
|
presContext->GetEventStateManager(getter_AddRefs(esm));
|
|
|
|
*aEventStateManager = esm;
|
|
|
|
if (esm) {
|
|
|
|
NS_ADDREF(*aEventStateManager);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
|
|
|
|
2002-04-02 01:56:12 +00:00
|
|
|
int PR_CALLBACK
|
|
|
|
nsDOMWindowController::BrowseWithCaretPrefCallback(const char* aPrefName, void* instance_data)
|
Fixes bug 66597, bug 103284, bug 114440, bug 120023, bug 128741, bug 19259. Cleans up browse with caret, makes it work with XML content docs, creates keyboard toggle for it (Accel+shift+K), synchronizes focus and document selection so that users can tab navigate relative to their last find or click in text, or vice versa, makes tabbing move relative to named anchor that has been jumped to. r=bryner, sr=alecf, a=asa
2002-03-10 06:21:48 +00:00
|
|
|
{
|
2002-04-02 01:56:12 +00:00
|
|
|
nsDOMWindowController* domWindowController = (nsDOMWindowController*)instance_data;
|
|
|
|
NS_ASSERTION(domWindowController, "bad instance data");
|
Fixes bug 66597, bug 103284, bug 114440, bug 120023, bug 128741, bug 19259. Cleans up browse with caret, makes it work with XML content docs, creates keyboard toggle for it (Accel+shift+K), synchronizes focus and document selection so that users can tab navigate relative to their last find or click in text, or vice versa, makes tabbing move relative to named anchor that has been jumped to. r=bryner, sr=alecf, a=asa
2002-03-10 06:21:48 +00:00
|
|
|
|
|
|
|
nsCOMPtr<nsIEventStateManager> esm;
|
2002-04-02 01:56:12 +00:00
|
|
|
|
|
|
|
if (NS_SUCCEEDED(domWindowController->GetEventStateManager(getter_AddRefs(esm))))
|
|
|
|
esm->ResetBrowseWithCaret(&domWindowController->mBrowseWithCaret);
|
|
|
|
|
|
|
|
return 0; // PREF_OK
|
1999-12-13 23:13:33 +00:00
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult
|
|
|
|
nsDOMWindowController::GetEditInterface(nsIContentViewerEdit **aEditInterface)
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIScriptGlobalObject> sgo(do_QueryInterface(mWindow));
|
|
|
|
NS_ENSURE_TRUE(sgo, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShell> docShell;
|
|
|
|
sgo->GetDocShell(getter_AddRefs(docShell));
|
|
|
|
NS_ENSURE_TRUE(docShell, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIContentViewer> viewer;
|
|
|
|
docShell->GetContentViewer(getter_AddRefs(viewer));
|
|
|
|
nsCOMPtr<nsIContentViewerEdit> edit(do_QueryInterface(viewer));
|
|
|
|
NS_ENSURE_TRUE(edit, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
*aEditInterface = edit;
|
|
|
|
NS_ADDREF(*aEditInterface);
|
|
|
|
return NS_OK;
|
1999-12-13 23:13:33 +00:00
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsresult
|
|
|
|
nsDOMWindowController::GetPresShell(nsIPresShell **aPresShell)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIScriptGlobalObject> sgo(do_QueryInterface(mWindow));
|
|
|
|
NS_ENSURE_TRUE(sgo, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIDocShell> docShell;
|
|
|
|
sgo->GetDocShell(getter_AddRefs(docShell));
|
|
|
|
NS_ENSURE_TRUE(docShell, NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(docShell->GetPresShell(aPresShell), NS_ERROR_FAILURE);
|
|
|
|
return NS_OK;
|
1999-12-14 01:38:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsDOMWindowController::GetSelectionController(nsISelectionController **aSelCon)
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
nsresult result = GetPresShell(getter_AddRefs(presShell));
|
2000-08-22 03:51:17 +00:00
|
|
|
if (presShell && NS_SUCCEEDED(result)) {
|
|
|
|
nsCOMPtr<nsISelectionController> selController =
|
|
|
|
do_QueryInterface(presShell);
|
|
|
|
if (selController) {
|
1999-12-14 01:38:17 +00:00
|
|
|
*aSelCon = selController;
|
|
|
|
NS_ADDREF(*aSelCon);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
}
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_FAILED(result) ? result : NS_ERROR_FAILURE;
|
1999-12-14 01:38:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
nsDOMWindowController::IsCommandEnabled(const nsAString& aCommand,
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
PRBool *aResult)
|
1999-12-13 23:13:33 +00:00
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(aResult);
|
|
|
|
|
1999-12-14 01:38:17 +00:00
|
|
|
*aResult = PR_FALSE;
|
1999-12-13 23:13:33 +00:00
|
|
|
nsresult rv = NS_ERROR_FAILURE;
|
2000-08-22 03:51:17 +00:00
|
|
|
|
|
|
|
nsCOMPtr<nsIContentViewerEdit> editInterface;
|
|
|
|
rv = GetEditInterface(getter_AddRefs(editInterface));
|
2001-04-18 06:06:31 +00:00
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
NS_ENSURE_TRUE(editInterface, NS_ERROR_NOT_INITIALIZED);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2001-04-18 06:06:31 +00:00
|
|
|
nsCAutoString commandName;
|
|
|
|
commandName.AssignWithConversion(aCommand);
|
2001-04-04 23:48:03 +00:00
|
|
|
|
|
|
|
if (commandName.Equals(sCopyString)) {
|
2000-08-22 03:51:17 +00:00
|
|
|
rv = editInterface->GetCopyable(aResult);
|
|
|
|
}
|
2001-04-04 23:48:03 +00:00
|
|
|
else if (commandName.Equals(sCutString)) {
|
2000-08-22 03:51:17 +00:00
|
|
|
rv = editInterface->GetCutable(aResult);
|
|
|
|
}
|
2001-04-04 23:48:03 +00:00
|
|
|
else if (commandName.Equals(sPasteString)) {
|
2000-08-22 03:51:17 +00:00
|
|
|
rv = editInterface->GetPasteable(aResult);
|
|
|
|
}
|
2001-04-04 23:48:03 +00:00
|
|
|
else if (commandName.Equals(sSelectAllString)) {
|
1999-12-13 23:13:33 +00:00
|
|
|
*aResult = PR_TRUE;
|
|
|
|
rv = NS_OK;
|
|
|
|
}
|
2001-08-09 09:24:26 +00:00
|
|
|
else if (commandName.Equals(sSelectNoneString)) {
|
|
|
|
*aResult = PR_TRUE;
|
|
|
|
rv = NS_OK;
|
|
|
|
}
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (commandName.Equals(sCopyLinkString)) {
|
|
|
|
rv = editInterface->GetInLink(aResult);
|
|
|
|
}
|
|
|
|
else if (commandName.Equals(sCopyImageLocationString)) {
|
|
|
|
rv = editInterface->GetInImage(aResult);
|
|
|
|
}
|
|
|
|
else if (commandName.Equals(sCopyImageContentsString)) {
|
|
|
|
rv = editInterface->GetInImage(aResult);
|
|
|
|
}
|
1999-12-14 01:38:17 +00:00
|
|
|
|
2001-04-18 06:06:31 +00:00
|
|
|
return rv;
|
1999-12-13 23:13:33 +00:00
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
nsDOMWindowController::SupportsCommand(const nsAString& aCommand,
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
PRBool *outSupported)
|
2001-04-04 23:48:03 +00:00
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(outSupported);
|
|
|
|
|
|
|
|
*outSupported = PR_FALSE;
|
|
|
|
|
2001-04-18 06:06:31 +00:00
|
|
|
nsCAutoString commandName;
|
|
|
|
commandName.AssignWithConversion(aCommand);
|
2001-04-04 23:48:03 +00:00
|
|
|
|
|
|
|
if (commandName.Equals(sCopyString) ||
|
|
|
|
commandName.Equals(sSelectAllString) ||
|
2001-08-09 09:24:26 +00:00
|
|
|
commandName.Equals(sSelectNoneString) ||
|
2001-04-04 23:48:03 +00:00
|
|
|
commandName.Equals(sCutString) ||
|
|
|
|
commandName.Equals(sPasteString) ||
|
|
|
|
commandName.Equals(sScrollTopString) ||
|
|
|
|
commandName.Equals(sScrollBottomString) ||
|
2001-04-18 06:06:31 +00:00
|
|
|
commandName.Equals(sCopyLinkString) ||
|
|
|
|
commandName.Equals(sCopyImageLocationString) ||
|
|
|
|
commandName.Equals(sCopyImageContentsString) ||
|
2001-04-04 23:48:03 +00:00
|
|
|
commandName.Equals(sScrollPageUpString) ||
|
|
|
|
commandName.Equals(sScrollPageDownString) ||
|
|
|
|
commandName.Equals(sScrollLineUpString) ||
|
|
|
|
commandName.Equals(sScrollLineDownString) ||
|
|
|
|
commandName.Equals(sScrollLeftString) ||
|
|
|
|
commandName.Equals(sScrollRightString) ||
|
|
|
|
commandName.Equals(sSelectCharPreviousString) ||
|
|
|
|
commandName.Equals(sSelectCharNextString) ||
|
|
|
|
commandName.Equals(sWordPreviousString) ||
|
|
|
|
commandName.Equals(sWordNextString) ||
|
|
|
|
commandName.Equals(sSelectWordPreviousString) ||
|
|
|
|
commandName.Equals(sSelectWordNextString) ||
|
|
|
|
commandName.Equals(sBeginLineString) ||
|
|
|
|
commandName.Equals(sEndLineString) ||
|
|
|
|
commandName.Equals(sSelectBeginLineString) ||
|
|
|
|
commandName.Equals(sSelectEndLineString) ||
|
|
|
|
commandName.Equals(sSelectLinePreviousString) ||
|
|
|
|
commandName.Equals(sSelectLineNextString) ||
|
|
|
|
commandName.Equals(sSelectPagePreviousString) ||
|
|
|
|
commandName.Equals(sSelectPageNextString) ||
|
|
|
|
commandName.Equals(sSelectMoveTopString) ||
|
2002-04-02 01:56:12 +00:00
|
|
|
commandName.Equals(sSelectMoveBottomString)
|
2001-04-18 06:06:31 +00:00
|
|
|
)
|
|
|
|
*outSupported = PR_TRUE;
|
1999-12-13 23:13:33 +00:00
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
nsDOMWindowController::DoCommand(const nsAString & aCommand)
|
1999-12-13 23:13:33 +00:00
|
|
|
{
|
|
|
|
nsresult rv = NS_ERROR_FAILURE;
|
2001-04-18 06:06:31 +00:00
|
|
|
nsCAutoString commandName;
|
|
|
|
commandName.AssignWithConversion(aCommand);
|
|
|
|
|
|
|
|
if (commandName.Equals(sCopyString) ||
|
|
|
|
commandName.Equals(sSelectAllString) ||
|
2001-08-09 09:24:26 +00:00
|
|
|
commandName.Equals(sSelectNoneString) ||
|
2001-04-18 06:06:31 +00:00
|
|
|
commandName.Equals(sCutString) ||
|
|
|
|
commandName.Equals(sPasteString) ||
|
|
|
|
commandName.Equals(sCopyLinkString) ||
|
|
|
|
commandName.Equals(sCopyImageLocationString) ||
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
commandName.Equals(sCopyImageContentsString)) {
|
2001-04-18 06:06:31 +00:00
|
|
|
rv = DoCommandWithEditInterface(commandName);
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
}
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (commandName.Equals(sScrollTopString) ||
|
|
|
|
commandName.Equals(sScrollBottomString) ||
|
|
|
|
commandName.Equals(sScrollPageUpString) ||
|
|
|
|
commandName.Equals(sScrollPageDownString) ||
|
|
|
|
commandName.Equals(sScrollLineUpString) ||
|
|
|
|
commandName.Equals(sScrollLineDownString) ||
|
|
|
|
commandName.Equals(sScrollLeftString) ||
|
|
|
|
commandName.Equals(sScrollRightString) ||
|
|
|
|
commandName.Equals(sSelectCharPreviousString) ||
|
|
|
|
commandName.Equals(sSelectCharNextString) ||
|
|
|
|
commandName.Equals(sWordPreviousString) ||
|
|
|
|
commandName.Equals(sWordNextString) ||
|
|
|
|
commandName.Equals(sSelectWordPreviousString) ||
|
|
|
|
commandName.Equals(sSelectWordNextString) ||
|
|
|
|
commandName.Equals(sBeginLineString) ||
|
|
|
|
commandName.Equals(sEndLineString) ||
|
|
|
|
commandName.Equals(sSelectBeginLineString) ||
|
|
|
|
commandName.Equals(sSelectEndLineString) ||
|
|
|
|
commandName.Equals(sSelectLinePreviousString) ||
|
|
|
|
commandName.Equals(sSelectLineNextString) ||
|
|
|
|
commandName.Equals(sSelectMoveTopString) ||
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
commandName.Equals(sSelectMoveBottomString)) {
|
2001-04-18 06:06:31 +00:00
|
|
|
rv = DoCommandWithSelectionController(commandName);
|
Fixes bug 66597, bug 103284, bug 114440, bug 120023, bug 128741, bug 19259. Cleans up browse with caret, makes it work with XML content docs, creates keyboard toggle for it (Accel+shift+K), synchronizes focus and document selection so that users can tab navigate relative to their last find or click in text, or vice versa, makes tabbing move relative to named anchor that has been jumped to. r=bryner, sr=alecf, a=asa
2002-03-10 06:21:48 +00:00
|
|
|
// If the user moves the caret in browse with caret mode
|
|
|
|
// Focus whatever they move onto, if it's focusable
|
|
|
|
if (mBrowseWithCaret) {
|
|
|
|
nsCOMPtr<nsIEventStateManager> esm;
|
|
|
|
if (NS_SUCCEEDED(GetEventStateManager(getter_AddRefs(esm)))) {
|
|
|
|
PRBool isSelectionWithFocus;
|
|
|
|
esm->MoveFocusToCaret(PR_TRUE, &isSelectionWithFocus);
|
|
|
|
}
|
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
}
|
2001-04-18 06:06:31 +00:00
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsresult
|
|
|
|
nsDOMWindowController::DoCommandWithEditInterface(const nsCString& aCommandName)
|
2001-04-18 06:06:31 +00:00
|
|
|
{
|
|
|
|
// get edit interface...
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIContentViewerEdit> editInterface;
|
2001-04-18 06:06:31 +00:00
|
|
|
nsresult rv = GetEditInterface(getter_AddRefs(editInterface));
|
|
|
|
// if we can't get an edit interface, that's bad
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
NS_ENSURE_TRUE(editInterface, NS_ERROR_NOT_INITIALIZED);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2001-04-18 06:06:31 +00:00
|
|
|
rv = NS_ERROR_FAILURE;
|
2001-04-04 23:48:03 +00:00
|
|
|
|
2001-04-18 06:06:31 +00:00
|
|
|
if (aCommandName.Equals(sCopyString))
|
|
|
|
rv = editInterface->CopySelection();
|
|
|
|
else if (aCommandName.Equals(sSelectAllString))
|
|
|
|
rv = editInterface->SelectAll();
|
2001-08-09 09:24:26 +00:00
|
|
|
else if (aCommandName.Equals(sSelectNoneString))
|
|
|
|
rv = editInterface->ClearSelection();
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sCutString))
|
|
|
|
rv = editInterface->CutSelection();
|
|
|
|
else if (aCommandName.Equals(sPasteString))
|
|
|
|
rv = editInterface->Paste();
|
|
|
|
else if (aCommandName.Equals(sCopyLinkString))
|
|
|
|
rv = editInterface->CopyLinkLocation();
|
|
|
|
else if (aCommandName.Equals(sCopyImageLocationString))
|
|
|
|
rv = editInterface->CopyImageLocation();
|
|
|
|
else if (aCommandName.Equals(sCopyImageContentsString))
|
|
|
|
rv = editInterface->CopyImageContents();
|
1999-12-13 23:13:33 +00:00
|
|
|
|
2001-04-18 06:06:31 +00:00
|
|
|
return rv;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
nsresult
|
|
|
|
nsDOMWindowController::DoCommandWithSelectionController(const nsCString& aCommandName) {
|
2001-04-18 06:06:31 +00:00
|
|
|
|
|
|
|
// get selection controller...
|
2001-02-15 05:07:46 +00:00
|
|
|
nsCOMPtr<nsISelectionController> selCont;
|
2001-04-18 06:06:31 +00:00
|
|
|
nsresult rv = GetSelectionController(getter_AddRefs(selCont));
|
|
|
|
// if we can't get a selection controller, that's bad
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
NS_ENSURE_TRUE(selCont, NS_ERROR_NOT_INITIALIZED);
|
2001-02-15 05:07:46 +00:00
|
|
|
|
2001-04-18 06:06:31 +00:00
|
|
|
rv = NS_ERROR_FAILURE;
|
|
|
|
|
|
|
|
if (aCommandName.Equals(sScrollTopString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = (mBrowseWithCaret? selCont->CompleteMove(PR_FALSE, PR_FALSE): selCont->CompleteScroll(PR_FALSE));
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sScrollBottomString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = (mBrowseWithCaret? selCont->CompleteMove(PR_TRUE, PR_FALSE): selCont->CompleteScroll(PR_TRUE));
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sScrollPageUpString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = (mBrowseWithCaret? selCont->PageMove(PR_FALSE, PR_FALSE): selCont->ScrollPage(PR_FALSE));
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sScrollPageDownString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = (mBrowseWithCaret? selCont->PageMove(PR_TRUE, PR_FALSE): selCont->ScrollPage(PR_TRUE));
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sScrollLineUpString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = (mBrowseWithCaret? selCont->LineMove(PR_FALSE, PR_FALSE): selCont->ScrollLine(PR_FALSE));
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sScrollLineDownString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = (mBrowseWithCaret? selCont->LineMove(PR_TRUE, PR_FALSE): selCont->ScrollLine(PR_TRUE));
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sScrollLeftString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = (mBrowseWithCaret? selCont->CharacterMove(PR_FALSE, PR_FALSE): selCont->ScrollHorizontal(PR_TRUE));
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sScrollRightString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = (mBrowseWithCaret? selCont->CharacterMove(PR_TRUE, PR_FALSE): selCont->ScrollHorizontal(PR_FALSE));
|
|
|
|
// These commands are so the browser can use editor navigation key bindings -
|
|
|
|
// Helps with accessibility - aaronl@chorus.net
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sSelectCharPreviousString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->CharacterMove(PR_FALSE, PR_TRUE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sSelectCharNextString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->CharacterMove(PR_TRUE, PR_TRUE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sWordPreviousString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->WordMove(PR_FALSE, PR_FALSE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sWordNextString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->WordMove(PR_TRUE, PR_FALSE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sSelectWordPreviousString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->WordMove(PR_FALSE, PR_TRUE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sSelectWordNextString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->WordMove(PR_TRUE, PR_TRUE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sBeginLineString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->IntraLineMove(PR_FALSE, PR_FALSE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sEndLineString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->IntraLineMove(PR_TRUE, PR_FALSE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sSelectBeginLineString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->IntraLineMove(PR_FALSE, PR_TRUE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sSelectEndLineString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->IntraLineMove(PR_TRUE, PR_TRUE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sSelectLinePreviousString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->LineMove(PR_FALSE, PR_TRUE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sSelectLineNextString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->LineMove(PR_TRUE, PR_TRUE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sSelectMoveTopString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->CompleteMove(PR_FALSE, PR_TRUE);
|
2001-04-18 06:06:31 +00:00
|
|
|
else if (aCommandName.Equals(sSelectMoveBottomString))
|
2001-02-15 05:07:46 +00:00
|
|
|
rv = selCont->CompleteMove(PR_TRUE, PR_TRUE);
|
2001-04-18 06:06:31 +00:00
|
|
|
|
2001-02-15 05:07:46 +00:00
|
|
|
return rv;
|
1999-12-13 23:13:33 +00:00
|
|
|
|
2001-04-18 06:06:31 +00:00
|
|
|
}
|
2001-02-15 05:07:46 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 17:42:36 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-24 00:16:18 +00:00
|
|
|
nsDOMWindowController::OnEvent(const nsAString & aEventName)
|
1999-12-13 23:13:33 +00:00
|
|
|
{
|
|
|
|
return NS_OK;
|
|
|
|
}
|
1999-12-14 01:41:27 +00:00
|
|
|
#endif
|