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"
|
|
|
|
#include "nsIContentViewerFile.h"
|
|
|
|
#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"
|
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-01-01 12:58:53 +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
|
|
|
|
2000-11-01 06:01:54 +00:00
|
|
|
static nsIEntropyCollector* gEntropyCollector = nsnull;
|
|
|
|
static PRInt32 gRefCnt = 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
|
|
|
nsIXPConnect *GlobalWindowImpl::sXPConnect = 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()
|
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";
|
|
|
|
|
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
|
|
|
|
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),
|
2001-08-31 04:06:39 +00:00
|
|
|
mIsScopeClear(PR_TRUE), mIsDocumentLoaded(PR_FALSE), mGlobalObjectOwner(nsnull),
|
|
|
|
mDocShell(nsnull), mMutationBits(0), mChromeEventHandler(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);
|
|
|
|
}
|
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);
|
|
|
|
|
|
|
|
#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
|
|
|
|
2000-08-22 03:51:17 +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
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +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
|
|
|
|
2001-10-02 00:54:44 +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
|
|
|
|
|
|
|
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
|
|
|
|
// need to attach our global key bindings that handle
|
|
|
|
// 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;
|
2001-07-25 07:54:28 +00:00
|
|
|
nsCOMPtr<nsIXBLService> xblService =
|
|
|
|
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);
|
2001-01-23 00:41: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
|
|
|
// 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) {
|
2001-07-13 01:30:44 +00:00
|
|
|
nsXPIDLCString url;
|
|
|
|
|
2001-07-11 09:09:30 +00:00
|
|
|
docURL->GetSpec(getter_Copies(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.
|
2001-07-11 09:09:30 +00:00
|
|
|
if (nsCRT::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)
|
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_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
|
|
|
|
2001-07-13 01:30:44 +00:00
|
|
|
if (mDocument && mContext && mIsScopeClear) {
|
2000-08-22 03:51:17 +00:00
|
|
|
mContext->InitContext(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
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::SetDocShell(nsIDocShell* aDocShell)
|
|
|
|
{
|
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
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +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
|
|
|
}
|
|
|
|
|
2000-09-01 01:54:35 +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
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +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
|
|
|
|
2000-10-30 23:33:34 +00:00
|
|
|
/* If this is a mouse event, use the struct to provide entropy for
|
|
|
|
* the system.
|
|
|
|
*/
|
2001-05-18 00:02:52 +00:00
|
|
|
if (gEntropyCollector &&
|
2000-10-30 23:33:34 +00:00
|
|
|
(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
|
|
|
|
//present, but there is always one when the message is
|
|
|
|
//NS_MOUSE_MOVE.
|
|
|
|
//
|
|
|
|
//Chances are this counter will overflow during the life of the
|
|
|
|
//process, but that's OK for our case. Means we get a little
|
|
|
|
//more entropy.
|
|
|
|
if (count++ % 100 == 0) {
|
|
|
|
//Since the high bits seem to be zero's most of the time,
|
|
|
|
//let's only take the lowest half of the point structure.
|
|
|
|
PRInt16 myCoord[4];
|
|
|
|
|
|
|
|
myCoord[0] = aEvent->point.x;
|
|
|
|
myCoord[1] = aEvent->point.y;
|
|
|
|
myCoord[2] = aEvent->refPoint.x;
|
|
|
|
myCoord[3] = aEvent->refPoint.y;
|
|
|
|
gEntropyCollector->RandomUpdate((void*)myCoord, sizeof(myCoord));
|
|
|
|
gEntropyCollector->RandomUpdate((void*)&aEvent->time, sizeof(PRUint32));
|
|
|
|
}
|
2000-10-30 23:33:34 +00:00
|
|
|
}
|
|
|
|
|
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) {
|
|
|
|
externalDOMEvent = PR_TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
2000-08-22 03:51:17 +00:00
|
|
|
aDOMEvent = &domEvent;
|
|
|
|
}
|
|
|
|
aEvent->flags = aFlags;
|
|
|
|
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.
|
|
|
|
if (aEvent->message == NS_PAGE_UNLOAD && mDocument) {
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// Capturing stage
|
|
|
|
if ((NS_EVENT_FLAG_BUBBLE != aFlags) && mChromeEventHandler) {
|
|
|
|
// 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,
|
|
|
|
NS_EVENT_FLAG_CAPTURE,
|
|
|
|
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
|
|
|
|
if (mListenerManager && !(aEvent->flags & NS_EVENT_FLAG_STOP_DISPATCH) &&
|
|
|
|
!((NS_EVENT_FLAG_BUBBLE & aFlags) &&
|
|
|
|
(NS_EVENT_FLAG_CANT_BUBBLE & aEvent->flags))) {
|
|
|
|
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
|
|
|
|
if ((NS_EVENT_FLAG_CAPTURE != aFlags) && mChromeEventHandler) {
|
|
|
|
// Bubble to a chrome document if it exists
|
|
|
|
// XXX Need a way to know if an event should really bubble or not.
|
|
|
|
// For now filter out load and unload, since they cause problems.
|
|
|
|
if ((aEvent->message != NS_PAGE_LOAD) &&
|
|
|
|
(aEvent->message != NS_PAGE_UNLOAD) &&
|
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,
|
|
|
|
aDOMEvent, NS_EVENT_FLAG_BUBBLE,
|
|
|
|
aEventStatus);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
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
|
|
|
|
GlobalWindowImpl::SetScriptsEnabled(PRBool aEnabled)
|
|
|
|
{
|
|
|
|
if (aEnabled) {
|
|
|
|
// 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
|
|
|
|
2000-08-22 03:51:17 +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
|
|
|
|
2000-09-01 01:54:35 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetDocument(nsIDOMDocument** aDocument)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2001-11-16 02:14:53 +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(). */
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-09-01 01:54:35 +00:00
|
|
|
//*****************************************************************************
|
|
|
|
// GlobalWindowImpl::nsIDOMWindowInternal
|
|
|
|
//*****************************************************************************
|
|
|
|
|
|
|
|
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
|
|
|
|
2000-09-01 01:54:35 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
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::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
|
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetSidebar(nsISidebar** aSidebar)
|
|
|
|
{
|
|
|
|
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;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2000-08-09 21:12:21 +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;
|
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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)))) {
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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) {
|
|
|
|
mScrollbars = new ScrollbarsPropImpl();
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetClosed(PRBool* aClosed)
|
|
|
|
{
|
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
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetFrames(nsIDOMWindowCollection** aFrames)
|
|
|
|
{
|
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
|
|
|
}
|
|
|
|
|
2000-05-11 19:17:07 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetCrypto(nsIDOMCrypto** aCrypto)
|
|
|
|
{
|
|
|
|
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
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetPkcs11(nsIDOMPkcs11** aPkcs11)
|
|
|
|
{
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetControllers(nsIControllers** aResult)
|
|
|
|
{
|
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
|
|
|
}
|
|
|
|
|
2000-09-01 01:54:35 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetOpener(nsIDOMWindowInternal** aOpener)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
*aOpener = mOpener;
|
|
|
|
NS_IF_ADDREF(*aOpener);
|
|
|
|
return NS_OK;
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
|
2000-09-01 01:54:35 +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
|
|
|
|
2000-08-23 17:27:06 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetStatus(nsAWritableString& 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
|
|
|
|
2000-08-23 17:27:06 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::SetStatus(const nsAReadableString& aStatus)
|
1999-06-26 21:48:29 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
mStatus = aStatus;
|
1999-06-26 21:48:29 +00:00
|
|
|
|
2000-08-25 18:39:46 +00:00
|
|
|
nsCOMPtr<nsIWebBrowserChrome> browserChrome;
|
|
|
|
GetWebBrowserChrome(getter_AddRefs(browserChrome));
|
|
|
|
if(browserChrome)
|
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
|
|
|
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
|
|
|
|
GlobalWindowImpl::GetDefaultStatus(nsAWritableString& 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
|
|
|
|
GlobalWindowImpl::SetDefaultStatus(const nsAReadableString& aDefaultStatus)
|
1998-08-21 21:39:27 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
mDefaultStatus = aDefaultStatus;
|
1998-08-21 21:39:27 +00:00
|
|
|
|
2000-08-25 18:39:46 +00:00
|
|
|
nsCOMPtr<nsIWebBrowserChrome> browserChrome;
|
|
|
|
GetWebBrowserChrome(getter_AddRefs(browserChrome));
|
|
|
|
if(browserChrome)
|
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
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-08-23 17:27:06 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetName(nsAWritableString& 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
|
|
|
}
|
|
|
|
|
2000-08-23 17:27:06 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::SetName(const nsAReadableString& 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
|
|
|
}
|
|
|
|
|
2001-09-21 04:33:47 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::GetTitle(nsAWritableString& aTitle)
|
|
|
|
{
|
|
|
|
aTitle = mTitle;
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::SetTitle(const nsAReadableString& aTitle)
|
|
|
|
{
|
|
|
|
mTitle = aTitle;
|
|
|
|
if(mDocShell) {
|
|
|
|
// See if we're a chrome shell.
|
|
|
|
PRInt32 type;
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(mDocShell));
|
|
|
|
docShellAsItem->GetItemType(&type);
|
|
|
|
if(type == nsIDocShellTreeItem::typeChrome) {
|
|
|
|
nsCOMPtr<nsIBaseWindow> docShellAsWin(do_QueryInterface(mDocShell));
|
|
|
|
if(docShellAsWin) {
|
|
|
|
docShellAsWin->SetTitle(PromiseFlatString(mTitle).get());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetInnerWidth(PRInt32* aInnerWidth)
|
1998-08-13 23:37:54 +00:00
|
|
|
{
|
2001-10-31 23:52:52 +00:00
|
|
|
nsCOMPtr<nsIDOMWindowInternal> parent;
|
|
|
|
|
|
|
|
GetParentInternal(getter_AddRefs(parent));
|
|
|
|
|
|
|
|
if (parent) {
|
|
|
|
PRInt32 dummy;
|
|
|
|
|
|
|
|
// Force a flush in the parent
|
|
|
|
parent->GetInnerWidth(&dummy);
|
|
|
|
}
|
|
|
|
|
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
|
|
|
FlushPendingNotifications();
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> docShellWin(do_QueryInterface(mDocShell));
|
|
|
|
*aInnerWidth = 0;
|
|
|
|
if (docShellWin)
|
|
|
|
docShellWin->GetSize(aInnerWidth, nsnull);
|
|
|
|
|
|
|
|
return NS_OK;
|
1998-08-13 23:37:54 +00:00
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::SetInnerWidth(PRInt32 aInnerWidth)
|
1998-08-13 23:37:54 +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> docShellParent;
|
|
|
|
docShellAsItem->GetSameTypeParent(getter_AddRefs(docShellParent));
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// It's only valid to access this from a top window. Doesn't work from
|
|
|
|
// 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));
|
|
|
|
PRInt32 cy = 0;
|
|
|
|
docShellAsWin->GetSize(nsnull, &cy);
|
|
|
|
NS_ENSURE_SUCCESS(treeOwner->SizeShellTo(docShellAsItem, aInnerWidth, cy),
|
|
|
|
NS_ERROR_FAILURE);
|
1998-08-13 23:37:54 +00:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetInnerHeight(PRInt32* aInnerHeight)
|
1998-08-13 23:37:54 +00:00
|
|
|
{
|
2001-10-31 23:52:52 +00:00
|
|
|
nsCOMPtr<nsIDOMWindowInternal> parent;
|
|
|
|
|
|
|
|
GetParentInternal(getter_AddRefs(parent));
|
|
|
|
|
|
|
|
if (parent) {
|
|
|
|
PRInt32 dummy;
|
|
|
|
|
|
|
|
// Force a flush in the parent
|
|
|
|
parent->GetInnerHeight(&dummy);
|
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
FlushPendingNotifications();
|
|
|
|
|
|
|
|
nsCOMPtr<nsIBaseWindow> docShellWin(do_QueryInterface(mDocShell));
|
|
|
|
*aInnerHeight = 0;
|
|
|
|
if (docShellWin)
|
|
|
|
docShellWin->GetSize(nsnull, 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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::SetInnerHeight(PRInt32 aInnerHeight)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
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
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// It's only valid to access this from a top window. Doesn't work from
|
|
|
|
// 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));
|
|
|
|
PRInt32 cx = 0;
|
|
|
|
docShellAsWin->GetSize(&cx, nsnull);
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetOuterWidth(PRInt32* aOuterWidth)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2001-10-31 23:52:52 +00:00
|
|
|
nsCOMPtr<nsIDOMWindowInternal> parent;
|
|
|
|
|
|
|
|
GetParentInternal(getter_AddRefs(parent));
|
|
|
|
|
|
|
|
if (parent) {
|
|
|
|
PRInt32 dummy;
|
|
|
|
|
|
|
|
// Force a flush in the parent
|
|
|
|
parent->GetOuterWidth(&dummy);
|
|
|
|
}
|
|
|
|
|
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
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
FlushPendingNotifications();
|
2000-02-11 07:14:41 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetSize(aOuterWidth, nsnull),
|
|
|
|
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-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::SetOuterWidth(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);
|
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
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
PRInt32 cy;
|
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetSize(nsnull, &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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetOuterHeight(PRInt32* aOuterHeight)
|
1998-10-01 22:21:59 +00:00
|
|
|
{
|
2001-10-31 23:52:52 +00:00
|
|
|
nsCOMPtr<nsIDOMWindowInternal> parent;
|
|
|
|
|
|
|
|
GetParentInternal(getter_AddRefs(parent));
|
|
|
|
|
|
|
|
if (parent) {
|
|
|
|
PRInt32 dummy;
|
|
|
|
|
|
|
|
// Force a flush in the parent
|
|
|
|
parent->GetOuterHeight(&dummy);
|
|
|
|
}
|
|
|
|
|
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
|
|
|
FlushPendingNotifications();
|
2000-02-11 07:14:41 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetSize(nsnull, aOuterHeight),
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::SetOuterHeight(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);
|
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
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
PRInt32 cx;
|
|
|
|
NS_ENSURE_SUCCESS(treeOwnerAsWin->GetSize(&cx, nsnull), 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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::SetScreenX(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
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::SetScreenY(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
|
|
|
|
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
|
|
|
|
nsCOMPtr<nsIScriptSecurityManager>
|
2000-09-13 23:57:52 +00:00
|
|
|
securityManager(do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID));
|
2000-06-21 00:20:39 +00:00
|
|
|
NS_ENSURE_TRUE(securityManager, NS_ERROR_FAILURE);
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
PRBool enabled;
|
|
|
|
nsresult res =
|
|
|
|
securityManager->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
|
|
|
|
nsCOMPtr<nsIScriptSecurityManager>
|
2000-09-13 23:57:52 +00:00
|
|
|
securityManager(do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID));
|
2000-06-21 00:20:39 +00:00
|
|
|
NS_ENSURE_TRUE(securityManager, NS_ERROR_FAILURE);
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
PRBool enabled;
|
|
|
|
nsresult res =
|
|
|
|
securityManager->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;
|
|
|
|
|
|
|
|
FlushPendingNotifications();
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
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
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetLength(PRUint32* aLength)
|
|
|
|
{
|
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
|
|
|
}
|
|
|
|
|
2000-08-23 17:27:06 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::Dump(const nsAReadableString& 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;
|
|
|
|
}
|
|
|
|
|
2001-04-25 19:52:49 +00:00
|
|
|
static void EnsureReflowFlushAndPaint(nsIDocShell* aDocShell)
|
|
|
|
{
|
|
|
|
if (!aDocShell)
|
|
|
|
return;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
aDocShell->GetPresShell(getter_AddRefs(presShell));
|
|
|
|
|
|
|
|
if (!presShell)
|
|
|
|
return;
|
|
|
|
|
|
|
|
// Flush pending reflows.
|
2001-08-31 04:28:26 +00:00
|
|
|
presShell->FlushPendingNotifications(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
|
|
|
}
|
|
|
|
|
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::Alert(const nsAReadableString& 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
|
|
|
|
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.
|
2001-04-25 19:52:49 +00:00
|
|
|
EnsureReflowFlushAndPaint(mDocShell);
|
|
|
|
|
2001-06-30 11:02:25 +00:00
|
|
|
return prompter->Alert(nsnull, 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
|
|
|
|
GlobalWindowImpl::Confirm(const nsAReadableString& 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
|
|
|
|
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.
|
2001-04-25 19:52:49 +00:00
|
|
|
EnsureReflowFlushAndPaint(mDocShell);
|
|
|
|
|
2001-06-30 11:02:25 +00:00
|
|
|
return prompter->Confirm(nsnull, 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
|
|
|
|
GlobalWindowImpl::Prompt(const nsAReadableString& aMessage,
|
|
|
|
const nsAReadableString& aInitial,
|
|
|
|
const nsAReadableString& aTitle,
|
2001-05-08 22:43:25 +00:00
|
|
|
PRUint32 aSavePassword,
|
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
|
|
|
nsAWritableString& 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.
|
|
|
|
EnsureReflowFlushAndPaint(mDocShell);
|
|
|
|
|
|
|
|
rv = prompter->Prompt(PromiseFlatString(aTitle).get(),
|
|
|
|
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
|
|
|
|
GlobalWindowImpl::Prompt(nsAWritableString& aReturn)
|
|
|
|
{
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::Focus()
|
1998-09-03 01:19:58 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
if (treeOwnerAsWin)
|
|
|
|
treeOwnerAsWin->SetVisibility(PR_TRUE);
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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));
|
|
|
|
nsCOMPtr<nsIEmbeddingSiteWindow2> siteWindow(do_QueryInterface(treeOwner));
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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);
|
2001-11-30 22:35:33 +00:00
|
|
|
rv = webNav->LoadURI(homeURL.get(),
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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-01-01 12:58:53 +00:00
|
|
|
nsresult GlobalWindowImpl::DoPrint(nsIPrintSettings* aPrintSettings,
|
|
|
|
PRBool aDoPreview)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (mDocShell) {
|
|
|
|
nsCOMPtr<nsIContentViewer> viewer;
|
|
|
|
mDocShell->GetContentViewer(getter_AddRefs(viewer));
|
|
|
|
if (viewer) {
|
|
|
|
nsCOMPtr<nsIContentViewerFile> viewerFile(do_QueryInterface(viewer));
|
2001-11-03 14:59:39 +00:00
|
|
|
if (viewerFile) {
|
|
|
|
if (aDoPreview) {
|
2002-01-01 12:58:53 +00:00
|
|
|
return viewerFile->PrintPreview(aPrintSettings);
|
2001-11-03 14:59:39 +00:00
|
|
|
} else {
|
2002-01-01 12:58:53 +00:00
|
|
|
return viewerFile->Print(PR_FALSE, aPrintSettings, nsnull);
|
2001-11-03 14:59:39 +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-01-01 12:58:53 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::Print(nsIPrintSettings* aPrintSettings)
|
2001-11-03 14:59:39 +00:00
|
|
|
{
|
2002-01-01 12:58:53 +00:00
|
|
|
return DoPrint(aPrintSettings, PR_FALSE);
|
2001-11-03 14:59:39 +00:00
|
|
|
}
|
|
|
|
|
2002-01-01 12:58:53 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::PrintPreview(nsIPrintSettings* aPrintSettings)
|
2001-11-03 14:59:39 +00:00
|
|
|
{
|
2002-01-01 12:58:53 +00:00
|
|
|
return DoPrint(aPrintSettings, PR_TRUE);
|
2001-11-03 14:59:39 +00:00
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::MoveTo(PRInt32 aXPos, PRInt32 aYPos)
|
|
|
|
{
|
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
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::MoveBy(PRInt32 aXDif, PRInt32 aYDif)
|
|
|
|
{
|
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
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::ResizeTo(PRInt32 aWidth, PRInt32 aHeight)
|
|
|
|
{
|
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
|
|
|
|
|
|
|
NS_IMETHODIMP GlobalWindowImpl::ResizeBy(PRInt32 aWidthDif, PRInt32 aHeightDif)
|
2000-01-15 02:26:10 +00:00
|
|
|
{
|
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
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::SizeToContent()
|
|
|
|
{
|
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
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
// It's only valid to access this from a top window. Doesn't work from
|
|
|
|
// 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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetAttention()
|
1998-10-07 18:06:23 +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-07 18:06:23 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
treeOwnerAsWin->GetMainWidget(getter_AddRefs(widget));
|
|
|
|
NS_ENSURE_TRUE(widget, NS_ERROR_FAILURE);
|
|
|
|
NS_ENSURE_SUCCESS(widget->GetAttention(), NS_ERROR_FAILURE);
|
2000-02-08 13:40:10 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_OK;
|
1998-10-07 18:06:23 +00:00
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
|
2000-08-22 03:51:17 +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
|
|
|
}
|
|
|
|
|
2000-09-13 13:06:07 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::ScrollByLines(PRInt32 numLines)
|
|
|
|
{
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP GlobalWindowImpl::ScrollByPages(PRInt32 numPages)
|
|
|
|
{
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::ClearTimeout(PRInt32 aTimerID)
|
1998-10-07 18:06:23 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
return ClearTimeoutOrInterval(aTimerID);
|
1998-10-07 18:06:23 +00:00
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::ClearInterval(PRInt32 aTimerID)
|
1999-01-27 04:15:19 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
return ClearTimeoutOrInterval(aTimerID);
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::EnableExternalCapture()
|
|
|
|
{
|
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
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::DisableExternalCapture()
|
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
1998-10-01 22:21:59 +00:00
|
|
|
}
|
|
|
|
|
2000-04-24 04:41:27 +00:00
|
|
|
//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.
|
2000-08-23 17:27:06 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::SetCursor(const nsAReadableString& aCursor)
|
2000-04-24 04:41:27 +00:00
|
|
|
{
|
|
|
|
nsresult ret = NS_OK;
|
|
|
|
PRInt32 cursor;
|
|
|
|
|
2000-08-23 17:27:06 +00:00
|
|
|
if (aCursor.Equals(NS_LITERAL_STRING("auto")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_AUTO;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("default")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_DEFAULT;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("pointer")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_POINTER;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("crosshair")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_CROSSHAIR;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("move")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_MOVE;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("text")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_TEXT;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("wait")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_WAIT;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("help")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_HELP;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("n-resize")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_N_RESIZE;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("s-resize")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_S_RESIZE;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("w-resize")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_W_RESIZE;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("e-resize")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_E_RESIZE;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("ne-resize")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_NE_RESIZE;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("nw-resize")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_NW_RESIZE;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("se-resize")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_SE_RESIZE;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("sw-resize")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_SW_RESIZE;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("copy")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_COPY; // CSS3
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("alias")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_ALIAS;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("context-menu")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_CONTEXT_MENU;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("cell")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_CELL;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("grab")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_GRAB;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("grabbing")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_GRABBING;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("spinning")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_SPINNING;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("count-up")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_COUNT_UP;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("count-down")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_COUNT_DOWN;
|
2000-08-23 17:27:06 +00:00
|
|
|
else if (aCursor.Equals(NS_LITERAL_STRING("count-up-down")))
|
2000-08-22 03:51:17 +00:00
|
|
|
cursor = NS_STYLE_CURSOR_COUNT_UP_DOWN;
|
|
|
|
else
|
|
|
|
return NS_OK;
|
2000-04-24 04:41:27 +00:00
|
|
|
|
|
|
|
nsCOMPtr<nsIPresContext> presContext;
|
|
|
|
mDocShell->GetPresContext(getter_AddRefs(presContext));
|
2000-08-22 03:51:17 +00:00
|
|
|
if (presContext) {
|
2000-04-24 04:41:27 +00:00
|
|
|
nsCOMPtr<nsIEventStateManager> esm;
|
|
|
|
if (NS_SUCCEEDED(presContext->GetEventStateManager(getter_AddRefs(esm)))) {
|
2000-08-22 03:51:17 +00:00
|
|
|
// Need root widget.
|
2000-04-24 04:41:27 +00:00
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
mDocShell->GetPresShell(getter_AddRefs(presShell));
|
|
|
|
NS_ENSURE_TRUE(presShell, NS_ERROR_FAILURE);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2000-04-24 04:41:27 +00:00
|
|
|
nsCOMPtr<nsIViewManager> vm;
|
|
|
|
presShell->GetViewManager(getter_AddRefs(vm));
|
|
|
|
NS_ENSURE_TRUE(vm, NS_ERROR_FAILURE);
|
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
nsIView *rootView;
|
2000-04-24 04:41:27 +00:00
|
|
|
vm->GetRootView(rootView);
|
|
|
|
NS_ENSURE_TRUE(rootView, NS_ERROR_FAILURE);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
2000-04-24 04:41:27 +00:00
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
rootView->GetWidget(*getter_AddRefs(widget));
|
|
|
|
NS_ENSURE_TRUE(widget, NS_ERROR_FAILURE);
|
2000-08-22 03:51:17 +00:00
|
|
|
|
|
|
|
// Call esm and set cursor.
|
2000-04-24 04:41:27 +00:00
|
|
|
ret = esm->SetCursor(cursor, widget, PR_TRUE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2001-08-31 04:06:39 +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.
|
|
|
|
*/
|
|
|
|
PRBool
|
|
|
|
GlobalWindowImpl::CheckForAbusePoint ()
|
|
|
|
{
|
|
|
|
if (!mIsDocumentLoaded || mRunningTimeout) {
|
|
|
|
#ifdef DEBUG
|
|
|
|
printf ("*** Scripts executed during (un)load or as a result of "
|
|
|
|
"setTimeout() are potential javascript abuse points.\n");
|
|
|
|
#endif
|
|
|
|
return PR_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
GlobalWindowImpl::Open(const nsAReadableString& aUrl,
|
|
|
|
const nsAReadableString& aName,
|
|
|
|
const nsAReadableString& aOptions,
|
|
|
|
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()) {
|
|
|
|
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefServiceCID));
|
|
|
|
|
|
|
|
if (prefs) {
|
|
|
|
PRBool blockOpenOnLoad = PR_FALSE;
|
|
|
|
prefs->GetBoolPref("dom.disable_open_during_load", &blockOpenOnLoad);
|
|
|
|
|
|
|
|
if (blockOpenOnLoad) {
|
|
|
|
#ifdef DEBUG
|
|
|
|
printf ("*** Blocking window.open.\n");
|
|
|
|
#endif
|
|
|
|
*_retval = 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
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
// like Open, but attaches to the new window any extra parameters past
|
|
|
|
// [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
|
|
|
|
GlobalWindowImpl::OpenDialog(const nsAReadableString& aUrl,
|
|
|
|
const nsAReadableString& aName,
|
|
|
|
const nsAReadableString& aOptions,
|
|
|
|
nsISupports* aExtraArgument,
|
|
|
|
nsIDOMWindow** _retval)
|
|
|
|
{
|
|
|
|
return OpenInternal(aUrl, aName, aOptions, PR_TRUE, nsnull, 0,
|
|
|
|
aExtraArgument, _retval);
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
GlobalWindowImpl::OpenDialog(nsIDOMWindow** _retval)
|
|
|
|
{
|
|
|
|
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);
|
|
|
|
|
|
|
|
FlushPendingNotifications();
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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 =
|
|
|
|
do_GetService("@mozilla.org/js/xpc/ContextStack;1");
|
|
|
|
|
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) {
|
|
|
|
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
|
|
|
}
|
|
|
|
|
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::UpdateCommands(const nsAReadableString& 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
|
|
|
|
GlobalWindowImpl::Escape(const nsAReadableString& aStr,
|
|
|
|
nsAWritableString& 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;
|
2000-08-23 17:27:06 +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
|
|
|
}
|
|
|
|
|
2000-08-23 17:27:06 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::Unescape(const nsAReadableString& aStr,
|
|
|
|
nsAWritableString& 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;
|
|
|
|
srcLen = nsCRT::strlen(src);
|
|
|
|
|
|
|
|
// 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
|
|
|
}
|
|
|
|
|
2000-09-14 11:45:01 +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
|
|
|
|
GlobalWindowImpl::Find(const nsAReadableString& aStr,
|
|
|
|
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
|
|
|
|
GlobalWindowImpl::FindInternal(nsAReadableString& aStr,
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
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
|
2000-08-23 17:27:06 +00:00
|
|
|
GlobalWindowImpl::AddEventListener(const nsAReadableString& aType,
|
2000-08-22 03:51:17 +00:00
|
|
|
nsIDOMEventListener* aListener,
|
|
|
|
PRBool aUseCapture)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIEventListenerManager> manager;
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
if (NS_SUCCEEDED(GetListenerManager(getter_AddRefs(manager)))) {
|
|
|
|
PRInt32 flags = aUseCapture ? NS_EVENT_FLAG_CAPTURE : NS_EVENT_FLAG_BUBBLE;
|
1999-08-19 20:36:31 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
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
|
2000-08-23 17:27:06 +00:00
|
|
|
GlobalWindowImpl::RemoveEventListener(const nsAReadableString& aType,
|
2000-08-22 03:51:17 +00:00
|
|
|
nsIDOMEventListener* aListener,
|
|
|
|
PRBool aUseCapture)
|
2000-02-08 13:40:10 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
if (mListenerManager) {
|
|
|
|
PRInt32 flags = aUseCapture ? NS_EVENT_FLAG_CAPTURE : NS_EVENT_FLAG_BUBBLE;
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
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
|
|
|
|
2001-09-27 21:43:00 +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
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
//XXX I need another way around the circular link problem.
|
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::GetNewListenerManager(nsIEventListenerManager **aResult)
|
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-07-16 01:16:47 +00:00
|
|
|
|
2000-02-16 06:59:07 +00:00
|
|
|
NS_IMETHODIMP GlobalWindowImpl::HandleEvent(nsIDOMEvent *aEvent)
|
|
|
|
{
|
2001-09-27 21:43:00 +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
|
|
|
|
2000-08-22 03:51:17 +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
|
|
|
}
|
|
|
|
|
2000-09-01 01:54:35 +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
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-08-22 03:51:17 +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
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIWidget> widget;
|
|
|
|
rootView->GetWidget(*getter_AddRefs(widget));
|
|
|
|
NS_ENSURE_TRUE(widget, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
return widget->SetFocus();
|
2000-02-11 23:42:11 +00:00
|
|
|
|
|
|
|
*/
|
2000-08-22 03:51:17 +00:00
|
|
|
nsCOMPtr<nsIBaseWindow> treeOwnerAsWin;
|
|
|
|
GetTreeOwner(getter_AddRefs(treeOwnerAsWin));
|
|
|
|
if (treeOwnerAsWin)
|
|
|
|
treeOwnerAsWin->SetVisibility(PR_TRUE);
|
2000-02-11 23:42:11 +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-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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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,
|
|
|
|
const nsAReadableString& aPseudoElt,
|
|
|
|
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
|
|
|
|
//*****************************************************************************
|
|
|
|
NS_IMETHODIMP GlobalWindowImpl::GetInterface(const nsIID & aIID, void **aSink)
|
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(aSink);
|
|
|
|
*aSink = nsnull;
|
|
|
|
|
|
|
|
if (aIID.Equals(NS_GET_IID(nsIDocCharset))) {
|
|
|
|
if (mDocShell) {
|
|
|
|
nsCOMPtr<nsIDocCharset> docCharset(do_QueryInterface(mDocShell));
|
|
|
|
*aSink = docCharset;
|
|
|
|
}
|
|
|
|
}
|
2001-07-24 22:39:11 +00:00
|
|
|
else if (aIID.Equals(NS_GET_IID(nsIWebNavigation))) {
|
|
|
|
if (mDocShell) {
|
|
|
|
nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(mDocShell));
|
|
|
|
*aSink = webNav;
|
|
|
|
}
|
|
|
|
}
|
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
|
|
|
|
GlobalWindowImpl::OpenInternal(const nsAReadableString& aUrl,
|
|
|
|
const nsAReadableString& aName,
|
|
|
|
const nsAReadableString& aOptions,
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +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
|
|
|
|
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
|
|
|
|
nsCOMPtr<nsIScriptSecurityManager>
|
2000-09-13 23:57:52 +00:00
|
|
|
securityManager(do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv));
|
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
|
|
|
}
|
|
|
|
|
|
|
|
rv =
|
|
|
|
securityManager->GetSubjectPrincipal(getter_AddRefs(timeout->principal));
|
|
|
|
|
|
|
|
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,
|
|
|
|
NS_PRIORITY_LOWEST);
|
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
|
|
|
}
|
|
|
|
|
2001-08-15 05:35:02 +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
|
|
|
|
|
|
|
/*
|
2000-02-15 01:32:19 +00:00
|
|
|
* Check to see if it should fire at this depth. If it shouldn't, we'll
|
|
|
|
* ignore it
|
|
|
|
*/
|
|
|
|
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,
|
|
|
|
NS_PRIORITY_LOWEST);
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
void GlobalWindowImpl::DropTimeout(nsTimeoutImpl *aTimeout,
|
2000-08-22 03:51:17 +00:00
|
|
|
nsIScriptContext *aContext)
|
|
|
|
{
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
|
GlobalWindowImpl::ClearTimeoutOrInterval(PRInt32 aTimerID)
|
1998-07-24 05:05:42 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
PRUint32 public_id;
|
|
|
|
nsTimeoutImpl **top, *timeout;
|
1998-07-24 05:05:42 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
public_id = (PRUint32) aTimerID;
|
|
|
|
if (!public_id) { /* id of zero is reserved for internal use */
|
|
|
|
/* return silently for compatibility (see bug 30700) */
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +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
|
|
|
}
|
|
|
|
|
2000-08-22 03:51:17 +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-10-31 23:52:52 +00:00
|
|
|
nsCOMPtr<nsIDOMWindowInternal> parent;
|
|
|
|
|
|
|
|
GetParentInternal(getter_AddRefs(parent));
|
|
|
|
|
|
|
|
if (parent) {
|
|
|
|
PRInt32 dummy;
|
|
|
|
|
|
|
|
// Force a flush in the parent
|
|
|
|
parent->GetScrollX(&dummy);
|
|
|
|
}
|
|
|
|
|
2001-01-13 01:51:45 +00:00
|
|
|
// Flush pending notifications so that the presentation is up to
|
|
|
|
// date.
|
|
|
|
FlushPendingNotifications();
|
|
|
|
|
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");
|
|
|
|
if (!mContext || !mDocument)
|
|
|
|
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
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
rv = NS_NewURI(getter_AddRefs(uriToLoad), aURL, baseURI);
|
|
|
|
if (NS_FAILED(rv))
|
|
|
|
return rv;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIScriptSecurityManager> secMan;
|
|
|
|
|
|
|
|
if (NS_FAILED(mContext->GetSecurityManager(getter_AddRefs(secMan))) ||
|
|
|
|
NS_FAILED(secMan->CheckLoadURIFromScript(cx, uriToLoad)))
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2000-08-29 00:14:23 +00:00
|
|
|
void GlobalWindowImpl::FlushPendingNotifications()
|
1999-09-21 14:18:52 +00:00
|
|
|
{
|
2000-08-29 00:14:23 +00:00
|
|
|
if (mDocument) {
|
|
|
|
nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
|
|
|
|
if (doc)
|
|
|
|
doc->FlushPendingNotifications();
|
|
|
|
}
|
|
|
|
}
|
1999-09-21 14:18:52 +00:00
|
|
|
|
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
|
|
|
|
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 NS_NewScriptGlobalObject(nsIScriptGlobalObject **aResult)
|
1998-07-16 01:16:47 +00:00
|
|
|
{
|
2000-08-22 03:51:17 +00:00
|
|
|
NS_ENSURE_ARG_POINTER(aResult);
|
|
|
|
|
|
|
|
*aResult = nsnull;
|
1998-07-16 01:16:47 +00:00
|
|
|
|
2000-08-22 03:51:17 +00:00
|
|
|
GlobalWindowImpl *global =
|
|
|
|
new GlobalWindowImpl();
|
|
|
|
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
|
|
|
|
2001-01-23 22:29:41 +00:00
|
|
|
NavigatorImpl::NavigatorImpl(nsIDocShell *aDocShell) :
|
|
|
|
mMimeTypes(nsnull),
|
|
|
|
mPlugins(nsnull),
|
|
|
|
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);
|
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
|
|
|
|
NavigatorImpl::GetUserAgent(nsAWritableString& 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) {
|
2001-05-11 21:05:08 +00:00
|
|
|
char *ua = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
res = service->GetUserAgent(&ua);
|
2001-05-11 21:05:08 +00:00
|
|
|
aUserAgent = NS_ConvertASCIItoUCS2(ua);
|
2000-08-22 03:51:17 +00:00
|
|
|
Recycle(ua);
|
|
|
|
}
|
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
|
|
|
|
NavigatorImpl::GetAppCodeName(nsAWritableString& 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) {
|
2001-05-11 21:05:08 +00:00
|
|
|
char *appName = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
res = service->GetAppName(&appName);
|
2001-05-11 21:05:08 +00:00
|
|
|
aAppCodeName = NS_ConvertASCIItoUCS2(appName);
|
2000-08-22 03:51:17 +00:00
|
|
|
Recycle(appName);
|
|
|
|
}
|
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
|
|
|
|
NavigatorImpl::GetAppVersion(nsAWritableString& 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) {
|
2001-05-11 21:05:08 +00:00
|
|
|
char *str = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
res = service->GetAppVersion(&str);
|
2001-05-11 21:05:08 +00:00
|
|
|
aAppVersion = NS_ConvertASCIItoUCS2(str);
|
2000-08-22 03:51:17 +00:00
|
|
|
Recycle(str);
|
|
|
|
|
2000-08-23 17:27:06 +00:00
|
|
|
aAppVersion.Append(NS_LITERAL_STRING(" ("));
|
2000-08-22 03:51:17 +00:00
|
|
|
res = service->GetPlatform(&str);
|
|
|
|
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
|
|
|
Recycle(str);
|
|
|
|
|
2000-08-23 17:27:06 +00:00
|
|
|
aAppVersion.Append(NS_LITERAL_STRING("; "));
|
2000-08-22 03:51:17 +00:00
|
|
|
res = service->GetLanguage(&str);
|
|
|
|
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
|
|
|
Recycle(str);
|
|
|
|
|
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
|
|
|
|
NavigatorImpl::GetAppName(nsAWritableString& 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
|
|
|
|
NavigatorImpl::GetLanguage(nsAWritableString& 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) {
|
2001-05-11 21:05:08 +00:00
|
|
|
char *lang = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
res = service->GetLanguage(&lang);
|
2001-05-11 21:05:08 +00:00
|
|
|
aLanguage = NS_ConvertASCIItoUCS2(lang);
|
2000-08-22 03:51:17 +00:00
|
|
|
Recycle(lang);
|
|
|
|
}
|
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
|
|
|
|
NavigatorImpl::GetPlatform(nsAWritableString& 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");
|
|
|
|
#elif defined(XP_MAC)
|
|
|
|
// 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.
|
2001-05-11 21:05:08 +00:00
|
|
|
char *plat = nsnull;
|
2000-09-22 04:52:22 +00:00
|
|
|
res = service->GetOscpu(&plat);
|
2001-05-11 21:05:08 +00:00
|
|
|
aPlatform = NS_ConvertASCIItoUCS2(plat);
|
2000-08-22 03:51:17 +00:00
|
|
|
Recycle(plat);
|
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
|
|
|
|
NavigatorImpl::GetOscpu(nsAWritableString& 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) {
|
2001-05-11 21:05:08 +00:00
|
|
|
char *oscpu = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
res = service->GetOscpu(&oscpu);
|
2001-05-11 21:05:08 +00:00
|
|
|
aOSCPU = NS_ConvertASCIItoUCS2(oscpu);
|
2000-08-22 03:51:17 +00:00
|
|
|
Recycle(oscpu);
|
|
|
|
}
|
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
|
|
|
|
NavigatorImpl::GetVendor(nsAWritableString& 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) {
|
2001-05-11 21:05:08 +00:00
|
|
|
char *vendor = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
res = service->GetVendor(&vendor);
|
2001-05-11 21:05:08 +00:00
|
|
|
aVendor = NS_ConvertASCIItoUCS2(vendor);
|
2000-08-22 03:51:17 +00:00
|
|
|
Recycle(vendor);
|
|
|
|
}
|
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
|
|
|
|
NavigatorImpl::GetVendorSub(nsAWritableString& 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) {
|
2001-05-11 21:05:08 +00:00
|
|
|
char *vendor = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
res = service->GetVendorSub(&vendor);
|
2001-05-11 21:05:08 +00:00
|
|
|
aVendorSub = NS_ConvertASCIItoUCS2(vendor);
|
2000-08-22 03:51:17 +00:00
|
|
|
Recycle(vendor);
|
|
|
|
}
|
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
|
|
|
|
NavigatorImpl::GetProduct(nsAWritableString& 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) {
|
2001-05-11 21:05:08 +00:00
|
|
|
char *product = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
res = service->GetProduct(&product);
|
2001-05-11 21:05:08 +00:00
|
|
|
aProduct = NS_ConvertASCIItoUCS2(product);
|
2000-08-22 03:51:17 +00:00
|
|
|
Recycle(product);
|
|
|
|
}
|
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
|
|
|
|
NavigatorImpl::GetProductSub(nsAWritableString& 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) {
|
2001-05-11 21:05:08 +00:00
|
|
|
char *productSub = nsnull;
|
2000-08-22 03:51:17 +00:00
|
|
|
res = service->GetProductSub(&productSub);
|
2001-05-11 21:05:08 +00:00
|
|
|
aProductSub = NS_ConvertASCIItoUCS2(productSub);
|
2000-08-22 03:51:17 +00:00
|
|
|
Recycle(productSub);
|
|
|
|
}
|
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
|
|
|
|
NavigatorImpl::GetSecurityPolicy(nsAWritableString& 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
|
|
|
}
|
|
|
|
|
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
|
|
|
|
nsCOMPtr<nsIScriptSecurityManager> secMan =
|
|
|
|
do_GetService("@mozilla.org/scriptsecuritymanager;1", &rv);
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
2001-05-08 19:43:47 +00:00
|
|
|
PRUint32 action;
|
|
|
|
if (argc == 1)
|
|
|
|
action = nsIXPCSecurityManager::ACCESS_GET_PROPERTY;
|
|
|
|
else
|
|
|
|
action = nsIXPCSecurityManager::ACCESS_SET_PROPERTY;
|
2001-05-19 00:33:51 +00:00
|
|
|
rv = secMan->CheckPropertyAccess(cx, nsnull,
|
|
|
|
"Navigator", "preferenceinternal", action);
|
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_FAILED(rv))
|
|
|
|
{
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
// Set browse with caret flag so we don't need to every time
|
|
|
|
mBrowseWithCaret = PR_FALSE;
|
|
|
|
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefServiceCID));
|
|
|
|
if (prefs)
|
|
|
|
prefs->GetBoolPref("accessibility.browsewithcaret", &mBrowseWithCaret);
|
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
|
|
|
|
nsDOMWindowController::IsCommandEnabled(const nsAReadableString& aCommand,
|
|
|
|
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
|
|
|
|
nsDOMWindowController::SupportsCommand(const nsAReadableString& aCommand,
|
|
|
|
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) ||
|
|
|
|
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
|
|
|
|
nsDOMWindowController::DoCommand(const nsAReadableString & 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);
|
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
|
|
|
|
nsDOMWindowController::OnEvent(const nsAReadableString & aEventName)
|
1999-12-13 23:13:33 +00:00
|
|
|
{
|
|
|
|
return NS_OK;
|
|
|
|
}
|
1999-12-14 01:41:27 +00:00
|
|
|
#endif
|