mshtml: Wine Gecko 0.9.0 release.

This commit is contained in:
Jacek Caban 2008-12-30 06:48:59 +01:00 committed by Alexandre Julliard
parent 03a83c49db
commit 8d28f09d8a
8 changed files with 764 additions and 75 deletions

View File

@ -45,6 +45,7 @@ C_SRCS = \
install.c \
loadopts.c \
main.c \
mutation.c \
navigate.c \
nsembed.c \
nsevents.c \

View File

@ -548,18 +548,18 @@ static HRESULT WINAPI HTMLElement2_removeFilter(IHTMLElement2 *iface, IUnknown *
static HRESULT WINAPI HTMLElement2_get_clientHeight(IHTMLElement2 *iface, long *p)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
nsIDOMNSHTMLElement *nselem;
nsIDOMNSElement *nselem;
PRInt32 height=0;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
nsIDOMNSHTMLElement_GetClientHeight(nselem, &height);
nsIDOMNSHTMLElement_Release(nselem);
nsIDOMNSElement_GetClientHeight(nselem, &height);
nsIDOMNSElement_Release(nselem);
}else {
ERR("Could not get nsIDOMHTMLNSElement: %08x\n", nsres);
ERR("Could not get nsIDOMNSElement: %08x\n", nsres);
}
*p = height;
@ -569,18 +569,18 @@ static HRESULT WINAPI HTMLElement2_get_clientHeight(IHTMLElement2 *iface, long *
static HRESULT WINAPI HTMLElement2_get_clientWidth(IHTMLElement2 *iface, long *p)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
nsIDOMNSHTMLElement *nselem;
nsIDOMNSElement *nselem;
PRInt32 width=0;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
nsIDOMNSHTMLElement_GetClientWidth(nselem, &width);
nsIDOMNSHTMLElement_Release(nselem);
nsIDOMNSElement_GetClientWidth(nselem, &width);
nsIDOMNSElement_Release(nselem);
}else {
ERR("Could not get nsIDOMHTMLNSElement: %08x\n", nsres);
ERR("Could not get nsIDOMNSElement: %08x\n", nsres);
}
*p = width;
@ -727,7 +727,7 @@ static HRESULT WINAPI HTMLElement2_createControlRange(IHTMLElement2 *iface, IDis
static HRESULT WINAPI HTMLElement2_get_scrollHeight(IHTMLElement2 *iface, long *p)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
nsIDOMNSHTMLElement *nselem;
nsIDOMNSElement *nselem;
PRInt32 height = 0;
nsresult nsres;
@ -735,15 +735,15 @@ static HRESULT WINAPI HTMLElement2_get_scrollHeight(IHTMLElement2 *iface, long *
nsres = nsIDOMElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
nsres = nsIDOMNSHTMLElement_GetScrollHeight(nselem, &height);
nsIDOMNSHTMLElement_Release(nselem);
nsres = nsIDOMNSElement_GetScrollHeight(nselem, &height);
nsIDOMNSElement_Release(nselem);
if(NS_FAILED(nsres))
ERR("GetScrollHeight failed: %08x\n", nsres);
}else {
ERR("Could not get nsIDOMNSHTMLElement interface: %08x\n", nsres);
ERR("Could not get nsIDOMNSElement interface: %08x\n", nsres);
}
*p = height;
*p = height == -1 ? 0 : height;
TRACE("*p = %ld\n", *p);
return S_OK;
@ -752,20 +752,20 @@ static HRESULT WINAPI HTMLElement2_get_scrollHeight(IHTMLElement2 *iface, long *
static HRESULT WINAPI HTMLElement2_get_scrollWidth(IHTMLElement2 *iface, long *p)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
nsIDOMNSHTMLElement *nselem;
nsIDOMNSElement *nselem;
PRInt32 width = 0;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
nsres = nsIDOMElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
nsres = nsIDOMElement_QueryInterface(This->nselem, &IID_nsIDOMNSElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
nsres = nsIDOMNSHTMLElement_GetScrollWidth(nselem, &width);
nsIDOMNSHTMLElement_Release(nselem);
nsres = nsIDOMNSElement_GetScrollWidth(nselem, &width);
nsIDOMNSElement_Release(nselem);
if(NS_FAILED(nsres))
ERR("GetScrollWidth failed: %08x\n", nsres);
}else {
ERR("Could not get nsIDOMNSHTMLElement interface: %08x\n", nsres);
ERR("Could not get nsIDOMNSElement interface: %08x\n", nsres);
}
*p = width;
@ -777,7 +777,7 @@ static HRESULT WINAPI HTMLElement2_get_scrollWidth(IHTMLElement2 *iface, long *p
static HRESULT WINAPI HTMLElement2_put_scrollTop(IHTMLElement2 *iface, long v)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
nsIDOMNSHTMLElement *nselem;
nsIDOMNSElement *nselem;
nsresult nsres;
TRACE("(%p)->(%ld)\n", This, v);
@ -787,12 +787,12 @@ static HRESULT WINAPI HTMLElement2_put_scrollTop(IHTMLElement2 *iface, long v)
return E_NOTIMPL;
}
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
nsIDOMNSHTMLElement_SetScrollTop(nselem, v);
nsIDOMNSHTMLElement_Release(nselem);
nsIDOMNSElement_SetScrollTop(nselem, v);
nsIDOMNSElement_Release(nselem);
}else {
ERR("Could not get nsIDOMNSHTMLElement interface: %08x\n", nsres);
ERR("Could not get nsIDOMNSElement interface: %08x\n", nsres);
}
return S_OK;
@ -801,20 +801,20 @@ static HRESULT WINAPI HTMLElement2_put_scrollTop(IHTMLElement2 *iface, long v)
static HRESULT WINAPI HTMLElement2_get_scrollTop(IHTMLElement2 *iface, long *p)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
nsIDOMNSHTMLElement *nselem;
nsIDOMNSElement *nselem;
PRInt32 top = 0;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
nsres = nsIDOMElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
nsres = nsIDOMElement_QueryInterface(This->nselem, &IID_nsIDOMNSElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
nsres = nsIDOMNSHTMLElement_GetScrollTop(nselem, &top);
nsIDOMNSHTMLElement_Release(nselem);
nsres = nsIDOMNSElement_GetScrollTop(nselem, &top);
nsIDOMNSElement_Release(nselem);
if(NS_FAILED(nsres))
ERR("GetScrollTop failed: %08x\n", nsres);
}else {
ERR("Could not get nsIDOMNSHTMLElement interface: %08x\n", nsres);
ERR("Could not get nsIDOMNSElement interface: %08x\n", nsres);
}
*p = top;
@ -826,7 +826,7 @@ static HRESULT WINAPI HTMLElement2_get_scrollTop(IHTMLElement2 *iface, long *p)
static HRESULT WINAPI HTMLElement2_put_scrollLeft(IHTMLElement2 *iface, long v)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
nsIDOMNSHTMLElement *nselem;
nsIDOMNSElement *nselem;
nsresult nsres;
TRACE("(%p)->(%ld)\n", This, v);
@ -836,12 +836,12 @@ static HRESULT WINAPI HTMLElement2_put_scrollLeft(IHTMLElement2 *iface, long v)
return E_NOTIMPL;
}
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
nsres = nsIDOMElement_QueryInterface(This->nselem, &IID_nsIDOMNSElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
nsIDOMNSHTMLElement_SetScrollLeft(nselem, v);
nsIDOMNSHTMLElement_Release(nselem);
nsIDOMNSElement_SetScrollLeft(nselem, v);
nsIDOMNSElement_Release(nselem);
}else {
ERR("Could not get nsIDOMNSHTMLElement interface: %08x\n", nsres);
ERR("Could not get nsIDOMNSElement interface: %08x\n", nsres);
}
return S_OK;
@ -850,7 +850,7 @@ static HRESULT WINAPI HTMLElement2_put_scrollLeft(IHTMLElement2 *iface, long v)
static HRESULT WINAPI HTMLElement2_get_scrollLeft(IHTMLElement2 *iface, long *p)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
nsIDOMNSHTMLElement *nselem;
nsIDOMNSElement *nselem;
PRInt32 left = 0;
nsresult nsres;
@ -865,11 +865,11 @@ static HRESULT WINAPI HTMLElement2_get_scrollLeft(IHTMLElement2 *iface, long *p)
return E_NOTIMPL;
}
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres))
{
nsres = nsIDOMNSHTMLElement_GetScrollLeft(nselem, &left);
nsIDOMNSHTMLElement_Release(nselem);
nsres = nsIDOMNSElement_GetScrollLeft(nselem, &left);
nsIDOMNSElement_Release(nselem);
if(NS_FAILED(nsres))
left = 0;
}

View File

@ -296,6 +296,13 @@ typedef struct {
NSContainer *This;
} nsEventListener;
typedef struct _mutation_queue_t {
DWORD type;
nsISupports *nsiface;
struct _mutation_queue_t *next;
} mutation_queue_t;
struct NSContainer {
const nsIWebBrowserChromeVtbl *lpWebBrowserChromeVtbl;
const nsIContextMenuListenerVtbl *lpContextMenuListenerVtbl;
@ -306,6 +313,10 @@ struct NSContainer {
const nsIWeakReferenceVtbl *lpWeakReferenceVtbl;
const nsISupportsWeakReferenceVtbl *lpSupportsWeakReferenceVtbl;
const nsIDocumentObserverVtbl *lpDocumentObserverVtbl;
const nsIRunnableVtbl *lpRunnableVtbl;
nsEventListener blur_listener;
nsEventListener focus_listener;
nsEventListener keypress_listener;
@ -330,6 +341,9 @@ struct NSContainer {
HWND hwnd;
mutation_queue_t *mutation_queue;
mutation_queue_t *mutation_queue_tail;
nsChannelBSC *bscallback; /* hack */
HWND reset_focus; /* hack */
@ -434,6 +448,10 @@ typedef struct {
#define NSWEAKREF(x) ((nsIWeakReference*) &(x)->lpWeakReferenceVtbl)
#define NSSUPWEAKREF(x) ((nsISupportsWeakReference*) &(x)->lpSupportsWeakReferenceVtbl)
#define NSDOCOBS(x) ((nsIDocumentObserver*) &(x)->lpDocumentObserverVtbl)
#define NSRUNNABLE(x) ((nsIRunnable*) &(x)->lpRunnableVtbl)
#define NSCHANNEL(x) ((nsIChannel*) &(x)->lpHttpChannelVtbl)
#define NSHTTPCHANNEL(x) ((nsIHttpChannel*) &(x)->lpHttpChannelVtbl)
#define NSUPCHANNEL(x) ((nsIUploadChannel*) &(x)->lpUploadChannelVtbl)
@ -487,6 +505,10 @@ void ConnectionPointContainer_Destroy(ConnectionPointContainer*);
NSContainer *NSContainer_Create(HTMLDocument*,NSContainer*);
void NSContainer_Release(NSContainer*);
void init_mutation(NSContainer*);
void set_mutation_observer(NSContainer*,nsIDOMHTMLDocument*);
BOOL handle_insert_comment(HTMLDocument *doc, const PRUnichar *comment);
void HTMLDocument_LockContainer(HTMLDocument*,BOOL);
void show_context_menu(HTMLDocument*,DWORD,POINT*,IDispatch*);
void notif_focus(HTMLDocument*);

437
dlls/mshtml/mutation.c Normal file
View File

@ -0,0 +1,437 @@
/*
* Copyright 2008 Jacek Caban for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
#include <stdarg.h>
#define COBJMACROS
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winreg.h"
#include "ole2.h"
#include "mshtml_private.h"
#include "htmlevent.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
enum {
MUTATION_COMMENT,
MUTATION_SCRIPT
};
void set_mutation_observer(NSContainer *nscontainer, nsIDOMHTMLDocument *nshtmldoc)
{
nsIDOMNSDocument *nsdoc;
nsresult nsres;
nsres = nsIDOMHTMLDocument_QueryInterface(nshtmldoc, &IID_nsIDOMNSDocument, (void**)&nsdoc);
if(NS_FAILED(nsres)) {
ERR("Could not get nsIDOMNSDocument: %08x\n", nsres);
return;
}
nsIDOMNSDocument_WineAddObserver(nsdoc, NSDOCOBS(nscontainer));
nsIDOMNSDocument_Release(nsdoc);
}
static void add_script_runner(NSContainer *This)
{
nsIDOMNSDocument *nsdoc;
nsresult nsres;
nsres = nsIDOMHTMLDocument_QueryInterface(This->doc->nsdoc, &IID_nsIDOMNSDocument, (void**)&nsdoc);
if(NS_FAILED(nsres)) {
ERR("Could not get nsIDOMNSDocument: %08x\n", nsres);
return;
}
nsIDOMNSDocument_WineAddScriptRunner(nsdoc, NSRUNNABLE(This));
nsIDOMNSDocument_Release(nsdoc);
}
#define NSRUNNABLE_THIS(iface) DEFINE_THIS(NSContainer, Runnable, iface)
static nsresult NSAPI nsRunnable_QueryInterface(nsIRunnable *iface,
nsIIDRef riid, nsQIResult result)
{
NSContainer *This = NSRUNNABLE_THIS(iface);
if(IsEqualGUID(riid, &IID_nsISupports)) {
TRACE("(%p)->(IID_nsISupports %p)\n", This, result);
*result = NSRUNNABLE(This);
}else if(IsEqualGUID(riid, &IID_nsIRunnable)) {
TRACE("(%p)->(IID_nsIRunnable %p)\n", This, result);
*result = NSRUNNABLE(This);
}else {
*result = NULL;
WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), result);
return NS_NOINTERFACE;
}
nsISupports_AddRef((nsISupports*)*result);
return NS_OK;
}
static nsrefcnt NSAPI nsRunnable_AddRef(nsIRunnable *iface)
{
NSContainer *This = NSRUNNABLE_THIS(iface);
return nsIWebBrowserChrome_AddRef(NSWBCHROME(This));
}
static nsrefcnt NSAPI nsRunnable_Release(nsIRunnable *iface)
{
NSContainer *This = NSRUNNABLE_THIS(iface);
return nsIWebBrowserChrome_Release(NSWBCHROME(This));
}
static void pop_mutation_queue(NSContainer *nscontainer)
{
mutation_queue_t *tmp = nscontainer->mutation_queue;
if(!tmp)
return;
nscontainer->mutation_queue = tmp->next;
if(!tmp->next)
nscontainer->mutation_queue_tail = NULL;
nsISupports_Release(tmp->nsiface);
heap_free(tmp);
}
static nsresult NSAPI nsRunnable_Run(nsIRunnable *iface)
{
NSContainer *This = NSRUNNABLE_THIS(iface);
nsresult nsres;
TRACE("(%p)\n", This);
while(This->mutation_queue) {
switch(This->mutation_queue->type) {
case MUTATION_COMMENT: {
nsIDOMComment *nscomment;
nsAString comment_str;
BOOL remove_comment = FALSE;
nsres = nsISupports_QueryInterface(This->mutation_queue->nsiface, &IID_nsIDOMComment, (void**)&nscomment);
if(NS_FAILED(nsres)) {
ERR("Could not get nsIDOMComment iface:%08x\n", nsres);
return NS_OK;
}
nsAString_Init(&comment_str, NULL);
nsres = nsIDOMComment_GetData(nscomment, &comment_str);
if(NS_SUCCEEDED(nsres)) {
const PRUnichar *comment;
nsAString_GetData(&comment_str, &comment);
remove_comment = handle_insert_comment(This->doc, comment);
}
nsAString_Finish(&comment_str);
if(remove_comment) {
nsIDOMNode *nsparent, *tmp;
nsAString magic_str;
static const PRUnichar remove_comment_magicW[] =
{'#','!','w','i','n','e', 'r','e','m','o','v','e','!','#',0};
nsAString_Init(&magic_str, remove_comment_magicW);
nsres = nsIDOMComment_SetData(nscomment, &magic_str);
nsAString_Finish(&magic_str);
if(NS_FAILED(nsres))
ERR("SetData failed: %08x\n", nsres);
nsIDOMComment_GetParentNode(nscomment, &nsparent);
if(nsparent) {
nsIDOMNode_RemoveChild(nsparent, (nsIDOMNode*)nscomment, &tmp);
nsIDOMNode_Release(nsparent);
nsIDOMNode_Release(tmp);
}
}
nsIDOMComment_Release(nscomment);
break;
}
case MUTATION_SCRIPT: {
nsIDOMHTMLScriptElement *nsscript;
nsres = nsISupports_QueryInterface(This->mutation_queue->nsiface, &IID_nsIDOMHTMLScriptElement,
(void**)&nsscript);
if(NS_FAILED(nsres)) {
ERR("Could not get nsIDOMHTMLScriptElement: %08x\n", nsres);
break;
}
doc_insert_script(This->doc, nsscript);
nsIDOMHTMLScriptElement_Release(nsscript);
break;
}
default:
ERR("invalid type %d\n", This->mutation_queue->type);
}
pop_mutation_queue(This);
}
return S_OK;
}
#undef NSRUNNABLE_THIS
static const nsIRunnableVtbl nsRunnableVtbl = {
nsRunnable_QueryInterface,
nsRunnable_AddRef,
nsRunnable_Release,
nsRunnable_Run
};
#define NSDOCOBS_THIS(iface) DEFINE_THIS(NSContainer, DocumentObserver, iface)
static nsresult NSAPI nsDocumentObserver_QueryInterface(nsIDocumentObserver *iface,
nsIIDRef riid, nsQIResult result)
{
NSContainer *This = NSDOCOBS_THIS(iface);
if(IsEqualGUID(&IID_nsISupports, riid)) {
TRACE("(%p)->(IID_nsISupports, %p)\n", This, result);
*result = NSWBCHROME(This);
}else if(IsEqualGUID(&IID_nsIMutationObserver, riid)) {
TRACE("(%p)->(IID_nsIMutationObserver %p)\n", This, result);
*result = NSDOCOBS(This);
}else if(IsEqualGUID(&IID_nsIDocumentObserver, riid)) {
TRACE("(%p)->(IID_nsIDocumentObserver %p)\n", This, result);
*result = NSDOCOBS(This);
}else {
*result = NULL;
TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), result);
return NS_NOINTERFACE;
}
nsIWebBrowserChrome_AddRef(NSWBCHROME(This));
return NS_OK;
}
static nsrefcnt NSAPI nsDocumentObserver_AddRef(nsIDocumentObserver *iface)
{
NSContainer *This = NSDOCOBS_THIS(iface);
return nsIWebBrowserChrome_AddRef(NSWBCHROME(This));
}
static nsrefcnt NSAPI nsDocumentObserver_Release(nsIDocumentObserver *iface)
{
NSContainer *This = NSDOCOBS_THIS(iface);
return nsIWebBrowserChrome_Release(NSWBCHROME(This));
}
static void NSAPI nsDocumentObserver_CharacterDataWillChange(nsIDocumentObserver *iface,
nsIDocument *aDocument, nsIContent *aContent, void /*CharacterDataChangeInfo*/ *aInfo)
{
}
static void NSAPI nsDocumentObserver_CharacterDataChanged(nsIDocumentObserver *iface,
nsIDocument *aDocument, nsIContent *aContent, void /*CharacterDataChangeInfo*/ *aInfo)
{
}
static void NSAPI nsDocumentObserver_AttributeChanged(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsIContent *aContent, PRInt32 aNameSpaceID, nsIAtom *aAttribute, PRInt32 aModType, PRUint32 aStateMask)
{
}
static void NSAPI nsDocumentObserver_ContentAppended(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsIContent *aContainer, PRInt32 aNewIndexInContainer)
{
}
static void NSAPI nsDocumentObserver_ContentInserted(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsIContent *aContainer, nsIContent *aChild, PRInt32 aIndexInContainer)
{
}
static void NSAPI nsDocumentObserver_ContentRemoved(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsIContent *aContainer, nsIContent *aChild, PRInt32 aIndexInContainer)
{
}
static void NSAPI nsDocumentObserver_NodeWillBeDestroyed(nsIDocumentObserver *iface, const nsINode *aNode)
{
}
static void NSAPI nsDocumentObserver_ParentChainChanged(nsIDocumentObserver *iface, nsIContent *aContent)
{
}
static void NSAPI nsDocumentObserver_BeginUpdate(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsUpdateType aUpdateType)
{
}
static void NSAPI nsDocumentObserver_EndUpdate(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsUpdateType aUpdateType)
{
}
static void NSAPI nsDocumentObserver_BeginLoad(nsIDocumentObserver *iface, nsIDocument *aDocument)
{
}
static void NSAPI nsDocumentObserver_EndLoad(nsIDocumentObserver *iface, nsIDocument *aDocument)
{
}
static void NSAPI nsDocumentObserver_ContentStatesChanged(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsIContent *aContent1, nsIContent *aContent2, PRInt32 aStateMask)
{
}
static void NSAPI nsDocumentObserver_StyleSheetAdded(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsIStyleSheet *aStyleSheet, PRBool aDocumentSheet)
{
}
static void NSAPI nsDocumentObserver_StyleSheetRemoved(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsIStyleSheet *aStyleSheet, PRBool aDocumentSheet)
{
}
static void NSAPI nsDocumentObserver_StyleSheetApplicableStateChanged(nsIDocumentObserver *iface,
nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, PRBool aApplicable)
{
}
static void NSAPI nsDocumentObserver_StyleRuleChanged(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsIStyleSheet *aStyleSheet, nsIStyleRule *aOldStyleRule, nsIStyleSheet *aNewStyleRule)
{
}
static void NSAPI nsDocumentObserver_StyleRuleAdded(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsIStyleSheet *aStyleSheet, nsIStyleRule *aStyleRule)
{
}
static void NSAPI nsDocumentObserver_StyleRuleRemoved(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsIStyleSheet *aStyleSheet, nsIStyleRule *aStyleRule)
{
}
static void push_mutation_queue(NSContainer *nscontainer, DWORD type, nsISupports *nsiface)
{
mutation_queue_t *elem;
elem = heap_alloc(sizeof(mutation_queue_t));
if(!elem)
return;
elem->next = NULL;
elem->type = type;
elem->nsiface = nsiface;
nsISupports_AddRef(nsiface);
if(nscontainer->mutation_queue_tail)
nscontainer->mutation_queue_tail = nscontainer->mutation_queue_tail->next = elem;
else
nscontainer->mutation_queue = nscontainer->mutation_queue_tail = elem;
}
static void NSAPI nsDocumentObserver_BindToDocument(nsIDocumentObserver *iface, nsIDocument *aDocument,
nsIContent *aContent)
{
NSContainer *This = NSDOCOBS_THIS(iface);
nsIDOMComment *nscomment;
nsIDOMElement *nselem;
nsresult nsres;
TRACE("(%p)\n", This);
nsres = nsISupports_QueryInterface(aContent, &IID_nsIDOMElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
check_event_attr(This->doc, nselem);
nsIDOMElement_Release(nselem);
}
nsres = nsISupports_QueryInterface(aContent, &IID_nsIDOMComment, (void**)&nscomment);
if(NS_SUCCEEDED(nsres)) {
TRACE("comment node\n");
push_mutation_queue(This, MUTATION_COMMENT, (nsISupports*)nscomment);
nsIDOMComment_Release(nscomment);
add_script_runner(This);
}
}
static void NSAPI nsDocumentObserver_DoneAddingChildren(nsIDocumentObserver *iface, nsIContent *aContent,
PRBool aHaveNotified)
{
NSContainer *This = NSDOCOBS_THIS(iface);
nsIDOMHTMLScriptElement *nsscript;
nsresult nsres;
TRACE("(%p)->(%p %x)\n", This, aContent, aHaveNotified);
nsres = nsISupports_QueryInterface(aContent, &IID_nsIDOMHTMLScriptElement, (void**)&nsscript);
if(NS_SUCCEEDED(nsres)) {
push_mutation_queue(This, MUTATION_SCRIPT, (nsISupports*)nsscript);
nsIDOMHTMLScriptElement_Release(nsscript);
add_script_runner(This);
}
}
#undef NSMUTATIONOBS_THIS
static const nsIDocumentObserverVtbl nsDocumentObserverVtbl = {
nsDocumentObserver_QueryInterface,
nsDocumentObserver_AddRef,
nsDocumentObserver_Release,
nsDocumentObserver_CharacterDataWillChange,
nsDocumentObserver_CharacterDataChanged,
nsDocumentObserver_AttributeChanged,
nsDocumentObserver_ContentAppended,
nsDocumentObserver_ContentInserted,
nsDocumentObserver_ContentRemoved,
nsDocumentObserver_NodeWillBeDestroyed,
nsDocumentObserver_ParentChainChanged,
nsDocumentObserver_BeginUpdate,
nsDocumentObserver_EndUpdate,
nsDocumentObserver_BeginLoad,
nsDocumentObserver_EndLoad,
nsDocumentObserver_ContentStatesChanged,
nsDocumentObserver_StyleSheetAdded,
nsDocumentObserver_StyleSheetRemoved,
nsDocumentObserver_StyleSheetApplicableStateChanged,
nsDocumentObserver_StyleRuleChanged,
nsDocumentObserver_StyleRuleAdded,
nsDocumentObserver_StyleRuleRemoved,
nsDocumentObserver_BindToDocument,
nsDocumentObserver_DoneAddingChildren
};
void init_mutation(NSContainer *nscontainer)
{
nscontainer->lpDocumentObserverVtbl = &nsDocumentObserverVtbl;
nscontainer->lpRunnableVtbl = &nsRunnableVtbl;
}

View File

@ -661,7 +661,7 @@ static void nsnode_to_nsstring_rec(nsIContentSerializer *serializer, nsIDOMNode
case ELEMENT_NODE: {
nsIDOMElement *nselem;
nsIDOMNode_QueryInterface(nsnode, &IID_nsIDOMElement, (void**)&nselem);
nsIContentSerializer_AppendElementStart(serializer, nselem, has_children, str);
nsIContentSerializer_AppendElementStart(serializer, nselem, nselem, str);
nsIDOMElement_Release(nselem);
break;
}
@ -733,7 +733,7 @@ void nsnode_to_nsstring(nsIDOMNode *nsdoc, nsAString *str)
return;
}
nsres = nsIContentSerializer_Init(serializer, 0, 100, NULL, FALSE);
nsres = nsIContentSerializer_Init(serializer, 0, 100, NULL, FALSE, FALSE /* FIXME */);
if(NS_FAILED(nsres))
ERR("Init failed: %08x\n", nsres);
@ -816,7 +816,8 @@ void set_ns_editmode(NSContainer *This)
return;
}
nsres = nsIEditingSession_MakeWindowEditable(editing_session, dom_window, NULL, FALSE);
nsres = nsIEditingSession_MakeWindowEditable(editing_session, dom_window,
NULL, FALSE, TRUE, TRUE);
nsIEditingSession_Release(editing_session);
nsIDOMWindow_Release(dom_window);
if(NS_FAILED(nsres)) {
@ -865,6 +866,9 @@ void update_nsdocument(HTMLDocument *doc)
nsIDOMHTMLDocument_Release(doc->nsdoc);
doc->nsdoc = nsdoc;
if(nsdoc)
set_mutation_observer(doc->nscontainer, nsdoc);
}
void close_gecko(void)
@ -1668,6 +1672,7 @@ NSContainer *NSContainer_Create(HTMLDocument *doc, NSContainer *parent)
ret->doc = doc;
ret->ref = 1;
init_mutation(ret);
nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr, NS_WEBBROWSER_CONTRACTID,
NULL, &IID_nsIWebBrowser, (void**)&ret->webbrowser);

View File

@ -178,7 +178,7 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event
#define IE_MAJOR_VERSION 7
#define IE_MINOR_VERSION 0
static BOOL handle_insert_comment(HTMLDocument *doc, const PRUnichar *comment)
BOOL handle_insert_comment(HTMLDocument *doc, const PRUnichar *comment)
{
DWORD len;
int majorv = 0, minorv = 0;
@ -484,8 +484,6 @@ void init_nsevents(NSContainer *This)
static const PRUnichar wsz_focus[] = {'f','o','c','u','s',0};
static const PRUnichar wsz_keypress[] = {'k','e','y','p','r','e','s','s',0};
static const PRUnichar wsz_load[] = {'l','o','a','d',0};
static const PRUnichar DOMNodeInsertedW[] =
{'D','O','M','N','o','d','e','I','n','s','e','r','t','e','d',0};
init_listener(&This->blur_listener, This, &blur_vtbl);
init_listener(&This->focus_listener, This, &focus_vtbl);
@ -511,7 +509,6 @@ void init_nsevents(NSContainer *This)
init_event(target, wsz_focus, NSEVENTLIST(&This->focus_listener), TRUE);
init_event(target, wsz_keypress, NSEVENTLIST(&This->keypress_listener), FALSE);
init_event(target, wsz_load, NSEVENTLIST(&This->load_listener), TRUE);
init_event(target, DOMNodeInsertedW,NSEVENTLIST(&This->node_insert_listener),TRUE);
nsIDOMEventTarget_Release(target);
}

View File

@ -23,7 +23,7 @@
* compatible with XPCOM, usable in C code.
*/
cpp_quote("#define GECKO_VERSION \"0.1.0\"")
cpp_quote("#define GECKO_VERSION \"0.9.0\"")
cpp_quote("#define GECKO_VERSION_STRING \"Wine Gecko \" GECKO_VERSION")
import "wtypes.idl";
@ -83,6 +83,7 @@ interface nsIEditActionListener;
interface nsIDocumentStateListener;
interface nsIDOMCSSStyleSheet;
interface nsIDOMDocumentView;
interface nsIDocumentObserver;
interface IMoniker;
@ -126,6 +127,15 @@ typedef nsISupports nsIContentFilter;
typedef nsISupports nsIDOMMediaList;
typedef nsISupports nsIDOMHTMLTableCaptionElement;
typedef nsISupports nsIDOMHTMLTableSectionElement;
typedef nsISupports nsIDOMClientRectList;
typedef nsISupports nsIDOMClientRect;
typedef nsISupports nsIDOMLocation;
typedef nsISupports nsIBoxObject;
typedef nsISupports nsIDocument;
typedef nsISupports nsIContent;
typedef nsISupports nsINode;
typedef nsISupports nsIStyleSheet;
typedef nsISupports nsIStyleRule;
[
object,
@ -228,6 +238,17 @@ interface nsIInterfaceRequestor : nsISupports
nsresult GetInterface(const nsIID *riid, void **result);
}
[
object,
uuid(4a2abaf0-6886-11d3-9382-00104ba0fd40),
local
/* NOT_FROZEN */
]
interface nsIRunnable : nsISupports
{
nsresult Run();
}
[
object,
uuid(d1899240-f9d2-11d2-bdd6-000064657374),
@ -635,6 +656,35 @@ interface nsIDOMElementCSSInlineStyle : nsISupports
nsresult GetStyle(nsIDOMCSSStyleDeclaration **aStyle);
}
[
object,
uuid(f0aef489-18c5-4de6-99d5-58b3758b098c),
local
/* NOT_FROZEN */
]
interface nsIDOMNSElement : nsISupports
{
nsresult GetElementsByClassName(const nsAString *classes, nsIDOMNodeList **_retval);
nsresult GetClientRects(nsIDOMClientRectList **_retval);
nsresult GetBoundingClientRect(nsIDOMClientRect **_retval);
nsresult GetScrollTop(PRInt32 *aScrollTop);
nsresult SetScrollTop(PRInt32 aScrollTop);
nsresult GetScrollLeft(PRInt32 *aScrollLeft);
nsresult SetScrollLeft(PRInt32 aScrollLeft);
nsresult GetScrollHeight(PRInt32 *aScrollHeight);
nsresult GetScrollWidth(PRInt32 *aScrollWidth);
nsresult GetClientTop(PRInt32 *aClientTop);
nsresult GetClientLeft(PRInt32 *aClientLeft);
nsresult GetClientHeight(PRInt32 *aClientHeight);
nsresult GetClientWidth(PRInt32 *aClientWidth);
nsresult GetFirstElementChild(nsIDOMElement **aFirstElementChild);
nsresult GetLastElementChild(nsIDOMElement **aLastElementChild);
nsresult GetPreviousElementSibling(nsIDOMElement **aPreviousElementSibling);
nsresult GetNextElementSibling(nsIDOMElement **aNextElementSibling);
nsresult GetChildElementCount(PRUint32 *aChildElementCount);
nsresult GetChildren(nsIDOMNodeList **aChildren);
}
cpp_quote("#undef GetClassName")
[
@ -659,7 +709,7 @@ interface nsIDOMHTMLElement : nsIDOMElement
[
object,
uuid(da83b2ec-8264-4410-8496-ada3acd2ae42),
uuid(7f142f9a-fba7-4949-93d6-cf08a974ac51),
local
/* NOT_FROZEN */
]
@ -672,19 +722,15 @@ interface nsIDOMNSHTMLElement : nsISupports
nsresult GetOffsetParent(nsIDOMElement **aOffsetParent);
nsresult GetInnerHTML(nsAString *aInnerHTML);
nsresult SetInnerHTML(const nsAString *aInnerHTML);
nsresult GetScrollTop(PRInt32 *aScrollTop);
nsresult SetScrollTop(PRInt32 aScrollTop);
nsresult GetScrollLeft(PRInt32 *aScrollLeft);
nsresult SetScrollLeft(PRInt32 aScrollLeft);
nsresult GetScrollHeight(PRInt32 *aScrollHeight);
nsresult GetScrollWidth(PRInt32 *aScrollWidth);
nsresult GetClientHeight(PRInt32 *aClientHeight);
nsresult GetClientWidth(PRInt32 *aClientWidth);
nsresult GetTabIndex(PRInt32 *aTabIndex);
nsresult SetTabIndex(PRInt32 aTabIndex);
nsresult GetContentEditable(nsAString *aContentEditable);
nsresult SetContentEditable(const nsAString *aContentEditable);
nsresult blur();
nsresult focus();
nsresult ScrollIntoView(PRBool top);
nsresult GetSpellcheck(PRBool *aSpellcheck);
nsresult SetSpellcheck(PRBool aSpellcheck);
}
[
@ -802,6 +848,34 @@ interface nsIDOMDocument : nsIDOMNode
nsresult GetElementById(const nsAString *elementId, nsIDOMElement **_retval);
}
[
object,
uuid(533a8131-8d0c-4ebf-990b-7fad7cd51466),
local
/* NOT_FROZEN */
]
interface nsIDOMNSDocument : nsISupports
{
nsresult GetCharacterSet(nsAString *aCharacterSet);
nsresult GetDir(nsAString *aDir);
nsresult SetDir(const nsAString *aDir);
nsresult GetLocation(nsIDOMLocation **aLocation);
nsresult GetTitle(nsAString *aTitle);
nsresult SetTitle(const nsAString *aTitle);
nsresult GetContentType(nsAString *aContentType);
nsresult GetLastModified(nsAString *aLastModified);
nsresult GetReferrer(nsAString *aReferrer);
nsresult GetBoxObjectFor(nsIDOMElement *elt, nsIBoxObject **_retval);
nsresult HasFocus(PRBool *_retval);
nsresult GetActiveElement(nsIDOMElement **aActiveElement);
nsresult GetElementsByClassName(const nsAString *classes, nsIDOMNodeList **_retval);
nsresult ElementFromPoint(PRInt32 x, PRInt32 y, nsIDOMElement **_retval);
/* Wine extensions */
nsresult WineAddObserver(nsIDocumentObserver *aObserver);
nsresult WineAddScriptRunner(nsIRunnable *aRunnable);
}
[
object,
uuid(a6cf9084-15b3-11d2-932e-00805f8add32),
@ -855,7 +929,7 @@ interface nsIDOMNSHTMLDocument : nsISupports
nsresult SetDomain(const nsAString *aDomain);
nsresult GetEmbeds(nsIDOMHTMLCollection **aEmbeds);
nsresult GetSelection(nsAString *_retval);
nsresult Open(nsIDOMDocument **_retval);
nsresult Open(nsACString *aContentType, PRBool aReplace, nsIDOMDocument **_retval);
nsresult Write();
nsresult Writeln();
nsresult Clear();
@ -941,17 +1015,15 @@ interface nsIDOMRange : nsISupports
[
object,
uuid(a6cf90f2-15b3-11d2-932e-00805f8add32),
uuid(59188642-23b4-41d6-bde1-302c3906d1f0),
local
/* NOT_FROZEN */
]
interface nsIDOMNSRange : nsISupports
{
nsresult CreateContextualFragment([in] const nsAString *fragment, [out] nsIDOMDocumentFragment **_retval);
nsresult IsPointInRange([in] nsIDOMNode *parent, [in] PRInt32 offset, [out] PRBool *_retval);
nsresult ComparePoint([in] nsIDOMNode *parent, [in] PRInt32 offset, [out] PRInt16 *_retval);
nsresult IntersectsNode([in] nsIDOMNode *n, [out] PRBool *_retval);
nsresult CompareNode([in] nsIDOMNode *n, [out] PRUint16 *_retval);
nsresult nSDetach();
}
@ -1468,7 +1540,7 @@ interface nsIWebNavigation : nsISupports
[
object,
uuid(f1094df6-ce0e-42c9-9847-2f663172c38d),
uuid(5af07661-6477-4235-8814-4a45215855b8),
local
/* NOT_FROZEN */
]
@ -1479,7 +1551,7 @@ interface nsIPrintSettings : nsISupports
nsresult SetPrintOptions(PRInt32 aType, PRBool aTurnOnOff);
nsresult GetPrintOptions(PRInt32 aType, PRBool *_retval);
nsresult GetPrintOptionsBits(PRInt32 *_retval);
nsresult GetPageSizeInTwips(PRInt32 *aWidth, PRInt32 *aHeight);
nsresult GetEffectivePageSize(double *aWidth, double *aHeight);
nsresult Clone(nsIPrintSettings **_retval);
nsresult Assign(nsIPrintSettings *aPS);
nsresult GetPrintSession(nsIPrintSession **aPrintSession);
@ -1488,6 +1560,14 @@ interface nsIPrintSettings : nsISupports
nsresult SetStartPageRange(PRInt32 aStartPageRange);
nsresult GetEndPageRange(PRInt32 *aEndPageRange);
nsresult SetEndPageRange(PRInt32 aEndPageRange);
nsresult GetEdgeTop(double *aEdgeTop);
nsresult SetEdgeTop(double aEdgeTop);
nsresult GetEdgeLeft(double *aEdgeLeft);
nsresult SetEdgeLeft(double aEdgeLeft);
nsresult GetEdgeBottom(double *aEdgeBottom);
nsresult SetEdgeBottom(double aEdgeBottom);
nsresult GetEdgeRight(double *aEdgeRight);
nsresult SetEdgeRight(double aEdgeRight);
nsresult GetMarginTop(double *aMarginTop);
nsresult SetMarginTop(double aMarginTop);
nsresult GetMarginLeft(double *aMarginLeft);
@ -1496,6 +1576,14 @@ interface nsIPrintSettings : nsISupports
nsresult SetMarginBottom(double aMarginBottom);
nsresult GetMarginRight(double *aMarginRight);
nsresult SetMarginRight(double aMarginRight);
nsresult GetUnwriteableMarginTop(double *aUnwriteableMarginTop);
nsresult SetUnwriteableMarginTop(double aUnwriteableMarginTop);
nsresult GetUnwriteableMarginLeft(double *aUnwriteableMarginLeft);
nsresult SetUnwriteableMarginLeft(double aUnwriteableMarginLeft);
nsresult GetUnwriteableMarginBottom(double *aUnwriteableMarginBottom);
nsresult SetUnwriteableMarginBottom(double aUnwriteableMarginBottom);
nsresult GetUnwriteableMarginRight(double *aUnwriteableMarginRight);
nsresult SetUnwriteableMarginRight(double aUnwriteableMarginRight);
nsresult GetScaling(double *aScaling);
nsresult SetScaling(double aScaling);
nsresult GetPrintBGColors(PRBool *aPrintBGColors);
@ -1558,8 +1646,6 @@ interface nsIPrintSettings : nsISupports
nsresult SetPrintReversed(PRBool aPrintReversed);
nsresult GetPrintInColor(PRBool *aPrintInColor);
nsresult SetPrintInColor(PRBool aPrintInColor);
nsresult GetPaperSize(PRInt32 *aPaperSize);
nsresult SetPaperSize(PRInt32 aPaperSize);
nsresult GetOrientation(PRInt32 *aOrientation);
nsresult SetOrientation(PRInt32 aOrientation);
nsresult GetPrintCommand(PRUnichar **aPrintCommand);
@ -1572,6 +1658,8 @@ interface nsIPrintSettings : nsISupports
nsresult SetPrintToFile(PRBool aPrintToFile);
nsresult GetToFileName(PRUnichar **aToFileName);
nsresult SetToFileName(const PRUnichar *aToFileName);
nsresult GetOutputFormat(PRInt16 *aOutputFormat);
nsresult SetOutputFormat(PRInt16 aOutputFormat);
nsresult GetPrintPageDelay(PRInt32 *aPrintPageDelay);
nsresult SetPrintPageDelay(PRInt32 aPrintPageDelay);
nsresult GetIsInitializedFromPrinter(PRBool *aIsInitializedFromPrinter);
@ -1579,7 +1667,12 @@ interface nsIPrintSettings : nsISupports
nsresult GetIsInitializedFromPrefs(PRBool *aIsInitializedFromPrefs);
nsresult SetIsInitializedFromPrefs(PRBool aIsInitializedFromPrefs);
nsresult SetMarginInTwips(nsMargin *aMargin);
nsresult SetEdgeInTwips(nsMargin *aEdge);
nsresult GetMarginInTwips(nsMargin *aMargin);
nsresult GetEdgeInTwips(nsMargin *aEdge);
nsresult SetupSilentPrinting();
nsresult SetUnwriteableMarginInTwips(nsMargin *aEdge);
nsresult GetUnwriteableMarginInTwips(nsMargin *aEdge);
}
[
@ -1773,14 +1866,22 @@ interface nsIIOService : nsISupports
[
object,
uuid(f0c5dddb-4713-4603-af2d-bf671838996b),
uuid(57322c6f-f4ec-4e46-8253-b74be220de16),
local,
/* NOT_FROZEN */
]
interface nsINetUtil : nsISupports
{
nsresult ParseContentType(const nsACString *aTypeHeader, nsACString *aCharset,
PRBool *aHadCharset, nsACString *aContentType);
PRBool *aHadCharset, nsACString *_retval);
nsresult ProtocolHasFlags(nsIURI *aURI, PRUint32 aFlag, PRBool *_retval);
nsresult URIChainHasFlags(nsIURI *aURI, PRUint32 aFlags, PRBool *_retval);
nsresult ToImmutableURI(nsIURI *aURI, nsIURI **_retval);
nsresult EscapeString(const nsACString *aString, PRUint32 aEscapeType, nsACString *_retval);
nsresult EscapeURL(const nsACString *aStr, PRUint32 aFlags, nsACString *_retval);
nsresult UnescapeString(const nsACString *aStr, PRUint32 aFlags, nsACString *_retval);
nsresult ExtractCharsetFromContentType(const nsACString *aTypeHeader, nsACString *aCharset,
PRInt32 *aCharsetStart, PRInt32 *aCharsetEnd, PRBool *_retval);
}
[
@ -2104,7 +2205,7 @@ interface nsIWindowWatcher : nsISupports
[
object,
uuid(d39fd2b4-3978-45d2-a4be-ba448171b61b),
uuid(274cd32e-3675-47e1-9d8a-fc6504ded9ce),
local
/* NOT_FROZEN */
]
@ -2112,12 +2213,16 @@ interface nsIEditingSession : nsISupports
{
nsresult GetEditorStatus(PRUint32 *aEditorStatus);
nsresult MakeWindowEditable(nsIDOMWindow *window, const char *aEditorType,
PRBool doAfterUriLoad);
PRBool doAfterUriLoad, PRBool aMakeWholeDocumentEditable, PRBool aInteractive);
nsresult WindowIsEditable(nsIDOMWindow *window, PRBool *_retval);
nsresult GetEditorForWindow(nsIDOMWindow *window, nsIEditor **_retval);
nsresult SetupEditorOnWindow(nsIDOMWindow *window);
nsresult TearDownEditorOnWindow(nsIDOMWindow *window);
nsresult SetEditorOnControllers(nsIDOMWindow *aWindow, nsIEditor *aEditor);
nsresult DisableJSAndPlugins(nsIDOMWindow *aWindow);
nsresult RestoreJSAndPlugins(nsIDOMWindow *aWindow);
nsresult DetachFromWindow(nsIDOMWindow *aWindow);
nsresult ReattachToWindow(nsIDOMWindow *aWindow);
}
[
@ -2193,13 +2298,14 @@ interface nsIController : nsISupports
[
object,
uuid(d650439a-ca29-410d-a906-b0557fb62fcd),
uuid(34769de0-30d0-4cef-894a-fcd8bb27c4b4),
local
/* NOT_FROZEN */
]
interface nsIContentSerializer : nsISupports
{
nsresult Init(PRUint32 flags, PRUint32 aWrapColumn, const char* aCharSet, PRBool aIsCopying);
nsresult Init(PRUint32 flags, PRUint32 aWrapColumn, const char* aCharSet, PRBool aIsCopying,
PRBool aIsWholeDocument);
nsresult AppendText(nsIDOMText *aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString *aStr);
nsresult AppendCDATASection(nsIDOMCDATASection *aCDATASection, PRInt32 aStartOffset,
PRInt32 aEndOffset, nsAString *aStr);
@ -2208,7 +2314,8 @@ interface nsIContentSerializer : nsISupports
nsresult AppendComment(nsIDOMComment *aComment, PRInt32 aStartOffset, PRInt32 aEndOffset,
nsAString *aStr);
nsresult AppendDoctype(nsIDOMDocumentType *aDoctype, nsAString *aStr);
nsresult AppendElementStart(nsIDOMElement *aElement, PRBool aHasChildren, nsAString *aStr);
nsresult AppendElementStart(nsIDOMElement *aElement, nsIDOMElement *aOriginalElement,
nsAString *aStr);
nsresult AppendElementEnd(nsIDOMElement *aElement, nsAString *aStr);
nsresult Flush(nsAString *aStr);
nsresult AppendDocumentStart(nsIDOMDocument *aDocument, nsAString *aStr);
@ -2216,7 +2323,7 @@ interface nsIContentSerializer : nsISupports
[
object,
uuid(D4882FFB-E927-408b-96BE-D4391B456FA9),
uuid(96b60ba0-634a-41e4-928e-78ab0b3c4b46),
local
/* NOT_FROZEN */
]
@ -2246,8 +2353,9 @@ interface nsIEditor : nsISupports
nsresult SetDocumentCharacterSet([in] const nsACString *val);
nsresult ResetModificationCount();
nsresult GetModificationCount([out] PRInt32 *_retval);
nsresult IncrementModificationCount([in] long aModCount);
nsresult IncrementModificationCount([in] PRInt32 aModCount);
nsresult GetTransactionManager([out] nsITransactionManager **_retval);
nsresult SetTransactionManager(nsITransactionManager *aTransactionManager);
nsresult DoTransaction([in] nsITransaction *txn);
nsresult EnableUndo([in] PRBool enable);
nsresult Undo([in] PRUint32 count);
@ -2261,6 +2369,8 @@ interface nsIEditor : nsISupports
nsresult ShouldTxnSetSelection([out] PRBool *_retval);
nsresult SetShouldTxnSetSelection([in] PRBool should);
nsresult GetInlineSpellChecker([out] nsIInlineSpellChecker **_retval);
nsresult SyncRealTimeSpell();
nsresult SetSpellcheckUserOverride(PRBool enable);
nsresult Cut();
nsresult CanCut([out] PRBool *_retval);
nsresult Copy();
@ -2296,6 +2406,7 @@ interface nsIEditor : nsISupports
nsresult DumpContentTree();
nsresult DebugDumpContent();
nsresult DebugUnitTests([out] PRInt32 *outNumTests, [out] PRInt32 *outNumTestsFailed);
PRBool IsModifiableNode(nsIDOMNode *aNode);
}
[
@ -2366,6 +2477,57 @@ interface nsIHTMLEditor : nsISupports
nsresult SetReturnInParagraphCreatesNewParagraph([in] PRBool prb);
}
[
object,
uuid(32e68316-67d4-44a5-8d35-0d390fa9df11),
local
/* NOT_FROZEN */
]
interface nsIMutationObserver : nsISupports
{
void CharacterDataWillChange(nsIDocument *aDocument, nsIContent *aContent,
void /*CharacterDataChangeInfo*/ *aInfo);
void CharacterDataChanged(nsIDocument *aDocument, nsIContent *aContent,
void /*CharacterDataChangeInfo*/ *aInfo);
void AttributeChanged(nsIDocument *aDocument, nsIContent *aContent, PRInt32 aNameSpaceID,
nsIAtom *aAttribute, PRInt32 aModType, PRUint32 aStateMask);
void ContentAppended(nsIDocument *aDocument, nsIContent *aContainer, PRInt32 aNewIndexInContainer);
void ContentInserted(nsIDocument *aDocument, nsIContent *aContainer, nsIContent *aChild,
PRInt32 aIndexInContainer);
void ContentRemoved(nsIDocument *aDocument, nsIContent *aContainer, nsIContent *aChild,
PRInt32 aIndexInContainer);
void NodeWillBeDestroyed(const nsINode *aNode);
void ParentChainChanged(nsIContent *aContent);
}
[
object,
uuid(4e14e321-a4bb-49f8-a57a-2363668d14d0),
local
/* NOT_FROZEN */
]
interface nsIDocumentObserver : nsIMutationObserver
{
typedef int nsUpdateType;
void BeginUpdate(nsIDocument *aDocument, nsUpdateType aUpdateType);
void EndUpdate(nsIDocument *aDocument, nsUpdateType aUpdateType);
void BeginLoad(nsIDocument *aDocument);
void EndLoad(nsIDocument *aDocument);
void ContentStatesChanged(nsIDocument *aDocument, nsIContent *aContent1, nsIContent *aContent2,
PRInt32 aStateMask);
void StyleSheetAdded(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, PRBool aDocumentSheet);
void StyleSheetRemoved(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, PRBool aDocumentSheet);
void StyleSheetApplicableStateChanged(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet,
PRBool aApplicable);
void StyleRuleChanged(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, nsIStyleRule *aOldStyleRule,
nsIStyleRule *aNewStyleRule);
void StyleRuleAdded(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, nsIStyleRule *aStyleRule);
void StyleRuleRemoved(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, nsIStyleRule *aStyleRule);
void BindToDocument(nsIDocument *aDocument, nsIContent *aContent);
void DoneAddingContent(nsIContent *aContent, PRBool aHaveNotified);
}
/*
* NOTE:
* This is a private Wine interface that is implemented by our implementation

View File

@ -2276,11 +2276,76 @@ static nsresult NSAPI nsNetUtil_ParseContentType(nsINetUtil *iface, const nsACSt
return nsINetUtil_ParseContentType(net_util, aTypeHeader, aCharset, aHadCharset, aContentType);
}
static nsresult NSAPI nsNetUtil_ProtocolHasFlags(nsINetUtil *iface, nsIURI *aURI, PRUint32 aFlags, PRBool *_retval)
{
TRACE("()\n");
return nsINetUtil_ProtocolHasFlags(net_util, aURI, aFlags, _retval);
}
static nsresult NSAPI nsNetUtil_URIChainHasFlags(nsINetUtil *iface, nsIURI *aURI, PRUint32 aFlags, PRBool *_retval)
{
TRACE("(%p %08x %p)\n", aURI, aFlags, _retval);
if(aFlags == (1<<11)) {
*_retval = FALSE;
return NS_OK;
}
return nsINetUtil_URIChainHasFlags(net_util, aURI, aFlags, _retval);
}
static nsresult NSAPI nsNetUtil_ToImmutableURI(nsINetUtil *iface, nsIURI *aURI, nsIURI **_retval)
{
TRACE("(%p %p)\n", aURI, _retval);
return nsINetUtil_ToImmutableURI(net_util, aURI, _retval);
}
static nsresult NSAPI nsNetUtil_EscapeString(nsINetUtil *iface, const nsACString *aString,
PRUint32 aEscapeType, nsACString *_retval)
{
TRACE("(%p %x %p)\n", aString, aEscapeType, _retval);
return nsINetUtil_EscapeString(net_util, aString, aEscapeType, _retval);
}
static nsresult NSAPI nsNetUtil_EscapeURL(nsINetUtil *iface, const nsACString *aStr, PRUint32 aFlags,
nsACString *_retval)
{
TRACE("(%p %08x %p)\n", aStr, aFlags, _retval);
return nsINetUtil_EscapeURL(net_util, aStr, aFlags, _retval);
}
static nsresult NSAPI nsNetUtil_UnescapeString(nsINetUtil *iface, const nsACString *aStr,
PRUint32 aFlags, nsACString *_retval)
{
TRACE("(%p %08x %p)\n", aStr, aFlags, _retval);
return nsINetUtil_UnescapeString(net_util, aStr, aFlags, _retval);
}
static nsresult NSAPI nsNetUtil_ExtractCharsetFromContentType(nsINetUtil *iface, const nsACString *aTypeHeader,
nsACString *aCharset, PRInt32 *aCharsetStart, PRInt32 *aCharsetEnd, PRBool *_retval)
{
TRACE("(%p %p %p %p %p)\n", aTypeHeader, aCharset, aCharsetStart, aCharsetEnd, _retval);
return nsINetUtil_ExtractCharsetFromContentType(net_util, aTypeHeader, aCharset, aCharsetStart, aCharsetEnd, _retval);
}
static const nsINetUtilVtbl nsNetUtilVtbl = {
nsNetUtil_QueryInterface,
nsNetUtil_AddRef,
nsNetUtil_Release,
nsNetUtil_ParseContentType
nsNetUtil_ParseContentType,
nsNetUtil_ProtocolHasFlags,
nsNetUtil_URIChainHasFlags,
nsNetUtil_ToImmutableURI,
nsNetUtil_EscapeString,
nsNetUtil_EscapeURL,
nsNetUtil_UnescapeString,
nsNetUtil_ExtractCharsetFromContentType
};
static nsINetUtil nsNetUtil = { &nsNetUtilVtbl };