1998-08-13 04:34:53 +00:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
*
|
1999-11-06 03:40:37 +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-08-13 04:34:53 +00:00
|
|
|
*
|
1999-11-06 03:40:37 +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-08-13 04:34:53 +00:00
|
|
|
*
|
1999-11-06 03:40:37 +00:00
|
|
|
* The Original Code is mozilla.org code.
|
|
|
|
*
|
|
|
|
* The Initial Developer of the Original Code is Netscape
|
1998-08-13 04:34:53 +00:00
|
|
|
* Communications Corporation. Portions created by Netscape are
|
1999-11-06 03:40:37 +00:00
|
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
|
|
* Rights Reserved.
|
|
|
|
*
|
2000-02-08 13:40:10 +00:00
|
|
|
* Contributor(s):
|
|
|
|
* Travis Bogard <travis@netscape.com>
|
2000-01-11 20:49:15 +00:00
|
|
|
* Pierre Phaneuf <pp@ludusdesign.com>
|
1998-08-13 04:34:53 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include "nsGlobalWindow.h"
|
|
|
|
#include "nsIWebShell.h"
|
2000-02-08 13:40:10 +00:00
|
|
|
#include "nsIDocShell.h"
|
2000-03-30 22:38:32 +00:00
|
|
|
#include "nsIDocShellLoadInfo.h"
|
2000-02-24 03:57:32 +00:00
|
|
|
#include "nsIWebNavigation.h"
|
1998-08-13 04:34:53 +00:00
|
|
|
#include "nsIURL.h"
|
1999-06-18 17:34:08 +00:00
|
|
|
#include "nsIIOService.h"
|
1999-06-23 03:29:44 +00:00
|
|
|
#include "nsIURL.h"
|
1999-06-18 17:34:08 +00:00
|
|
|
#include "nsIServiceManager.h"
|
1999-11-30 04:50:42 +00:00
|
|
|
#include "nsNetUtil.h"
|
1998-08-13 04:34:53 +00:00
|
|
|
#include "plstr.h"
|
2000-08-23 17:27:06 +00:00
|
|
|
#include "prprf.h"
|
1998-08-13 04:34:53 +00:00
|
|
|
#include "prmem.h"
|
1999-08-03 23:16:48 +00:00
|
|
|
#include "nsCOMPtr.h"
|
|
|
|
#include "nsJSUtils.h"
|
1999-08-20 09:51:02 +00:00
|
|
|
#include "nsIScriptSecurityManager.h"
|
2000-02-10 04:56:56 +00:00
|
|
|
#include "nsICodebasePrincipal.h"
|
2000-01-15 02:02:27 +00:00
|
|
|
#include "nsIDOMWindow.h"
|
|
|
|
#include "nsIDOMDocument.h"
|
|
|
|
#include "nsIDocument.h"
|
1999-09-07 02:54:19 +00:00
|
|
|
#include "nsIJSContextStack.h"
|
2000-02-10 04:56:56 +00:00
|
|
|
#include "nsXPIDLString.h"
|
2000-02-11 04:18:39 +00:00
|
|
|
#include "nsDOMPropEnums.h"
|
|
|
|
#include "nsDOMError.h"
|
1998-08-13 04:34:53 +00:00
|
|
|
|
|
|
|
static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID);
|
|
|
|
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
|
|
|
static NS_DEFINE_IID(kIDOMLocationIID, NS_IDOMLOCATION_IID);
|
1999-08-05 22:18:28 +00:00
|
|
|
static NS_DEFINE_IID(kIDOMNSLocationIID, NS_IDOMNSLOCATION_IID);
|
1999-08-03 23:16:48 +00:00
|
|
|
static NS_DEFINE_IID(kIJSScriptObjectIID, NS_IJSSCRIPTOBJECT_IID);
|
2000-02-08 13:40:10 +00:00
|
|
|
static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
|
1998-08-13 04:34:53 +00:00
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
LocationImpl::LocationImpl(nsIDocShell *aDocShell)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
1999-02-04 19:06:11 +00:00
|
|
|
NS_INIT_REFCNT();
|
1998-08-13 04:34:53 +00:00
|
|
|
mScriptObject = nsnull;
|
2000-02-08 13:40:10 +00:00
|
|
|
mDocShell = aDocShell; // Weak Reference
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
LocationImpl::~LocationImpl()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMPL_ADDREF(LocationImpl)
|
|
|
|
NS_IMPL_RELEASE(LocationImpl)
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_INTERFACE_MAP_BEGIN(LocationImpl)
|
Landing changes Vidur made while the tree was closed for beta1 work, here's a list of the changes. r=me
[1] Cutting down the size of content. Made nsIJSScriptObject inherit from nsIScriptObjectOwner
[2] Cutting down the size of content. Made nsITextContent inherit from nsIContent.
[3] Cutting down the size of content. Moved implementation of nsIDOMReceiver to nsListenerManager. This is not true aggregation since it isn't transitive, but it's OK for now. It will be necessary for nsListenerManager to have a reference to its content in the future anyway, so the transitivity could be done.
dom/public/nsDOMPropEnums.h,v - bug 12559
dom/public/nsIJSScriptObject.h,v - [1]
dom/public/html/MANIFEST,v - bug 12559
dom/public/html/Makefile.in,v - bug 12559
dom/public/html/makefile.win,v - bug 12559
dom/public/html/nsIDOMHTMLInputElement.h,v - bug 17544
dom/public/idl/html/HTMLAnchorElement.idl,v - bug 12559
dom/public/idl/html/HTMLAreaElement.idl,v - bug 12559
dom/public/idl/html/HTMLInputElement.idl,v - bug 17544
dom/src/base/nsGlobalWindow.cpp,v - bug 30700
dom/src/base/nsGlobalWindow.h,v - [1]
dom/src/base/nsLocation.cpp,v - [1]
dom/src/html/nsJSHTMLAnchorElement.cpp,v - bug 12559
dom/src/html/nsJSHTMLAreaElement.cpp,v - bug 12559
dom/src/html/nsJSHTMLInputElement.cpp,v - bug 17544
layout/base/public/nsIDocument.h,v - bug 27953
layout/base/public/nsITextContent.h,v - [2]
layout/base/src/nsCommentNode.cpp,v - [2]
layout/base/src/nsDocument.cpp,v - bug 27953
layout/base/src/nsDocument.h,v - bug 27953
layout/base/src/nsDocumentViewer.cpp,v - bug 27953
layout/base/src/nsGenericDOMDataNode.cpp,v - [3]
layout/base/src/nsGenericDOMDataNode.h,v - [3]
layout/base/src/nsGenericElement.cpp,v - [3]
layout/base/src/nsGenericElement.h,v - [3]
layout/base/src/nsNameSpaceManager.cpp,v - bug 7834
layout/base/src/nsStyleContext.cpp,v - outline property shouldn't reflow
layout/base/src/nsTextNode.cpp,v - [2]
layout/events/src/nsEventListenerManager.cpp,v - [3]
layout/events/src/nsEventListenerManager.h,v - [3]
layout/html/base/src/nsGfxScrollFrame.cpp,v - nsString->nsAutoString
layout/html/content/src/nsAttributeContent.cpp,v - [2]
layout/html/content/src/nsHTMLAnchorElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLAppletElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLAreaElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLBRElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLBaseElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLBaseFontElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLBodyElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLButtonElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLDListElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLDelElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLDirectoryElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLDivElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLEmbedElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLFieldSetElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLFontElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLFormElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLFrameElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLFrameSetElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLHRElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLHeadElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLHeadingElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLHtmlElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLIFrameElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLImageElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLInputElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLInsElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLIsIndexElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLLIElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLLabelElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLLayerElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLLegendElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLLinkElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLMapElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLMenuElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLMetaElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLModElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLOListElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLObjectElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLOptGroupElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLOptionElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLParagraphElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLParamElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLPreElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLQuoteElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLScriptElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLSelectElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLSpacerElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLSpanElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLStyleElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableCaptionElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableCellElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableColElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableColGroupElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableRowElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableSectionElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTextAreaElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTitleElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLUListElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLWBRElement.cpp,v - [1][3]
layout/html/document/src/nsHTMLDocument.cpp,v - bug 27953
layout/html/document/src/nsHTMLDocument.h,v - bug 27953
layout/xml/content/src/nsXMLCDATASection.cpp,v - [1][2]
layout/xml/content/src/nsXMLDocumentType.cpp,v - [1][2]
layout/xml/content/src/nsXMLElement.h,v - [1][2]
layout/xml/content/src/nsXMLEntity.cpp,v - [1][2]
layout/xml/content/src/nsXMLNotation.cpp,v - [1][2]
layout/xml/content/src/nsXMLProcessingInstruction.cpp,v - [1][2]
layout/xul/base/src/nsBoxFrame.cpp,v - nsString->nsAutoString
layout/xul/base/src/nsSliderFrame.cpp,v - nsString->nsAutoString
netwerk/protocol/http/src/nsHTTPRequest.cpp,v - nsString->nsAutoString
rdf/content/src/nsXULDocument.cpp,v - bug 27953
rdf/content/src/nsXULDocument.h,v - bug 27953
rdf/content/src/nsXULElement.h,v - [1]
xpcom/base/IIDS.h,v - bug 12559
2000-03-17 13:27:00 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMLocation)
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIDOMLocation)
|
Landing changes Vidur made while the tree was closed for beta1 work, here's a list of the changes. r=me
[1] Cutting down the size of content. Made nsIJSScriptObject inherit from nsIScriptObjectOwner
[2] Cutting down the size of content. Made nsITextContent inherit from nsIContent.
[3] Cutting down the size of content. Moved implementation of nsIDOMReceiver to nsListenerManager. This is not true aggregation since it isn't transitive, but it's OK for now. It will be necessary for nsListenerManager to have a reference to its content in the future anyway, so the transitivity could be done.
dom/public/nsDOMPropEnums.h,v - bug 12559
dom/public/nsIJSScriptObject.h,v - [1]
dom/public/html/MANIFEST,v - bug 12559
dom/public/html/Makefile.in,v - bug 12559
dom/public/html/makefile.win,v - bug 12559
dom/public/html/nsIDOMHTMLInputElement.h,v - bug 17544
dom/public/idl/html/HTMLAnchorElement.idl,v - bug 12559
dom/public/idl/html/HTMLAreaElement.idl,v - bug 12559
dom/public/idl/html/HTMLInputElement.idl,v - bug 17544
dom/src/base/nsGlobalWindow.cpp,v - bug 30700
dom/src/base/nsGlobalWindow.h,v - [1]
dom/src/base/nsLocation.cpp,v - [1]
dom/src/html/nsJSHTMLAnchorElement.cpp,v - bug 12559
dom/src/html/nsJSHTMLAreaElement.cpp,v - bug 12559
dom/src/html/nsJSHTMLInputElement.cpp,v - bug 17544
layout/base/public/nsIDocument.h,v - bug 27953
layout/base/public/nsITextContent.h,v - [2]
layout/base/src/nsCommentNode.cpp,v - [2]
layout/base/src/nsDocument.cpp,v - bug 27953
layout/base/src/nsDocument.h,v - bug 27953
layout/base/src/nsDocumentViewer.cpp,v - bug 27953
layout/base/src/nsGenericDOMDataNode.cpp,v - [3]
layout/base/src/nsGenericDOMDataNode.h,v - [3]
layout/base/src/nsGenericElement.cpp,v - [3]
layout/base/src/nsGenericElement.h,v - [3]
layout/base/src/nsNameSpaceManager.cpp,v - bug 7834
layout/base/src/nsStyleContext.cpp,v - outline property shouldn't reflow
layout/base/src/nsTextNode.cpp,v - [2]
layout/events/src/nsEventListenerManager.cpp,v - [3]
layout/events/src/nsEventListenerManager.h,v - [3]
layout/html/base/src/nsGfxScrollFrame.cpp,v - nsString->nsAutoString
layout/html/content/src/nsAttributeContent.cpp,v - [2]
layout/html/content/src/nsHTMLAnchorElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLAppletElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLAreaElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLBRElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLBaseElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLBaseFontElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLBodyElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLButtonElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLDListElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLDelElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLDirectoryElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLDivElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLEmbedElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLFieldSetElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLFontElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLFormElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLFrameElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLFrameSetElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLHRElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLHeadElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLHeadingElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLHtmlElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLIFrameElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLImageElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLInputElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLInsElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLIsIndexElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLLIElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLLabelElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLLayerElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLLegendElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLLinkElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLMapElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLMenuElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLMetaElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLModElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLOListElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLObjectElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLOptGroupElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLOptionElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLParagraphElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLParamElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLPreElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLQuoteElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLScriptElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLSelectElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLSpacerElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLSpanElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLStyleElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableCaptionElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableCellElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableColElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableColGroupElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableRowElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTableSectionElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTextAreaElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLTitleElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLUListElement.cpp,v - [1][3]
layout/html/content/src/nsHTMLWBRElement.cpp,v - [1][3]
layout/html/document/src/nsHTMLDocument.cpp,v - bug 27953
layout/html/document/src/nsHTMLDocument.h,v - bug 27953
layout/xml/content/src/nsXMLCDATASection.cpp,v - [1][2]
layout/xml/content/src/nsXMLDocumentType.cpp,v - [1][2]
layout/xml/content/src/nsXMLElement.h,v - [1][2]
layout/xml/content/src/nsXMLEntity.cpp,v - [1][2]
layout/xml/content/src/nsXMLNotation.cpp,v - [1][2]
layout/xml/content/src/nsXMLProcessingInstruction.cpp,v - [1][2]
layout/xul/base/src/nsBoxFrame.cpp,v - nsString->nsAutoString
layout/xul/base/src/nsSliderFrame.cpp,v - nsString->nsAutoString
netwerk/protocol/http/src/nsHTTPRequest.cpp,v - nsString->nsAutoString
rdf/content/src/nsXULDocument.cpp,v - bug 27953
rdf/content/src/nsXULDocument.h,v - bug 27953
rdf/content/src/nsXULElement.h,v - [1]
xpcom/base/IIDS.h,v - bug 12559
2000-03-17 13:27:00 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectOwner)
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIDOMNSLocation)
|
|
|
|
NS_INTERFACE_MAP_ENTRY(nsIJSScriptObject)
|
|
|
|
NS_INTERFACE_MAP_END
|
1998-08-13 04:34:53 +00:00
|
|
|
|
|
|
|
nsresult
|
1998-09-17 01:53:52 +00:00
|
|
|
LocationImpl::SetScriptObject(void *aScriptObject)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
1998-09-17 01:53:52 +00:00
|
|
|
mScriptObject = aScriptObject;
|
1998-08-13 04:34:53 +00:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
LocationImpl::GetScriptObject(nsIScriptContext *aContext, void** aScriptObject)
|
|
|
|
{
|
1999-12-03 19:02:31 +00:00
|
|
|
NS_ENSURE_ARG_POINTER(aScriptObject);
|
|
|
|
|
|
|
|
if (!mScriptObject) {
|
2000-02-08 13:40:10 +00:00
|
|
|
nsCOMPtr<nsIScriptGlobalObject> global(do_GetInterface(mDocShell));
|
1999-12-03 19:02:31 +00:00
|
|
|
NS_ENSURE_TRUE(global, NS_ERROR_FAILURE);
|
1999-12-03 19:41:22 +00:00
|
|
|
NS_ENSURE_SUCCESS(NS_NewScriptLocation(aContext,
|
|
|
|
NS_STATIC_CAST(nsIDOMLocation*, this),global, &mScriptObject),
|
|
|
|
NS_ERROR_FAILURE);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
*aScriptObject = mScriptObject;
|
1999-12-03 19:02:31 +00:00
|
|
|
return NS_OK;
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
NS_IMETHODIMP_(void) LocationImpl::SetDocShell(nsIDocShell *aDocShell)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
2000-02-08 13:40:10 +00:00
|
|
|
mDocShell = aDocShell; // Weak Reference
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
|
1999-09-07 02:54:19 +00:00
|
|
|
nsresult
|
2000-08-11 04:31:08 +00:00
|
|
|
LocationImpl::CheckURL(nsIURI* aURL, nsIDocShellLoadInfo** aLoadInfo)
|
1999-09-07 02:54:19 +00:00
|
|
|
{
|
|
|
|
nsresult result;
|
|
|
|
// Get JSContext from stack.
|
|
|
|
NS_WITH_SERVICE(nsIJSContextStack, stack, "nsThreadJSContextStack",
|
|
|
|
&result);
|
|
|
|
if (NS_FAILED(result))
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
JSContext *cx;
|
|
|
|
if (NS_FAILED(stack->Peek(&cx)))
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
|
|
|
|
// Get security manager.
|
1999-12-18 20:29:29 +00:00
|
|
|
NS_WITH_SERVICE(nsIScriptSecurityManager, secMan,
|
|
|
|
NS_SCRIPTSECURITYMANAGER_PROGID, &result);
|
|
|
|
if (NS_FAILED(result))
|
1999-09-07 02:54:19 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
|
|
|
|
// Check to see if URI is allowed.
|
1999-12-18 20:29:29 +00:00
|
|
|
if (NS_FAILED(result = secMan->CheckLoadURIFromScript(cx, aURL)))
|
1999-11-16 05:07:31 +00:00
|
|
|
return result;
|
1999-09-07 02:54:19 +00:00
|
|
|
|
2000-08-11 04:31:08 +00:00
|
|
|
// Create load info
|
|
|
|
nsCOMPtr<nsIDocShellLoadInfo> loadInfo;
|
|
|
|
mDocShell->CreateLoadInfo(getter_AddRefs(loadInfo));
|
|
|
|
NS_ENSURE_TRUE(loadInfo, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
|
|
|
|
// Now get the principal and referrer to use when loading the URI
|
2000-02-10 04:56:56 +00:00
|
|
|
nsCOMPtr<nsIPrincipal> principal;
|
2000-08-11 04:31:08 +00:00
|
|
|
if (NS_FAILED(secMan->GetSubjectPrincipal(getter_AddRefs(principal))) ||
|
|
|
|
!principal)
|
2000-02-10 04:56:56 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
2000-08-11 04:31:08 +00:00
|
|
|
nsCOMPtr<nsISupports> owner = do_QueryInterface(principal);
|
|
|
|
loadInfo->SetOwner(owner);
|
|
|
|
|
2000-02-10 04:56:56 +00:00
|
|
|
nsCOMPtr<nsICodebasePrincipal> codebase = do_QueryInterface(principal);
|
2000-08-11 04:31:08 +00:00
|
|
|
if (codebase)
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIURI> referrer;
|
|
|
|
if (NS_FAILED(result = codebase->GetURI(getter_AddRefs(referrer))))
|
2000-08-10 03:57:43 +00:00
|
|
|
return result;
|
2000-08-11 04:31:08 +00:00
|
|
|
loadInfo->SetReferrer(referrer);
|
2000-08-10 03:57:43 +00:00
|
|
|
}
|
2000-02-10 04:56:56 +00:00
|
|
|
|
2000-08-11 04:31:08 +00:00
|
|
|
*aLoadInfo = loadInfo.get();
|
|
|
|
NS_ADDREF(*aLoadInfo);
|
1999-09-07 02:54:19 +00:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
1998-12-16 05:40:20 +00:00
|
|
|
nsresult
|
1999-06-23 03:29:44 +00:00
|
|
|
LocationImpl::SetURL(nsIURI* aURL)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
2000-02-08 13:40:10 +00:00
|
|
|
if (mDocShell) {
|
2000-03-30 22:38:32 +00:00
|
|
|
|
|
|
|
nsCOMPtr<nsIDocShellLoadInfo> loadInfo;
|
2000-08-11 04:31:08 +00:00
|
|
|
if(NS_FAILED(CheckURL(aURL, getter_AddRefs(loadInfo))))
|
1999-09-07 02:54:19 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
|
2000-03-30 22:38:32 +00:00
|
|
|
return mDocShell->LoadURI(aURL, loadInfo);
|
1998-11-23 01:09:27 +00:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
return NS_OK;
|
|
|
|
}
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::GetHash(nsAWritableString& aHash)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 06:12:02 +00:00
|
|
|
nsIURI *uri;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&uri, href);
|
1999-06-18 17:34:08 +00:00
|
|
|
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
1999-06-23 03:29:44 +00:00
|
|
|
char *ref;
|
1999-06-23 06:12:02 +00:00
|
|
|
nsIURL* url;
|
2000-01-11 20:49:15 +00:00
|
|
|
result = uri->QueryInterface(NS_GET_IID(nsIURL), (void**)&url);
|
1999-06-23 06:12:02 +00:00
|
|
|
if (NS_SUCCEEDED(result)) {
|
|
|
|
result = url->GetRef(&ref);
|
|
|
|
NS_RELEASE(url);
|
|
|
|
}
|
1998-12-16 05:40:20 +00:00
|
|
|
if (result == NS_OK && (nsnull != ref) && ('\0' != *ref)) {
|
2000-08-23 17:27:06 +00:00
|
|
|
aHash.Assign(NS_LITERAL_STRING("#"));
|
|
|
|
aHash.Append(NS_ConvertASCIItoUCS2(ref));
|
1999-06-23 03:29:44 +00:00
|
|
|
nsCRT::free(ref);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
aHash.SetLength(0);
|
|
|
|
}
|
1999-06-23 06:12:02 +00:00
|
|
|
NS_RELEASE(uri);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::SetHash(const nsAReadableString& aHash)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 06:12:02 +00:00
|
|
|
nsIURI *uri;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&uri, href);
|
1999-06-18 17:34:08 +00:00
|
|
|
if (NS_FAILED(result)) return result;
|
1999-06-23 06:12:02 +00:00
|
|
|
nsIURL* url;
|
2000-01-11 20:49:15 +00:00
|
|
|
result = uri->QueryInterface(NS_GET_IID(nsIURI), (void**)&url);
|
1999-06-18 17:34:08 +00:00
|
|
|
NS_RELEASE(uri);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
2000-08-23 17:27:06 +00:00
|
|
|
url->SetRef(NS_ConvertUCS2toUTF8(aHash));
|
1998-12-16 05:40:20 +00:00
|
|
|
SetURL(url);
|
1999-06-23 06:12:02 +00:00
|
|
|
NS_RELEASE(url);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::GetHost(nsAWritableString& aHost)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 03:29:44 +00:00
|
|
|
nsIURI *url;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&url, href);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
1999-06-23 03:29:44 +00:00
|
|
|
char* host;
|
1998-12-16 05:40:20 +00:00
|
|
|
result = url->GetHost(&host);
|
|
|
|
if (result == NS_OK) {
|
2000-08-23 17:27:06 +00:00
|
|
|
CopyASCIItoUCS2(nsLiteralCString(host), aHost);
|
1999-06-23 03:29:44 +00:00
|
|
|
nsCRT::free(host);
|
|
|
|
PRInt32 port;
|
|
|
|
(void)url->GetPort(&port);
|
1998-12-16 05:40:20 +00:00
|
|
|
if (-1 != port) {
|
2000-08-23 17:27:06 +00:00
|
|
|
aHost.Append(NS_LITERAL_STRING(":"));
|
|
|
|
|
|
|
|
nsAutoString tmpHost;
|
|
|
|
tmpHost.AppendInt(port);
|
|
|
|
|
|
|
|
aHost.Append(tmpHost);
|
1998-12-16 05:40:20 +00:00
|
|
|
}
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
1999-06-23 06:12:02 +00:00
|
|
|
NS_RELEASE(url);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::SetHost(const nsAReadableString& aHost)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 03:29:44 +00:00
|
|
|
nsIURI *url;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&url, href);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
2000-08-23 17:27:06 +00:00
|
|
|
url->SetHost(NS_ConvertUCS2toUTF8(aHost));
|
1998-12-16 05:40:20 +00:00
|
|
|
SetURL(url);
|
1999-06-23 06:12:02 +00:00
|
|
|
NS_RELEASE(url);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::GetHostname(nsAWritableString& aHostname)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 03:29:44 +00:00
|
|
|
nsIURI *url;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&url, href);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
1999-06-23 03:29:44 +00:00
|
|
|
char* host;
|
1998-12-16 05:40:20 +00:00
|
|
|
result = url->GetHost(&host);
|
1999-06-23 03:29:44 +00:00
|
|
|
if (result == NS_OK) {
|
2000-08-23 17:27:06 +00:00
|
|
|
CopyASCIItoUCS2(nsLiteralCString(host), aHostname);
|
1999-06-23 03:29:44 +00:00
|
|
|
nsCRT::free(host);
|
|
|
|
}
|
1999-06-23 06:12:02 +00:00
|
|
|
NS_RELEASE(url);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::SetHostname(const nsAReadableString& aHostname)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 03:29:44 +00:00
|
|
|
nsIURI *url;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&url, href);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
2000-08-23 17:27:06 +00:00
|
|
|
url->SetHost(NS_ConvertUCS2toUTF8(aHostname));
|
1998-12-16 05:40:20 +00:00
|
|
|
SetURL(url);
|
1999-06-23 06:12:02 +00:00
|
|
|
NS_RELEASE(url);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::GetHref(nsAWritableString& aHref)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
2000-08-30 11:37:06 +00:00
|
|
|
nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(mDocShell));
|
|
|
|
if (webNav) {
|
2000-03-11 02:57:39 +00:00
|
|
|
nsCOMPtr<nsIURI> uri;
|
2000-08-30 11:37:06 +00:00
|
|
|
result = webNav->GetCurrentURI(getter_AddRefs(uri));
|
2000-04-28 06:17:47 +00:00
|
|
|
if (NS_SUCCEEDED(result) && uri) {
|
2000-08-23 17:27:06 +00:00
|
|
|
nsXPIDLCString uriString;
|
|
|
|
result = uri->GetSpec(getter_Copies(uriString));
|
|
|
|
if (NS_SUCCEEDED(result))
|
|
|
|
CopyASCIItoUCS2(nsLiteralCString(uriString), aHref);
|
2000-03-11 02:57:39 +00:00
|
|
|
}
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::SetHref(const nsAReadableString& aHref)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
1999-08-03 23:16:48 +00:00
|
|
|
nsAutoString oldHref;
|
|
|
|
nsIURI *oldUrl;
|
1998-11-23 01:09:27 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(oldHref);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&oldUrl, oldHref);
|
1998-11-23 01:09:27 +00:00
|
|
|
if (NS_OK == result) {
|
2000-08-07 07:35:25 +00:00
|
|
|
result = SetHrefWithBase(aHref, oldUrl, PR_FALSE);
|
1999-08-03 23:16:48 +00:00
|
|
|
NS_RELEASE(oldUrl);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2000-08-29 00:14:23 +00:00
|
|
|
nsresult
|
|
|
|
LocationImpl::SetHrefWithContext(JSContext* cx, jsval val)
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIURI> base;
|
|
|
|
nsAutoString href;
|
|
|
|
|
|
|
|
// Get the parameter passed in
|
|
|
|
nsJSUtils::nsConvertJSValToString(href, cx, val);
|
|
|
|
|
|
|
|
// Get the source of the caller
|
|
|
|
nsresult result = GetSourceURL(cx, getter_AddRefs(base));
|
|
|
|
|
|
|
|
if (NS_FAILED(result)) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
return SetHrefWithBase(href, base, PR_FALSE);
|
|
|
|
}
|
|
|
|
|
1999-08-03 23:16:48 +00:00
|
|
|
nsresult
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::SetHrefWithBase(const nsAReadableString& aHref,
|
1999-08-03 23:16:48 +00:00
|
|
|
nsIURI* aBase,
|
|
|
|
PRBool aReplace)
|
|
|
|
{
|
|
|
|
nsresult result;
|
1999-09-07 02:54:19 +00:00
|
|
|
nsCOMPtr<nsIURI> newUrl;
|
1999-08-03 23:16:48 +00:00
|
|
|
|
1999-09-07 02:54:19 +00:00
|
|
|
result = NS_NewURI(getter_AddRefs(newUrl), aHref, aBase);
|
1998-08-13 04:34:53 +00:00
|
|
|
|
2000-02-08 13:40:10 +00:00
|
|
|
if ((NS_OK == result) && (mDocShell)) {
|
1999-09-01 00:54:35 +00:00
|
|
|
|
2000-03-30 22:38:32 +00:00
|
|
|
nsCOMPtr<nsIDocShellLoadInfo> loadInfo;
|
2000-08-11 04:31:08 +00:00
|
|
|
if(NS_FAILED(CheckURL(newUrl, getter_AddRefs(loadInfo))))
|
1999-09-01 00:54:35 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
1999-08-20 09:51:02 +00:00
|
|
|
|
2000-06-22 07:22:23 +00:00
|
|
|
if (aReplace)
|
|
|
|
loadInfo->SetLoadType(nsIDocShellLoadInfo::loadNormalReplace);
|
2000-03-30 22:38:32 +00:00
|
|
|
|
|
|
|
return mDocShell->LoadURI(newUrl, loadInfo);
|
1998-11-23 01:09:27 +00:00
|
|
|
}
|
1999-08-03 23:16:48 +00:00
|
|
|
|
1998-11-23 01:09:27 +00:00
|
|
|
return result;
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::GetPathname(nsAWritableString& aPathname)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
2000-04-14 03:14:53 +00:00
|
|
|
nsIURI *uri;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
2000-04-14 03:14:53 +00:00
|
|
|
result = NS_NewURI(&uri, href);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
2000-04-14 03:14:53 +00:00
|
|
|
nsCOMPtr<nsIURL> url = do_QueryInterface(uri);
|
|
|
|
if (url) {
|
|
|
|
char* file;
|
|
|
|
result = url->GetFilePath(&file);
|
|
|
|
if (result == NS_OK) {
|
2000-08-23 17:27:06 +00:00
|
|
|
CopyASCIItoUCS2(nsLiteralCString(file), aPathname);
|
2000-04-14 03:14:53 +00:00
|
|
|
nsCRT::free(file);
|
|
|
|
}
|
1999-06-23 03:29:44 +00:00
|
|
|
}
|
2000-04-14 03:14:53 +00:00
|
|
|
NS_IF_RELEASE(uri);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::SetPathname(const nsAReadableString& aPathname)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 03:29:44 +00:00
|
|
|
nsIURI *url;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&url, href);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
2000-08-23 17:27:06 +00:00
|
|
|
url->SetPath(NS_ConvertUCS2toUTF8(aPathname));
|
1998-12-16 05:40:20 +00:00
|
|
|
SetURL(url);
|
1999-07-29 21:16:27 +00:00
|
|
|
NS_RELEASE(url);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::GetPort(nsAWritableString& aPort)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 03:29:44 +00:00
|
|
|
nsIURI *url;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&url, href);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
|
|
|
aPort.SetLength(0);
|
1999-06-23 03:29:44 +00:00
|
|
|
PRInt32 port;
|
|
|
|
(void)url->GetPort(&port);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (-1 != port) {
|
2000-08-23 17:27:06 +00:00
|
|
|
nsAutoString portStr;
|
|
|
|
portStr.AppendInt(port);
|
|
|
|
aPort.Append(portStr);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
1999-06-23 06:12:02 +00:00
|
|
|
NS_RELEASE(url);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::SetPort(const nsAReadableString& aPort)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 03:29:44 +00:00
|
|
|
nsIURI *url;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&url, href);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
2000-08-23 17:27:06 +00:00
|
|
|
const char *buf = NS_ConvertUCS2toUTF8(aPort).GetBuffer();
|
1998-08-13 04:34:53 +00:00
|
|
|
PRInt32 port = -1;
|
|
|
|
|
|
|
|
if (buf) {
|
|
|
|
if (*buf == ':') {
|
|
|
|
port = atol(buf+1);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
port = atol(buf);
|
|
|
|
}
|
|
|
|
}
|
1999-06-23 03:29:44 +00:00
|
|
|
url->SetPort(port);
|
1998-12-16 05:40:20 +00:00
|
|
|
SetURL(url);
|
1999-06-23 06:12:02 +00:00
|
|
|
NS_RELEASE(url);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::GetProtocol(nsAWritableString& aProtocol)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 03:29:44 +00:00
|
|
|
nsIURI *url;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&url, href);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
1999-06-23 03:29:44 +00:00
|
|
|
char* protocol;
|
|
|
|
result = url->GetScheme(&protocol);
|
1998-12-16 05:40:20 +00:00
|
|
|
if (result == NS_OK) {
|
2000-08-23 17:27:06 +00:00
|
|
|
aProtocol.Assign(NS_ConvertASCIItoUCS2(protocol));
|
|
|
|
aProtocol.Append(NS_LITERAL_STRING(":"));
|
1999-06-23 03:29:44 +00:00
|
|
|
nsCRT::free(protocol);
|
1998-12-16 05:40:20 +00:00
|
|
|
}
|
1999-06-23 06:12:02 +00:00
|
|
|
NS_RELEASE(url);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::SetProtocol(const nsAReadableString& aProtocol)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 03:29:44 +00:00
|
|
|
nsIURI *url;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&url, href);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
2000-08-23 17:27:06 +00:00
|
|
|
url->SetScheme(NS_ConvertUCS2toUTF8(aProtocol));
|
1998-12-16 05:40:20 +00:00
|
|
|
SetURL(url);
|
1999-07-29 21:16:27 +00:00
|
|
|
NS_RELEASE(url);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::GetSearch(nsAWritableString& aSearch)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 06:12:02 +00:00
|
|
|
nsIURI *uri;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&uri, href);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
1999-06-23 03:29:44 +00:00
|
|
|
char *search;
|
1999-06-23 06:12:02 +00:00
|
|
|
nsIURL* url;
|
2000-01-11 20:49:15 +00:00
|
|
|
result = uri->QueryInterface(NS_GET_IID(nsIURL), (void**)&url);
|
1999-06-23 06:12:02 +00:00
|
|
|
if (NS_SUCCEEDED(result)) {
|
|
|
|
result = url->GetQuery(&search);
|
|
|
|
NS_RELEASE(url);
|
|
|
|
}
|
1998-12-16 05:40:20 +00:00
|
|
|
if (result == NS_OK && (nsnull != search) && ('\0' != *search)) {
|
2000-08-23 17:27:06 +00:00
|
|
|
aSearch.Assign(NS_LITERAL_STRING("?"));
|
|
|
|
aSearch.Append(NS_ConvertASCIItoUCS2(search));
|
1999-06-23 03:29:44 +00:00
|
|
|
nsCRT::free(search);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
aSearch.SetLength(0);
|
|
|
|
}
|
1999-06-23 06:12:02 +00:00
|
|
|
NS_RELEASE(uri);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-07-15 00:14:02 +00:00
|
|
|
return NS_OK;
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::SetSearch(const nsAReadableString& aSearch)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
|
|
|
nsAutoString href;
|
1999-06-23 06:12:02 +00:00
|
|
|
nsIURI *uri;
|
1998-08-13 04:34:53 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(href);
|
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
result = NS_NewURI(&uri, href);
|
1998-08-13 04:34:53 +00:00
|
|
|
if (NS_OK == result) {
|
1999-06-23 06:12:02 +00:00
|
|
|
nsIURL* url;
|
2000-01-11 20:49:15 +00:00
|
|
|
result = uri->QueryInterface(NS_GET_IID(nsIURL), (void**)&url);
|
1999-06-23 06:12:02 +00:00
|
|
|
if (NS_SUCCEEDED(result)) {
|
2000-08-23 17:27:06 +00:00
|
|
|
result = url->SetQuery(NS_ConvertUCS2toUTF8(aSearch));
|
1999-06-23 06:12:02 +00:00
|
|
|
NS_RELEASE(url);
|
|
|
|
}
|
|
|
|
SetURL(uri);
|
|
|
|
NS_RELEASE(uri);
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
1999-08-03 23:16:48 +00:00
|
|
|
LocationImpl::Reload(PRBool aForceget)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
2000-02-24 03:57:32 +00:00
|
|
|
nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(mDocShell));
|
|
|
|
NS_ENSURE_TRUE(webNav, NS_ERROR_FAILURE);
|
1998-08-13 04:34:53 +00:00
|
|
|
|
2000-06-29 21:48:18 +00:00
|
|
|
NS_ENSURE_SUCCESS(webNav->Reload(nsIWebNavigation::loadReloadNormal),
|
2000-02-24 03:57:32 +00:00
|
|
|
NS_ERROR_FAILURE);
|
1998-08-13 04:34:53 +00:00
|
|
|
|
2000-02-24 03:57:32 +00:00
|
|
|
return NS_OK;
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::Replace(const nsAReadableString& aUrl)
|
1998-08-13 04:34:53 +00:00
|
|
|
{
|
1999-08-03 23:16:48 +00:00
|
|
|
nsAutoString oldHref;
|
|
|
|
nsIURI *oldUrl;
|
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
result = GetHref(oldHref);
|
|
|
|
if (NS_OK == result) {
|
|
|
|
result = NS_NewURI(&oldUrl, oldHref);
|
|
|
|
if (NS_OK == result) {
|
2000-08-07 07:35:25 +00:00
|
|
|
result = SetHrefWithBase(aUrl, oldUrl, PR_TRUE);
|
1999-08-03 23:16:48 +00:00
|
|
|
NS_RELEASE(oldUrl);
|
|
|
|
}
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
|
|
|
|
1999-08-03 23:16:48 +00:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
LocationImpl::Reload(JSContext *cx, jsval *argv, PRUint32 argc)
|
|
|
|
{
|
|
|
|
// XXX Security manager needs to be called
|
|
|
|
JSBool force = JS_FALSE;
|
|
|
|
|
|
|
|
if (argc > 0) {
|
|
|
|
JS_ValueToBoolean(cx, argv[0], &force);
|
|
|
|
}
|
|
|
|
|
|
|
|
return Reload(force ? PR_TRUE : PR_FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
LocationImpl::Replace(JSContext *cx, jsval *argv, PRUint32 argc)
|
|
|
|
{
|
2000-03-17 22:18:54 +00:00
|
|
|
|
1999-08-03 23:16:48 +00:00
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
if (argc > 0) {
|
|
|
|
nsIURI* base;
|
|
|
|
nsAutoString href;
|
|
|
|
|
|
|
|
// Get the parameter passed in
|
|
|
|
nsJSUtils::nsConvertJSValToString(href, cx, argv[0]);
|
|
|
|
|
|
|
|
// Get the source of the caller
|
|
|
|
result = GetSourceURL(cx, &base);
|
|
|
|
|
|
|
|
if (NS_SUCCEEDED(result)) {
|
2000-08-07 07:35:25 +00:00
|
|
|
result = SetHrefWithBase(href, base, PR_TRUE);
|
1999-08-03 23:16:48 +00:00
|
|
|
NS_RELEASE(base);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
1998-08-13 04:34:53 +00:00
|
|
|
}
|
1999-01-06 17:22:34 +00:00
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-08-23 17:27:06 +00:00
|
|
|
LocationImpl::ToString(nsAWritableString& aReturn)
|
1999-01-06 17:22:34 +00:00
|
|
|
{
|
|
|
|
return GetHref(aReturn);
|
|
|
|
}
|
|
|
|
|
1999-08-03 23:16:48 +00:00
|
|
|
nsresult
|
|
|
|
LocationImpl::GetSourceURL(JSContext* cx,
|
|
|
|
nsIURI** sourceURL)
|
|
|
|
{
|
|
|
|
// XXX Code duplicated from nsHTMLDocument
|
|
|
|
// XXX Tom said this reminded him of the "Six Degrees of
|
|
|
|
// Kevin Bacon" game. We try to get from here to there using
|
|
|
|
// whatever connections possible. The problem is that this
|
|
|
|
// could break if any of the connections along the way change.
|
|
|
|
// I wish there were a better way.
|
|
|
|
|
1999-12-18 20:29:29 +00:00
|
|
|
nsresult result = NS_ERROR_FAILURE;
|
1999-08-03 23:16:48 +00:00
|
|
|
|
1999-12-18 20:29:29 +00:00
|
|
|
// We need to use the dynamically scoped global and assume that the
|
|
|
|
// current JSContext is a DOM context with a nsIScriptGlobalObject so
|
|
|
|
// that we can get the url of the caller.
|
|
|
|
// XXX This will fail on non-DOM contexts :(
|
|
|
|
|
|
|
|
nsCOMPtr<nsIScriptGlobalObject> nativeGlob;
|
|
|
|
nsJSUtils::nsGetDynamicScriptGlobal(cx, getter_AddRefs(nativeGlob));
|
|
|
|
if (nativeGlob) {
|
2000-01-15 02:02:27 +00:00
|
|
|
nsCOMPtr<nsIDOMWindow> window = do_QueryInterface(nativeGlob);
|
1999-12-18 20:29:29 +00:00
|
|
|
|
2000-01-15 02:02:27 +00:00
|
|
|
if (window) {
|
|
|
|
nsCOMPtr<nsIDOMDocument> domDoc;
|
1999-12-18 20:29:29 +00:00
|
|
|
|
2000-01-15 02:02:27 +00:00
|
|
|
result = window->GetDocument(getter_AddRefs(domDoc));
|
|
|
|
if (NS_SUCCEEDED(result)) {
|
|
|
|
nsCOMPtr<nsIDocument> doc = do_QueryInterface(domDoc);
|
|
|
|
|
|
|
|
if (doc) {
|
|
|
|
result = doc->GetBaseURL(*sourceURL);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!*sourceURL) {
|
|
|
|
*sourceURL = doc->GetDocumentURL();
|
|
|
|
}
|
|
|
|
}
|
1999-08-03 23:16:48 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
PRBool
|
1999-12-18 20:29:29 +00:00
|
|
|
LocationImpl::AddProperty(JSContext *aContext, JSObject *aObj, jsval aID, jsval *aVp)
|
1999-08-03 23:16:48 +00:00
|
|
|
{
|
|
|
|
return JS_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
PRBool
|
1999-12-18 20:29:29 +00:00
|
|
|
LocationImpl::DeleteProperty(JSContext *aContext, JSObject *aObj, jsval aID, jsval *aVp)
|
1999-08-03 23:16:48 +00:00
|
|
|
{
|
|
|
|
return JS_TRUE;
|
|
|
|
}
|
|
|
|
|
2000-02-11 04:18:39 +00:00
|
|
|
static nsresult
|
|
|
|
CheckHrefAccess(JSContext *aContext, JSObject *aObj, PRBool isWrite)
|
|
|
|
{
|
|
|
|
nsresult rv;
|
|
|
|
NS_WITH_SERVICE(nsIScriptSecurityManager, secMan,
|
|
|
|
NS_SCRIPTSECURITYMANAGER_PROGID, &rv);
|
|
|
|
if (NS_FAILED(rv))
|
|
|
|
rv = NS_ERROR_DOM_SECMAN_ERR;
|
|
|
|
else
|
|
|
|
rv = secMan->CheckScriptAccess(aContext, aObj, NS_DOM_PROP_LOCATION_HREF,
|
|
|
|
isWrite);
|
2000-02-19 00:47:21 +00:00
|
|
|
if (NS_FAILED(rv)) {
|
|
|
|
nsJSUtils::nsReportError(aContext, aObj, rv);
|
|
|
|
return rv;
|
|
|
|
}
|
2000-02-11 04:18:39 +00:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
1999-08-03 23:16:48 +00:00
|
|
|
PRBool
|
1999-12-18 20:29:29 +00:00
|
|
|
LocationImpl::GetProperty(JSContext *aContext, JSObject *aObj, jsval aID, jsval *aVp)
|
1999-08-03 23:16:48 +00:00
|
|
|
{
|
|
|
|
PRBool result = PR_TRUE;
|
|
|
|
|
|
|
|
if (JSVAL_IS_STRING(aID)) {
|
|
|
|
char* cString = JS_GetStringBytes(JS_ValueToString(aContext, aID));
|
|
|
|
if (PL_strcmp("href", cString) == 0) {
|
|
|
|
nsAutoString href;
|
|
|
|
|
2000-02-11 04:18:39 +00:00
|
|
|
if (NS_SUCCEEDED(CheckHrefAccess(aContext, aObj, PR_FALSE)) &&
|
|
|
|
NS_SUCCEEDED(GetHref(href)))
|
|
|
|
{
|
1999-08-03 23:16:48 +00:00
|
|
|
const PRUnichar* bytes = href.GetUnicode();
|
|
|
|
JSString* str = JS_NewUCStringCopyZ(aContext, (const jschar*)bytes);
|
|
|
|
if (str) {
|
|
|
|
*aVp = STRING_TO_JSVAL(str);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
result = PR_FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
result = PR_FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
PRBool
|
1999-12-18 20:29:29 +00:00
|
|
|
LocationImpl::SetProperty(JSContext *aContext, JSObject *aObj, jsval aID, jsval *aVp)
|
1999-08-03 23:16:48 +00:00
|
|
|
{
|
|
|
|
nsresult result = NS_OK;
|
|
|
|
|
|
|
|
if (JSVAL_IS_STRING(aID)) {
|
|
|
|
char* cString = JS_GetStringBytes(JS_ValueToString(aContext, aID));
|
|
|
|
|
|
|
|
if (PL_strcmp("href", cString) == 0) {
|
|
|
|
nsIURI* base;
|
|
|
|
nsAutoString href;
|
|
|
|
|
2000-02-11 04:18:39 +00:00
|
|
|
if (NS_FAILED(CheckHrefAccess(aContext, aObj, PR_TRUE)))
|
|
|
|
return PR_FALSE;
|
|
|
|
|
1999-08-03 23:16:48 +00:00
|
|
|
// Get the parameter passed in
|
|
|
|
nsJSUtils::nsConvertJSValToString(href, aContext, *aVp);
|
|
|
|
|
|
|
|
// Get the source of the caller
|
|
|
|
result = GetSourceURL(aContext, &base);
|
|
|
|
|
|
|
|
if (NS_SUCCEEDED(result)) {
|
2000-08-07 07:35:25 +00:00
|
|
|
result = SetHrefWithBase(href, base, PR_FALSE);
|
1999-08-03 23:16:48 +00:00
|
|
|
NS_RELEASE(base);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NS_SUCCEEDED(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
PRBool
|
1999-12-18 20:29:29 +00:00
|
|
|
LocationImpl::EnumerateProperty(JSContext *aContext, JSObject *aObj)
|
1999-08-03 23:16:48 +00:00
|
|
|
{
|
|
|
|
return JS_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
PRBool
|
1999-12-18 20:29:29 +00:00
|
|
|
LocationImpl::Resolve(JSContext *aContext, JSObject *aObj, jsval aID)
|
1999-08-03 23:16:48 +00:00
|
|
|
{
|
|
|
|
return JS_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
PRBool
|
1999-12-18 20:29:29 +00:00
|
|
|
LocationImpl::Convert(JSContext *aContext, JSObject *aObj, jsval aID)
|
1999-08-03 23:16:48 +00:00
|
|
|
{
|
|
|
|
return JS_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
1999-12-18 20:29:29 +00:00
|
|
|
LocationImpl::Finalize(JSContext *aContext, JSObject *aObj)
|
1999-08-03 23:16:48 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|