jst%netscape.com 2001-05-08 16:46:42 +00:00
Родитель e365bb5bdf
Коммит adf1d8320a
237 изменённых файлов: 7005 добавлений и 8737 удалений

Просмотреть файл

@ -148,7 +148,7 @@ NS_IMETHODIMP nsRootAccessible::RemoveAccessibleEventListener(nsIAccessibleEvent
}
nsresult nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent)
NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent)
{
if (mListener) {
nsCOMPtr<nsIDOMEventTarget> t;
@ -185,12 +185,12 @@ nsresult nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent)
return NS_OK;
}
nsresult nsRootAccessible::Focus(nsIDOMEvent* aEvent)
NS_IMETHODIMP nsRootAccessible::Focus(nsIDOMEvent* aEvent)
{
return NS_OK;
}
nsresult nsRootAccessible::Blur(nsIDOMEvent* aEvent)
NS_IMETHODIMP nsRootAccessible::Blur(nsIDOMEvent* aEvent)
{
return NS_OK;
}

Просмотреть файл

@ -51,9 +51,9 @@ class nsRootAccessible : public nsAccessible,
NS_IMETHOD RemoveAccessibleEventListener(nsIAccessibleEventListener *aListener);
// ----- nsIDOMEventListener --------
virtual nsresult HandleEvent(nsIDOMEvent* anEvent);
virtual nsresult Focus(nsIDOMEvent* aEvent);
virtual nsresult Blur(nsIDOMEvent* aEvent);
NS_IMETHOD HandleEvent(nsIDOMEvent* anEvent);
NS_IMETHOD Focus(nsIDOMEvent* aEvent);
NS_IMETHOD Blur(nsIDOMEvent* aEvent);
protected:
virtual nsIFrame* GetFrame();

Просмотреть файл

@ -61,7 +61,7 @@ public:
NS_IMETHOD Action(nsIDOMEvent* aEvent) { return NS_OK; }
NS_IMETHOD Broadcast(nsIDOMEvent* aEvent) { return NS_OK; }
NS_IMETHOD CommandUpdate(nsIDOMEvent* aEvent) { return NS_OK; }
nsresult HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; }
NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; }
nsCOMPtr<nsIAtom> mPopupAtom;
nsCOMPtr<nsIContent> mSelectContent;
@ -90,7 +90,7 @@ public:
NS_IMETHOD GetAccRole(PRUnichar **_retval);
NS_IMETHOD GetAccState(PRUint32 *_retval);
NS_IMETHOD GetAccExtState(PRUint32 *_retval);
// popup listener
NS_IMETHOD Create(nsIDOMEvent* aEvent);
NS_IMETHOD Close(nsIDOMEvent* aEvent);
@ -98,7 +98,7 @@ public:
NS_IMETHOD Action(nsIDOMEvent* aEvent) { return NS_OK; }
NS_IMETHOD Broadcast(nsIDOMEvent* aEvent) { return NS_OK; }
NS_IMETHOD CommandUpdate(nsIDOMEvent* aEvent) { return NS_OK; }
nsresult HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; }
NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; }
// helpers
virtual nsIFrame* GetBoundsFrame();

Просмотреть файл

@ -1,52 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* 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/
*
* 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.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef _nsMutableAccessible_H_
#define _nsMutableAccessible_H_
#include "nsAccessible.h"
#include "nsString.h"
#include "nsIMutableAccessible.h"
class nsMutableAccessible : public nsIMutableAccessible
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIACCESSIBLE
NS_DECL_NSIMUTABLEACCESSIBLE
nsMutableAccessible(nsISupports* aNode);
virtual ~nsMutableAccessible();
private:
nsCOMPtr<nsISupports> mNode;
nsAutoString mName;
nsAutoString mRole;
nsCOMPtr<nsIAtom> mNameAttribute;
PRPackedBool mNameNodeValue;
PRPackedBool mNameStringSet;
PRPackedBool mIsLeaf;
};
#endif

Просмотреть файл

@ -148,7 +148,7 @@ NS_IMETHODIMP nsRootAccessible::RemoveAccessibleEventListener(nsIAccessibleEvent
}
nsresult nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent)
NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent)
{
if (mListener) {
nsCOMPtr<nsIDOMEventTarget> t;
@ -185,12 +185,12 @@ nsresult nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent)
return NS_OK;
}
nsresult nsRootAccessible::Focus(nsIDOMEvent* aEvent)
NS_IMETHODIMP nsRootAccessible::Focus(nsIDOMEvent* aEvent)
{
return NS_OK;
}
nsresult nsRootAccessible::Blur(nsIDOMEvent* aEvent)
NS_IMETHODIMP nsRootAccessible::Blur(nsIDOMEvent* aEvent)
{
return NS_OK;
}

Просмотреть файл

@ -51,9 +51,9 @@ class nsRootAccessible : public nsAccessible,
NS_IMETHOD RemoveAccessibleEventListener(nsIAccessibleEventListener *aListener);
// ----- nsIDOMEventListener --------
virtual nsresult HandleEvent(nsIDOMEvent* anEvent);
virtual nsresult Focus(nsIDOMEvent* aEvent);
virtual nsresult Blur(nsIDOMEvent* aEvent);
NS_IMETHOD HandleEvent(nsIDOMEvent* anEvent);
NS_IMETHOD Focus(nsIDOMEvent* aEvent);
NS_IMETHOD Blur(nsIDOMEvent* aEvent);
protected:
virtual nsIFrame* GetFrame();

Просмотреть файл

@ -61,7 +61,7 @@ public:
NS_IMETHOD Action(nsIDOMEvent* aEvent) { return NS_OK; }
NS_IMETHOD Broadcast(nsIDOMEvent* aEvent) { return NS_OK; }
NS_IMETHOD CommandUpdate(nsIDOMEvent* aEvent) { return NS_OK; }
nsresult HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; }
NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; }
nsCOMPtr<nsIAtom> mPopupAtom;
nsCOMPtr<nsIContent> mSelectContent;
@ -90,7 +90,7 @@ public:
NS_IMETHOD GetAccRole(PRUnichar **_retval);
NS_IMETHOD GetAccState(PRUint32 *_retval);
NS_IMETHOD GetAccExtState(PRUint32 *_retval);
// popup listener
NS_IMETHOD Create(nsIDOMEvent* aEvent);
NS_IMETHOD Close(nsIDOMEvent* aEvent);
@ -98,7 +98,7 @@ public:
NS_IMETHOD Action(nsIDOMEvent* aEvent) { return NS_OK; }
NS_IMETHOD Broadcast(nsIDOMEvent* aEvent) { return NS_OK; }
NS_IMETHOD CommandUpdate(nsIDOMEvent* aEvent) { return NS_OK; }
nsresult HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; }
NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; }
// helpers
virtual nsIFrame* GetBoundsFrame();

Просмотреть файл

@ -75,32 +75,23 @@ MAKEFILES_dom="
dom/Makefile
dom/public/Makefile
dom/public/base/Makefile
dom/public/coreDom/Makefile
dom/public/coreEvents/Makefile
dom/public/css/Makefile
dom/public/events/Makefile
dom/public/range/Makefile
dom/public/html/Makefile
dom/public/xul/Makefile
dom/public/idl/Makefile
dom/public/idl/base/Makefile
dom/public/idl/coreDom/Makefile
dom/public/idl/core/Makefile
dom/public/idl/css/Makefile
dom/public/idl/events/Makefile
dom/public/idl/html/Makefile
dom/public/idl/range/Makefile
dom/public/idl/stylesheets/Makefile
dom/public/idl/views/Makefile
dom/public/idl/xbl/Makefile
dom/public/idl/xul/Makefile
dom/src/Makefile
dom/src/base/Makefile
dom/src/build/Makefile
dom/src/coreDOM/Makefile
dom/src/css/Makefile
dom/src/events/Makefile
dom/src/range/Makefile
dom/src/html/Makefile
dom/src/xul/Makefile
dom/src/jsurl/Makefile
dom/tools/Makefile
"
MAKEFILES_editor="

Просмотреть файл

@ -702,16 +702,20 @@ sub BuildClientDist()
InstallFromManifest(":mozilla:view:public:MANIFEST", "$distdirectory:view:");
#DOM
InstallFromManifest(":mozilla:dom:public:MANIFEST", "$distdirectory:dom:");
InstallFromManifest(":mozilla:dom:public:MANIFEST_IDL", "$distdirectory:idl:");
InstallFromManifest(":mozilla:dom:public:idl:base:MANIFEST_IDL", "$distdirectory:idl:");
InstallFromManifest(":mozilla:dom:public:idl:core:MANIFEST_IDL", "$distdirectory:idl:");
InstallFromManifest(":mozilla:dom:public:idl:css:MANIFEST_IDL", "$distdirectory:idl:");
InstallFromManifest(":mozilla:dom:public:idl:events:MANIFEST_IDL", "$distdirectory:idl:");
InstallFromManifest(":mozilla:dom:public:idl:html:MANIFEST_IDL", "$distdirectory:idl:");
InstallFromManifest(":mozilla:dom:public:idl:range:MANIFEST_IDL", "$distdirectory:idl:");
InstallFromManifest(":mozilla:dom:public:idl:stylesheets:MANIFEST_IDL", "$distdirectory:idl:");
InstallFromManifest(":mozilla:dom:public:idl:views:MANIFEST_IDL", "$distdirectory:idl:");
InstallFromManifest(":mozilla:dom:public:idl:xbl:MANIFEST_IDL", "$distdirectory:idl:");
InstallFromManifest(":mozilla:dom:public:idl:xul:MANIFEST_IDL", "$distdirectory:idl:");
InstallFromManifest(":mozilla:dom:public:MANIFEST", "$distdirectory:dom:");
InstallFromManifest(":mozilla:dom:public:base:MANIFEST", "$distdirectory:dom:");
InstallFromManifest(":mozilla:dom:public:coreDom:MANIFEST", "$distdirectory:dom:");
InstallFromManifest(":mozilla:dom:public:coreEvents:MANIFEST", "$distdirectory:dom:");
InstallFromManifest(":mozilla:dom:public:events:MANIFEST", "$distdirectory:dom:");
InstallFromManifest(":mozilla:dom:public:range:MANIFEST", "$distdirectory:dom:");
InstallFromManifest(":mozilla:dom:public:html:MANIFEST", "$distdirectory:dom:");
InstallFromManifest(":mozilla:dom:public:css:MANIFEST", "$distdirectory:dom:");
InstallFromManifest(":mozilla:dom:public:xul:MANIFEST", "$distdirectory:dom:");
InstallFromManifest(":mozilla:dom:src:jsurl:MANIFEST", "$distdirectory:dom:");
InstallFromManifest(":mozilla:dom:src:base:MANIFEST", "$distdirectory:dom:");
@ -1051,6 +1055,16 @@ sub BuildIDLProjects()
BuildIDLProject(":mozilla:modules:oji:macbuild:ojiIDL.mcp", "oji");
BuildIDLProject(":mozilla:js:macbuild:XPConnectIDL.mcp", "xpconnect");
BuildIDLProject(":mozilla:dom:macbuild:domIDL.mcp", "dom");
BuildIDLProject(":mozilla:dom:macbuild:dom_baseIDL.mcp", "dom_base");
BuildIDLProject(":mozilla:dom:macbuild:dom_coreIDL.mcp", "dom_core");
BuildIDLProject(":mozilla:dom:macbuild:dom_cssIDL.mcp", "dom_css");
BuildIDLProject(":mozilla:dom:macbuild:dom_eventsIDL.mcp", "dom_events");
BuildIDLProject(":mozilla:dom:macbuild:dom_htmlIDL.mcp", "dom_html");
BuildIDLProject(":mozilla:dom:macbuild:dom_rangeIDL.mcp", "dom_range");
BuildIDLProject(":mozilla:dom:macbuild:dom_stylesheetsIDL.mcp", "dom_stylesheets");
BuildIDLProject(":mozilla:dom:macbuild:dom_viewsIDL.mcp", "dom_views");
BuildIDLProject(":mozilla:dom:macbuild:dom_xblIDL.mcp", "dom_xbl");
BuildIDLProject(":mozilla:dom:macbuild:dom_xulIDL.mcp", "dom_xul");
BuildIDLProject(":mozilla:dom:src:jsurl:macbuild:JSUrlDL.mcp", "jsurl");
@ -1538,7 +1552,7 @@ sub BuildLayoutProjects()
BuildOneProject(":mozilla:htmlparser:macbuild:htmlparser.mcp", "htmlparser$D.shlb", 1, $main::ALIAS_SYM_FILES, 1);
# BuildOneProject(":mozilla:gfx:macbuild:gfx.mcp", "gfx$D.shlb", 1, $main::ALIAS_SYM_FILES, 0);
BuildOneProjectWithOutput(":mozilla:gfx:macbuild:gfx.mcp", "gfx$C$D.shlb", "gfx$D.shlb", 1, $main::ALIAS_SYM_FILES, 0);
BuildOneProject(":mozilla:dom:macbuild:dom.mcp", "dom$D.shlb", 1, $main::ALIAS_SYM_FILES, 0);
BuildOneProject(":mozilla:dom:macbuild:dom.mcp", "dom$D.shlb", 1, $main::ALIAS_SYM_FILES, 1);
BuildOneProject(":mozilla:modules:plugin:macbuild:plugin.mcp", "plugin$D.shlb", 1, $main::ALIAS_SYM_FILES, 1);
# Static library shared between different content- and layout-related libraries

Просмотреть файл

@ -17,106 +17,74 @@
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Contributor(s):
* Norris Boyd
* Mitch Stoltz
*/
#include "nsISupports.idl"
#include "nsIPrincipal.idl"
%{C++
#include "jspubtd.h"
%}
[ptr] native JSContextPtr(JSContext);
#include "nsIXPCSecurityManager.idl"
interface nsIURI;
[scriptable, uuid(58df5780-8006-11d2-bd91-00805f8ae3f4)]
interface nsIScriptSecurityManager : nsISupports
interface nsIScriptSecurityManager : nsIXPCSecurityManager
{
///////////////// Principals ///////////////////////
/**
* Return the principal of the innermost frame of the currently
* executing script. Will return null if there is no script
* currently executing.
*/
nsIPrincipal getSubjectPrincipal();
/**
* Return the all-powerful system principal.
*/
nsIPrincipal getSystemPrincipal();
/**
* Return a principal that can be QI'd to nsICodebasePrincipal and
* has the same origin as aURI.
*/
nsIPrincipal getCodebasePrincipal(in nsIURI aURI);
/**
* Return a principal that can be QI'd to nsICertificatePrincipal.
*/
nsIPrincipal getCertificatePrincipal(in string CertID);
///////////////// Security Checks //////////////////
///////////////// Security Checks //////////////////
/**
* Checks whether the running script is allowed to access aProperty.
*/
[noscript] void checkPropertyAccess(in PRUint32 aAction,
in JSContextPtr aJSContext,
in JSObjectPtr aJSObject,
in nsISupports aObj,
in nsIClassInfo aClassInfo,
in string aClassName,
in string aProperty,
in boolean skipFrame);
/**
* Checks whether the currently executing script can access the given
* property.
* Check that the script currently running in context "cx" can load "uri".
*
* @param cx The current active JavaScript context
* @param obj The object that is being accessed
* @param prop The ordinal of the property being accessed (see nsDOMPropEnums.h)
* @param isWrite True if write access is being attempted
* Will return error code NS_ERROR_DOM_BAD_URI if the load request
* should be denied.
*
* @param cx the JSContext of the script causing the load
* @param uri the URI that is being loaded
*/
[noscript] void checkScriptAccess(in JSContextPtr cx, in voidPtr obj,
in long prop, in boolean isWrite);
/**
* Check that the script with context "cx" can load "uri".
*
* Will return error code NS_ERROR_DOM_BAD_URI if the load request
* should be denied.
*
* @param cx the JSContext of the script causing the load
* @param uri the URI that is being loaded
*/
[noscript] void checkLoadURIFromScript(in JSContextPtr cx, in nsIURI uri);
/**
/**
* Default CheckLoadURI permissions
*/
// Default permissions
const unsigned long STANDARD = 0;
/**
* If the source is mail, disallow the load
*/
// If the source is mail, disallow the load
const unsigned long DISALLOW_FROM_MAIL = 1 << 0;
/**
* Allow the loading of chrome URLs by non-chrome URLs
*/
// Allow the loading of chrome URLs by non-chrome URLs
const unsigned long ALLOW_CHROME = 1 << 1;
/**
* Check that content from "from" can load "uri".
*
* Will return error code NS_ERROR_DOM_BAD_URI if the load request
* should be denied.
*
* @param from the URI causing the load
* @param uri the URI that is being loaded
* @param disallowFromMail if true, return NS_ERROR_DOM_BAD_URI if 'from'
* is a URI associated with mail or news
*/
/**
* Check that content from "from" can load "uri".
*
* Will return error code NS_ERROR_DOM_BAD_URI if the load request
* should be denied.
*
* @param from the URI causing the load
* @param uri the URI that is being loaded
* @param flags the permission set, see above
*/
void checkLoadURI(in nsIURI from, in nsIURI uri,
in unsigned long flags);
in unsigned long flags);
/**
* Same as CheckLoadURI but takes string arguments for ease of use by scripts
*/
/**
* Same as CheckLoadURI but takes string arguments for ease of use
* by scripts
*/
void checkLoadURIStr(in string from, in string uri,
in unsigned long flags);
in unsigned long flags);
/**
* Check that the function 'funObj' is allowed to run on 'targetObj'
@ -131,68 +99,78 @@ interface nsIScriptSecurityManager : nsISupports
[noscript] void checkFunctionAccess(in JSContextPtr cx, in voidPtr funObj,
in voidPtr targetObj);
/**
* Return true if content from the given principal is allowed to
* execute scripts.
*/
[noscript] boolean canExecuteScripts(in JSContextPtr cx, in nsIPrincipal principal);
/**
* Return true if content from the given principal is allowed to
* execute scripts.
*/
[noscript] boolean canExecuteScripts(in JSContextPtr cx,
in nsIPrincipal principal);
///////////////// Capabilities /////////////////////
///////////////// Principals ///////////////////////
/**
* Return the principal of the innermost frame of the currently
* executing script. Will return null if there is no script
* currently executing.
*/
nsIPrincipal getSubjectPrincipal();
/**
* Request that 'capability' can be enabled by scripts or applets running
* with 'principal'. Will prompt user if necessary. Returns
* nsIPrincipal::ENABLE_GRANTED or nsIPrincipal::ENABLE_DENIED based on user's choice.
* Return the all-powerful system principal.
*/
void requestCapability(in nsIPrincipal principal, in string capability, out short result);
/**
* Return true if the currently executing script has 'capability' enabled.
*/
boolean IsCapabilityEnabled(in string capability);
/**
* Enable 'capability' in the innermost frame of the currently executing
* script.
*/
void enableCapability(in string capability);
nsIPrincipal getSystemPrincipal();
/**
* Remove 'capability' from the innermost frame of the currently executing
* script. Any setting of 'capability' from enclosing frames thus comes into
* effect.
*/
/**
* Return a principal that can be QI'd to nsICertificatePrincipal.
*/
nsIPrincipal getCertificatePrincipal(in string CertID);
/**
* Return a principal that can be QI'd to nsICodebasePrincipal and
* has the same origin as aURI.
*/
nsIPrincipal getCodebasePrincipal(in nsIURI aURI);
///////////////// Capabilities API /////////////////////
/**
* Request that 'capability' can be enabled by scripts or applets
* running with 'principal'. Will prompt user if
* necessary. Returns nsIPrincipal::ENABLE_GRANTED or
* nsIPrincipal::ENABLE_DENIED based on user's choice.
*/
void requestCapability(in nsIPrincipal principal, in string capability,
out short result);
/**
* Return true if the currently executing script has 'capability' enabled.
*/
boolean IsCapabilityEnabled(in string capability);
/**
* Enable 'capability' in the innermost frame of the currently executing
* script.
*/
void enableCapability(in string capability);
/**
* Remove 'capability' from the innermost frame of the currently
* executing script. Any setting of 'capability' from enclosing
* frames thus comes into effect.
*/
void revertCapability(in string capability);
/**
* Disable 'capability' in the innermost frame of the currently executing
* script.
*/
/**
* Disable 'capability' in the innermost frame of the currently executing
* script.
*/
void disableCapability(in string capability);
//////////////// Master Certificate Functions ////////////////////
/**
* Allow 'certificateID' to enable 'capability.' Can only be performed
* by code signed by the system certificate.
*/
void setCanEnableCapability(in string certificateID, in string capability,
in short canEnable);
//////////////// Temporary ///////////////////////////////////////
/**
* Checks whether the currently executing script can load the given URL
* (special case for XMLHttpRequest)
*
* @param cx The current active JavaScript context
* @param url The url that is being accessed
* @param prop The ordinal of the property being accessed (see nsDOMPropEnums.h)
* @param isWrite True if write access is being attempted
* Allow 'certificateID' to enable 'capability.' Can only be performed
* by code signed by the system certificate.
*/
[noscript] void checkScriptAccessToURL(in JSContextPtr cx, in string url,
in long prop, in boolean isWrite);
void setCanEnableCapability(in string certificateID, in string capability,
in short canEnable);
};
%{C++

Просмотреть файл

@ -32,14 +32,15 @@
#include "jsdbgapi.h"
#include "nsIXPCSecurityManager.h"
#include "nsHashtable.h"
#include "nsDOMPropEnums.h"
#include "nsCOMPtr.h"
#include "nsIPref.h"
#include "nsIPrefService.h"
#include "nsISecurityPref.h"
#include "nsIJSContextStack.h"
#include "nsIObserver.h"
class nsIDocShell;
class nsString;
class nsIClassInfo;
/////////////////////
// nsIPrincipalKey //
@ -62,9 +63,9 @@ public:
return hash;
}
PRBool Equals(const nsHashKey *aKey) const {
PRBool Equals(const nsHashKey* aKey) const {
PRBool eq;
mKey->Equals(((nsIPrincipalKey *) aKey)->mKey, &eq);
mKey->Equals(((nsIPrincipalKey*) aKey)->mKey, &eq);
return eq;
}
@ -80,8 +81,7 @@ protected:
{ 0x7ee2a4c0, 0x4b93, 0x17d3, \
{ 0xba, 0x18, 0x00, 0x60, 0xb0, 0xf1, 0x99, 0xa2 }}
class nsScriptSecurityManager : public nsIScriptSecurityManager,
public nsIXPCSecurityManager
class nsScriptSecurityManager : public nsIScriptSecurityManager, public nsIObserver
{
public:
nsScriptSecurityManager();
@ -92,100 +92,116 @@ public:
NS_DECL_ISUPPORTS
NS_DECL_NSISCRIPTSECURITYMANAGER
NS_DECL_NSIXPCSECURITYMANAGER
NS_DECL_NSIOBSERVER
static nsScriptSecurityManager *
static nsScriptSecurityManager*
GetScriptSecurityManager();
JSContext * GetCurrentContextQuick();
JSContext* GetCurrentContextQuick();
private:
static PRBool IsDOMClass(nsIClassInfo* aClassInfo);
static nsresult
ReportErrorToConsole(nsIURI* aTarget);
nsresult
GetRootDocShell(JSContext *cx, nsIDocShell **result);
nsresult
GetRootDocShell(JSContext* cx, nsIDocShell **result);
NS_IMETHOD
CheckScriptAccessInternal(JSContext *cx,
void* obj, const char* aObjUrlStr, PRInt32 domPropInt,
PRBool isWrite);
nsresult
CheckPropertyAccessImpl(PRUint32 aAction, nsIXPCNativeCallContext* aCallContext,
JSContext* aJSContext, JSObject* aJSObject,
nsISupports* aObj, nsIClassInfo* aClassInfo,
jsval aName, const char* aClassName,
const char* aProperty, PRBool skipFrame, void** aPolicy);
NS_IMETHOD
CreateCodebasePrincipal(nsIURI* aURI, nsIPrincipal** result);
NS_IMETHOD
GetSubjectPrincipal(JSContext *aCx, nsIPrincipal **result);
NS_IMETHOD
GetObjectPrincipal(JSContext *aCx, JSObject *aObj, nsIPrincipal **result);
NS_IMETHOD
CheckPermissions(JSContext *aCx, nsIPrincipal* aObjectPrincipal, const char *aCapability);
nsresult
CheckSameOrigin(JSContext* aCx, nsIPrincipal* aSubject,
nsIPrincipal* aObject, PRUint32 aAction, PRBool aSkipFrame);
PRInt32
GetSecurityLevel(nsIPrincipal *principal, nsDOMProp domProp,
PRBool isWrite, nsCString &capability);
GetSecurityLevel(JSContext* aCx, nsIPrincipal *principal,
nsIClassInfo* aClassInfo,
const char* aClassName, const char* aProperty,
PRUint32 aAction, nsCString &capability, void** aPolicy);
NS_IMETHOD
GetPrefName(nsIPrincipal *principal, nsDOMProp domProp,
nsCString &result);
nsresult
GetPrefName(nsIPrincipal* principal,
const char* aClassName, const char* aPropertyName,
void* aClassPolicy, nsCString &result);
nsresult
CheckXPCCapability(JSContext *aJSContext, const char *aCapability);
NS_IMETHOD
CheckXPCPermissions(JSContext *cx, nsISupports* aObj);
nsresult
CreateCodebasePrincipal(nsIURI* aURI, nsIPrincipal** result);
NS_IMETHOD
GetFramePrincipal(JSContext *cx, JSStackFrame *fp, nsIPrincipal **result);
nsresult
GetSubjectPrincipal(JSContext* aCx, nsIPrincipal** result);
nsresult
GetObjectPrincipal(JSContext* aCx, JSObject* aObj, nsIPrincipal** result);
nsresult
GetFramePrincipal(JSContext* cx, JSStackFrame* fp, nsIPrincipal** result);
NS_IMETHOD
GetScriptPrincipal(JSContext *cx, JSScript *script, nsIPrincipal **result);
nsresult
GetScriptPrincipal(JSContext* cx, JSScript* script, nsIPrincipal** result);
NS_IMETHOD
GetFunctionObjectPrincipal(JSContext *cx, JSObject *obj,
nsIPrincipal **result);
nsresult
GetCallingPrincipal(JSContext* cx, nsIPrincipal** result);
NS_IMETHOD
GetPrincipalAndFrame(JSContext *cx, nsIPrincipal **result,
JSStackFrame **frameResult);
nsresult
GetFunctionObjectPrincipal(JSContext* cx, JSObject* obj,
nsIPrincipal** result);
NS_IMETHOD
nsresult
GetPrincipalAndFrame(JSContext *cx, PRBool skipInnerFrame,
nsIPrincipal** result,
JSStackFrame** frameResult);
nsresult
SavePrincipal(nsIPrincipal* aToSave);
NS_IMETHOD
InitPrefs();
nsresult IsCapabilityEnabledImpl(const char *capability,
PRBool skipFrame,
PRBool *result);
PRBool
EnsureNameSetRegistered();
nsresult
CheckXPCPermissions(JSContext* cx, nsISupports* aObj,
const char* aObjectSecurityLevel, PRBool skipFrame, const char* aErrorMsg);
nsresult
InitPrefs();
static nsresult
PrincipalPrefNames(const char* pref, char** grantedPref, char** deniedPref);
static void
EnumeratePolicyCallback(const char *prefName, void *data);
nsresult
InitPolicies(PRUint32 prefCount, const char** prefNames);
static void
EnumeratePrincipalsCallback(const char *prefName, void *data);
nsresult
InitPrincipals(PRUint32 prefCount, const char** prefNames);
static int PR_CALLBACK
JSEnabledPrefChanged(const char *pref, void *data);
inline void
JSEnabledPrefChanged();
static int PR_CALLBACK
PrincipalPrefChanged(const char *pref, void *data);
static const char* sJSEnabledPrefName;
static const char* sJSMailEnabledPrefName;
static const char* sPrincipalPrefix;
nsObjectHashtable *mOriginToPolicyMap;
nsCOMPtr<nsIPref> mPrefs;
nsObjectHashtable* mOriginToPolicyMap;
nsHashtable* mClassPolicies;
nsCOMPtr<nsIPrefService> mPrefService;
nsCOMPtr<nsIPrefBranch> mPrefs;
nsCOMPtr<nsISecurityPref> mSecurityPrefs;
nsIPrincipal *mSystemPrincipal;
nsIPrincipal* mSystemPrincipal;
nsCOMPtr<nsIPrincipal> mSystemCertificate;
nsSupportsHashtable *mPrincipals;
nsSupportsHashtable* mPrincipals;
PRBool mIsJavaScriptEnabled;
PRBool mIsMailJavaScriptEnabled;
PRBool mIsWritingPrefs;
unsigned char hasDomainPolicyVector[(NS_DOM_PROP_MAX >> 3) + 1];
nsCOMPtr<nsIJSContextStack> mThreadJSContextStack;
PRBool mNameSetRegistered;
};
#endif /*_NS_SCRIPT_SECURITY_MANAGER_H_*/

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -28,8 +28,295 @@
#include "nsScriptSecurityManager.h"
#include "nsIPrincipal.h"
#include "nsCodebasePrincipal.h"
#include "nsIScriptNameSpaceManager.h"
#include "nsIScriptExternalNameSet.h"
#include "nsIScriptContext.h"
#include "nsICategoryManager.h"
#include "nsXPIDLString.h"
#include "nsCOMPtr.h"
///////////////////////
// nsSecurityNameSet //
///////////////////////
#define NS_SECURITYNAMESET_CID \
{ 0x7c02eadc, 0x76, 0x4d03, \
{ 0x99, 0x8d, 0x80, 0xd7, 0x79, 0xc4, 0x85, 0x89 } }
#define NS_SECURITYNAMESET_CONTRACTID "@mozilla.org/security/script/nameset;1"
class nsSecurityNameSet : public nsIScriptExternalNameSet
{
public:
nsSecurityNameSet();
virtual ~nsSecurityNameSet();
NS_DECL_ISUPPORTS
NS_IMETHOD InitializeNameSet(nsIScriptContext* aScriptContext);
};
nsSecurityNameSet::nsSecurityNameSet()
{
NS_INIT_REFCNT();
}
nsSecurityNameSet::~nsSecurityNameSet()
{
}
NS_IMPL_ISUPPORTS(nsSecurityNameSet, NS_GET_IID(nsIScriptExternalNameSet));
static char *
getStringArgument(JSContext *cx, JSObject *obj, PRUint16 argNum, uintN argc, jsval *argv)
{
if (argc <= argNum || !JSVAL_IS_STRING(argv[argNum])) {
JS_ReportError(cx, "String argument expected");
return nsnull;
}
/*
* We don't want to use JS_ValueToString because we want to be able
* to have an object to represent a target in subsequent versions.
*/
JSString *str = JSVAL_TO_STRING(argv[argNum]);
if (!str)
return nsnull;
return JS_GetStringBytes(str);
}
PR_STATIC_CALLBACK(JSBool)
netscape_security_isPrivilegeEnabled(JSContext *cx, JSObject *obj, uintN argc,
jsval *argv, jsval *rval)
{
JSBool result = JS_FALSE;
char *cap = getStringArgument(cx, obj, 0, argc, argv);
if (cap) {
nsresult rv;
NS_WITH_SERVICE(nsIScriptSecurityManager, securityManager,
NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
if (NS_SUCCEEDED(rv)) {
// NS_ASSERTION(cx == GetCurrentContext(), "unexpected context");
rv = securityManager->IsCapabilityEnabled(cap, &result);
if (NS_FAILED(rv))
result = JS_FALSE;
}
}
*rval = BOOLEAN_TO_JSVAL(result);
return JS_TRUE;
}
PR_STATIC_CALLBACK(JSBool)
netscape_security_enablePrivilege(JSContext *cx, JSObject *obj, uintN argc,
jsval *argv, jsval *rval)
{
char *cap = getStringArgument(cx, obj, 0, argc, argv);
if (!cap)
return JS_FALSE;
nsresult rv;
NS_WITH_SERVICE(nsIScriptSecurityManager, securityManager,
NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
if (NS_FAILED(rv))
return JS_FALSE;
// NS_ASSERTION(cx == GetCurrentContext(), "unexpected context");
if (NS_FAILED(securityManager->EnableCapability(cap)))
return JS_FALSE;
return JS_TRUE;
}
PR_STATIC_CALLBACK(JSBool)
netscape_security_disablePrivilege(JSContext *cx, JSObject *obj, uintN argc,
jsval *argv, jsval *rval)
{
char *cap = getStringArgument(cx, obj, 0, argc, argv);
if (!cap)
return JS_FALSE;
nsresult rv;
NS_WITH_SERVICE(nsIScriptSecurityManager, securityManager,
NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
if (NS_FAILED(rv))
return JS_FALSE;
// NS_ASSERTION(cx == GetCurrentContext(), "unexpected context");
if (NS_FAILED(securityManager->DisableCapability(cap)))
return JS_FALSE;
return JS_TRUE;
}
PR_STATIC_CALLBACK(JSBool)
netscape_security_revertPrivilege(JSContext *cx, JSObject *obj, uintN argc,
jsval *argv, jsval *rval)
{
char *cap = getStringArgument(cx, obj, 0, argc, argv);
if (!cap)
return JS_FALSE;
nsresult rv;
NS_WITH_SERVICE(nsIScriptSecurityManager, securityManager,
NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
if (NS_FAILED(rv))
return JS_FALSE;
// NS_ASSERTION(cx == GetCurrentContext(), "unexpected context");
if (NS_FAILED(securityManager->RevertCapability(cap)))
return JS_FALSE;
return JS_TRUE;
}
PR_STATIC_CALLBACK(JSBool)
netscape_security_setCanEnablePrivilege(JSContext *cx, JSObject *obj, uintN argc,
jsval *argv, jsval *rval)
{
if (argc < 2) return JS_FALSE;
char *principalID = getStringArgument(cx, obj, 0, argc, argv);
char *cap = getStringArgument(cx, obj, 1, argc, argv);
if (!principalID || !cap)
return JS_FALSE;
nsresult rv;
NS_WITH_SERVICE(nsIScriptSecurityManager, securityManager,
NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
if (NS_FAILED(rv))
return JS_FALSE;
// NS_ASSERTION(cx == GetCurrentContext(), "unexpected context");
if (NS_FAILED(securityManager->SetCanEnableCapability(principalID, cap,
nsIPrincipal::ENABLE_GRANTED)))
return JS_FALSE;
return JS_TRUE;
}
PR_STATIC_CALLBACK(JSBool)
netscape_security_invalidate(JSContext *cx, JSObject *obj, uintN argc,
jsval *argv, jsval *rval)
{
char *principalID = getStringArgument(cx, obj, 0, argc, argv);
if (!principalID)
return JS_FALSE;
nsresult rv;
NS_WITH_SERVICE(nsIScriptSecurityManager, securityManager,
NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
if (NS_FAILED(rv))
return JS_FALSE;
// NS_ASSERTION(cx == GetCurrentContext(), "unexpected context");
if (NS_FAILED(securityManager->SetCanEnableCapability(principalID,
nsBasePrincipal::Invalid,
nsIPrincipal::ENABLE_GRANTED)))
return JS_FALSE;
return JS_TRUE;
}
static JSFunctionSpec PrivilegeManager_static_methods[] = {
{ "isPrivilegeEnabled", netscape_security_isPrivilegeEnabled, 1},
{ "enablePrivilege", netscape_security_enablePrivilege, 1},
{ "disablePrivilege", netscape_security_disablePrivilege, 1},
{ "revertPrivilege", netscape_security_revertPrivilege, 1},
//-- System Cert Functions
{ "setCanEnablePrivilege", netscape_security_setCanEnablePrivilege, 2},
{ "invalidate", netscape_security_invalidate, 1},
{0}
};
/*
* "Steal" calls to netscape.security.PrivilegeManager.enablePrivilege,
* et. al. so that code that worked with 4.0 can still work.
*/
NS_IMETHODIMP
nsSecurityNameSet::InitializeNameSet(nsIScriptContext* aScriptContext)
{
JSContext *cx = (JSContext *) aScriptContext->GetNativeContext();
JSObject *global = JS_GetGlobalObject(cx);
/*
* Find Object.prototype's class by walking up the global object's
* prototype chain.
*/
JSObject *obj = global;
JSObject *proto;
while ((proto = JS_GetPrototype(cx, obj)) != nsnull)
obj = proto;
JSClass *objectClass = JS_GetClass(cx, obj);
jsval v;
if (!JS_GetProperty(cx, global, "netscape", &v))
return NS_ERROR_FAILURE;
JSObject *securityObj;
if (JSVAL_IS_OBJECT(v)) {
/*
* "netscape" property of window object exists; must be LiveConnect
* package. Get the "security" property.
*/
obj = JSVAL_TO_OBJECT(v);
if (!JS_GetProperty(cx, obj, "security", &v) || !JSVAL_IS_OBJECT(v))
return NS_ERROR_FAILURE;
securityObj = JSVAL_TO_OBJECT(v);
} else {
/* define netscape.security object */
obj = JS_DefineObject(cx, global, "netscape", objectClass, nsnull, 0);
if (obj == nsnull)
return NS_ERROR_FAILURE;
securityObj = JS_DefineObject(cx, obj, "security", objectClass,
nsnull, 0);
if (securityObj == nsnull)
return NS_ERROR_FAILURE;
}
/* Define PrivilegeManager object with the necessary "static" methods. */
obj = JS_DefineObject(cx, securityObj, "PrivilegeManager", objectClass,
nsnull, 0);
if (obj == nsnull)
return NS_ERROR_FAILURE;
return JS_DefineFunctions(cx, obj, PrivilegeManager_static_methods)
? NS_OK
: NS_ERROR_FAILURE;
}
NS_GENERIC_FACTORY_CONSTRUCTOR(nsCodebasePrincipal)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSecurityNameSet)
static NS_IMETHODIMP
Construct_nsIScriptSecurityManager(nsISupports *aOuter, REFNSIID aIID,
@ -48,18 +335,50 @@ Construct_nsIScriptSecurityManager(nsISupports *aOuter, REFNSIID aIID,
return NS_OK;
}
static NS_METHOD
RegisterSecurityNameSet(nsIComponentManager *aCompMgr,
nsIFile *aPath,
const char *registryLocation,
const char *componentType,
const nsModuleComponentInfo *info)
{
nsresult rv = NS_OK;
nsCOMPtr<nsICategoryManager> catman =
do_GetService(NS_CATEGORYMANAGER_CONTRACTID, &rv);
if (NS_FAILED(rv))
return rv;
nsXPIDLCString previous;
rv = catman->AddCategoryEntry(JAVASCRIPT_GLOBAL_STATIC_NAMESET_CATEGORY,
"PrivilegeManager",
NS_SECURITYNAMESET_CONTRACTID,
PR_TRUE, PR_TRUE, getter_Copies(previous));
NS_ENSURE_SUCCESS(rv, rv);
return rv;
}
static nsModuleComponentInfo components[] =
{
{ NS_SCRIPTSECURITYMANAGER_CLASSNAME,
NS_SCRIPTSECURITYMANAGER_CID,
NS_SCRIPTSECURITYMANAGER_CONTRACTID,
Construct_nsIScriptSecurityManager
Construct_nsIScriptSecurityManager,
RegisterSecurityNameSet
},
{ NS_CODEBASEPRINCIPAL_CLASSNAME,
NS_CODEBASEPRINCIPAL_CID,
NS_CODEBASEPRINCIPAL_CONTRACTID,
nsCodebasePrincipalConstructor
},
{ "Security Script Name Set",
NS_SECURITYNAMESET_CID,
NS_SECURITYNAMESET_CONTRACTID,
nsSecurityNameSetConstructor
}
};

Просмотреть файл

@ -2,6 +2,7 @@
# This is a list of local files which get copied to the mozilla:dist:content directory
#
nsContentPolicyUtils.h
nsContentUtils.h
nsIAnonymousContent.h
nsIContent.h
nsIContentIterator.h
@ -25,4 +26,3 @@ nsIStyleRuleSupplier.h
nsIStyleSheet.h
nsIStyleSheetLinkingElement.h
nsITextContent.h

Просмотреть файл

@ -32,7 +32,7 @@
* file under either the NPL or the GPL.
*/
/* A namespace class for static layout utilities. */
/* A namespace class for static content utilities. */
#ifndef nsContentUtils_h___
#define nsContentUtils_h___
@ -40,13 +40,24 @@
#include "nslayout.h"
#include "jspubtd.h"
#include "nsAReadableString.h"
#include "nsIDOMScriptObjectFactory.h"
class nsIScriptContext;
class nsIScriptGlobalObject;
class nsIXPConnect;
class nsIContent;
class nsIDocument;
class nsContentUtils
{
public:
static nsresult Init();
static nsresult ReparentContentWrapper(nsIContent *aContent,
nsIContent *aNewParent,
nsIDocument *aNewDocument,
nsIDocument *aOldDocument);
// These are copied from nsJSUtils.h
@ -70,6 +81,51 @@ public:
PRUint32 aLength);
static PRUint32 CopyNewlineNormalizedUnicodeTo(nsReadingIterator<PRUnichar>& aSrcStart, const nsReadingIterator<PRUnichar>& aSrcEnd, nsAWritableString& aDest);
static nsISupports *
GetClassInfoInstance(nsDOMClassInfoID aID, GetDOMClassIIDsFnc aGetIIDsFptr,
const char *aName);
static void Shutdown();
private:
static nsresult doReparentContentWrapper(nsIContent *aChild,
nsIDocument *aNewDocument,
nsIDocument *aOldDocument,
JSContext *cx,
JSObject *parent_obj);
static nsIDOMScriptObjectFactory *sDOMScriptObjectFactory;
static nsIXPConnect *sXPConnect;
};
#define NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(_class) \
if (aIID.Equals(NS_GET_IID(nsIClassInfo))) { \
foundInterface = \
nsContentUtils::GetClassInfoInstance(eDOMClassInfo_##_class##_id, \
Get##_class##IIDs, \
#_class); \
NS_ENSURE_TRUE(foundInterface, NS_ERROR_OUT_OF_MEMORY); \
\
*aInstancePtr = foundInterface; \
\
return NS_OK; \
} else
#define NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO_WITH_NAME(_class, _name) \
if (aIID.Equals(NS_GET_IID(nsIClassInfo))) { \
foundInterface = \
nsContentUtils::GetClassInfoInstance(eDOMClassInfo_##_class##_id, \
Get##_class##IIDs, \
#_name); \
NS_ENSURE_TRUE(foundInterface, NS_ERROR_OUT_OF_MEMORY); \
\
*aInstancePtr = foundInterface; \
\
return NS_OK; \
} else
#endif /* nsContentUtils_h___ */

Просмотреть файл

@ -49,7 +49,7 @@ class nsINodeInfo;
// is supported by all content objects.
class nsIContent : public nsISupports {
public:
static const nsIID& GetIID() { static nsIID iid = NS_ICONTENT_IID; return iid; }
NS_DEFINE_STATIC_IID_ACCESSOR(NS_ICONTENT_IID)
NS_IMETHOD GetDocument(nsIDocument*& aResult) const = 0;
@ -295,6 +295,22 @@ public:
*/
NS_IMETHOD SetBindingParent(nsIContent* aContent) = 0;
NS_IMETHOD GetBindingParent(nsIContent** aContent) = 0;
/**
* Bit-flags to pass (or'ed together) to IsContentOfType()
*/
enum {
eTEXT = 0x00000001,
eELEMENT = 0x00000002,
eHTML = 0x00000004,
eHTML_FORM_CONTROL = 0x00000008
};
/**
* API for doing a quick check if a content object is of a given
* type, such as HTML, XUL, Text, ...
*/
NS_IMETHOD_(PRBool) IsContentOfType(PRUint32 aFlags) = 0;
};
// nsresult codes for GetAttribute

Просмотреть файл

@ -21,7 +21,9 @@
#include "nsISupports.idl"
#include "nsIURL.idl"
#include "domstubs.idl"
interface nsIDOMElement;
/**
* Interface for content policy mechanism. Implementations of this

Просмотреть файл

@ -61,6 +61,7 @@ class nsIDOMDocumentType;
class nsIBindingManager;
class nsIObserver;
class nsISupportsArray;
class nsString;
// IID for the nsIDocument interface
#define NS_IDOCUMENT_IID \
@ -78,7 +79,7 @@ class nsISupportsArray;
// Document interface
class nsIDocument : public nsISupports {
public:
static const nsIID& GetIID() { static nsIID iid = NS_IDOCUMENT_IID; return iid; }
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IDOCUMENT_IID)
// All documents have a memory arena associated with them which is
// used for memory allocation during document creation. This call
@ -312,12 +313,6 @@ public:
NS_IMETHOD StyleRuleRemoved(nsIStyleSheet* aStyleSheet,
nsIStyleRule* aStyleRule) = 0;
/**
* Finds text in content
*/
NS_IMETHOD FindNext(const nsAReadableString &aSearchStr, PRBool aMatchCase, PRBool aSearchDown, PRBool &aIsFound) = 0;
NS_IMETHOD HandleDOMEvent(nsIPresContext* aPresContext,
nsEvent* aEvent,
nsIDOMEvent** aDOMEvent,
@ -335,6 +330,9 @@ public:
NS_IMETHOD GetNodeInfoManager(nsINodeInfoManager*& aNodeInfoManager) = 0;
NS_IMETHOD Reset(nsIChannel* aChannel, nsILoadGroup* aLoadGroup) = 0;
NS_IMETHOD AddReference(void *aKey, nsISupports *aReference) = 0;
NS_IMETHOD RemoveReference(void *aKey, nsISupports **aOldReference) = 0;
};

Просмотреть файл

@ -47,7 +47,7 @@
class nsIAtom;
class nsINodeInfoManager;
class nsINameSpaceManager;
class nsString;
class nsIDocument;
// IID for the nsINodeInfo interface
@ -191,6 +191,11 @@ public:
* only by prefix from the one this is called on.
*/
NS_IMETHOD PrefixChanged(nsIAtom *aPrefix, nsINodeInfo*& aResult) = 0;
/*
* Retrieve a pointer to the document that owns this node info.
*/
NS_IMETHOD GetDocument(nsIDocument*& aDocument) = 0;
};
@ -203,7 +208,14 @@ public:
* Initialize the nodeinfo manager with a namespace manager, this should
* allways be done.
*/
NS_IMETHOD Init(nsINameSpaceManager *aNameSpaceManager) = 0;
NS_IMETHOD Init(nsIDocument *aDocument,
nsINameSpaceManager *aNameSpaceManager) = 0;
/*
* Release the reference to the document, this will be called when
* the document is going away.
*/
NS_IMETHOD DropDocumentReference() = 0;
/*
* Methods for creating nodeinfo's from atoms and/or strings.
@ -227,6 +239,12 @@ public:
* Getter for the namespace manager used by this nodeinfo manager.
*/
NS_IMETHOD GetNamespaceManager(nsINameSpaceManager*& aNameSpaceManager) = 0;
/*
* Retrieve a pointer to the document that owns this node info
* manager.
*/
NS_IMETHOD GetDocument(nsIDocument*& aDocument) = 0;
};
extern nsresult NS_NewNodeInfoManager(nsINodeInfoManager** aResult);

Просмотреть файл

@ -21,14 +21,11 @@
*/
#include "nsISupports.idl"
#include "domstubs.idl"
/* THIS IS A PUBLIC INTERFACE */
%{C++
class nsIDOMNode;
class nsIDOMRange;
%}
interface nsIDOMNode;
interface nsIDOMRange;
/**
* Interface for manipulating and querying the current selected range

Просмотреть файл

@ -23,7 +23,6 @@
#include "nsISupports.idl"
#include "domstubs.idl"
#include "nsISelection.idl"
%{C++
@ -31,9 +30,10 @@
class nsISelection;
typedef short SelectionType;
typedef short SelectionRegion;
class nsIDOMNode;
%}
interface nsIDOMNode;
[scriptable, uuid(D2D1D179-85A7-11d3-9932-00108301233C)]
interface nsISelectionController : nsISupports

Просмотреть файл

@ -21,11 +21,8 @@
*/
#include "nsISupports.idl"
#include "domstubs.idl"
%{C++
class nsIDOMDocument;
%}
interface nsIDOMDocument;
interface nsISelection;
[scriptable, uuid(A6CF90E2-15B3-11d2-932E-00805F8ADD32)]

Просмотреть файл

@ -21,15 +21,12 @@
*/
#include "nsISupports.idl"
#include "domstubs.idl"
#include "nsISelectionListener.idl"
#include "nsIEnumerator.idl"
%{C++
class nsIDOMNode;
class nsIDOMRange;
class nsISelectionListener;
%}
interface nsIDOMRange;
interface nsISelectionListener;
[scriptable, uuid(2d5535e2-1dd2-11b2-8e38-d53ec833adf6)]
interface nsISelectionPrivate : nsISupports

Просмотреть файл

@ -28,15 +28,15 @@ DEFINES = $(DEFINES) -DXP_NEW_SELECTION
!endif
CPPSRCS = \
nsStyleContext.cpp \
nsStyleSet.cpp \
nsStyleContext.cpp \
nsStyleSet.cpp \
nsCommentNode.cpp \
nsGenericElement.cpp \
nsGenericDOMDataNode.cpp \
nsGenericDOMNodeList.cpp \
nsContentList.cpp \
nsContentIterator.cpp \
nsContentPolicy.cpp \
nsContentPolicy.cpp \
nsDocument.cpp \
nsDocumentEncoder.cpp \
nsDocumentFragment.cpp \
@ -57,14 +57,14 @@ CPPSRCS = \
nsHTMLContentSerializer.cpp \
nsParserUtils.cpp \
nsPlainTextSerializer.cpp \
nsContentUtils.cpp \
nsContentUtils.cpp \
$(NULL)
MODULE=raptor
CPP_OBJS= \
.\$(OBJDIR)\nsStyleContext.obj \
.\$(OBJDIR)\nsStyleSet.obj \
.\$(OBJDIR)\nsStyleContext.obj \
.\$(OBJDIR)\nsStyleSet.obj \
.\$(OBJDIR)\nsCommentNode.obj \
.\$(OBJDIR)\nsGenericDOMDataNode.obj \
.\$(OBJDIR)\nsGenericDOMNodeList.obj \
@ -89,9 +89,9 @@ CPP_OBJS= \
.\$(OBJDIR)\nsTextNode.obj \
.\$(OBJDIR)\nsXMLContentSerializer.obj \
.\$(OBJDIR)\nsHTMLContentSerializer.obj \
.\$(OBJDIR)\nsParserUtils.obj \
.\$(OBJDIR)\nsParserUtils.obj \
.\$(OBJDIR)\nsPlainTextSerializer.obj \
.\$(OBJDIR)\nsContentUtils.obj \
.\$(OBJDIR)\nsContentUtils.obj \
$(NULL)
LINCS=-I$(PUBLIC)\xpcom -I$(PUBLIC)\raptor \

Просмотреть файл

@ -21,7 +21,6 @@
*/
#include "nsIDOMComment.h"
#include "nsGenericDOMDataNode.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIContent.h"
#include "nsLayoutAtoms.h"
@ -31,9 +30,12 @@
#include "nsIEnumerator.h"
#include "nsCOMPtr.h"
#include "nsIDOMRange.h"
#include "nsString.h"
#include "nsContentUtils.h"
class nsCommentNode : public nsIDOMComment,
public nsIScriptObjectOwner,
public nsITextContent
{
public:
@ -44,16 +46,13 @@ public:
NS_DECL_ISUPPORTS
// nsIDOMNode
NS_IMPL_IDOMNODE_USING_GENERIC_DOM_DATA(mInner)
NS_IMPL_NSIDOMNODE_USING_GENERIC_DOM_DATA(mInner)
// nsIDOMCharacterData
NS_IMPL_IDOMCHARACTERDATA_USING_GENERIC_DOM_DATA(mInner)
NS_IMPL_NSIDOMCHARACTERDATA_USING_GENERIC_DOM_DATA(mInner)
// nsIDOMComment
// nsIScriptObjectOwner
NS_IMPL_ISCRIPTOBJECTOWNER_USING_GENERIC_DOM_DATA(mInner)
// nsIContent
//NS_IMPL_ICONTENT_USING_GENERIC_DOM_DATA(mInner)
@ -180,6 +179,10 @@ public:
return mInner.SetBindingParent(aParent);
}
NS_IMETHOD_(PRBool) IsContentOfType(PRUint32 aFlags) {
return PR_FALSE;
}
NS_IMETHOD SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const {
if (!aResult) {
return NS_ERROR_NULL_POINTER;
@ -241,28 +244,28 @@ nsCommentNode::~nsCommentNode()
{
}
NS_IMPL_ADDREF(nsCommentNode)
// XPConnect interface list for nsCommentNode
NS_CLASSINFO_MAP_BEGIN(Comment)
NS_CLASSINFO_MAP_ENTRY(nsIDOMComment)
NS_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget)
NS_CLASSINFO_MAP_ENTRY(nsIDOM3Node)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsCommentNode
NS_INTERFACE_MAP_BEGIN(nsCommentNode)
NS_INTERFACE_MAP_ENTRY_DOM_DATA()
NS_INTERFACE_MAP_ENTRY(nsITextContent)
NS_INTERFACE_MAP_ENTRY(nsIDOMComment)
NS_INTERFACE_MAP_ENTRY(nsIDOMCharacterData)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(Comment)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsCommentNode)
NS_IMPL_RELEASE(nsCommentNode)
NS_IMETHODIMP
nsCommentNode::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
NS_IMPL_DOM_DATA_QUERY_INTERFACE(aIID, aInstancePtr, this)
if (aIID.Equals(NS_GET_IID(nsIDOMComment))) {
nsIDOMComment* tmp = this;
*aInstancePtr = (void*) tmp;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsITextContent))) {
nsITextContent* tmp = this;
*aInstancePtr = (void*) tmp;
NS_ADDREF_THIS();
return NS_OK;
}
return NS_NOINTERFACE;
}
NS_IMETHODIMP
nsCommentNode::GetTag(nsIAtom*& aResult) const

Просмотреть файл

@ -23,12 +23,12 @@
#include "nsContentList.h"
#include "nsIContent.h"
#include "nsIDOMNode.h"
#include "nsIScriptGlobalObject.h"
#include "nsIDocument.h"
#include "nsINameSpaceManager.h"
#include "nsIDOMScriptObjectFactory.h"
#include "nsGenericElement.h"
#include "nsContentUtils.h"
#include "nsLayoutAtoms.h"
#include "nsHTMLAtoms.h" // XXX until atoms get factored into nsLayoutAtoms
@ -36,7 +36,6 @@
#include "nsIDOMHTMLFormElement.h"
nsBaseContentList::nsBaseContentList()
: mScriptObject(nsnull)
{
NS_INIT_REFCNT();
}
@ -48,14 +47,23 @@ nsBaseContentList::~nsBaseContentList()
}
// XPConnect interface list for nsBaseContentList
NS_CLASSINFO_MAP_BEGIN(NodeList)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNodeList)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsBaseContentList
NS_INTERFACE_MAP_BEGIN(nsBaseContentList)
NS_INTERFACE_MAP_ENTRY(nsIDOMNodeList)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMNodeList)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(NodeList)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsBaseContentList)
NS_IMPL_RELEASE(nsBaseContentList)
NS_INTERFACE_MAP_BEGIN(nsBaseContentList)
NS_INTERFACE_MAP_ENTRY(nsIDOMNodeList)
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectOwner)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMNodeList)
NS_INTERFACE_MAP_END
NS_IMETHODIMP
nsBaseContentList::GetLength(PRUint32* aLength)
@ -80,41 +88,6 @@ nsBaseContentList::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
return CallQueryInterface(tmp, aReturn);
}
NS_IMETHODIMP
nsBaseContentList::GetScriptObject(nsIScriptContext *aContext,
void** aScriptObject)
{
nsresult res = NS_OK;
nsIScriptGlobalObject *global = aContext->GetGlobalObject();
if (!mScriptObject) {
nsIDOMScriptObjectFactory *factory;
res = nsGenericElement::GetScriptObjectFactory(&factory);
if (NS_FAILED(res)) {
return res;
}
res = factory->NewScriptNodeList(aContext,
NS_STATIC_CAST(nsIDOMNodeList *, this),
global, &mScriptObject);
NS_RELEASE(factory);
}
*aScriptObject = mScriptObject;
NS_RELEASE(global);
return res;
}
NS_IMETHODIMP
nsBaseContentList::SetScriptObject(void *aScriptObject)
{
mScriptObject = aScriptObject;
return NS_OK;
}
NS_IMETHODIMP
nsBaseContentList::AppendElement(nsIContent *aContent)
{
@ -387,13 +360,25 @@ nsContentList::~nsContentList()
delete mData;
}
// XPConnect interface list for nsContentList
NS_CLASSINFO_MAP_BEGIN(HTMLCollection)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNodeList)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLCollection)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsContentList
NS_INTERFACE_MAP_BEGIN(nsContentList)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLCollection)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLCollection)
NS_INTERFACE_MAP_END_INHERITING(nsBaseContentList)
NS_IMPL_ADDREF_INHERITED(nsContentList, nsBaseContentList)
NS_IMPL_RELEASE_INHERITED(nsContentList, nsBaseContentList)
NS_IMETHODIMP
nsContentList::GetLength(PRUint32* aLength)
{
@ -418,10 +403,10 @@ nsContentList::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
// Flush pending content changes Bug 4891
mDocument->FlushPendingNotifications(PR_FALSE);
}
nsISupports *element = NS_STATIC_CAST(nsISupports *,
mElements.ElementAt(aIndex));
if (element) {
result = CallQueryInterface(element, aReturn);
}
@ -429,15 +414,15 @@ nsContentList::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
*aReturn = nsnull;
}
}
return result;
}
NS_IMETHODIMP
NS_IMETHODIMP
nsContentList::NamedItem(const nsAReadableString& aName, nsIDOMNode** aReturn)
{
nsresult result = CheckDocumentExistence();
if (NS_SUCCEEDED(result)) {
if (mDocument) {
mDocument->FlushPendingNotifications(PR_FALSE); // Flush pending content changes Bug 4891
@ -466,35 +451,6 @@ nsContentList::NamedItem(const nsAReadableString& aName, nsIDOMNode** aReturn)
}
NS_IMETHODIMP
nsContentList::GetScriptObject(nsIScriptContext *aContext,
void** aScriptObject)
{
nsresult res = NS_OK;
nsIScriptGlobalObject *global = aContext->GetGlobalObject();
if (!mScriptObject) {
nsIDOMScriptObjectFactory *factory;
res = nsGenericElement::GetScriptObjectFactory(&factory);
if (NS_FAILED(res)) {
return res;
}
res = factory->NewScriptHTMLCollection(aContext,
NS_STATIC_CAST(nsIDOMNodeList *,
this),
global, &mScriptObject);
NS_RELEASE(factory);
}
*aScriptObject = mScriptObject;
NS_RELEASE(global);
return res;
}
NS_IMETHODIMP
nsContentList::ContentAppended(nsIDocument *aDocument, nsIContent* aContainer,
PRInt32 aNewIndexInContainer)
{

Просмотреть файл

@ -28,7 +28,6 @@
#include "nsIDOMHTMLCollection.h"
#include "nsIDOMNodeList.h"
#include "nsIDocumentObserver.h"
#include "nsIScriptObjectOwner.h"
typedef PRBool (*nsContentListMatchFunc)(nsIContent* aContent,
nsString* aData);
@ -37,8 +36,7 @@ class nsIDocument;
class nsIDOMHTMLFormElement;
class nsBaseContentList : public nsIDOMNodeList,
public nsIScriptObjectOwner
class nsBaseContentList : public nsIDOMNodeList
{
public:
nsBaseContentList();
@ -47,12 +45,8 @@ public:
NS_DECL_ISUPPORTS
// nsIDOMNodeList
NS_DECL_IDOMNODELIST
NS_DECL_NSIDOMNODELIST
// nsIScriptObjectOwner
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void *aScriptObject);
NS_IMETHOD AppendElement(nsIContent *aContent);
NS_IMETHOD RemoveElement(nsIContent *aContent);
NS_IMETHOD IndexOf(nsIContent *aContent, PRInt32& aIndex);
@ -60,7 +54,6 @@ public:
protected:
nsVoidArray mElements;
void *mScriptObject;
};
@ -104,9 +97,6 @@ public:
NS_IMETHOD Item(PRUint32 aIndex, nsIDOMNode** aReturn);
NS_IMETHOD NamedItem(const nsAReadableString& aName, nsIDOMNode** aReturn);
// nsIScriptObjectOwner
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
// nsIDocumentObserver
NS_IMETHOD BeginUpdate(nsIDocument *aDocument) { return NS_OK; }
NS_IMETHOD EndUpdate(nsIDocument *aDocument) { return NS_OK; }

Просмотреть файл

@ -36,12 +36,37 @@
#include "jsapi.h"
#include "nsCOMPtr.h"
#include "nsIServiceManager.h"
#include "nsIScriptGlobalObject.h"
#include "nsIScriptContext.h"
#include "nsIDOMScriptObjectFactory.h"
#include "nsDOMCID.h"
#include "nsContentUtils.h"
#include "nsIXPConnect.h"
#include "nsIContent.h"
#include "nsIDocument.h"
#include "nsINodeInfo.h"
nsIDOMScriptObjectFactory *nsContentUtils::sDOMScriptObjectFactory = nsnull;
nsIXPConnect *nsContentUtils::sXPConnect = nsnull;
// static
nsresult
nsContentUtils::Init()
{
NS_ENSURE_TRUE(!sXPConnect, NS_ERROR_ALREADY_INITIALIZED);
nsresult rv = nsServiceManager::GetService(nsIXPConnect::GetCID(),
nsIXPConnect::GetIID(),
(nsISupports **)&sXPConnect);
NS_ENSURE_SUCCESS(rv, rv);
return rv;
}
// static
nsresult
nsresult
nsContentUtils::GetStaticScriptGlobal(JSContext* aContext,
JSObject* aObj,
nsIScriptGlobalObject** aNativeGlobal)
@ -70,12 +95,17 @@ nsContentUtils::GetStaticScriptGlobal(JSContext* aContext,
return NS_ERROR_FAILURE;
}
return supports->QueryInterface(NS_GET_IID(nsIScriptGlobalObject),
(void**) aNativeGlobal);
nsCOMPtr<nsIXPConnectWrappedNative> wrapper(do_QueryInterface(supports));
NS_ENSURE_TRUE(wrapper, NS_ERROR_UNEXPECTED);
nsCOMPtr<nsISupports> native;
wrapper->GetNative(getter_AddRefs(native));
return CallQueryInterface(native, aNativeGlobal);
}
//static
nsresult
nsresult
nsContentUtils::GetStaticScriptContext(JSContext* aContext,
JSObject* aObj,
nsIScriptContext** aScriptContext)
@ -271,3 +301,208 @@ nsContentUtils::CopyNewlineNormalizedUnicodeTo(nsReadingIterator<PRUnichar>& aSr
copy_string(aSrcStart, aSrcEnd, normalizer);
return normalizer.GetCharsWritten();
}
// static
void
nsContentUtils::Shutdown()
{
NS_IF_RELEASE(sDOMScriptObjectFactory);
NS_IF_RELEASE(sXPConnect);
}
// static
nsISupports *
nsContentUtils::GetClassInfoInstance(nsDOMClassInfoID aID,
GetDOMClassIIDsFnc aGetIIDsFptr,
const char *aName)
{
if (!sDOMScriptObjectFactory) {
static NS_DEFINE_CID(kDOMScriptObjectFactoryCID,
NS_DOM_SCRIPT_OBJECT_FACTORY_CID);
nsServiceManager::GetService(kDOMScriptObjectFactoryCID,
NS_GET_IID(nsIDOMScriptObjectFactory),
(nsISupports **)&sDOMScriptObjectFactory);
if (!sDOMScriptObjectFactory) {
return nsnull;
}
}
return sDOMScriptObjectFactory->GetClassInfoInstance(aID, aGetIIDsFptr,
aName);
}
// static
nsresult
nsContentUtils::doReparentContentWrapper(nsIContent *aChild,
nsIDocument *aNewDocument,
nsIDocument *aOldDocument,
JSContext *cx,
JSObject *parent_obj)
{
nsCOMPtr<nsIXPConnectJSObjectHolder> old_wrapper;
nsresult rv;
rv = sXPConnect->ReparentWrappedNativeIfFound(cx, ::JS_GetGlobalObject(cx),
parent_obj, aChild,
getter_AddRefs(old_wrapper));
NS_ENSURE_SUCCESS(rv, rv);
if (!old_wrapper) {
// If aChild isn't wrapped none of it's children are wrapped so
// there's no need to walk into aChild's children.
return NS_OK;
}
if (aOldDocument) {
nsCOMPtr<nsISupports> old_ref;
aOldDocument->RemoveReference(aChild, getter_AddRefs(old_ref));
if (old_ref) {
// Transfer the reference from aOldDocument to aNewDocument
aNewDocument->AddReference(aChild, old_ref);
}
}
JSObject *old;
rv = old_wrapper->GetJSObject(&old);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIContent> child;
PRInt32 count = 0, i;
aChild->ChildCount(count);
for (i = 0; i < count; i++) {
aChild->ChildAt(i, *getter_AddRefs(child));
NS_ENSURE_TRUE(child, NS_ERROR_UNEXPECTED);
rv = doReparentContentWrapper(child, aNewDocument, aOldDocument, cx, old);
NS_ENSURE_SUCCESS(rv, rv);
}
return rv;
}
static
nsresult GetContextFromDocument(nsIDocument *aDocument, JSContext **cx)
{
*cx = nsnull;
nsCOMPtr<nsIScriptGlobalObject> sgo;
aDocument->GetScriptGlobalObject(getter_AddRefs(sgo));
if (!sgo) {
// No script global, no context.
return NS_OK;
}
nsCOMPtr<nsIScriptContext> scx;
sgo->GetContext(getter_AddRefs(scx));
if (!scx) {
// No context left in the old scope...
return NS_OK;
}
*cx = (JSContext *)scx->GetNativeContext();
return NS_OK;
}
// static
nsresult
nsContentUtils::ReparentContentWrapper(nsIContent *aContent,
nsIContent *aNewParent,
nsIDocument *aNewDocument,
nsIDocument *aOldDocument)
{
if (!aNewDocument || aNewDocument == aOldDocument) {
return NS_OK;
}
nsCOMPtr<nsIDocument> old_doc(aOldDocument);
if (!old_doc) {
nsCOMPtr<nsINodeInfo> ni;
aContent->GetNodeInfo(*getter_AddRefs(ni));
if (ni) {
ni->GetDocument(*getter_AddRefs(old_doc));
}
if (!aOldDocument) {
// If we can't find our old document we don't know what our old
// scope was so there's no way to find the old wrapper
return NS_OK;
}
}
NS_ENSURE_TRUE(sXPConnect, NS_ERROR_NOT_INITIALIZED);
nsCOMPtr<nsISupports> new_parent;
if (!aNewParent) {
nsCOMPtr<nsIContent> root(dont_AddRef(old_doc->GetRootContent()));
if (root.get() == aContent) {
new_parent = old_doc;
}
} else {
new_parent = aNewParent;
}
JSContext *cx = nsnull;
GetContextFromDocument(old_doc, &cx);
if (!cx) {
// No JSContext left in the old scope, can't find the old wrapper
// w/o the old context.
return NS_OK;
}
nsCOMPtr<nsIXPConnectWrappedNative> wrapper;
nsresult rv;
rv = sXPConnect->GetWrappedNativeOfNativeObject(cx, ::JS_GetGlobalObject(cx),
aContent,
NS_GET_IID(nsISupports),
getter_AddRefs(wrapper));
NS_ENSURE_SUCCESS(rv, rv);
if (!wrapper) {
// aContent is not wrapped (and thus none of it's children are
// wrapped) so there's no need to reparent anything.
return NS_OK;
}
// Wrap the new parent and reparent aContent
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
rv = sXPConnect->WrapNative(cx, ::JS_GetGlobalObject(cx), new_parent,
NS_GET_IID(nsISupports),
getter_AddRefs(holder));
NS_ENSURE_SUCCESS(rv, rv);
JSObject *obj;
rv = holder->GetJSObject(&obj);
NS_ENSURE_SUCCESS(rv, rv);
return doReparentContentWrapper(aContent, aNewDocument, aOldDocument, cx,
obj);
}

Просмотреть файл

@ -23,27 +23,25 @@
#include "nsDOMAttribute.h"
#include "nsGenericElement.h"
#include "nsIContent.h"
#include "nsIDOMScriptObjectFactory.h"
#include "nsITextContent.h"
#include "nsINameSpaceManager.h"
#include "nsDOMError.h"
#include "nsContentUtils.h"
//----------------------------------------------------------------------
nsDOMAttribute::nsDOMAttribute(nsIContent* aContent,
nsINodeInfo *aNodeInfo,
nsDOMAttribute::nsDOMAttribute(nsIContent* aContent, nsINodeInfo *aNodeInfo,
const nsAReadableString& aValue)
: mNodeInfo(aNodeInfo), mValue(aValue)
: mNodeInfo(aNodeInfo), mValue(aValue), mContent(aContent), mChild(nsnull),
mChildList(nsnull)
{
NS_ABORT_IF_FALSE(mNodeInfo, "We must get a nodeinfo here!");
NS_INIT_REFCNT();
// We don't add a reference to our content. It will tell us
// to drop our reference when it goes away.
mContent = aContent;
mScriptObject = nsnull;
mChild = nsnull;
mChildList = nsnull;
}
nsDOMAttribute::~nsDOMAttribute()
@ -52,49 +50,28 @@ nsDOMAttribute::~nsDOMAttribute()
NS_IF_RELEASE(mChildList);
}
nsresult
nsDOMAttribute::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
if (NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
if (aIID.Equals(NS_GET_IID(nsIDOMAttr))) {
nsIDOMAttr* tmp = this;
*aInstancePtr = (void*)tmp;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsIScriptObjectOwner))) {
nsIScriptObjectOwner* tmp = this;
*aInstancePtr = (void*)tmp;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsIDOMAttributePrivate))) {
nsIDOMAttributePrivate* tmp = this;
*aInstancePtr = (void*)tmp;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsIDOMNode))) {
nsIDOMNode* tmp = this;
*aInstancePtr = (void*)tmp;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsISupports))) {
nsIDOMAttr* tmp1 = this;
nsISupports* tmp2 = tmp1;
*aInstancePtr = (void*)tmp2;
NS_ADDREF_THIS();
return NS_OK;
}
return NS_NOINTERFACE;
}
// XPConnect interface list for nsDOMAttribute
NS_CLASSINFO_MAP_BEGIN(Attr)
NS_CLASSINFO_MAP_ENTRY(nsIDOMAttr)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsDOMAttribute
NS_INTERFACE_MAP_BEGIN(nsDOMAttribute)
NS_INTERFACE_MAP_ENTRY(nsIDOMAttr)
NS_INTERFACE_MAP_ENTRY(nsIDOMAttributePrivate)
NS_INTERFACE_MAP_ENTRY(nsIDOMNode)
NS_INTERFACE_MAP_ENTRY(nsIDOM3Node)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMAttr)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(Attr)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsDOMAttribute)
NS_IMPL_RELEASE(nsDOMAttribute)
NS_IMETHODIMP
nsDOMAttribute::DropReference()
{
@ -120,36 +97,6 @@ nsDOMAttribute::GetContent(nsIContent** aContent)
return NS_OK;
}
nsresult
nsDOMAttribute::GetScriptObject(nsIScriptContext *aContext,
void** aScriptObject)
{
nsresult res = NS_OK;
if (nsnull == mScriptObject) {
nsIDOMScriptObjectFactory *factory;
res = nsGenericElement::GetScriptObjectFactory(&factory);
if (NS_OK != res) {
return res;
}
res = factory->NewScriptAttr(aContext,
(nsISupports *)(nsIDOMAttr *)this,
(nsISupports *)mContent,
(void **)&mScriptObject);
NS_RELEASE(factory);
}
*aScriptObject = mScriptObject;
return res;
}
nsresult
nsDOMAttribute::SetScriptObject(void *aScriptObject)
{
mScriptObject = aScriptObject;
return NS_OK;
}
nsresult
nsDOMAttribute::GetName(nsAWritableString& aName)
{
@ -164,7 +111,7 @@ nsDOMAttribute::GetValue(nsAWritableString& aValue)
NS_ENSURE_TRUE(mNodeInfo, NS_ERROR_FAILURE);
nsresult result = NS_OK;
if (nsnull != mContent) {
if (mContent) {
nsresult attrResult;
PRInt32 nameSpaceID;
nsCOMPtr<nsIAtom> name;
@ -188,7 +135,7 @@ nsDOMAttribute::SetValue(const nsAReadableString& aValue)
NS_ENSURE_TRUE(mNodeInfo, NS_ERROR_FAILURE);
nsresult result = NS_OK;
if (nsnull != mContent) {
if (mContent) {
result = mContent->SetAttribute(mNodeInfo, aValue, PR_TRUE);
}
mValue=aValue;
@ -280,27 +227,26 @@ nsDOMAttribute::GetParentNode(nsIDOMNode** aParentNode)
NS_IMETHODIMP
nsDOMAttribute::GetChildNodes(nsIDOMNodeList** aChildNodes)
{
if (nsnull == mChildList) {
if (!mChildList) {
mChildList = new nsAttributeChildList(this);
if (nsnull == mChildList) {
return NS_ERROR_OUT_OF_MEMORY;
}
NS_ENSURE_TRUE(mChildList, NS_ERROR_OUT_OF_MEMORY);
NS_ADDREF(mChildList);
}
return mChildList->QueryInterface(NS_GET_IID(nsIDOMNodeList), (void**)aChildNodes);
return CallQueryInterface(mChildList, aChildNodes);
}
NS_IMETHODIMP
nsDOMAttribute::HasChildNodes(PRBool* aHasChildNodes)
{
*aHasChildNodes = PR_FALSE;
if (nsnull != mChild) {
if (mChild) {
*aHasChildNodes = PR_TRUE;
}
else if (nsnull != mContent) {
else if (mContent) {
nsAutoString value;
GetValue(value);
if (0 < value.Length()) {
*aHasChildNodes = PR_TRUE;
@ -331,7 +277,7 @@ nsDOMAttribute::GetFirstChild(nsIDOMNode** aFirstChild)
return result;
}
if (0 < value.Length()) {
if (nsnull == mChild) {
if (!mChild) {
nsIContent* content;
result = NS_NewTextNode(&content);
@ -412,7 +358,7 @@ nsDOMAttribute::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
{
nsDOMAttribute* newAttr;
if (nsnull != mContent) {
if (mContent) {
nsAutoString value;
PRInt32 nameSpaceID;
nsCOMPtr<nsIAtom> name;
@ -427,7 +373,7 @@ nsDOMAttribute::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
newAttr = new nsDOMAttribute(nsnull, mNodeInfo, mValue);
}
if (nsnull == newAttr) {
if (!newAttr) {
return NS_ERROR_OUT_OF_MEMORY;
}
@ -438,7 +384,7 @@ NS_IMETHODIMP
nsDOMAttribute::GetOwnerDocument(nsIDOMDocument** aOwnerDocument)
{
nsresult result = NS_OK;
if (nsnull != mContent) {
if (mContent) {
nsIDOMNode* node;
result = mContent->QueryInterface(NS_GET_IID(nsIDOMNode), (void**)&node);
if (NS_SUCCEEDED(result)) {
@ -477,7 +423,7 @@ nsDOMAttribute::SetPrefix(const nsAReadableString& aPrefix)
nsCOMPtr<nsIAtom> prefix;
nsresult rv = NS_OK;
if (aPrefix.Length())
if (aPrefix.Length() && !DOMStringIsNull(aPrefix))
prefix = dont_AddRef(NS_NewAtom(aPrefix));
rv = mNodeInfo->PrefixChanged(prefix, *getter_AddRefs(newNodeInfo));
@ -527,18 +473,16 @@ nsDOMAttribute::IsSupported(const nsAReadableString& aFeature,
return nsGenericElement::InternalIsSupported(aFeature, aVersion, aReturn);
}
#if 0
NS_IMETHODIMP
nsDOMAttribute::GetBaseURI(nsAWritableString &aURI)
{
aURI.Truncate();
nsresult rv = NS_OK;
nsCOMPtr<nsIDOMNode> node(do_QueryInterface(mContent));
nsCOMPtr<nsIDOM3Node> node(do_QueryInterface(mContent));
if (node)
rv = node->GetBaseURI(aURI);
return rv;
}
#endif
//----------------------------------------------------------------------
@ -559,7 +503,7 @@ nsAttributeChildList::GetLength(PRUint32* aLength)
nsAutoString value;
*aLength = 0;
if (nsnull != mAttribute) {
if (mAttribute) {
mAttribute->GetValue(value);
if (0 < value.Length()) {
*aLength = 1;
@ -573,7 +517,7 @@ NS_IMETHODIMP
nsAttributeChildList::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
{
*aReturn = nsnull;
if ((nsnull != mAttribute) && (0 == aIndex)) {
if (mAttribute && 0 == aIndex) {
mAttribute->GetFirstChild(aReturn);
}

Просмотреть файл

@ -25,7 +25,6 @@
#include "nsIDOMAttr.h"
#include "nsIDOMText.h"
#include "nsIDOMNodeList.h"
#include "nsIScriptObjectOwner.h"
#include "nsGenericDOMNodeList.h"
#include "nsString.h"
#include "nsCOMPtr.h"
@ -65,10 +64,9 @@ protected:
};
// Attribute helper class used to wrap up an attribute with a dom
// object that implements nsIDOMAttr and nsIDOMNode and
// nsIScriptObjectOwner
class nsDOMAttribute : public nsIDOMAttr,
public nsIScriptObjectOwner,
// object that implements nsIDOMAttr and nsIDOMNode
class nsDOMAttribute : public nsIDOMAttr,
public nsIDOM3Node,
public nsIDOMAttributePrivate
{
public:
@ -78,15 +76,15 @@ public:
NS_DECL_ISUPPORTS
NS_IMETHOD GetScriptObject(nsIScriptContext* aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void *aScriptObject);
// nsIDOMNode interface
NS_DECL_NSIDOMNODE
// nsIDOM3Node interface
NS_DECL_NSIDOM3NODE
// nsIDOMAttr interface
NS_DECL_IDOMATTR
NS_DECL_NSIDOMATTR
// nsIDOMNode interface
NS_DECL_IDOMNODE
// nsIDOMAttributePrivate interface
NS_IMETHOD DropReference();
NS_IMETHOD SetContent(nsIContent* aContent);
@ -100,7 +98,6 @@ private:
// element representing the value
nsIDOMText* mChild;
nsAttributeChildList* mChildList;
void* mScriptObject;
};

Просмотреть файл

@ -24,10 +24,9 @@
#include "nsDOMAttribute.h"
#include "nsGenericElement.h"
#include "nsIContent.h"
#include "nsIDOMScriptObjectFactory.h"
#include "nsINameSpaceManager.h"
#include "nsDOMError.h"
#include "nsContentUtils.h"
//----------------------------------------------------------------------
@ -35,7 +34,6 @@ nsDOMAttributeMap::nsDOMAttributeMap(nsIContent* aContent)
: mContent(aContent)
{
NS_INIT_REFCNT();
mScriptObject = nsnull;
// We don't add a reference to our content. If it goes away,
// we'll be told to drop our reference
}
@ -50,45 +48,23 @@ nsDOMAttributeMap::DropReference()
mContent = nsnull;
}
// XPConnect interface list for nsDOMAttributeMap
NS_CLASSINFO_MAP_BEGIN(NamedNodeMap)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNamedNodeMap)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsDOMAttributeMap
NS_INTERFACE_MAP_BEGIN(nsDOMAttributeMap)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMNamedNodeMap)
NS_INTERFACE_MAP_ENTRY(nsIDOMNamedNodeMap)
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectOwner)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_ENTRY(nsIDOMNamedNodeMap)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(NamedNodeMap)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsDOMAttributeMap)
NS_IMPL_RELEASE(nsDOMAttributeMap)
nsresult
nsDOMAttributeMap::GetScriptObject(nsIScriptContext *aContext,
void** aScriptObject)
{
nsresult res = NS_OK;
if (nsnull == mScriptObject) {
nsIDOMScriptObjectFactory *factory;
res = nsGenericElement::GetScriptObjectFactory(&factory);
if (NS_OK != res) {
return res;
}
res = factory->NewScriptNamedNodeMap(aContext,
(nsISupports *)(nsIDOMNamedNodeMap *)this,
(nsISupports *)mContent,
(void**)&mScriptObject);
NS_RELEASE(factory);
}
*aScriptObject = mScriptObject;
return res;
}
nsresult
nsDOMAttributeMap::SetScriptObject(void *aScriptObject)
{
mScriptObject = aScriptObject;
return NS_OK;
}
nsresult
nsDOMAttributeMap::GetNamedItem(const nsAReadableString& aAttrName,
nsIDOMNode** aAttribute)

Просмотреть файл

@ -23,7 +23,6 @@
#define nsDOMAttributeMap_h___
#include "nsIDOMNamedNodeMap.h"
#include "nsIScriptObjectOwner.h"
#include "nsVoidArray.h"
#include "nsString.h"
#include "plhash.h"
@ -31,8 +30,7 @@
class nsIContent;
// Helper class that implements the nsIDOMNamedNodeMap interface.
class nsDOMAttributeMap : public nsIDOMNamedNodeMap,
public nsIScriptObjectOwner
class nsDOMAttributeMap : public nsIDOMNamedNodeMap
{
public:
nsDOMAttributeMap(nsIContent* aContent);
@ -40,21 +38,8 @@ public:
NS_DECL_ISUPPORTS
NS_IMETHOD GetScriptObject(nsIScriptContext* aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void *aScriptObject);
// nsIDOMNamedNodeMap interface
NS_IMETHOD GetLength(PRUint32* aSize);
NS_IMETHOD GetNamedItem(const nsAReadableString& aName, nsIDOMNode** aReturn);
NS_IMETHOD SetNamedItem(nsIDOMNode* aNode, nsIDOMNode** aReturn);
NS_IMETHOD RemoveNamedItem(const nsAReadableString& aName, nsIDOMNode** aReturn);
NS_IMETHOD Item(PRUint32 aIndex, nsIDOMNode** aReturn);
NS_IMETHOD GetNamedItemNS(const nsAReadableString& aNamespaceURI,
const nsAReadableString& aLocalName, nsIDOMNode** aReturn);
NS_IMETHOD SetNamedItemNS(nsIDOMNode* aArg, nsIDOMNode** aReturn);
NS_IMETHOD RemoveNamedItemNS(const nsAReadableString& aNamespaceURI,
const nsAReadableString& aLocalName,
nsIDOMNode** aReturn);
NS_DECL_NSIDOMNAMEDNODEMAP
void DropReference();
@ -65,8 +50,7 @@ public:
#endif
private:
nsIContent* mContent;
void* mScriptObject;
nsIContent* mContent; // Weak reference
};

Просмотреть файл

@ -23,9 +23,10 @@
#include "nsDOMDocumentType.h"
#include "nsDOMAttributeMap.h"
#include "nsIDOMNamedNodeMap.h"
#include "nsIDOMScriptObjectFactory.h"
#include "nsLayoutAtoms.h"
#include "nsCOMPtr.h"
#include "nsContentUtils.h"
nsresult
NS_NewDOMDocumentType(nsIDOMDocumentType** aDocType,
@ -38,8 +39,8 @@ NS_NewDOMDocumentType(nsIDOMDocumentType** aDocType,
{
NS_ENSURE_ARG_POINTER(aDocType);
*aDocType = new nsDOMDocumentType(aName, aEntities, aNotations,
aPublicId, aSystemId, aInternalSubset);
*aDocType = new nsDOMDocumentType(aName, aEntities, aNotations, aPublicId,
aSystemId, aInternalSubset);
if (!*aDocType) {
return NS_ERROR_OUT_OF_MEMORY;
}
@ -75,16 +76,27 @@ nsDOMDocumentType::~nsDOMDocumentType()
NS_IF_RELEASE(mNotations);
}
// XPConnect interface list for nsDOMDocumentType
NS_CLASSINFO_MAP_BEGIN(DocumentType)
NS_CLASSINFO_MAP_ENTRY(nsIDOMDocumentType)
NS_CLASSINFO_MAP_ENTRY(nsIDOM3Node)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsDOMDocumentType
NS_INTERFACE_MAP_BEGIN(nsDOMDocumentType)
NS_INTERFACE_MAP_ENTRY(nsIContent)
NS_INTERFACE_MAP_ENTRY(nsIDOMNode)
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentType)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIContent)
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOM3Node, nsNode3Tearoff(this))
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsDOMDocumentType)
NS_IMPL_RELEASE(nsDOMDocumentType)
NS_INTERFACE_MAP_BEGIN(nsDOMDocumentType)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMDocumentType)
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentType)
NS_INTERFACE_MAP_ENTRY(nsIDOMNode)
NS_INTERFACE_MAP_ENTRY(nsIContent)
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectOwner)
NS_INTERFACE_MAP_END_THREADSAFE
NS_IMETHODIMP
nsDOMDocumentType::GetName(nsAWritableString& aName)
@ -137,6 +149,7 @@ nsDOMDocumentType::GetSystemId(nsAWritableString& aSystemId)
NS_IMETHODIMP
nsDOMDocumentType::GetInternalSubset(nsAWritableString& aInternalSubset)
{
// XXX: null string
aInternalSubset = mInternalSubset;
return NS_OK;
@ -266,3 +279,9 @@ nsDOMDocumentType::SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const
#endif
return NS_OK;
}
NS_IMETHODIMP_(PRBool)
nsDOMDocumentType::IsContentOfType(PRUint32 aFlags)
{
return !(aFlags & ~eTEXT);
}

Просмотреть файл

@ -24,17 +24,13 @@
#define nsDOMDocumentType_h___
#include "nsIDOMDocumentType.h"
#include "nsIScriptObjectOwner.h"
#include "nsIContent.h"
#include "nsGenericDOMDataNode.h"
#include "nsString.h"
#include "nsISizeOfHandler.h"
class nsIDOMNamedNodeMap;
class nsDOMDocumentType : public nsIDOMDocumentType,
public nsIScriptObjectOwner,
public nsIContent
class nsDOMDocumentType : public nsIContent,
public nsIDOMDocumentType
{
public:
nsDOMDocumentType(const nsAReadableString& aName,
@ -50,13 +46,10 @@ public:
NS_DECL_ISUPPORTS
// nsIDOMNode
NS_IMPL_IDOMNODE_USING_GENERIC_DOM_DATA(mInner)
NS_IMPL_NSIDOMNODE_USING_GENERIC_DOM_DATA(mInner)
// nsIDOMDocumentType
NS_DECL_IDOMDOCUMENTTYPE
// nsIScriptObjectOwner interface
NS_IMPL_ISCRIPTOBJECTOWNER_USING_GENERIC_DOM_DATA(mInner);
NS_DECL_NSIDOMDOCUMENTTYPE
// nsIContent
NS_IMPL_ICONTENT_USING_GENERIC_DOM_DATA(mInner)
@ -77,12 +70,13 @@ protected:
nsString mInternalSubset;
};
extern nsresult NS_NewDOMDocumentType(nsIDOMDocumentType** aDocType,
const nsAReadableString& aName,
nsIDOMNamedNodeMap *aEntities,
nsIDOMNamedNodeMap *aNotations,
const nsAReadableString& aPublicId,
const nsAReadableString& aSystemId,
const nsAReadableString& aInternalSubset);
extern nsresult
NS_NewDOMDocumentType(nsIDOMDocumentType** aDocType,
const nsAReadableString& aName,
nsIDOMNamedNodeMap *aEntities,
nsIDOMNamedNodeMap *aNotations,
const nsAReadableString& aPublicId,
const nsAReadableString& aSystemId,
const nsAReadableString& aInternalSubset);
#endif // nsDOMDocument_h___

Просмотреть файл

@ -46,13 +46,13 @@
#include "nsIEventStateManager.h"
#include "nsContentList.h"
#include "nsIObserver.h"
#include "nsIBaseWindow.h"
#include "nsIDOMEventListener.h"
#include "nsIDOMStyleSheet.h"
#include "nsDOMAttribute.h"
#include "nsDOMCID.h"
#include "nsIDOMScriptObjectFactory.h"
#include "nsIDOMDOMImplementation.h"
#include "nsIDOMDocumentView.h"
#include "nsIDOMAbstractView.h"
@ -127,7 +127,6 @@ nsDOMStyleSheetList::nsDOMStyleSheetList(nsIDocument *aDocument)
// The document will tell us when its going away.
mDocument = aDocument;
mDocument->AddObserver(this);
mScriptObject = nsnull;
}
nsDOMStyleSheetList::~nsDOMStyleSheetList()
@ -138,15 +137,27 @@ nsDOMStyleSheetList::~nsDOMStyleSheetList()
mDocument = nsnull;
}
// XXX couldn't we use the GetIIDs method from CSSStyleSheetList here?
// XPConnect interface list for nsDOMStyleSheetList
NS_CLASSINFO_MAP_BEGIN(DocumentStyleSheetList)
NS_CLASSINFO_MAP_ENTRY(nsIDOMStyleSheetList)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsDOMStyleSheetList
NS_INTERFACE_MAP_BEGIN(nsDOMStyleSheetList)
NS_INTERFACE_MAP_ENTRY(nsIDOMStyleSheetList)
NS_INTERFACE_MAP_ENTRY(nsIDocumentObserver)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMStyleSheetList)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO_WITH_NAME(DocumentStyleSheetList,
StyleSheetList)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsDOMStyleSheetList)
NS_IMPL_RELEASE(nsDOMStyleSheetList)
NS_INTERFACE_MAP_BEGIN(nsDOMStyleSheetList)
NS_INTERFACE_MAP_ENTRY(nsIDOMStyleSheetList)
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectOwner)
NS_INTERFACE_MAP_ENTRY(nsIDocumentObserver)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMStyleSheetList)
NS_INTERFACE_MAP_END
NS_IMETHODIMP
nsDOMStyleSheetList::GetLength(PRUint32* aLength)
@ -207,33 +218,6 @@ nsDOMStyleSheetList::Item(PRUint32 aIndex, nsIDOMStyleSheet** aReturn)
return NS_OK;
}
NS_IMETHODIMP
nsDOMStyleSheetList::GetScriptObject(nsIScriptContext *aContext, void** aScriptObject)
{
nsresult res = NS_OK;
if (nsnull == mScriptObject) {
nsISupports *supports = (nsISupports *)(nsIDOMStyleSheetList *)this;
nsISupports *parent = (nsISupports *)mDocument;
// XXX Should be done through factory
res = NS_NewScriptStyleSheetList(aContext,
supports,
parent,
(void**)&mScriptObject);
}
*aScriptObject = mScriptObject;
return res;
}
NS_IMETHODIMP
nsDOMStyleSheetList::SetScriptObject(void* aScriptObject)
{
mScriptObject = aScriptObject;
return NS_OK;
}
NS_IMETHODIMP
nsDOMStyleSheetList::StyleSheetAdded(nsIDocument *aDocument,
nsIStyleSheet* aStyleSheet)
@ -277,7 +261,6 @@ nsDOMStyleSheetList::DocumentWillBeDestroyed(nsIDocument *aDocument)
// ==================================================================
class nsDOMImplementation : public nsIDOMDOMImplementation,
public nsIScriptObjectOwner,
public nsIPrivateDOMImplementation
{
public:
@ -300,15 +283,10 @@ public:
nsIDOMDocumentType* aDoctype,
nsIDOMDocument** aReturn);
// nsIScriptObjectOwner
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void *aScriptObject);
//nsIPrivateDOMImplementation
NS_IMETHOD Init(nsIURI* aBaseURI);
protected:
void *mScriptObject;
nsCOMPtr<nsIURI> mBaseURI;
};
@ -325,7 +303,6 @@ NS_NewDOMImplementation(nsIDOMDOMImplementation** aInstancePtrResult)
nsDOMImplementation::nsDOMImplementation(nsIURI* aBaseURI)
{
NS_INIT_REFCNT();
mScriptObject = nsnull;
mBaseURI = aBaseURI;
}
@ -333,7 +310,24 @@ nsDOMImplementation::~nsDOMImplementation()
{
}
NS_IMPL_ISUPPORTS4(nsDOMImplementation, nsIDOMDOMImplementation, nsIPrivateDOMImplementation, nsIScriptObjectOwner, nsIDOMDOMImplementation)
// XPConnect interface list for nsDOMImplementation
NS_CLASSINFO_MAP_BEGIN(DOMImplementation)
NS_CLASSINFO_MAP_ENTRY(nsIDOMDOMImplementation)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsDOMImplementation
NS_INTERFACE_MAP_BEGIN(nsDOMImplementation)
NS_INTERFACE_MAP_ENTRY(nsIDOMDOMImplementation)
NS_INTERFACE_MAP_ENTRY(nsIPrivateDOMImplementation)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMDOMImplementation)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(DOMImplementation)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsDOMImplementation);
NS_IMPL_RELEASE(nsDOMImplementation);
NS_IMETHODIMP
@ -362,7 +356,7 @@ nsDOMImplementation::CreateDocument(const nsAReadableString& aNamespaceURI,
nsIDOMDocumentType* aDoctype,
nsIDOMDocument** aReturn)
{
NS_ENSURE_ARG_POINTER(aReturn);
NS_ENSURE_ARG_POINTER(aReturn);
*aReturn = nsnull;
@ -370,34 +364,6 @@ nsDOMImplementation::CreateDocument(const nsAReadableString& aNamespaceURI,
mBaseURI);
}
NS_IMETHODIMP
nsDOMImplementation::GetScriptObject(nsIScriptContext *aContext,
void** aScriptObject)
{
nsresult result = NS_OK;
if (!mScriptObject) {
nsCOMPtr<nsIDOMScriptObjectFactory> factory(do_GetService(kDOMScriptObjectFactoryCID, &result));
if (NS_OK == result) {
nsCOMPtr<nsIScriptGlobalObject> global(dont_AddRef(aContext->GetGlobalObject()));
result = factory->NewScriptDOMImplementation(aContext, (nsISupports*)(nsIDOMDOMImplementation*)this,
global, &mScriptObject);
}
}
*aScriptObject = mScriptObject;
return result;
}
NS_IMETHODIMP
nsDOMImplementation::SetScriptObject(void *aScriptObject)
{
mScriptObject = nsnull;
return NS_OK;
}
NS_IMETHODIMP
nsDOMImplementation::Init(nsIURI* aBaseURI)
{
@ -409,8 +375,6 @@ nsDOMImplementation::Init(nsIURI* aBaseURI)
// =
// ==================================================================
MOZ_DECL_CTOR_COUNTER(nsDocumentChildNodes)
nsDocumentChildNodes::nsDocumentChildNodes(nsIDocument* aDocument)
{
MOZ_COUNT_CTOR(nsDocumentChildNodes);
@ -419,7 +383,7 @@ nsDocumentChildNodes::nsDocumentChildNodes(nsIDocument* aDocument)
// references). We'll be told when the document goes away.
mDocument = aDocument;
}
nsDocumentChildNodes::~nsDocumentChildNodes()
{
MOZ_COUNT_DTOR(nsDocumentChildNodes);
@ -472,12 +436,10 @@ nsDocument::nsDocument()
NS_INIT_REFCNT();
mArena = nsnull;
mDocumentTitle = nsnull;
mDocumentURL = nsnull;
mCharacterSet.AssignWithConversion("ISO-8859-1");
mParentDocument = nsnull;
mRootContent = nsnull;
mScriptObject = nsnull;
mListenerManager = nsnull;
mInDestructor = PR_FALSE;
mNameSpaceManager = nsnull;
@ -519,10 +481,6 @@ nsDocument::~nsDocument()
}
}
if (nsnull != mDocumentTitle) {
delete mDocumentTitle;
mDocumentTitle = nsnull;
}
NS_IF_RELEASE(mDocumentURL);
NS_IF_RELEASE(mPrincipal);
mDocumentLoadGroup = null_nsCOMPtr();
@ -571,6 +529,10 @@ nsDocument::~nsDocument()
NS_IF_RELEASE(mDTD);
delete mBoxObjectTable;
if (mNodeInfoManager) {
mNodeInfoManager->DropDocumentReference();
}
}
NS_INTERFACE_MAP_BEGIN(nsDocument)
@ -580,13 +542,13 @@ NS_INTERFACE_MAP_BEGIN(nsDocument)
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentEvent)
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentStyle)
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentView)
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentRange)
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentXBL)
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectOwner)
NS_INTERFACE_MAP_ENTRY(nsIJSScriptObject)
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectPrincipal)
NS_INTERFACE_MAP_ENTRY(nsIDOMEventReceiver)
NS_INTERFACE_MAP_ENTRY(nsIDOMEventTarget)
NS_INTERFACE_MAP_ENTRY(nsIDOMNode)
NS_INTERFACE_MAP_ENTRY(nsIDOM3Node)
NS_INTERFACE_MAP_ENTRY(nsIDiskDocument)
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDocument)
@ -615,7 +577,7 @@ nsresult nsDocument::Init()
mNodeInfoManager = new nsNodeInfoManager();
NS_ENSURE_TRUE(mNodeInfoManager, NS_ERROR_OUT_OF_MEMORY);
mNodeInfoManager->Init(mNameSpaceManager);
mNodeInfoManager->Init(this, mNameSpaceManager);
return rv;
}
@ -633,10 +595,8 @@ nsDocument::Reset(nsIChannel* aChannel, nsILoadGroup* aLoadGroup)
{
nsresult rv = NS_OK;
if (nsnull != mDocumentTitle) {
delete mDocumentTitle;
mDocumentTitle = nsnull;
}
mDocumentTitle.Truncate();
NS_IF_RELEASE(mDocumentURL);
NS_IF_RELEASE(mPrincipal);
mDocumentLoadGroup = null_nsCOMPtr();
@ -757,7 +717,7 @@ nsDocument::StopDocumentLoad()
const nsString* nsDocument::GetDocumentTitle() const
{
return mDocumentTitle;
return &mDocumentTitle;
}
nsIURI* nsDocument::GetDocumentURL() const
@ -1403,6 +1363,13 @@ nsDocument::SetScriptGlobalObject(nsIScriptGlobalObject *aScriptGlobalObject)
shell->ReleaseAnonymousContent();
}
#ifdef DEBUG_jst
printf ("Content wrapper hash had %d entries.\n",
mContentWrapperHash.Count());
#endif
mContentWrapperHash.Reset();
}
mScriptGlobalObject = aScriptGlobalObject;
@ -1734,55 +1701,6 @@ nsDocument::StyleRuleRemoved(nsIStyleSheet* aStyleSheet, nsIStyleRule* aStyleRul
}
nsresult nsDocument::GetScriptObject(nsIScriptContext *aContext, void** aScriptObject)
{
nsresult res = NS_OK;
nsCOMPtr<nsIScriptGlobalObject> global;
if (nsnull == mScriptObject) {
// XXX We make the (possibly erroneous) assumption that the first
// presentation shell represents the "primary view" of the document
// and that the JS parent chain should incorporate just that view.
// This is done for lack of a better model when we have multiple
// views.
nsIPresShell* shell = (nsIPresShell*) mPresShells.ElementAt(0);
if (shell) {
nsCOMPtr<nsIPresContext> cx;
shell->GetPresContext(getter_AddRefs(cx));
nsCOMPtr<nsISupports> container;
res = cx->GetContainer(getter_AddRefs(container));
if (NS_SUCCEEDED(res) && container) {
global = do_GetInterface(container);
}
}
// XXX If we can't find a view, parent to the calling context's
// global object. This may not be right either, but we need
// something.
else {
global = getter_AddRefs(aContext->GetGlobalObject());
}
if (NS_SUCCEEDED(res)) {
res = NS_NewScriptDocument(aContext,
(nsISupports *)(nsIDOMDocument *)this,
(nsISupports *)global,
(void**)&mScriptObject);
}
}
*aScriptObject = mScriptObject;
return res;
}
nsresult nsDocument::SetScriptObject(void *aScriptObject)
{
mScriptObject = aScriptObject;
return NS_OK;
}
//
// nsIDOMDocument interface
//
@ -1863,6 +1781,15 @@ nsDocument::CreateElement(const nsAReadableString& aTagName,
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsDocument::CreateElementNS(const nsAReadableString & namespaceURI,
const nsAReadableString & qualifiedName,
nsIDOMElement **_retval)
{
// Should be implemented by subclass
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsDocument::CreateTextNode(const nsAReadableString& aData, nsIDOMText** aReturn)
{
@ -1934,6 +1861,15 @@ nsDocument::CreateAttribute(const nsAReadableString& aName,
return attribute->QueryInterface(NS_GET_IID(nsIDOMAttr), (void**)aReturn);
}
NS_IMETHODIMP
nsDocument::CreateAttributeNS(const nsAReadableString & namespaceURI,
const nsAReadableString & qualifiedName,
nsIDOMAttr **_retval)
{
// Should be implemented by subclass
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsDocument::CreateEntityReference(const nsAReadableString& aName,
nsIDOMEntityReference** aReturn)
@ -1983,6 +1919,14 @@ nsDocument::GetElementsByTagNameNS(const nsAReadableString& aNamespaceURI,
return list->QueryInterface(NS_GET_IID(nsIDOMNodeList), (void **)aReturn);
}
NS_IMETHODIMP
nsDocument::GetElementById(const nsAReadableString & elementId,
nsIDOMElement **_retval)
{
// Should be implemented by subclass
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsDocument::GetStyleSheets(nsIDOMStyleSheetList** aStyleSheets)
{
@ -2146,30 +2090,6 @@ nsDocument::GetAnonymousNodes(nsIDOMElement* aElement,
return NS_OK;
}
NS_IMETHODIMP
nsDocument::GetLocation(jsval* aLocation)
{
if (mScriptGlobalObject) {
nsCOMPtr<nsIDOMWindowInternal> window(do_QueryInterface(mScriptGlobalObject));
if(window) {
return window->GetLocation(aLocation);
}
}
return NS_OK;
}
NS_IMETHODIMP
nsDocument::SetLocation(jsval aLocation)
{
if (mScriptGlobalObject) {
nsCOMPtr<nsIDOMWindowInternal> window(do_QueryInterface(mScriptGlobalObject));
if(window) {
return window->SetLocation(aLocation);
}
}
return NS_OK;
}
NS_IMETHODIMP
nsDocument::CreateRange(nsIDOMRange** aReturn)
{
@ -2249,6 +2169,59 @@ nsDocument::GetPlugins(nsIDOMPluginArray** aPlugins)
return navigator->GetPlugins(aPlugins);
}
NS_IMETHODIMP
nsDocument::GetLocation(nsIDOMLocation **_retval)
{
NS_ENSURE_ARG_POINTER(_retval);
*_retval = nsnull;
nsCOMPtr<nsIDOMWindowInternal> w(do_QueryInterface(mScriptGlobalObject));
if(w) {
return w->GetLocation(_retval);
}
return NS_OK;
}
NS_IMETHODIMP
nsDocument::GetTitle(nsAWritableString& aTitle)
{
aTitle.Assign(mDocumentTitle);
return NS_OK;
}
NS_IMETHODIMP
nsDocument::SetTitle(const nsAReadableString& aTitle)
{
for (PRInt32 i = mPresShells.Count() - 1; i >= 0; --i) {
nsIPresShell* shell = NS_STATIC_CAST(nsIPresShell*, mPresShells[i]);
nsCOMPtr<nsIPresContext> context;
nsresult rv = shell->GetPresContext(getter_AddRefs(context));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsISupports> container;
rv = context->GetContainer(getter_AddRefs(container));
NS_ENSURE_SUCCESS(rv, rv);
if (!container)
continue;
nsCOMPtr<nsIBaseWindow> docShellWin = do_QueryInterface(container);
if(!docShellWin)
continue;
rv = docShellWin->SetTitle(PromiseFlatString(aTitle).get());
NS_ENSURE_SUCCESS(rv, rv);
}
mDocumentTitle.Assign(aTitle);
return NS_OK;
}
NS_IMETHODIMP
nsDocument::GetBoxObjectFor(nsIDOMElement* aElement, nsIBoxObject** aResult)
{
@ -2377,7 +2350,7 @@ nsDocument::GetDir(nsAWritableString& aDirection)
}
}
#else
aDirection.Assign(NS_LITERAL_STRING("ltr") );
aDirection.Assign(NS_LITERAL_STRING("ltr"));
#endif // IBMBIDI
return NS_OK;
}
@ -2413,6 +2386,7 @@ nsDocument::SetDir(const nsAReadableString& aDirection)
return NS_OK;
}
//
// nsIDOMNode methods
//
@ -2426,7 +2400,8 @@ nsDocument::GetNodeName(nsAWritableString& aNodeName)
NS_IMETHODIMP
nsDocument::GetNodeValue(nsAWritableString& aNodeValue)
{
aNodeValue.Truncate();
SetDOMStringToNull(aNodeValue);
return NS_OK;
}
@ -2544,14 +2519,16 @@ nsDocument::GetAttributes(nsIDOMNamedNodeMap** aAttributes)
NS_IMETHODIMP
nsDocument::GetNamespaceURI(nsAWritableString& aNamespaceURI)
{
aNamespaceURI.Truncate();
SetDOMStringToNull(aNamespaceURI);
return NS_OK;
}
NS_IMETHODIMP
nsDocument::GetPrefix(nsAWritableString& aPrefix)
{
aPrefix.Truncate();
SetDOMStringToNull(aPrefix);
return NS_OK;
}
@ -2564,7 +2541,8 @@ nsDocument::SetPrefix(const nsAReadableString& aPrefix)
NS_IMETHODIMP
nsDocument::GetLocalName(nsAWritableString& aLocalName)
{
aLocalName.Truncate();
SetDOMStringToNull(aLocalName);
return NS_OK;
}
@ -2767,7 +2745,6 @@ nsDocument::IsSupported(const nsAReadableString& aFeature,
return nsGenericElement::InternalIsSupported(aFeature, aVersion, aReturn);
}
#if 0
NS_IMETHODIMP
nsDocument::GetBaseURI(nsAWritableString &aURI)
{
@ -2781,7 +2758,6 @@ nsDocument::GetBaseURI(nsAWritableString &aURI)
}
return NS_OK;
}
#endif
NS_IMETHODIMP
nsDocument::GetOwnerDocument(nsIDOMDocument** aOwnerDocument)
@ -2980,6 +2956,7 @@ nsDocument::CreateEvent(const nsAReadableString& aEventType, nsIDOMEvent** aRetu
return NS_ERROR_FAILURE;
}
#if 0
PRBool nsDocument::AddProperty(JSContext *aContext, JSObject *aObj, jsval aID, jsval *aVp)
{
return PR_TRUE;
@ -3073,16 +3050,7 @@ PRBool nsDocument::InternalRegisterCompileEventHandler(JSContext* aContext, jsv
}
return PR_TRUE;
}
/**
* Finds text in content
*/
NS_IMETHODIMP nsDocument::FindNext(const nsAReadableString& aSearchStr, PRBool aMatchCase, PRBool aSearchDown, PRBool &aIsFound)
{
aIsFound = PR_FALSE;
return NS_ERROR_FAILURE;
}
#endif
NS_IMETHODIMP
nsDocument::InitDiskDocument(nsIFile *aFile)
@ -3268,39 +3236,27 @@ nsDocument::GetNodeInfoManager(nsINodeInfoManager*& aNodeInfoManager)
return NS_OK;
}
//
// FindContent does a depth-first search from aStartNode
// and returns the first of aTest1 or aTest2 which it finds.
// I think.
//
nsIContent* nsDocument::FindContent(const nsIContent* aStartNode,
const nsIContent* aTest1,
const nsIContent* aTest2) const
NS_IMETHODIMP
nsDocument::AddReference(void *aKey, nsISupports *aReference)
{
PRInt32 count;
aStartNode->ChildCount(count);
PRInt32 indx;
nsVoidKey key(aKey);
for(indx = 0; indx < count;indx++)
{
nsIContent* child;
aStartNode->ChildAt(indx, child);
nsIContent* content = FindContent(child,aTest1,aTest2);
if (content != nsnull) {
NS_IF_RELEASE(child);
return content;
}
if (child == aTest1 || child == aTest2) {
NS_IF_RELEASE(content);
return child;
}
NS_IF_RELEASE(child);
NS_IF_RELEASE(content);
if (mScriptGlobalObject) {
mContentWrapperHash.Put(&key, aReference);
}
return nsnull;
return NS_OK;
}
NS_IMETHODIMP
nsDocument::RemoveReference(void *aKey, nsISupports **aOldReference)
{
nsVoidKey key(aKey);
mContentWrapperHash.Remove(&key, aOldReference);
return NS_OK;
}
NS_IMETHODIMP
nsDocument::GetDTD(nsIDTD** aDTD) const

Просмотреть файл

@ -31,14 +31,13 @@
#include "nsIDOMDocumentXBL.h"
#include "nsIDOMNSDocument.h"
#include "nsIDOMDocumentStyle.h"
#include "nsIDOMDocumentRange.h"
#include "nsIDocumentObserver.h"
#include "nsIDOMEventReceiver.h"
#include "nsIDiskDocument.h"
#include "nsIDOMStyleSheetList.h"
#include "nsIScriptObjectOwner.h"
#include "nsIScriptGlobalObject.h"
#include "nsIDOMEventTarget.h"
#include "nsIJSScriptObject.h"
#include "nsIContent.h"
#include "nsGenericDOMNodeList.h"
#include "nsIPrincipal.h"
@ -49,6 +48,7 @@
#include "nsHashtable.h"
#include "nsIWordBreakerFactory.h"
#include "nsILineBreakerFactory.h"
#include "nsIScriptObjectPrincipal.h"
#include "nsIURI.h"
class nsIEventListenerManager;
@ -57,6 +57,7 @@ class nsIOutputStream;
class nsDocument;
class nsIDTD;
#if 0
class nsPostData : public nsIPostData {
public:
@ -120,7 +121,6 @@ protected:
class nsDOMStyleSheetList : public nsIDOMStyleSheetList,
public nsIScriptObjectOwner,
public nsIDocumentObserver
{
public:
@ -128,7 +128,8 @@ public:
virtual ~nsDOMStyleSheetList();
NS_DECL_ISUPPORTS
NS_DECL_IDOMSTYLESHEETLIST
NS_DECL_NSIDOMSTYLESHEETLIST
NS_IMETHOD BeginUpdate(nsIDocument *aDocument) { return NS_OK; }
NS_IMETHOD EndUpdate(nsIDocument *aDocument) { return NS_OK; }
@ -185,10 +186,6 @@ public:
nsIStyleRule* aStyleRule) { return NS_OK; }
NS_IMETHOD DocumentWillBeDestroyed(nsIDocument *aDocument);
// nsIScriptObjectOwner interface
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void* aScriptObject);
protected:
PRInt32 mLength;
nsIDocument* mDocument;
@ -202,9 +199,10 @@ class nsDocument : public nsIDocument,
public nsIDOMDocumentEvent,
public nsIDOMDocumentStyle,
public nsIDOMDocumentView,
public nsIDOMDocumentRange,
public nsIDOMDocumentXBL,
public nsIDOM3Node,
public nsIDiskDocument,
public nsIJSScriptObject,
public nsSupportsWeakReference,
public nsIDOMEventReceiver,
public nsIScriptObjectPrincipal
@ -309,8 +307,10 @@ public:
* Access HTTP header data (this may also get set from other sources, like
* HTML META tags).
*/
NS_IMETHOD GetHeaderData(nsIAtom* aHeaderField, nsAWritableString& aData) const;
NS_IMETHOD SetHeaderData(nsIAtom* aheaderField, const nsAReadableString& aData);
NS_IMETHOD GetHeaderData(nsIAtom* aHeaderField,
nsAWritableString& aData) const;
NS_IMETHOD SetHeaderData(nsIAtom* aheaderField,
const nsAReadableString& aData);
/**
* Create a new presentation shell that will use aContext for
@ -362,11 +362,13 @@ public:
virtual void AddStyleSheet(nsIStyleSheet* aSheet);
virtual void RemoveStyleSheet(nsIStyleSheet* aSheet);
NS_IMETHOD UpdateStyleSheets(nsISupportsArray* aOldSheets, nsISupportsArray* aNewSheets);
NS_IMETHOD UpdateStyleSheets(nsISupportsArray* aOldSheets,
nsISupportsArray* aNewSheets);
virtual void AddStyleSheetToStyleSets(nsIStyleSheet* aSheet);
virtual void RemoveStyleSheetFromStyleSets(nsIStyleSheet* aSheet);
NS_IMETHOD InsertStyleSheetAt(nsIStyleSheet* aSheet, PRInt32 aIndex, PRBool aNotify);
NS_IMETHOD InsertStyleSheetAt(nsIStyleSheet* aSheet, PRInt32 aIndex,
PRBool aNotify);
virtual void SetStyleSheetDisabledState(nsIStyleSheet* aSheet,
PRBool mDisabled);
@ -435,74 +437,47 @@ public:
NS_IMETHOD StyleRuleRemoved(nsIStyleSheet* aStyleSheet,
nsIStyleRule* aStyleRule);
/**
* Finds text in content
*/
NS_IMETHOD FindNext(const nsAReadableString &aSearchStr, PRBool aMatchCase, PRBool aSearchDown, PRBool &aIsFound);
NS_IMETHOD FlushPendingNotifications(PRBool aFlushReflows = PR_TRUE);
NS_IMETHOD GetAndIncrementContentID(PRInt32* aID);
NS_IMETHOD GetBindingManager(nsIBindingManager** aResult);
NS_IMETHOD GetNodeInfoManager(nsINodeInfoManager*& aNodeInfoManager);
NS_IMETHOD AddReference(void *aKey, nsISupports *aReference);
NS_IMETHOD RemoveReference(void *aKey, nsISupports **aOldReference);
public:
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void *aScriptObject);
// nsIDOMNode
NS_DECL_NSIDOMNODE
// nsIDOMDocument interface
NS_IMETHOD GetDoctype(nsIDOMDocumentType** aDoctype);
NS_IMETHOD GetImplementation(nsIDOMDOMImplementation** aImplementation);
NS_IMETHOD GetDocumentElement(nsIDOMElement** aDocumentElement);
// nsIDOM3Node
NS_DECL_NSIDOM3NODE
NS_IMETHOD CreateElement(const nsAReadableString& aTagName, nsIDOMElement** aReturn);
NS_IMETHOD CreateDocumentFragment(nsIDOMDocumentFragment** aReturn);
NS_IMETHOD CreateTextNode(const nsAReadableString& aData, nsIDOMText** aReturn);
NS_IMETHOD CreateComment(const nsAReadableString& aData, nsIDOMComment** aReturn);
NS_IMETHOD CreateCDATASection(const nsAReadableString& aData, nsIDOMCDATASection** aReturn);
NS_IMETHOD CreateProcessingInstruction(const nsAReadableString& aTarget, const nsAReadableString& aData, nsIDOMProcessingInstruction** aReturn);
NS_IMETHOD CreateAttribute(const nsAReadableString& aName, nsIDOMAttr** aReturn);
NS_IMETHOD CreateEntityReference(const nsAReadableString& aName, nsIDOMEntityReference** aReturn);
NS_IMETHOD GetElementsByTagName(const nsAReadableString& aTagname, nsIDOMNodeList** aReturn);
NS_IMETHOD GetElementsByTagNameNS(const nsAReadableString& aNamespaceURI, const nsAReadableString& aLocalName, nsIDOMNodeList** aReturn);
NS_IMETHOD GetStyleSheets(nsIDOMStyleSheetList** aStyleSheets);
NS_IMETHOD GetCharacterSet(nsAWritableString& aCharacterSet);
NS_IMETHOD ImportNode(nsIDOMNode* aImportedNode,
PRBool aDeep,
nsIDOMNode** aReturn);
NS_IMETHOD GetLocation(jsval* aLocation);
NS_IMETHOD SetLocation(jsval aLocation);
NS_IMETHOD CreateRange(nsIDOMRange** aReturn);
NS_IMETHOD Load (const nsAReadableString& aUrl);
NS_IMETHOD GetPlugins(nsIDOMPluginArray** aPlugins);
NS_IMETHOD GetBoxObjectFor(nsIDOMElement* aElement, nsIBoxObject** aResult);
NS_IMETHOD SetBoxObjectFor(nsIDOMElement* aElement, nsIBoxObject* aBoxObject);
// nsIDOMDocument
NS_DECL_NSIDOMDOCUMENT
/**
* Retrieve the "direction" property of the document.
*/
NS_IMETHOD GetDir(nsAWritableString& aDirection);
/**
* Set the "direction" property of the document.
*/
NS_IMETHOD SetDir(const nsAReadableString& aDirection);
// nsIDOMNode interface
NS_DECL_IDOMNODE
// nsIDOMDocumentView
NS_DECL_IDOMDOCUMENTVIEW
// nsIDOMDocumentXBL
NS_DECL_IDOMDOCUMENTXBL
// nsIDOMNSDocument
NS_DECL_NSIDOMNSDOCUMENT
// nsIDOMDocumentEvent
NS_DECL_IDOMDOCUMENTEVENT
NS_DECL_NSIDOMDOCUMENTEVENT
// nsIDOMDocumentStyle
NS_DECL_NSIDOMDOCUMENTSTYLE
// nsIDOMDocumentView
NS_DECL_NSIDOMDOCUMENTVIEW
// nsIDOMDocumentRange
NS_DECL_NSIDOMDOCUMENTRANGE
// nsIDOMDocumentXBL
NS_DECL_NSIDOMDOCUMENTXBL
// nsIDOMEventReceiver interface
NS_IMETHOD AddEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID);
NS_IMETHOD RemoveEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID);
NS_IMETHOD AddEventListenerByIID(nsIDOMEventListener *aListener,
const nsIID& aIID);
NS_IMETHOD RemoveEventListenerByIID(nsIDOMEventListener *aListener,
const nsIID& aIID);
NS_IMETHOD GetListenerManager(nsIEventListenerManager** aInstancePtrResult);
NS_IMETHOD GetNewListenerManager(nsIEventListenerManager **aInstancePtrResult);
NS_IMETHOD HandleEvent(nsIDOMEvent *aEvent);
@ -511,9 +486,11 @@ public:
NS_DECL_NSIDISKDOCUMENT
// nsIDOMEventTarget interface
NS_IMETHOD AddEventListener(const nsAReadableString& aType, nsIDOMEventListener* aListener,
NS_IMETHOD AddEventListener(const nsAReadableString& aType,
nsIDOMEventListener* aListener,
PRBool aUseCapture);
NS_IMETHOD RemoveEventListener(const nsAReadableString& aType, nsIDOMEventListener* aListener,
NS_IMETHOD RemoveEventListener(const nsAReadableString& aType,
nsIDOMEventListener* aListener,
PRBool aUseCapture);
NS_IMETHOD DispatchEvent(nsIDOMEvent* aEvent);
@ -527,43 +504,23 @@ public:
NS_IMETHOD_(PRBool) EventCaptureRegistration(PRInt32 aCapturerIncrement);
// nsIJSScriptObject interface
virtual PRBool AddProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp);
virtual PRBool DeleteProperty(JSContext *aContext,
JSObject *aObj, jsval aID, jsval *aVp);
virtual PRBool GetProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp);
virtual PRBool SetProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp);
virtual PRBool EnumerateProperty(JSContext *aContext, JSObject *aObj);
virtual PRBool Resolve(JSContext *aContext, JSObject *aObj, jsval aID,
PRBool *aDidDefineProperty);
virtual PRBool Convert(JSContext *aContext, JSObject *aObj, jsval aID);
virtual void Finalize(JSContext *aContext, JSObject *aObj);
virtual nsresult SetDocumentURL(nsIURI* aURI);
protected:
nsIContent* FindContent(const nsIContent* aStartNode,
const nsIContent* aTest1,
const nsIContent* aTest2) const;
NS_IMETHOD GetDTD(nsIDTD** aDTD) const;
protected:
virtual void InternalAddStyleSheet(nsIStyleSheet* aSheet); // subclass hooks for sheet ordering
virtual void InternalInsertStyleSheetAt(nsIStyleSheet* aSheet, PRInt32 aIndex);
virtual PRBool InternalRegisterCompileEventHandler(JSContext* aContext, jsval aPropName,
jsval *aVp, PRBool aCompile);
virtual void InternalInsertStyleSheetAt(nsIStyleSheet* aSheet,
PRInt32 aIndex);
nsDocument();
virtual ~nsDocument();
nsresult Init();
nsIArena* mArena;
nsString* mDocumentTitle;
nsString mDocumentTitle;
nsIURI* mDocumentURL;
nsCOMPtr<nsIURI> mDocumentBaseURL;
nsIPrincipal* mPrincipal;
@ -578,7 +535,6 @@ protected:
// mChildren, or null if no such element exists.
nsVoidArray mStyleSheets;
nsVoidArray mObservers;
void* mScriptObject;
nsCOMPtr<nsIScriptGlobalObject> mScriptGlobalObject;
nsIEventListenerManager* mListenerManager;
PRBool mInDestructor;
@ -607,6 +563,8 @@ protected:
nsSupportsHashtable* mBoxObjectTable;
PRInt32 mNumCapturers; //Number of capturing event handlers in doc. Used to optimize event delivery.
nsSupportsHashtable mContentWrapperHash;
private:
// These are not implemented and not supported.
nsDocument(const nsDocument& aOther);

Просмотреть файл

@ -23,19 +23,18 @@
#include "nsISupports.h"
#include "nsIContent.h"
#include "nsIDOMDocumentFragment.h"
#include "nsIScriptObjectOwner.h"
#include "nsGenericElement.h"
#include "nsINameSpaceManager.h"
#include "nsINodeInfo.h"
#include "nsNodeInfoManager.h"
#include "nsIDocument.h"
#include "nsIDOMDocument.h"
#include "nsIDOMScriptObjectFactory.h"
#include "nsDOMError.h"
class nsDocumentFragment : public nsGenericContainerElement,
public nsIDOMDocumentFragment
public nsIDOMDocumentFragment,
public nsIDOM3Node
{
public:
nsDocumentFragment(nsIDocument* aOwnerDocument);
@ -101,12 +100,12 @@ public:
PRBool* aReturn)
{ return nsGenericContainerElement::IsSupported(aFeature, aVersion,
aReturn); }
// nsIDOM3Node
NS_IMETHOD GetBaseURI(nsAWritableString& aURI)
{ return nsGenericContainerElement::GetBaseURI(aURI); }
// interface nsIScriptObjectOwner
NS_IMETHOD GetScriptObject(nsIScriptContext* aContext, void** aScriptObject);
{ aURI.Truncate(); return NS_OK; }
// nsIContent
NS_IMETHOD SetParent(nsIContent* aParent)
{ return NS_OK; }
NS_IMETHOD SetAttribute(PRInt32 aNameSpaceID, nsIAtom* aName,
@ -213,20 +212,30 @@ nsDocumentFragment::nsDocumentFragment(nsIDocument* aOwnerDocument)
nsDocumentFragment::~nsDocumentFragment()
{
}
NS_IMPL_ADDREF(nsDocumentFragment)
NS_IMPL_RELEASE(nsDocumentFragment)
// XPConnect interface list for nsDocumentFragment
NS_CLASSINFO_MAP_BEGIN(DocumentFragment)
NS_CLASSINFO_MAP_ENTRY(nsIDOMDocumentFragment)
NS_CLASSINFO_MAP_ENTRY(nsIDOM3Node)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsDocumentFragment
NS_INTERFACE_MAP_BEGIN(nsDocumentFragment)
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentFragment)
NS_INTERFACE_MAP_ENTRY(nsIDOMNode)
NS_INTERFACE_MAP_ENTRY(nsIDOM3Node)
NS_INTERFACE_MAP_ENTRY(nsIContent)
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectOwner)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIContent)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(DocumentFragment)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsDocumentFragment)
NS_IMPL_RELEASE(nsDocumentFragment)
NS_IMETHODIMP
nsDocumentFragment::GetNodeType(PRUint16* aNodeType)
{
@ -281,34 +290,3 @@ nsDocumentFragment::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
return NS_OK;
}
NS_IMETHODIMP
nsDocumentFragment::GetScriptObject(nsIScriptContext* aContext,
void** aScriptObject)
{
nsresult res = NS_OK;
*aScriptObject = nsnull;
nsDOMSlots *slots = GetDOMSlots();
if (slots && !mDOMSlots->mScriptObject) {
nsCOMPtr<nsIDOMScriptObjectFactory> factory;
res = GetScriptObjectFactory(getter_AddRefs(factory));
if (NS_OK != res) {
return res;
}
res = factory->NewScriptDocumentFragment(aContext,
NS_STATIC_CAST(nsIDOMDocumentFragment *, this),
mOwnerDocument,
(void**)&slots->mScriptObject);
}
if (slots) {
*aScriptObject = slots->mScriptObject;
}
return res;
}

Просмотреть файл

@ -242,9 +242,9 @@ public:
NS_DECL_ISUPPORTS
/*BEGIN implementations of focus event handler interface*/
virtual nsresult HandleEvent(nsIDOMEvent* aEvent);
virtual nsresult Focus(nsIDOMEvent* aEvent);
virtual nsresult Blur(nsIDOMEvent* aEvent);
NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent);
NS_IMETHOD Focus(nsIDOMEvent* aEvent);
NS_IMETHOD Blur(nsIDOMEvent* aEvent);
/*END implementations of focus event handler interface*/
nsresult Init(DocumentViewerImpl *aDocViewer);
@ -5231,7 +5231,7 @@ nsDocViewerFocusListener::HandleEvent(nsIDOMEvent* aEvent)
return NS_OK;
}
nsresult
NS_IMETHODIMP
nsDocViewerFocusListener::Focus(nsIDOMEvent* aEvent)
{
nsCOMPtr<nsIPresShell> shell;
@ -5256,8 +5256,8 @@ nsDocViewerFocusListener::Focus(nsIDOMEvent* aEvent)
}
return result;
}
nsresult
NS_IMETHODIMP
nsDocViewerFocusListener::Blur(nsIDOMEvent* aEvent)
{
nsCOMPtr<nsIPresShell> shell;

Просмотреть файл

@ -42,7 +42,6 @@
#include "nsISizeOfHandler.h"
#include "nsIDOMEvent.h"
#include "nsIDOMText.h"
#include "nsIDOMScriptObjectFactory.h"
#include "nsIScriptGlobalObject.h"
#include "prprf.h"
#include "nsCOMPtr.h"
@ -54,7 +53,6 @@ nsGenericDOMDataNode::nsGenericDOMDataNode()
{
mDocument = nsnull;
mParent = nsnull;
mScriptObject = nsnull;
mListenerManager = nsnull;
mRangeList = nsnull;
}
@ -207,14 +205,16 @@ nsGenericDOMDataNode::GetOwnerDocument(nsIDOMDocument** aOwnerDocument)
nsresult
nsGenericDOMDataNode::GetNamespaceURI(nsAWritableString& aNamespaceURI)
{
aNamespaceURI.Truncate();
SetDOMStringToNull(aNamespaceURI);
return NS_OK;
}
nsresult
nsGenericDOMDataNode::GetPrefix(nsAWritableString& aPrefix)
{
aPrefix.Truncate();
SetDOMStringToNull(aPrefix);
return NS_OK;
}
@ -224,6 +224,14 @@ nsGenericDOMDataNode::SetPrefix(const nsAReadableString& aPrefix)
return NS_ERROR_DOM_NAMESPACE_ERR;
}
nsresult
nsGenericDOMDataNode::GetLocalName(nsAWritableString& aLocalName)
{
SetDOMStringToNull(aLocalName);
return NS_OK;
}
nsresult
nsGenericDOMDataNode::Normalize()
{
@ -244,7 +252,7 @@ nsGenericDOMDataNode::GetBaseURI(nsAWritableString& aURI)
aURI.Truncate();
nsresult rv = NS_OK;
// DOM Data Node inherits the base from its parent element/document
nsCOMPtr<nsIDOMNode> node;
nsCOMPtr<nsIDOM3Node> node;
if (mParent) {
node = do_QueryInterface(mParent);
} else if (mDocument) {
@ -314,14 +322,14 @@ nsGenericDOMDataNode::SetData(nsIContent *aOuterContent, const nsAReadableString
return result;
}
nsresult
nsresult
nsGenericDOMDataNode::GetLength(PRUint32* aLength)
{
*aLength = mText.GetLength();
return NS_OK;
}
nsresult
nsresult
nsGenericDOMDataNode::SubstringData(PRUint32 aStart,
PRUint32 aCount,
nsAWritableString& aReturn)
@ -486,55 +494,6 @@ nsGenericDOMDataNode::ReplaceData(nsIContent *aOuterContent, PRUint32 aOffset,
//----------------------------------------------------------------------
// nsIScriptObjectOwner implementation
nsresult
nsGenericDOMDataNode::GetScriptObject(nsIContent *aOuterContent,
nsIScriptContext* aContext,
void** aScriptObject)
{
nsresult res = NS_OK;
if (nsnull == mScriptObject) {
nsIDOMScriptObjectFactory *factory;
res = nsGenericElement::GetScriptObjectFactory(&factory);
if (NS_OK != res) {
return res;
}
nsIDOMNode* node;
PRUint16 nodeType;
res = aOuterContent->QueryInterface(NS_GET_IID(nsIDOMNode), (void**)&node);
if (NS_OK != res) {
return res;
}
node->GetNodeType(&nodeType);
res = factory->NewScriptCharacterData(nodeType,
aContext, aOuterContent,
mParent, (void**)&mScriptObject);
if (nsnull != mDocument) {
aContext->AddNamedReference((void *)&mScriptObject,
mScriptObject,
"nsGenericDOMDataNode::mScriptObject");
}
NS_RELEASE(node);
NS_RELEASE(factory);
}
*aScriptObject = mScriptObject;
return res;
}
nsresult
nsGenericDOMDataNode::SetScriptObject(void *aScriptObject)
{
mScriptObject = aScriptObject;
return NS_OK;
}
//----------------------------------------------------------------------
nsresult
nsGenericDOMDataNode::GetListenerManager(nsIContent* aOuterContent, nsIEventListenerManager** aResult)
{
@ -618,14 +577,16 @@ nsGenericDOMDataNode::SetDocument(nsIDocument* aDocument, PRBool aDeep, PRBool a
// If we were part of a document, make sure we get rid of the
// script context reference to our script object so that our
// script object can be freed (or collected).
if ((nsnull != mDocument) && (nsnull != mScriptObject)) {
if (mDocument) {
nsCOMPtr<nsIScriptGlobalObject> globalObject;
mDocument->GetScriptGlobalObject(getter_AddRefs(globalObject));
if (globalObject) {
nsCOMPtr<nsIScriptContext> context;
if (NS_OK == globalObject->GetContext(getter_AddRefs(context)) && context) {
context->RemoveReference((void *)&mScriptObject,
mScriptObject);
// context->RemoveReference((void *)&mScriptObject,
// mScriptObject);
// XXX: UnRoot!
}
}
}
@ -636,15 +597,17 @@ nsGenericDOMDataNode::SetDocument(nsIDocument* aDocument, PRBool aDeep, PRBool a
// to a document, make sure that the script context adds a
// reference to our script object. This will ensure that it
// won't be freed (or collected) out from under us.
if ((nsnull != mDocument) && (nsnull != mScriptObject)) {
if (mDocument) {
nsCOMPtr<nsIScriptGlobalObject> globalObject;
mDocument->GetScriptGlobalObject(getter_AddRefs(globalObject));
if (globalObject) {
nsCOMPtr<nsIScriptContext> context;
if (NS_OK == globalObject->GetContext(getter_AddRefs(context)) && context) {
context->AddNamedReference((void *)&mScriptObject,
mScriptObject,
"Text");
// context->AddNamedReference((void *)&mScriptObject,
// mScriptObject,
// "Text");
// XXX: Root!
}
}
}

Просмотреть файл

@ -24,7 +24,6 @@
#include "nsCOMPtr.h"
#include "nsIDOMCharacterData.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIContent.h"
#include "nsTextFragment.h"
@ -33,6 +32,7 @@
#include "nsITextContent.h"
#include "nsDOMError.h"
#include "nsIEventListenerManager.h"
#include "nsGenericElement.h"
class nsIDOMAttr;
@ -118,6 +118,7 @@ struct nsGenericDOMDataNode {
}
nsresult GetOwnerDocument(nsIDOMDocument** aOwnerDocument);
nsresult GetNamespaceURI(nsAWritableString& aNamespaceURI);
nsresult GetLocalName(nsAWritableString& aLocalName);
nsresult GetPrefix(nsAWritableString& aPrefix);
nsresult SetPrefix(const nsAReadableString& aPrefix);
nsresult Normalize();
@ -140,11 +141,6 @@ struct nsGenericDOMDataNode {
PRUint32 aCount, const nsAReadableString& aArg);
// nsIScriptObjectOwner interface
nsresult GetScriptObject(nsIContent *aOuterContent,
nsIScriptContext* aContext, void** aScriptObject);
nsresult SetScriptObject(void *aScriptObject);
// Implementation for nsIContent
nsresult GetDocument(nsIDocument*& aResult) const;
nsresult SetDocument(nsIDocument* aDocument, PRBool aDeep, PRBool aCompileEventHandlers);
@ -266,7 +262,6 @@ struct nsGenericDOMDataNode {
nsIDocument* mDocument;
nsIContent* mParent;
void* mScriptObject;
nsIEventListenerManager* mListenerManager;
nsTextFragment mText;
@ -284,10 +279,10 @@ struct nsGenericDOMDataNode {
* NS_IMETHOD GetNodeType(PRUint16* aNodeType);
* NS_IMETHOD CloneNode(PRBool aDeep, nsIDOMNode** aReturn);
*/
#define NS_IMPL_IDOMNODE_USING_GENERIC_DOM_DATA(_g) \
#define NS_IMPL_NSIDOMNODE_USING_GENERIC_DOM_DATA(_g) \
NS_IMETHOD GetNodeName(nsAWritableString& aNodeName); \
NS_IMETHOD GetLocalName(nsAWritableString& aLocalName) { \
return GetNodeName(aLocalName); \
return _g.GetLocalName(aLocalName); \
} \
NS_IMETHOD GetNodeValue(nsAWritableString& aNodeValue) { \
return _g.GetNodeValue(aNodeValue); \
@ -362,7 +357,7 @@ struct nsGenericDOMDataNode {
} \
NS_IMETHOD CloneNode(PRBool aDeep, nsIDOMNode** aReturn);
#define NS_IMPL_IDOMCHARACTERDATA_USING_GENERIC_DOM_DATA(_g) \
#define NS_IMPL_NSIDOMCHARACTERDATA_USING_GENERIC_DOM_DATA(_g) \
NS_IMETHOD GetData(nsAWritableString& aData) { \
return _g.GetData(aData); \
} \
@ -395,7 +390,7 @@ struct nsGenericDOMDataNode {
* generic content object (either nsGenericHTMLLeafElement or
* nsGenericHTMLContainerContent)
*/
#define NS_IMPL_IDOMEVENTRECEIVER_USING_GENERIC_DOM_DATA(_g) \
#define NS_IMPL_NSIDOMEVENTRECEIVER_USING_GENERIC_DOM_DATA(_g) \
NS_IMETHOD AddEventListenerByIID(nsIDOMEventListener *aListener, \
const nsIID& aIID) { \
return _g.AddEventListenerByIID(aListener, aIID); \
@ -424,20 +419,6 @@ struct nsGenericDOMDataNode {
return _g.RemoveEventListener(aType, aListener, aUseCapture); \
}
/**
* Implement the nsIScriptObjectOwner API by forwarding the methods to a
* generic content object (either nsGenericHTMLLeafElement or
* nsGenericHTMLContainerContent)
*/
#define NS_IMPL_ISCRIPTOBJECTOWNER_USING_GENERIC_DOM_DATA(_g) \
NS_IMETHOD GetScriptObject(nsIScriptContext* aContext, \
void** aScriptObject) { \
return _g.GetScriptObject(this, aContext, aScriptObject); \
} \
NS_IMETHOD SetScriptObject(void *aScriptObject) { \
return _g.SetScriptObject(aScriptObject); \
}
#define NS_IMPL_ICONTENT_USING_GENERIC_DOM_DATA(_g) \
NS_IMETHOD GetDocument(nsIDocument*& aResult) const { \
return _g.GetDocument(aResult); \
@ -543,17 +524,18 @@ struct nsGenericDOMDataNode {
return _g.RemoveFocus(aPresContext); \
} \
NS_IMETHOD GetBindingParent(nsIContent** aContent) { \
return _g.GetBindingParent(aContent); \
return _g.GetBindingParent(aContent); \
} \
NS_IMETHOD SetBindingParent(nsIContent* aParent) { \
return _g.SetBindingParent(aParent); \
}
NS_IMETHOD SetBindingParent(nsIContent* aParent) { \
return _g.SetBindingParent(aParent); \
} \
NS_IMETHOD_(PRBool) IsContentOfType(PRUint32 aFlags);
/**
* Implement the nsIDOMText API by forwarding the methods to a
* generic character data content object.
*/
#define NS_IMPL_IDOMTEXT_USING_GENERIC_DOM_DATA(_g) \
#define NS_IMPL_NSIDOMTEXT_USING_GENERIC_DOM_DATA(_g) \
NS_IMETHOD SplitText(PRUint32 aOffset, nsIDOMText** aReturn){ \
return _g.SplitText(this, aOffset, aReturn); \
}
@ -595,51 +577,27 @@ struct nsGenericDOMDataNode {
* This macro implements the portion of query interface that is
* generic to all html content objects.
*/
#define NS_IMPL_DOM_DATA_QUERY_INTERFACE(_id, _iptr, _this) \
if (_id.Equals(NS_GET_IID(nsISupports))) { \
nsIContent* tmp = _this; \
nsISupports* tmp2 = tmp; \
*_iptr = (void*) tmp2; \
NS_ADDREF_THIS(); \
return NS_OK; \
} \
if (_id.Equals(NS_GET_IID(nsIDOMNode))) { \
nsIDOMNode* tmp = _this; \
*_iptr = (void*) tmp; \
NS_ADDREF_THIS(); \
return NS_OK; \
} \
if (_id.Equals(NS_GET_IID(nsIDOMCharacterData))) { \
nsIDOMCharacterData* tmp = _this; \
*_iptr = (void*) tmp; \
NS_ADDREF_THIS(); \
return NS_OK; \
} \
if (_id.Equals(NS_GET_IID(nsIDOMEventReceiver))) { \
nsCOMPtr<nsIEventListenerManager> man; \
if (NS_SUCCEEDED(mInner.GetListenerManager(this, getter_AddRefs(man)))){ \
return man->QueryInterface(NS_GET_IID(nsIDOMEventReceiver), (void**)_iptr); \
} \
return NS_NOINTERFACE; \
} \
if (_id.Equals(NS_GET_IID(nsIDOMEventTarget))) { \
nsCOMPtr<nsIEventListenerManager> man; \
if (NS_SUCCEEDED(mInner.GetListenerManager(this, getter_AddRefs(man)))){ \
return man->QueryInterface(NS_GET_IID(nsIDOMEventTarget), (void**)_iptr); \
} \
return NS_NOINTERFACE; \
} \
if (_id.Equals(NS_GET_IID(nsIScriptObjectOwner))) { \
nsIScriptObjectOwner* tmp = _this; \
*_iptr = (void*) tmp; \
NS_ADDREF_THIS(); \
return NS_OK; \
} \
if (_id.Equals(NS_GET_IID(nsIContent))) { \
nsIContent* tmp = _this; \
*_iptr = (void*) tmp; \
NS_ADDREF_THIS(); \
return NS_OK; \
}
#define NS_INTERFACE_MAP_ENTRY_DOM_DATA() \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIContent) \
NS_INTERFACE_MAP_ENTRY(nsIDOMNode) \
if (aIID.Equals(NS_GET_IID(nsIDOMEventReceiver))) { \
nsCOMPtr<nsIEventListenerManager> man; \
if (NS_SUCCEEDED(mInner.GetListenerManager(this, getter_AddRefs(man)))) { \
return man->QueryInterface(NS_GET_IID(nsIDOMEventReceiver), \
(void**)aInstancePtr); \
} \
return NS_NOINTERFACE; \
} else \
if (aIID.Equals(NS_GET_IID(nsIDOMEventTarget))) { \
nsCOMPtr<nsIEventListenerManager> man; \
if (NS_SUCCEEDED(mInner.GetListenerManager(this, getter_AddRefs(man)))){ \
return man->QueryInterface(NS_GET_IID(nsIDOMEventTarget), \
(void**)aInstancePtr); \
} \
return NS_NOINTERFACE; \
} else \
NS_INTERFACE_MAP_ENTRY(nsIContent) \
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOM3Node, nsNode3Tearoff(this))
#endif /* nsGenericDOMDataNode_h___ */

Просмотреть файл

@ -21,68 +21,33 @@
*/
#include "nsGenericDOMNodeList.h"
#include "nsIDOMScriptObjectFactory.h"
#include "nsGenericElement.h"
nsGenericDOMNodeList::nsGenericDOMNodeList()
{
NS_INIT_REFCNT();
mScriptObject = nsnull;
}
nsGenericDOMNodeList::~nsGenericDOMNodeList()
{
}
nsresult
nsGenericDOMNodeList::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
if (NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
if (aIID.Equals(NS_GET_IID(nsIDOMNodeList))) {
*aInstancePtr = (void*)(nsIDOMNodeList*)this;
AddRef();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsIScriptObjectOwner))) {
*aInstancePtr = (void*)(nsIScriptObjectOwner*)this;
AddRef();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsISupports))) {
*aInstancePtr = (void*)(nsISupports*)(nsIDOMNodeList*)this;
AddRef();
return NS_OK;
}
return NS_NOINTERFACE;
}
NS_IMPL_ADDREF(nsGenericDOMNodeList)
NS_IMPL_RELEASE(nsGenericDOMNodeList)
NS_IMETHODIMP
nsGenericDOMNodeList::GetScriptObject(nsIScriptContext *aContext, void** aScriptObject)
{
nsresult res = NS_OK;
if (nsnull == mScriptObject) {
nsIDOMScriptObjectFactory *factory;
res = nsGenericElement::GetScriptObjectFactory(&factory);
if (NS_OK != res) {
return res;
}
res = factory->NewScriptNodeList(aContext, (nsISupports *)(nsIDOMNodeList *)this, nsnull, (void**)&mScriptObject);
NS_RELEASE(factory);
}
*aScriptObject = mScriptObject;
return res;
}
// XPConnect interface list for nsGenericDOMNodeList
NS_CLASSINFO_MAP_BEGIN(NodeList)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNodeList)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsGenericDOMNodeList
NS_INTERFACE_MAP_BEGIN(nsGenericDOMNodeList)
NS_INTERFACE_MAP_ENTRY(nsIDOMNodeList)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(NodeList)
NS_INTERFACE_MAP_END
NS_IMETHODIMP
nsGenericDOMNodeList::SetScriptObject(void *aScriptObject)
{
mScriptObject = aScriptObject;
return NS_OK;
}

Просмотреть файл

@ -25,19 +25,16 @@
#include "nsISupports.h"
#include "nsIDOMNodeList.h"
#include "nsIScriptObjectOwner.h"
/**
* This is a base class for a generic DOM Node List. The base class
* provides implementations for nsISupports and nsIScriptObjectOwner,
* but it is up to the subclass to implement the core node list
* methods:
* provides implementations for nsISupports, it is up to the subclass
* to implement the core node list methods:
*
* GetLength
* Item
*
*/
class nsGenericDOMNodeList : public nsIDOMNodeList,
public nsIScriptObjectOwner
* */
class nsGenericDOMNodeList : public nsIDOMNodeList
{
public:
nsGenericDOMNodeList();
@ -45,16 +42,10 @@ public:
NS_DECL_ISUPPORTS
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void *aScriptObject);
// The following need to be defined in the subclass
// nsIDOMNodeList interface
NS_IMETHOD GetLength(PRUint32* aLength)=0;
NS_IMETHOD Item(PRUint32 aIndex, nsIDOMNode** aReturn)=0;
protected:
void* mScriptObject;
};
#endif // nsGenericDOMNodeList_h__

Просмотреть файл

@ -51,7 +51,6 @@
#include "nsIPrivateDOMEvent.h"
#include "nsDOMCID.h"
#include "nsIServiceManager.h"
#include "nsIDOMScriptObjectFactory.h"
#include "nsIDOMCSSStyleDeclaration.h"
#include "nsDOMCSSDeclaration.h"
#include "nsINameSpaceManager.h"
@ -345,38 +344,89 @@ nsCheapVoidArray::SwitchToVector()
return vector;
}
//----------------------------------------------------------------------
// XXX Currently, the script object factory is global. The way we
// obtain it should, at least, be made thread-safe later. Ideally,
// we'd find a better way.
nsIDOMScriptObjectFactory* nsGenericElement::gScriptObjectFactory = nsnull;
static NS_DEFINE_IID(kDOMScriptObjectFactoryCID, NS_DOM_SCRIPT_OBJECT_FACTORY_CID);
nsresult
nsGenericElement::GetScriptObjectFactory(nsIDOMScriptObjectFactory **aResult)
NS_IMETHODIMP
nsNode3Tearoff::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
nsresult result = NS_OK;
if (aIID.Equals(NS_GET_IID(nsIDOM3Node))) {
nsISupports *inst = this;
if (nsnull == gScriptObjectFactory) {
result = nsServiceManager::GetService(kDOMScriptObjectFactoryCID,
NS_GET_IID(nsIDOMScriptObjectFactory),
(nsISupports **)&gScriptObjectFactory);
if (result != NS_OK) {
return result;
NS_ADDREF(inst);
*aInstancePtr = inst;
return NS_OK;
}
return mContent->QueryInterface(aIID, aInstancePtr);
}
NS_IMPL_ADDREF(nsNode3Tearoff)
NS_IMPL_RELEASE(nsNode3Tearoff)
NS_IMETHODIMP
nsNode3Tearoff::GetBaseURI(nsAWritableString& aURI)
{
nsCOMPtr<nsIURI> uri;
nsCOMPtr<nsIDocument> doc;
mContent->GetDocument(*getter_AddRefs(doc));
nsCOMPtr<nsIXMLDocument> xmlDoc(do_QueryInterface(doc));
aURI.Truncate();
if (xmlDoc) {
// XML documents can use the XML Base (W3C spec) way of setting
// the base per element. We look at this node and its ancestors
// until we find the first XML content and get it's base.
nsCOMPtr<nsIContent> content(mContent);
while (content) {
nsCOMPtr<nsIXMLContent> xmlContent(do_QueryInterface(content));
if (xmlContent) {
xmlContent->GetXMLBaseURI(getter_AddRefs(uri));
break;
}
nsCOMPtr<nsIContent> tmp(content);
tmp->GetParent(*getter_AddRefs(content));
}
}
*aResult = gScriptObjectFactory;
NS_ADDREF(gScriptObjectFactory);
return result;
if (!uri && doc) {
// HTML document or for some reason there was no XML content in
// XML document
doc->GetBaseURL(*getter_AddRefs(uri));
if (!uri) {
uri = dont_AddRef(doc->GetDocumentURL());
}
}
if (uri) {
nsXPIDLCString spec;
uri->GetSpec(getter_Copies(spec));
CopyASCIItoUCS2(nsLiteralCString(spec), aURI);
}
return NS_OK;
}
//----------------------------------------------------------------------
/* static */ void
nsGenericElement::Shutdown()
{
NS_IF_RELEASE(gScriptObjectFactory); // assigns null
}
nsGenericElement::nsGenericElement() : mDocument(nsnull), mParent(nsnull),
@ -426,7 +476,6 @@ nsGenericElement::GetDOMSlots()
if (!mDOMSlots)
return nsnull;
mDOMSlots->mScriptObject = nsnull;
mDOMSlots->mChildNodes = nsnull;
mDOMSlots->mStyle = nsnull;
mDOMSlots->mAttributeMap = nsnull;
@ -442,7 +491,6 @@ void
nsGenericElement::MaybeClearDOMSlots()
{
if (mDOMSlots &&
!mDOMSlots->mScriptObject &&
!mDOMSlots->mChildNodes &&
!mDOMSlots->mStyle &&
!mDOMSlots->mAttributeMap &&
@ -481,7 +529,10 @@ nsGenericElement::GetLocalName(nsAWritableString& aLocalName)
NS_IMETHODIMP
nsGenericElement::GetNodeValue(nsAWritableString& aNodeValue)
{
// XXX: Null string
aNodeValue.Truncate();
return NS_OK;
}
@ -630,7 +681,7 @@ nsGenericElement::SetPrefix(const nsAReadableString& aPrefix)
nsINodeInfo *newNodeInfo = nsnull;
nsCOMPtr<nsIAtom> prefix;
if (aPrefix.Length()) {
if (aPrefix.Length() && !DOMStringIsNull(aPrefix)) {
prefix = dont_AddRef(NS_NewAtom(aPrefix));
NS_ENSURE_TRUE(prefix, NS_ERROR_OUT_OF_MEMORY);
}
@ -707,48 +758,6 @@ nsGenericElement::GetXMLBaseURI(nsIURI **aURI)
return NS_OK;
}
NS_IMETHODIMP
nsGenericElement::GetBaseURI(nsAWritableString& aURI)
{
aURI.Truncate();
nsCOMPtr<nsIURI> uri;
nsCOMPtr<nsIXMLDocument> xmlDoc(do_QueryInterface(mDocument));
if (xmlDoc) {
// XML documents can use the XML Base (W3C spec) way of setting the base
// per element. We look at this node and its ancestors until we find
// the first XML content and get it's base.
nsCOMPtr<nsIContent> content(do_QueryInterface(NS_STATIC_CAST(nsIContent*,this)));
while (content) {
nsCOMPtr<nsIXMLContent> xmlContent(do_QueryInterface(content));
if (xmlContent) {
xmlContent->GetXMLBaseURI(getter_AddRefs(uri));
break;
}
nsCOMPtr<nsIContent> tmp(content);
tmp->GetParent(*getter_AddRefs(content));
}
}
if (!uri && mDocument) {
// HTML document or for some reason there was no XML content in XML document
mDocument->GetBaseURL(*getter_AddRefs(uri));
if (!uri) {
uri = dont_AddRef(mDocument->GetDocumentURL());
}
}
if (uri) {
nsXPIDLCString spec;
uri->GetSpec(getter_Copies(spec));
if (spec) {
CopyASCIItoUCS2(nsLiteralCString(spec), aURI);
}
}
return NS_OK;
}
NS_IMETHODIMP
nsGenericElement::GetAttributes(nsIDOMNamedNodeMap** aAttributes)
{
@ -791,7 +800,12 @@ nsGenericElement::GetAttribute(const nsAReadableString& aName,
ni->GetNamespaceID(nsid);
ni->GetNameAtom(*getter_AddRefs(nameAtom));
NS_STATIC_CAST(nsIContent *, this)->GetAttribute(nsid, nameAtom, aReturn);
nsresult rv = NS_STATIC_CAST(nsIContent *,
this)->GetAttribute(nsid, nameAtom, aReturn);
if (rv = NS_CONTENT_ATTR_NOT_THERE) {
// XXX: Null aReturn
}
return NS_OK;
}
@ -1280,17 +1294,6 @@ nsGenericElement::SetDocument(nsIDocument* aDocument, PRBool aDeep,
// If we were part of a document, make sure we get rid of the
// script context reference to our script object so that our
// script object can be freed (or collected).
if (mDocument && mDOMSlots && mDOMSlots->mScriptObject) {
nsCOMPtr<nsIScriptGlobalObject> globalObject;
mDocument->GetScriptGlobalObject(getter_AddRefs(globalObject));
if (globalObject) {
nsCOMPtr<nsIScriptContext> context;
if (NS_OK == globalObject->GetContext(getter_AddRefs(context)) && context) {
context->RemoveReference((void *)&mDOMSlots->mScriptObject,
mDOMSlots->mScriptObject);
}
}
}
if (mDocument && aDeep) {
// Notify XBL- & nsIAnonymousContentCreator-generated
@ -1312,23 +1315,6 @@ nsGenericElement::SetDocument(nsIDocument* aDocument, PRBool aDeep,
}
mDocument = aDocument;
// If we already have a script object and now we're being added
// to a document, make sure that the script context adds a
// reference to our script object. This will ensure that it
// won't be freed (or collected) out from under us.
if (mDocument && mDOMSlots && mDOMSlots->mScriptObject) {
nsCOMPtr<nsIScriptGlobalObject> globalObject;
mDocument->GetScriptGlobalObject(getter_AddRefs(globalObject));
if (globalObject) {
nsCOMPtr<nsIScriptContext> context;
if (NS_OK == globalObject->GetContext(getter_AddRefs(context)) && context) {
context->AddNamedReference((void *)&mDOMSlots->mScriptObject,
mDOMSlots->mScriptObject,
"nsGenericElement::mScriptObject");
}
}
}
}
if (PR_TRUE == aDeep) {
@ -1351,6 +1337,7 @@ nsresult
nsGenericElement::SetParent(nsIContent* aParent)
{
mParent = aParent;
return NS_OK;
}
@ -1822,6 +1809,11 @@ nsGenericElement::SetBindingParent(nsIContent* aParent)
return NS_OK;
}
NS_IMETHODIMP_(PRBool)
nsGenericElement::IsContentOfType(PRUint32 aFlags)
{
return !(aFlags & ~eELEMENT);
}
//----------------------------------------------------------------------
@ -1869,125 +1861,6 @@ nsGenericElement::RenderFrame(nsIPresContext* aPresContext)
//----------------------------------------------------------------------
// nsIScriptObjectOwner implementation
nsresult
nsGenericElement::GetScriptObject(nsIScriptContext* aContext,
void** aScriptObject)
{
nsresult res = NS_OK;
nsDOMSlots *slots = GetDOMSlots();
if (!slots->mScriptObject) {
nsIDOMScriptObjectFactory *factory;
res = GetScriptObjectFactory(&factory);
if (NS_OK != res) {
return res;
}
nsAutoString tag;
mNodeInfo->GetName(tag);
void* scriptObject;
res = factory->NewScriptElement(tag, aContext,
NS_STATIC_CAST(nsIHTMLContent *, this),
mParent ? (nsISupports*)mParent : (nsISupports*)mDocument,
(void**)&scriptObject);
NS_RELEASE(factory);
NS_WARN_IF_FALSE(scriptObject,
"Eeek! Cound't create script object!");
if (slots->mScriptObject) {
// We must have re-entered; discard the newly created
// script object and use the one created during the
// nesting instead.
JSContext* cx = (JSContext*) aContext->GetNativeContext();
::JS_SetPrivate(cx, (JSObject*) scriptObject, nsnull);
// Since we've eagerly cleared the transient script
// object's native pointer, we now need to ``manually''
// balance the reference that it had to us
Release();
*aScriptObject = slots->mScriptObject;
return NS_OK;
}
slots->mScriptObject = scriptObject;
if (mDocument && slots->mScriptObject) {
aContext->AddNamedReference((void *)&slots->mScriptObject,
slots->mScriptObject,
"nsGenericElement::mScriptObject");
// See if we have a frame.
nsCOMPtr<nsIPresShell> shell = getter_AddRefs(mDocument->GetShellAt(0));
if (shell) {
nsIFrame* frame;
shell->GetPrimaryFrameFor(this, &frame);
if (!frame) {
// We must ensure that the XBL Binding is installed before we hand
// back this object.
nsCOMPtr<nsIBindingManager> bindingManager;
mDocument->GetBindingManager(getter_AddRefs(bindingManager));
nsCOMPtr<nsIXBLBinding> binding;
bindingManager->GetBinding(this, getter_AddRefs(binding));
if (!binding) {
nsCOMPtr<nsIScriptGlobalObject> global;
mDocument->GetScriptGlobalObject(getter_AddRefs(global));
nsCOMPtr<nsIDOMViewCSS> viewCSS(do_QueryInterface(global));
if (viewCSS) {
nsCOMPtr<nsIDOMCSSStyleDeclaration> cssDecl;
nsAutoString empty;
nsCOMPtr<nsIDOMElement> elt(do_QueryInterface(NS_STATIC_CAST(nsIHTMLContent *, this)));
viewCSS->GetComputedStyle(elt, empty, getter_AddRefs(cssDecl));
if (cssDecl) {
nsAutoString behavior; behavior.Assign(NS_LITERAL_STRING("-moz-binding"));
nsAutoString value;
cssDecl->GetPropertyValue(behavior, value);
if (!value.IsEmpty()) {
// We have a binding that must be installed.
nsresult rv;
PRBool dummy;
NS_WITH_SERVICE(nsIXBLService, xblService, "@mozilla.org/xbl;1", &rv);
xblService->LoadBindings(this, value, PR_FALSE, getter_AddRefs(binding), &dummy);
if (binding) {
binding->ExecuteAttachedHandler();
}
}
}
}
}
}
}
}
}
*aScriptObject = slots->mScriptObject;
return res;
}
nsresult
nsGenericElement::SetScriptObject(void *aScriptObject)
{
nsDOMSlots *slots = GetDOMSlots();
slots->mScriptObject = aScriptObject;
if (!aScriptObject) {
if (slots->mListenerManager) {
slots->mListenerManager->RemoveAllListeners(PR_TRUE);
}
MaybeClearDOMSlots();
}
return NS_OK;
}
//----------------------------------------------------------------------
nsresult
nsGenericElement::GetListenerManager(nsIEventListenerManager** aResult)
{
@ -2009,115 +1882,6 @@ nsGenericElement::GetListenerManager(nsIEventListenerManager** aResult)
//----------------------------------------------------------------------
// nsIJSScriptObject implementation
PRBool
nsGenericElement::AddProperty(JSContext *aContext, JSObject *aObj, jsval aID,
jsval *aVp)
{
return PR_TRUE;
}
PRBool
nsGenericElement::DeleteProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp)
{
return PR_TRUE;
}
PRBool
nsGenericElement::GetProperty(JSContext *aContext, JSObject *aObj, jsval aID,
jsval *aVp)
{
return PR_TRUE;
}
PRBool
nsGenericElement::SetProperty(JSContext *aContext, JSObject *aObj, jsval aID,
jsval *aVp)
{
return InternalRegisterCompileEventHandler(aContext, aID, aVp, PR_FALSE);
}
PRBool
nsGenericElement::EnumerateProperty(JSContext *aContext, JSObject *aObj)
{
return PR_TRUE;
}
PRBool
nsGenericElement::Resolve(JSContext *aContext, JSObject *aObj, jsval aID,
PRBool* aDidDefineProperty)
{
*aDidDefineProperty = PR_FALSE;
return InternalRegisterCompileEventHandler(aContext, aID, nsnull, PR_TRUE);
}
PRBool
nsGenericElement::Convert(JSContext *aContext, JSObject *aObj, jsval aID)
{
return PR_TRUE;
}
void
nsGenericElement::Finalize(JSContext *aContext, JSObject *aObj)
{
}
PRBool
nsGenericElement::InternalRegisterCompileEventHandler(JSContext* aContext, jsval aPropName,
jsval *aVp, PRBool aCompile)
{
//If called from resolve there is no aVp arg to check against. Else check for function value.
//In both cases check for string type starting with 'on' before continuing with handler checking.
if ((!aVp || JS_TypeOfValue(aContext, *aVp) == JSTYPE_FUNCTION) && JSVAL_IS_STRING(aPropName)) {
const PRUnichar* str = NS_REINTERPRET_CAST(const PRUnichar *, JS_GetStringChars(JS_ValueToString(aContext, aPropName)));
if (str && str[0] == 'o' && str[1] == 'n' && str[2]) {
nsCOMPtr<nsIAtom> atom(dont_AddRef(NS_NewAtom(str)));
if (atom.get() == nsLayoutAtoms::onmousedown || atom.get() == nsLayoutAtoms::onmouseup ||
atom.get() == nsLayoutAtoms::onclick || atom.get() == nsLayoutAtoms::onmouseover ||
atom.get() == nsLayoutAtoms::onmouseout ||atom.get() == nsLayoutAtoms::onkeydown ||
atom.get() == nsLayoutAtoms::onkeyup || atom.get() == nsLayoutAtoms::onkeypress ||
atom.get() == nsLayoutAtoms::onmousemove || atom.get() == nsLayoutAtoms::onfocus ||
atom.get() == nsLayoutAtoms::onblur || atom.get() == nsLayoutAtoms::onsubmit ||
atom.get() == nsLayoutAtoms::onreset || atom.get() == nsLayoutAtoms::onchange ||
atom.get() == nsLayoutAtoms::onselect || atom.get() == nsLayoutAtoms::onload ||
atom.get() == nsLayoutAtoms::onunload || atom.get() == nsLayoutAtoms::onabort ||
atom.get() == nsLayoutAtoms::onerror || atom.get() == nsLayoutAtoms::onpaint ||
atom.get() == nsLayoutAtoms::onresize || atom.get() == nsLayoutAtoms::onscroll ||
atom.get() == nsLayoutAtoms::oncontextmenu || atom.get() == nsLayoutAtoms::onDOMAttrModified ||
atom.get() == nsLayoutAtoms::onDOMCharacterDataModified || atom.get() == nsLayoutAtoms::onDOMSubtreeModified ||
atom.get() == nsLayoutAtoms::onDOMNodeInsertedIntoDocument || atom.get() == nsLayoutAtoms::onDOMNodeRemovedFromDocument ||
atom.get() == nsLayoutAtoms::onDOMNodeInserted || atom.get() == nsLayoutAtoms::onDOMNodeRemoved
) {
nsCOMPtr<nsIEventListenerManager> manager;
GetListenerManager(getter_AddRefs(manager));
if (manager) {
nsCOMPtr<nsIScriptContext> scriptContext;
nsresult rv = nsContentUtils::GetStaticScriptContext(aContext, NS_REINTERPRET_CAST(JSObject*, GetDOMSlots()->mScriptObject),
getter_AddRefs(scriptContext));
if (NS_SUCCEEDED(rv) && scriptContext) {
if (aCompile) {
rv = manager->CompileScriptEventListener(scriptContext, this, atom);
}
else {
rv = manager->RegisterScriptEventListener(scriptContext, this, atom);
}
}
if (NS_FAILED(rv))
return PR_FALSE;
}
}
}
}
return PR_TRUE;
}
// Generic DOMNode implementations
/*
@ -2285,6 +2049,10 @@ nsGenericElement::doInsertBefore(nsIDOMNode* aNewChild,
return res;
}
nsCOMPtr<nsIDocument> old_doc;
newContent->GetDocument(*getter_AddRefs(old_doc));
/*
* Remove the element from the old parent if one exists, since oldParent
* is a nsIDOMNode this will do the right thing even if the parent of
@ -2333,6 +2101,9 @@ nsGenericElement::doInsertBefore(nsIDOMNode* aNewChild,
}
}
nsContentUtils::ReparentContentWrapper(newContent, this, mDocument,
old_doc);
res = InsertChildAt(newContent, refPos, PR_TRUE, PR_TRUE);
if (NS_FAILED(res)) {
@ -2478,6 +2249,10 @@ nsGenericElement::doReplaceChild(nsIDOMNode* aNewChild,
return res;
}
nsCOMPtr<nsIDocument> old_doc;
newContent->GetDocument(*getter_AddRefs(old_doc));
/*
* Remove the element from the old parent if one exists, since oldParent
* is a nsIDOMNode this will do the right thing even if the parent of
@ -2518,6 +2293,9 @@ nsGenericElement::doReplaceChild(nsIDOMNode* aNewChild,
}
}
nsContentUtils::ReparentContentWrapper(newContent, this, mDocument,
old_doc);
res = ReplaceChildAt(newContent, oldPos, PR_TRUE, PR_TRUE);
if (NS_FAILED(res)) {
@ -2596,17 +2374,13 @@ nsGenericElement::QueryInterface(REFNSIID aIID, void** aInstancePtr)
}
return NS_NOINTERFACE;
} else if (aIID.Equals(NS_GET_IID(nsIScriptObjectOwner))) {
inst = NS_STATIC_CAST(nsIScriptObjectOwner *, this);
} else if (aIID.Equals(NS_GET_IID(nsIJSScriptObject))) {
inst = NS_STATIC_CAST(nsIJSScriptObject *, this);
}
else if (mDOMSlots && mDOMSlots->mScriptObject && mDocument) {
}
else if (mDocument) {
nsCOMPtr<nsIBindingManager> manager;
mDocument->GetBindingManager(getter_AddRefs(manager));
if (manager)
return manager->GetBindingImplementation(NS_STATIC_CAST(nsIStyledContent*, this), mDOMSlots->mScriptObject,
aIID, aInstancePtr);
return manager->GetBindingImplementation(this, aIID, aInstancePtr);
return NS_NOINTERFACE;
}
else {
@ -2719,11 +2493,8 @@ nsGenericElement::AddScriptEventListener(nsIAtom* aAttribute,
receiver->GetListenerManager(getter_AddRefs(manager));
if (manager) {
nsCOMPtr<nsIScriptObjectOwner> objOwner(do_QueryInterface(global));
if (objOwner) {
ret = manager->AddScriptEventListener(context, objOwner, aAttribute,
aValue, PR_FALSE);
}
ret = manager->AddScriptEventListener(context, global, aAttribute,
aValue, PR_FALSE);
}
}
else {
@ -2884,16 +2655,15 @@ nsGenericContainerElement::GetChildNodes(nsIDOMNodeList** aChildNodes)
{
nsDOMSlots *slots = GetDOMSlots();
if (nsnull == slots->mChildNodes) {
if (!slots->mChildNodes) {
slots->mChildNodes = new nsChildContentList(this);
if (nsnull == slots->mChildNodes) {
if (!slots->mChildNodes) {
return NS_ERROR_OUT_OF_MEMORY;
}
NS_ADDREF(slots->mChildNodes);
}
return slots->mChildNodes->QueryInterface(NS_GET_IID(nsIDOMNodeList),
(void **)aChildNodes);
return CallQueryInterface(slots->mChildNodes, aChildNodes);
}
nsresult
@ -3101,8 +2871,10 @@ nsGenericContainerElement::SetAttribute(nsINodeInfo* aNodeInfo,
mutation.mPrevAttrValue = getter_AddRefs(NS_NewAtom(oldValue));
if (!aValue.IsEmpty())
mutation.mNewAttrValue = getter_AddRefs(NS_NewAtom(aValue));
mutation.mAttrChange = modification ? nsIDOMMutationEvent::MODIFICATION :
nsIDOMMutationEvent::ADDITION;
if (modification)
mutation.mAttrChange = nsIDOMMutationEvent::MODIFICATION;
else
mutation.mAttrChange = nsIDOMMutationEvent::ADDITION;
nsEventStatus status = nsEventStatus_eIgnore;
HandleDOMEvent(nsnull, &mutation, nsnull,
NS_EVENT_FLAG_INIT, &status);

Просмотреть файл

@ -33,26 +33,23 @@
#include "nsICSSStyleSheet.h"
#include "nsICSSLoaderObserver.h"
#include "nsVoidArray.h"
#include "nsIScriptObjectOwner.h"
#include "nsIJSScriptObject.h"
#include "nsILinkHandler.h"
#include "nsGenericDOMNodeList.h"
#include "nsIEventListenerManager.h"
#include "nsINodeInfo.h"
#include "nsIParser.h"
#include "nsContentUtils.h"
class nsIDOMAttr;
class nsIDOMEventListener;
class nsIFrame;
class nsISupportsArray;
class nsIDOMScriptObjectFactory;
class nsDOMCSSDeclaration;
class nsIDOMCSSStyleDeclaration;
class nsDOMAttributeMap;
class nsIURI;
class nsINodeInfo;
// Class that holds the child list of a content element and also
// implements the nsIDOMNodeList interface.
class nsChildContentList : public nsGenericDOMNodeList
@ -62,7 +59,7 @@ public:
virtual ~nsChildContentList();
// nsIDOMNodeList interface
NS_DECL_IDOMNODELIST
NS_DECL_NSIDOMNODELIST
void DropReference();
@ -117,7 +114,6 @@ private:
// in a side structure that's only allocated when the content is
// accessed through the DOM.
typedef struct {
void *mScriptObject;
nsChildContentList *mChildNodes;
nsDOMCSSDeclaration *mStyle;
nsDOMAttributeMap* mAttributeMap;
@ -127,8 +123,25 @@ typedef struct {
// that created us. [Weak]
} nsDOMSlots;
class nsGenericElement : public nsIHTMLContent,
public nsIJSScriptObject
class nsNode3Tearoff : public nsIDOM3Node
{
NS_DECL_ISUPPORTS
NS_DECL_NSIDOM3NODE
nsNode3Tearoff(nsIContent *aContent) : mContent(aContent)
{
NS_INIT_ISUPPORTS();
}
virtual ~nsNode3Tearoff() {};
private:
nsCOMPtr<nsIContent> mContent;
};
class nsGenericElement : public nsIHTMLContent
{
public:
nsGenericElement();
@ -196,6 +209,7 @@ public:
NS_IMETHOD RemoveFocus(nsIPresContext* aContext);
NS_IMETHOD GetBindingParent(nsIContent** aContent);
NS_IMETHOD SetBindingParent(nsIContent* aParent);
NS_IMETHOD_(PRBool) IsContentOfType(PRUint32 aFlags);
// nsIStyledContent interface methods
NS_IMETHOD GetID(nsIAtom*& aResult) const;
@ -230,27 +244,6 @@ public:
NS_IMETHOD GetBaseURL(nsIURI*& aBaseURL) const;
NS_IMETHOD GetBaseTarget(nsAWritableString& aBaseTarget) const;
// nsIScriptObjectOwner interface methods
NS_IMETHOD GetScriptObject(nsIScriptContext* aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void *aScriptObject);
// nsIJSScriptObject interface methods
virtual PRBool AddProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp);
virtual PRBool DeleteProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp);
virtual PRBool GetProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp);
virtual PRBool SetProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp);
virtual PRBool EnumerateProperty(JSContext *aContext, JSObject *aObj);
virtual PRBool Resolve(JSContext *aContext, JSObject *aObj, jsval aID,
PRBool *aDidDefineProperty);
virtual PRBool Convert(JSContext *aContext, JSObject *aObj, jsval aID);
virtual void Finalize(JSContext *aContext, JSObject *aObj);
// nsIDOMNode method implementation
NS_IMETHOD GetNodeName(nsAWritableString& aNodeName);
NS_IMETHOD GetLocalName(nsAWritableString& aLocalName);
@ -269,7 +262,6 @@ public:
NS_IMETHOD IsSupported(const nsAReadableString& aFeature,
const nsAReadableString& aVersion, PRBool* aReturn);
NS_IMETHOD HasAttributes(PRBool* aHasAttributes);
NS_IMETHOD GetBaseURI(nsAWritableString& aURI);
// nsIDOMElement method implementation
NS_IMETHOD GetTagName(nsAWritableString& aTagName);
@ -333,10 +325,6 @@ public:
static void SetDocumentInChildrenOf(nsIContent* aContent,
nsIDocument* aDocument, PRBool aCompileEventHandlers);
static nsresult GetScriptObjectFactory(nsIDOMScriptObjectFactory **aFactory);
static nsIDOMScriptObjectFactory *gScriptObjectFactory;
static nsresult InternalIsSupported(const nsAReadableString& aFeature,
const nsAReadableString& aVersion,
PRBool* aReturn);
@ -346,8 +334,6 @@ public:
protected:
virtual PRUint32 BaseSizeOf(nsISizeOfHandler *aSizer) const;
virtual PRBool InternalRegisterCompileEventHandler(JSContext* aContext, jsval aPropName,
jsval *aVp, PRBool aCompile);
nsDOMSlots *GetDOMSlots();
void MaybeClearDOMSlots();
@ -450,7 +436,7 @@ protected:
};
#define NS_FORWARD_IDOMNODE_NO_CLONENODE(_to) \
#define NS_FORWARD_NSIDOMNODE_NO_CLONENODE(_to) \
NS_IMETHOD GetNodeName(nsAWritableString& aNodeName) { return _to GetNodeName(aNodeName); } \
NS_IMETHOD GetNodeValue(nsAWritableString& aNodeValue) { return _to GetNodeValue(aNodeValue); } \
NS_IMETHOD SetNodeValue(const nsAReadableString& aNodeValue) { return _to SetNodeValue(aNodeValue); } \
@ -475,7 +461,12 @@ protected:
NS_IMETHOD CloneNode(PRBool aDeep, nsIDOMNode** aReturn); \
NS_IMETHOD Normalize() { return _to Normalize(); } \
NS_IMETHOD IsSupported(const nsAReadableString& aFeature, const nsAReadableString& aVersion, PRBool* aReturn) { return _to IsSupported(aFeature, aVersion, aReturn); } \
NS_IMETHOD HasAttributes(PRBool* aReturn) { return _to HasAttributes(aReturn); } \
NS_IMETHOD GetBaseURI(nsAWritableString& aURI) { return _to GetBaseURI(aURI); } \
NS_IMETHOD HasAttributes(PRBool* aReturn) { return _to HasAttributes(aReturn); }
#define NS_INTERFACE_MAP_ENTRY_TEAROFF(_iid, _tearoff) \
if (aIID.Equals(NS_GET_IID(_iid))) { \
foundInterface = new _tearoff; \
NS_ENSURE_TRUE(foundInterface, NS_ERROR_OUT_OF_MEMORY); \
} else
#endif /* nsGenericElement_h___ */

Просмотреть файл

@ -26,6 +26,7 @@
#include "nsString.h"
#include "nsIAtom.h"
#include "nsINameSpaceManager.h"
#include "domstubs.h" // for SetDOMStringToNull();
nsNodeInfo::nsNodeInfo()
@ -129,7 +130,7 @@ nsNodeInfo::GetLocalName(nsAWritableString& aLocalName)
return mInner.mName->ToString(aLocalName);
}
aLocalName.Truncate();
SetDOMStringToNull(aLocalName);
return NS_OK;
#else
@ -144,7 +145,7 @@ nsNodeInfo::GetPrefix(nsAWritableString& aPrefix)
if (mInner.mPrefix) {
mInner.mPrefix->ToString(aPrefix);
} else {
aPrefix.Truncate();
SetDOMStringToNull(aPrefix);
}
return NS_OK;
@ -175,7 +176,7 @@ nsNodeInfo::GetNamespaceURI(nsAWritableString& aNameSpaceURI)
rv = nsm->GetNameSpaceURI(mInner.mNamespaceID, aNameSpaceURI);
} else {
aNameSpaceURI.Truncate();
SetDOMStringToNull(aNameSpaceURI);
}
return rv;
@ -394,6 +395,14 @@ nsNodeInfo::PrefixChanged(nsIAtom *aPrefix, nsINodeInfo*& aResult)
aResult);
}
NS_IMETHODIMP
nsNodeInfo::GetDocument(nsIDocument*& aDocument)
{
NS_ENSURE_TRUE(mOwnerManager, NS_ERROR_NOT_INITIALIZED);
return mOwnerManager->GetDocument(aDocument);
}
PLHashNumber
nsNodeInfoInner::GetHashValue(const void *key)

Просмотреть файл

@ -98,6 +98,7 @@ public:
NS_IMETHOD NameChanged(nsIAtom *aName, nsINodeInfo*& aResult);
NS_IMETHOD PrefixChanged(nsIAtom *aPrefix, nsINodeInfo*& aResult);
NS_IMETHOD GetDocument(nsIDocument*& aDocument);
// nsNodeInfo
nsNodeInfo();

Просмотреть файл

@ -25,6 +25,7 @@
#include "nsCOMPtr.h"
#include "nsString.h"
#include "nsIAtom.h"
#include "nsIDocument.h"
nsNodeInfoManager* nsNodeInfoManager::gAnonymousNodeInfoManager = nsnull;
PRUint32 nsNodeInfoManager::gNodeManagerCount = 0;
@ -44,7 +45,7 @@ nsresult NS_NewNodeInfoManager(nsINodeInfoManager** aResult)
nsNodeInfoManager::nsNodeInfoManager()
: mNameSpaceManager(nsnull)
: mDocument(nsnull)
{
NS_INIT_REFCNT();
@ -101,17 +102,28 @@ NS_IMPL_THREADSAFE_ISUPPORTS(nsNodeInfoManager,
// nsINodeInfoManager
NS_IMETHODIMP
nsNodeInfoManager::Init(nsINameSpaceManager *aNameSpaceManager)
nsNodeInfoManager::Init(nsIDocument *aDocument,
nsINameSpaceManager *aNameSpaceManager)
{
NS_ENSURE_ARG_POINTER(aNameSpaceManager);
NS_ENSURE_TRUE(mNodeInfoHash, NS_ERROR_OUT_OF_MEMORY);
mDocument = aDocument;
mNameSpaceManager = aNameSpaceManager;
return NS_OK;
}
NS_IMETHODIMP
nsNodeInfoManager::DropDocumentReference()
{
mDocument = nsnull;
return NS_OK;
}
NS_IMETHODIMP
nsNodeInfoManager::GetNodeInfo(nsIAtom *aName, nsIAtom *aPrefix,
PRInt32 aNamespaceID, nsINodeInfo*& aNodeInfo)
@ -263,6 +275,17 @@ nsNodeInfoManager::GetNamespaceManager(nsINameSpaceManager*& aNameSpaceManager)
}
NS_IMETHODIMP
nsNodeInfoManager::GetDocument(nsIDocument*& aDocument)
{
aDocument = mDocument;
NS_IF_ADDREF(aDocument);
return NS_OK;
}
void
nsNodeInfoManager::RemoveNodeInfo(nsNodeInfo *aNodeInfo)
{

Просмотреть файл

@ -37,7 +37,9 @@ public:
NS_DECL_ISUPPORTS
// nsINodeInfoManager
NS_IMETHOD Init(nsINameSpaceManager *aNameSpaceManager);
NS_IMETHOD Init(nsIDocument *aDocument,
nsINameSpaceManager *aNameSpaceManager);
NS_IMETHOD DropDocumentReference();
NS_IMETHOD GetNodeInfo(nsIAtom *aName, nsIAtom *aPrefix,
PRInt32 aNamespaceID, nsINodeInfo*& aNodeInfo);
NS_IMETHOD GetNodeInfo(const nsAReadableString& aName, nsIAtom *aPrefix,
@ -51,6 +53,7 @@ public:
const nsAReadableString& aNamespaceURI,
nsINodeInfo*& aNodeInfo);
NS_IMETHOD GetNamespaceManager(nsINameSpaceManager*& aNameSpaceManager);
NS_IMETHOD GetDocument(nsIDocument*& aDocument);
// nsNodeInfoManager
nsNodeInfoManager();
@ -63,6 +66,7 @@ public:
private:
PLHashTable *mNodeInfoHash;
nsCOMPtr<nsINameSpaceManager> mNameSpaceManager;
nsIDocument *mDocument; // WEAK
/*
* gAnonymousNodeInfoManager is a global nodeinfo manager used for nodes

Просмотреть файл

@ -36,7 +36,6 @@
#include "nsDOMError.h"
#include "nsIContentIterator.h"
#include "nsIDOMNodeList.h"
#include "nsIScriptGlobalObject.h"
#include "nsIParser.h"
#include "nsIComponentManager.h"
#include "nsParserCIID.h"
@ -44,6 +43,8 @@
// XXX Temporary inclusion to deal with fragment parsing
#include "nsHTMLParts.h"
#include "nsContentUtils.h"
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_CID(kCParserCID, NS_PARSER_CID);
@ -78,7 +79,6 @@ class nsAutoRangeLock
};
// Returns -1 if point1 < point2, 1, if point1 > point2,
// 0 if error or if point1 == point2.
PRInt32 ComparePoints(nsIDOMNode* aParent1, PRInt32 aOffset1,
@ -392,8 +392,7 @@ nsRange::nsRange() :
mStartOffset(0),
mEndOffset(0),
mStartParent(),
mEndParent(),
mScriptObject(nsnull)
mEndParent()
{
NS_INIT_REFCNT();
}
@ -429,44 +428,27 @@ void nsRange::Shutdown()
/******************************************************
* nsISupports
******************************************************/
// XPConnect interface list for nsRange
NS_CLASSINFO_MAP_BEGIN(Range)
NS_CLASSINFO_MAP_ENTRY(nsIDOMRange)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNSRange)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsRange
NS_INTERFACE_MAP_BEGIN(nsRange)
NS_INTERFACE_MAP_ENTRY(nsIDOMRange)
NS_INTERFACE_MAP_ENTRY(nsIDOMNSRange)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMRange)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(Range)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsRange)
NS_IMPL_RELEASE(nsRange)
nsresult nsRange::QueryInterface(const nsIID& aIID,
void** aInstancePtrResult)
{
NS_PRECONDITION(aInstancePtrResult, "null pointer");
if (!aInstancePtrResult)
{
return NS_ERROR_NULL_POINTER;
}
if (aIID.Equals(kISupportsIID))
{
*aInstancePtrResult = (void*)(nsISupports*)(nsIDOMRange *)this;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsIDOMRange)))
{
*aInstancePtrResult = (void*)(nsIDOMRange*)this;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsIDOMNSRange)))
{
*aInstancePtrResult = (void*)(nsIDOMNSRange*)this;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsIScriptObjectOwner))) {
nsIScriptObjectOwner* tmp = this;
*aInstancePtrResult = (void*) tmp;
NS_ADDREF_THIS();
return NS_OK;
}
return NS_NOINTERFACE;
}
/********************************************************
* Utilities for comparing points: API from nsIDOMNSRange
@ -2215,31 +2197,6 @@ nsRange::SetBeforeAndAfter(PRBool aBefore, PRBool aAfter)
return NS_OK;
}
// BEGIN nsIScriptObjectOwner interface implementations
NS_IMETHODIMP
nsRange::GetScriptObject(nsIScriptContext *aContext, void** aScriptObject)
{
nsresult res = NS_OK;
nsIScriptGlobalObject *globalObj = aContext->GetGlobalObject();
if (!mScriptObject) {
res = NS_NewScriptRange(aContext, (nsISupports *)(nsIDOMRange *)this, globalObj, (void**)&mScriptObject);
}
*aScriptObject = mScriptObject;
NS_RELEASE(globalObj);
return res;
}
NS_IMETHODIMP
nsRange::SetScriptObject(void *aScriptObject)
{
mScriptObject = aScriptObject;
return NS_OK;
}
// END nsIScriptObjectOwner interface implementations
nsresult
nsRange::Lock()
{

Просмотреть файл

@ -33,7 +33,6 @@
#include "nsIDOMDocumentFragment.h"
#include "nsIContent.h"
#include "nsIDOMNode.h"
#include "nsIScriptObjectOwner.h"
#include "prmon.h"
class nsVoidArray;
@ -63,8 +62,7 @@ public:
// -------------------------------------------------------------------------------
class nsRange : public nsIDOMRange,
public nsIDOMNSRange,
public nsIScriptObjectOwner
public nsIDOMNSRange
{
public:
NS_DECL_ISUPPORTS
@ -138,12 +136,6 @@ public:
NS_IMETHOD SetHasGeneratedAfter(PRBool aBool);
NS_IMETHOD SetBeforeAndAfter(PRBool aBefore, PRBool aAfter);
/*BEGIN nsIScriptObjectOwner interface implementations*/
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void *aScriptObject);
/*END nsIScriptObjectOwner interface implementations*/
// nsRange interface extensions
static NS_METHOD OwnerGone(nsIContent* aParentNode);
@ -211,7 +203,6 @@ public:
nsresult ContentOwnsUs(nsIDOMNode* domNode);
protected:
void* mScriptObject;
PRBool mBeforeGenContent;
PRBool mAfterGenContent;

Просмотреть файл

@ -63,6 +63,8 @@ static NS_DEFINE_CID(kFrameTraversalCID, NS_FRAMETRAVERSAL_CID);
#include "nsIDOMText.h"
#include "nsContentUtils.h"
//included for desired x position;
#include "nsIPresContext.h"
#include "nsIPresShell.h"
@ -84,9 +86,6 @@ static NS_DEFINE_CID(kFrameTraversalCID, NS_FRAMETRAVERSAL_CID);
#include "nsISelectionController.h"//for the enums
/*included so html can call into nsISelection code with no security issues*/
#include "nsISecurityCheckedComponent.h"
#define STATUS_CHECK_RETURN_MACRO() {if (!mTracker) return NS_ERROR_FAILURE;}
//#define DEBUG_TABLE 1
@ -141,11 +140,10 @@ class nsSelectionIterator;
class nsSelection;
class nsAutoScrollTimer;
class nsTypedSelection : public nsISelection ,
public nsISelectionPrivate,
public nsSupportsWeakReference,
public nsIIndependentSelection,
public nsISecurityCheckedComponent
class nsTypedSelection : public nsISelection,
public nsISelectionPrivate,
public nsSupportsWeakReference,
public nsIIndependentSelection
{
public:
nsTypedSelection();
@ -191,9 +189,6 @@ public:
NS_IMETHOD SelectionLanguageChange(PRBool aLangRTL);
/*END nsISelection interface implementations*/
/* nsISecurityCheckedComponent */
NS_DECL_NSISECURITYCHECKEDCOMPONENT
/*END nsISecurityCheckedComponent*/
// utility methods for scrolling the selection into view
nsresult GetPresContext(nsIPresContext **aPresContext);
@ -4443,13 +4438,26 @@ nsTypedSelection::~nsTypedSelection()
}
// XPConnect interface list for nsTypedSelection
NS_CLASSINFO_MAP_BEGIN(Selection)
NS_CLASSINFO_MAP_ENTRY(nsISelection)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsRange
NS_INTERFACE_MAP_BEGIN(nsTypedSelection)
NS_INTERFACE_MAP_ENTRY(nsISelection)
NS_INTERFACE_MAP_ENTRY(nsISelectionPrivate)
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
NS_INTERFACE_MAP_ENTRY(nsIIndependentSelection)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISelection)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(Selection)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsTypedSelection)
NS_IMPL_RELEASE(nsTypedSelection)
NS_IMPL_QUERY_INTERFACE5(nsTypedSelection, nsISelection, nsISelectionPrivate, nsISupportsWeakReference, nsIIndependentSelection, nsISecurityCheckedComponent)
NS_IMETHODIMP
nsTypedSelection::SetPresShell(nsIPresShell *aPresShell)
@ -7552,55 +7560,6 @@ nsTypedSelection::DeleteFromDocument()
return mFrameSelection->DeleteFromDocument();
}
static const char* kAllAccess = "AllAccess";
static const char* kNoAccess = "NoAccess";
/* string canCreateWrapper (in nsIIDPtr iid); */
NS_IMETHODIMP
nsTypedSelection::CanCreateWrapper(const nsIID * iid, char **_retval)
{
if (iid->Equals(NS_GET_IID(nsISelection))) {
*_retval = nsCRT::strdup(kAllAccess);
}
else
*_retval = nsCRT::strdup(kNoAccess);
return NS_OK;
}
/* string canCallMethod (in nsIIDPtr iid, in wstring methodName); */
NS_IMETHODIMP
nsTypedSelection::CanCallMethod(const nsIID * iid, const PRUnichar *methodName, char **_retval)
{
if (iid->Equals(NS_GET_IID(nsISelection))) {
*_retval = nsCRT::strdup(kAllAccess);
}
return NS_OK;
}
/* string canGetProperty (in nsIIDPtr iid, in wstring propertyName); */
NS_IMETHODIMP
nsTypedSelection::CanGetProperty(const nsIID * iid, const PRUnichar *propertyName, char **_retval)
{
if (iid->Equals(NS_GET_IID(nsISelection))) {
*_retval = nsCRT::strdup(kAllAccess);
}
return NS_OK;
}
/* string canSetProperty (in nsIIDPtr iid, in wstring propertyName); */
NS_IMETHODIMP
nsTypedSelection::CanSetProperty(const nsIID * iid, const PRUnichar *propertyName, char **_retval)
{
if (iid->Equals(NS_GET_IID(nsISelection))) {
*_retval = nsCRT::strdup(kAllAccess);
}
return NS_OK;
}
/** SelectionLanguageChange modifies the cursor Bidi level after a change in keyboard direction
* @param aLangRTL is PR_TRUE if the new language is right-to-left or PR_FALSE if the new language is left-to-right
*/

Просмотреть файл

@ -21,7 +21,6 @@
*/
#include "nsIDOMText.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIContent.h"
#include "nsITextContent.h"
@ -29,11 +28,12 @@
#include "nsIDocument.h"
#include "nsCRT.h"
#include "nsLayoutAtoms.h"
#include "nsString.h"
#include "nsContentUtils.h"
class nsTextNode : public nsIDOMText,
public nsIScriptObjectOwner,
public nsITextContent
class nsTextNode : public nsITextContent,
public nsIDOMText
{
public:
nsTextNode();
@ -43,16 +43,13 @@ public:
NS_DECL_ISUPPORTS
// nsIDOMNode
NS_IMPL_IDOMNODE_USING_GENERIC_DOM_DATA(mInner)
NS_IMPL_NSIDOMNODE_USING_GENERIC_DOM_DATA(mInner)
// nsIDOMCharacterData
NS_IMPL_IDOMCHARACTERDATA_USING_GENERIC_DOM_DATA(mInner)
NS_IMPL_NSIDOMCHARACTERDATA_USING_GENERIC_DOM_DATA(mInner)
// nsIDOMText
NS_IMPL_IDOMTEXT_USING_GENERIC_DOM_DATA(mInner)
// nsIScriptObjectOwner
NS_IMPL_ISCRIPTOBJECTOWNER_USING_GENERIC_DOM_DATA(mInner)
NS_IMPL_NSIDOMTEXT_USING_GENERIC_DOM_DATA(mInner)
// nsIContent
NS_IMPL_ICONTENT_USING_GENERIC_DOM_DATA(mInner)
@ -97,24 +94,24 @@ nsTextNode::~nsTextNode()
NS_IMPL_ADDREF(nsTextNode)
NS_IMPL_RELEASE(nsTextNode)
NS_IMETHODIMP
nsTextNode::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
NS_IMPL_DOM_DATA_QUERY_INTERFACE(aIID, aInstancePtr, this)
if (aIID.Equals(NS_GET_IID(nsIDOMText))) {
nsIDOMText* tmp = this;
*aInstancePtr = (void*) tmp;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsITextContent))) {
nsITextContent* tmp = this;
*aInstancePtr = (void*) tmp;
NS_ADDREF_THIS();
return NS_OK;
}
return NS_NOINTERFACE;
}
// XPConnect interface list for nsTextNode
NS_CLASSINFO_MAP_BEGIN(Text)
NS_CLASSINFO_MAP_ENTRY(nsIDOMText)
NS_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget)
NS_CLASSINFO_MAP_ENTRY(nsIDOM3Node)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsTextNode
NS_INTERFACE_MAP_BEGIN(nsTextNode)
NS_INTERFACE_MAP_ENTRY_DOM_DATA()
NS_INTERFACE_MAP_ENTRY(nsITextContent)
NS_INTERFACE_MAP_ENTRY(nsIDOMText)
NS_INTERFACE_MAP_ENTRY(nsIDOMCharacterData)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(Text)
NS_INTERFACE_MAP_END
NS_IMETHODIMP
nsTextNode::GetTag(nsIAtom*& aResult) const
@ -265,3 +262,8 @@ nsTextNode::SetContentID(PRUint32 aID)
return NS_OK;
}
NS_IMETHODIMP_(PRBool)
nsTextNode::IsContentOfType(PRUint32 aFlags)
{
return !(aFlags & ~eTEXT);
}

Просмотреть файл

@ -33,7 +33,7 @@ LIBRARY_NAME = gkcontent
EXPORT_LIBRARY = 1
SHORT_LIBNAME = gkcontnt
IS_COMPONENT = 1
EXTRA_DSO_LIBS = jsdom gkgfx
EXTRA_DSO_LIBS = gkgfx
REQUIRES = xpcom string widget necko rdf docshell dom htmlparser uriloader webshell locale unicharutil lwbrk js pref caps xul xuldoc xultmpl gfx2 timer
CPPSRCS = \

Просмотреть файл

@ -74,7 +74,6 @@ LLIBS= \
$(DIST)\lib\xpcom.lib \
$(DIST)\lib\gkgfxwin.lib \
$(DIST)\lib\timer_s.lib \
$(DIST)\lib\jsdom.lib \
$(DIST)\lib\js32$(VERSION_NUMBER).lib \
!if defined(MOZ_PERF)
$(DIST)\lib\util.lib \
@ -88,7 +87,7 @@ install:: gbdate.h $(DLL)
$(MAKE_INSTALL) .\$(OBJDIR)\$(DLLNAME).lib $(DIST)\lib
clobber::
rm -f $(DIST)\bin\$(DLLNAME).dll
rm -f $(DIST)\bin\components\$(DLLNAME).dll
rm -f $(DIST)\lib\$(DLLNAME).lib
rm -f gbdate.h

Просмотреть файл

@ -45,9 +45,6 @@
#include "nsIRangeUtils.h"
#include "nsIContentIterator.h"
#include "nsINameSpaceManager.h"
#include "nsIScriptNameSetRegistry.h"
#include "nsIScriptNameSpaceManager.h"
#include "nsIScriptExternalNameSet.h"
#include "nsIEventListenerManager.h"
#include "nsILayoutDebugger.h"
#include "nsIElementFactory.h"

Просмотреть файл

@ -25,6 +25,7 @@
#include "nsCOMPtr.h"
#include "nsContentModule.h"
#include "nsContentCID.h"
#include "nsContentUtils.h"
#include "nsIComponentManager.h"
#include "nsNetUtil.h"
#include "nsICSSStyleSheet.h"
@ -36,12 +37,10 @@
#include "nsColorNames.h" // to addref/release table
#include "nsLayoutAtoms.h"
#include "nsDOMCID.h"
#include "nsIScriptContext.h"
#include "nsIScriptObjectOwner.h"
#include "nsINameSpaceManager.h"
#include "nsIScriptNameSetRegistry.h"
#include "nsICategoryManager.h"
#include "nsIScriptNameSpaceManager.h"
#include "nsIScriptExternalNameSet.h"
#include "nsIObserver.h"
#include "nsINodeInfo.h"
@ -60,6 +59,13 @@
#include "nsContentPolicyUtils.h"
#define PRODUCT_NAME "Gecko"
#define NS_HTMLIMGELEMENT_CONTRACTID \
"@mozilla.org/content/element/html;1?name=img"
#define NS_HTMLOPTIONELEMENT_CONTRACTID \
"@mozilla.org/content/element/html;1?name=option"
#ifdef MOZ_XUL
#include "nsXULAtoms.h"
#include "nsXULContentUtils.h"
@ -94,81 +100,20 @@ extern "C" NS_EXPORT nsresult NSGetModule(nsIComponentManager *servMgr,
//----------------------------------------------------------------------
static NS_DEFINE_IID(kCScriptNameSetRegistryCID, NS_SCRIPT_NAMESET_REGISTRY_CID);
class ContentScriptNameSet : public nsIScriptExternalNameSet {
public:
ContentScriptNameSet();
virtual ~ContentScriptNameSet();
NS_DECL_ISUPPORTS
NS_IMETHOD InitializeClasses(nsIScriptContext* aScriptContext);
NS_IMETHOD AddNameSet(nsIScriptContext* aScriptContext);
};
ContentScriptNameSet::ContentScriptNameSet()
{
NS_INIT_REFCNT();
}
ContentScriptNameSet::~ContentScriptNameSet()
{
}
NS_IMPL_ISUPPORTS(ContentScriptNameSet, NS_GET_IID(nsIScriptExternalNameSet));
NS_IMETHODIMP
ContentScriptNameSet::InitializeClasses(nsIScriptContext* aScriptContext)
{
return NS_OK;
}
NS_IMETHODIMP
ContentScriptNameSet::AddNameSet(nsIScriptContext* aScriptContext)
{
nsresult result = NS_OK;
nsIScriptNameSpaceManager* manager;
static NS_DEFINE_IID(kHTMLImageElementCID, NS_HTMLIMAGEELEMENT_CID);
static NS_DEFINE_IID(kHTMLOptionElementCID, NS_HTMLOPTIONELEMENT_CID);
result = aScriptContext->GetNameSpaceManager(&manager);
if (NS_OK == result) {
result = manager->RegisterGlobalName(NS_LITERAL_STRING("HTMLImageElement"),
NS_GET_IID(nsIScriptObjectOwner),
kHTMLImageElementCID,
PR_TRUE);
if (NS_FAILED(result)) {
NS_RELEASE(manager);
return result;
}
result = manager->RegisterGlobalName(NS_LITERAL_STRING("HTMLOptionElement"),
NS_GET_IID(nsIScriptObjectOwner),
kHTMLOptionElementCID,
PR_TRUE);
if (NS_FAILED(result)) {
NS_RELEASE(manager);
return result;
}
NS_RELEASE(manager);
}
return result;
}
//----------------------------------------------------------------------
nsIScriptNameSetRegistry* nsContentModule::gRegistry;
nsICSSStyleSheet* nsContentModule::gUAStyleSheet = nsnull;
nsContentModule::nsContentModule()
: mInitialized(PR_FALSE)
{
NS_INIT_ISUPPORTS();
nsCOMPtr<nsIObserverService> observerService =
do_GetService(NS_OBSERVERSERVICE_CONTRACTID);
if (observerService) {
nsAutoString topic;
topic.AssignWithConversion(NS_XPCOM_SHUTDOWN_OBSERVER_ID);
observerService->AddObserver(this, topic.GetUnicode());
}
}
nsContentModule::~nsContentModule()
@ -176,7 +121,7 @@ nsContentModule::~nsContentModule()
Shutdown();
}
NS_IMPL_ISUPPORTS(nsContentModule, NS_GET_IID(nsIModule))
NS_IMPL_ISUPPORTS2(nsContentModule, nsIModule, nsIObserver)
// Perform our one-time intialization for this module
nsresult
@ -203,16 +148,7 @@ nsContentModule::Initialize()
nsXULContentUtils::Init();
#endif
// XXX Initialize the script name set thingy-ma-jigger
if (!gRegistry) {
rv = nsServiceManager::GetService(kCScriptNameSetRegistryCID,
NS_GET_IID(nsIScriptNameSetRegistry),
(nsISupports**) &gRegistry);
if (NS_SUCCEEDED(rv)) {
ContentScriptNameSet* nameSet = new ContentScriptNameSet();
gRegistry->AddExternalNameSet(nameSet);
}
}
nsContentUtils::Init();
return rv;
}
@ -241,8 +177,22 @@ nsContentModule::Shutdown()
nsXULAtoms::ReleaseAtoms();
#endif
NS_IF_RELEASE(gRegistry);
NS_IF_RELEASE(gUAStyleSheet);
nsContentUtils::Shutdown();
}
NS_IMETHODIMP
nsContentModule::Observe(nsISupports *aSubject, const PRUnichar *aTopic,
const PRUnichar *someData)
{
nsAutoString topic;
topic.AssignWithConversion(NS_XPCOM_SHUTDOWN_OBSERVER_ID);
if (topic.EqualsWithConversion(aTopic)) {
nsContentUtils::Shutdown();
}
return NS_OK;
}
NS_IMETHODIMP
@ -322,10 +272,11 @@ static Components gComponents[] = {
{ "Generated Subtree iterator", NS_GENERATEDSUBTREEITERATOR_CID, nsnull, },
{ "Subtree iterator", NS_SUBTREEITERATOR_CID, nsnull, },
// XXX ick
{ "HTML image element", NS_HTMLIMAGEELEMENT_CID, nsnull, },
{ "HTML option element", NS_HTMLOPTIONELEMENT_CID, nsnull, },
// XXX end ick
// Needed to support "new Option;" and "new Image;" in JavaScript
{ "HTML img element", NS_HTMLIMAGEELEMENT_CID,
NS_HTMLIMGELEMENT_CONTRACTID, },
{ "HTML option element", NS_HTMLOPTIONELEMENT_CID,
NS_HTMLOPTIONELEMENT_CONTRACTID, },
{ "XML document encoder", NS_TEXT_ENCODER_CID,
NS_DOC_ENCODER_CONTRACTID_BASE "text/xml", },
@ -420,7 +371,23 @@ nsContentModule::RegisterSelf(nsIComponentManager *aCompMgr,
nsContentHTTPStartup::RegisterHTTPStartup();
rv = RegisterDocumentFactories(aCompMgr, aPath);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsICategoryManager> catman =
do_GetService(NS_CATEGORYMANAGER_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsXPIDLCString previous;
rv = catman->AddCategoryEntry(JAVASCRIPT_GLOBAL_CONSTRUCTOR_CATEGORY,
"Image", NS_HTMLIMGELEMENT_CONTRACTID,
PR_TRUE, PR_TRUE, getter_Copies(previous));
NS_ENSURE_SUCCESS(rv, rv);
rv = catman->AddCategoryEntry(JAVASCRIPT_GLOBAL_CONSTRUCTOR_CATEGORY,
"Option", NS_HTMLOPTIONELEMENT_CONTRACTID,
PR_TRUE, PR_TRUE, getter_Copies(previous));
return rv;
}

Просмотреть файл

@ -1,78 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* 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/
*
* 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.
*
* The Original Code is Mozilla Communicator client code.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsContentModule_h___
#define nsContentModule_h___
#include "nslayout.h"
#include "nsIModule.h"
class nsICSSStyleSheet;
class nsIScriptNameSetRegistry;
// Module implementation for the content library
class nsContentModule : public nsIModule
{
public:
nsContentModule();
virtual ~nsContentModule();
NS_DECL_ISUPPORTS
NS_DECL_NSIMODULE
nsresult Initialize();
protected:
void Shutdown();
nsresult RegisterDocumentFactories(nsIComponentManager* aCompMgr,
nsIFile* aPath);
void UnregisterDocumentFactories(nsIComponentManager* aCompMgr,
nsIFile* aPath);
PRBool mInitialized;
// static nsIFactory* gFactory;
static nsIScriptNameSetRegistry* gRegistry;
public:
static nsICSSStyleSheet* gUAStyleSheet;
};
//----------------------------------------------------------------------
class nsContentFactory : public nsIFactory
{
public:
nsContentFactory(const nsCID &aClass);
NS_DECL_ISUPPORTS
NS_DECL_NSIFACTORY
protected:
virtual ~nsContentFactory();
nsCID mClassID;
};
#endif /* nsContentModule_h___ */

Просмотреть файл

@ -29,7 +29,7 @@
class nsIPresContext;
class nsIDOMEventListener;
class nsIScriptObjectOwner;
class nsIScriptContext;
class nsIDOMEventTarget;
/*
@ -43,116 +43,123 @@ class nsIDOMEventTarget;
class nsIEventListenerManager : public nsISupports {
public:
static const nsIID& GetIID() { static nsIID iid = NS_IEVENTLISTENERMANAGER_IID; return iid; }
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IEVENTLISTENERMANAGER_IID)
/**
* Sets events listeners of all types.
* @param an event listener
*/
virtual nsresult AddEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID, PRInt32 flags) = 0;
NS_IMETHOD AddEventListenerByIID(nsIDOMEventListener *aListener,
const nsIID& aIID, PRInt32 flags) = 0;
/**
* Removes events listeners of all types.
* @param an event listener
*/
virtual nsresult RemoveEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID, PRInt32 flags) = 0;
NS_IMETHOD RemoveEventListenerByIID(nsIDOMEventListener *aListener,
const nsIID& aIID, PRInt32 flags) = 0;
/**
* Sets events listeners of all types.
* @param an event listener
*/
virtual nsresult AddEventListenerByType(nsIDOMEventListener *aListener, const nsAReadableString& type, PRInt32 flags) = 0;
NS_IMETHOD AddEventListenerByType(nsIDOMEventListener *aListener,
const nsAReadableString& type,
PRInt32 flags) = 0;
/**
* Removes events listeners of all types.
* @param an event listener
*/
virtual nsresult RemoveEventListenerByType(nsIDOMEventListener *aListener, const nsAReadableString& type, PRInt32 flags) = 0;
NS_IMETHOD RemoveEventListenerByType(nsIDOMEventListener *aListener,
const nsAReadableString& type,
PRInt32 flags) = 0;
/**
* Creates a script event listener for the given script object with name aName and function
* body aFunc.
* Creates a script event listener for the given script object with
* name aName and function body aFunc.
* @param an event listener
*/
virtual nsresult AddScriptEventListener(nsIScriptContext*aContext,
nsIScriptObjectOwner *aScriptObjectOwner,
nsIAtom *aName,
const nsAReadableString& aFunc,
PRBool aDeferCompilation) = 0;
NS_IMETHOD AddScriptEventListener(nsIScriptContext*aContext,
nsISupports *aObject,
nsIAtom *aName,
const nsAReadableString& aFunc,
PRBool aDeferCompilation) = 0;
virtual nsresult RemoveScriptEventListener(nsIAtom *aName) = 0;
NS_IMETHOD RemoveScriptEventListener(nsIAtom *aName) = 0;
/**
* Registers an event listener that already exists on the given script object with the event
* listener manager.
* Registers an event listener that already exists on the given
* script object with the event listener manager.
* @param an event listener
*/
virtual nsresult RegisterScriptEventListener(nsIScriptContext *aContext,
nsIScriptObjectOwner *aScriptObjectOwner,
nsIAtom* aName) = 0;
NS_IMETHOD RegisterScriptEventListener(nsIScriptContext *aContext,
nsISupports *aObject,
nsIAtom* aName) = 0;
/**
* Compiles any event listeners that already exists on the given script object for a given
* event type.
* @param an event listener
*/
virtual nsresult CompileScriptEventListener(nsIScriptContext *aContext,
nsIScriptObjectOwner *aScriptObjectOwner,
nsIAtom* aName) = 0;
* Compiles any event listeners that already exists on the given
* script object for a given event type.
* @param an event listener */
NS_IMETHOD CompileScriptEventListener(nsIScriptContext *aContext,
nsISupports *aObject,
nsIAtom* aName,
PRBool *aDidCompile) = 0;
/**
* Causes a check for event listeners and processing by them if they exist.
* Event flags live in nsGUIEvent.h
* @param an event listener
*/
virtual nsresult HandleEvent(nsIPresContext* aPresContext,
nsEvent* aEvent,
nsIDOMEvent** aDOMEvent,
nsIDOMEventTarget* aCurrentTarget,
PRUint32 aFlags,
nsEventStatus* aEventStatus) = 0;
NS_IMETHOD HandleEvent(nsIPresContext* aPresContext,
nsEvent* aEvent,
nsIDOMEvent** aDOMEvent,
nsIDOMEventTarget* aCurrentTarget,
PRUint32 aFlags,
nsEventStatus* aEventStatus) = 0;
/**
* Creates a DOM event that can subsequently be passed into HandleEvent.
* (used rarely in the situation where methods on the event need to be
* invoked prior to the processing of the event).
*/
virtual nsresult CreateEvent(nsIPresContext* aPresContext,
nsEvent* aEvent,
const nsAReadableString& aEventType,
nsIDOMEvent** aDOMEvent) = 0;
NS_IMETHOD CreateEvent(nsIPresContext* aPresContext,
nsEvent* aEvent,
const nsAReadableString& aEventType,
nsIDOMEvent** aDOMEvent) = 0;
/**
* Changes script listener of specified event types from bubbling listeners to capturing listeners.
* @param event types
*/
virtual nsresult CaptureEvent(PRInt32 aEventTypes) = 0;
* Changes script listener of specified event types from bubbling
* listeners to capturing listeners.
* @param event types */
NS_IMETHOD CaptureEvent(PRInt32 aEventTypes) = 0;
/**
* Changes script listener of specified event types from capturing listeners to bubbling listeners.
* @param event types
*/
virtual nsresult ReleaseEvent(PRInt32 aEventTypes) = 0;
* Changes script listener of specified event types from capturing
* listeners to bubbling listeners.
* @param event types */
NS_IMETHOD ReleaseEvent(PRInt32 aEventTypes) = 0;
/**
* Removes all event listeners registered by this instance of the listener
* manager.
*/
virtual nsresult RemoveAllListeners(PRBool aScriptOnly) = 0;
NS_IMETHOD RemoveAllListeners(PRBool aScriptOnly) = 0;
/**
* Removes all event listeners registered by this instance of the listener
* manager.
*/
virtual nsresult SetListenerTarget(nsISupports* aTarget) = 0;
NS_IMETHOD SetListenerTarget(nsISupports* aTarget) = 0;
/**
* Allows us to quickly determine if we have mutation listeners registered.
*/
virtual nsresult HasMutationListeners(PRBool* aListener) = 0;
NS_IMETHOD HasMutationListeners(PRBool* aListener) = 0;
};
extern NS_HTML nsresult NS_NewEventListenerManager(nsIEventListenerManager** aInstancePtrResult);
extern nsresult
NS_NewEventListenerManager(nsIEventListenerManager** aInstancePtrResult);
#endif // nsIEventListenerManager_h__

Просмотреть файл

@ -32,15 +32,15 @@ DEFINES=-D_IMPL_NS_HTML -DWIN32_LEAN_AND_MEAN
CPPSRCS= nsEventListenerManager.cpp \
nsEventStateManager.cpp \
nsDOMEvent.cpp \
nsDOMMutationEvent.cpp \
nsDOMMutationEvent.cpp \
nsDOMEventsIIDs.cpp \
nsPrivateTextRange.cpp \
nsPrivateTextRange.cpp \
$(NULL)
CPP_OBJS= .\$(OBJDIR)\nsEventListenerManager.obj \
.\$(OBJDIR)\nsEventStateManager.obj \
.\$(OBJDIR)\nsDOMEvent.obj \
.\$(OBJDIR)\nsDOMMutationEvent.obj \
.\$(OBJDIR)\nsDOMMutationEvent.obj \
.\$(OBJDIR)\nsDOMEventsIIDs.obj \
.\$(OBJDIR)\nsPrivateTextRange.obj \
$(NULL)
@ -48,8 +48,7 @@ CPP_OBJS= .\$(OBJDIR)\nsEventListenerManager.obj \
EXPORTS= nsDOMEventsIIDs.h
LINCS=-I$(PUBLIC)\xpcom -I$(PUBLIC)\raptor \
-I$(PUBLIC)\dom -I$(PUBLIC)\js -I..\..\html\base\src -I$(PUBLIC)\netlib -I..\..\xul\content\src
LINCS= -I..\..\html\base\src -I..\..\xul\content\src -I..\..\base\src
LCFLAGS = \
$(LCFLAGS) \

Просмотреть файл

@ -42,6 +42,7 @@
#include "prmem.h"
#include "nsLayoutAtoms.h"
#include "nsMutationEvent.h"
#include "nsContentUtils.h"
#include "nsIDOMKeyEvent.h"
#include "nsIDOMMutationEvent.h"
@ -125,11 +126,15 @@ nsDOMEvent::operator delete(void* aPtr)
nsDOMEvent::nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent, const nsAReadableString& aEventType)
nsDOMEvent::nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent,
const nsAReadableString& aEventType)
{
NS_INIT_REFCNT();
mPresContext = aPresContext;
if (mPresContext)
NS_ADDREF(mPresContext);
NS_IF_ADDREF(mPresContext);
if (aEvent) {
mEventIsInternal = PR_FALSE;
mEvent = aEvent;
@ -158,6 +163,7 @@ nsDOMEvent::nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent, const nsAR
mEvent->eventStructType = NS_EVENT;
}
}
mTarget = nsnull;
mCurrentTarget = nsnull;
mOriginalTarget = nsnull;
@ -170,33 +176,46 @@ nsDOMEvent::nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent, const nsAR
//
// extract the IME composition string
//
mText = new nsString(((nsTextEvent*)aEvent)->theText);
//
// build the range list -- ranges need to be DOM-ified since the IME transaction
// will hold a ref, the widget representation isn't persistent
//
nsIPrivateTextRange** tempTextRangeList = new nsIPrivateTextRange*[((nsTextEvent*)aEvent)->rangeCount];
if (tempTextRangeList!=nsnull) {
for(PRUint16 i=0;i<((nsTextEvent*)aEvent)->rangeCount;i++) {
nsPrivateTextRange* tempPrivateTextRange = new nsPrivateTextRange((((nsTextEvent*)aEvent)->rangeArray[i]).mStartOffset,
(((nsTextEvent*)aEvent)->rangeArray[i]).mEndOffset,
(((nsTextEvent*)aEvent)->rangeArray[i]).mRangeType);
if (tempPrivateTextRange!=nsnull) {
tempPrivateTextRange->AddRef();
tempTextRangeList[i] = (nsIPrivateTextRange*)tempPrivateTextRange;
}
}
}
// We need to create mTextRange even rangeCount is 0.
// if rangeCount is 0, mac carbon will return 0 for new and tempTextRangeList will be null. but we should still
// create mTextRange, otherwise, we will crash it later when some code call GetInputRange and AddRef to the result
mTextRange = (nsIPrivateTextRangeList*) new nsPrivateTextRangeList(((nsTextEvent*)aEvent)->rangeCount,tempTextRangeList);
if (mTextRange!=nsnull)
mTextRange->AddRef();
}
NS_INIT_REFCNT();
nsTextEvent *te = (nsTextEvent*)aEvent;
mText = new nsString(te->theText);
//
// build the range list -- ranges need to be DOM-ified since the
// IME transaction will hold a ref, the widget representation
// isn't persistent
//
nsIPrivateTextRange** tempTextRangeList =
new nsIPrivateTextRange*[te->rangeCount];
if (tempTextRangeList) {
PRUint16 i;
for(i = 0; i < te->rangeCount; i++) {
nsPrivateTextRange* tempPrivateTextRange = new
nsPrivateTextRange(te->rangeArray[i].mStartOffset,
te->rangeArray[i].mEndOffset,
te->rangeArray[i].mRangeType);
if (tempPrivateTextRange) {
NS_ADDREF(tempPrivateTextRange);
tempTextRangeList[i] = (nsIPrivateTextRange*)tempPrivateTextRange;
}
}
}
// We need to create mTextRange even rangeCount is 0.
// If rangeCount is 0, mac carbon will return 0 for new and
// tempTextRangeList will be null. but we should still create
// mTextRange, otherwise, we will crash it later when some code
// call GetInputRange and AddRef to the result
mTextRange = new nsPrivateTextRangeList(te->rangeCount ,tempTextRangeList);
NS_IF_ADDREF(mTextRange);
}
}
nsDOMEvent::~nsDOMEvent()
@ -228,6 +247,13 @@ nsDOMEvent::~nsDOMEvent()
NS_IMPL_ADDREF(nsDOMEvent)
NS_IMPL_RELEASE(nsDOMEvent)
// XPConnect interface list for nsDOMEvent
NS_CLASSINFO_MAP_BEGIN(Event)
NS_CLASSINFO_MAP_ENTRY(nsIDOMKeyEvent)
NS_CLASSINFO_MAP_ENTRY(nsIDOMMouseEvent)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNSUIEvent)
NS_CLASSINFO_MAP_END
NS_INTERFACE_MAP_BEGIN(nsDOMEvent)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMEvent, nsIDOMMouseEvent)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMUIEvent, nsIDOMMouseEvent)
@ -237,8 +263,8 @@ NS_INTERFACE_MAP_BEGIN(nsDOMEvent)
NS_INTERFACE_MAP_ENTRY(nsIPrivateDOMEvent)
NS_INTERFACE_MAP_ENTRY(nsIPrivateTextEvent)
NS_INTERFACE_MAP_ENTRY(nsIPrivateCompositionEvent)
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectOwner)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMMouseEvent)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(Event)
NS_INTERFACE_MAP_END
// nsIDOMEventInterface
@ -1387,33 +1413,6 @@ const char* nsDOMEvent::GetEventName(PRUint32 aEventType)
return nsnull;
}
NS_IMETHODIMP
nsDOMEvent::GetScriptObject(nsIScriptContext *aContext, void** aScriptObject)
{
nsresult res = NS_OK;
if (nsnull == mScriptObject) {
if (mEvent && mEvent->eventStructType == NS_MUTATION_EVENT) {
nsISupports *supports = (nsISupports *)(nsIDOMMutationEvent *)this;
res = NS_NewScriptMutationEvent(aContext, supports, nsnull, (void**)&mScriptObject);
}
else {
nsISupports *supports = (nsISupports *)(nsIDOMMouseEvent *)this;
res = NS_NewScriptKeyEvent(aContext, supports, nsnull, (void**)&mScriptObject);
}
}
*aScriptObject = mScriptObject;
return res;
}
NS_IMETHODIMP
nsDOMEvent::SetScriptObject(void* aScriptObject)
{
mScriptObject = aScriptObject;
return NS_OK;
}
nsresult NS_NewDOMUIEvent(nsIDOMEvent** aInstancePtrResult,
nsIPresContext* aPresContext,
const nsAReadableString& aEventType,

Просмотреть файл

@ -32,7 +32,6 @@
#include "nsIPrivateTextEvent.h"
#include "nsIPrivateTextRange.h"
#include "nsIDOMEvent.h"
#include "nsIScriptObjectOwner.h"
#include "nsIPresContext.h"
#include "nsPoint.h"
@ -45,8 +44,8 @@ class nsDOMEvent : public nsIDOMKeyEvent,
public nsIDOMNSUIEvent,
public nsIPrivateDOMEvent,
public nsIPrivateTextEvent,
public nsIPrivateCompositionEvent,
public nsIScriptObjectOwner {
public nsIPrivateCompositionEvent
{
public:
// Note: this enum must be kept in sync with mEventNames in nsDOMEvent.cpp
@ -100,7 +99,8 @@ public:
eDOMEvents_characterdatamodified
};
nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent, const nsAReadableString& aEventType);
nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent,
const nsAReadableString& aEventType);
virtual ~nsDOMEvent();
NS_DECL_ISUPPORTS
@ -118,12 +118,15 @@ public:
NS_IMETHOD PreventBubble();
NS_IMETHOD PreventCapture();
NS_IMETHOD PreventDefault();
NS_IMETHOD InitEvent(const nsAReadableString& aEventTypeArg, PRBool aCanBubbleArg, PRBool aCancelableArg);
NS_IMETHOD InitEvent(const nsAReadableString& aEventTypeArg,
PRBool aCanBubbleArg, PRBool aCancelableArg);
// nsIDOMUIEvent Interface
NS_IMETHOD GetView(nsIDOMAbstractView** aView);
NS_IMETHOD GetDetail(PRInt32* aDetail);
NS_IMETHOD InitUIEvent(const nsAReadableString& aTypeArg, PRBool aCanBubbleArg, PRBool aCancelableArg, nsIDOMAbstractView* aViewArg, PRInt32 aDetailArg);
NS_IMETHOD InitUIEvent(const nsAReadableString& aTypeArg,
PRBool aCanBubbleArg, PRBool aCancelableArg,
nsIDOMAbstractView* aViewArg, PRInt32 aDetailArg);
// nsIDOMMouseEvent Interface and nsIDOMKeyEvent Interface
NS_IMETHOD GetScreenX(PRInt32* aScreenX);
@ -138,9 +141,19 @@ public:
NS_IMETHOD GetRelatedTarget(nsIDOMEventTarget** aRelatedTarget);
NS_IMETHOD GetCharCode(PRUint32* aCharCode);
NS_IMETHOD GetKeyCode(PRUint32* aKeyCode);
NS_IMETHOD InitMouseEvent(const nsAReadableString& aTypeArg, PRBool aCtrlKeyArg, PRBool aAltKeyArg, PRBool aShiftKeyArg, PRBool aMetaKeyArg, PRInt32 aScreenXArg, PRInt32 aScreenYArg, PRInt32 aClientXArg, PRInt32 aClientYArg, PRUint16 aButtonArg, PRUint16 aDetailArg);
NS_IMETHOD InitKeyEvent(const nsAReadableString& aTypeArg, PRBool aCanBubbleArg, PRBool aCancelableArg, PRBool aCtrlKeyArg, PRBool aAltKeyArg, PRBool aShiftKeyArg, PRBool aMetaKeyArg, PRUint32 aKeyCodeArg, PRUint32 aCharCodeArg, nsIDOMAbstractView* aViewArg);
NS_IMETHOD InitMouseEvent(const nsAReadableString& aTypeArg,
PRBool aCtrlKeyArg, PRBool aAltKeyArg,
PRBool aShiftKeyArg, PRBool aMetaKeyArg,
PRInt32 aScreenXArg, PRInt32 aScreenYArg,
PRInt32 aClientXArg, PRInt32 aClientYArg,
PRUint16 aButtonArg, PRUint16 aDetailArg);
NS_IMETHOD InitKeyEvent(const nsAReadableString& aTypeArg,
PRBool aCanBubbleArg, PRBool aCancelableArg,
PRBool aCtrlKeyArg, PRBool aAltKeyArg,
PRBool aShiftKeyArg, PRBool aMetaKeyArg,
PRUint32 aKeyCodeArg, PRUint32 aCharCodeArg,
nsIDOMAbstractView* aViewArg);
// nsIDOMNSUIEvent interface
NS_IMETHOD GetLayerX(PRInt32* aLayerX);
NS_IMETHOD GetLayerY(PRInt32* aLayerY);
@ -175,10 +188,6 @@ public:
NS_IMETHOD GetCompositionReply(nsTextEventReply** aReply);
NS_IMETHOD GetReconversionReply(nsReconversionEventReply** aReply);
// nsIScriptObjectOwner interface
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void* aScriptObject);
/** Overloaded new operator. Initializes the memory to 0.
* Relies on a recycler to perform the allocation,
* optionally from a pool.
@ -206,7 +215,8 @@ protected:
static PRBool gEventPoolInUse;
//Internal helper funcs
nsresult GetScrollInfo(nsIScrollableView** aScrollableView, float* aP2T, float* aT2P);
nsresult GetScrollInfo(nsIScrollableView** aScrollableView, float* aP2T,
float* aT2P);
nsresult SetEventType(const nsAReadableString& aEventTypeArg);
const char* GetEventName(PRUint32 aEventType);

Просмотреть файл

@ -24,13 +24,14 @@
#include "nsIDOMMutationEvent.h"
#include "nsDOMEvent.h"
#include "nsMutationEvent.h"
#include "nsContentUtils.h"
class nsIPresContext;
class nsDOMMutationEvent : public nsIDOMMutationEvent, public nsDOMEvent
class nsDOMMutationEvent : public nsDOMEvent, public nsIDOMMutationEvent
{
NS_DECL_IDOMMUTATIONEVENT
NS_FORWARD_IDOMEVENT(nsDOMEvent::)
NS_DECL_NSIDOMMUTATIONEVENT
NS_FORWARD_NSIDOMEVENT(nsDOMEvent::)
NS_DECL_ISUPPORTS_INHERITED
@ -38,12 +39,11 @@ class nsDOMMutationEvent : public nsIDOMMutationEvent, public nsDOMEvent
nsEvent* aEvent);
~nsDOMMutationEvent();
};
nsDOMMutationEvent::nsDOMMutationEvent(nsIPresContext* aPresContext,
nsEvent* aEvent)
:nsDOMEvent(aPresContext, aEvent, NS_LITERAL_STRING("MutationEvents"))
:nsDOMEvent(aPresContext, aEvent, NS_LITERAL_STRING("MutationEvents"))
{
nsMutationEvent* mutation = (nsMutationEvent*)mEvent;
SetTarget(mutation->mTarget);
@ -53,16 +53,23 @@ nsDOMMutationEvent::~nsDOMMutationEvent() {
}
NS_IMPL_ADDREF_INHERITED(nsDOMMutationEvent, nsDOMEvent)
NS_IMPL_RELEASE_INHERITED(nsDOMMutationEvent, nsDOMEvent)
// XPConnect interface list for nsDOMMutationEvent
NS_CLASSINFO_MAP_BEGIN(MutationEvent)
NS_CLASSINFO_MAP_ENTRY(nsIDOMMutationEvent)
NS_CLASSINFO_MAP_END
NS_INTERFACE_MAP_BEGIN(nsDOMMutationEvent)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMMutationEvent)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMEvent, nsIDOMMutationEvent)
NS_INTERFACE_MAP_ENTRY(nsIPrivateDOMEvent)
NS_INTERFACE_MAP_ENTRY(nsIDOMMutationEvent)
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectOwner)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(MutationEvent)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF_INHERITED(nsDOMMutationEvent, nsDOMEvent)
NS_IMPL_RELEASE_INHERITED(nsDOMMutationEvent, nsDOMEvent)
NS_IMETHODIMP
nsDOMMutationEvent::GetRelatedNode(nsIDOMNode** aRelatedNode)
{

Просмотреть файл

@ -42,7 +42,6 @@
#include "nsIEventStateManager.h"
#include "nsPIDOMWindow.h"
#include "nsIPrivateDOMEvent.h"
#include "nsIScriptObjectOwner.h"
#include "nsIScriptEventListener.h"
#include "nsIJSEventListener.h"
#include "nsDOMEventsIIDs.h"
@ -54,12 +53,18 @@
#include "nsCOMPtr.h"
#include "nsIServiceManager.h"
#include "nsIScriptSecurityManager.h"
#include "nsDOMPropEnums.h"
#include "nsDOMError.h"
#include "nsIJSContextStack.h"
#include "nsIDocument.h"
#include "nsIPresShell.h"
#include "nsMutationEvent.h"
#include "nsIXPConnect.h"
#include "nsIDOMScriptObjectFactory.h"
#include "nsDOMCID.h"
#include "nsIScriptObjectOwner.h" // for nsIScriptEventHandlerOwner
static NS_DEFINE_CID(kDOMScriptObjectFactoryCID,
NS_DOM_SCRIPT_OBJECT_FACTORY_CID);
nsEventListenerManager::nsEventListenerManager()
@ -352,11 +357,13 @@ void nsEventListenerManager::ReleaseListeners(nsVoidArray** aListeners, PRBool a
* Sets events listeners of all types.
* @param an event listener
*/
nsresult nsEventListenerManager::AddEventListener(nsIDOMEventListener *aListener,
EventArrayType aType,
PRInt32 aSubType,
nsHashKey* aKey,
PRInt32 aFlags)
nsresult
nsEventListenerManager::AddEventListener(nsIDOMEventListener *aListener,
EventArrayType aType,
PRInt32 aSubType,
nsHashKey* aKey,
PRInt32 aFlags)
{
NS_ENSURE_TRUE(aListener, NS_ERROR_FAILURE);
@ -445,11 +452,12 @@ nsresult nsEventListenerManager::AddEventListener(nsIDOMEventListener *aListener
return NS_OK;
}
nsresult nsEventListenerManager::RemoveEventListener(nsIDOMEventListener *aListener,
EventArrayType aType,
PRInt32 aSubType,
nsHashKey* aKey,
PRInt32 aFlags)
nsresult
nsEventListenerManager::RemoveEventListener(nsIDOMEventListener *aListener,
EventArrayType aType,
PRInt32 aSubType,
nsHashKey* aKey,
PRInt32 aFlags)
{
nsVoidArray* listeners = GetListenersByType(aType, aKey, PR_FALSE);
@ -515,8 +523,10 @@ nsresult nsEventListenerManager::AddEventListenerByIID(nsIDOMEventListener *aLis
return NS_OK;
}
nsresult nsEventListenerManager::RemoveEventListenerByIID(nsIDOMEventListener *aListener,
const nsIID& aIID, PRInt32 aFlags)
NS_IMETHODIMP
nsEventListenerManager::RemoveEventListenerByIID(nsIDOMEventListener *aListener,
const nsIID& aIID,
PRInt32 aFlags)
{
RemoveEventListener(aListener, GetTypeForIID(aIID), NS_EVENT_BITS_NONE, nsnull, aFlags);
return NS_OK;
@ -714,8 +724,10 @@ nsresult nsEventListenerManager::GetIdentifiersForType(nsIAtom* aType, EventArra
return NS_OK;
}
nsresult nsEventListenerManager::AddEventListenerByType(nsIDOMEventListener *aListener,
const nsAReadableString& aType, PRInt32 aFlags)
NS_IMETHODIMP
nsEventListenerManager::AddEventListenerByType(nsIDOMEventListener *aListener,
const nsAReadableString& aType,
PRInt32 aFlags)
{
PRInt32 subType;
EventArrayType arrayType;
@ -739,8 +751,10 @@ nsresult nsEventListenerManager::AddEventListenerByType(nsIDOMEventListener *aLi
return NS_OK;
}
nsresult nsEventListenerManager::RemoveEventListenerByType(nsIDOMEventListener *aListener,
const nsAReadableString& aType, PRInt32 aFlags)
NS_IMETHODIMP
nsEventListenerManager::RemoveEventListenerByType(nsIDOMEventListener *aListener,
const nsAReadableString& aType,
PRInt32 aFlags)
{
PRInt32 subType;
EventArrayType arrayType;
@ -781,33 +795,42 @@ nsEventListenerManager::FindJSEventListener(EventArrayType aType)
return nsnull;
}
nsresult nsEventListenerManager::SetJSEventListener(nsIScriptContext *aContext,
nsIScriptObjectOwner *aOwner,
nsIAtom* aName,
PRBool aIsString)
nsresult
nsEventListenerManager::SetJSEventListener(nsIScriptContext *aContext,
nsISupports *aObject,
nsIAtom* aName,
PRBool aIsString)
{
nsresult result = NS_OK;
nsresult rv = NS_OK;
nsListenerStruct *ls;
PRInt32 flags;
EventArrayType arrayType;
NS_ENSURE_SUCCESS(GetIdentifiersForType(aName, &arrayType, &flags), NS_ERROR_FAILURE);
NS_ENSURE_SUCCESS(GetIdentifiersForType(aName, &arrayType, &flags),
NS_ERROR_FAILURE);
ls = FindJSEventListener(arrayType);
if (nsnull == ls) {
//If we didn't find a script listener or no listeners existed create and add a new one.
nsIDOMEventListener* scriptListener;
result = NS_NewJSEventListener(&scriptListener, aContext, aOwner);
if (NS_SUCCEEDED(result)) {
AddEventListener(scriptListener, arrayType, NS_EVENT_BITS_NONE, nsnull, NS_EVENT_FLAG_BUBBLE | NS_PRIV_EVENT_FLAG_SCRIPT);
NS_RELEASE(scriptListener);
//If we didn't find a script listener or no listeners existed
//create and add a new one.
nsCOMPtr<nsIDOMScriptObjectFactory> factory =
do_GetService(kDOMScriptObjectFactoryCID);
NS_ENSURE_TRUE(factory, NS_ERROR_FAILURE);
nsCOMPtr<nsIDOMEventListener> scriptListener;
rv = factory->NewJSEventListener(aContext, aObject,
getter_AddRefs(scriptListener));
if (NS_SUCCEEDED(rv)) {
AddEventListener(scriptListener, arrayType, NS_EVENT_BITS_NONE, nsnull,
NS_EVENT_FLAG_BUBBLE | NS_PRIV_EVENT_FLAG_SCRIPT);
ls = FindJSEventListener(arrayType);
}
}
if (NS_SUCCEEDED(result) && ls) {
//Set flag to indicate possible need for compilation later
if (NS_SUCCEEDED(rv) && ls) {
// Set flag to indicate possible need for compilation later
if (aIsString) {
ls->mHandlerIsString |= flags;
}
@ -819,25 +842,37 @@ nsresult nsEventListenerManager::SetJSEventListener(nsIScriptContext *aContext,
ls->mSubType |= flags;
}
return result;
return rv;
}
nsresult
NS_IMETHODIMP
nsEventListenerManager::AddScriptEventListener(nsIScriptContext* aContext,
nsIScriptObjectOwner *aScriptObjectOwner,
nsISupports *aObject,
nsIAtom *aName,
const nsAReadableString& aBody,
PRBool aDeferCompilation)
{
JSObject *scriptObject;
nsresult rv;
if (!aDeferCompilation) {
rv = aScriptObjectOwner->GetScriptObject(aContext, (void**)&scriptObject);
if (NS_FAILED(rv))
return rv;
nsCOMPtr<nsIScriptEventHandlerOwner> handlerOwner = do_QueryInterface(aScriptObjectOwner);
if (!aDeferCompilation) {
nsCOMPtr<nsIXPConnect> xpc(do_GetService(nsIXPConnect::GetCID()));
JSContext *cx = (JSContext *)aContext->GetNativeContext();
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
rv = xpc->WrapNative(cx, ::JS_GetGlobalObject(cx), aObject,
NS_GET_IID(nsISupports), getter_AddRefs(holder));
NS_ENSURE_SUCCESS(rv, rv);
JSObject *scriptObject = nsnull;
rv = holder->GetJSObject(&scriptObject);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIScriptEventHandlerOwner> handlerOwner =
do_QueryInterface(aObject);
void *handler = nsnull;
PRBool done = PR_FALSE;
@ -855,7 +890,8 @@ nsEventListenerManager::AddScriptEventListener(nsIScriptContext* aContext,
if (handlerOwner) {
// Always let the handler owner compile the event handler, as
// it may want to use a special context or scope object.
rv = handlerOwner->CompileEventHandler(aContext, scriptObject, aName, aBody, &handler);
rv = handlerOwner->CompileEventHandler(aContext, scriptObject, aName,
aBody, &handler);
}
else {
rv = aContext->CompileEventHandler(scriptObject, aName, aBody,
@ -865,7 +901,8 @@ nsEventListenerManager::AddScriptEventListener(nsIScriptContext* aContext,
if (NS_FAILED(rv)) return rv;
}
}
return SetJSEventListener(aContext, aScriptObjectOwner, aName, aDeferCompilation);
return SetJSEventListener(aContext, aObject, aName, aDeferCompilation);
}
nsresult
@ -876,7 +913,8 @@ nsEventListenerManager::RemoveScriptEventListener(nsIAtom *aName)
PRInt32 flags;
EventArrayType arrayType;
NS_ENSURE_SUCCESS(GetIdentifiersForType(aName, &arrayType, &flags), NS_ERROR_FAILURE);
NS_ENSURE_SUCCESS(GetIdentifiersForType(aName, &arrayType, &flags),
NS_ERROR_FAILURE);
ls = FindJSEventListener(arrayType);
if (ls) {
@ -896,80 +934,118 @@ nsEventListenerManager::RemoveScriptEventListener(nsIAtom *aName)
return result;
}
nsresult
nsEventListenerManager::RegisterScriptEventListener(nsIScriptContext *aContext,
nsIScriptObjectOwner *aScriptObjectOwner,
NS_IMETHODIMP
nsEventListenerManager::RegisterScriptEventListener(nsIScriptContext *aContext,
nsISupports *aObject,
nsIAtom *aName)
{
// Check that we have access to set an event listener. Prevents snooping attacks across
// domains by setting onkeypress handlers, for instance.
// You'd think it'd work just to get the JSContext from aContext, but that's actually the
// JSContext whose private object parents the object in aScriptObjectOwner.
// Check that we have access to set an event listener. Prevents
// snooping attacks across domains by setting onkeypress handlers,
// for instance.
// You'd think it'd work just to get the JSContext from aContext,
// but that's actually the JSContext whose private object parents
// the object in aObject.
nsresult rv;
NS_WITH_SERVICE(nsIJSContextStack, stack, "@mozilla.org/js/xpc/ContextStack;1",
&rv);
nsCOMPtr<nsIJSContextStack> stack =
do_GetService("@mozilla.org/js/xpc/ContextStack;1", &rv);
if (NS_FAILED(rv))
return rv;
JSContext *cx;
if (NS_FAILED(stack->Peek(&cx)))
return nsnull;
JSObject *jsobj;
if (NS_FAILED(rv = aScriptObjectOwner->GetScriptObject(aContext, (void**)&jsobj)))
return rv;
NS_WITH_SERVICE(nsIScriptSecurityManager, securityManager,
NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
JSContext *current_cx = (JSContext *)aContext->GetNativeContext();
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
nsCOMPtr<nsIXPConnect> xpc(do_GetService(nsIXPConnect::GetCID()));
rv = xpc->WrapNative(current_cx, ::JS_GetGlobalObject(current_cx), aObject,
NS_GET_IID(nsISupports), getter_AddRefs(holder));
NS_ENSURE_SUCCESS(rv, rv);
JSObject *jsobj = nsnull;
rv = holder->GetJSObject(&jsobj);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIScriptSecurityManager> securityManager =
do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
if (NS_FAILED(rv))
return rv;
if (NS_FAILED(rv = securityManager->CheckScriptAccess(cx, jsobj,
NS_DOM_PROP_EVENTTARGET_ADDEVENTLISTENER, PR_TRUE)))
{
if (NS_FAILED(rv = securityManager->CheckPropertyAccess(
nsIXPCSecurityManager::ACCESS_SET_PROPERTY, cx, jsobj, aObject, nsnull,
"EventTarget","addEventListener", PR_FALSE))) {
// XXX set pending exception on the native call context?
return rv;
}
return SetJSEventListener(aContext, aScriptObjectOwner, aName, PR_FALSE);
return SetJSEventListener(aContext, aObject, aName, PR_FALSE);
}
nsresult
nsEventListenerManager::CompileScriptEventListener(nsIScriptContext *aContext,
nsIScriptObjectOwner *aScriptObjectOwner,
nsIAtom *aName)
nsISupports *aObject,
nsIAtom *aName,
PRBool *aDidCompile)
{
nsresult result = NS_OK;
nsresult rv = NS_OK;
nsListenerStruct *ls;
PRInt32 subType;
EventArrayType arrayType;
result = GetIdentifiersForType(aName, &arrayType, &subType);
if (NS_SUCCEEDED(result)) {
ls = FindJSEventListener(arrayType);
if (!ls) {
//nothing to compile
return NS_OK;
}
*aDidCompile = PR_FALSE;
if (ls->mHandlerIsString & subType) {
result = CompileEventHandlerInternal(aContext, aScriptObjectOwner, aName, ls, subType);
}
rv = GetIdentifiersForType(aName, &arrayType, &subType);
NS_ENSURE_SUCCESS(rv, rv);
ls = FindJSEventListener(arrayType);
if (!ls) {
//nothing to compile
return NS_OK;
}
return result;
if (ls->mHandlerIsString & subType) {
rv = CompileEventHandlerInternal(aContext, aObject, aName, ls, subType);
}
// Set *aDidCompile to true even if we didn't really compile
// anything right now, if we get here it means that this event
// handler has been compiled at some point, that's good enough for
// us.
*aDidCompile = PR_TRUE;
return rv;
}
nsresult
nsEventListenerManager::CompileEventHandlerInternal(nsIScriptContext *aContext,
nsIScriptObjectOwner *aScriptObjectOwner,
nsISupports *aObject,
nsIAtom *aName,
nsListenerStruct *aListenerStruct,
PRUint32 aSubType)
{
nsresult result = NS_OK;
JSObject* jsobj;
result = aScriptObjectOwner->GetScriptObject(aContext, (void**)&jsobj);
if (NS_FAILED(result)) {
return NS_ERROR_FAILURE;
}
nsCOMPtr<nsIXPConnect> xpc(do_GetService(nsIXPConnect::GetCID()));
nsCOMPtr<nsIScriptEventHandlerOwner> handlerOwner = do_QueryInterface(aScriptObjectOwner);
JSContext *cx = (JSContext *)aContext->GetNativeContext();
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
result = xpc->WrapNative(cx, ::JS_GetGlobalObject(cx), aObject,
NS_GET_IID(nsISupports), getter_AddRefs(holder));
NS_ENSURE_SUCCESS(result, result);
JSObject *jsobj = nsnull;
result = holder->GetJSObject(&jsobj);
NS_ENSURE_SUCCESS(result, result);
nsCOMPtr<nsIScriptEventHandlerOwner> handlerOwner =
do_QueryInterface(aObject);
void* handler = nsnull;
if (handlerOwner) {
@ -985,25 +1061,29 @@ nsEventListenerManager::CompileEventHandlerInternal(nsIScriptContext *aContext,
// XXX I don't like that we have to reference content
// from here. The alternative is to store the event handler
// string on the JS object itself.
nsCOMPtr<nsIContent> content = do_QueryInterface(aScriptObjectOwner);
nsCOMPtr<nsIContent> content = do_QueryInterface(aObject);
NS_ASSERTION(content, "only content should have event handler attributes");
if (content) {
nsAutoString handlerBody;
result = content->GetAttribute(kNameSpaceID_None, aName, handlerBody);
if (NS_SUCCEEDED(result)) {
if (handlerOwner) {
// Always let the handler owner compile the event
// handler, as it may want to use a special
// context or scope object.
result = handlerOwner->CompileEventHandler(aContext, jsobj, aName, handlerBody, &handler);
result = handlerOwner->CompileEventHandler(aContext, jsobj, aName,
handlerBody, &handler);
}
else {
result = aContext->CompileEventHandler(jsobj, aName, handlerBody,
(handlerOwner != nsnull),
&handler);
}
if (NS_SUCCEEDED(result))
if (NS_SUCCEEDED(result)) {
aListenerStruct->mHandlerIsString &= ~aSubType;
}
}
}
}
@ -1040,9 +1120,10 @@ nsEventListenerManager::HandleEventSubType(nsListenerStruct* aListenerStruct,
nsCOMPtr<nsIJSEventListener> jslistener = do_QueryInterface(aListenerStruct->mListener);
if (jslistener) {
nsCOMPtr<nsIScriptObjectOwner> owner;
nsCOMPtr<nsISupports> target;
nsCOMPtr<nsIScriptContext> scriptCX;
result = jslistener->GetEventTarget(getter_AddRefs(scriptCX), getter_AddRefs(owner));
result = jslistener->GetEventTarget(getter_AddRefs(scriptCX),
getter_AddRefs(target));
if (NS_SUCCEEDED(result)) {
nsAutoString eventString;
@ -1050,7 +1131,8 @@ nsEventListenerManager::HandleEventSubType(nsListenerStruct* aListenerStruct,
eventString.InsertWithConversion("on", 0, 2);
nsCOMPtr<nsIAtom> atom = getter_AddRefs(NS_NewAtom(eventString));
result = CompileEventHandlerInternal(scriptCX, owner, atom, aListenerStruct, aSubType);
result = CompileEventHandlerInternal(scriptCX, target, atom,
aListenerStruct, aSubType);
}
}
}
@ -2112,10 +2194,12 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext* aPresContext,
/**
* Creates a DOM event
*/
nsresult nsEventListenerManager::CreateEvent(nsIPresContext* aPresContext,
nsEvent* aEvent,
const nsAReadableString& aEventType,
nsIDOMEvent** aDOMEvent)
NS_IMETHODIMP
nsEventListenerManager::CreateEvent(nsIPresContext* aPresContext,
nsEvent* aEvent,
const nsAReadableString& aEventType,
nsIDOMEvent** aDOMEvent)
{
nsAutoString str(aEventType);
if (!aEvent && !str.EqualsIgnoreCase("MouseEvents") && !str.EqualsIgnoreCase("KeyEvents") &&
@ -2135,7 +2219,8 @@ nsresult nsEventListenerManager::CreateEvent(nsIPresContext* aPresContext,
* @param an event listener
*/
nsresult nsEventListenerManager::CaptureEvent(PRInt32 aEventTypes)
NS_IMETHODIMP
nsEventListenerManager::CaptureEvent(PRInt32 aEventTypes)
{
return FlipCaptureBit(aEventTypes, PR_TRUE);
}
@ -2145,7 +2230,8 @@ nsresult nsEventListenerManager::CaptureEvent(PRInt32 aEventTypes)
* @param an event listener
*/
nsresult nsEventListenerManager::ReleaseEvent(PRInt32 aEventTypes)
NS_IMETHODIMP
nsEventListenerManager::ReleaseEvent(PRInt32 aEventTypes)
{
return FlipCaptureBit(aEventTypes, PR_FALSE);
}
@ -2374,7 +2460,8 @@ nsresult nsEventListenerManager::FlipCaptureBit(PRInt32 aEventTypes, PRBool aIni
return NS_OK;
}
nsresult nsEventListenerManager::SetListenerTarget(nsISupports* aTarget)
NS_IMETHODIMP
nsEventListenerManager::SetListenerTarget(nsISupports* aTarget)
{
//WEAK reference, must be set back to nsnull when done
mTarget = aTarget;
@ -2469,18 +2556,15 @@ nsEventListenerManager::HandleEvent(nsIDOMEvent *aEvent)
return DispatchEvent(aEvent);
}
NS_HTML nsresult NS_NewEventListenerManager(nsIEventListenerManager** aInstancePtrResult)
nsresult
NS_NewEventListenerManager(nsIEventListenerManager** aInstancePtrResult)
{
nsIEventListenerManager* l = new nsEventListenerManager();
if (nsnull == l) {
if (!l) {
return NS_ERROR_OUT_OF_MEMORY;
}
if (NS_OK == l->QueryInterface(NS_GET_IID(nsIEventListenerManager), (void**) aInstancePtrResult)) {
return NS_OK;
}
return NS_ERROR_FAILURE;
return CallQueryInterface(l, aInstancePtrResult);
}

Просмотреть файл

@ -95,48 +95,58 @@ public:
* Sets events listeners of all types.
* @param an event listener
*/
NS_IMETHOD AddEventListenerByIID(nsIDOMEventListener *aListener,
const nsIID& aIID, PRInt32 aFlags);
NS_IMETHOD RemoveEventListenerByIID(nsIDOMEventListener *aListener,
const nsIID& aIID, PRInt32 aFlags);
NS_IMETHOD AddEventListenerByType(nsIDOMEventListener *aListener,
const nsAReadableString& type,
PRInt32 aFlags);
NS_IMETHOD RemoveEventListenerByType(nsIDOMEventListener *aListener,
const nsAReadableString& type,
PRInt32 aFlags) ;
NS_IMETHOD AddScriptEventListener(nsIScriptContext*aContext,
nsISupports *aObject,
nsIAtom *aName,
const nsAReadableString& aFunc,
PRBool aDeferCompilation);
NS_IMETHOD RegisterScriptEventListener(nsIScriptContext *aContext,
nsISupports *aObject,
nsIAtom* aName);
NS_IMETHOD RemoveScriptEventListener(nsIAtom *aName);
NS_IMETHOD CompileScriptEventListener(nsIScriptContext *aContext,
nsISupports *aObject,
nsIAtom* aName, PRBool *aDidCompile);
virtual nsresult AddEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID, PRInt32 aFlags);
virtual nsresult RemoveEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID, PRInt32 aFlags);
virtual nsresult AddEventListenerByType(nsIDOMEventListener *aListener, const nsAReadableString& type, PRInt32 aFlags);
virtual nsresult RemoveEventListenerByType(nsIDOMEventListener *aListener, const nsAReadableString& type, PRInt32 aFlags) ;
NS_IMETHOD CaptureEvent(PRInt32 aEventTypes);
NS_IMETHOD ReleaseEvent(PRInt32 aEventTypes);
virtual nsresult AddScriptEventListener(nsIScriptContext*aContext,
nsIScriptObjectOwner *aScriptObjectOwner,
nsIAtom *aName,
const nsAReadableString& aFunc,
PRBool aDeferCompilation);
virtual nsresult RemoveScriptEventListener(nsIAtom *aName);
virtual nsresult RegisterScriptEventListener(nsIScriptContext *aContext,
nsIScriptObjectOwner *aScriptObjectOwner,
nsIAtom* aName);
virtual nsresult CompileScriptEventListener(nsIScriptContext *aContext,
nsIScriptObjectOwner *aScriptObjectOwner,
nsIAtom* aName);
NS_IMETHOD HandleEvent(nsIPresContext* aPresContext,
nsEvent* aEvent,
nsIDOMEvent** aDOMEvent,
nsIDOMEventTarget* aCurrentTarget,
PRUint32 aFlags,
nsEventStatus* aEventStatus);
NS_IMETHOD CreateEvent(nsIPresContext* aPresContext,
nsEvent* aEvent,
const nsAReadableString& aEventType,
nsIDOMEvent** aDOMEvent);
virtual nsresult CaptureEvent(PRInt32 aEventTypes);
virtual nsresult ReleaseEvent(PRInt32 aEventTypes);
NS_IMETHOD RemoveAllListeners(PRBool aScriptOnly);
virtual nsresult HandleEvent(nsIPresContext* aPresContext,
nsEvent* aEvent,
nsIDOMEvent** aDOMEvent,
nsIDOMEventTarget* aCurrentTarget,
PRUint32 aFlags,
nsEventStatus* aEventStatus);
NS_IMETHOD SetListenerTarget(nsISupports* aTarget);
virtual nsresult CreateEvent(nsIPresContext* aPresContext,
nsEvent* aEvent,
const nsAReadableString& aEventType,
nsIDOMEvent** aDOMEvent);
NS_IMETHOD HasMutationListeners(PRBool* aListener)
{
*aListener = (GetListenersByType(eEventArrayType_Mutation, nsnull,
PR_FALSE) != nsnull);
return NS_OK;
}
virtual nsresult RemoveAllListeners(PRBool aScriptOnly);
virtual nsresult SetListenerTarget(nsISupports* aTarget);
virtual nsresult HasMutationListeners(PRBool* aListener) { *aListener = (GetListenersByType(eEventArrayType_Mutation, nsnull, PR_FALSE) != nsnull); return NS_OK; };
static nsresult GetIdentifiersForType(nsIAtom* aType, EventArrayType* aArrayType, PRInt32* aSubType);
static nsresult GetIdentifiersForType(nsIAtom* aType,
EventArrayType* aArrayType,
PRInt32* aSubType);
// nsIDOMEventTarget interface
NS_IMETHOD AddEventListener(const nsAReadableString& aType,
@ -148,8 +158,10 @@ public:
NS_IMETHOD DispatchEvent(nsIDOMEvent* aEvent);
// nsIDOMEventReceiver interface
NS_IMETHOD AddEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID);
NS_IMETHOD RemoveEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID);
NS_IMETHOD AddEventListenerByIID(nsIDOMEventListener *aListener,
const nsIID& aIID);
NS_IMETHOD RemoveEventListenerByIID(nsIDOMEventListener *aListener,
const nsIID& aIID);
NS_IMETHOD GetListenerManager(nsIEventListenerManager** aInstancePtrResult);
NS_IMETHOD GetNewListenerManager(nsIEventListenerManager **aInstancePtrResult);
NS_IMETHOD HandleEvent(nsIDOMEvent *aEvent);
@ -161,12 +173,14 @@ protected:
PRUint32 aSubType,
PRUint32 aPhaseFlags);
nsresult CompileEventHandlerInternal(nsIScriptContext *aContext,
nsIScriptObjectOwner *aScriptObjectOwner,
nsISupports *aObject,
nsIAtom *aName,
nsListenerStruct *aListenerStruct,
PRUint32 aSubType);
nsListenerStruct* FindJSEventListener(EventArrayType aType);
nsresult SetJSEventListener(nsIScriptContext *aContext, nsIScriptObjectOwner *aOwner, nsIAtom* aName, PRBool aIsString);
nsresult SetJSEventListener(nsIScriptContext *aContext,
nsISupports *aObject, nsIAtom* aName,
PRBool aIsString);
nsresult AddEventListener(nsIDOMEventListener *aListener,
EventArrayType aType,
PRInt32 aSubType,

Просмотреть файл

@ -73,7 +73,7 @@
#include "nsITreeFrame.h"
#include "nsIOutlinerBoxObject.h"
#include "nsIScrollableViewProvider.h"
#include "nsIDOMNSDocument.h"
#include "nsIDOMDocumentRange.h"
#include "nsIDOMRange.h"
#include "nsICaret.h"
@ -1057,8 +1057,8 @@ nsEventStateManager::ChangeTextSize(PRInt32 change)
ourWindow->GetPrivateRoot(getter_AddRefs(rootWindow));
if(!rootWindow) return NS_ERROR_FAILURE;
nsCOMPtr<nsIDOMWindowInternal> windowContent;
rootWindow->Get_content(getter_AddRefs(windowContent));
nsCOMPtr<nsIDOMWindow> windowContent;
rootWindow->GetContent(getter_AddRefs(windowContent));
if(!windowContent) return NS_ERROR_FAILURE;
nsCOMPtr<nsIDOMDocument> domDoc;
@ -1090,7 +1090,7 @@ nsEventStateManager::ChangeTextSize(PRInt32 change)
float textzoom;
mv->GetTextZoom(&textzoom);
textzoom += 0.1*change;
textzoom += ((float)change) / 10;
if (textzoom > 0 && textzoom <= 20)
mv->SetTextZoom(textzoom);
@ -3705,7 +3705,7 @@ nsresult nsEventStateManager::MoveCaretToFocus()
mPresContext->GetShell(getter_AddRefs(shell));
if (shell) {
// rangeDoc is a document interface we can create a range with
nsCOMPtr<nsIDOMNSDocument> rangeDoc(do_QueryInterface(mDocument));
nsCOMPtr<nsIDOMDocumentRange> rangeDoc(do_QueryInterface(mDocument));
nsCOMPtr<nsIDOMNode> currentFocusNode(do_QueryInterface(mCurrentFocus));
nsCOMPtr<nsIFrameSelection> frameSelection;
shell->GetFrameSelection(getter_AddRefs(frameSelection));
@ -3717,7 +3717,7 @@ nsresult nsEventStateManager::MoveCaretToFocus()
getter_AddRefs(domSelection));
if (domSelection) {
// First clear the selection
domSelection ->RemoveAllRanges();
domSelection->RemoveAllRanges();
nsCOMPtr<nsIDOMRange> newRange;
nsresult rv = rangeDoc->CreateRange(getter_AddRefs(newRange));
if (NS_SUCCEEDED(rv)) {

Просмотреть файл

@ -54,7 +54,7 @@ class nsPrivateTextRangeList: public nsIPrivateTextRangeList
NS_DECL_ISUPPORTS
public:
nsPrivateTextRangeList(PRUint16 aLength,nsIPrivateTextRange** aList);
nsPrivateTextRangeList(PRUint16 aLength, nsIPrivateTextRange** aList);
virtual ~nsPrivateTextRangeList(void);
NS_IMETHOD GetLength(PRUint16* aLength);

Просмотреть файл

@ -23,26 +23,32 @@
#define nsIForm_h___
#include "nsISupports.h"
#include "nsString.h"
#include "nsAReadableString.h"
class nsIFormControl;
class nsISizeOfHandler;
#define NS_FORM_METHOD_GET 0
#define NS_FORM_METHOD_POST 1
#define NS_FORM_ENCTYPE_URLENCODED 0
#define NS_FORM_ENCTYPE_MULTIPART 1
// IID for the nsIFormManager interface
#define NS_IFORM_IID \
{ 0xb7e94510, 0x4c19, 0x11d2, \
{ 0x80, 0x3f, 0x0, 0x60, 0x8, 0x15, 0xa7, 0x91 } }
/**
* This interface provides a complete set of methods dealing with
* elements which belong to a form element. When nsIDOMHTMLCollection
* allows write operations
*/
class nsIForm : public nsISupports {
class nsIForm : public nsISupports
{
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IFORM_IID)
@ -60,7 +66,8 @@ public:
* attributes. The name or id attributes of the form control
* are used as a key into the table.
*/
NS_IMETHOD AddElementToTable(nsIFormControl* aElement, const nsAReadableString& aName) = 0;
NS_IMETHOD AddElementToTable(nsIFormControl* aElement,
const nsAReadableString& aName) = 0;
/**
* Get the element at a specified index position
@ -84,7 +91,7 @@ public:
*/
NS_IMETHOD RemoveElement(nsIFormControl* aElement) = 0;
/**
/**
* Remove an element from the lookup table mainted by the form.
* We can't fold this method into RemoveElement() because when
* RemoveElement() is called it doesn't know if the element is
@ -95,7 +102,20 @@ public:
* @param aName the name or id of the element to remove
* @return NS_OK if the element was successfully removed.
*/
NS_IMETHOD RemoveElementFromTable(nsIFormControl* aElement, const nsAReadableString& aName) = 0;
NS_IMETHOD RemoveElementFromTable(nsIFormControl* aElement,
const nsAReadableString& aName) = 0;
/**
* Resolve a name in the scope of the form object, this means find
* form controls in this form with the correct value in the name
* attribute.
*
* @param aElement the element to remove
* @param aName the name or id of the element to remove
* @return NS_OK if the element was successfully removed. */
NS_IMETHOD ResolveName(const nsAReadableString& aName,
nsISupports **aResult) = 0;
NS_IMETHOD SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const = 0;
};

Просмотреть файл

@ -27,6 +27,7 @@
class nsIContent;
class nsIAtom;
class nsISizeOfHandler;
/**
* This class provides a late-bound collection of elements that are

Просмотреть файл

@ -118,6 +118,10 @@ public:
return NS_OK;
}
NS_IMETHOD_(PRBool) IsContentOfType(PRUint32 aFlags) {
return !(aFlags & ~eTEXT);
}
NS_IMETHOD SetAttribute(PRInt32 aNameSpaceID, nsIAtom* aAttribute, const nsAReadableString& aValue,
PRBool aNotify) { return NS_OK; }
NS_IMETHOD SetAttribute(nsINodeInfo *aNodeInfo, const nsAReadableString& aValue,

Просмотреть файл

@ -26,54 +26,16 @@
nsGenericDOMHTMLCollection::nsGenericDOMHTMLCollection()
{
NS_INIT_REFCNT();
mScriptObject = nsnull;
}
nsGenericDOMHTMLCollection::~nsGenericDOMHTMLCollection()
{
}
nsresult
nsGenericDOMHTMLCollection::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
if (NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
if (aIID.Equals(NS_GET_IID(nsIDOMHTMLCollection))) {
*aInstancePtr = (void*)(nsIDOMHTMLCollection*)this;
AddRef();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsIScriptObjectOwner))) {
*aInstancePtr = (void*)(nsIScriptObjectOwner*)this;
AddRef();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(nsISupports))) {
*aInstancePtr = (void*)(nsISupports*)(nsIDOMHTMLCollection*)this;
AddRef();
return NS_OK;
}
return NS_NOINTERFACE;
}
NS_IMPL_ADDREF(nsGenericDOMHTMLCollection)
NS_IMPL_RELEASE(nsGenericDOMHTMLCollection)
NS_IMETHODIMP
nsGenericDOMHTMLCollection::GetScriptObject(nsIScriptContext *aContext, void** aScriptObject)
{
nsresult res = NS_OK;
if (nsnull == mScriptObject) {
res = NS_NewScriptHTMLCollection(aContext, (nsISupports *)(nsIDOMHTMLCollection *)this, nsnull, (void**)&mScriptObject);
}
*aScriptObject = mScriptObject;
return res;
}
NS_IMETHODIMP
nsGenericDOMHTMLCollection::SetScriptObject(void *aScriptObject)
{
mScriptObject = aScriptObject;
return NS_OK;
}
NS_INTERFACE_MAP_BEGIN(nsGenericDOMHTMLCollection)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLCollection)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_END

Просмотреть файл

@ -25,20 +25,18 @@
#include "nsISupports.h"
#include "nsIDOMHTMLCollection.h"
#include "nsIScriptObjectOwner.h"
/**
* This is a base class for a generic HTML collection. The base class
* provides implementations for nsISupports and nsIScriptObjectOwner,
* but it is up to the subclass to implement the core HTML collection
* provides implementations for nsISupports, but it is up to the
* subclass to implement the core HTML collection
*
* methods:
* GetLength
* Item
* NamedItem
*
*/
class nsGenericDOMHTMLCollection : public nsIDOMHTMLCollection,
public nsIScriptObjectOwner
* */
class nsGenericDOMHTMLCollection : public nsIDOMHTMLCollection
{
public:
nsGenericDOMHTMLCollection();
@ -46,17 +44,11 @@ public:
NS_DECL_ISUPPORTS
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void *aScriptObject);
// The following need to be defined in the subclass
// nsIDOMHTMLCollection interface
NS_IMETHOD GetLength(PRUint32* aLength)=0;
NS_IMETHOD Item(PRUint32 aIndex, nsIDOMNode** aReturn)=0;
NS_IMETHOD NamedItem(const nsAReadableString& aName, nsIDOMNode** aReturn)=0;
protected:
void* mScriptObject;
};
#endif // nsGenericDOMHTMLCollection_h__

Просмотреть файл

@ -17,7 +17,7 @@
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Contributor(s):
*/
#include "nsGenericHTMLElement.h"
#include "nsCOMPtr.h"
@ -35,6 +35,8 @@
#include "nsIDOMNamedNodeMap.h"
#include "nsIDOMNodeList.h"
#include "nsIDOMDocumentFragment.h"
#include "nsIDOMNSHTMLElement.h"
#include "nsIDOMElementCSSInlineStyle.h"
#include "nsIEventListenerManager.h"
#include "nsIHTMLAttributes.h"
#include "nsIHTMLStyleSheet.h"
@ -43,8 +45,6 @@
#include "nsILink.h"
#include "nsILinkHandler.h"
#include "nsPIDOMWindow.h"
#include "nsIScriptGlobalObject.h"
#include "nsIScriptObjectOwner.h"
#include "nsISizeOfHandler.h"
#include "nsIStyleContext.h"
#include "nsIMutableStyleContext.h"
@ -77,7 +77,6 @@
#include "nsIPrivateDOMEvent.h"
#include "nsDOMCID.h"
#include "nsIServiceManager.h"
#include "nsIDOMScriptObjectFactory.h"
#include "nsIDOMCSSStyleDeclaration.h"
#include "nsDOMCSSDeclaration.h"
#include "prprf.h"
@ -108,10 +107,12 @@
#include "nsIHTMLContentSink.h"
#include "nsLayoutCID.h"
#include "nsContentCID.h"
static NS_DEFINE_CID(kPresStateCID, NS_PRESSTATE_CID);
// XXX todo: add in missing out-of-memory checks
#include "nsIPref.h" // Used by the temp pref, should be removed!
#include "nsIPluginHost.h"
#include "nsPIPluginHost.h"
static NS_DEFINE_IID(kCPluginManagerCID, NS_PLUGINMANAGER_CID);
@ -406,6 +407,65 @@ static int gGenericHTMLElementCount = 0;
static nsILanguageAtomService* gLangService = nsnull;
class nsGenericHTMLElementTearoff : public nsIDOMNSHTMLElement,
public nsIDOMElementCSSInlineStyle
{
NS_DECL_ISUPPORTS
nsGenericHTMLElementTearoff(nsGenericHTMLElement *aElement)
: mElement(aElement)
{
NS_INIT_REFCNT();
NS_ADDREF(mElement);
}
~nsGenericHTMLElementTearoff()
{
NS_RELEASE(mElement);
}
NS_FORWARD_NSIDOMNSHTMLELEMENT(mElement->)
NS_FORWARD_NSIDOMELEMENTCSSINLINESTYLE(mElement->)
private:
nsGenericHTMLElement *mElement;
};
NS_IMPL_ADDREF(nsGenericHTMLElementTearoff)
NS_IMPL_RELEASE(nsGenericHTMLElementTearoff)
NS_IMETHODIMP
nsGenericHTMLElementTearoff::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
NS_ENSURE_ARG_POINTER(aInstancePtr);
nsISupports *inst = nsnull;
if (aIID.Equals(NS_GET_IID(nsIDOMNSHTMLElement))) {
inst = NS_STATIC_CAST(nsIDOMNSHTMLElement *, this);
} else if (aIID.Equals(NS_GET_IID(nsIDOMElementCSSInlineStyle))) {
inst = NS_STATIC_CAST(nsIDOMElementCSSInlineStyle *, this);
} else {
return mElement->QueryInterface(aIID, aInstancePtr);
}
NS_ADDREF(inst);
*aInstancePtr = inst;
return NS_OK;
}
// XPConnect interface list for nsGenericHTMLElement
NS_CLASSINFO_MAP_BEGIN_EXPORTED(GenericHTMLElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNSHTMLElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMElementCSSInlineStyle)
NS_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget)
NS_CLASSINFO_MAP_END
nsGenericHTMLElement::nsGenericHTMLElement()
{
mAttributes = nsnull;
@ -455,6 +515,17 @@ nsGenericHTMLElement::DOMQueryInterface(nsIDOMHTMLElement *aElement,
inst = NS_STATIC_CAST(nsIDOMElement *, aElement);
} else if (aIID.Equals(NS_GET_IID(nsIDOMHTMLElement))) {
inst = NS_STATIC_CAST(nsIDOMHTMLElement *, aElement);
} else if (aIID.Equals(NS_GET_IID(nsIDOMNSHTMLElement))) {
inst = NS_STATIC_CAST(nsIDOMNSHTMLElement *,
new nsGenericHTMLElementTearoff(this));
NS_ENSURE_TRUE(inst, NS_ERROR_OUT_OF_MEMORY);
} else if (aIID.Equals(NS_GET_IID(nsIDOMElementCSSInlineStyle))) {
inst = NS_STATIC_CAST(nsIDOMElementCSSInlineStyle *,
new nsGenericHTMLElementTearoff(this));
NS_ENSURE_TRUE(inst, NS_ERROR_OUT_OF_MEMORY);
} else if (aIID.Equals(NS_GET_IID(nsIDOMElementCSSInlineStyle))) {
inst = new nsNode3Tearoff(this);
NS_ENSURE_TRUE(inst, NS_ERROR_OUT_OF_MEMORY);
} else {
return NS_NOINTERFACE;
}
@ -1396,8 +1467,10 @@ nsGenericHTMLElement::SetAttribute(PRInt32 aNameSpaceID,
mutation.mPrevAttrValue = getter_AddRefs(NS_NewAtom(strValue));
if (!aValue.IsEmpty())
mutation.mNewAttrValue = getter_AddRefs(NS_NewAtom(aValue));
mutation.mAttrChange = modification ? nsIDOMMutationEvent::MODIFICATION :
nsIDOMMutationEvent::ADDITION;
if (modification)
mutation.mAttrChange = nsIDOMMutationEvent::MODIFICATION;
else
mutation.mAttrChange = nsIDOMMutationEvent::ADDITION;
nsEventStatus status = nsEventStatus_eIgnore;
HandleDOMEvent(nsnull, &mutation, nsnull,
NS_EVENT_FLAG_INIT, &status);
@ -2068,6 +2141,13 @@ nsGenericHTMLElement::DumpContent(FILE* out, PRInt32 aIndent,PRBool aDumpAll) co
return NS_OK;
}
NS_IMETHODIMP_(PRBool)
nsGenericHTMLElement::IsContentOfType(PRUint32 aFlags)
{
return !(aFlags & ~(eELEMENT | eHTML));
}
PRUint32
nsGenericHTMLElement::BaseSizeOf(nsISizeOfHandler* aSizer) const
{
@ -3308,15 +3388,15 @@ nsGenericHTMLLeafElement::GetChildNodes(nsIDOMNodeList** aChildNodes)
{
nsDOMSlots* slots = GetDOMSlots();
if (nsnull == slots->mChildNodes) {
if (!slots->mChildNodes) {
slots->mChildNodes = new nsChildContentList(nsnull);
if (nsnull == slots->mChildNodes) {
if (!slots->mChildNodes) {
return NS_ERROR_OUT_OF_MEMORY;
}
NS_ADDREF(slots->mChildNodes);
}
return slots->mChildNodes->QueryInterface(NS_GET_IID(nsIDOMNodeList), (void **)aChildNodes);
return CallQueryInterface(slots->mChildNodes, aChildNodes);
}
//----------------------------------------------------------------------
@ -3674,6 +3754,12 @@ nsGenericHTMLContainerFormElement::QueryInterface(REFNSIID aIID,
return NS_OK;
}
NS_IMETHODIMP_(PRBool)
nsGenericHTMLContainerFormElement::IsContentOfType(PRUint32 aFlags)
{
return !(aFlags & ~(eELEMENT | eHTML | eHTML_FORM_CONTROL));
}
NS_IMETHODIMP
nsGenericHTMLContainerFormElement::SetForm(nsIDOMHTMLFormElement* aForm,
PRBool aRemoveFromForm)
@ -3734,40 +3820,6 @@ nsGenericHTMLContainerFormElement::GetForm(nsIDOMHTMLFormElement** aForm)
return NS_OK;
}
NS_IMETHODIMP
nsGenericHTMLContainerFormElement::GetScriptObject(nsIScriptContext* aContext,
void** aScriptObject)
{
NS_ENSURE_ARG_POINTER(aScriptObject);
if (mDOMSlots && mDOMSlots->mScriptObject) {
*aScriptObject = mDOMSlots->mScriptObject;
return NS_OK;
}
nsresult rv = nsGenericElement::GetScriptObject(aContext, aScriptObject);
NS_ENSURE_SUCCESS(rv, rv);
NS_ENSURE_TRUE(*aScriptObject, NS_ERROR_FAILURE);
// If there's a form associated with this control we set the form as parent
// object for this controls script object.
nsCOMPtr<nsIScriptObjectOwner> owner(do_QueryInterface(mForm));
if (owner) {
JSContext *ctx = (JSContext *)aContext->GetNativeContext();
JSObject *parent = nsnull;
rv = owner->GetScriptObject(aContext, (void **)&parent);
if (NS_SUCCEEDED(rv) && parent) {
::JS_SetParent(ctx, (JSObject *)*aScriptObject, parent);
}
}
return rv;
}
NS_IMETHODIMP
nsGenericHTMLContainerFormElement::SetParent(nsIContent* aParent)
{
@ -3927,6 +3979,12 @@ nsGenericHTMLLeafFormElement::QueryInterface(REFNSIID aIID,
return NS_OK;
}
NS_IMETHODIMP_(PRBool)
nsGenericHTMLLeafFormElement::IsContentOfType(PRUint32 aFlags)
{
return !(aFlags & ~(eELEMENT | eHTML | eHTML_FORM_CONTROL));
}
NS_IMETHODIMP
nsGenericHTMLLeafFormElement::SetForm(nsIDOMHTMLFormElement* aForm,
PRBool aRemoveFromForm)
@ -4031,40 +4089,6 @@ nsGenericHTMLLeafFormElement::SetDocument(nsIDocument* aDocument,
return rv;
}
NS_IMETHODIMP
nsGenericHTMLLeafFormElement::GetScriptObject(nsIScriptContext* aContext,
void** aScriptObject)
{
NS_ENSURE_ARG_POINTER(aScriptObject);
if (mDOMSlots && mDOMSlots->mScriptObject) {
*aScriptObject = mDOMSlots->mScriptObject;
return NS_OK;
}
nsresult rv = nsGenericElement::GetScriptObject(aContext, aScriptObject);
NS_ENSURE_SUCCESS(rv, rv);
NS_ENSURE_TRUE(*aScriptObject, NS_ERROR_FAILURE);
nsCOMPtr<nsIScriptObjectOwner> owner(do_QueryInterface(mForm));
// If there's a form associated with this control we set the form as parent
// object for this controls script object.
if (owner) {
JSContext *ctx = (JSContext *)aContext->GetNativeContext();
JSObject *parent = nsnull;
rv = owner->GetScriptObject(aContext, (void **)&parent);
if (NS_SUCCEEDED(rv) && parent) {
::JS_SetParent(ctx, (JSObject *)*aScriptObject, parent);
}
}
return rv;
}
NS_IMETHODIMP
nsGenericHTMLLeafFormElement::SetAttribute(PRInt32 aNameSpaceID,
nsIAtom* aName,
@ -4091,6 +4115,7 @@ nsGenericHTMLElement::SetElementFocus(PRBool aDoFocus)
}
#if 0 // XXX
nsresult
nsGenericHTMLElement::GetPluginInstance(nsIPluginInstance** aPluginInstance)
{
@ -4296,3 +4321,4 @@ nsGenericHTMLElement::GetPluginProperty(JSContext *aContext, JSObject *aObj,
}
return nsGenericElement::GetProperty(aContext, aObj, aID, aVp);
}
#endif

Просмотреть файл

@ -28,13 +28,11 @@
#include "nsIContent.h"
#include "nsHTMLValue.h"
#include "nsVoidArray.h"
#include "nsIJSScriptObject.h"
#include "nsINameSpaceManager.h" // for kNameSpaceID_HTML
#include "nsIFormControl.h"
#include "nsIStatefulFrame.h"
class nsIDOMAttr;
class nsIDOMEventListener;
class nsIDOMNodeList;
@ -46,7 +44,6 @@ class nsIHTMLContent;
class nsIMutableStyleContext;
class nsIStyleRule;
class nsISupportsArray;
class nsIDOMScriptObjectFactory;
class nsChildContentList;
class nsDOMCSSDeclaration;
class nsIDOMCSSStyleDeclaration;
@ -56,6 +53,8 @@ class nsIForm;
class nsIPresState;
class nsIPluginInstance;
extern void GetGenericHTMLElementIIDs(nsVoidArray& aArray);
class nsGenericHTMLElement : public nsGenericElement {
public:
nsGenericHTMLElement();
@ -63,8 +62,8 @@ public:
NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr);
static nsresult DOMQueryInterface(nsIDOMHTMLElement *aElement,
REFNSIID aIID, void **aInstancePtr);
nsresult DOMQueryInterface(nsIDOMHTMLElement *aElement, REFNSIID aIID,
void **aInstancePtr);
NS_METHOD CopyInnerTo(nsIContent* aSrcContent,
nsGenericHTMLElement* aDest,
@ -137,6 +136,7 @@ public:
NS_IMETHOD GetAttributeCount(PRInt32& aResult) const;
NS_IMETHOD List(FILE* out, PRInt32 aIndent) const;
NS_IMETHOD DumpContent(FILE* out, PRInt32 aIndent,PRBool aDumpAll) const;
NS_IMETHOD_(PRBool) IsContentOfType(PRUint32 aFlags);
nsresult HandleDOMEventForAnchors(nsIContent* aOuter,
nsIPresContext* aPresContext,
@ -349,16 +349,10 @@ public:
protected:
nsresult SetElementFocus(PRBool aDoFocus);
nsresult GetPluginInstance(nsIPluginInstance** aPluginInstance);
nsresult GetPluginScriptObject(nsIScriptContext* aContext,
void** aScriptObject);
PRBool GetPluginProperty(JSContext *aContext, JSObject *aObj, jsval aID,
jsval *aVp);
PRBool IsEventName(nsIAtom* aName);
};
//----------------------------------------------------------------------
class nsGenericHTMLLeafElement : public nsGenericHTMLElement {
@ -501,6 +495,8 @@ public:
NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr);
NS_IMETHOD_(PRBool) IsContentOfType(PRUint32 aFlags);
// nsIFormControl
NS_IMETHOD GetForm(nsIDOMHTMLFormElement** aForm);
NS_IMETHOD SetForm(nsIDOMHTMLFormElement* aForm,
@ -519,8 +515,6 @@ public:
return nsGenericHTMLElement::SetAttribute(aName, aValue);
}
NS_IMETHOD GetScriptObject(nsIScriptContext* aContext, void** aScriptObject);
protected:
nsIForm* mForm;
};
@ -536,6 +530,8 @@ public:
NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr);
NS_IMETHOD_(PRBool) IsContentOfType(PRUint32 aFlags);
// nsIFormControl
NS_IMETHOD GetForm(nsIDOMHTMLFormElement** aForm);
NS_IMETHOD SetForm(nsIDOMHTMLFormElement* aForm,
@ -553,7 +549,6 @@ public:
{
return nsGenericHTMLElement::SetAttribute(aName, aValue);
}
NS_IMETHOD GetScriptObject(nsIScriptContext* aContext, void** aScriptObject);
protected:
nsIForm* mForm;
@ -810,4 +805,45 @@ _class::QueryInterface(REFNSIID aIID, void** aInstancePtr) \
return NS_STATIC_CAST(nsIHTMLContent *, this)->SetHTMLAttribute(nsHTMLAtoms::_atom, value, PR_TRUE); \
}
/**
* QueryInterface() implementation helper macros
*/
#define NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(_class, _base) \
NS_IMETHODIMP _class::QueryInterface(REFNSIID aIID, void** aInstancePtr) \
{ \
NS_ENSURE_ARG_POINTER(aInstancePtr); \
\
*aInstancePtr = nsnull; \
\
nsresult rv; \
\
rv = _base::QueryInterface(aIID, aInstancePtr); \
\
if (NS_SUCCEEDED(rv)) \
return rv; \
\
rv = DOMQueryInterface(this, aIID, aInstancePtr); \
\
if (NS_SUCCEEDED(rv)) \
return rv; \
\
nsISupports *foundInterface = nsnull;
#define NS_HTML_CONTENT_INTERFACE_MAP_END \
{ \
return NS_NOINTERFACE; \
} \
\
NS_ADDREF(foundInterface); \
\
*aInstancePtr = foundInterface; \
\
return NS_OK; \
}
#endif /* nsGenericHTMLElement_h___ */

Просмотреть файл

@ -23,7 +23,6 @@
#include "nsHTMLUtils.h"
#include "nsIDOMHTMLAnchorElement.h"
#include "nsIDOMNSHTMLAnchorElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsIHTMLDocument.h"
@ -46,7 +45,6 @@
#include "nsIPresShell.h"
#include "nsIDocument.h"
#include "nsIHTMLAttributes.h"
#include "prprf.h"
// XXX suppress
@ -66,19 +64,19 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLAnchorElement
NS_DECL_IDOMHTMLANCHORELEMENT
NS_DECL_NSIDOMHTMLANCHORELEMENT
// nsIDOMNSHTMLAnchorElement
NS_DECL_IDOMNSHTMLANCHORELEMENT
NS_DECL_NSIDOMNSHTMLANCHORELEMENT
// nsILink
NS_IMETHOD GetLinkState(nsLinkState &aState);
@ -102,8 +100,10 @@ protected:
// The cached visited state
nsLinkState mLinkState;
};
nsresult
NS_NewHTMLAnchorElement(nsIHTMLContent** aInstancePtrResult,
nsINodeInfo *aNodeInfo)
@ -145,9 +145,23 @@ nsHTMLAnchorElement::~nsHTMLAnchorElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLAnchorElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLAnchorElement, nsGenericElement)
NS_IMPL_HTMLCONTENT_QI3(nsHTMLAnchorElement, nsGenericHTMLContainerElement,
nsIDOMHTMLAnchorElement, nsIDOMNSHTMLAnchorElement,
nsILink)
// XPConnect interface list for nsHTMLAnchorElement
NS_CLASSINFO_MAP_BEGIN(HTMLAnchorElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLAnchorElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNSHTMLAnchorElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLAnchorElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLAnchorElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLAnchorElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMNSHTMLAnchorElement)
NS_INTERFACE_MAP_ENTRY(nsILink)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLAnchorElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult
@ -647,6 +661,12 @@ nsHTMLAnchorElement::GetText(nsAWritableString& aText)
return NS_OK;
}
NS_IMETHODIMP
nsHTMLAnchorElement::ToString(nsAWritableString& aSource)
{
return GetHref(aSource);
}
NS_IMETHODIMP
nsHTMLAnchorElement::GetLinkState(nsLinkState &aState)
{

Просмотреть файл

@ -21,7 +21,6 @@
* Pierre Phaneuf <pp@ludusdesign.com>
*/
#include "nsIDOMHTMLAppletElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -61,19 +60,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLAppletElement
NS_DECL_IDOMHTMLAPPLETELEMENT
NS_IMETHOD GetScriptObject(nsIScriptContext* aContext,
void** aScriptObject);
NS_DECL_NSIDOMHTMLAPPLETELEMENT
NS_IMETHOD StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,
@ -130,8 +126,20 @@ nsHTMLAppletElement::~nsHTMLAppletElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLAppletElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLAppletElement, nsGenericElement)
NS_IMPL_HTMLCONTENT_QI(nsHTMLAppletElement, nsGenericHTMLContainerElement,
nsIDOMHTMLAppletElement)
// XPConnect interface list for nsHTMLAppletElement
NS_CLASSINFO_MAP_BEGIN(HTMLAppletElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLAppletElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLAppletElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLAppletElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLAppletElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLAppletElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult
@ -262,6 +270,7 @@ nsHTMLAppletElement::GetAttributeMappingFunctions(nsMapAttributesFunc& aFontMapF
* object. That way, if the Java applet has public fields that shadow
* the tag attributes, the applet's fields take precedence.
*/
#if 0
NS_IMETHODIMP
nsHTMLAppletElement::GetScriptObject(nsIScriptContext* aContext,
void** aScriptObject)
@ -364,6 +373,7 @@ nsHTMLAppletElement::GetScriptObject(nsIScriptContext* aContext,
return rv;
}
#endif
NS_IMETHODIMP
nsHTMLAppletElement::SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const

Просмотреть файл

@ -21,7 +21,6 @@
*/
#include "nsIDOMHTMLAreaElement.h"
#include "nsIDOMNSHTMLAreaElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -51,19 +50,19 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLAreaElement
NS_DECL_IDOMHTMLAREAELEMENT
NS_DECL_NSIDOMHTMLAREAELEMENT
// nsIDOMNSHTMLAreaElement
NS_DECL_IDOMNSHTMLAREAELEMENT
NS_DECL_NSIDOMNSHTMLAREAELEMENT
// nsILink
NS_IMETHOD GetLinkState(nsLinkState &aState);
@ -126,9 +125,23 @@ nsHTMLAreaElement::~nsHTMLAreaElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLAreaElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLAreaElement, nsGenericElement)
NS_IMPL_HTMLCONTENT_QI3(nsHTMLAreaElement, nsGenericHTMLLeafElement,
nsIDOMHTMLAreaElement, nsIDOMNSHTMLAreaElement,
nsILink)
// XPConnect interface list for nsHTMLAreaElement
NS_CLASSINFO_MAP_BEGIN(HTMLAreaElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLAreaElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNSHTMLAreaElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLAreaElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLAreaElement,
nsGenericHTMLLeafElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLAreaElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMNSHTMLAreaElement)
NS_INTERFACE_MAP_ENTRY(nsILink)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLAreaElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLBRElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -44,16 +43,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLBRElement
NS_DECL_IDOMHTMLBRELEMENT
NS_DECL_NSIDOMHTMLBRELEMENT
NS_IMETHOD StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,
@ -106,8 +105,20 @@ nsHTMLBRElement::~nsHTMLBRElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLBRElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLBRElement, nsGenericElement)
NS_IMPL_HTMLCONTENT_QI(nsHTMLBRElement, nsGenericHTMLLeafElement,
nsIDOMHTMLBRElement)
// XPConnect interface list for nsHTMLBRElement
NS_CLASSINFO_MAP_BEGIN(HTMLBRElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLBRElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLBRElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLBRElement,
nsGenericHTMLLeafElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLBRElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLBRElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLBaseElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -43,16 +42,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLBaseElement
NS_DECL_IDOMHTMLBASEELEMENT
NS_DECL_NSIDOMHTMLBASEELEMENT
NS_IMETHOD SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const;
};
@ -96,8 +95,20 @@ nsHTMLBaseElement::~nsHTMLBaseElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLBaseElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLBaseElement, nsGenericElement)
NS_IMPL_HTMLCONTENT_QI(nsHTMLBaseElement, nsGenericHTMLLeafElement,
nsIDOMHTMLBaseElement)
// XPConnect interface list for nsHTMLBaseElement
NS_CLASSINFO_MAP_BEGIN(HTMLBaseElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLBaseElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLBaseElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLBaseElement,
nsGenericHTMLLeafElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLBaseElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLBaseElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLBaseFontElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -43,16 +42,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLBaseElement
NS_DECL_IDOMHTMLBASEFONTELEMENT
NS_DECL_NSIDOMHTMLBASEFONTELEMENT
NS_IMETHOD GetMappedAttributeImpact(const nsIAtom* aAttribute,
PRInt32& aHint) const;
@ -98,8 +97,20 @@ nsHTMLBaseFontElement::~nsHTMLBaseFontElement()
NS_IMPL_ADDREF(nsHTMLBaseFontElement)
NS_IMPL_RELEASE(nsHTMLBaseFontElement)
NS_IMPL_HTMLCONTENT_QI(nsHTMLBaseFontElement, nsGenericHTMLLeafElement,
nsIDOMHTMLBaseFontElement)
// XPConnect interface list for nsHTMLBaseFontElement
NS_CLASSINFO_MAP_BEGIN(HTMLBaseFontElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLBaseFontElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLBaseFontElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLBaseFontElement,
nsGenericHTMLLeafElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLBaseFontElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLBaseFontElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -21,7 +21,6 @@
*/
#include "nsCOMPtr.h"
#include "nsIDOMHTMLBodyElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -188,16 +187,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLBodyElement
NS_DECL_IDOMHTMLBODYELEMENT
NS_DECL_NSIDOMHTMLBODYELEMENT
NS_IMETHOD StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,
@ -744,8 +743,20 @@ nsHTMLBodyElement::~nsHTMLBodyElement()
}
NS_IMPL_HTMLCONTENT_QI(nsHTMLBodyElement, nsGenericHTMLContainerElement,
nsIDOMHTMLBodyElement)
// XPConnect interface list for nsHTMLBodyElement
NS_CLASSINFO_MAP_BEGIN(HTMLBodyElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLBodyElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLBodyElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLBodyElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLBodyElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLBodyElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -22,7 +22,6 @@
#include "nsIDOMHTMLButtonElement.h"
#include "nsIDOMNSHTMLButtonElement.h"
#include "nsIDOMHTMLFormElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -55,19 +54,19 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerFormElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerFormElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerFormElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerFormElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLButtonElement
NS_DECL_IDOMHTMLBUTTONELEMENT
NS_DECL_NSIDOMHTMLBUTTONELEMENT
// nsIDOMNSHTMLButtonElement
NS_DECL_IDOMNSHTMLBUTTONELEMENT
NS_DECL_NSIDOMNSHTMLBUTTONELEMENT
// overrided nsIFormControl method
NS_IMETHOD GetType(PRInt32* aType);
@ -142,8 +141,22 @@ nsHTMLButtonElement::~nsHTMLButtonElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLButtonElement, nsGenericElement);
NS_IMPL_RELEASE_INHERITED(nsHTMLButtonElement, nsGenericElement);
NS_IMPL_HTMLCONTENT_QI2(nsHTMLButtonElement, nsGenericHTMLContainerFormElement,
nsIDOMHTMLButtonElement, nsIDOMNSHTMLButtonElement);
// XPConnect interface list for nsHTMLButtonElement
NS_CLASSINFO_MAP_BEGIN(HTMLButtonElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLButtonElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNSHTMLButtonElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLButtonElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLButtonElement,
nsGenericHTMLContainerFormElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLButtonElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMNSHTMLButtonElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLButtonElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
NS_IMETHODIMP

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLDListElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -44,13 +43,13 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLDListElement
NS_IMETHOD GetCompact(PRBool* aCompact);
@ -105,8 +104,20 @@ nsHTMLDListElement::~nsHTMLDListElement()
NS_IMPL_ADDREF(nsHTMLDListElement);
NS_IMPL_RELEASE(nsHTMLDListElement);
NS_IMPL_HTMLCONTENT_QI(nsHTMLDListElement, nsGenericHTMLContainerElement,
nsIDOMHTMLDListElement);
// XPConnect interface list for nsHTMLDListElement
NS_CLASSINFO_MAP_BEGIN(HTMLDListElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLDListElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLDListElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLDListElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLDListElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLDListElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLModElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -43,16 +42,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLModElement
NS_DECL_IDOMHTMLMODELEMENT
NS_DECL_NSIDOMHTMLMODELEMENT
NS_IMETHOD SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const;
};
@ -96,8 +95,20 @@ nsHTMLDelElement::~nsHTMLDelElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLDelElement, nsGenericElement);
NS_IMPL_RELEASE_INHERITED(nsHTMLDelElement, nsGenericElement);
NS_IMPL_HTMLCONTENT_QI(nsHTMLDelElement, nsGenericHTMLContainerElement,
nsIDOMHTMLModElement);
// XPConnect interface list for nsHTMLDelElement
NS_CLASSINFO_MAP_BEGIN(HTMLDelElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLModElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLDelElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLDelElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLModElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLDelElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLDirectoryElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -48,16 +47,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLDirectoryElement
NS_DECL_IDOMHTMLDIRECTORYELEMENT
NS_DECL_NSIDOMHTMLDIRECTORYELEMENT
NS_IMETHOD StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,
@ -110,8 +109,20 @@ nsHTMLDirectoryElement::~nsHTMLDirectoryElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLDirectoryElement, nsGenericElement);
NS_IMPL_RELEASE_INHERITED(nsHTMLDirectoryElement, nsGenericElement);
NS_IMPL_HTMLCONTENT_QI(nsHTMLDirectoryElement, nsGenericHTMLContainerElement,
nsIDOMHTMLDirectoryElement);
// XPConnect interface list for nsHTMLDirectoryElement
NS_CLASSINFO_MAP_BEGIN(HTMLDirectoryElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLDirectoryElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLDirectoryElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLDirectoryElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLDirectoryElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLDirectoryElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLDivElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -46,16 +45,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLDivElement
NS_DECL_IDOMHTMLDIVELEMENT
NS_DECL_NSIDOMHTMLDIVELEMENT
NS_IMETHOD StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,
@ -110,8 +109,20 @@ NS_IMPL_ADDREF_INHERITED(nsHTMLDivElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLDivElement, nsGenericElement)
NS_IMPL_HTMLCONTENT_QI(nsHTMLDivElement, nsGenericHTMLContainerElement,
nsIDOMHTMLDivElement)
// XPConnect interface list for nsHTMLDivElement
NS_CLASSINFO_MAP_BEGIN(HTMLDivElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLDivElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLDivElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLDivElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLDivElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLDivElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -37,16 +37,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLEmbedElement
NS_DECL_IDOMHTMLEMBEDELEMENT
NS_DECL_NSIDOMHTMLEMBEDELEMENT
NS_IMETHOD StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,
@ -59,14 +59,6 @@ public:
NS_IMETHOD GetAttributeMappingFunctions(nsMapAttributesFunc& aFontMapFunc,
nsMapAttributesFunc& aMapFunc) const;
NS_IMETHOD SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const;
// nsIScriptObjectOwner
NS_IMETHOD GetScriptObject(nsIScriptContext* aContext,
void** aScriptObject);
// nsIJSScriptObject
virtual PRBool GetProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp);
};
nsresult
@ -107,8 +99,20 @@ nsHTMLEmbedElement::~nsHTMLEmbedElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLEmbedElement, nsGenericElement);
NS_IMPL_RELEASE_INHERITED(nsHTMLEmbedElement, nsGenericElement);
NS_IMPL_HTMLCONTENT_QI(nsHTMLEmbedElement, nsGenericHTMLLeafElement,
nsIDOMHTMLEmbedElement);
// XPConnect interface list for nsHTMLEmbedElement
NS_CLASSINFO_MAP_BEGIN(HTMLEmbedElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLEmbedElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLEmbedElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLEmbedElement,
nsGenericHTMLLeafElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLEmbedElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLEmbedElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult
@ -228,6 +232,7 @@ nsHTMLEmbedElement::SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const
/***************************************************************************/
#if 0
NS_IMETHODIMP
nsHTMLEmbedElement::GetScriptObject(nsIScriptContext* aContext,
void** aScriptObject)
@ -241,6 +246,7 @@ nsHTMLEmbedElement::GetProperty(JSContext *aContext, JSObject *aObj,
{
return GetPluginProperty(aContext, aObj, aID, aVp);
}
#endif
/////////////////////////////////////////////
// Implement nsIDOMHTMLEmbedElement interface

Просмотреть файл

@ -21,7 +21,6 @@
*/
#include "nsIDOMHTMLFieldSetElement.h"
#include "nsIDOMHTMLFormElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -47,13 +46,13 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerFormElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerFormElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerFormElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerFormElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerFormElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerFormElement::)
// nsIDOMHTMLFieldSetElement
NS_IMETHOD GetForm(nsIDOMHTMLFormElement** aForm);
@ -108,9 +107,20 @@ nsHTMLFieldSetElement::~nsHTMLFieldSetElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLFieldSetElement, nsGenericElement);
NS_IMPL_RELEASE_INHERITED(nsHTMLFieldSetElement, nsGenericElement);
NS_IMPL_HTMLCONTENT_QI(nsHTMLFieldSetElement,
nsGenericHTMLContainerFormElement,
nsIDOMHTMLFieldSetElement);
// XPConnect interface list for nsHTMLFieldSetElement
NS_CLASSINFO_MAP_BEGIN(HTMLFieldSetElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLFieldSetElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLFieldSetElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLFieldSetElement,
nsGenericHTMLContainerFormElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLFieldSetElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLFieldSetElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
// nsIDOMHTMLFieldSetElement

Просмотреть файл

@ -21,7 +21,6 @@
*/
#include "nsCOMPtr.h"
#include "nsIDOMHTMLFontElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -51,16 +50,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLFontElement
NS_DECL_IDOMHTMLFONTELEMENT
NS_DECL_NSIDOMHTMLFONTELEMENT
NS_IMETHOD StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,
@ -113,8 +112,20 @@ nsHTMLFontElement::~nsHTMLFontElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLFontElement, nsGenericElement);
NS_IMPL_RELEASE_INHERITED(nsHTMLFontElement, nsGenericElement);
NS_IMPL_HTMLCONTENT_QI(nsHTMLFontElement, nsGenericHTMLContainerElement,
nsIDOMHTMLFontElement);
// XPConnect interface list for nsHTMLFontElement
NS_CLASSINFO_MAP_BEGIN(HTMLFontElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLFontElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLFontElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLFontElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLFontElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLFontElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -25,9 +25,8 @@
#include "nsIFormManager.h"
#include "nsIDOMHTMLFormElement.h"
#include "nsIDOMNSHTMLFormElement.h"
#include "nsIDOMHTMLFormControlList.h"
#include "nsIHTMLDocument.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMNSHTMLFormControlList.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -67,22 +66,19 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLFormElement
NS_DECL_IDOMHTMLFORMELEMENT
NS_DECL_NSIDOMHTMLFORMELEMENT
// nsIDOMNSHTMLFormElement
NS_DECL_IDOMNSHTMLFORMELEMENT
virtual PRBool Resolve(JSContext *aContext, JSObject *aObj, jsval aID,
PRBool *aDidDefineProperty);
NS_DECL_NSIDOMNSHTMLFORMELEMENT
// nsIForm
NS_IMETHOD AddElement(nsIFormControl* aElement);
@ -93,8 +89,11 @@ public:
NS_IMETHOD RemoveElement(nsIFormControl* aElement);
NS_IMETHOD RemoveElementFromTable(nsIFormControl* aElement,
const nsAReadableString& aName);
NS_IMETHOD ResolveName(const nsAReadableString& aName,
nsISupports **aReturn);
NS_IMETHOD SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const;
// nsIContent
NS_IMETHOD StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,
nsHTMLValue& aResult);
@ -116,8 +115,8 @@ protected:
};
// nsFormControlList
class nsFormControlList : public nsIDOMHTMLFormControlList,
public nsIScriptObjectOwner
class nsFormControlList : public nsIDOMNSHTMLFormControlList,
public nsIDOMHTMLCollection
{
public:
nsFormControlList(nsIDOMHTMLFormElement* aForm);
@ -128,15 +127,14 @@ public:
NS_DECL_ISUPPORTS
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void *aScriptObject);
NS_IMETHOD ResetScriptObject();
// nsIDOMHTMLCollection interface
NS_DECL_IDOMHTMLCOLLECTION
NS_DECL_IDOMHTMLFORMCONTROLLIST
NS_DECL_NSIDOMHTMLCOLLECTION
nsresult GetNamedObject(JSContext* aContext, jsval aID, JSObject** aObj);
// nsIDOMNSHTMLFormControlList interface
NS_DECL_NSIDOMNSHTMLFORMCONTROLLIST
nsresult GetNamedObject(const nsAReadableString& aName,
nsISupports **aResult);
nsresult AddElementToTable(nsIFormControl* aChild,
const nsAReadableString& aName);
@ -147,7 +145,6 @@ public:
nsresult SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const;
#endif
void *mScriptObject;
nsIDOMHTMLFormElement* mForm; // WEAK - the form owns me
nsVoidArray mElements; // Holds WEAK references - bug 36639
@ -246,6 +243,7 @@ nsHTMLFormElement::nsHTMLFormElement():
mGeneratingReset(PR_FALSE)
{
mControls = new nsFormControlList(this);
NS_IF_ADDREF(mControls);
}
@ -267,9 +265,23 @@ nsHTMLFormElement::~nsHTMLFormElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLFormElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLFormElement, nsGenericElement)
NS_IMPL_HTMLCONTENT_QI3(nsHTMLFormElement, nsGenericHTMLContainerElement,
nsIDOMHTMLFormElement, nsIDOMNSHTMLFormElement,
nsIForm)
// XPConnect interface list for nsHTMLFormElement
NS_CLASSINFO_MAP_BEGIN(HTMLFormElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLFormElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNSHTMLFormElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLFormElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLFormElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLFormElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMNSHTMLFormElement)
NS_INTERFACE_MAP_ENTRY(nsIForm)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLFormElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
// nsIDOMHTMLFormElement
@ -582,7 +594,7 @@ nsHTMLFormElement::RemoveElement(nsIFormControl* aChild)
return NS_OK;
}
NS_IMETHODIMP
NS_IMETHODIMP
nsHTMLFormElement::RemoveElementFromTable(nsIFormControl* aElement,
const nsAReadableString& aName)
{
@ -591,12 +603,24 @@ nsHTMLFormElement::RemoveElementFromTable(nsIFormControl* aElement,
return mControls->RemoveElementFromTable(aElement, aName);
}
NS_IMETHODIMP
nsHTMLFormElement::ResolveName(const nsAReadableString& aName,
nsISupports **aResult)
{
return mControls->GetNamedObject(aName, aResult);
}
NS_IMETHODIMP
nsHTMLFormElement::GetEncoding(nsAWritableString& aEncoding)
{
return nsGenericHTMLContainerElement::GetAttribute(kNameSpaceID_HTML,
nsHTMLAtoms::enctype,
aEncoding);
return GetEnctype(aEncoding);
}
NS_IMETHODIMP
nsHTMLFormElement::SetEncoding(const nsAReadableString& aEncoding)
{
return SetEnctype(aEncoding);
}
NS_IMETHODIMP
@ -607,156 +631,13 @@ nsHTMLFormElement::GetLength(PRInt32* aLength)
return NS_OK;
}
NS_IMETHODIMP
nsHTMLFormElement::NamedItem(JSContext* cx, jsval* argv, PRUint32 argc,
jsval* aReturn)
{
nsresult result = mControls->NamedItem(cx, argv, argc, aReturn);
if (NS_FAILED(result)) {
return result;
}
// If we couldn't find it in our controls list, it may be
// a different type of element (IMG, OBJECT, etc.)
if (!*aReturn && mDocument && (argc > 0)) {
PRUnichar* str = NS_REINTERPRET_CAST(PRUnichar *, JS_GetStringChars(JS_ValueToString(cx, argv[0])));
nsCOMPtr<nsIScriptContext> scriptContext;
nsCOMPtr<nsIScriptGlobalObject> globalObject;
mDocument->GetScriptGlobalObject(getter_AddRefs(globalObject));
if (globalObject) {
result = globalObject->GetContext(getter_AddRefs(scriptContext));
}
nsCOMPtr<nsIHTMLDocument> html_doc(do_QueryInterface(mDocument));
if (html_doc) {
nsCOMPtr<nsISupports> item;
result = html_doc->ResolveName(nsLiteralString(str), this,
getter_AddRefs(item));
if (NS_FAILED(result)) {
return result;
}
nsCOMPtr<nsIScriptObjectOwner> owner(do_QueryInterface(item));
if (owner) {
JSObject* obj;
result = owner->GetScriptObject(scriptContext, (void**)&obj);
if (NS_FAILED(result)) {
return result;
}
*aReturn = OBJECT_TO_JSVAL(obj);
}
}
}
return NS_OK;
}
PRBool
nsHTMLFormElement::Resolve(JSContext *aContext, JSObject *aObj, jsval aID,
PRBool *aDidDefineProperty)
{
if (!JSVAL_IS_STRING(aID)) {
return PR_TRUE;
}
PRBool ret;
JSObject* obj;
jschar* str = JS_GetStringChars(JS_ValueToString(aContext, aID));
size_t str_len = JS_GetStringLength(JS_ValueToString(aContext, aID));
nsCOMPtr<nsIScriptContext> scriptContext;
nsresult rv = NS_OK;
rv = nsContentUtils::GetStaticScriptContext(aContext, aObj,
getter_AddRefs(scriptContext));
// If we can't get a script context, there's nothing we can do
if (!scriptContext || NS_FAILED(rv)) {
return PR_FALSE;
}
rv = mControls->GetNamedObject(aContext, aID, &obj);
if (NS_FAILED(rv)) {
return PR_FALSE;
}
if (!obj && mDocument) {
nsCOMPtr<nsIHTMLDocument> html_doc(do_QueryInterface(mDocument));
if (html_doc) {
nsCOMPtr<nsISupports> item;
nsLiteralString name(NS_REINTERPRET_CAST(PRUnichar *, str), str_len);
rv = html_doc->ResolveName(name, this, getter_AddRefs(item));
if (NS_FAILED(rv)) {
return PR_FALSE;
}
nsCOMPtr<nsIScriptObjectOwner> owner(do_QueryInterface(item));
if (owner) {
rv = owner->GetScriptObject(scriptContext, (void**)&obj);
if (NS_FAILED(rv)) {
return PR_FALSE;
}
}
}
}
if (obj) {
JSObject* myObj;
rv = GetScriptObject(scriptContext, (void**)&myObj);
ret = ::JS_DefineUCProperty(aContext, myObj,
str, str_len, OBJECT_TO_JSVAL(obj),
nsnull, nsnull, 0);
*aDidDefineProperty = PR_TRUE;
}
else {
ret = nsGenericHTMLContainerElement::Resolve(aContext, aObj, aID,
aDidDefineProperty);
}
return ret;
}
NS_IMETHODIMP
nsHTMLFormElement::Item(PRUint32 aIndex, nsIDOMElement** aReturn)
{
if (mControls) {
nsCOMPtr<nsIDOMNode> node;
nsresult result = mControls->Item(aIndex, getter_AddRefs(node));
if (node) {
result = CallQueryInterface(node, aReturn);
} else {
*aReturn = nsnull;
}
return result;
}
return NS_ERROR_FAILURE;
}
//----------------------------------------------------------------------
// nsFormControlList implementation, this could go away if there were
// a lightweight collection implementation somewhere
nsFormControlList::nsFormControlList(nsIDOMHTMLFormElement* aForm)
: mScriptObject(nsnull), mForm(aForm),
mNameLookupTable(NS_FORM_CONTROL_LIST_HASHTABLE_SIZE),
: mForm(aForm), mNameLookupTable(NS_FORM_CONTROL_LIST_HASHTABLE_SIZE),
mNoNameLookupTable(nsnull)
{
NS_INIT_REFCNT();
@ -771,13 +652,6 @@ nsFormControlList::~nsFormControlList()
Clear();
}
NS_IMETHODIMP
nsFormControlList::SetScriptObject(void *aScriptObject)
{
mScriptObject = aScriptObject;
return NS_OK;
}
void
nsFormControlList::SetForm(nsIDOMHTMLFormElement* aForm)
{
@ -818,36 +692,26 @@ nsFormControlList::Clear()
}
}
NS_IMPL_ADDREF(nsFormControlList)
NS_IMPL_RELEASE(nsFormControlList)
// XPConnect interface list for nsFormControlList
NS_CLASSINFO_MAP_BEGIN(HTMLFormControlCollection)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNSHTMLFormControlList)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLCollection)
NS_CLASSINFO_MAP_END
// XPConnect interface list for nsFormControlList
NS_INTERFACE_MAP_BEGIN(nsFormControlList)
NS_INTERFACE_MAP_ENTRY(nsIDOMNSHTMLFormControlList)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLCollection)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLFormControlList)
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectOwner)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMHTMLCollection)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO_WITH_NAME(HTMLFormControlCollection,
HTMLCollection)
NS_INTERFACE_MAP_END
nsresult nsFormControlList::GetScriptObject(nsIScriptContext *aContext,
void** aScriptObject)
{
nsresult res = NS_OK;
if (!mScriptObject) {
res = NS_NewScriptHTMLFormControlList(aContext, (nsISupports *)(nsIDOMHTMLCollection *)this, nsnull, (void**)&mScriptObject);
}
*aScriptObject = mScriptObject;
return res;
}
nsresult nsFormControlList::ResetScriptObject()
{
mScriptObject = nsnull;
return NS_OK;
}
NS_IMPL_ADDREF(nsFormControlList)
NS_IMPL_RELEASE(nsFormControlList)
// nsIDOMHTMLCollection interface
@ -873,79 +737,11 @@ nsFormControlList::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
return NS_OK;
}
NS_IMETHODIMP
nsFormControlList::Item(JSContext* cx, jsval* argv, PRUint32 argc,
jsval* aReturn)
{
nsCOMPtr<nsIDOMNode> element;
nsresult result;
nsCOMPtr<nsIScriptContext> scriptContext;
nsCOMPtr<nsIScriptObjectOwner> owner;
PRInt32 index;
nsCOMPtr<nsIDocument> document;
if (argc < 1) {
return NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR;
}
*aReturn = nsnull;
if (!JS_ValueToInt32(cx, argv[0], (int32*)&index)) {
return NS_ERROR_FAILURE;
}
if (!mForm) {
return NS_OK;
}
nsCOMPtr<nsIContent> content(do_QueryInterface(mForm));
if (content) {
result = content->GetDocument(*getter_AddRefs(document));
if (NS_FAILED(result)) {
return result;
}
}
if (document) {
nsCOMPtr<nsIScriptGlobalObject> globalObject;
document->GetScriptGlobalObject(getter_AddRefs(globalObject));
if (globalObject) {
result = globalObject->GetContext(getter_AddRefs(scriptContext));
}
}
// If we can't get a script context, there's nothing we can do
if (!scriptContext) {
return NS_ERROR_FAILURE;
}
result = Item((PRUint32)index, getter_AddRefs(element));
if (NS_FAILED(result)) {
return result;
}
if (element) {
owner = do_QueryInterface(element);
if (owner) {
JSObject* obj;
result = owner->GetScriptObject(scriptContext, (void**)&obj);
if (NS_FAILED(result)) {
return result;
}
*aReturn = OBJECT_TO_JSVAL(obj);
}
}
return NS_OK;
}
nsresult
nsFormControlList::GetNamedObject(JSContext* aContext, jsval aID,
JSObject** aObj)
nsFormControlList::GetNamedObject(const nsAReadableString& aName,
nsISupports** aResult)
{
NS_ENSURE_ARG_POINTER(aObj);
*aObj = nsnull;
*aResult = nsnull;
if (!mForm) {
// No form, no named objects
@ -953,72 +749,13 @@ nsFormControlList::GetNamedObject(JSContext* aContext, jsval aID,
}
nsresult rv = NS_OK;
nsCOMPtr<nsIScriptContext> scriptContext;
nsCOMPtr<nsIScriptObjectOwner> owner;
char* str = JS_GetStringBytes(JS_ValueToString(aContext, aID));
nsAutoString ustr; ustr.AssignWithConversion(str);
// Get the hash entry
nsStringKey key(ustr);
nsStringKey key(aName);
nsCOMPtr<nsISupports> item(dont_AddRef(mNameLookupTable.Get(&key)));
*aResult = mNameLookupTable.Get(&key);
if (item) {
// Found something, we don't care here if it's a element or a node
// list, we just return the script object
owner = do_QueryInterface(item);
}
if (!owner) {
// No owner means we didn't find anything, at least not something we can
// return as a JSObject.
return NS_OK;
}
nsCOMPtr<nsIDocument> document;
nsCOMPtr<nsIContent> form = do_QueryInterface(mForm);
if (form) {
rv = form->GetDocument(*getter_AddRefs(document));
if (NS_FAILED(rv)) {
return rv;
}
}
if (document) {
nsCOMPtr<nsIScriptGlobalObject> globalObject;
document->GetScriptGlobalObject(getter_AddRefs(globalObject));
if (globalObject) {
rv = globalObject->GetContext(getter_AddRefs(scriptContext));
}
}
// If we can't get a script context, there's nothing we can do
if (!scriptContext) {
return NS_ERROR_FAILURE;
}
return owner->GetScriptObject(scriptContext, (void**)aObj);
}
NS_IMETHODIMP
nsFormControlList::NamedItem(JSContext* cx, jsval* argv, PRUint32 argc,
jsval* aReturn)
{
JSObject *obj;
nsresult result = NS_OK;
if (argc > 0) {
result = GetNamedObject(cx, argv[0], &obj);
if (NS_SUCCEEDED(result) && (nsnull != obj)) {
*aReturn = OBJECT_TO_JSVAL(obj);
}
}
else {
result = NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR;
}
return result;
return NS_OK;
}
NS_IMETHODIMP
@ -1026,20 +763,22 @@ nsFormControlList::NamedItem(const nsAReadableString& aName,
nsIDOMNode** aReturn)
{
NS_ENSURE_ARG_POINTER(aReturn);
*aReturn = nsnull;
nsresult rv = NS_OK;
nsStringKey key(aName);
*aReturn = nsnull;
nsCOMPtr<nsISupports> supports(dont_AddRef(mNameLookupTable.Get(&key)));
if (supports) {
// We found something, check if it's a node
rv = CallQueryInterface(supports, aReturn);
CallQueryInterface(supports, aReturn);
if (NS_FAILED(rv)) {
if (!*aReturn) {
// If not, we check if it's a node list.
nsCOMPtr<nsIDOMNodeList> nodeList(do_QueryInterface(supports, &rv));
nsCOMPtr<nsIDOMNodeList> nodeList(do_QueryInterface(supports));
NS_WARN_IF_FALSE(nodeList, "Huh, what's going one here?");
if (nodeList) {
// And since we're only asking for one node here, we return the first
@ -1052,6 +791,19 @@ nsFormControlList::NamedItem(const nsAReadableString& aName,
return rv;
}
NS_IMETHODIMP
nsFormControlList::NamedItem(const nsAReadableString& aName,
nsISupports** aReturn)
{
NS_ENSURE_ARG_POINTER(aReturn);
nsStringKey key(aName);
*aReturn = mNameLookupTable.Get(&key);
return NS_OK;
}
nsresult
nsFormControlList::AddElementToTable(nsIFormControl* aChild,
const nsAReadableString& aName)
@ -1112,10 +864,6 @@ nsFormControlList::AddElementToTable(nsIFormControl* aChild,
list->QueryInterface(NS_GET_IID(nsISupports),
getter_AddRefs(listSupports));
// Remove the current item from the hash so that we don't create
// a leak when we add the new item to the hash.
mNameLookupTable.Remove(&key);
// Replace the element with the list.
mNameLookupTable.Put(&key, listSupports);
} else {

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLFrameElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -50,16 +49,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLFrameElement
NS_DECL_IDOMHTMLFRAMEELEMENT
NS_DECL_NSIDOMHTMLFRAMEELEMENT
// nsIChromeEventHandler
NS_DECL_NSICHROMEEVENTHANDLER
@ -112,8 +111,21 @@ nsHTMLFrameElement::~nsHTMLFrameElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLFrameElement, nsGenericElement);
NS_IMPL_RELEASE_INHERITED(nsHTMLFrameElement, nsGenericElement);
NS_IMPL_HTMLCONTENT_QI2(nsHTMLFrameElement, nsGenericHTMLLeafElement,
nsIDOMHTMLFrameElement, nsIChromeEventHandler);
// XPConnect interface list for nsHTMLFrameElement
NS_CLASSINFO_MAP_BEGIN(HTMLFrameElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLFrameElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLFrameElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLFrameElement,
nsGenericHTMLLeafElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLFrameElement)
NS_INTERFACE_MAP_ENTRY(nsIChromeEventHandler)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLFrameElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult
@ -188,12 +200,6 @@ nsHTMLFrameElement::GetContentDocument(nsIDOMDocument** aContentDocument)
return NS_OK;
}
NS_IMETHODIMP
nsHTMLFrameElement::SetContentDocument(nsIDOMDocument* aContentDocument)
{
return NS_ERROR_DOM_INVALID_MODIFICATION_ERR;
}
NS_IMETHODIMP
nsHTMLFrameElement::StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLFrameSetElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -43,16 +42,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLFrameSetElement
NS_DECL_IDOMHTMLFRAMESETELEMENT
NS_DECL_NSIDOMHTMLFRAMESETELEMENT
NS_IMETHOD StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,
@ -104,8 +103,20 @@ nsHTMLFrameSetElement::~nsHTMLFrameSetElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLFrameSetElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLFrameSetElement, nsGenericElement)
NS_IMPL_HTMLCONTENT_QI(nsHTMLFrameSetElement, nsGenericHTMLContainerElement,
nsIDOMHTMLFrameSetElement);
// XPConnect interface list for nsHTMLFrameSetElement
NS_CLASSINFO_MAP_BEGIN(HTMLFrameSetElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLFrameSetElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLFrameSetElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLFrameSetElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLFrameSetElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLFrameSetElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLHRElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -44,16 +43,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLHRElement
NS_DECL_IDOMHTMLHRELEMENT
NS_DECL_NSIDOMHTMLHRELEMENT
NS_IMETHOD StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,
@ -107,8 +106,20 @@ nsHTMLHRElement::~nsHTMLHRElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLHRElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLHRElement, nsGenericElement)
NS_IMPL_HTMLCONTENT_QI(nsHTMLHRElement, nsGenericHTMLLeafElement,
nsIDOMHTMLHRElement);
// XPConnect interface list for nsHTMLHRElement
NS_CLASSINFO_MAP_BEGIN(HTMLHRElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLHRElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLHRElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLHRElement,
nsGenericHTMLLeafElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLHRElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLHRElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLHeadElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -43,16 +42,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLHeadElement
NS_DECL_IDOMHTMLHEADELEMENT
NS_DECL_NSIDOMHTMLHEADELEMENT
NS_IMETHOD SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const;
};
@ -96,8 +95,20 @@ nsHTMLHeadElement::~nsHTMLHeadElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLHeadElement, nsGenericElement);
NS_IMPL_RELEASE_INHERITED(nsHTMLHeadElement, nsGenericElement);
NS_IMPL_HTMLCONTENT_QI(nsHTMLHeadElement, nsGenericHTMLContainerElement,
nsIDOMHTMLHeadElement);
// XPConnect interface list for nsHTMLHeadElement
NS_CLASSINFO_MAP_BEGIN(HTMLHeadElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLHeadElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLHeadElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLHeadElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLHeadElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLHeadElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLHeadingElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -44,16 +43,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLHeadingElement
NS_DECL_IDOMHTMLHEADINGELEMENT
NS_DECL_NSIDOMHTMLHEADINGELEMENT
NS_IMETHOD StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,
@ -107,8 +106,20 @@ nsHTMLHeadingElement::~nsHTMLHeadingElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLHeadingElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLHeadingElement, nsGenericElement)
NS_IMPL_HTMLCONTENT_QI(nsHTMLHeadingElement, nsGenericHTMLContainerElement,
nsIDOMHTMLHeadingElement);
// XPConnect interface list for nsHTMLHeadingElement
NS_CLASSINFO_MAP_BEGIN(HTMLHeadingElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLHeadingElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLHeadingElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLHeadingElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLHeadingElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLHeadingElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLHtmlElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -44,16 +43,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLHtmlElement
NS_DECL_IDOMHTMLHTMLELEMENT
NS_DECL_NSIDOMHTMLHTMLELEMENT
NS_IMETHOD SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const;
};
@ -99,8 +98,20 @@ NS_IMPL_ADDREF_INHERITED(nsHTMLHtmlElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLHtmlElement, nsGenericElement)
NS_IMPL_HTMLCONTENT_QI(nsHTMLHtmlElement, nsGenericHTMLContainerElement,
nsIDOMHTMLHtmlElement)
// XPConnect interface list for nsHTMLHtmlElement
NS_CLASSINFO_MAP_BEGIN(HTMLHtmlElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLHtmlElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLHtmlElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLHtmlElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLHtmlElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLHtmlElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
NS_IMETHODIMP

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLIFrameElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -51,16 +50,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLIFrameElement
NS_DECL_IDOMHTMLIFRAMEELEMENT
NS_DECL_NSIDOMHTMLIFRAMEELEMENT
// nsIChromeEventHandler
NS_DECL_NSICHROMEEVENTHANDLER
@ -117,8 +116,21 @@ nsHTMLIFrameElement::~nsHTMLIFrameElement()
NS_IMPL_ADDREF(nsHTMLIFrameElement);
NS_IMPL_RELEASE(nsHTMLIFrameElement);
NS_IMPL_HTMLCONTENT_QI2(nsHTMLIFrameElement, nsGenericHTMLContainerElement,
nsIDOMHTMLIFrameElement, nsIChromeEventHandler);
// XPConnect interface list for nsHTMLIFrameElement
NS_CLASSINFO_MAP_BEGIN(HTMLIFrameElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLIFrameElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLIFrameElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLIFrameElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLIFrameElement)
NS_INTERFACE_MAP_ENTRY(nsIChromeEventHandler)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLIFrameElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult
@ -194,13 +206,7 @@ nsHTMLIFrameElement::GetContentDocument(nsIDOMDocument** aContentDocument)
return NS_OK;
}
NS_IMETHODIMP
nsHTMLIFrameElement::SetContentDocument(nsIDOMDocument* aContentDocument)
{
return NS_ERROR_DOM_INVALID_MODIFICATION_ERR;
}
NS_IMETHODIMP
nsHTMLIFrameElement::StringToAttribute(nsIAtom* aAttribute,
const nsAReadableString& aValue,

Просмотреть файл

@ -20,8 +20,7 @@
* Contributor(s):
*/
#include "nsIDOMHTMLImageElement.h"
#include "nsIDOMImage.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMNSHTMLImageElement.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -33,7 +32,6 @@
#include "nsIPresContext.h"
#include "nsIPresShell.h"
#include "nsIHTMLAttributes.h"
#include "nsIJSScriptObject.h"
#include "nsIJSNativeInitializer.h"
#include "nsSize.h"
#include "nsIDocument.h"
@ -64,11 +62,13 @@
#include "nsIFrameImageLoader.h"
#endif
#include "nsIJSContextStack.h"
// XXX nav attrs: suppress
class nsHTMLImageElement : public nsGenericHTMLLeafElement,
public nsIDOMHTMLImageElement,
public nsIDOMImage,
public nsIDOMNSHTMLImageElement,
public nsIJSNativeInitializer
#ifdef USE_IMG2
, public imgIDecoderObserver
@ -82,37 +82,30 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLImageElement
NS_DECL_IDOMHTMLIMAGEELEMENT
NS_DECL_NSIDOMHTMLIMAGEELEMENT
// nsIDOMNSHTMLImageElement
NS_DECL_NSIDOMNSHTMLIMAGEELEMENT
// nsIDOMImage
NS_DECL_IDOMIMAGE
#ifdef USE_IMG2
NS_DECL_IMGIDECODEROBSERVER
NS_DECL_IMGICONTAINEROBSERVER
#endif
// nsIJSScriptObject
virtual PRBool GetProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp);
virtual PRBool SetProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp);
virtual PRBool Resolve(JSContext *aContext, JSObject *aObj, jsval aID,
PRBool *aDidDefineProperty);
// nsIJSNativeInitializer
NS_IMETHOD Initialize(JSContext* aContext, JSObject *aObj,
PRUint32 argc, jsval *argv);
// nsIContent
NS_IMETHOD SetDocument(nsIDocument* aDocument, PRBool aDeep,
PRBool aCompileEventHandlers);
NS_IMETHOD StringToAttribute(nsIAtom* aAttribute,
@ -132,7 +125,7 @@ public:
protected:
nsresult SetSrcInner(nsIURI* aBaseURL, const nsAReadableString& aSrc);
static nsresult GetCallerSourceURL(JSContext* cx, nsIURI** sourceURL);
static nsresult GetCallerSourceURL(nsIURI** sourceURL);
nsresult GetImageFrame(nsIImageFrame** aImageFrame);
@ -217,16 +210,40 @@ nsHTMLImageElement::~nsHTMLImageElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLImageElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLImageElement, nsGenericElement)
// XPConnect interface list for nsHTMLImageElement
NS_CLASSINFO_MAP_BEGIN(HTMLImageElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLImageElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNSHTMLImageElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLImageElement
#ifdef USE_IMG2
NS_IMPL_HTMLCONTENT_QI4(nsHTMLImageElement, nsGenericHTMLLeafElement,
nsIDOMHTMLImageElement, nsIDOMImage,
nsIJSNativeInitializer, imgIDecoderObserver);
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLImageElement,
nsGenericHTMLLeafElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLImageElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMNSHTMLImageElement)
NS_INTERFACE_MAP_ENTRY(nsIJSNativeInitializer)
NS_INTERFACE_MAP_ENTRY(imgIDecoderObserver)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLImageElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
#else
NS_IMPL_HTMLCONTENT_QI3(nsHTMLImageElement, nsGenericHTMLLeafElement,
nsIDOMHTMLImageElement, nsIDOMImage,
nsIJSNativeInitializer);
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLImageElement,
nsGenericHTMLLeafElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLImageElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMNSHTMLImageElement)
NS_INTERFACE_MAP_ENTRY(nsIJSNativeInitializer)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLImageElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
#endif
nsresult
nsHTMLImageElement::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
{
@ -260,15 +277,12 @@ NS_IMPL_STRING_ATTR(nsHTMLImageElement, LowSrc, lowsrc)
NS_IMPL_STRING_ATTR(nsHTMLImageElement, Name, name)
NS_IMPL_STRING_ATTR(nsHTMLImageElement, Align, align)
NS_IMPL_STRING_ATTR(nsHTMLImageElement, Alt, alt)
NS_IMPL_STRING_ATTR(nsHTMLImageElement, Border, border)
NS_IMPL_INT_ATTR(nsHTMLImageElement, Border, border)
NS_IMPL_STRING_ATTR(nsHTMLImageElement, Hspace, hspace)
NS_IMPL_INT_ATTR(nsHTMLImageElement, Hspace, hspace)
NS_IMPL_BOOL_ATTR(nsHTMLImageElement, IsMap, ismap)
NS_IMPL_STRING_ATTR(nsHTMLImageElement, LongDesc, longdesc)
NS_IMPL_STRING_ATTR(nsHTMLImageElement, Lowsrc, lowsrc)
NS_IMPL_STRING_ATTR(nsHTMLImageElement, UseMap, usemap)
NS_IMPL_STRING_ATTR(nsHTMLImageElement, Vspace, vspace)
NS_IMPL_INT_ATTR(nsHTMLImageElement, Vspace, vspace)
nsresult
@ -353,38 +367,6 @@ nsHTMLImageElement::GetComplete(PRBool* aComplete)
return NS_OK;
}
NS_IMETHODIMP
nsHTMLImageElement::GetHeight(nsAWritableString& aValue)
{
nsresult rv = nsGenericHTMLLeafElement::GetAttribute(kNameSpaceID_None,
nsHTMLAtoms::height,
aValue);
if (rv == NS_CONTENT_ATTR_NOT_THERE) {
PRInt32 height = 0;
aValue.Truncate();
// A zero height most likely means that the image is not loaded yet.
if (NS_SUCCEEDED(GetHeight(&height)) && height) {
nsAutoString heightStr;
heightStr.AppendInt(height);
aValue.Append(heightStr);
aValue.Append(NS_LITERAL_STRING("px"));
}
}
return NS_OK;
}
NS_IMETHODIMP
nsHTMLImageElement::SetHeight(const nsAReadableString& aValue)
{
return nsGenericHTMLLeafElement::SetAttribute(kNameSpaceID_None,
nsHTMLAtoms::height,
aValue, PR_TRUE);
}
NS_IMETHODIMP
nsHTMLImageElement::GetHeight(PRInt32* aHeight)
{
@ -438,38 +420,6 @@ nsHTMLImageElement::SetHeight(PRInt32 aHeight)
val, PR_TRUE);
}
NS_IMETHODIMP
nsHTMLImageElement::GetWidth(nsAWritableString& aValue)
{
nsresult rv = nsGenericHTMLLeafElement::GetAttribute(kNameSpaceID_None,
nsHTMLAtoms::width,
aValue);
if (rv == NS_CONTENT_ATTR_NOT_THERE) {
PRInt32 width = 0;
aValue.Truncate();
// A zero width most likely means that the image is not loaded yet.
if (NS_SUCCEEDED(GetWidth(&width)) && width) {
nsAutoString widthStr;
widthStr.AppendInt(width);
aValue.Append(widthStr);
aValue.Append(NS_LITERAL_STRING("px"));
}
}
return NS_OK;
}
NS_IMETHODIMP
nsHTMLImageElement::SetWidth(const nsAReadableString& aValue)
{
return nsGenericHTMLLeafElement::SetAttribute(kNameSpaceID_None,
nsHTMLAtoms::width, aValue,
PR_TRUE);
}
NS_IMETHODIMP
nsHTMLImageElement::GetWidth(PRInt32* aWidth)
{
@ -652,41 +602,8 @@ nsHTMLImageElement::HandleDOMEvent(nsIPresContext* aPresContext,
aEventStatus);
}
PRBool
nsHTMLImageElement::GetProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp)
{
// XXX Security manager needs to be called
if (JSVAL_IS_STRING(aID)) {
PRUnichar* ustr =
NS_REINTERPRET_CAST(PRUnichar *,
JS_GetStringChars(JS_ValueToString(aContext, aID)));
if (NS_LITERAL_STRING("src").Equals(ustr)) {
nsAutoString src;
if (NS_SUCCEEDED(GetSrc(src))) {
const PRUnichar* bytes = src.GetUnicode();
JSString* str = JS_NewUCStringCopyZ(aContext, (const jschar*)bytes);
if (str) {
*aVp = STRING_TO_JSVAL(str);
return PR_TRUE;
}
else {
return PR_FALSE;
}
}
else {
return PR_FALSE;
}
}
}
return nsGenericHTMLLeafElement::GetProperty(aContext, aObj, aID, aVp);
}
nsresult
nsHTMLImageElement::GetCallerSourceURL(JSContext* cx,
nsIURI** sourceURL)
nsHTMLImageElement::GetCallerSourceURL(nsIURI** sourceURL)
{
// XXX Code duplicated from nsHTMLDocument
// XXX Question, why does this return NS_OK on failure?
@ -697,6 +614,23 @@ nsHTMLImageElement::GetCallerSourceURL(JSContext* cx,
// that we can get the url of the caller.
// XXX This will fail on non-DOM contexts :(
// Get JSContext from stack.
// XXX: This service should be cached.
nsCOMPtr<nsIJSContextStack>
stack(do_GetService("@mozilla.org/js/xpc/ContextStack;1", &result));
if (NS_FAILED(result))
return NS_ERROR_FAILURE;
JSContext *cx;
if (NS_FAILED(stack->Peek(&cx)))
return NS_ERROR_FAILURE;
nsCOMPtr<nsIScriptGlobalObject> global;
nsContentUtils::GetDynamicScriptGlobal(cx, getter_AddRefs(global));
if (global) {
@ -722,91 +656,6 @@ nsHTMLImageElement::GetCallerSourceURL(JSContext* cx,
return result;
}
PRBool
nsHTMLImageElement::SetProperty(JSContext *aContext, JSObject *aObj,
jsval aID, jsval *aVp)
{
nsresult result = NS_OK;
// XXX Security manager needs to be called
if (JSVAL_IS_STRING(aID)) {
PRUnichar* ustr =
NS_REINTERPRET_CAST(PRUnichar *,
JS_GetStringChars(JS_ValueToString(aContext, aID)));
if (NS_LITERAL_STRING("src").Equals(ustr)) {
nsCOMPtr<nsIURI> base;
nsAutoString src, url;
// Get the parameter passed in
JSString *jsstring;
if ((jsstring = JS_ValueToString(aContext, *aVp))) {
src.Assign(NS_REINTERPRET_CAST(const PRUnichar*,
JS_GetStringChars(jsstring)));
src.Trim(" \t\n\r");
}
// Get the source of the caller
result = GetCallerSourceURL(aContext, getter_AddRefs(base));
if (NS_SUCCEEDED(result)) {
if (base) {
result = NS_MakeAbsoluteURI(url, src, base);
} else {
url.Assign(src);
}
if (NS_SUCCEEDED(result)) {
result = SetSrcInner(base, url);
}
}
}
else {
result = nsGenericHTMLLeafElement::SetProperty(aContext, aObj, aID, aVp);
}
}
else {
result = nsGenericHTMLLeafElement::SetProperty(aContext, aObj, aID, aVp);
}
if (NS_FAILED(result)) {
return PR_FALSE;
}
return PR_TRUE;
}
PRBool
nsHTMLImageElement::Resolve(JSContext *aContext, JSObject *aObj, jsval aID,
PRBool *aDidDefineProperty)
{
if (JSVAL_IS_STRING(aID) && mDOMSlots) {
JSString *str;
str = JSVAL_TO_STRING(aID);
const jschar *chars = ::JS_GetStringChars(str);
const PRUnichar *unichars = NS_REINTERPRET_CAST(const PRUnichar*, chars);
if (!nsCRT::strcmp(unichars, NS_LITERAL_STRING("src").get())) {
// Someone is trying to resolve "src" so we deifine it on the
// object with a JSVAL_VOID value, the real value will be returned
// when the caller calls GetProperty().
::JS_DefineUCProperty(aContext,
(JSObject *)mDOMSlots->mScriptObject,
chars, ::JS_GetStringLength(str),
JSVAL_VOID, nsnull, nsnull, 0);
*aDidDefineProperty = PR_TRUE;
return PR_TRUE;
}
}
return nsGenericHTMLLeafElement::Resolve(aContext, aObj, aID,
aDidDefineProperty);
}
NS_IMETHODIMP
nsHTMLImageElement::Initialize(JSContext* aContext,
JSObject *aObj,
@ -1173,7 +1022,13 @@ nsHTMLImageElement::SetSrc(const nsAReadableString& aSrc)
nsCOMPtr<nsIURI> baseURL;
nsresult result = NS_OK;
if (mOwnerDocument) {
GetCallerSourceURL(getter_AddRefs(baseURL));
if (mDocument && !baseURL) {
result = mDocument->GetBaseURL(*getter_AddRefs(baseURL));
}
if (mOwnerDocument && !baseURL) {
result = mOwnerDocument->GetBaseURL(*getter_AddRefs(baseURL));
}

Просмотреть файл

@ -31,7 +31,6 @@
#include "nsContentCID.h"
#include "nsIComponentManager.h"
#include "nsIDOMHTMLFormElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -83,7 +82,7 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLLeafFormElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLLeafFormElement::)
// nsIDOMElement
// can't use the macro here because input type=text needs to notify up to
@ -170,13 +169,13 @@ public:
}
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLLeafFormElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLLeafFormElement::)
// nsIDOMHTMLInputElement
NS_DECL_IDOMHTMLINPUTELEMENT
NS_DECL_NSIDOMHTMLINPUTELEMENT
// nsIDOMNSHTMLInputElement
NS_DECL_IDOMNSHTMLINPUTELEMENT
NS_DECL_NSIDOMNSHTMLINPUTELEMENT
// Overriden nsIFormControl methods
NS_IMETHOD GetType(PRInt32* aType);
@ -274,8 +273,22 @@ nsHTMLInputElement::~nsHTMLInputElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLInputElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLInputElement, nsGenericElement)
NS_IMPL_HTMLCONTENT_QI2(nsHTMLInputElement, nsGenericHTMLLeafFormElement,
nsIDOMHTMLInputElement, nsIDOMNSHTMLInputElement)
// XPConnect interface list for nsHTMLInputElement
NS_CLASSINFO_MAP_BEGIN(HTMLInputElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLInputElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMNSHTMLInputElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLInputElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLInputElement,
nsGenericHTMLLeafFormElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLInputElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMNSHTMLInputElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLInputElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
// nsIDOMNode

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLModElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -43,16 +42,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLContainerElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLContainerElement::)
// nsIDOMHTMLModElement
NS_DECL_IDOMHTMLMODELEMENT
NS_DECL_NSIDOMHTMLMODELEMENT
NS_IMETHOD SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const;
};
@ -96,8 +95,20 @@ nsHTMLInsElement::~nsHTMLInsElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLInsElement, nsGenericElement);
NS_IMPL_RELEASE_INHERITED(nsHTMLInsElement, nsGenericElement);
NS_IMPL_HTMLCONTENT_QI(nsHTMLInsElement, nsGenericHTMLContainerElement,
nsIDOMHTMLModElement);
// XPConnect interface list for nsHTMLInsElement
NS_CLASSINFO_MAP_BEGIN(HTMLInsElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLModElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLInsElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLInsElement,
nsGenericHTMLContainerElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLModElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLInsElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Просмотреть файл

@ -20,7 +20,6 @@
* Contributor(s):
*/
#include "nsIDOMHTMLIsIndexElement.h"
#include "nsIScriptObjectOwner.h"
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
@ -43,16 +42,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_IDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLLeafElement::)
// nsIDOMElement
NS_FORWARD_IDOMELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLElement
NS_FORWARD_IDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLLeafElement::)
// nsIDOMHTMLIsIndexElement
NS_DECL_IDOMHTMLISINDEXELEMENT
NS_DECL_NSIDOMHTMLISINDEXELEMENT
NS_IMETHOD SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const;
};
@ -96,8 +95,20 @@ nsHTMLIsIndexElement::~nsHTMLIsIndexElement()
NS_IMPL_ADDREF_INHERITED(nsHTMLIsIndexElement, nsGenericElement);
NS_IMPL_RELEASE_INHERITED(nsHTMLIsIndexElement, nsGenericElement);
NS_IMPL_HTMLCONTENT_QI(nsHTMLIsIndexElement, nsGenericHTMLLeafElement,
nsIDOMHTMLIsIndexElement);
// XPConnect interface list for nsHTMLIsIndexElement
NS_CLASSINFO_MAP_BEGIN(HTMLIsIndexElement)
NS_CLASSINFO_MAP_ENTRY(nsIDOMHTMLIsIndexElement)
NS_CLASSINFO_MAP_ENTRY_FUNCTION(GetGenericHTMLElementIIDs)
NS_CLASSINFO_MAP_END
// QueryInterface implementation for nsHTMLIsIndexElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLIsIndexElement,
nsGenericHTMLLeafElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLIsIndexElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLIsIndexElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше