[MSHTML] Sync with Wine Staging 1.7.55. [APPWIZ][BOOTDATA] Update gecko package to 2.40. CORE-10536

svn path=/trunk/; revision=70191
This commit is contained in:
Amine Khaldi 2015-11-28 21:10:43 +00:00
parent 50d5b7acea
commit 3d0a8a174a
62 changed files with 3265 additions and 793 deletions

View file

@ -104,6 +104,6 @@ Signature = "$ReactOS$"
"modules/optional/vmx_mode.dll" 1 optional
"modules/optional/vmx_svga.inf" 6 optional
"modules/optional/vmx_svga.sys" 2 optional
"modules/optional/wine_gecko-2.34-x86.msi" 4 optional
"modules/optional/wine_gecko-2.40-x86.msi" 4 optional
"boot/bootdata/bootcdregtest/AHKAppTests.cmd" 7 optional
; DON'T REMOVE THE FOLLOWING NEW LINE ! THIS MEANS YOU !

View file

@ -26,11 +26,11 @@
#include <msi.h>
#define GECKO_VERSION "2.34"
#define GECKO_VERSION "2.40"
#ifdef __i386__
#define ARCH_STRING "x86"
#define GECKO_SHA "330100fecc9c12e98760fd5abfbf3e3d0cccf052"
#define GECKO_SHA "8a3adedf3707973d1ed4ac3b2e791486abf814bd"
#else
#define ARCH_STRING ""
#define GECKO_SHA "???"
@ -60,7 +60,7 @@ static const addon_info_t *addon;
static HWND install_dialog = NULL;
static WCHAR GeckoUrl[] = L"http://svn.reactos.org/amine/wine_gecko-2.34-x86.msi";
static WCHAR GeckoUrl[] = L"https://svn.reactos.org/amine/wine_gecko-2.40-x86.msi";
/* SHA definitions are copied from advapi32. They aren't available in headers. */

View file

@ -16,6 +16,7 @@ list(APPEND SOURCE
editor.c
hlink.c
htmlanchor.c
htmlarea.c
htmlattr.c
htmlbody.c
htmlcomment.c
@ -81,6 +82,7 @@ list(APPEND SOURCE
task.c
txtrange.c
view.c
xmlhttprequest.c
mshtml_private.h)
if(MSVC)

View file

@ -53,6 +53,7 @@ typedef struct {
char *content_type;
char *charset;
UINT32 response_status;
char *response_status_text;
REQUEST_METHOD request_method;
struct list response_headers;
struct list request_headers;

View file

@ -43,7 +43,6 @@
#define NSCMD_OL "cmd_ol"
#define NSCMD_OUTDENT "cmd_outdent"
#define NSCMD_PASTE "cmd_paste"
#define NSCMD_SELECTALL "cmd_selectAll"
#define NSCMD_SELECTBEGINLINE "cmd_selectBeginLine"
#define NSCMD_SELECTBOTTOM "cmd_selectBottom"
#define NSCMD_SELECTCHARNEXT "cmd_selectCharNext"
@ -634,20 +633,6 @@ static HRESULT exec_font(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARI
return E_NOTIMPL;
}
static HRESULT exec_selectall(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARIANT *out)
{
TRACE("(%p)\n", This);
if(in || out)
FIXME("unsupported args\n");
if(This->doc_obj->nscontainer)
do_ns_command(This, NSCMD_SELECTALL, NULL);
update_doc(This, UPDATE_UI);
return S_OK;
}
static HRESULT exec_bold(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARIANT *out)
{
TRACE("(%p)\n", This);
@ -1191,19 +1176,10 @@ static HRESULT exec_hyperlink(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in,
return hres;
}
static HRESULT query_selall_status(HTMLDocument *This, OLECMD *cmd)
{
TRACE("(%p)->(%p)\n", This, cmd);
cmd->cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED;
return S_OK;
}
const cmdtable_t editmode_cmds[] = {
{IDM_DELETE, query_edit_status, exec_delete},
{IDM_FONTNAME, query_edit_status, exec_fontname},
{IDM_FONTSIZE, query_edit_status, exec_fontsize},
{IDM_SELECTALL, query_selall_status , exec_selectall},
{IDM_FORECOLOR, query_edit_status, exec_forecolor},
{IDM_BOLD, query_edit_status, exec_bold},
{IDM_ITALIC, query_edit_status, exec_italic},

View file

@ -31,4 +31,7 @@ DEFINE_GUID(IID_IDispatchJS,0x719c3050,0xf9d3,0x11cf,0xa4,0x93,0x00,0x40,0x05,0x
/* htmlnode.c */
DEFINE_GUID(IID_nsXPCOMCycleCollectionParticipant, 0x9674489b,0x1f6f,0x4550,0xa7,0x30, 0xcc,0xae,0xdd,0x10,0x4c,0xf9);
DEFINE_GUID(IID_HTMLPluginContainer, 0xbd7a6050,0xb373,0x4f6f,0xa4,0x93,0xdd,0x40,0xc5,0x23,0xa8,0x6a);
DEFINE_GUID(SID_SHTMLEditServices, 0x3050f7f9,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
/* NO CODE HERE, THIS IS JUST REQUIRED FOR THE GUID DEFINITIONS */

View file

@ -26,29 +26,18 @@ typedef struct {
nsIDOMHTMLAnchorElement *nsanchor;
} HTMLAnchorElement;
static HRESULT navigate_anchor_window(HTMLAnchorElement *This, const WCHAR *target)
static HRESULT navigate_href_new_window(HTMLElement *element, nsAString *href_str, const WCHAR *target)
{
nsAString href_str;
const PRUnichar *href;
IUri *uri;
nsresult nsres;
HRESULT hres;
nsAString_Init(&href_str, NULL);
nsres = nsIDOMHTMLAnchorElement_GetHref(This->nsanchor, &href_str);
if(NS_SUCCEEDED(nsres)) {
const PRUnichar *href;
nsAString_GetData(&href_str, &href);
hres = create_relative_uri(This->element.node.doc->basedoc.window, href, &uri);
}else {
ERR("Could not get anchor href: %08x\n", nsres);
hres = E_FAIL;
}
nsAString_Finish(&href_str);
nsAString_GetData(href_str, &href);
hres = create_relative_uri(element->node.doc->basedoc.window, href, &uri);
if(FAILED(hres))
return hres;
hres = navigate_new_window(This->element.node.doc->basedoc.window, uri, target, NULL, NULL);
hres = navigate_new_window(element->node.doc->basedoc.window, uri, target, NULL, NULL);
IUri_Release(uri);
return hres;
}
@ -102,52 +91,72 @@ HTMLOuterWindow *get_target_window(HTMLOuterWindow *window, nsAString *target_st
return ret_window;
}
static HRESULT navigate_anchor(HTMLAnchorElement *This)
static HRESULT navigate_href(HTMLElement *element, nsAString *href_str, nsAString *target_str)
{
nsAString href_str, target_str;
HTMLOuterWindow *window;
BOOL use_new_window;
nsresult nsres;
HRESULT hres = E_FAIL;
const PRUnichar *href;
HRESULT hres;
nsAString_Init(&target_str, NULL);
nsres = nsIDOMHTMLAnchorElement_GetTarget(This->nsanchor, &target_str);
if(NS_FAILED(nsres))
return E_FAIL;
window = get_target_window(This->element.node.doc->basedoc.window, &target_str, &use_new_window);
if(!window && use_new_window) {
const PRUnichar *target;
nsAString_GetData(&target_str, &target);
hres = navigate_anchor_window(This, target);
nsAString_Finish(&target_str);
return hres;
}
nsAString_Finish(&target_str);
if(!window)
return S_OK;
nsAString_Init(&href_str, NULL);
nsres = nsIDOMHTMLAnchorElement_GetHref(This->nsanchor, &href_str);
if(NS_SUCCEEDED(nsres)) {
const PRUnichar *href;
nsAString_GetData(&href_str, &href);
if(*href) {
hres = navigate_url(window, href, window->uri_nofrag, BINDING_NAVIGATED);
window = get_target_window(element->node.doc->basedoc.window, target_str, &use_new_window);
if(!window) {
if(use_new_window) {
const PRUnichar *target;
nsAString_GetData(target_str, &target);
return navigate_href_new_window(element, href_str, target);
}else {
TRACE("empty href\n");
hres = S_OK;
return S_OK;
}
}
nsAString_Finish(&href_str);
nsAString_GetData(href_str, &href);
if(*href) {
hres = navigate_url(window, href, window->uri_nofrag, BINDING_NAVIGATED);
}else {
TRACE("empty href\n");
hres = S_OK;
}
IHTMLWindow2_Release(&window->base.IHTMLWindow2_iface);
return hres;
}
HRESULT handle_link_click_event(HTMLElement *element, nsAString *href_str, nsAString *target_str,
nsIDOMEvent *event, BOOL *prevent_default)
{
nsIDOMMouseEvent *mouse_event;
INT16 button;
nsresult nsres;
HRESULT hres;
TRACE("CLICK\n");
nsres = nsIDOMEvent_QueryInterface(event, &IID_nsIDOMMouseEvent, (void**)&mouse_event);
assert(nsres == NS_OK);
nsres = nsIDOMMouseEvent_GetButton(mouse_event, &button);
assert(nsres == NS_OK);
nsIDOMMouseEvent_Release(mouse_event);
switch(button) {
case 0:
*prevent_default = TRUE;
hres = navigate_href(element, href_str, target_str);
break;
case 1:
*prevent_default = TRUE;
hres = navigate_href_new_window(element, href_str, NULL);
break;
default:
*prevent_default = FALSE;
hres = S_OK;
}
nsAString_Finish(href_str);
nsAString_Finish(target_str);
return hres;
}
static inline HTMLAnchorElement *impl_from_IHTMLAnchorElement(IHTMLAnchorElement *iface)
{
return CONTAINING_RECORD(iface, HTMLAnchorElement, IHTMLAnchorElement_iface);
@ -178,14 +187,14 @@ static ULONG WINAPI HTMLAnchorElement_Release(IHTMLAnchorElement *iface)
static HRESULT WINAPI HTMLAnchorElement_GetTypeInfoCount(IHTMLAnchorElement *iface, UINT *pctinfo)
{
HTMLAnchorElement *This = impl_from_IHTMLAnchorElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLAnchorElement_GetTypeInfo(IHTMLAnchorElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLAnchorElement *This = impl_from_IHTMLAnchorElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -194,7 +203,7 @@ static HRESULT WINAPI HTMLAnchorElement_GetIDsOfNames(IHTMLAnchorElement *iface,
LCID lcid, DISPID *rgDispId)
{
HTMLAnchorElement *This = impl_from_IHTMLAnchorElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -203,7 +212,7 @@ static HRESULT WINAPI HTMLAnchorElement_Invoke(IHTMLAnchorElement *iface, DISPID
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLAnchorElement *This = impl_from_IHTMLAnchorElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -704,33 +713,29 @@ static HRESULT HTMLAnchorElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
static HRESULT HTMLAnchorElement_handle_event(HTMLDOMNode *iface, eventid_t eid, nsIDOMEvent *event, BOOL *prevent_default)
{
HTMLAnchorElement *This = impl_from_HTMLDOMNode(iface);
nsAString href_str, target_str;
nsresult nsres;
if(eid == EVENTID_CLICK) {
nsIDOMMouseEvent *mouse_event;
INT16 button;
nsresult nsres;
TRACE("CLICK\n");
nsres = nsIDOMEvent_QueryInterface(event, &IID_nsIDOMMouseEvent, (void**)&mouse_event);
assert(nsres == NS_OK);
nsres = nsIDOMMouseEvent_GetButton(mouse_event, &button);
assert(nsres == NS_OK);
nsIDOMMouseEvent_Release(mouse_event);
switch(button) {
case 0:
*prevent_default = TRUE;
return navigate_anchor(This);
case 1:
*prevent_default = TRUE;
return navigate_anchor_window(This, NULL);
default:
*prevent_default = FALSE;
return S_OK;
nsAString_Init(&href_str, NULL);
nsres = nsIDOMHTMLAnchorElement_GetHref(This->nsanchor, &href_str);
if (NS_FAILED(nsres)) {
ERR("Could not get anchor href: %08x\n", nsres);
goto fallback;
}
nsAString_Init(&target_str, NULL);
nsres = nsIDOMHTMLAnchorElement_GetTarget(This->nsanchor, &target_str);
if (NS_FAILED(nsres)) {
ERR("Could not get anchor target: %08x\n", nsres);
goto fallback;
}
return handle_link_click_event(&This->element, &href_str, &target_str, event, prevent_default);
fallback:
nsAString_Finish(&href_str);
nsAString_Finish(&target_str);
}
return HTMLElement_handle_event(&This->element.node, eid, event, prevent_default);

View file

@ -0,0 +1,462 @@
/*
* Copyright 2015 Alex Henrie
*
* 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 "mshtml_private.h"
typedef struct {
HTMLElement element;
IHTMLAreaElement IHTMLAreaElement_iface;
nsIDOMHTMLAreaElement *nsarea;
} HTMLAreaElement;
static inline HTMLAreaElement *impl_from_IHTMLAreaElement(IHTMLAreaElement *iface)
{
return CONTAINING_RECORD(iface, HTMLAreaElement, IHTMLAreaElement_iface);
}
static HRESULT WINAPI HTMLAreaElement_QueryInterface(IHTMLAreaElement *iface, REFIID riid, void **ppv)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
return IHTMLDOMNode_QueryInterface(&This->element.node.IHTMLDOMNode_iface, riid, ppv);
}
static ULONG WINAPI HTMLAreaElement_AddRef(IHTMLAreaElement *iface)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
return IHTMLDOMNode_AddRef(&This->element.node.IHTMLDOMNode_iface);
}
static ULONG WINAPI HTMLAreaElement_Release(IHTMLAreaElement *iface)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
return IHTMLDOMNode_Release(&This->element.node.IHTMLDOMNode_iface);
}
static HRESULT WINAPI HTMLAreaElement_GetTypeInfoCount(IHTMLAreaElement *iface, UINT *pctinfo)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLAreaElement_GetTypeInfo(IHTMLAreaElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
static HRESULT WINAPI HTMLAreaElement_GetIDsOfNames(IHTMLAreaElement *iface, REFIID riid,
LPOLESTR *rgszNames, UINT cNames,
LCID lcid, DISPID *rgDispId)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
static HRESULT WINAPI HTMLAreaElement_Invoke(IHTMLAreaElement *iface, DISPID dispIdMember,
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
static HRESULT WINAPI HTMLAreaElement_put_shape(IHTMLAreaElement *iface, BSTR v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_shape(IHTMLAreaElement *iface, BSTR *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_coords(IHTMLAreaElement *iface, BSTR v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_coords(IHTMLAreaElement *iface, BSTR *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_href(IHTMLAreaElement *iface, BSTR v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_href(IHTMLAreaElement *iface, BSTR *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_target(IHTMLAreaElement *iface, BSTR v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_target(IHTMLAreaElement *iface, BSTR *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_alt(IHTMLAreaElement *iface, BSTR v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_alt(IHTMLAreaElement *iface, BSTR *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_noHref(IHTMLAreaElement *iface, VARIANT_BOOL v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%i)\n", This, v);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_noHref(IHTMLAreaElement *iface, VARIANT_BOOL *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_host(IHTMLAreaElement *iface, BSTR v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_host(IHTMLAreaElement *iface, BSTR *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_hostname(IHTMLAreaElement *iface, BSTR v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_hostname(IHTMLAreaElement *iface, BSTR *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_pathname(IHTMLAreaElement *iface, BSTR v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_pathname(IHTMLAreaElement *iface, BSTR *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_port(IHTMLAreaElement *iface, BSTR v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_port(IHTMLAreaElement *iface, BSTR *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_protocol(IHTMLAreaElement *iface, BSTR v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_protocol(IHTMLAreaElement *iface, BSTR *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_search(IHTMLAreaElement *iface, BSTR v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_search(IHTMLAreaElement *iface, BSTR *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_hash(IHTMLAreaElement *iface, BSTR v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_hash(IHTMLAreaElement *iface, BSTR *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_onblur(IHTMLAreaElement *iface, VARIANT v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, &v);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_onblur(IHTMLAreaElement *iface, VARIANT *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_onfocus(IHTMLAreaElement *iface, VARIANT v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, &v);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_onfocus(IHTMLAreaElement *iface, VARIANT *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_put_tabIndex(IHTMLAreaElement *iface, short v)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%i)\n", This, v);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_get_tabIndex(IHTMLAreaElement *iface, short *p)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_focus(IHTMLAreaElement *iface)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLAreaElement_blur(IHTMLAreaElement *iface)
{
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
FIXME("(%p)\n", This);
return E_NOTIMPL;
}
static const IHTMLAreaElementVtbl HTMLAreaElementVtbl = {
HTMLAreaElement_QueryInterface,
HTMLAreaElement_AddRef,
HTMLAreaElement_Release,
HTMLAreaElement_GetTypeInfoCount,
HTMLAreaElement_GetTypeInfo,
HTMLAreaElement_GetIDsOfNames,
HTMLAreaElement_Invoke,
HTMLAreaElement_put_shape,
HTMLAreaElement_get_shape,
HTMLAreaElement_put_coords,
HTMLAreaElement_get_coords,
HTMLAreaElement_put_href,
HTMLAreaElement_get_href,
HTMLAreaElement_put_target,
HTMLAreaElement_get_target,
HTMLAreaElement_put_alt,
HTMLAreaElement_get_alt,
HTMLAreaElement_put_noHref,
HTMLAreaElement_get_noHref,
HTMLAreaElement_put_host,
HTMLAreaElement_get_host,
HTMLAreaElement_put_hostname,
HTMLAreaElement_get_hostname,
HTMLAreaElement_put_pathname,
HTMLAreaElement_get_pathname,
HTMLAreaElement_put_port,
HTMLAreaElement_get_port,
HTMLAreaElement_put_protocol,
HTMLAreaElement_get_protocol,
HTMLAreaElement_put_search,
HTMLAreaElement_get_search,
HTMLAreaElement_put_hash,
HTMLAreaElement_get_hash,
HTMLAreaElement_put_onblur,
HTMLAreaElement_get_onblur,
HTMLAreaElement_put_onfocus,
HTMLAreaElement_get_onfocus,
HTMLAreaElement_put_tabIndex,
HTMLAreaElement_get_tabIndex,
HTMLAreaElement_focus,
HTMLAreaElement_blur
};
static inline HTMLAreaElement *impl_from_HTMLDOMNode(HTMLDOMNode *iface)
{
return CONTAINING_RECORD(iface, HTMLAreaElement, element.node);
}
static HRESULT HTMLAreaElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
{
HTMLAreaElement *This = impl_from_HTMLDOMNode(iface);
*ppv = NULL;
if(IsEqualGUID(&IID_IHTMLAreaElement, riid)) {
TRACE("(%p)->(IID_IHTMLAreaElement %p)\n", This, ppv);
*ppv = &This->IHTMLAreaElement_iface;
}else {
return HTMLElement_QI(&This->element.node, riid, ppv);
}
IUnknown_AddRef((IUnknown*)*ppv);
return S_OK;
}
static HRESULT HTMLAreaElement_handle_event(HTMLDOMNode *iface, eventid_t eid, nsIDOMEvent *event, BOOL *prevent_default)
{
HTMLAreaElement *This = impl_from_HTMLDOMNode(iface);
nsAString href_str, target_str;
nsresult nsres;
if(eid == EVENTID_CLICK) {
nsAString_Init(&href_str, NULL);
nsres = nsIDOMHTMLAreaElement_GetHref(This->nsarea, &href_str);
if (NS_FAILED(nsres)) {
ERR("Could not get area href: %08x\n", nsres);
goto fallback;
}
nsAString_Init(&target_str, NULL);
nsres = nsIDOMHTMLAreaElement_GetTarget(This->nsarea, &target_str);
if (NS_FAILED(nsres)) {
ERR("Could not get area target: %08x\n", nsres);
goto fallback;
}
return handle_link_click_event(&This->element, &href_str, &target_str, event, prevent_default);
fallback:
nsAString_Finish(&href_str);
nsAString_Finish(&target_str);
}
return HTMLElement_handle_event(&This->element.node, eid, event, prevent_default);
}
static const NodeImplVtbl HTMLAreaElementImplVtbl = {
HTMLAreaElement_QI,
HTMLElement_destructor,
HTMLElement_cpc,
HTMLElement_clone,
HTMLAreaElement_handle_event,
HTMLElement_get_attr_col
};
static const tid_t HTMLAreaElement_iface_tids[] = {
HTMLELEMENT_TIDS,
IHTMLAreaElement_tid,
0
};
static dispex_static_data_t HTMLAreaElement_dispex = {
NULL,
DispHTMLAreaElement_tid,
NULL,
HTMLAreaElement_iface_tids
};
HRESULT HTMLAreaElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLElement **elem)
{
HTMLAreaElement *ret;
nsresult nsres;
ret = heap_alloc_zero(sizeof(HTMLAreaElement));
if(!ret)
return E_OUTOFMEMORY;
ret->IHTMLAreaElement_iface.lpVtbl = &HTMLAreaElementVtbl;
ret->element.node.vtbl = &HTMLAreaElementImplVtbl;
HTMLElement_Init(&ret->element, doc, nselem, &HTMLAreaElement_dispex);
nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLAreaElement, (void**)&ret->nsarea);
assert(nsres == NS_OK);
*elem = &ret->element;
return S_OK;
}

View file

@ -34,6 +34,8 @@ static HRESULT WINAPI HTMLDOMAttribute_QueryInterface(IHTMLDOMAttribute *iface,
*ppv = &This->IHTMLDOMAttribute_iface;
}else if(IsEqualGUID(&IID_IHTMLDOMAttribute, riid)) {
*ppv = &This->IHTMLDOMAttribute_iface;
}else if(IsEqualGUID(&IID_IHTMLDOMAttribute2, riid)) {
*ppv = &This->IHTMLDOMAttribute2_iface;
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
return *ppv ? S_OK : E_NOINTERFACE;
}else {
@ -120,7 +122,7 @@ static HRESULT WINAPI HTMLDOMAttribute_get_nodeName(IHTMLDOMAttribute *iface, BS
return *p ? S_OK : E_OUTOFMEMORY;
}
return IDispatchEx_GetMemberName(&This->elem->node.dispex.IDispatchEx_iface, This->dispid, p);
return IDispatchEx_GetMemberName(&This->elem->node.event_target.dispex.IDispatchEx_iface, This->dispid, p);
}
static HRESULT WINAPI HTMLDOMAttribute_put_nodeValue(IHTMLDOMAttribute *iface, VARIANT v)
@ -140,15 +142,13 @@ static HRESULT WINAPI HTMLDOMAttribute_put_nodeValue(IHTMLDOMAttribute *iface, V
memset(&ei, 0, sizeof(ei));
return IDispatchEx_InvokeEx(&This->elem->node.dispex.IDispatchEx_iface, This->dispid, LOCALE_SYSTEM_DEFAULT,
return IDispatchEx_InvokeEx(&This->elem->node.event_target.dispex.IDispatchEx_iface, This->dispid, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYPUT, &dp, &ret, &ei, NULL);
}
static HRESULT WINAPI HTMLDOMAttribute_get_nodeValue(IHTMLDOMAttribute *iface, VARIANT *p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute(iface);
DISPPARAMS dp = {NULL, NULL, 0, 0};
EXCEPINFO ei;
TRACE("(%p)->(%p)\n", This, p);
@ -157,9 +157,7 @@ static HRESULT WINAPI HTMLDOMAttribute_get_nodeValue(IHTMLDOMAttribute *iface, V
return E_UNEXPECTED;
}
memset(&ei, 0, sizeof(ei));
return IDispatchEx_InvokeEx(&This->elem->node.dispex.IDispatchEx_iface, This->dispid, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &dp, p, &ei, NULL);
return get_elem_attr_value_by_dispid(This->elem, This->dispid, 0, p);
}
static HRESULT WINAPI HTMLDOMAttribute_get_specified(IHTMLDOMAttribute *iface, VARIANT_BOOL *p)
@ -183,7 +181,7 @@ static HRESULT WINAPI HTMLDOMAttribute_get_specified(IHTMLDOMAttribute *iface, V
return S_OK;
}
hres = IDispatchEx_GetMemberName(&This->elem->node.dispex.IDispatchEx_iface, This->dispid, &name);
hres = IDispatchEx_GetMemberName(&This->elem->node.event_target.dispex.IDispatchEx_iface, This->dispid, &name);
if(FAILED(hres))
return hres;
@ -220,8 +218,249 @@ static const IHTMLDOMAttributeVtbl HTMLDOMAttributeVtbl = {
HTMLDOMAttribute_get_specified
};
static inline HTMLDOMAttribute *impl_from_IHTMLDOMAttribute2(IHTMLDOMAttribute2 *iface)
{
return CONTAINING_RECORD(iface, HTMLDOMAttribute, IHTMLDOMAttribute2_iface);
}
static HRESULT WINAPI HTMLDOMAttribute2_QueryInterface(IHTMLDOMAttribute2 *iface, REFIID riid, void **ppv)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
return IHTMLDOMAttribute_QueryInterface(&This->IHTMLDOMAttribute_iface, riid, ppv);
}
static ULONG WINAPI HTMLDOMAttribute2_AddRef(IHTMLDOMAttribute2 *iface)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
return IHTMLDOMAttribute_AddRef(&This->IHTMLDOMAttribute_iface);
}
static ULONG WINAPI HTMLDOMAttribute2_Release(IHTMLDOMAttribute2 *iface)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
return IHTMLDOMAttribute_Release(&This->IHTMLDOMAttribute_iface);
}
static HRESULT WINAPI HTMLDOMAttribute2_GetTypeInfoCount(IHTMLDOMAttribute2 *iface, UINT *pctinfo)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLDOMAttribute2_GetTypeInfo(IHTMLDOMAttribute2 *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLDOMAttribute2_GetIDsOfNames(IHTMLDOMAttribute2 *iface, REFIID riid,
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
lcid, rgDispId);
}
static HRESULT WINAPI HTMLDOMAttribute2_Invoke(IHTMLDOMAttribute2 *iface, DISPID dispIdMember,
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
static HRESULT WINAPI HTMLDOMAttribute2_get_name(IHTMLDOMAttribute2 *iface, BSTR *p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_put_value(IHTMLDOMAttribute2 *iface, BSTR v)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_get_value(IHTMLDOMAttribute2 *iface, BSTR *p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
VARIANT val;
HRESULT hres;
TRACE("(%p)->(%p)\n", This, p);
if(!This->elem) {
FIXME("NULL This->elem\n");
return E_UNEXPECTED;
}
hres = get_elem_attr_value_by_dispid(This->elem, This->dispid, ATTRFLAG_ASSTRING, &val);
if(FAILED(hres))
return hres;
assert(V_VT(&val) == VT_BSTR);
*p = V_BSTR(&val);
if(!*p && !(*p = SysAllocStringLen(NULL, 0)))
return E_OUTOFMEMORY;
return S_OK;
}
static HRESULT WINAPI HTMLDOMAttribute2_get_expando(IHTMLDOMAttribute2 *iface, VARIANT_BOOL *p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
TRACE("(%p)->(%p)\n", This, p);
*p = get_dispid_type(This->dispid) == DISPEXPROP_BUILTIN ? VARIANT_FALSE : VARIANT_TRUE;
return S_OK;
}
static HRESULT WINAPI HTMLDOMAttribute2_get_nodeType(IHTMLDOMAttribute2 *iface, LONG *p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_get_parentNode(IHTMLDOMAttribute2 *iface, IHTMLDOMNode **p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_get_childNodes(IHTMLDOMAttribute2 *iface, IDispatch **p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_get_firstChild(IHTMLDOMAttribute2 *iface, IHTMLDOMNode **p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_get_lastChild(IHTMLDOMAttribute2 *iface, IHTMLDOMNode **p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_get_previousSibling(IHTMLDOMAttribute2 *iface, IHTMLDOMNode **p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_get_nextSibling(IHTMLDOMAttribute2 *iface, IHTMLDOMNode **p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_get_attributes(IHTMLDOMAttribute2 *iface, IDispatch **p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_get_ownerDocument(IHTMLDOMAttribute2 *iface, IDispatch **p)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_insertBefore(IHTMLDOMAttribute2 *iface, IHTMLDOMNode *newChild,
VARIANT refChild, IHTMLDOMNode **node)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p %s %p)\n", This, newChild, debugstr_variant(&refChild), node);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_replaceChild(IHTMLDOMAttribute2 *iface, IHTMLDOMNode *newChild,
IHTMLDOMNode *oldChild, IHTMLDOMNode **node)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p %p %p)\n", This, newChild, oldChild, node);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_removeChild(IHTMLDOMAttribute2 *iface, IHTMLDOMNode *oldChild,
IHTMLDOMNode **node)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p %p)\n", This, oldChild, node);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_appendChild(IHTMLDOMAttribute2 *iface, IHTMLDOMNode *newChild,
IHTMLDOMNode **node)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p %p)\n", This, newChild, node);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_hasChildNodes(IHTMLDOMAttribute2 *iface, VARIANT_BOOL *fChildren)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%p)\n", This, fChildren);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLDOMAttribute2_cloneNode(IHTMLDOMAttribute2 *iface, VARIANT_BOOL fDeep,
IHTMLDOMAttribute **clonedNode)
{
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface);
FIXME("(%p)->(%x %p)\n", This, fDeep, clonedNode);
return E_NOTIMPL;
}
static const IHTMLDOMAttribute2Vtbl HTMLDOMAttribute2Vtbl = {
HTMLDOMAttribute2_QueryInterface,
HTMLDOMAttribute2_AddRef,
HTMLDOMAttribute2_Release,
HTMLDOMAttribute2_GetTypeInfoCount,
HTMLDOMAttribute2_GetTypeInfo,
HTMLDOMAttribute2_GetIDsOfNames,
HTMLDOMAttribute2_Invoke,
HTMLDOMAttribute2_get_name,
HTMLDOMAttribute2_put_value,
HTMLDOMAttribute2_get_value,
HTMLDOMAttribute2_get_expando,
HTMLDOMAttribute2_get_nodeType,
HTMLDOMAttribute2_get_parentNode,
HTMLDOMAttribute2_get_childNodes,
HTMLDOMAttribute2_get_firstChild,
HTMLDOMAttribute2_get_lastChild,
HTMLDOMAttribute2_get_previousSibling,
HTMLDOMAttribute2_get_nextSibling,
HTMLDOMAttribute2_get_attributes,
HTMLDOMAttribute2_get_ownerDocument,
HTMLDOMAttribute2_insertBefore,
HTMLDOMAttribute2_replaceChild,
HTMLDOMAttribute2_removeChild,
HTMLDOMAttribute2_appendChild,
HTMLDOMAttribute2_hasChildNodes,
HTMLDOMAttribute2_cloneNode
};
static const tid_t HTMLDOMAttribute_iface_tids[] = {
IHTMLDOMAttribute_tid,
IHTMLDOMAttribute2_tid,
0
};
static dispex_static_data_t HTMLDOMAttribute_dispex = {
@ -242,6 +481,7 @@ HRESULT HTMLDOMAttribute_Create(const WCHAR *name, HTMLElement *elem, DISPID dis
return E_OUTOFMEMORY;
ret->IHTMLDOMAttribute_iface.lpVtbl = &HTMLDOMAttributeVtbl;
ret->IHTMLDOMAttribute2_iface.lpVtbl = &HTMLDOMAttribute2Vtbl;
ret->ref = 1;
ret->dispid = dispid;
ret->elem = elem;

View file

@ -222,7 +222,7 @@ static ULONG WINAPI HTMLBodyElement_Release(IHTMLBodyElement *iface)
static HRESULT WINAPI HTMLBodyElement_GetTypeInfoCount(IHTMLBodyElement *iface, UINT *pctinfo)
{
HTMLBodyElement *This = impl_from_IHTMLBodyElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->textcont.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_GetTypeInfoCount(&This->textcont.element.node.event_target.dispex.IDispatchEx_iface,
pctinfo);
}
@ -230,7 +230,7 @@ static HRESULT WINAPI HTMLBodyElement_GetTypeInfo(IHTMLBodyElement *iface, UINT
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLBodyElement *This = impl_from_IHTMLBodyElement(iface);
return IDispatchEx_GetTypeInfo(&This->textcont.element.node.dispex.IDispatchEx_iface, iTInfo,
return IDispatchEx_GetTypeInfo(&This->textcont.element.node.event_target.dispex.IDispatchEx_iface, iTInfo,
lcid, ppTInfo);
}
@ -239,7 +239,7 @@ static HRESULT WINAPI HTMLBodyElement_GetIDsOfNames(IHTMLBodyElement *iface, REF
LCID lcid, DISPID *rgDispId)
{
HTMLBodyElement *This = impl_from_IHTMLBodyElement(iface);
return IDispatchEx_GetIDsOfNames(&This->textcont.element.node.dispex.IDispatchEx_iface, riid,
return IDispatchEx_GetIDsOfNames(&This->textcont.element.node.event_target.dispex.IDispatchEx_iface, riid,
rgszNames, cNames, lcid, rgDispId);
}
@ -248,7 +248,7 @@ static HRESULT WINAPI HTMLBodyElement_Invoke(IHTMLBodyElement *iface, DISPID dis
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLBodyElement *This = impl_from_IHTMLBodyElement(iface);
return IDispatchEx_Invoke(&This->textcont.element.node.dispex.IDispatchEx_iface, dispIdMember,
return IDispatchEx_Invoke(&This->textcont.element.node.event_target.dispex.IDispatchEx_iface, dispIdMember,
riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -808,13 +808,13 @@ static void HTMLBodyElement_unlink(HTMLDOMNode *iface)
}
}
static event_target_t **HTMLBodyElement_get_event_target(HTMLDOMNode *iface)
static event_target_t **HTMLBodyElement_get_event_target_ptr(HTMLDOMNode *iface)
{
HTMLBodyElement *This = impl_from_HTMLDOMNode(iface);
return This->textcont.element.node.doc
? &This->textcont.element.node.doc->body_event_target
: &This->textcont.element.node.event_target;
: &This->textcont.element.node.event_target.ptr;
}
static BOOL HTMLBodyElement_is_text_edit(HTMLDOMNode *iface)
@ -836,7 +836,7 @@ static const NodeImplVtbl HTMLBodyElementImplVtbl = {
HTMLElement_clone,
HTMLElement_handle_event,
HTMLElement_get_attr_col,
HTMLBodyElement_get_event_target,
HTMLBodyElement_get_event_target_ptr,
NULL,
NULL,
NULL,

View file

@ -53,14 +53,14 @@ static ULONG WINAPI HTMLCommentElement_Release(IHTMLCommentElement *iface)
static HRESULT WINAPI HTMLCommentElement_GetTypeInfoCount(IHTMLCommentElement *iface, UINT *pctinfo)
{
HTMLCommentElement *This = impl_from_IHTMLCommentElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLCommentElement_GetTypeInfo(IHTMLCommentElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLCommentElement *This = impl_from_IHTMLCommentElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -69,7 +69,7 @@ static HRESULT WINAPI HTMLCommentElement_GetIDsOfNames(IHTMLCommentElement *ifac
LCID lcid, DISPID *rgDispId)
{
HTMLCommentElement *This = impl_from_IHTMLCommentElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -78,7 +78,7 @@ static HRESULT WINAPI HTMLCommentElement_Invoke(IHTMLCommentElement *iface, DISP
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLCommentElement *This = impl_from_IHTMLCommentElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -1177,8 +1177,10 @@ static HRESULT WINAPI HTMLCurrentStyle3_get_wordSpacing(IHTMLCurrentStyle3 *ifac
static HRESULT WINAPI HTMLCurrentStyle3_get_whiteSpace(IHTMLCurrentStyle3 *iface, BSTR *p)
{
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
TRACE("(%p)->(%p)\n", This, p);
return get_nsstyle_attr(This->nsstyle, STYLEID_WHITE_SPACE, p, 0);
}
static const IHTMLCurrentStyle3Vtbl HTMLCurrentStyle3Vtbl = {
@ -1324,11 +1326,17 @@ HRESULT HTMLCurrentStyle_Create(HTMLElement *elem, IHTMLCurrentStyle **p)
nsAString_Init(&nsempty_str, NULL);
nsres = nsIDOMWindow_GetComputedStyle(nsview, (nsIDOMElement*)elem->nselem, &nsempty_str, &nsstyle);
nsAString_Finish(&nsempty_str);
nsIDOMWindow_Release(nsview);
if(NS_FAILED(nsres)) {
ERR("GetComputedStyle failed: %08x\n", nsres);
return E_FAIL;
}
if(!nsstyle) {
ERR("GetComputedStyle returned NULL nsstyle\n");
return E_FAIL;
}
ret = heap_alloc_zero(sizeof(HTMLCurrentStyle));
if(!ret) {
nsIDOMCSSStyleDeclaration_Release(nsstyle);

View file

@ -2008,7 +2008,7 @@ static HRESULT WINAPI HTMLDocument3_attachEvent(IHTMLDocument3 *iface, BSTR even
TRACE("(%p)->(%s %p %p)\n", This, debugstr_w(event), pDisp, pfResult);
return attach_event(&This->doc_node->node.event_target, This, event, pDisp, pfResult);
return attach_event(&This->doc_node->node.event_target, event, pDisp, pfResult);
}
static HRESULT WINAPI HTMLDocument3_detachEvent(IHTMLDocument3 *iface, BSTR event,
@ -2018,7 +2018,7 @@ static HRESULT WINAPI HTMLDocument3_detachEvent(IHTMLDocument3 *iface, BSTR even
TRACE("(%p)->(%s %p)\n", This, debugstr_w(event), pDisp);
return detach_event(This->doc_node->node.event_target, This, event, pDisp);
return detach_event(&This->doc_node->node.event_target, event, pDisp);
}
static HRESULT WINAPI HTMLDocument3_put_onrowsdelete(IHTMLDocument3 *iface, VARIANT v)
@ -2858,7 +2858,7 @@ static HRESULT WINAPI HTMLDocument5_get_compatMode(IHTMLDocument5 *iface, BSTR *
{
HTMLDocument *This = impl_from_IHTMLDocument5(iface);
nsAString mode_str;
const PRUnichar *mode;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
@ -2868,13 +2868,8 @@ static HRESULT WINAPI HTMLDocument5_get_compatMode(IHTMLDocument5 *iface, BSTR *
}
nsAString_Init(&mode_str, NULL);
nsIDOMHTMLDocument_GetCompatMode(This->doc_node->nsdoc, &mode_str);
nsAString_GetData(&mode_str, &mode);
*p = SysAllocString(mode);
nsAString_Finish(&mode_str);
return S_OK;
nsres = nsIDOMHTMLDocument_GetCompatMode(This->doc_node->nsdoc, &mode_str);
return return_nsstr(nsres, &mode_str, p);
}
static const IHTMLDocument5Vtbl HTMLDocument5Vtbl = {
@ -3943,7 +3938,7 @@ static void HTMLDocument_on_advise(IUnknown *iface, cp_static_data_t *cp)
HTMLDocument *This = impl_from_IHTMLDocument2((IHTMLDocument2*)iface);
if(This->window)
update_cp_events(This->window->base.inner_window, &This->doc_node->node.event_target, cp);
update_doc_cp_events(This->doc_node, cp);
}
static inline HTMLDocument *impl_from_ISupportErrorInfo(ISupportErrorInfo *iface)
@ -4507,7 +4502,7 @@ static HRESULT HTMLDocumentFragment_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode
static inline HTMLDocumentNode *impl_from_DispatchEx(DispatchEx *iface)
{
return CONTAINING_RECORD(iface, HTMLDocumentNode, node.dispex);
return CONTAINING_RECORD(iface, HTMLDocumentNode, node.event_target.dispex);
}
static HRESULT HTMLDocumentNode_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params,
@ -4552,12 +4547,19 @@ static HRESULT HTMLDocumentNode_invoke(DispatchEx *dispex, DISPID id, LCID lcid,
return S_OK;
}
static void HTMLDocumentNode_bind_event(DispatchEx *dispex, int eid)
{
HTMLDocumentNode *This = impl_from_DispatchEx(dispex);
ensure_doc_nsevent_handler(This, eid);
}
static const dispex_static_data_vtbl_t HTMLDocumentNode_dispex_vtbl = {
NULL,
NULL,
HTMLDocumentNode_invoke,
NULL
NULL,
NULL,
HTMLDocumentNode_bind_event
};
static const NodeImplVtbl HTMLDocumentFragmentImplVtbl = {
@ -4598,10 +4600,10 @@ static HTMLDocumentNode *alloc_doc_node(HTMLDocumentObj *doc_obj, HTMLInnerWindo
doc->basedoc.window = window->base.outer_window;
doc->window = window;
init_dispex(&doc->node.dispex, (IUnknown*)&doc->node.IHTMLDOMNode_iface,
init_dispex(&doc->node.event_target.dispex, (IUnknown*)&doc->node.IHTMLDOMNode_iface,
&HTMLDocumentNode_dispex);
init_doc(&doc->basedoc, (IUnknown*)&doc->node.IHTMLDOMNode_iface,
&doc->node.dispex.IDispatchEx_iface);
&doc->node.event_target.dispex.IDispatchEx_iface);
HTMLDocumentNode_SecMgr_Init(doc);
list_init(&doc->selection_list);
@ -4735,6 +4737,8 @@ static ULONG WINAPI CustomDoc_Release(ICustomDoc *iface)
IOleDocumentView_SetInPlaceSite(&This->basedoc.IOleDocumentView_iface, NULL);
if(This->undomgr)
IOleUndoManager_Release(This->undomgr);
if(This->editsvcs)
IHTMLEditServices_Release(This->editsvcs);
if(This->tooltips_hwnd)
DestroyWindow(This->tooltips_hwnd);

View file

@ -19,6 +19,7 @@
#include "mshtml_private.h"
static const WCHAR aW[] = {'A',0};
static const WCHAR areaW[] = {'A','R','E','A',0};
static const WCHAR bodyW[] = {'B','O','D','Y',0};
static const WCHAR buttonW[] = {'B','U','T','T','O','N',0};
static const WCHAR embedW[] = {'E','M','B','E','D',0};
@ -49,6 +50,7 @@ typedef struct {
static const tag_desc_t tag_descs[] = {
{aW, HTMLAnchorElement_Create},
{areaW, HTMLAreaElement_Create},
{bodyW, HTMLBodyElement_Create},
{buttonW, HTMLButtonElement_Create},
{embedW, HTMLEmbedElement_Create},
@ -558,14 +560,14 @@ static ULONG WINAPI HTMLElement_Release(IHTMLElement *iface)
static HRESULT WINAPI HTMLElement_GetTypeInfoCount(IHTMLElement *iface, UINT *pctinfo)
{
HTMLElement *This = impl_from_IHTMLElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLElement_GetTypeInfo(IHTMLElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLElement *This = impl_from_IHTMLElement(iface);
return IDispatchEx_GetTypeInfo(&This->node.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
return IDispatchEx_GetTypeInfo(&This->node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLElement_GetIDsOfNames(IHTMLElement *iface, REFIID riid,
@ -573,7 +575,7 @@ static HRESULT WINAPI HTMLElement_GetIDsOfNames(IHTMLElement *iface, REFIID riid
LCID lcid, DISPID *rgDispId)
{
HTMLElement *This = impl_from_IHTMLElement(iface);
return IDispatchEx_GetIDsOfNames(&This->node.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
return IDispatchEx_GetIDsOfNames(&This->node.event_target.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
lcid, rgDispId);
}
@ -582,14 +584,10 @@ static HRESULT WINAPI HTMLElement_Invoke(IHTMLElement *iface, DISPID dispIdMembe
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLElement *This = impl_from_IHTMLElement(iface);
return IDispatchEx_Invoke(&This->node.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
return IDispatchEx_Invoke(&This->node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
#define ATTRFLAG_CASESENSITIVE 0x0001
#define ATTRFLAG_ASSTRING 0x0002
#define ATTRFLAG_EXPANDURL 0x0004
static HRESULT WINAPI HTMLElement_setAttribute(IHTMLElement *iface, BSTR strAttributeName,
VARIANT AttributeValue, LONG lFlags)
{
@ -601,7 +599,7 @@ static HRESULT WINAPI HTMLElement_setAttribute(IHTMLElement *iface, BSTR strAttr
TRACE("(%p)->(%s %s %08x)\n", This, debugstr_w(strAttributeName), debugstr_variant(&AttributeValue), lFlags);
hres = IDispatchEx_GetDispID(&This->node.dispex.IDispatchEx_iface, strAttributeName,
hres = IDispatchEx_GetDispID(&This->node.event_target.dispex.IDispatchEx_iface, strAttributeName,
(lFlags&ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive) | fdexNameEnsure, &dispid);
if(FAILED(hres))
return hres;
@ -616,25 +614,53 @@ static HRESULT WINAPI HTMLElement_setAttribute(IHTMLElement *iface, BSTR strAttr
dispParams.rgdispidNamedArgs = &dispidNamed;
dispParams.rgvarg = &AttributeValue;
return IDispatchEx_InvokeEx(&This->node.dispex.IDispatchEx_iface, dispid,
return IDispatchEx_InvokeEx(&This->node.event_target.dispex.IDispatchEx_iface, dispid,
LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT, &dispParams, NULL, &excep, NULL);
}
HRESULT get_elem_attr_value_by_dispid(HTMLElement *elem, DISPID dispid, DWORD flags, VARIANT *ret)
{
DISPPARAMS dispParams = {NULL, NULL, 0, 0};
EXCEPINFO excep;
HRESULT hres;
hres = IDispatchEx_InvokeEx(&elem->node.event_target.dispex.IDispatchEx_iface, dispid, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &dispParams, ret, &excep, NULL);
if(FAILED(hres))
return hres;
if(flags & ATTRFLAG_ASSTRING) {
switch(V_VT(ret)) {
case VT_BSTR:
break;
case VT_DISPATCH:
IDispatch_Release(V_DISPATCH(ret));
V_VT(ret) = VT_BSTR;
V_BSTR(ret) = SysAllocString(NULL);
break;
default:
hres = VariantChangeType(ret, ret, 0, VT_BSTR);
if(FAILED(hres))
return hres;
}
}
return S_OK;
}
static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttributeName,
LONG lFlags, VARIANT *AttributeValue)
{
HTMLElement *This = impl_from_IHTMLElement(iface);
DISPID dispid;
HRESULT hres;
DISPPARAMS dispParams = {NULL, NULL, 0, 0};
EXCEPINFO excep;
TRACE("(%p)->(%s %08x %p)\n", This, debugstr_w(strAttributeName), lFlags, AttributeValue);
if(lFlags & ~(ATTRFLAG_CASESENSITIVE|ATTRFLAG_ASSTRING))
FIXME("Unsuported flags %x\n", lFlags);
FIXME("Unsupported flags %x\n", lFlags);
hres = IDispatchEx_GetDispID(&This->node.dispex.IDispatchEx_iface, strAttributeName,
hres = IDispatchEx_GetDispID(&This->node.event_target.dispex.IDispatchEx_iface, strAttributeName,
lFlags&ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &dispid);
if(hres == DISP_E_UNKNOWNNAME) {
V_VT(AttributeValue) = VT_NULL;
@ -646,28 +672,7 @@ static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttr
return hres;
}
hres = IDispatchEx_InvokeEx(&This->node.dispex.IDispatchEx_iface, dispid, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &dispParams, AttributeValue, &excep, NULL);
if(FAILED(hres))
return hres;
if(lFlags & ATTRFLAG_ASSTRING) {
switch(V_VT(AttributeValue)) {
case VT_BSTR:
break;
case VT_DISPATCH:
IDispatch_Release(V_DISPATCH(AttributeValue));
V_VT(AttributeValue) = VT_BSTR;
V_BSTR(AttributeValue) = SysAllocString(NULL);
break;
default:
hres = VariantChangeType(AttributeValue, AttributeValue, 0, VT_BSTR);
if(FAILED(hres))
return hres;
}
}
return S_OK;
return get_elem_attr_value_by_dispid(This, dispid, lFlags, AttributeValue);
}
static HRESULT WINAPI HTMLElement_removeAttribute(IHTMLElement *iface, BSTR strAttributeName,
@ -679,7 +684,7 @@ static HRESULT WINAPI HTMLElement_removeAttribute(IHTMLElement *iface, BSTR strA
TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(strAttributeName), lFlags, pfSuccess);
hres = IDispatchEx_GetDispID(&This->node.dispex.IDispatchEx_iface, strAttributeName,
hres = IDispatchEx_GetDispID(&This->node.event_target.dispex.IDispatchEx_iface, strAttributeName,
lFlags&ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &id);
if(hres == DISP_E_UNKNOWNNAME) {
*pfSuccess = VARIANT_FALSE;
@ -706,7 +711,7 @@ static HRESULT WINAPI HTMLElement_removeAttribute(IHTMLElement *iface, BSTR strA
return S_OK;
}
return remove_attribute(&This->node.dispex, id, pfSuccess);
return remove_attribute(&This->node.event_target.dispex, id, pfSuccess);
}
static HRESULT WINAPI HTMLElement_put_className(IHTMLElement *iface, BSTR v)
@ -1073,7 +1078,7 @@ static HRESULT WINAPI HTMLElement_put_title(IHTMLElement *iface, BSTR v)
VARIANT *var;
HRESULT hres;
hres = dispex_get_dprop_ref(&This->node.dispex, titleW, TRUE, &var);
hres = dispex_get_dprop_ref(&This->node.event_target.dispex, titleW, TRUE, &var);
if(FAILED(hres))
return hres;
@ -1104,7 +1109,7 @@ static HRESULT WINAPI HTMLElement_get_title(IHTMLElement *iface, BSTR *p)
VARIANT *var;
HRESULT hres;
hres = dispex_get_dprop_ref(&This->node.dispex, titleW, FALSE, &var);
hres = dispex_get_dprop_ref(&This->node.event_target.dispex, titleW, FALSE, &var);
if(hres == DISP_E_UNKNOWNNAME) {
*p = NULL;
}else if(V_VT(var) != VT_BSTR) {
@ -1488,7 +1493,7 @@ static HRESULT WINAPI HTMLElement_get_outerText(IHTMLElement *iface, BSTR *p)
return E_NOTIMPL;
}
HRESULT insert_adjacent_node(HTMLElement *This, const WCHAR *where, nsIDOMNode *nsnode, HTMLDOMNode **ret_node)
static HRESULT insert_adjacent_node(HTMLElement *This, const WCHAR *where, nsIDOMNode *nsnode, HTMLDOMNode **ret_node)
{
nsIDOMNode *ret_nsnode;
nsresult nsres;
@ -1986,14 +1991,14 @@ static ULONG WINAPI HTMLElement2_Release(IHTMLElement2 *iface)
static HRESULT WINAPI HTMLElement2_GetTypeInfoCount(IHTMLElement2 *iface, UINT *pctinfo)
{
HTMLElement *This = impl_from_IHTMLElement2(iface);
return IDispatchEx_GetTypeInfoCount(&This->node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLElement2_GetTypeInfo(IHTMLElement2 *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLElement *This = impl_from_IHTMLElement2(iface);
return IDispatchEx_GetTypeInfo(&This->node.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
return IDispatchEx_GetTypeInfo(&This->node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLElement2_GetIDsOfNames(IHTMLElement2 *iface, REFIID riid,
@ -2001,7 +2006,7 @@ static HRESULT WINAPI HTMLElement2_GetIDsOfNames(IHTMLElement2 *iface, REFIID ri
LCID lcid, DISPID *rgDispId)
{
HTMLElement *This = impl_from_IHTMLElement2(iface);
return IDispatchEx_GetIDsOfNames(&This->node.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
return IDispatchEx_GetIDsOfNames(&This->node.event_target.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
lcid, rgDispId);
}
@ -2010,7 +2015,7 @@ static HRESULT WINAPI HTMLElement2_Invoke(IHTMLElement2 *iface, DISPID dispIdMem
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLElement *This = impl_from_IHTMLElement2(iface);
return IDispatchEx_Invoke(&This->node.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
return IDispatchEx_Invoke(&This->node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -2543,7 +2548,7 @@ static HRESULT WINAPI HTMLElement2_attachEvent(IHTMLElement2 *iface, BSTR event,
TRACE("(%p)->(%s %p %p)\n", This, debugstr_w(event), pDisp, pfResult);
return attach_event(get_node_event_target(&This->node), &This->node.doc->basedoc, event, pDisp, pfResult);
return attach_event(&This->node.event_target, event, pDisp, pfResult);
}
static HRESULT WINAPI HTMLElement2_detachEvent(IHTMLElement2 *iface, BSTR event, IDispatch *pDisp)
@ -2552,7 +2557,7 @@ static HRESULT WINAPI HTMLElement2_detachEvent(IHTMLElement2 *iface, BSTR event,
TRACE("(%p)->(%s %p)\n", This, debugstr_w(event), pDisp);
return detach_event(*get_node_event_target(&This->node), &This->node.doc->basedoc, event, pDisp);
return detach_event(&This->node.event_target, event, pDisp);
}
static HRESULT WINAPI HTMLElement2_get_readyState(IHTMLElement2 *iface, VARIANT *p)
@ -3104,14 +3109,14 @@ static ULONG WINAPI HTMLElement3_Release(IHTMLElement3 *iface)
static HRESULT WINAPI HTMLElement3_GetTypeInfoCount(IHTMLElement3 *iface, UINT *pctinfo)
{
HTMLElement *This = impl_from_IHTMLElement3(iface);
return IDispatchEx_GetTypeInfoCount(&This->node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLElement3_GetTypeInfo(IHTMLElement3 *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLElement *This = impl_from_IHTMLElement3(iface);
return IDispatchEx_GetTypeInfo(&This->node.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
return IDispatchEx_GetTypeInfo(&This->node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLElement3_GetIDsOfNames(IHTMLElement3 *iface, REFIID riid,
@ -3119,7 +3124,7 @@ static HRESULT WINAPI HTMLElement3_GetIDsOfNames(IHTMLElement3 *iface, REFIID ri
LCID lcid, DISPID *rgDispId)
{
HTMLElement *This = impl_from_IHTMLElement3(iface);
return IDispatchEx_GetIDsOfNames(&This->node.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
return IDispatchEx_GetIDsOfNames(&This->node.event_target.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
lcid, rgDispId);
}
@ -3128,7 +3133,7 @@ static HRESULT WINAPI HTMLElement3_Invoke(IHTMLElement3 *iface, DISPID dispIdMem
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLElement *This = impl_from_IHTMLElement3(iface);
return IDispatchEx_Invoke(&This->node.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
return IDispatchEx_Invoke(&This->node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -3283,7 +3288,7 @@ static HRESULT WINAPI HTMLElement3_put_disabled(IHTMLElement3 *iface, VARIANT_BO
if(This->node.vtbl->put_disabled)
return This->node.vtbl->put_disabled(&This->node, v);
hres = dispex_get_dprop_ref(&This->node.dispex, disabledW, TRUE, &var);
hres = dispex_get_dprop_ref(&This->node.event_target.dispex, disabledW, TRUE, &var);
if(FAILED(hres))
return hres;
@ -3304,7 +3309,7 @@ static HRESULT WINAPI HTMLElement3_get_disabled(IHTMLElement3 *iface, VARIANT_BO
if(This->node.vtbl->get_disabled)
return This->node.vtbl->get_disabled(&This->node, p);
hres = dispex_get_dprop_ref(&This->node.dispex, disabledW, FALSE, &var);
hres = dispex_get_dprop_ref(&This->node.event_target.dispex, disabledW, FALSE, &var);
if(hres == DISP_E_UNKNOWNNAME) {
*p = VARIANT_FALSE;
return S_OK;
@ -3573,21 +3578,21 @@ static ULONG WINAPI HTMLElement4_Release(IHTMLElement4 *iface)
static HRESULT WINAPI HTMLElement4_GetTypeInfoCount(IHTMLElement4 *iface, UINT *pctinfo)
{
HTMLElement *This = impl_from_IHTMLElement4(iface);
return IDispatchEx_GetTypeInfoCount(&This->node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLElement4_GetTypeInfo(IHTMLElement4 *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLElement *This = impl_from_IHTMLElement4(iface);
return IDispatchEx_GetTypeInfo(&This->node.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
return IDispatchEx_GetTypeInfo(&This->node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLElement4_GetIDsOfNames(IHTMLElement4 *iface, REFIID riid,
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLElement *This = impl_from_IHTMLElement4(iface);
return IDispatchEx_GetIDsOfNames(&This->node.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
return IDispatchEx_GetIDsOfNames(&This->node.event_target.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
lcid, rgDispId);
}
@ -3595,7 +3600,7 @@ static HRESULT WINAPI HTMLElement4_Invoke(IHTMLElement4 *iface, DISPID dispIdMem
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLElement *This = impl_from_IHTMLElement4(iface);
return IDispatchEx_Invoke(&This->node.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
return IDispatchEx_Invoke(&This->node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -3855,7 +3860,7 @@ static const NodeImplVtbl HTMLElementImplVtbl = {
static inline HTMLElement *impl_from_DispatchEx(DispatchEx *iface)
{
return CONTAINING_RECORD(iface, HTMLElement, node.dispex);
return CONTAINING_RECORD(iface, HTMLElement, node.event_target.dispex);
}
static HRESULT HTMLElement_get_dispid(DispatchEx *dispex, BSTR name,
@ -3965,6 +3970,20 @@ static HRESULT HTMLElement_populate_props(DispatchEx *dispex)
return S_OK;
}
static event_target_t **HTMLElement_get_event_target_ptr(DispatchEx *dispex)
{
HTMLElement *This = impl_from_DispatchEx(dispex);
return This->node.vtbl->get_event_target_ptr
? This->node.vtbl->get_event_target_ptr(&This->node)
: &This->node.event_target.ptr;
}
static void HTMLElement_bind_event(DispatchEx *dispex, int eid)
{
HTMLElement *This = impl_from_DispatchEx(dispex);
This->node.doc->node.event_target.dispex.data->vtbl->bind_event(&This->node.doc->node.event_target.dispex, eid);
}
static const tid_t HTMLElement_iface_tids[] = {
HTMLELEMENT_TIDS,
0
@ -3974,7 +3993,9 @@ static dispex_static_data_vtbl_t HTMLElement_dispex_vtbl = {
NULL,
HTMLElement_get_dispid,
HTMLElement_invoke,
HTMLElement_populate_props
HTMLElement_populate_props,
HTMLElement_get_event_target_ptr,
HTMLElement_bind_event
};
static dispex_static_data_t HTMLElement_dispex = {
@ -3993,7 +4014,7 @@ void HTMLElement_Init(HTMLElement *This, HTMLDocumentNode *doc, nsIDOMHTMLElemen
if(dispex_data && !dispex_data->vtbl)
dispex_data->vtbl = &HTMLElement_dispex_vtbl;
init_dispex(&This->node.dispex, (IUnknown*)&This->IHTMLElement_iface,
init_dispex(&This->node.event_target.dispex, (IUnknown*)&This->IHTMLElement_iface,
dispex_data ? dispex_data : &HTMLElement_dispex);
if(nselem) {
@ -4342,7 +4363,7 @@ static HRESULT WINAPI HTMLAttributeCollection_Invoke(IHTMLAttributeCollection *i
static HRESULT get_attr_dispid_by_idx(HTMLAttributeCollection *This, LONG *idx, DISPID *dispid)
{
IDispatchEx *dispex = &This->elem->node.dispex.IDispatchEx_iface;
IDispatchEx *dispex = &This->elem->node.event_target.dispex.IDispatchEx_iface;
DISPID id = DISPID_STARTENUM;
LONG len = -1;
HRESULT hres;
@ -4391,7 +4412,7 @@ static inline HRESULT get_attr_dispid_by_name(HTMLAttributeCollection *This, BST
return E_UNEXPECTED;
}
hres = IDispatchEx_GetDispID(&This->elem->node.dispex.IDispatchEx_iface,
hres = IDispatchEx_GetDispID(&This->elem->node.event_target.dispex.IDispatchEx_iface,
name, fdexNameCaseInsensitive, id);
return hres;
}

View file

@ -405,11 +405,13 @@ static HRESULT WINAPI HTMLElementCollection_item(IHTMLElementCollection *iface,
switch(V_VT(&name)) {
case VT_I4:
case VT_INT:
if(V_I4(&name) < 0)
return E_INVALIDARG;
hres = get_item_idx(This, V_I4(&name), pdisp);
break;
case VT_UI4:
case VT_UINT:
hres = get_item_idx(This, V_UINT(&name), pdisp);
break;
@ -808,6 +810,9 @@ static IHTMLElementCollection *HTMLElementCollection_Create(HTMLElement **elems,
{
HTMLElementCollection *ret = heap_alloc_zero(sizeof(HTMLElementCollection));
if (!ret)
return NULL;
ret->IHTMLElementCollection_iface.lpVtbl = &HTMLElementCollectionVtbl;
ret->ref = 1;
ret->elems = elems;

View file

@ -54,14 +54,14 @@ static ULONG WINAPI HTMLEmbedElement_Release(IHTMLEmbedElement *iface)
static HRESULT WINAPI HTMLEmbedElement_GetTypeInfoCount(IHTMLEmbedElement *iface, UINT *pctinfo)
{
HTMLEmbedElement *This = impl_from_IHTMLEmbedElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLEmbedElement_GetTypeInfo(IHTMLEmbedElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLEmbedElement *This = impl_from_IHTMLEmbedElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -69,7 +69,7 @@ static HRESULT WINAPI HTMLEmbedElement_GetIDsOfNames(IHTMLEmbedElement *iface, R
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLEmbedElement *This = impl_from_IHTMLEmbedElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -78,7 +78,7 @@ static HRESULT WINAPI HTMLEmbedElement_Invoke(IHTMLEmbedElement *iface, DISPID d
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLEmbedElement *This = impl_from_IHTMLEmbedElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -213,14 +213,13 @@ static HRESULT HTMLEmbedElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
{
HTMLEmbedElement *This = impl_from_HTMLDOMNode(iface);
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
if(IsEqualGUID(&IID_IUnknown, riid)) {
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
*ppv = &This->IHTMLEmbedElement_iface;
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
*ppv = &This->IHTMLEmbedElement_iface;
}else if(IsEqualGUID(&IID_IHTMLEmbedElement, riid)) {
TRACE("(%p)->(IID_IHTMLEmbedElement %p)\n", This, ppv);
*ppv = &This->IHTMLEmbedElement_iface;
}else {
return HTMLElement_QI(&This->element.node, riid, ppv);

View file

@ -239,7 +239,7 @@ static eventid_t attr_to_eid(LPCWSTR str)
return EVENTID_LAST;
}
typedef struct {
struct HTMLEventObj {
DispatchEx dispex;
IHTMLEventObj IHTMLEventObj_iface;
@ -248,9 +248,10 @@ typedef struct {
HTMLDOMNode *target;
const event_info_t *type;
nsIDOMEvent *nsevent;
VARIANT return_value;
BOOL prevent_default;
BOOL cancel_bubble;
} HTMLEventObj;
};
static inline HTMLEventObj *impl_from_IHTMLEventObj(IHTMLEventObj *iface)
{
@ -452,6 +453,7 @@ static HRESULT WINAPI HTMLEventObj_put_returnValue(IHTMLEventObj *iface, VARIANT
return DISP_E_BADVARTYPE;
}
This->return_value = v;
if(!V_BOOL(&v))
This->prevent_default = TRUE;
return S_OK;
@ -461,10 +463,10 @@ static HRESULT WINAPI HTMLEventObj_get_returnValue(IHTMLEventObj *iface, VARIANT
{
HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
FIXME("(%p)->(%p)\n", This, p);
TRACE("(%p)->(%p)\n", This, p);
V_VT(p) = VT_EMPTY;
return S_OK;
return VariantCopy(p, &This->return_value);
}
static HRESULT WINAPI HTMLEventObj_put_cancelBubble(IHTMLEventObj *iface, VARIANT_BOOL v)
@ -865,6 +867,19 @@ HRESULT create_event_obj(IHTMLEventObj **ret)
return S_OK;
}
static inline event_target_t *get_event_target_data(EventTarget *event_target, BOOL alloc)
{
event_target_t **ptr;
ptr = event_target->dispex.data->vtbl && event_target->dispex.data->vtbl->get_event_target_ptr
? event_target->dispex.data->vtbl->get_event_target_ptr(&event_target->dispex)
: &event_target->ptr;
if(*ptr || !alloc)
return *ptr;
return *ptr = heap_alloc_zero(sizeof(event_target_t));
}
static HRESULT call_disp_func(IDispatch *disp, DISPPARAMS *dp, VARIANT *retv)
{
IDispatchEx *dispex;
@ -934,18 +949,15 @@ static BOOL is_cp_event(cp_static_data_t *data, DISPID dispid)
return FALSE;
}
static void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj, event_target_t *event_target,
void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj, EventTarget *event_target,
ConnectionPointContainer *cp_container, eventid_t eid, IDispatch *this_obj)
{
event_target_t *data = get_event_target_data(event_target, FALSE);
const BOOL cancelable = event_info[eid].flags & EVENT_CANCELABLE;
handler_vector_t *handler_vector = NULL;
VARIANT v;
HRESULT hres;
if(event_target)
handler_vector = event_target->event_table[eid];
if(handler_vector && handler_vector->handler_prop) {
if(data && data->event_table[eid] && data->event_table[eid]->handler_prop) {
DISPID named_arg = DISPID_THIS;
VARIANTARG arg;
DISPPARAMS dp = {&arg, &named_arg, 1, 1};
@ -955,7 +967,7 @@ static void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj,
V_VT(&v) = VT_EMPTY;
TRACE("%s >>>\n", debugstr_w(event_info[eid].name));
hres = call_disp_func(handler_vector->handler_prop, &dp, &v);
hres = call_disp_func(data->event_table[eid]->handler_prop, &dp, &v);
if(hres == S_OK) {
TRACE("%s <<< %s\n", debugstr_w(event_info[eid].name), debugstr_variant(&v));
@ -973,7 +985,7 @@ static void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj,
}
}
if(handler_vector && handler_vector->handler_cnt) {
if(data && data->event_table[eid] && data->event_table[eid]->handler_cnt) {
VARIANTARG arg;
DISPPARAMS dp = {&arg, NULL, 1, 0};
int i;
@ -981,13 +993,13 @@ static void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj,
V_VT(&arg) = VT_DISPATCH;
V_DISPATCH(&arg) = (IDispatch*)event_obj;
i = handler_vector->handler_cnt;
i = data->event_table[eid]->handler_cnt;
while(i--) {
if(handler_vector->handlers[i]) {
if(data->event_table[eid]->handlers[i]) {
V_VT(&v) = VT_EMPTY;
TRACE("%s [%d] >>>\n", debugstr_w(event_info[eid].name), i);
hres = call_disp_func(handler_vector->handlers[i], &dp, &v);
hres = call_disp_func(data->event_table[eid]->handlers[i], &dp, &v);
if(hres == S_OK) {
TRACE("%s [%d] <<<\n", debugstr_w(event_info[eid].name), i);
@ -1089,8 +1101,8 @@ static void fire_event_obj(HTMLDocumentNode *doc, eventid_t eid, HTMLEventObj *e
do {
hres = get_node(doc, nsnode, FALSE, &node);
if(SUCCEEDED(hres) && node) {
call_event_handlers(doc, event_obj, *get_node_event_target(node),
node->cp_container, eid, script_this ? script_this : (IDispatch*)&node->IHTMLDOMNode_iface);
call_event_handlers(doc, event_obj, &node->event_target, node->cp_container, eid,
script_this ? script_this : (IDispatch*)&node->IHTMLDOMNode_iface);
node_release(node);
}
@ -1118,8 +1130,8 @@ static void fire_event_obj(HTMLDocumentNode *doc, eventid_t eid, HTMLEventObj *e
if(NS_SUCCEEDED(nsres) && nsbody) {
hres = get_node(doc, (nsIDOMNode*)nsbody, FALSE, &node);
if(SUCCEEDED(hres) && node) {
call_event_handlers(doc, event_obj, *get_node_event_target(node),
node->cp_container, eid, script_this ? script_this : (IDispatch*)&node->IHTMLDOMNode_iface);
call_event_handlers(doc, event_obj, &node->event_target, node->cp_container, eid,
script_this ? script_this : (IDispatch*)&node->IHTMLDOMNode_iface);
node_release(node);
}
nsIDOMHTMLElement_Release(nsbody);
@ -1128,7 +1140,7 @@ static void fire_event_obj(HTMLDocumentNode *doc, eventid_t eid, HTMLEventObj *e
}
}
call_event_handlers(doc, event_obj, doc->node.event_target, &doc->basedoc.cp_container, eid,
call_event_handlers(doc, event_obj, &doc->node.event_target, &doc->basedoc.cp_container, eid,
script_this ? script_this : (IDispatch*)&doc->basedoc.IHTMLDocument2_iface);
break;
@ -1283,13 +1295,6 @@ HRESULT call_fire_event(HTMLDOMNode *node, eventid_t eid)
return S_OK;
}
static inline event_target_t *get_event_target(event_target_t **event_target_ptr)
{
if(!*event_target_ptr)
*event_target_ptr = heap_alloc_zero(sizeof(event_target_t));
return *event_target_ptr;
}
static BOOL alloc_handler_vector(event_target_t *event_target, eventid_t eid, int cnt)
{
handler_vector_t *new_vector, *handler_vector = event_target->event_table[eid];
@ -1311,7 +1316,7 @@ static BOOL alloc_handler_vector(event_target_t *event_target, eventid_t eid, in
return TRUE;
}
static HRESULT ensure_nsevent_handler(HTMLDocumentNode *doc, event_target_t *event_target, eventid_t eid)
HRESULT ensure_doc_nsevent_handler(HTMLDocumentNode *doc, eventid_t eid)
{
nsIDOMNode *nsnode = NULL;
@ -1349,49 +1354,85 @@ void detach_events(HTMLDocumentNode *doc)
release_nsevents(doc);
}
static HRESULT remove_event_handler(event_target_t **event_target, eventid_t eid)
static void bind_event(EventTarget *event_target, eventid_t eid)
{
if(*event_target && (*event_target)->event_table[eid] && (*event_target)->event_table[eid]->handler_prop) {
IDispatch_Release((*event_target)->event_table[eid]->handler_prop);
(*event_target)->event_table[eid]->handler_prop = NULL;
}
if(event_target->dispex.data->vtbl->bind_event)
event_target->dispex.data->vtbl->bind_event(&event_target->dispex, eid);
else
FIXME("Unsupported event binding on target %p\n", event_target);
}
static void remove_event_handler(EventTarget *event_target, eventid_t eid)
{
event_target_t *data;
VARIANT *store;
HRESULT hres;
hres = dispex_get_dprop_ref(&event_target->dispex, event_info[eid].attr_name, FALSE, &store);
if(SUCCEEDED(hres))
VariantClear(store);
data = get_event_target_data(event_target, FALSE);
if(data && data->event_table[eid] && data->event_table[eid]->handler_prop) {
IDispatch_Release(data->event_table[eid]->handler_prop);
data->event_table[eid]->handler_prop = NULL;
}
}
static HRESULT set_event_handler_disp(EventTarget *event_target, eventid_t eid, IDispatch *disp)
{
event_target_t *data;
remove_event_handler(event_target, eid);
if(!disp)
return S_OK;
data = get_event_target_data(event_target, TRUE);
if(!data)
return E_OUTOFMEMORY;
if(!alloc_handler_vector(data, eid, 0))
return E_OUTOFMEMORY;
data->event_table[eid]->handler_prop = disp;
IDispatch_AddRef(disp);
bind_event(event_target, eid);
return S_OK;
}
static HRESULT set_event_handler_disp(event_target_t **event_target_ptr, HTMLDocumentNode *doc,
eventid_t eid, IDispatch *disp)
{
event_target_t *event_target;
if(!disp)
return remove_event_handler(event_target_ptr, eid);
event_target = get_event_target(event_target_ptr);
if(!event_target)
return E_OUTOFMEMORY;
if(!alloc_handler_vector(event_target, eid, 0))
return E_OUTOFMEMORY;
if(event_target->event_table[eid]->handler_prop)
IDispatch_Release(event_target->event_table[eid]->handler_prop);
event_target->event_table[eid]->handler_prop = disp;
IDispatch_AddRef(disp);
return ensure_nsevent_handler(doc, event_target, eid);
}
HRESULT set_event_handler(event_target_t **event_target, HTMLDocumentNode *doc, eventid_t eid, VARIANT *var)
HRESULT set_event_handler(EventTarget *event_target, eventid_t eid, VARIANT *var)
{
switch(V_VT(var)) {
case VT_NULL:
return remove_event_handler(event_target, eid);
remove_event_handler(event_target, eid);
return S_OK;
case VT_DISPATCH:
return set_event_handler_disp(event_target, doc, eid, V_DISPATCH(var));
return set_event_handler_disp(event_target, eid, V_DISPATCH(var));
case VT_BSTR: {
VARIANT *v;
HRESULT hres;
/*
* Setting event handler to string is a rare case and we don't want to
* complicate nor increase memory of event_target_t for that. Instead,
* we store the value in DispatchEx, which can already handle custom
* properties.
*/
remove_event_handler(event_target, eid);
hres = dispex_get_dprop_ref(&event_target->dispex, event_info[eid].attr_name, TRUE, &v);
if(FAILED(hres))
return hres;
V_BSTR(v) = SysAllocString(V_BSTR(var));
if(!V_BSTR(v))
return E_OUTOFMEMORY;
V_VT(v) = VT_BSTR;
return S_OK;
}
default:
FIXME("not handler %s\n", debugstr_variant(var));
@ -1403,11 +1444,20 @@ HRESULT set_event_handler(event_target_t **event_target, HTMLDocumentNode *doc,
return S_OK;
}
HRESULT get_event_handler(event_target_t **event_target, eventid_t eid, VARIANT *var)
HRESULT get_event_handler(EventTarget *event_target, eventid_t eid, VARIANT *var)
{
if(*event_target && (*event_target)->event_table[eid] && (*event_target)->event_table[eid]->handler_prop) {
event_target_t *data;
VARIANT *v;
HRESULT hres;
hres = dispex_get_dprop_ref(&event_target->dispex, event_info[eid].attr_name, FALSE, &v);
if(SUCCEEDED(hres) && V_VT(v) != VT_EMPTY)
return VariantCopy(var, v);
data = get_event_target_data(event_target, FALSE);
if(data && data->event_table[eid] && data->event_table[eid]->handler_prop) {
V_VT(var) = VT_DISPATCH;
V_DISPATCH(var) = (*event_target)->event_table[eid]->handler_prop;
V_DISPATCH(var) = data->event_table[eid]->handler_prop;
IDispatch_AddRef(V_DISPATCH(var));
}else {
V_VT(var) = VT_NULL;
@ -1416,10 +1466,9 @@ HRESULT get_event_handler(event_target_t **event_target, eventid_t eid, VARIANT
return S_OK;
}
HRESULT attach_event(event_target_t **event_target_ptr, HTMLDocument *doc, BSTR name,
IDispatch *disp, VARIANT_BOOL *res)
HRESULT attach_event(EventTarget *event_target, BSTR name, IDispatch *disp, VARIANT_BOOL *res)
{
event_target_t *event_target;
event_target_t *data;
eventid_t eid;
DWORD i = 0;
@ -1430,47 +1479,51 @@ HRESULT attach_event(event_target_t **event_target_ptr, HTMLDocument *doc, BSTR
return S_OK;
}
event_target = get_event_target(event_target_ptr);
if(!event_target)
data = get_event_target_data(event_target, TRUE);
if(!data)
return E_OUTOFMEMORY;
if(event_target->event_table[eid]) {
while(i < event_target->event_table[eid]->handler_cnt && event_target->event_table[eid]->handlers[i])
if(data->event_table[eid]) {
while(i < data->event_table[eid]->handler_cnt && data->event_table[eid]->handlers[i])
i++;
if(i == event_target->event_table[eid]->handler_cnt && !alloc_handler_vector(event_target, eid, i+1))
if(i == data->event_table[eid]->handler_cnt && !alloc_handler_vector(data, eid, i+1))
return E_OUTOFMEMORY;
}else if(!alloc_handler_vector(event_target, eid, i+1)) {
}else if(!alloc_handler_vector(data, eid, i+1)) {
return E_OUTOFMEMORY;
}
IDispatch_AddRef(disp);
event_target->event_table[eid]->handlers[i] = disp;
data->event_table[eid]->handlers[i] = disp;
bind_event(event_target, eid);
*res = VARIANT_TRUE;
return ensure_nsevent_handler(doc->doc_node, event_target, eid);
return S_OK;
}
HRESULT detach_event(event_target_t *event_target, HTMLDocument *doc, BSTR name, IDispatch *disp)
HRESULT detach_event(EventTarget *event_target, BSTR name, IDispatch *disp)
{
event_target_t *data;
eventid_t eid;
DWORD i = 0;
if(!event_target)
return S_OK;
eid = attr_to_eid(name);
if(eid == EVENTID_LAST) {
WARN("Unknown event\n");
return S_OK;
}
if(!event_target->event_table[eid])
data = get_event_target_data(event_target, FALSE);
if(!data)
return S_OK;
while(i < event_target->event_table[eid]->handler_cnt) {
if(event_target->event_table[eid]->handlers[i] == disp) {
IDispatch_Release(event_target->event_table[eid]->handlers[i]);
event_target->event_table[eid]->handlers[i] = NULL;
if(!data->event_table[eid])
return S_OK;
while(i < data->event_table[eid]->handler_cnt) {
if(data->event_table[eid]->handlers[i] == disp) {
IDispatch_Release(data->event_table[eid]->handlers[i]);
data->event_table[eid]->handlers[i] = NULL;
}
i++;
}
@ -1478,11 +1531,11 @@ HRESULT detach_event(event_target_t *event_target, HTMLDocument *doc, BSTR name,
return S_OK;
}
void bind_node_event(HTMLDocumentNode *doc, event_target_t **event_target, HTMLDOMNode *node, const WCHAR *event, IDispatch *disp)
void bind_target_event(HTMLDocumentNode *doc, EventTarget *event_target, const WCHAR *event, IDispatch *disp)
{
eventid_t eid;
TRACE("(%p %p %p %s %p)\n", doc, event_target, node, debugstr_w(event), disp);
TRACE("(%p %p %s %p)\n", doc, event_target, debugstr_w(event), disp);
eid = attr_to_eid(event);
if(eid == EVENTID_LAST) {
@ -1490,21 +1543,16 @@ void bind_node_event(HTMLDocumentNode *doc, event_target_t **event_target, HTMLD
return;
}
set_event_handler_disp(event_target, doc, eid, disp);
set_event_handler_disp(event_target, eid, disp);
}
void update_cp_events(HTMLInnerWindow *window, event_target_t **event_target_ptr, cp_static_data_t *cp)
void update_doc_cp_events(HTMLDocumentNode *doc, cp_static_data_t *cp)
{
event_target_t *event_target;
int i;
event_target = get_event_target(event_target_ptr);
if(!event_target)
return; /* FIXME */
for(i=0; i < EVENTID_LAST; i++) {
if((event_info[i].flags & EVENT_DEFAULTLISTENER) && is_cp_event(cp, event_info[i].dispid))
ensure_nsevent_handler(window->doc, event_target, i);
ensure_doc_nsevent_handler(doc, i);
}
}
@ -1530,7 +1578,7 @@ void check_event_attr(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem)
if(disp) {
hres = get_node(doc, (nsIDOMNode*)nselem, TRUE, &node);
if(SUCCEEDED(hres)) {
set_event_handler_disp(get_node_event_target(node), node->doc, i, disp);
set_event_handler_disp(&node->event_target, i, disp);
node_release(node);
}
IDispatch_Release(disp);
@ -1553,7 +1601,7 @@ HRESULT doc_init_events(HTMLDocumentNode *doc)
for(i=0; i < EVENTID_LAST; i++) {
if(event_info[i].flags & EVENT_HASDEFAULTHANDLERS) {
hres = ensure_nsevent_handler(doc, NULL, i);
hres = ensure_doc_nsevent_handler(doc, i);
if(FAILED(hres))
return hres;
}

View file

@ -56,36 +56,35 @@ eventid_t str_to_eid(LPCWSTR) DECLSPEC_HIDDEN;
void check_event_attr(HTMLDocumentNode*,nsIDOMHTMLElement*) DECLSPEC_HIDDEN;
void release_event_target(event_target_t*) DECLSPEC_HIDDEN;
void fire_event(HTMLDocumentNode*,eventid_t,BOOL,nsIDOMNode*,nsIDOMEvent*,IDispatch*) DECLSPEC_HIDDEN;
HRESULT set_event_handler(event_target_t**,HTMLDocumentNode*,eventid_t,VARIANT*) DECLSPEC_HIDDEN;
HRESULT get_event_handler(event_target_t**,eventid_t,VARIANT*) DECLSPEC_HIDDEN;
HRESULT attach_event(event_target_t**,HTMLDocument*,BSTR,IDispatch*,VARIANT_BOOL*) DECLSPEC_HIDDEN;
HRESULT detach_event(event_target_t*,HTMLDocument*,BSTR,IDispatch*) DECLSPEC_HIDDEN;
HRESULT set_event_handler(EventTarget*,eventid_t,VARIANT*) DECLSPEC_HIDDEN;
HRESULT get_event_handler(EventTarget*,eventid_t,VARIANT*) DECLSPEC_HIDDEN;
HRESULT attach_event(EventTarget*,BSTR,IDispatch*,VARIANT_BOOL*) DECLSPEC_HIDDEN;
HRESULT detach_event(EventTarget*,BSTR,IDispatch*) DECLSPEC_HIDDEN;
HRESULT dispatch_event(HTMLDOMNode*,const WCHAR*,VARIANT*,VARIANT_BOOL*) DECLSPEC_HIDDEN;
HRESULT call_fire_event(HTMLDOMNode*,eventid_t) DECLSPEC_HIDDEN;
void update_cp_events(HTMLInnerWindow*,event_target_t**,cp_static_data_t*) DECLSPEC_HIDDEN;
void update_doc_cp_events(HTMLDocumentNode*,cp_static_data_t*) DECLSPEC_HIDDEN;
HRESULT doc_init_events(HTMLDocumentNode*) DECLSPEC_HIDDEN;
void detach_events(HTMLDocumentNode *doc) DECLSPEC_HIDDEN;
HRESULT create_event_obj(IHTMLEventObj**) DECLSPEC_HIDDEN;
void bind_node_event(HTMLDocumentNode*,event_target_t**,HTMLDOMNode*,const WCHAR*,IDispatch*) DECLSPEC_HIDDEN;
void bind_target_event(HTMLDocumentNode*,EventTarget*,const WCHAR*,IDispatch*) DECLSPEC_HIDDEN;
HRESULT ensure_doc_nsevent_handler(HTMLDocumentNode*,eventid_t) DECLSPEC_HIDDEN;
typedef struct HTMLEventObj HTMLEventObj;
void call_event_handlers(HTMLDocumentNode*,HTMLEventObj*,EventTarget*,ConnectionPointContainer*,eventid_t,IDispatch*);
void init_nsevents(HTMLDocumentNode*) DECLSPEC_HIDDEN;
void release_nsevents(HTMLDocumentNode*) DECLSPEC_HIDDEN;
void add_nsevent_listener(HTMLDocumentNode*,nsIDOMNode*,LPCWSTR) DECLSPEC_HIDDEN;
void detach_nsevent(HTMLDocumentNode*,const WCHAR*) DECLSPEC_HIDDEN;
static inline event_target_t **get_node_event_target(HTMLDOMNode *node)
{
return node->vtbl->get_event_target ? node->vtbl->get_event_target(node) : &node->event_target;
}
static inline HRESULT set_node_event(HTMLDOMNode *node, eventid_t eid, VARIANT *var)
{
return set_event_handler(get_node_event_target(node), node->doc, eid, var);
return set_event_handler(&node->event_target, eid, var);
}
static inline HRESULT get_node_event(HTMLDOMNode *node, eventid_t eid, VARIANT *var)
{
return get_event_handler(get_node_event_target(node), eid, var);
return get_event_handler(&node->event_target, eid, var);
}
static inline HRESULT set_doc_event(HTMLDocument *doc, eventid_t eid, VARIANT *var)

View file

@ -91,14 +91,14 @@ static ULONG WINAPI HTMLFormElement_Release(IHTMLFormElement *iface)
static HRESULT WINAPI HTMLFormElement_GetTypeInfoCount(IHTMLFormElement *iface, UINT *pctinfo)
{
HTMLFormElement *This = impl_from_IHTMLFormElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLFormElement_GetTypeInfo(IHTMLFormElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLFormElement *This = impl_from_IHTMLFormElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -107,7 +107,7 @@ static HRESULT WINAPI HTMLFormElement_GetIDsOfNames(IHTMLFormElement *iface, REF
LCID lcid, DISPID *rgDispId)
{
HTMLFormElement *This = impl_from_IHTMLFormElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -116,7 +116,7 @@ static HRESULT WINAPI HTMLFormElement_Invoke(IHTMLFormElement *iface, DISPID dis
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLFormElement *This = impl_from_IHTMLFormElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -53,7 +53,7 @@ static ULONG WINAPI HTMLFrameElement3_Release(IHTMLFrameElement3 *iface)
static HRESULT WINAPI HTMLFrameElement3_GetTypeInfoCount(IHTMLFrameElement3 *iface, UINT *pctinfo)
{
HTMLFrameElement *This = impl_from_IHTMLFrameElement3(iface);
return IDispatchEx_GetTypeInfoCount(&This->framebase.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_GetTypeInfoCount(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface,
pctinfo);
}
@ -61,7 +61,7 @@ static HRESULT WINAPI HTMLFrameElement3_GetTypeInfo(IHTMLFrameElement3 *iface, U
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLFrameElement *This = impl_from_IHTMLFrameElement3(iface);
return IDispatchEx_GetTypeInfo(&This->framebase.element.node.dispex.IDispatchEx_iface, iTInfo,
return IDispatchEx_GetTypeInfo(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface, iTInfo,
lcid, ppTInfo);
}
@ -69,7 +69,7 @@ static HRESULT WINAPI HTMLFrameElement3_GetIDsOfNames(IHTMLFrameElement3 *iface,
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLFrameElement *This = impl_from_IHTMLFrameElement3(iface);
return IDispatchEx_GetIDsOfNames(&This->framebase.element.node.dispex.IDispatchEx_iface, riid,
return IDispatchEx_GetIDsOfNames(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface, riid,
rgszNames, cNames, lcid, rgDispId);
}
@ -78,7 +78,7 @@ static HRESULT WINAPI HTMLFrameElement3_Invoke(IHTMLFrameElement3 *iface, DISPID
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLFrameElement *This = impl_from_IHTMLFrameElement3(iface);
return IDispatchEx_Invoke(&This->framebase.element.node.dispex.IDispatchEx_iface, dispIdMember,
return IDispatchEx_Invoke(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface, dispIdMember,
riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -80,7 +80,7 @@ static HRESULT WINAPI HTMLFrameBase_GetTypeInfoCount(IHTMLFrameBase *iface, UINT
{
HTMLFrameBase *This = impl_from_IHTMLFrameBase(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLFrameBase_GetTypeInfo(IHTMLFrameBase *iface, UINT iTInfo,
@ -88,7 +88,7 @@ static HRESULT WINAPI HTMLFrameBase_GetTypeInfo(IHTMLFrameBase *iface, UINT iTIn
{
HTMLFrameBase *This = impl_from_IHTMLFrameBase(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -97,7 +97,7 @@ static HRESULT WINAPI HTMLFrameBase_GetIDsOfNames(IHTMLFrameBase *iface, REFIID
{
HTMLFrameBase *This = impl_from_IHTMLFrameBase(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -107,7 +107,7 @@ static HRESULT WINAPI HTMLFrameBase_Invoke(IHTMLFrameBase *iface, DISPID dispIdM
{
HTMLFrameBase *This = impl_from_IHTMLFrameBase(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -53,14 +53,14 @@ static ULONG WINAPI HTMLGenericElement_Release(IHTMLGenericElement *iface)
static HRESULT WINAPI HTMLGenericElement_GetTypeInfoCount(IHTMLGenericElement *iface, UINT *pctinfo)
{
HTMLGenericElement *This = impl_from_IHTMLGenericElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLGenericElement_GetTypeInfo(IHTMLGenericElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLGenericElement *This = impl_from_IHTMLGenericElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -68,7 +68,7 @@ static HRESULT WINAPI HTMLGenericElement_GetIDsOfNames(IHTMLGenericElement *ifac
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLGenericElement *This = impl_from_IHTMLGenericElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -77,7 +77,7 @@ static HRESULT WINAPI HTMLGenericElement_Invoke(IHTMLGenericElement *iface, DISP
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLGenericElement *This = impl_from_IHTMLGenericElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -55,7 +55,7 @@ static HRESULT WINAPI HTMLTitleElement_GetTypeInfoCount(IHTMLTitleElement *iface
{
HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLTitleElement_GetTypeInfo(IHTMLTitleElement *iface, UINT iTInfo,
@ -63,7 +63,7 @@ static HRESULT WINAPI HTMLTitleElement_GetTypeInfo(IHTMLTitleElement *iface, UIN
{
HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -72,7 +72,7 @@ static HRESULT WINAPI HTMLTitleElement_GetIDsOfNames(IHTMLTitleElement *iface, R
{
HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -82,7 +82,7 @@ static HRESULT WINAPI HTMLTitleElement_Invoke(IHTMLTitleElement *iface, DISPID d
{
HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -214,7 +214,7 @@ static HRESULT WINAPI HTMLHeadElement_GetTypeInfoCount(IHTMLHeadElement *iface,
{
HTMLHeadElement *This = impl_from_IHTMLHeadElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLHeadElement_GetTypeInfo(IHTMLHeadElement *iface, UINT iTInfo,
@ -222,7 +222,7 @@ static HRESULT WINAPI HTMLHeadElement_GetTypeInfo(IHTMLHeadElement *iface, UINT
{
HTMLHeadElement *This = impl_from_IHTMLHeadElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -232,7 +232,7 @@ static HRESULT WINAPI HTMLHeadElement_GetIDsOfNames(IHTMLHeadElement *iface, REF
{
HTMLHeadElement *This = impl_from_IHTMLHeadElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -242,7 +242,7 @@ static HRESULT WINAPI HTMLHeadElement_Invoke(IHTMLHeadElement *iface, DISPID dis
{
HTMLHeadElement *This = impl_from_IHTMLHeadElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -55,7 +55,7 @@ static ULONG WINAPI HTMLIFrameElement_Release(IHTMLIFrameElement *iface)
static HRESULT WINAPI HTMLIFrameElement_GetTypeInfoCount(IHTMLIFrameElement *iface, UINT *pctinfo)
{
HTMLIFrame *This = impl_from_IHTMLIFrameElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->framebase.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_GetTypeInfoCount(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface,
pctinfo);
}
@ -63,7 +63,7 @@ static HRESULT WINAPI HTMLIFrameElement_GetTypeInfo(IHTMLIFrameElement *iface, U
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLIFrame *This = impl_from_IHTMLIFrameElement(iface);
return IDispatchEx_GetTypeInfo(&This->framebase.element.node.dispex.IDispatchEx_iface, iTInfo,
return IDispatchEx_GetTypeInfo(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface, iTInfo,
lcid, ppTInfo);
}
@ -71,7 +71,7 @@ static HRESULT WINAPI HTMLIFrameElement_GetIDsOfNames(IHTMLIFrameElement *iface,
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLIFrame *This = impl_from_IHTMLIFrameElement(iface);
return IDispatchEx_GetIDsOfNames(&This->framebase.element.node.dispex.IDispatchEx_iface, riid,
return IDispatchEx_GetIDsOfNames(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface, riid,
rgszNames, cNames, lcid, rgDispId);
}
@ -80,7 +80,7 @@ static HRESULT WINAPI HTMLIFrameElement_Invoke(IHTMLIFrameElement *iface, DISPID
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLIFrame *This = impl_from_IHTMLIFrameElement(iface);
return IDispatchEx_Invoke(&This->framebase.element.node.dispex.IDispatchEx_iface, dispIdMember,
return IDispatchEx_Invoke(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface, dispIdMember,
riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -172,7 +172,7 @@ static ULONG WINAPI HTMLIFrameElement2_Release(IHTMLIFrameElement2 *iface)
static HRESULT WINAPI HTMLIFrameElement2_GetTypeInfoCount(IHTMLIFrameElement2 *iface, UINT *pctinfo)
{
HTMLIFrame *This = impl_from_IHTMLIFrameElement2(iface);
return IDispatchEx_GetTypeInfoCount(&This->framebase.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_GetTypeInfoCount(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface,
pctinfo);
}
@ -180,7 +180,7 @@ static HRESULT WINAPI HTMLIFrameElement2_GetTypeInfo(IHTMLIFrameElement2 *iface,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLIFrame *This = impl_from_IHTMLIFrameElement2(iface);
return IDispatchEx_GetTypeInfo(&This->framebase.element.node.dispex.IDispatchEx_iface, iTInfo,
return IDispatchEx_GetTypeInfo(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface, iTInfo,
lcid, ppTInfo);
}
@ -188,7 +188,7 @@ static HRESULT WINAPI HTMLIFrameElement2_GetIDsOfNames(IHTMLIFrameElement2 *ifac
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLIFrame *This = impl_from_IHTMLIFrameElement2(iface);
return IDispatchEx_GetIDsOfNames(&This->framebase.element.node.dispex.IDispatchEx_iface, riid,
return IDispatchEx_GetIDsOfNames(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface, riid,
rgszNames, cNames, lcid, rgDispId);
}
@ -197,7 +197,7 @@ static HRESULT WINAPI HTMLIFrameElement2_Invoke(IHTMLIFrameElement2 *iface, DISP
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLIFrame *This = impl_from_IHTMLIFrameElement2(iface);
return IDispatchEx_Invoke(&This->framebase.element.node.dispex.IDispatchEx_iface, dispIdMember,
return IDispatchEx_Invoke(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface, dispIdMember,
riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -323,7 +323,7 @@ static ULONG WINAPI HTMLIFrameElement3_Release(IHTMLIFrameElement3 *iface)
static HRESULT WINAPI HTMLIFrameElement3_GetTypeInfoCount(IHTMLIFrameElement3 *iface, UINT *pctinfo)
{
HTMLIFrame *This = impl_from_IHTMLIFrameElement3(iface);
return IDispatchEx_GetTypeInfoCount(&This->framebase.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_GetTypeInfoCount(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface,
pctinfo);
}
@ -331,7 +331,7 @@ static HRESULT WINAPI HTMLIFrameElement3_GetTypeInfo(IHTMLIFrameElement3 *iface,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLIFrame *This = impl_from_IHTMLIFrameElement3(iface);
return IDispatchEx_GetTypeInfo(&This->framebase.element.node.dispex.IDispatchEx_iface, iTInfo,
return IDispatchEx_GetTypeInfo(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface, iTInfo,
lcid, ppTInfo);
}
@ -339,7 +339,7 @@ static HRESULT WINAPI HTMLIFrameElement3_GetIDsOfNames(IHTMLIFrameElement3 *ifac
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLIFrame *This = impl_from_IHTMLIFrameElement3(iface);
return IDispatchEx_GetIDsOfNames(&This->framebase.element.node.dispex.IDispatchEx_iface, riid,
return IDispatchEx_GetIDsOfNames(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface, riid,
rgszNames, cNames, lcid, rgDispId);
}
@ -348,7 +348,7 @@ static HRESULT WINAPI HTMLIFrameElement3_Invoke(IHTMLIFrameElement3 *iface, DISP
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLIFrame *This = impl_from_IHTMLIFrameElement3(iface);
return IDispatchEx_Invoke(&This->framebase.element.node.dispex.IDispatchEx_iface, dispIdMember,
return IDispatchEx_Invoke(&This->framebase.element.node.event_target.dispex.IDispatchEx_iface, dispIdMember,
riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -55,14 +55,14 @@ static ULONG WINAPI HTMLImgElement_Release(IHTMLImgElement *iface)
static HRESULT WINAPI HTMLImgElement_GetTypeInfoCount(IHTMLImgElement *iface, UINT *pctinfo)
{
HTMLImgElement *This = impl_from_IHTMLImgElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLImgElement_GetTypeInfo(IHTMLImgElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLImgElement *This = impl_from_IHTMLImgElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -71,7 +71,7 @@ static HRESULT WINAPI HTMLImgElement_GetIDsOfNames(IHTMLImgElement *iface, REFII
LCID lcid, DISPID *rgDispId)
{
HTMLImgElement *This = impl_from_IHTMLImgElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -80,7 +80,7 @@ static HRESULT WINAPI HTMLImgElement_Invoke(IHTMLImgElement *iface, DISPID dispI
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLImgElement *This = impl_from_IHTMLImgElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -67,7 +67,7 @@ static HRESULT WINAPI HTMLInputElement_GetTypeInfoCount(IHTMLInputElement *iface
{
HTMLInputElement *This = impl_from_IHTMLInputElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLInputElement_GetTypeInfo(IHTMLInputElement *iface, UINT iTInfo,
@ -75,7 +75,7 @@ static HRESULT WINAPI HTMLInputElement_GetTypeInfo(IHTMLInputElement *iface, UIN
{
HTMLInputElement *This = impl_from_IHTMLInputElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -85,7 +85,7 @@ static HRESULT WINAPI HTMLInputElement_GetIDsOfNames(IHTMLInputElement *iface, R
{
HTMLInputElement *This = impl_from_IHTMLInputElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -95,7 +95,7 @@ static HRESULT WINAPI HTMLInputElement_Invoke(IHTMLInputElement *iface, DISPID d
{
HTMLInputElement *This = impl_from_IHTMLInputElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -908,14 +908,14 @@ static ULONG WINAPI HTMLInputTextElement_Release(IHTMLInputTextElement *iface)
static HRESULT WINAPI HTMLInputTextElement_GetTypeInfoCount(IHTMLInputTextElement *iface, UINT *pctinfo)
{
HTMLInputElement *This = impl_from_IHTMLInputTextElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLInputTextElement_GetTypeInfo(IHTMLInputTextElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLInputElement *This = impl_from_IHTMLInputTextElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -923,7 +923,7 @@ static HRESULT WINAPI HTMLInputTextElement_GetIDsOfNames(IHTMLInputTextElement *
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLInputElement *This = impl_from_IHTMLInputTextElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -932,7 +932,7 @@ static HRESULT WINAPI HTMLInputTextElement_Invoke(IHTMLInputTextElement *iface,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLInputElement *This = impl_from_IHTMLInputTextElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -1384,7 +1384,7 @@ static HRESULT WINAPI HTMLLabelElement_GetTypeInfoCount(IHTMLLabelElement *iface
{
HTMLLabelElement *This = impl_from_IHTMLLabelElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLLabelElement_GetTypeInfo(IHTMLLabelElement *iface, UINT iTInfo,
@ -1392,7 +1392,7 @@ static HRESULT WINAPI HTMLLabelElement_GetTypeInfo(IHTMLLabelElement *iface, UIN
{
HTMLLabelElement *This = impl_from_IHTMLLabelElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLLabelElement_GetIDsOfNames(IHTMLLabelElement *iface, REFIID riid,
@ -1400,7 +1400,7 @@ static HRESULT WINAPI HTMLLabelElement_GetIDsOfNames(IHTMLLabelElement *iface, R
{
HTMLLabelElement *This = impl_from_IHTMLLabelElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -1410,7 +1410,7 @@ static HRESULT WINAPI HTMLLabelElement_Invoke(IHTMLLabelElement *iface, DISPID d
{
HTMLLabelElement *This = impl_from_IHTMLLabelElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -1574,7 +1574,7 @@ static HRESULT WINAPI HTMLButtonElement_GetTypeInfoCount(IHTMLButtonElement *ifa
{
HTMLButtonElement *This = impl_from_IHTMLButtonElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLButtonElement_GetTypeInfo(IHTMLButtonElement *iface, UINT iTInfo,
@ -1582,7 +1582,7 @@ static HRESULT WINAPI HTMLButtonElement_GetTypeInfo(IHTMLButtonElement *iface, U
{
HTMLButtonElement *This = impl_from_IHTMLButtonElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLButtonElement_GetIDsOfNames(IHTMLButtonElement *iface, REFIID riid,
@ -1590,7 +1590,7 @@ static HRESULT WINAPI HTMLButtonElement_GetIDsOfNames(IHTMLButtonElement *iface,
{
HTMLButtonElement *This = impl_from_IHTMLButtonElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -1600,7 +1600,7 @@ static HRESULT WINAPI HTMLButtonElement_Invoke(IHTMLButtonElement *iface, DISPID
{
HTMLButtonElement *This = impl_from_IHTMLButtonElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -56,7 +56,7 @@ static HRESULT WINAPI HTMLLinkElement_GetTypeInfoCount(IHTMLLinkElement *iface,
{
HTMLLinkElement *This = impl_from_IHTMLLinkElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLLinkElement_GetTypeInfo(IHTMLLinkElement *iface, UINT iTInfo,
@ -64,7 +64,7 @@ static HRESULT WINAPI HTMLLinkElement_GetTypeInfo(IHTMLLinkElement *iface, UINT
{
HTMLLinkElement *This = impl_from_IHTMLLinkElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -74,7 +74,7 @@ static HRESULT WINAPI HTMLLinkElement_GetIDsOfNames(IHTMLLinkElement *iface, REF
{
HTMLLinkElement *This = impl_from_IHTMLLinkElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -84,7 +84,7 @@ static HRESULT WINAPI HTMLLinkElement_Invoke(IHTMLLinkElement *iface, DISPID dis
{
HTMLLinkElement *This = impl_from_IHTMLLinkElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -498,8 +498,15 @@ static HRESULT WINAPI HTMLLocation_get_search(IHTMLLocation *iface, BSTR *p)
static HRESULT WINAPI HTMLLocation_put_hash(IHTMLLocation *iface, BSTR v)
{
HTMLLocation *This = impl_from_IHTMLLocation(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
if(!This->window || !This->window->base.outer_window) {
FIXME("No window available\n");
return E_FAIL;
}
return navigate_url(This->window->base.outer_window, v, This->window->base.outer_window->uri, 0);
}
static HRESULT WINAPI HTMLLocation_get_hash(IHTMLLocation *iface, BSTR *p)

View file

@ -53,14 +53,14 @@ static ULONG WINAPI HTMLMetaElement_Release(IHTMLMetaElement *iface)
static HRESULT WINAPI HTMLMetaElement_GetTypeInfoCount(IHTMLMetaElement *iface, UINT *pctinfo)
{
HTMLMetaElement *This = impl_from_IHTMLMetaElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLMetaElement_GetTypeInfo(IHTMLMetaElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLMetaElement *This = impl_from_IHTMLMetaElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -68,7 +68,7 @@ static HRESULT WINAPI HTMLMetaElement_GetIDsOfNames(IHTMLMetaElement *iface, REF
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLMetaElement *This = impl_from_IHTMLMetaElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -77,7 +77,7 @@ static HRESULT WINAPI HTMLMetaElement_Invoke(IHTMLMetaElement *iface, DISPID dis
UINT *puArgErr)
{
HTMLMetaElement *This = impl_from_IHTMLMetaElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -486,14 +486,14 @@ static ULONG WINAPI HTMLDOMNode_Release(IHTMLDOMNode *iface)
static HRESULT WINAPI HTMLDOMNode_GetTypeInfoCount(IHTMLDOMNode *iface, UINT *pctinfo)
{
HTMLDOMNode *This = impl_from_IHTMLDOMNode(iface);
return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLDOMNode_GetTypeInfo(IHTMLDOMNode *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLDOMNode *This = impl_from_IHTMLDOMNode(iface);
return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
return IDispatchEx_GetTypeInfo(&This->event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLDOMNode_GetIDsOfNames(IHTMLDOMNode *iface, REFIID riid,
@ -501,7 +501,7 @@ static HRESULT WINAPI HTMLDOMNode_GetIDsOfNames(IHTMLDOMNode *iface, REFIID riid
LCID lcid, DISPID *rgDispId)
{
HTMLDOMNode *This = impl_from_IHTMLDOMNode(iface);
return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
return IDispatchEx_GetIDsOfNames(&This->event_target.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
lcid, rgDispId);
}
@ -510,7 +510,7 @@ static HRESULT WINAPI HTMLDOMNode_Invoke(IHTMLDOMNode *iface, DISPID dispIdMembe
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLDOMNode *This = impl_from_IHTMLDOMNode(iface);
return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
return IDispatchEx_Invoke(&This->event_target.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -1084,14 +1084,14 @@ static ULONG WINAPI HTMLDOMNode2_Release(IHTMLDOMNode2 *iface)
static HRESULT WINAPI HTMLDOMNode2_GetTypeInfoCount(IHTMLDOMNode2 *iface, UINT *pctinfo)
{
HTMLDOMNode *This = impl_from_IHTMLDOMNode2(iface);
return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLDOMNode2_GetTypeInfo(IHTMLDOMNode2 *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLDOMNode *This = impl_from_IHTMLDOMNode2(iface);
return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
return IDispatchEx_GetTypeInfo(&This->event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLDOMNode2_GetIDsOfNames(IHTMLDOMNode2 *iface, REFIID riid,
@ -1099,7 +1099,7 @@ static HRESULT WINAPI HTMLDOMNode2_GetIDsOfNames(IHTMLDOMNode2 *iface, REFIID ri
LCID lcid, DISPID *rgDispId)
{
HTMLDOMNode *This = impl_from_IHTMLDOMNode2(iface);
return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
return IDispatchEx_GetIDsOfNames(&This->event_target.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
lcid, rgDispId);
}
@ -1108,7 +1108,7 @@ static HRESULT WINAPI HTMLDOMNode2_Invoke(IHTMLDOMNode2 *iface, DISPID dispIdMem
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLDOMNode *This = impl_from_IHTMLDOMNode2(iface);
return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
return IDispatchEx_Invoke(&This->event_target.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -1147,8 +1147,6 @@ HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv)
*ppv = &This->IHTMLDOMNode_iface;
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
*ppv = &This->IHTMLDOMNode_iface;
}else if(IsEqualGUID(&IID_IDispatchEx, riid) && This->dispex.data) {
*ppv = &This->dispex.IDispatchEx_iface;
}else if(IsEqualGUID(&IID_IHTMLDOMNode, riid)) {
*ppv = &This->IHTMLDOMNode_iface;
}else if(IsEqualGUID(&IID_IHTMLDOMNode2, riid)) {
@ -1159,7 +1157,7 @@ HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv)
}else if(IsEqualGUID(&IID_nsCycleCollectionISupports, riid)) {
*ppv = &This->IHTMLDOMNode_iface;
return NS_OK;
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
}else if(dispex_query_interface(&This->event_target.dispex, riid, ppv)) {
return *ppv ? S_OK : E_NOINTERFACE;
}else {
*ppv = NULL;
@ -1177,8 +1175,8 @@ void HTMLDOMNode_destructor(HTMLDOMNode *This)
nsIDOMNode_Release(This->nsnode);
if(This->doc && &This->doc->node != This)
htmldoc_release(&This->doc->basedoc);
if(This->event_target)
release_event_target(This->event_target);
if(This->event_target.ptr)
release_event_target(This->event_target.ptr);
}
static HRESULT HTMLDOMNode_clone(HTMLDOMNode *This, nsIDOMNode *nsnode, HTMLDOMNode **ret)
@ -1278,7 +1276,7 @@ static nsresult NSAPI HTMLDOMNode_traverse(void *ccp, void *p, nsCycleCollection
note_cc_edge((nsISupports*)This->nsnode, "This->nsnode", cb);
if(This->doc && &This->doc->node != This)
note_cc_edge((nsISupports*)&This->doc->node.IHTMLDOMNode_iface, "This->doc", cb);
dispex_traverse(&This->dispex, cb);
dispex_traverse(&This->event_target.dispex, cb);
if(This->vtbl->traverse)
This->vtbl->traverse(This, cb);
@ -1295,7 +1293,7 @@ static nsresult NSAPI HTMLDOMNode_unlink(void *p)
if(This->vtbl->unlink)
This->vtbl->unlink(This);
dispex_unlink(&This->dispex);
dispex_unlink(&This->event_target.dispex);
if(This->nsnode) {
nsIDOMNode *nsnode = This->nsnode;
@ -1323,7 +1321,7 @@ static void NSAPI HTMLDOMNode_delete_cycle_collectable(void *p)
if(This->vtbl->unlink)
This->vtbl->unlink(This);
This->vtbl->destructor(This);
release_dispex(&This->dispex);
release_dispex(&This->event_target.dispex);
heap_free(This);
}

View file

@ -58,7 +58,7 @@ static ULONG WINAPI HTMLObjectElement_Release(IHTMLObjectElement *iface)
static HRESULT WINAPI HTMLObjectElement_GetTypeInfoCount(IHTMLObjectElement *iface, UINT *pctinfo)
{
HTMLObjectElement *This = impl_from_IHTMLObjectElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->plugin_container.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_GetTypeInfoCount(&This->plugin_container.element.node.event_target.dispex.IDispatchEx_iface,
pctinfo);
}
@ -66,7 +66,7 @@ static HRESULT WINAPI HTMLObjectElement_GetTypeInfo(IHTMLObjectElement *iface, U
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLObjectElement *This = impl_from_IHTMLObjectElement(iface);
return IDispatchEx_GetTypeInfo(&This->plugin_container.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_GetTypeInfo(&This->plugin_container.element.node.event_target.dispex.IDispatchEx_iface,
iTInfo, lcid, ppTInfo);
}
@ -75,7 +75,7 @@ static HRESULT WINAPI HTMLObjectElement_GetIDsOfNames(IHTMLObjectElement *iface,
LCID lcid, DISPID *rgDispId)
{
HTMLObjectElement *This = impl_from_IHTMLObjectElement(iface);
return IDispatchEx_GetIDsOfNames(&This->plugin_container.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_GetIDsOfNames(&This->plugin_container.element.node.event_target.dispex.IDispatchEx_iface,
riid, rgszNames, cNames, lcid, rgDispId);
}
@ -84,7 +84,7 @@ static HRESULT WINAPI HTMLObjectElement_Invoke(IHTMLObjectElement *iface, DISPID
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLObjectElement *This = impl_from_IHTMLObjectElement(iface);
return IDispatchEx_Invoke(&This->plugin_container.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_Invoke(&This->plugin_container.element.node.event_target.dispex.IDispatchEx_iface,
dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -519,7 +519,7 @@ static ULONG WINAPI HTMLObjectElement2_Release(IHTMLObjectElement2 *iface)
static HRESULT WINAPI HTMLObjectElement2_GetTypeInfoCount(IHTMLObjectElement2 *iface, UINT *pctinfo)
{
HTMLObjectElement *This = impl_from_IHTMLObjectElement2(iface);
return IDispatchEx_GetTypeInfoCount(&This->plugin_container.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_GetTypeInfoCount(&This->plugin_container.element.node.event_target.dispex.IDispatchEx_iface,
pctinfo);
}
@ -527,7 +527,7 @@ static HRESULT WINAPI HTMLObjectElement2_GetTypeInfo(IHTMLObjectElement2 *iface,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLObjectElement *This = impl_from_IHTMLObjectElement2(iface);
return IDispatchEx_GetTypeInfo(&This->plugin_container.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_GetTypeInfo(&This->plugin_container.element.node.event_target.dispex.IDispatchEx_iface,
iTInfo, lcid, ppTInfo);
}
@ -535,7 +535,7 @@ static HRESULT WINAPI HTMLObjectElement2_GetIDsOfNames(IHTMLObjectElement2 *ifac
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLObjectElement *This = impl_from_IHTMLObjectElement2(iface);
return IDispatchEx_GetIDsOfNames(&This->plugin_container.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_GetIDsOfNames(&This->plugin_container.element.node.event_target.dispex.IDispatchEx_iface,
riid, rgszNames, cNames, lcid, rgDispId);
}
@ -544,7 +544,7 @@ static HRESULT WINAPI HTMLObjectElement2_Invoke(IHTMLObjectElement2 *iface, DISP
EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLObjectElement *This = impl_from_IHTMLObjectElement2(iface);
return IDispatchEx_Invoke(&This->plugin_container.element.node.dispex.IDispatchEx_iface,
return IDispatchEx_Invoke(&This->plugin_container.element.node.event_target.dispex.IDispatchEx_iface,
dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -570,7 +570,7 @@ static HRESULT WINAPI HTMLObjectElement2_put_classid(IHTMLObjectElement2 *iface,
return hres;
if(This->plugin_container.plugin_host) {
FIXME("Host already asociated.\n");
FIXME("Host already associated.\n");
return E_NOTIMPL;
}
@ -629,21 +629,20 @@ static HRESULT HTMLObjectElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
{
HTMLObjectElement *This = impl_from_HTMLDOMNode(iface);
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
if(IsEqualGUID(&IID_IUnknown, riid)) {
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
*ppv = &This->IHTMLObjectElement_iface;
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
*ppv = &This->IHTMLObjectElement_iface;
}else if(IsEqualGUID(&IID_IHTMLObjectElement, riid)) {
TRACE("(%p)->(IID_IHTMLObjectElement %p)\n", This, ppv);
*ppv = &This->IHTMLObjectElement_iface;
}else if(IsEqualGUID(&IID_IHTMLObjectElement2, riid)) {
TRACE("(%p)->(IID_IHTMLObjectElement2 %p)\n", This, ppv);
*ppv = &This->IHTMLObjectElement2_iface;
}else if(IsEqualGUID(&IID_HTMLPluginContainer, riid)) {
TRACE("(%p)->(IID_HTMLPluginContainer %p)\n", This, ppv);
/* Special pseudo-interface returning HTMLPluginContainse struct. */
*ppv = &This->plugin_container;
node_addref(&This->plugin_container.element.node);
return S_OK;
}else {
HRESULT hres;

View file

@ -56,14 +56,14 @@ static ULONG WINAPI HTMLOptionElement_Release(IHTMLOptionElement *iface)
static HRESULT WINAPI HTMLOptionElement_GetTypeInfoCount(IHTMLOptionElement *iface, UINT *pctinfo)
{
HTMLOptionElement *This = impl_from_IHTMLOptionElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLOptionElement_GetTypeInfo(IHTMLOptionElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLOptionElement *This = impl_from_IHTMLOptionElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -72,7 +72,7 @@ static HRESULT WINAPI HTMLOptionElement_GetIDsOfNames(IHTMLOptionElement *iface,
LCID lcid, DISPID *rgDispId)
{
HTMLOptionElement *This = impl_from_IHTMLOptionElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -81,7 +81,7 @@ static HRESULT WINAPI HTMLOptionElement_Invoke(IHTMLOptionElement *iface, DISPID
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLOptionElement *This = impl_from_IHTMLOptionElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -152,15 +152,53 @@ static HRESULT WINAPI HTMLOptionElement_get_value(IHTMLOptionElement *iface, BST
static HRESULT WINAPI HTMLOptionElement_put_defaultSelected(IHTMLOptionElement *iface, VARIANT_BOOL v)
{
HTMLOptionElement *This = impl_from_IHTMLOptionElement(iface);
FIXME("(%p)->(%x)\n", This, v);
return E_NOTIMPL;
cpp_bool val, selected;
nsresult nsres;
TRACE("(%p)->(%x)\n", This, v);
val = (v == VARIANT_TRUE);
nsres = nsIDOMHTMLOptionElement_GetSelected(This->nsoption, &selected);
if(NS_FAILED(nsres)) {
ERR("GetSelected failed: %08x\n", nsres);
return E_FAIL;
}
nsres = nsIDOMHTMLOptionElement_SetDefaultSelected(This->nsoption, val);
if(NS_FAILED(nsres)) {
ERR("SetDefaultSelected failed: %08x\n", nsres);
return E_FAIL;
}
if(val != selected) {
nsres = nsIDOMHTMLOptionElement_SetSelected(This->nsoption, selected); /* WinAPI will reserve selected property */
if(NS_FAILED(nsres)) {
ERR("SetSelected failed: %08x\n", nsres);
return E_FAIL;
}
}
return S_OK;
}
static HRESULT WINAPI HTMLOptionElement_get_defaultSelected(IHTMLOptionElement *iface, VARIANT_BOOL *p)
{
HTMLOptionElement *This = impl_from_IHTMLOptionElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
cpp_bool val;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
if(!p)
return E_POINTER;
nsres = nsIDOMHTMLOptionElement_GetDefaultSelected(This->nsoption, &val);
if(NS_FAILED(nsres)) {
ERR("GetDefaultSelected failed: %08x\n", nsres);
return E_FAIL;
}
*p = val ? VARIANT_TRUE : VARIANT_FALSE;
return S_OK;
}
static HRESULT WINAPI HTMLOptionElement_put_index(IHTMLOptionElement *iface, LONG v)
@ -173,8 +211,21 @@ static HRESULT WINAPI HTMLOptionElement_put_index(IHTMLOptionElement *iface, LON
static HRESULT WINAPI HTMLOptionElement_get_index(IHTMLOptionElement *iface, LONG *p)
{
HTMLOptionElement *This = impl_from_IHTMLOptionElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
LONG val;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
if(!p)
return E_INVALIDARG;
nsres = nsIDOMHTMLOptionElement_GetIndex(This->nsoption, &val);
if(NS_FAILED(nsres)) {
ERR("GetIndex failed: %08x\n", nsres);
return E_FAIL;
}
*p = val;
return S_OK;
}
static HRESULT WINAPI HTMLOptionElement_put_text(IHTMLOptionElement *iface, BSTR v)
@ -242,8 +293,42 @@ static HRESULT WINAPI HTMLOptionElement_get_text(IHTMLOptionElement *iface, BSTR
static HRESULT WINAPI HTMLOptionElement_get_form(IHTMLOptionElement *iface, IHTMLFormElement **p)
{
HTMLOptionElement *This = impl_from_IHTMLOptionElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
nsIDOMHTMLFormElement *nsform;
nsIDOMNode *form_node;
HTMLDOMNode *node;
HRESULT hres;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
if(!p)
return E_POINTER;
nsres = nsIDOMHTMLOptionElement_GetForm(This->nsoption, &nsform);
if (NS_FAILED(nsres)) {
ERR("GetForm failed: %08x, nsform: %p\n", nsres, nsform);
*p = NULL;
return E_FAIL;
}
if (nsform == NULL) {
TRACE("nsform not found\n");
*p = NULL;
return S_OK;
}
nsres = nsIDOMHTMLFormElement_QueryInterface(nsform, &IID_nsIDOMNode, (void**)&form_node);
nsIDOMHTMLFormElement_Release(nsform);
assert(nsres == NS_OK);
hres = get_node(This->element.node.doc, form_node, TRUE, &node);
nsIDOMNode_Release(form_node);
if (FAILED(hres))
return hres;
hres = IHTMLDOMNode_QueryInterface(&node->IHTMLDOMNode_iface, &IID_IHTMLElement, (void**)p);
node_release(node);
return hres;
}
static const IHTMLOptionElementVtbl HTMLOptionElementVtbl = {

View file

@ -48,14 +48,14 @@ static ULONG WINAPI HTMLScriptElement_Release(IHTMLScriptElement *iface)
static HRESULT WINAPI HTMLScriptElement_GetTypeInfoCount(IHTMLScriptElement *iface, UINT *pctinfo)
{
HTMLScriptElement *This = impl_from_IHTMLScriptElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLScriptElement_GetTypeInfo(IHTMLScriptElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLScriptElement *This = impl_from_IHTMLScriptElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -64,7 +64,7 @@ static HRESULT WINAPI HTMLScriptElement_GetIDsOfNames(IHTMLScriptElement *iface,
LCID lcid, DISPID *rgDispId)
{
HTMLScriptElement *This = impl_from_IHTMLScriptElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -73,7 +73,7 @@ static HRESULT WINAPI HTMLScriptElement_Invoke(IHTMLScriptElement *iface, DISPID
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLScriptElement *This = impl_from_IHTMLScriptElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -92,7 +92,7 @@ static HRESULT WINAPI HTMLSelectElement_GetTypeInfoCount(IHTMLSelectElement *ifa
{
HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLSelectElement_GetTypeInfo(IHTMLSelectElement *iface, UINT iTInfo,
@ -100,7 +100,7 @@ static HRESULT WINAPI HTMLSelectElement_GetTypeInfo(IHTMLSelectElement *iface, U
{
HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -110,7 +110,7 @@ static HRESULT WINAPI HTMLSelectElement_GetIDsOfNames(IHTMLSelectElement *iface,
{
HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -120,22 +120,44 @@ static HRESULT WINAPI HTMLSelectElement_Invoke(IHTMLSelectElement *iface, DISPID
{
HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
static HRESULT WINAPI HTMLSelectElement_put_size(IHTMLSelectElement *iface, LONG v)
{
HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface);
FIXME("(%p)->(%d)\n", This, v);
return E_NOTIMPL;
nsresult nsres;
TRACE("(%p)->(%d)\n", This, v);
if(v < 0)
return CTL_E_INVALIDPROPERTYVALUE;
nsres = nsIDOMHTMLSelectElement_SetSize(This->nsselect, v);
if(NS_FAILED(nsres)) {
ERR("SetSize failed: %08x\n", nsres);
return E_FAIL;
}
return S_OK;
}
static HRESULT WINAPI HTMLSelectElement_get_size(IHTMLSelectElement *iface, LONG *p)
{
HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
DWORD val;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
if(!p)
return E_INVALIDARG;
nsres = nsIDOMHTMLSelectElement_GetSize(This->nsselect, &val);
if(NS_FAILED(nsres)) {
ERR("GetSize failed: %08x\n", nsres);
return E_FAIL;
}
*p = val;
return S_OK;
}
static HRESULT WINAPI HTMLSelectElement_put_multiple(IHTMLSelectElement *iface, VARIANT_BOOL v)
@ -168,40 +190,33 @@ static HRESULT WINAPI HTMLSelectElement_get_multiple(IHTMLSelectElement *iface,
static HRESULT WINAPI HTMLSelectElement_put_name(IHTMLSelectElement *iface, BSTR v)
{
HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
nsAString str;
nsresult nsres;
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
nsAString_InitDepend(&str, v);
nsres = nsIDOMHTMLSelectElement_SetName(This->nsselect, &str);
nsAString_Finish(&str);
if(NS_FAILED(nsres)) {
ERR("SetName failed: %08x\n", nsres);
return E_FAIL;
}
return S_OK;
}
static HRESULT WINAPI HTMLSelectElement_get_name(IHTMLSelectElement *iface, BSTR *p)
{
HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface);
nsAString name_str;
const PRUnichar *name = NULL;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
nsAString_Init(&name_str, NULL);
nsres = nsIDOMHTMLSelectElement_GetName(This->nsselect, &name_str);
if(NS_SUCCEEDED(nsres)) {
static const WCHAR wszGarbage[] = {'g','a','r','b','a','g','e',0};
nsAString_GetData(&name_str, &name);
/*
* Native never returns empty string here. If an element has no name,
* name of previous element or ramdom data is returned.
*/
*p = SysAllocString(*name ? name : wszGarbage);
}else {
ERR("GetName failed: %08x\n", nsres);
}
nsAString_Finish(&name_str);
TRACE("name=%s\n", debugstr_w(*p));
return S_OK;
return return_nsstr(nsres, &name_str, p);
}
static HRESULT WINAPI HTMLSelectElement_get_options(IHTMLSelectElement *iface, IDispatch **p)
@ -341,8 +356,42 @@ static HRESULT WINAPI HTMLSelectElement_get_disabled(IHTMLSelectElement *iface,
static HRESULT WINAPI HTMLSelectElement_get_form(IHTMLSelectElement *iface, IHTMLFormElement **p)
{
HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
nsIDOMHTMLFormElement *nsform;
nsIDOMNode *form_node;
HTMLDOMNode *node;
HRESULT hres;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
if(!p)
return E_POINTER;
nsres = nsIDOMHTMLSelectElement_GetForm(This->nsselect, &nsform);
if (NS_FAILED(nsres)) {
ERR("GetForm failed: %08x, nsform: %p\n", nsres, nsform);
*p = NULL;
return E_FAIL;
}
if (nsform == NULL) {
TRACE("nsform not found\n");
*p = NULL;
return S_OK;
}
nsres = nsIDOMHTMLFormElement_QueryInterface(nsform, &IID_nsIDOMNode, (void**)&form_node);
nsIDOMHTMLFormElement_Release(nsform);
assert(nsres == NS_OK);
hres = get_node(This->element.node.doc, form_node, TRUE, &node);
nsIDOMNode_Release(form_node);
if (FAILED(hres))
return hres;
hres = IHTMLDOMNode_QueryInterface(&node->IHTMLDOMNode_iface, &IID_IHTMLElement, (void**)p);
node_release(node);
return hres;
}
static HRESULT WINAPI HTMLSelectElement_add(IHTMLSelectElement *iface, IHTMLElement *element,
@ -395,6 +444,9 @@ static HRESULT WINAPI HTMLSelectElement_remove(IHTMLSelectElement *iface, LONG i
HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface);
nsresult nsres;
TRACE("(%p)->(%d)\n", This, index);
if(index < 0)
return E_INVALIDARG;
nsres = nsIDOMHTMLSelectElement_select_Remove(This->nsselect, index);
if(NS_FAILED(nsres)) {
ERR("Remove failed: %08x\n", nsres);

View file

@ -388,7 +388,7 @@ HRESULT set_nsstyle_attr(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, cons
if(value) {
if(flags & ATTR_FIX_PX)
val = fix_px_value(value);
if(flags & ATTR_FIX_URL)
else if(flags & ATTR_FIX_URL)
val = fix_url_value(value);
}

View file

@ -546,7 +546,7 @@ static HRESULT WINAPI HTMLStyle5_get_maxHeight(IHTMLStyle5 *iface, VARIANT *p)
{
HTMLStyle *This = impl_from_IHTMLStyle5(iface);
TRACE("(%p)->(%p)\n", This, debugstr_variant(p));
TRACE("(%p)->(%s)\n", This, debugstr_variant(p));
return get_nsstyle_attr_var(This->nsstyle, STYLEID_MAX_HEIGHT, p, 0);
}

View file

@ -57,14 +57,14 @@ static ULONG WINAPI HTMLStyleElement_Release(IHTMLStyleElement *iface)
static HRESULT WINAPI HTMLStyleElement_GetTypeInfoCount(IHTMLStyleElement *iface, UINT *pctinfo)
{
HTMLStyleElement *This = impl_from_IHTMLStyleElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLStyleElement_GetTypeInfo(IHTMLStyleElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLStyleElement *This = impl_from_IHTMLStyleElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -72,7 +72,7 @@ static HRESULT WINAPI HTMLStyleElement_GetIDsOfNames(IHTMLStyleElement *iface, R
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLStyleElement *This = impl_from_IHTMLStyleElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -81,7 +81,7 @@ static HRESULT WINAPI HTMLStyleElement_Invoke(IHTMLStyleElement *iface, DISPID d
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLStyleElement *This = impl_from_IHTMLStyleElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -119,14 +119,14 @@ static ULONG WINAPI HTMLTable_Release(IHTMLTable *iface)
static HRESULT WINAPI HTMLTable_GetTypeInfoCount(IHTMLTable *iface, UINT *pctinfo)
{
HTMLTable *This = impl_from_IHTMLTable(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLTable_GetTypeInfo(IHTMLTable *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLTable *This = impl_from_IHTMLTable(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -135,7 +135,7 @@ static HRESULT WINAPI HTMLTable_GetIDsOfNames(IHTMLTable *iface, REFIID riid,
LCID lcid, DISPID *rgDispId)
{
HTMLTable *This = impl_from_IHTMLTable(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -144,7 +144,7 @@ static HRESULT WINAPI HTMLTable_Invoke(IHTMLTable *iface, DISPID dispIdMember,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLTable *This = impl_from_IHTMLTable(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -792,14 +792,14 @@ static ULONG WINAPI HTMLTable2_Release(IHTMLTable2 *iface)
static HRESULT WINAPI HTMLTable2_GetTypeInfoCount(IHTMLTable2 *iface, UINT *pctinfo)
{
HTMLTable *This = impl_from_IHTMLTable2(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLTable2_GetTypeInfo(IHTMLTable2 *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLTable *This = impl_from_IHTMLTable2(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -808,7 +808,7 @@ static HRESULT WINAPI HTMLTable2_GetIDsOfNames(IHTMLTable2 *iface, REFIID riid,
LCID lcid, DISPID *rgDispId)
{
HTMLTable *This = impl_from_IHTMLTable2(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -817,7 +817,7 @@ static HRESULT WINAPI HTMLTable2_Invoke(IHTMLTable2 *iface, DISPID dispIdMember,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLTable *This = impl_from_IHTMLTable2(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -890,14 +890,14 @@ static ULONG WINAPI HTMLTable3_Release(IHTMLTable3 *iface)
static HRESULT WINAPI HTMLTable3_GetTypeInfoCount(IHTMLTable3 *iface, UINT *pctinfo)
{
HTMLTable *This = impl_from_IHTMLTable3(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLTable3_GetTypeInfo(IHTMLTable3 *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLTable *This = impl_from_IHTMLTable3(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -906,7 +906,7 @@ static HRESULT WINAPI HTMLTable3_GetIDsOfNames(IHTMLTable3 *iface, REFIID riid,
LCID lcid, DISPID *rgDispId)
{
HTMLTable *This = impl_from_IHTMLTable3(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -915,7 +915,7 @@ static HRESULT WINAPI HTMLTable3_Invoke(IHTMLTable3 *iface, DISPID dispIdMember,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLTable *This = impl_from_IHTMLTable3(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -55,14 +55,14 @@ static ULONG WINAPI HTMLTableCell_Release(IHTMLTableCell *iface)
static HRESULT WINAPI HTMLTableCell_GetTypeInfoCount(IHTMLTableCell *iface, UINT *pctinfo)
{
HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLTableCell_GetTypeInfo(IHTMLTableCell *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -70,7 +70,7 @@ static HRESULT WINAPI HTMLTableCell_GetIDsOfNames(IHTMLTableCell *iface, REFIID
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -79,7 +79,7 @@ static HRESULT WINAPI HTMLTableCell_Invoke(IHTMLTableCell *iface, DISPID dispIdM
UINT *puArgErr)
{
HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -56,14 +56,14 @@ static ULONG WINAPI HTMLTableRow_Release(IHTMLTableRow *iface)
static HRESULT WINAPI HTMLTableRow_GetTypeInfoCount(IHTMLTableRow *iface, UINT *pctinfo)
{
HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLTableRow_GetTypeInfo(IHTMLTableRow *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -72,7 +72,7 @@ static HRESULT WINAPI HTMLTableRow_GetIDsOfNames(IHTMLTableRow *iface, REFIID ri
LCID lcid, DISPID *rgDispId)
{
HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -81,7 +81,7 @@ static HRESULT WINAPI HTMLTableRow_Invoke(IHTMLTableRow *iface, DISPID dispIdMem
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -56,14 +56,14 @@ static ULONG WINAPI HTMLTextAreaElement_Release(IHTMLTextAreaElement *iface)
static HRESULT WINAPI HTMLTextAreaElement_GetTypeInfoCount(IHTMLTextAreaElement *iface, UINT *pctinfo)
{
HTMLTextAreaElement *This = impl_from_IHTMLTextAreaElement(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLTextAreaElement_GetTypeInfo(IHTMLTextAreaElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLTextAreaElement *This = impl_from_IHTMLTextAreaElement(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -72,7 +72,7 @@ static HRESULT WINAPI HTMLTextAreaElement_GetIDsOfNames(IHTMLTextAreaElement *if
LCID lcid, DISPID *rgDispId)
{
HTMLTextAreaElement *This = impl_from_IHTMLTextAreaElement(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -81,7 +81,7 @@ static HRESULT WINAPI HTMLTextAreaElement_Invoke(IHTMLTextAreaElement *iface, DI
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLTextAreaElement *This = impl_from_IHTMLTextAreaElement(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -215,15 +215,28 @@ static HRESULT WINAPI HTMLTextAreaElement_get_form(IHTMLTextAreaElement *iface,
static HRESULT WINAPI HTMLTextAreaElement_put_defaultValue(IHTMLTextAreaElement *iface, BSTR v)
{
HTMLTextAreaElement *This = impl_from_IHTMLTextAreaElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
nsAString nsstr;
nsresult nsres;
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
nsAString_InitDepend(&nsstr, v);
nsres = nsIDOMHTMLTextAreaElement_SetDefaultValue(This->nstextarea, &nsstr);
nsAString_Finish(&nsstr);
return NS_SUCCEEDED(nsres) ? S_OK : E_FAIL;
}
static HRESULT WINAPI HTMLTextAreaElement_get_defaultValue(IHTMLTextAreaElement *iface, BSTR *p)
{
HTMLTextAreaElement *This = impl_from_IHTMLTextAreaElement(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
nsAString nsstr;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
nsAString_Init(&nsstr, NULL);
nsres = nsIDOMHTMLTextAreaElement_GetDefaultValue(This->nstextarea, &nsstr);
return return_nsstr(nsres, &nsstr, p);
}
static HRESULT WINAPI HTMLTextAreaElement_select(IHTMLTextAreaElement *iface)

View file

@ -45,14 +45,14 @@ static ULONG WINAPI HTMLTextContainer_Release(IHTMLTextContainer *iface)
static HRESULT WINAPI HTMLTextContainer_GetTypeInfoCount(IHTMLTextContainer *iface, UINT *pctinfo)
{
HTMLTextContainer *This = impl_from_IHTMLTextContainer(iface);
return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLTextContainer_GetTypeInfo(IHTMLTextContainer *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLTextContainer *This = impl_from_IHTMLTextContainer(iface);
return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
ppTInfo);
}
@ -61,7 +61,7 @@ static HRESULT WINAPI HTMLTextContainer_GetIDsOfNames(IHTMLTextContainer *iface,
LCID lcid, DISPID *rgDispId)
{
HTMLTextContainer *This = impl_from_IHTMLTextContainer(iface);
return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
@ -70,7 +70,7 @@ static HRESULT WINAPI HTMLTextContainer_Invoke(IHTMLTextContainer *iface, DISPID
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLTextContainer *This = impl_from_IHTMLTextContainer(iface);
return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}

View file

@ -56,14 +56,14 @@ static ULONG WINAPI HTMLDOMTextNode_Release(IHTMLDOMTextNode *iface)
static HRESULT WINAPI HTMLDOMTextNode_GetTypeInfoCount(IHTMLDOMTextNode *iface, UINT *pctinfo)
{
HTMLDOMTextNode *This = impl_from_IHTMLDOMTextNode(iface);
return IDispatchEx_GetTypeInfoCount(&This->node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLDOMTextNode_GetTypeInfo(IHTMLDOMTextNode *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLDOMTextNode *This = impl_from_IHTMLDOMTextNode(iface);
return IDispatchEx_GetTypeInfo(&This->node.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
return IDispatchEx_GetTypeInfo(&This->node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLDOMTextNode_GetIDsOfNames(IHTMLDOMTextNode *iface, REFIID riid,
@ -71,7 +71,7 @@ static HRESULT WINAPI HTMLDOMTextNode_GetIDsOfNames(IHTMLDOMTextNode *iface, REF
LCID lcid, DISPID *rgDispId)
{
HTMLDOMTextNode *This = impl_from_IHTMLDOMTextNode(iface);
return IDispatchEx_GetIDsOfNames(&This->node.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
return IDispatchEx_GetIDsOfNames(&This->node.event_target.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
lcid, rgDispId);
}
@ -80,7 +80,7 @@ static HRESULT WINAPI HTMLDOMTextNode_Invoke(IHTMLDOMTextNode *iface, DISPID dis
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLDOMTextNode *This = impl_from_IHTMLDOMTextNode(iface);
return IDispatchEx_Invoke(&This->node.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
return IDispatchEx_Invoke(&This->node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -208,21 +208,21 @@ static ULONG WINAPI HTMLDOMTextNode2_Release(IHTMLDOMTextNode2 *iface)
static HRESULT WINAPI HTMLDOMTextNode2_GetTypeInfoCount(IHTMLDOMTextNode2 *iface, UINT *pctinfo)
{
HTMLDOMTextNode *This = impl_from_IHTMLDOMTextNode2(iface);
return IDispatchEx_GetTypeInfoCount(&This->node.dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->node.event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLDOMTextNode2_GetTypeInfo(IHTMLDOMTextNode2 *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLDOMTextNode *This = impl_from_IHTMLDOMTextNode2(iface);
return IDispatchEx_GetTypeInfo(&This->node.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
return IDispatchEx_GetTypeInfo(&This->node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLDOMTextNode2_GetIDsOfNames(IHTMLDOMTextNode2 *iface, REFIID riid,
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLDOMTextNode *This = impl_from_IHTMLDOMTextNode2(iface);
return IDispatchEx_GetIDsOfNames(&This->node.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
return IDispatchEx_GetIDsOfNames(&This->node.event_target.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
lcid, rgDispId);
}
@ -231,7 +231,7 @@ static HRESULT WINAPI HTMLDOMTextNode2_Invoke(IHTMLDOMTextNode2 *iface, DISPID d
EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLDOMTextNode *This = impl_from_IHTMLDOMTextNode2(iface);
return IDispatchEx_Invoke(&This->node.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
return IDispatchEx_Invoke(&This->node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -362,7 +362,7 @@ HRESULT HTMLDOMTextNode_Create(HTMLDocumentNode *doc, nsIDOMNode *nsnode, HTMLDO
ret->IHTMLDOMTextNode_iface.lpVtbl = &HTMLDOMTextNodeVtbl;
ret->IHTMLDOMTextNode2_iface.lpVtbl = &HTMLDOMTextNode2Vtbl;
init_dispex(&ret->node.dispex, (IUnknown*)&ret->IHTMLDOMTextNode_iface,
init_dispex(&ret->node.event_target.dispex, (IUnknown*)&ret->IHTMLDOMTextNode_iface,
&HTMLDOMTextNode_dispex);
HTMLDOMNode_Init(doc, &ret->node, nsnode);

View file

@ -71,7 +71,7 @@ static inline HRESULT set_window_event(HTMLWindow *window, eventid_t eid, VARIAN
return E_FAIL;
}
return set_event_handler(&window->inner_window->doc->body_event_target, window->inner_window->doc, eid, var);
return set_event_handler(&window->inner_window->event_target, eid, var);
}
static inline HRESULT get_window_event(HTMLWindow *window, eventid_t eid, VARIANT *var)
@ -81,7 +81,7 @@ static inline HRESULT get_window_event(HTMLWindow *window, eventid_t eid, VARIAN
return E_FAIL;
}
return get_event_handler(&window->inner_window->doc->body_event_target, eid, var);
return get_event_handler(&window->inner_window->event_target, eid, var);
}
static void detach_inner_window(HTMLInnerWindow *window)
@ -145,7 +145,7 @@ static HRESULT WINAPI HTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID rii
*ppv = &This->ITravelLogClient_iface;
}else if(IsEqualGUID(&IID_IObjectIdentity, riid)) {
*ppv = &This->IObjectIdentity_iface;
}else if(dispex_query_interface(&This->inner_window->dispex, riid, ppv)) {
}else if(dispex_query_interface(&This->inner_window->event_target.dispex, riid, ppv)) {
assert(!*ppv);
return E_NOINTERFACE;
}else {
@ -211,7 +211,7 @@ static void release_inner_window(HTMLInnerWindow *This)
htmldoc_release(&This->doc->basedoc);
}
release_dispex(&This->dispex);
release_dispex(&This->event_target.dispex);
for(i=0; i < This->global_prop_cnt; i++)
heap_free(This->global_props[i].name);
@ -232,6 +232,11 @@ static void release_inner_window(HTMLInnerWindow *This)
IHTMLOptionElementFactory_Release(&This->option_factory->IHTMLOptionElementFactory_iface);
}
if(This->xhr_factory) {
This->xhr_factory->window = NULL;
IHTMLXMLHttpRequestFactory_Release(&This->xhr_factory->IHTMLXMLHttpRequestFactory_iface);
}
if(This->screen)
IHTMLScreen_Release(This->screen);
@ -351,6 +356,11 @@ HRESULT get_frame_by_name(HTMLOuterWindow *This, const WCHAR *name, BOOL deep, H
return E_FAIL;
}
if(!nsframes) {
WARN("nsIDOMWindow_GetFrames returned NULL nsframes: %p\n", This->nswindow);
return DISP_E_MEMBERNOTFOUND;
}
nsAString_InitDepend(&name_str, name);
nsres = nsIDOMWindowCollection_NamedItem(nsframes, &name_str, &nswindow);
nsAString_Finish(&name_str);
@ -382,6 +392,11 @@ HRESULT get_frame_by_name(HTMLOuterWindow *This, const WCHAR *name, BOOL deep, H
nsIDOMWindow_Release(nswindow);
if(!window_iter) {
WARN("nsIDOMWindow without HTMLOuterWindow: %p\n", nswindow);
continue;
}
hres = IHTMLElement_get_id(&window_iter->frame_element->element.IHTMLElement_iface, &id);
if(FAILED(hres)) {
FIXME("IHTMLElement_get_id failed: 0x%08x\n", hres);
@ -1630,7 +1645,7 @@ static HRESULT WINAPI HTMLWindow3_attachEvent(IHTMLWindow3 *iface, BSTR event, I
return E_FAIL;
}
return attach_event(&window->doc->body_event_target, &window->doc->basedoc, event, pDisp, pfResult);
return attach_event(&window->event_target, event, pDisp, pfResult);
}
static HRESULT WINAPI HTMLWindow3_detachEvent(IHTMLWindow3 *iface, BSTR event, IDispatch *pDisp)
@ -1645,7 +1660,7 @@ static HRESULT WINAPI HTMLWindow3_detachEvent(IHTMLWindow3 *iface, BSTR event, I
return E_FAIL;
}
return detach_event(window->doc->body_event_target, &window->doc->basedoc, event, pDisp);
return detach_event(&window->event_target, event, pDisp);
}
static HRESULT window_set_timer(HTMLInnerWindow *This, VARIANT *expr, LONG msec, VARIANT *language,
@ -1936,8 +1951,24 @@ static HRESULT WINAPI HTMLWindow5_put_XMLHttpRequest(IHTMLWindow5 *iface, VARIAN
static HRESULT WINAPI HTMLWindow5_get_XMLHttpRequest(IHTMLWindow5 *iface, VARIANT *p)
{
HTMLWindow *This = impl_from_IHTMLWindow5(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
HTMLInnerWindow *window = This->inner_window;
TRACE("(%p)->(%p)\n", This, p);
if(!window->xhr_factory) {
HRESULT hres;
hres = HTMLXMLHttpRequestFactory_Create(window, &window->xhr_factory);
if(FAILED(hres)) {
return hres;
}
}
V_VT(p) = VT_DISPATCH;
V_DISPATCH(p) = (IDispatch*)&window->xhr_factory->IHTMLXMLHttpRequestFactory_iface;
IDispatch_AddRef(V_DISPATCH(p));
return S_OK;
}
static const IHTMLWindow5Vtbl HTMLWindow5Vtbl = {
@ -2399,7 +2430,7 @@ static HRESULT WINAPI WindowDispEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pc
TRACE("(%p)->(%p)\n", This, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->inner_window->dispex.IDispatchEx_iface, pctinfo);
return IDispatchEx_GetTypeInfoCount(&This->inner_window->event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI WindowDispEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo,
@ -2409,7 +2440,7 @@ static HRESULT WINAPI WindowDispEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo,
TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
return IDispatchEx_GetTypeInfo(&This->inner_window->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
return IDispatchEx_GetTypeInfo(&This->inner_window->event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI WindowDispEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid,
@ -2443,7 +2474,7 @@ static HRESULT WINAPI WindowDispEx_Invoke(IDispatchEx *iface, DISPID dispIdMembe
/* FIXME: Use script dispatch */
return IDispatchEx_Invoke(&This->inner_window->dispex.IDispatchEx_iface, dispIdMember, riid, lcid, wFlags,
return IDispatchEx_Invoke(&This->inner_window->event_target.dispex.IDispatchEx_iface, dispIdMember, riid, lcid, wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr);
}
@ -2522,7 +2553,7 @@ static HRESULT WINAPI WindowDispEx_GetDispID(IDispatchEx *iface, BSTR bstrName,
if(hres != DISP_E_UNKNOWNNAME)
return hres;
hres = IDispatchEx_GetDispID(&window->base.inner_window->dispex.IDispatchEx_iface, bstrName, grfdex, pid);
hres = IDispatchEx_GetDispID(&window->base.inner_window->event_target.dispex.IDispatchEx_iface, bstrName, grfdex, pid);
if(hres != DISP_E_UNKNOWNNAME)
return hres;
@ -2589,7 +2620,7 @@ static HRESULT WINAPI WindowDispEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID
return hres;
}
return IDispatchEx_InvokeEx(&window->dispex.IDispatchEx_iface, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
return IDispatchEx_InvokeEx(&window->event_target.dispex.IDispatchEx_iface, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
}
static HRESULT WINAPI WindowDispEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
@ -2598,7 +2629,7 @@ static HRESULT WINAPI WindowDispEx_DeleteMemberByName(IDispatchEx *iface, BSTR b
TRACE("(%p)->(%s %x)\n", This, debugstr_w(bstrName), grfdex);
return IDispatchEx_DeleteMemberByName(&This->inner_window->dispex.IDispatchEx_iface, bstrName, grfdex);
return IDispatchEx_DeleteMemberByName(&This->inner_window->event_target.dispex.IDispatchEx_iface, bstrName, grfdex);
}
static HRESULT WINAPI WindowDispEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
@ -2607,7 +2638,7 @@ static HRESULT WINAPI WindowDispEx_DeleteMemberByDispID(IDispatchEx *iface, DISP
TRACE("(%p)->(%x)\n", This, id);
return IDispatchEx_DeleteMemberByDispID(&This->inner_window->dispex.IDispatchEx_iface, id);
return IDispatchEx_DeleteMemberByDispID(&This->inner_window->event_target.dispex.IDispatchEx_iface, id);
}
static HRESULT WINAPI WindowDispEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
@ -2616,7 +2647,7 @@ static HRESULT WINAPI WindowDispEx_GetMemberProperties(IDispatchEx *iface, DISPI
TRACE("(%p)->(%x %x %p)\n", This, id, grfdexFetch, pgrfdex);
return IDispatchEx_GetMemberProperties(&This->inner_window->dispex.IDispatchEx_iface, id, grfdexFetch,
return IDispatchEx_GetMemberProperties(&This->inner_window->event_target.dispex.IDispatchEx_iface, id, grfdexFetch,
pgrfdex);
}
@ -2626,7 +2657,7 @@ static HRESULT WINAPI WindowDispEx_GetMemberName(IDispatchEx *iface, DISPID id,
TRACE("(%p)->(%x %p)\n", This, id, pbstrName);
return IDispatchEx_GetMemberName(&This->inner_window->dispex.IDispatchEx_iface, id, pbstrName);
return IDispatchEx_GetMemberName(&This->inner_window->event_target.dispex.IDispatchEx_iface, id, pbstrName);
}
static HRESULT WINAPI WindowDispEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
@ -2635,7 +2666,7 @@ static HRESULT WINAPI WindowDispEx_GetNextDispID(IDispatchEx *iface, DWORD grfde
TRACE("(%p)->(%x %x %p)\n", This, grfdex, id, pid);
return IDispatchEx_GetNextDispID(&This->inner_window->dispex.IDispatchEx_iface, grfdex, id, pid);
return IDispatchEx_GetNextDispID(&This->inner_window->event_target.dispex.IDispatchEx_iface, grfdex, id, pid);
}
static HRESULT WINAPI WindowDispEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
@ -2716,7 +2747,7 @@ static const IServiceProviderVtbl ServiceProviderVtbl = {
static inline HTMLInnerWindow *impl_from_DispatchEx(DispatchEx *iface)
{
return CONTAINING_RECORD(iface, HTMLInnerWindow, dispex);
return CONTAINING_RECORD(iface, HTMLInnerWindow, event_target.dispex);
}
static HRESULT HTMLWindow_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params,
@ -2778,13 +2809,13 @@ static HRESULT HTMLWindow_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD
case DISPATCH_PROPERTYPUT: {
DISPID dispex_id;
hres = dispex_get_dynid(&This->dispex, prop->name, &dispex_id);
hres = dispex_get_dynid(&This->event_target.dispex, prop->name, &dispex_id);
if(FAILED(hres))
return hres;
prop->type = GLOBAL_DISPEXVAR;
prop->id = dispex_id;
return IDispatchEx_InvokeEx(&This->dispex.IDispatchEx_iface, dispex_id, 0, flags, params, res, ei, caller);
return IDispatchEx_InvokeEx(&This->event_target.dispex.IDispatchEx_iface, dispex_id, 0, flags, params, res, ei, caller);
}
default:
FIXME("Not supported flags: %x\n", flags);
@ -2815,7 +2846,7 @@ static HRESULT HTMLWindow_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD
return E_NOTIMPL;
}
case GLOBAL_DISPEXVAR:
return IDispatchEx_InvokeEx(&This->dispex.IDispatchEx_iface, prop->id, 0, flags, params, res, ei, caller);
return IDispatchEx_InvokeEx(&This->event_target.dispex.IDispatchEx_iface, prop->id, 0, flags, params, res, ei, caller);
default:
ERR("invalid type %d\n", prop->type);
hres = DISP_E_MEMBERNOTFOUND;
@ -2824,12 +2855,25 @@ static HRESULT HTMLWindow_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD
return hres;
}
static event_target_t **HTMLWindow_get_event_target_ptr(DispatchEx *dispex)
{
HTMLInnerWindow *This = impl_from_DispatchEx(dispex);
return &This->doc->body_event_target;
}
static void HTMLWindow_bind_event(DispatchEx *dispex, int eid)
{
HTMLInnerWindow *This = impl_from_DispatchEx(dispex);
This->doc->node.event_target.dispex.data->vtbl->bind_event(&This->doc->node.event_target.dispex, eid);
}
static const dispex_static_data_vtbl_t HTMLWindow_dispex_vtbl = {
NULL,
NULL,
HTMLWindow_invoke,
NULL
NULL,
HTMLWindow_get_event_target_ptr,
HTMLWindow_bind_event
};
static const tid_t HTMLWindow_iface_tids[] = {
@ -2885,7 +2929,7 @@ static HRESULT create_inner_window(HTMLOuterWindow *outer_window, IMoniker *mon,
window->base.outer_window = outer_window;
window->base.inner_window = window;
init_dispex(&window->dispex, (IUnknown*)&window->base.IHTMLWindow2_iface, &HTMLWindow_dispex);
init_dispex(&window->event_target.dispex, (IUnknown*)&window->base.IHTMLWindow2_iface, &HTMLWindow_dispex);
window->task_magic = get_task_target_magic();

View file

@ -539,6 +539,7 @@ const char *debugstr_mshtml_guid(const GUID *iid)
X(DIID_HTMLDocumentEvents2);
X(DIID_HTMLTableEvents);
X(DIID_HTMLTextContainerEvents);
X(IID_HTMLPluginContainer);
X(IID_IConnectionPoint);
X(IID_IConnectionPointContainer);
X(IID_ICustomDoc);
@ -551,6 +552,7 @@ const char *debugstr_mshtml_guid(const GUID *iid)
X(IID_IHlinkTarget);
X(IID_IHTMLDocument6);
X(IID_IHTMLDocument7);
X(IID_IHTMLEditServices);
X(IID_IHTMLFramesCollection2);
X(IID_IHTMLPrivateWindow);
X(IID_IHtmlLoadOptions);

View file

@ -62,7 +62,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
#define NS_ERROR_GENERATE_FAILURE(module,code) \
((nsresult) (((UINT32)(1<<31)) | ((UINT32)(module+0x45)<<16) | ((UINT32)(code))))
((nsresult) (((UINT32)(1u<<31)) | ((UINT32)(module+0x45)<<16) | ((UINT32)(code))))
#define NS_OK ((nsresult)0x00000000L)
#define NS_ERROR_FAILURE ((nsresult)0x80004005L)
@ -98,6 +98,7 @@ typedef struct event_target_t event_target_t;
XDIID(DispCPlugins) \
XDIID(DispDOMChildrenCollection) \
XDIID(DispHTMLAnchorElement) \
XDIID(DispHTMLAreaElement) \
XDIID(DispHTMLAttributeCollection) \
XDIID(DispHTMLBody) \
XDIID(DispHTMLButtonElement) \
@ -138,9 +139,11 @@ typedef struct event_target_t event_target_t;
XDIID(DispHTMLTitleElement) \
XDIID(DispHTMLUnknownElement) \
XDIID(DispHTMLWindow2) \
XDIID(DispHTMLXMLHttpRequest) \
XDIID(HTMLDocumentEvents) \
XDIID(HTMLElementEvents2) \
XIID(IHTMLAnchorElement) \
XIID(IHTMLAreaElement) \
XIID(IHTMLAttributeCollection) \
XIID(IHTMLAttributeCollection2) \
XIID(IHTMLAttributeCollection3) \
@ -157,6 +160,7 @@ typedef struct event_target_t event_target_t;
XIID(IHTMLDocument4) \
XIID(IHTMLDocument5) \
XIID(IHTMLDOMAttribute) \
XIID(IHTMLDOMAttribute2) \
XIID(IHTMLDOMChildrenCollection) \
XIID(IHTMLDOMImplementation) \
XIID(IHTMLDOMNode) \
@ -198,6 +202,7 @@ typedef struct event_target_t event_target_t;
XIID(IHTMLScriptElement) \
XIID(IHTMLSelectElement) \
XIID(IHTMLSelectionObject) \
XIID(IHTMLSelectionObject2) \
XIID(IHTMLStorage) \
XIID(IHTMLStyle) \
XIID(IHTMLStyle2) \
@ -224,6 +229,8 @@ typedef struct event_target_t event_target_t;
XIID(IHTMLWindow4) \
XIID(IHTMLWindow5) \
XIID(IHTMLWindow6) \
XIID(IHTMLXMLHttpRequest) \
XIID(IHTMLXMLHttpRequestFactory) \
XIID(IOmHistory) \
XIID(IOmNavigator)
@ -250,6 +257,9 @@ typedef struct {
HRESULT (*get_dispid)(DispatchEx*,BSTR,DWORD,DISPID*);
HRESULT (*invoke)(DispatchEx*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*);
HRESULT (*populate_props)(DispatchEx*);
/* We abuse this vtbl for EventTarget functions to avoid separated vtbl. */
event_target_t **(*get_event_target_ptr)(DispatchEx*);
void (*bind_event)(DispatchEx*,int);
} dispex_static_data_vtbl_t;
typedef struct {
@ -288,12 +298,12 @@ typedef struct {
DEFINE_GUID(IID_nsXPCOMCycleCollectionParticipant, 0x9674489b,0x1f6f,0x4550,0xa7,0x30, 0xcc,0xae,0xdd,0x10,0x4c,0xf9);
nsrefcnt (__cdecl *ccref_incr)(nsCycleCollectingAutoRefCnt*,nsISupports*);
nsrefcnt (__cdecl *ccref_decr)(nsCycleCollectingAutoRefCnt*,nsISupports*,ExternalCycleCollectionParticipant*);
void (__cdecl *ccref_init)(nsCycleCollectingAutoRefCnt*,nsrefcnt);
void (__cdecl *ccp_init)(ExternalCycleCollectionParticipant*,const CCObjCallback*);
void (__cdecl *describe_cc_node)(nsCycleCollectingAutoRefCnt*,const char*,nsCycleCollectionTraversalCallback*);
void (__cdecl *note_cc_edge)(nsISupports*,const char*,nsCycleCollectionTraversalCallback*);
nsrefcnt (__cdecl *ccref_incr)(nsCycleCollectingAutoRefCnt*,nsISupports*) DECLSPEC_HIDDEN;
nsrefcnt (__cdecl *ccref_decr)(nsCycleCollectingAutoRefCnt*,nsISupports*,ExternalCycleCollectionParticipant*) DECLSPEC_HIDDEN;
void (__cdecl *ccref_init)(nsCycleCollectingAutoRefCnt*,nsrefcnt) DECLSPEC_HIDDEN;
void (__cdecl *ccp_init)(ExternalCycleCollectionParticipant*,const CCObjCallback*) DECLSPEC_HIDDEN;
void (__cdecl *describe_cc_node)(nsCycleCollectingAutoRefCnt*,const char*,nsCycleCollectionTraversalCallback*) DECLSPEC_HIDDEN;
void (__cdecl *note_cc_edge)(nsISupports*,const char*,nsCycleCollectionTraversalCallback*) DECLSPEC_HIDDEN;
void init_dispex(DispatchEx*,IUnknown*,dispex_static_data_t*) DECLSPEC_HIDDEN;
void release_dispex(DispatchEx*) DECLSPEC_HIDDEN;
@ -345,6 +355,11 @@ typedef struct {
DISPID id;
} global_prop_t;
typedef struct {
DispatchEx dispex;
event_target_t *ptr;
} EventTarget;
typedef struct {
DispatchEx dispex;
IHTMLOptionElementFactory IHTMLOptionElementFactory_iface;
@ -363,6 +378,15 @@ typedef struct {
HTMLInnerWindow *window;
} HTMLImageElementFactory;
typedef struct {
DispatchEx dispex;
IHTMLXMLHttpRequestFactory IHTMLXMLHttpRequestFactory_iface;
LONG ref;
HTMLInnerWindow *window;
} HTMLXMLHttpRequestFactory;
struct HTMLLocation {
DispatchEx dispex;
IHTMLLocation IHTMLLocation_iface;
@ -439,7 +463,7 @@ struct HTMLOuterWindow {
struct HTMLInnerWindow {
HTMLWindow base;
DispatchEx dispex;
EventTarget event_target;
HTMLDocumentNode *doc;
@ -449,6 +473,7 @@ struct HTMLInnerWindow {
HTMLImageElementFactory *image_factory;
HTMLOptionElementFactory *option_factory;
HTMLXMLHttpRequestFactory *xhr_factory;
IHTMLScreen *screen;
OmHistory *history;
IHTMLStorage *session_storage;
@ -599,6 +624,7 @@ struct HTMLDocumentObj {
DOCHOSTUIINFO hostinfo;
IOleUndoManager *undomgr;
IHTMLEditServices *editsvcs;
HWND hwnd;
HWND tooltips_hwnd;
@ -657,7 +683,7 @@ typedef struct {
HRESULT (*clone)(HTMLDOMNode*,nsIDOMNode*,HTMLDOMNode**);
HRESULT (*handle_event)(HTMLDOMNode*,DWORD,nsIDOMEvent*,BOOL*);
HRESULT (*get_attr_col)(HTMLDOMNode*,HTMLAttributeCollection**);
event_target_t **(*get_event_target)(HTMLDOMNode*);
event_target_t **(*get_event_target_ptr)(HTMLDOMNode*);
HRESULT (*fire_event)(HTMLDOMNode*,DWORD,BOOL*);
HRESULT (*put_disabled)(HTMLDOMNode*,VARIANT_BOOL);
HRESULT (*get_disabled)(HTMLDOMNode*,VARIANT_BOOL*);
@ -672,7 +698,7 @@ typedef struct {
} NodeImplVtbl;
struct HTMLDOMNode {
DispatchEx dispex;
EventTarget event_target;
IHTMLDOMNode IHTMLDOMNode_iface;
IHTMLDOMNode2 IHTMLDOMNode2_iface;
const NodeImplVtbl *vtbl;
@ -681,7 +707,6 @@ struct HTMLDOMNode {
nsIDOMNode *nsnode;
HTMLDocumentNode *doc;
event_target_t *event_target;
ConnectionPointContainer *cp_container;
};
@ -719,9 +744,9 @@ typedef struct {
IHTMLElement3_tid, \
IHTMLElement4_tid
extern cp_static_data_t HTMLElementEvents2_data;
extern cp_static_data_t HTMLElementEvents2_data DECLSPEC_HIDDEN;
#define HTMLELEMENT_CPC {&DIID_HTMLElementEvents2, &HTMLElementEvents2_data}
extern const cpc_entry_t HTMLElement_cpc[];
extern const cpc_entry_t HTMLElement_cpc[] DECLSPEC_HIDDEN;
typedef struct {
HTMLElement element;
@ -788,6 +813,7 @@ HTMLOuterWindow *nswindow_to_window(const nsIDOMWindow*) DECLSPEC_HIDDEN;
void get_top_window(HTMLOuterWindow*,HTMLOuterWindow**) DECLSPEC_HIDDEN;
HRESULT HTMLOptionElementFactory_Create(HTMLInnerWindow*,HTMLOptionElementFactory**) DECLSPEC_HIDDEN;
HRESULT HTMLImageElementFactory_Create(HTMLInnerWindow*,HTMLImageElementFactory**) DECLSPEC_HIDDEN;
HRESULT HTMLXMLHttpRequestFactory_Create(HTMLInnerWindow*,HTMLXMLHttpRequestFactory**) DECLSPEC_HIDDEN;
HRESULT HTMLLocation_Create(HTMLInnerWindow*,HTMLLocation**) DECLSPEC_HIDDEN;
IOmNavigator *OmNavigator_Create(void) DECLSPEC_HIDDEN;
HRESULT HTMLScreen_Create(IHTMLScreen**) DECLSPEC_HIDDEN;
@ -854,6 +880,7 @@ HRESULT call_set_active_object(IOleInPlaceUIWindow*,IOleInPlaceActiveObject*) DE
void *nsalloc(size_t) __WINE_ALLOC_SIZE(1) DECLSPEC_HIDDEN;
void nsfree(void*) DECLSPEC_HIDDEN;
BOOL nsACString_Init(nsACString *str, const char *data) DECLSPEC_HIDDEN;
void nsACString_InitDepend(nsACString*,const char*) DECLSPEC_HIDDEN;
void nsACString_SetData(nsACString*,const char*) DECLSPEC_HIDDEN;
UINT32 nsACString_GetData(const nsACString*,const char**) DECLSPEC_HIDDEN;
@ -877,6 +904,7 @@ HRESULT nsnode_to_nsstring(nsIDOMNode*,nsAString*) DECLSPEC_HIDDEN;
void get_editor_controller(NSContainer*) DECLSPEC_HIDDEN;
nsresult get_nsinterface(nsISupports*,REFIID,void**) DECLSPEC_HIDDEN;
nsIWritableVariant *create_nsvariant(void) DECLSPEC_HIDDEN;
nsIXMLHttpRequest *create_nsxhr(nsIDOMWindow *nswindow) DECLSPEC_HIDDEN;
nsresult create_nsfile(const PRUnichar*,nsIFile**) DECLSPEC_HIDDEN;
char *get_nscategory_entry(const char*,const char*) DECLSPEC_HIDDEN;
@ -900,8 +928,6 @@ void detach_ranges(HTMLDocumentNode*) DECLSPEC_HIDDEN;
HRESULT get_node_text(HTMLDOMNode*,BSTR*) DECLSPEC_HIDDEN;
HRESULT replace_node_by_html(nsIDOMHTMLDocument*,nsIDOMNode*,const WCHAR*) DECLSPEC_HIDDEN;
HRESULT insert_adjacent_node(HTMLElement*,const WCHAR*,nsIDOMNode*,HTMLDOMNode**) DECLSPEC_HIDDEN;
HRESULT create_nselem(HTMLDocumentNode*,const WCHAR*,nsIDOMHTMLElement**) DECLSPEC_HIDDEN;
HRESULT create_element(HTMLDocumentNode*,const WCHAR*,HTMLElement**) DECLSPEC_HIDDEN;
@ -926,6 +952,7 @@ struct HTMLAttributeCollection {
typedef struct {
DispatchEx dispex;
IHTMLDOMAttribute IHTMLDOMAttribute_iface;
IHTMLDOMAttribute2 IHTMLDOMAttribute2_iface;
LONG ref;
@ -941,6 +968,7 @@ HRESULT HTMLDOMAttribute_Create(const WCHAR*,HTMLElement*,DISPID,HTMLDOMAttribut
HRESULT HTMLElement_Create(HTMLDocumentNode*,nsIDOMNode*,BOOL,HTMLElement**) DECLSPEC_HIDDEN;
HRESULT HTMLCommentElement_Create(HTMLDocumentNode*,nsIDOMNode*,HTMLElement**) DECLSPEC_HIDDEN;
HRESULT HTMLAnchorElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*,HTMLElement**) DECLSPEC_HIDDEN;
HRESULT HTMLAreaElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*,HTMLElement**) DECLSPEC_HIDDEN;
HRESULT HTMLBodyElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*,HTMLElement**) DECLSPEC_HIDDEN;
HRESULT HTMLButtonElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*,HTMLElement**) DECLSPEC_HIDDEN;
HRESULT HTMLEmbedElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*,HTMLElement**) DECLSPEC_HIDDEN;
@ -991,12 +1019,19 @@ HRESULT search_window_props(HTMLInnerWindow*,BSTR,DWORD,DISPID*) DECLSPEC_HIDDEN
HRESULT get_frame_by_name(HTMLOuterWindow*,const WCHAR*,BOOL,HTMLOuterWindow**) DECLSPEC_HIDDEN;
HRESULT get_doc_elem_by_id(HTMLDocumentNode*,const WCHAR*,HTMLElement**) DECLSPEC_HIDDEN;
HTMLOuterWindow *get_target_window(HTMLOuterWindow*,nsAString*,BOOL*) DECLSPEC_HIDDEN;
HRESULT handle_link_click_event(HTMLElement*,nsAString*,nsAString*,nsIDOMEvent*,BOOL*) DECLSPEC_HIDDEN;
HRESULT wrap_iface(IUnknown*,IUnknown*,IUnknown**) DECLSPEC_HIDDEN;
IHTMLElementCollection *create_all_collection(HTMLDOMNode*,BOOL) DECLSPEC_HIDDEN;
IHTMLElementCollection *create_collection_from_nodelist(HTMLDocumentNode*,nsIDOMNodeList*) DECLSPEC_HIDDEN;
IHTMLElementCollection *create_collection_from_htmlcol(HTMLDocumentNode*,nsIDOMHTMLCollection*) DECLSPEC_HIDDEN;
#define ATTRFLAG_CASESENSITIVE 0x0001
#define ATTRFLAG_ASSTRING 0x0002
#define ATTRFLAG_EXPANDURL 0x0004
HRESULT get_elem_attr_value_by_dispid(HTMLElement*,DISPID,DWORD,VARIANT*) DECLSPEC_HIDDEN;
HRESULT get_elem_source_index(HTMLElement*,LONG*) DECLSPEC_HIDDEN;
nsresult get_elem_attr_value(nsIDOMHTMLElement*,const WCHAR*,nsAString*,const PRUnichar**) DECLSPEC_HIDDEN;
@ -1222,6 +1257,23 @@ static inline char *heap_strdupWtoU(const WCHAR *str)
return ret;
}
static inline char *heap_strndupWtoU(LPCWSTR str, unsigned len)
{
char *ret = NULL;
DWORD size;
if(str && len) {
size = WideCharToMultiByte(CP_UTF8, 0, str, len, NULL, 0, NULL, NULL);
ret = heap_alloc(size + 1);
if(ret) {
WideCharToMultiByte(CP_UTF8, 0, str, len, ret, size, NULL, NULL);
ret[size] = '\0';
}
}
return ret;
}
static inline void windowref_addref(windowref_t *ref)
{
InterlockedIncrement(&ref->ref);

View file

@ -916,6 +916,8 @@ static HRESULT on_start_nsrequest(nsChannelBSC *This)
}
if(This->is_doc_channel) {
if(!This->bsc.window)
return E_ABORT; /* Binding aborted in OnStartRequest call. */
update_window_doc(This->bsc.window);
if(This->bsc.window->base.outer_window->readystate != READYSTATE_LOADING)
set_ready_state(This->bsc.window->base.outer_window, READYSTATE_LOADING);
@ -1030,7 +1032,9 @@ static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream)
return E_OUTOFMEMORY;
}
on_start_nsrequest(This);
hres = on_start_nsrequest(This);
if(FAILED(hres))
return hres;
}
nsres = nsIStreamListener_OnDataAvailable(This->nslistener,
@ -1110,7 +1114,7 @@ static nsrefcnt NSAPI nsAsyncVerifyRedirectCallback_Release(nsIAsyncVerifyRedire
return ref;
}
static nsresult NSAPI nsAsyncVerifyRedirectCallback_AsyncOnChannelRedirect(nsIAsyncVerifyRedirectCallback *iface, nsresult result)
static nsresult NSAPI nsAsyncVerifyRedirectCallback_OnRedirectVerifyCallback(nsIAsyncVerifyRedirectCallback *iface, nsresult result)
{
nsRedirectCallback *This = impl_from_nsIAsyncVerifyRedirectCallback(iface);
nsChannel *old_nschannel;
@ -1157,7 +1161,7 @@ static const nsIAsyncVerifyRedirectCallbackVtbl nsAsyncVerifyRedirectCallbackVtb
nsAsyncVerifyRedirectCallback_QueryInterface,
nsAsyncVerifyRedirectCallback_AddRef,
nsAsyncVerifyRedirectCallback_Release,
nsAsyncVerifyRedirectCallback_AsyncOnChannelRedirect
nsAsyncVerifyRedirectCallback_OnRedirectVerifyCallback
};
static HRESULT create_redirect_callback(nsChannel *nschannel, nsChannelBSC *bsc, nsRedirectCallback **ret)
@ -1572,10 +1576,29 @@ static HRESULT nsChannelBSC_on_progress(BSCallback *bsc, ULONG status_code, LPCW
return S_OK;
}
static HRESULT process_response_status_text(const WCHAR *header, const WCHAR *header_end, char **status_text)
{
header = strchrW(header + 1, ' ');
if(!header || header >= header_end)
return E_FAIL;
header = strchrW(header + 1, ' ');
if(!header || header >= header_end)
return E_FAIL;
++header;
*status_text = heap_strndupWtoU(header, header_end - header);
if(!*status_text)
return E_OUTOFMEMORY;
return S_OK;
}
static HRESULT nsChannelBSC_on_response(BSCallback *bsc, DWORD response_code,
LPCWSTR response_headers)
{
nsChannelBSC *This = nsChannelBSC_from_BSCallback(bsc);
char *str;
HRESULT hres;
This->response_processed = TRUE;
@ -1585,6 +1608,15 @@ static HRESULT nsChannelBSC_on_response(BSCallback *bsc, DWORD response_code,
const WCHAR *headers;
headers = strchrW(response_headers, '\r');
hres = process_response_status_text(response_headers, headers, &str);
if(FAILED(hres)) {
WARN("parsing headers failed: %08x\n", hres);
return hres;
}
heap_free(This->nschannel->response_status_text);
This->nschannel->response_status_text = str;
if(headers && headers[1] == '\n') {
headers += 2;
hres = process_response_headers(This, headers);
@ -2300,7 +2332,7 @@ static HRESULT translate_uri(HTMLOuterWindow *window, IUri *orig_uri, BSTR *ret_
hres = IDocHostUIHandler_TranslateUrl(window->doc_obj->hostui, 0, display_uri,
&translated_url);
if(hres == S_OK) {
if(hres == S_OK && translated_url) {
TRACE("%08x %s -> %s\n", hres, debugstr_w(display_uri), debugstr_w(translated_url));
SysFreeString(display_uri);
hres = create_uri(translated_url, 0, &uri);

View file

@ -25,13 +25,14 @@ WINE_DECLARE_DEBUG_CHANNEL(gecko);
#define NS_APPSTARTUPNOTIFIER_CONTRACTID "@mozilla.org/embedcomp/appstartup-notifier;1"
#define NS_WEBBROWSER_CONTRACTID "@mozilla.org/embedding/browser/nsWebBrowser;1"
#define NS_MEMORY_CONTRACTID "@mozilla.org/xpcom/memory-service;1"
#define NS_COMMANDPARAMS_CONTRACTID "@mozilla.org/embedcomp/command-params;1"
#define NS_HTMLSERIALIZER_CONTRACTID "@mozilla.org/layout/contentserializer;1?mimetype=text/html"
#define NS_EDITORCONTROLLER_CONTRACTID "@mozilla.org/editor/editorcontroller;1"
#define NS_PREFERENCES_CONTRACTID "@mozilla.org/preferences;1"
#define NS_VARIANT_CONTRACTID "@mozilla.org/variant;1"
#define NS_CATEGORYMANAGER_CONTRACTID "@mozilla.org/categorymanager;1"
#define NS_XMLHTTPREQUEST_CONTRACTID "@mozilla.org/xmlextras/xmlhttprequest;1"
#define NS_SCRIPTSECURITYMANAGER_CONTRACTID "@mozilla.org/scriptsecuritymanager;1"
#define PR_UINT32_MAX 0xffffffff
@ -52,13 +53,14 @@ static nsresult (CDECL *NS_CStringSetData)(nsACString*,const char*,PRUint32);
static nsresult (CDECL *NS_NewLocalFile)(const nsAString*,cpp_bool,nsIFile**);
static PRUint32 (CDECL *NS_StringGetData)(const nsAString*,const PRUnichar **,cpp_bool*);
static PRUint32 (CDECL *NS_CStringGetData)(const nsACString*,const char**,cpp_bool*);
static void* (CDECL *NS_Alloc)(SIZE_T);
static void (CDECL *NS_Free)(void*);
static HINSTANCE xul_handle = NULL;
static nsIServiceManager *pServMgr = NULL;
static nsIComponentManager *pCompMgr = NULL;
static nsICategoryManager *cat_mgr;
static nsIMemory *nsmem = NULL;
static nsIFile *profile_directory, *plugin_directory;
static const WCHAR wszNsContainer[] = {'N','s','C','o','n','t','a','i','n','e','r',0};
@ -464,6 +466,7 @@ static void set_environment(LPCWSTR gre_path)
strcpyW(path+len, gre_path);
SetEnvironmentVariableW(pathW, path);
}
heap_free(path);
}
static BOOL load_xul(const PRUnichar *gre_path)
@ -501,14 +504,8 @@ static BOOL load_xul(const PRUnichar *gre_path)
NS_DLSYM(NS_NewLocalFile);
NS_DLSYM(NS_StringGetData);
NS_DLSYM(NS_CStringGetData);
#undef NS_DLSYM
#define NS_DLSYM(func) \
func = (void *)GetProcAddress(xul_handle, #func); \
if(!func) \
ERR("Could not GetProcAddress(" #func ") failed\n")
NS_DLSYM(NS_Alloc);
NS_DLSYM(NS_Free);
NS_DLSYM(ccref_incr);
NS_DLSYM(ccref_decr);
NS_DLSYM(ccref_init);
@ -718,11 +715,6 @@ static BOOL init_xpcom(const PRUnichar *gre_path)
init_mutation(pCompMgr);
set_preferences();
nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr, NS_MEMORY_CONTRACTID,
NULL, &IID_nsIMemory, (void**)&nsmem);
if(NS_FAILED(nsres))
ERR("Could not get nsIMemory: %08x\n", nsres);
nsres = nsIServiceManager_GetServiceByContractID(pServMgr, NS_CATEGORYMANAGER_CONTRACTID,
&IID_nsICategoryManager, (void**)&cat_mgr);
if(NS_FAILED(nsres))
@ -785,15 +777,15 @@ BOOL load_gecko(void)
void *nsalloc(size_t size)
{
return nsIMemory_Alloc(nsmem, size);
return NS_Alloc(size);
}
void nsfree(void *mem)
{
nsIMemory_Free(nsmem, mem);
NS_Free(mem);
}
static BOOL nsACString_Init(nsACString *str, const char *data)
BOOL nsACString_Init(nsACString *str, const char *data)
{
return NS_SUCCEEDED(NS_CStringContainerInit2(str, data, PR_UINT32_MAX, 0));
}
@ -1107,9 +1099,6 @@ void close_gecko(void)
if(cat_mgr)
nsICategoryManager_Release(cat_mgr);
if(nsmem)
nsIMemory_Release(nsmem);
/* Gecko doesn't really support being unloaded */
/* if (hXPCOM) FreeLibrary(hXPCOM); */
@ -1479,9 +1468,21 @@ static nsresult NSAPI nsContextMenuListener_OnShowContextMenu(nsIContextMenuList
switch(aContextFlags) {
case CONTEXT_NONE:
case CONTEXT_DOCUMENT:
case CONTEXT_TEXT:
dwID = CONTEXT_MENU_DEFAULT;
case CONTEXT_TEXT: {
nsISelection *selection;
nsres = nsIDOMHTMLDocument_GetSelection(This->doc->basedoc.doc_node->nsdoc, &selection);
if(NS_SUCCEEDED(nsres) && selection) {
cpp_bool is_collapsed;
/* FIXME: Check if the click was inside selection. */
nsres = nsISelection_GetIsCollapsed(selection, &is_collapsed);
nsISelection_Release(selection);
if(NS_SUCCEEDED(nsres) && !is_collapsed)
dwID = CONTEXT_MENU_TEXTSELECT;
}
break;
}
case CONTEXT_IMAGE:
case CONTEXT_IMAGE|CONTEXT_LINK:
dwID = CONTEXT_MENU_IMAGE;
@ -1566,12 +1567,12 @@ static nsresult NSAPI nsURIContentListener_OnStartURIOpen(nsIURIContentListener
}
static nsresult NSAPI nsURIContentListener_DoContent(nsIURIContentListener *iface,
const char *aContentType, cpp_bool aIsContentPreferred, nsIRequest *aRequest,
const nsACString *aContentType, cpp_bool aIsContentPreferred, nsIRequest *aRequest,
nsIStreamListener **aContentHandler, cpp_bool *_retval)
{
NSContainer *This = impl_from_nsIURIContentListener(iface);
TRACE("(%p)->(%s %x %p %p %p)\n", This, debugstr_a(aContentType), aIsContentPreferred,
TRACE("(%p)->(%p %x %p %p %p)\n", This, aContentType, aIsContentPreferred,
aRequest, aContentHandler, _retval);
return This->content_listener
@ -2151,3 +2152,51 @@ void NSContainer_Release(NSContainer *This)
nsIWebBrowserChrome_Release(&This->nsIWebBrowserChrome_iface);
}
nsIXMLHttpRequest *create_nsxhr(nsIDOMWindow *nswindow)
{
nsIScriptSecurityManager *secman;
nsIPrincipal *nspri;
nsIGlobalObject *nsglo;
nsIXMLHttpRequest *nsxhr;
nsresult nsres;
nsres = nsIServiceManager_GetServiceByContractID(pServMgr,
NS_SCRIPTSECURITYMANAGER_CONTRACTID,
&IID_nsIScriptSecurityManager, (void**)&secman);
if(NS_FAILED(nsres)) {
ERR("Could not get sec manager service: %08x\n", nsres);
return NULL;
}
nsres = nsIScriptSecurityManager_GetSystemPrincipal(secman, &nspri);
nsIScriptSecurityManager_Release(secman);
if(NS_FAILED(nsres)) {
ERR("GetSystemPrincipal failed: %08x\n", nsres);
return NULL;
}
nsres = nsIDOMWindow_QueryInterface(nswindow, &IID_nsIGlobalObject, (void **)&nsglo);
assert(nsres == NS_OK);
nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr,
NS_XMLHTTPREQUEST_CONTRACTID, NULL, &IID_nsIXMLHttpRequest,
(void**)&nsxhr);
if(NS_FAILED(nsres)) {
ERR("Could not get nsIXMLHttpRequest: %08x\n", nsres);
nsISupports_Release(nspri);
nsIGlobalObject_Release(nsglo);
return NULL;
}
nsres = nsIXMLHttpRequest_Init(nsxhr, nspri, NULL, nsglo, NULL, NULL);
nsISupports_Release(nspri);
nsIGlobalObject_Release(nsglo);
if(NS_FAILED(nsres)) {
ERR("nsIXMLHttpRequest_Init failed: %08x\n", nsres);
nsIXMLHttpRequest_Release(nsxhr);
return NULL;
}
return nsxhr;
}

View file

@ -23,7 +23,9 @@
* compatible with XPCOM, usable in C code.
*/
cpp_quote("#define GECKO_VERSION \"2.34\"")
#pragma makedep header
cpp_quote("#define GECKO_VERSION \"2.40\"")
cpp_quote("#define GECKO_VERSION_STRING \"Wine Gecko \" GECKO_VERSION")
import "wtypes.idl";
@ -145,7 +147,6 @@ typedef nsISupports nsIAtom;
typedef nsISupports nsISupportsArray;
typedef nsISupports nsIContentFilter;
typedef nsISupports nsIDOMMediaList;
typedef nsISupports nsIDOMHTMLTableCaptionElement;
typedef nsISupports nsIDOMHTMLTableSectionElement;
typedef nsISupports nsIDOMClientRectList;
typedef nsISupports nsINode;
@ -196,6 +197,14 @@ typedef nsISupports nsIDOMPkcs11;
typedef nsISupports nsIDocShellTreeOwner;
typedef nsISupports nsIArray;
typedef nsISupports nsILoadInfo;
typedef nsISupports nsIContentSecurityPolicy;
typedef nsISupports nsIXMLHttpRequestUpload;
typedef nsISupports nsIClassInfo;
typedef nsISupports nsILoadContext;
typedef nsISupports nsIDomainPolicy;
typedef nsISupports nsIScriptContext;
typedef nsISupports nsIObjectInputStream;
typedef nsISupports nsIObjectOutputStream;
typedef void *JSContext;
typedef void *JSObject;
@ -225,21 +234,6 @@ interface nsIFactory : nsISupports
nsresult LockFactory(bool lock);
}
[
object,
uuid(6aef11c4-8615-44a6-9711-98f43805693d),
local
]
interface nsIMemory : nsISupports
{
void *Alloc(/*size_t*/ int size);
void *Realloc(void *_ptr, /*size_t*/ int newSize);
void Free(void *_ptr);
nsresult HeapMinimize(bool immediate);
nsresult IsLowMemory(bool *_retval);
nsresult IsLowMemoryPlatform(bool *_retval);
}
[
object,
uuid(9188bc85-f92e-11d2-81ef-0060083a0bcf),
@ -615,7 +609,7 @@ interface nsIHttpHeaderVisitor : nsISupports
[
object,
uuid(1bc753ad-5b88-454d-b4c0-4fd34cce6d96),
uuid(86ad7e1f-3a64-4e0f-a104-395ebecd7d5c),
local
]
interface nsIHttpChannel : nsIChannel
@ -624,6 +618,8 @@ interface nsIHttpChannel : nsIChannel
nsresult SetRequestMethod(const nsACString *aRequestMethod);
nsresult GetReferrer(nsIURI **aReferrer);
nsresult SetReferrer(nsIURI *aReferrer);
nsresult GetReferrerPolicy(uint32_t *aReferrerPolicy);
nsresult SetReferrerWithPolicy(nsIURI *referrer, uint32_t referrerPolicy);
nsresult GetRequestHeader(const nsACString *aHeader, nsACString *_retval);
nsresult SetRequestHeader(const nsACString *aHeader, const nsACString *aValue, bool aMerge);
nsresult VisitRequestHeaders(nsIHttpHeaderVisitor *aVisitor);
@ -641,12 +637,13 @@ interface nsIHttpChannel : nsIChannel
nsresult VisitResponseHeaders(nsIHttpHeaderVisitor *aVisitor);
nsresult IsNoStoreResponse(bool *_retval);
nsresult IsNoCacheResponse(bool *_retval);
nsresult IsPrivateResponse(bool *_retval);
nsresult RedirectTo(nsIURI *aNewURI);
}
[
object,
uuid(a4bf4fc5-b5a9-4098-bd20-409d71bf18e6),
uuid(26833ec7-4555-4f23-9281-3a12d4b76db1),
local
]
interface nsIHttpChannelInternal : nsISupports
@ -671,15 +668,23 @@ interface nsIHttpChannelInternal : nsISupports
nsresult HTTPUpgrade(const nsACString *aProtocolName, nsIHttpUpgradeListener *aListener);
nsresult GetAllowSpdy(bool *aAllowSpdy);
nsresult SetAllowSpdy(bool aAllowSpdy);
nsresult GetLoadAsBlocking(bool *aLoadAsBlocking);
nsresult SetLoadAsBlocking(bool aLoadAsBlocking);
nsresult GetLoadUnblocked(bool *aLoadUnblocked);
nsresult SetLoadUnblocked(bool aLoadUnblocked);
nsresult GetResponseTimeoutEnabled(bool *aResponseTimeoutEnabled);
nsresult SetResponseTimeoutEnabled(bool aResponseTimeoutEnabled);
nsresult GetApiRedirectToURI(nsIURI * *aApiRedirectToURI);
nsresult GetApiRedirectToURI(nsIURI **aApiRedirectToURI);
nsresult GetAllowAltSvc(bool *aAllowAltSvc);
nsresult SetAllowAltSvc(bool aAllowAltSvc);
nsresult AddRedirect(nsIPrincipal *aPrincipal);
nsresult GetLastModifiedTime(PRTime *aLastModifiedTime);
nsresult ForceNoIntercept();
nsresult GetCorsIncludeCredentials(bool *aCorsIncludeCredentials);
nsresult SetCorsIncludeCredentials(bool aCorsIncludeCredentials);
nsresult GetCorsMode(uint32_t *aCorsMode);
nsresult SetCorsMode(uint32_t aCorsMode);
nsresult GetTopWindowURI(nsIURI **aTopWindowURI);
nsresult GetNetworkInterfaceId(nsACString *aNetworkInterfaceId);
nsresult SetNetworkInterfaceId(const nsACString *aNetworkInterfaceId);
nsresult ContinueBeginConnect();
nsresult GetProxyURI(nsIURI **aProxyURI);
}
[
@ -706,7 +711,7 @@ interface nsIAsyncVerifyRedirectCallback : nsISupports
[
object,
uuid(a430d870-df77-4502-9570-d46a8de33154),
uuid(0197720d-37ed-4e75-8956-d0d296e4d8a6),
local
]
interface nsIChannelEventSink : nsISupports
@ -714,6 +719,7 @@ interface nsIChannelEventSink : nsISupports
const UINT REDIRECT_TEMPORARY = 1;
const UINT REDIRECT_PERMANENT = 2;
const UINT REDIRECT_INTERNAL = 4;
const UINT REDIRECT_STS_UPGRADE = 8;
nsresult AsyncOnChannelRedirect(nsIChannel *oldChannel, nsIChannel *newChannel, uint32_t flags,
nsIAsyncVerifyRedirectCallback *callback);
@ -879,7 +885,7 @@ interface nsIDOMMozNamedAttrMap : nsISupports
[
object,
uuid(56545150-a001-484e-9ed4-cb319eebd7b3),
uuid(cc35b412-009b-46a3-9be0-76448f12548d),
local
]
interface nsIDOMNode : nsISupports
@ -930,7 +936,7 @@ interface nsIDOMNode : nsISupports
nsresult GetNamespaceURI(nsAString *aNamespaceURI);
nsresult GetPrefix(nsAString *aPrefix);
nsresult GetLocalName(nsAString *aLocalName);
nsresult HasAttributes(bool *_retval);
nsresult UnusedPlaceholder(bool *_retval);
nsresult GetDOMBaseURI(nsAString *aBaseURI);
nsresult CompareDocumentPosition(nsIDOMNode *other, uint16_t *_retval);
nsresult GetTextContent(nsAString *aTextContent);
@ -939,7 +945,7 @@ interface nsIDOMNode : nsISupports
nsresult IsDefaultNamespace(const nsAString *namespaceURI, bool *_retval);
nsresult LookupNamespaceURI(const nsAString *prefix, nsAString *_retval);
nsresult IsEqualNode(nsIDOMNode *arg, bool *_retval);
nsresult SetUserData(const nsAString *key, nsIVariant *data, nsIDOMUserDataHandler *handler, nsIVariant **_retval);
nsresult SetUserData(const nsAString *key, nsIVariant *data, nsIVariant **_retval);
nsresult GetUserData(const nsAString *key, nsIVariant **_retval);
nsresult Contains(nsIDOMNode *aOther, bool *_retval);
@ -949,7 +955,7 @@ interface nsIDOMNode : nsISupports
[
object,
uuid(a974a4d3-2ff1-445b-8b8e-0aada5d4eedc),
uuid(7db491e8-a3a3-4432-ad67-e6c33e24ac6d),
local
]
interface nsIDOMAttr : nsIDOMNode
@ -979,7 +985,7 @@ interface nsIDOMClientRect : nsISupports
[
object,
uuid(d7de6065-1776-4f52-a776-4bbeabacbdaf),
uuid(6289999b-1008-4269-b42a-413ec5a9d3f4),
local
]
interface nsIDOMElement : nsIDOMNode
@ -999,6 +1005,7 @@ interface nsIDOMElement : nsIDOMNode
nsresult RemoveAttributeNS(const nsAString *namespaceURI, const nsAString *localName);
nsresult HasAttribute(const nsAString *name, bool *_retval);
nsresult HasAttributeNS(const nsAString *namespaceURI, const nsAString *localName, bool *_retval);
nsresult HasAttributes(bool *_retval);
nsresult GetAttributeNode(const nsAString *name, nsIDOMAttr **_retval);
nsresult SetAttributeNode(nsIDOMAttr *newAttr, nsIDOMAttr **_retval);
nsresult RemoveAttributeNode(nsIDOMAttr *oldAttr, nsIDOMAttr **_retval);
@ -1049,7 +1056,7 @@ interface nsIDOMElementCSSInlineStyle : nsISupports
[
object,
uuid(db3352cf-04f3-4e7e-baa0-cd2f81b46328),
uuid(b0c42392-d0e7-4f6a-beb5-a698ce648945),
local
]
interface nsIDOMHTMLElement : nsIDOMElement
@ -1116,7 +1123,7 @@ interface nsIDOMHTMLHeadElement : nsISupports
[
object,
uuid(84f72a38-1873-46f8-937c-1df22d7e7cae),
uuid(4109a2d2-e7af-445d-bb72-c7c9b875f35e),
local
]
interface nsIDOMCharacterData : nsIDOMNode
@ -1134,7 +1141,7 @@ interface nsIDOMCharacterData : nsIDOMNode
[
object,
uuid(d14d13b4-21d5-49e2-8d59-76a24156db54),
uuid(67273994-6aff-4091-9de9-b788a249f783),
local
]
interface nsIDOMText : nsIDOMCharacterData
@ -1145,7 +1152,7 @@ interface nsIDOMText : nsIDOMCharacterData
[
object,
uuid(e702a5d2-3aa8-4788-b048-2d3b3e6d16f2),
uuid(e7866ff8-b7fc-494f-87c0-fb017d8a4d30),
local
]
interface nsIDOMComment : nsIDOMCharacterData
@ -1154,7 +1161,7 @@ interface nsIDOMComment : nsIDOMCharacterData
[
object,
uuid(75a237af-133e-40f0-8196-2a172867c41a),
uuid(48eb8d72-95bb-402e-a8fc-f2b187abcbdb),
local
]
interface nsIDOMDocumentFragment : nsIDOMNode
@ -1165,7 +1172,7 @@ interface nsIDOMDocumentFragment : nsIDOMNode
[
object,
uuid(d24d1118-a527-4d5a-9c4e-fb07dfc2fc27),
uuid(35dc5030-dc83-4291-88a2-0906c549788e),
local
]
interface nsIDOMDocument : nsIDOMNode
@ -1241,7 +1248,7 @@ interface nsIDOMDocument : nsIDOMNode
[
object,
uuid(b73be9dd-bcc8-44df-8b01-3389e277427f),
uuid(bd2a0a46-17e4-46ea-9e5d-6a97cf5e3b28),
local
]
interface nsIDOMHTMLDocument : nsIDOMDocument
@ -1383,7 +1390,7 @@ interface nsIDOMWindowCollection : nsISupports
[
object,
uuid(ed7cc4e4-cf5b-42af-9c2e-8df074a01470),
uuid(8146f3fc-9fc1-47c5-85ef-95d686e4ca6d),
local
]
interface nsIDOMWindow : nsISupports
@ -1431,7 +1438,6 @@ interface nsIDOMWindow : nsISupports
nsresult GetSessionStorage(nsISupports **aSessionStorage);
nsresult GetLocalStorage(nsISupports **aLocalStorage);
nsresult GetIndexedDB(nsISupports **aIndexedDB);
nsresult GetMozIndexedDB(nsISupports **aMozIndexedDB);
nsresult GetSelection(nsISelection **_retval);
nsresult MatchMedia(const nsAString *media_query_list, nsISupports **_retval);
nsresult GetScreen(nsIDOMScreen **aScreen);
@ -1495,46 +1501,6 @@ interface nsIDOMWindow : nsISupports
nsresult MozCancelRequestAnimationFrame(int32_t aHandle);
nsresult CancelAnimationFrame(int32_t aHandle);
nsresult GetMozAnimationStartTime(int64_t *aMozAnimationStartTime);
nsresult GetOnafterprint(JSContext *cx, jsval *aOnafterprint);
nsresult SetOnafterprint(JSContext *cx, const jsval *aOnafterprint);
nsresult GetOnbeforeprint(JSContext *cx, jsval *aOnbeforeprint);
nsresult SetOnbeforeprint(JSContext *cx, const jsval *aOnbeforeprint);
nsresult GetOnbeforeunload(JSContext *cx, jsval *aOnbeforeunload);
nsresult SetOnbeforeunload(JSContext *cx, const jsval *aOnbeforeunload);
nsresult GetOnhashchange(JSContext *cx, jsval *aOnhashchange);
nsresult SetOnhashchange(JSContext *cx, const jsval *aOnhashchange);
nsresult GetOnlanguagechange(JSContext *cx, jsval *aOnlanguagechange);
nsresult SetOnlanguagechange(JSContext *cx, const jsval *aOnlanguagechange);
nsresult GetOnmessage(JSContext *cx, jsval *aOnmessage);
nsresult SetOnmessage(JSContext *cx, const jsval *aOnmessage);
nsresult GetOnoffline(JSContext *cx, jsval *aOnoffline);
nsresult SetOnoffline(JSContext *cx, const jsval *aOnoffline);
nsresult GetOnonline(JSContext *cx, jsval *aOnonline);
nsresult SetOnonline(JSContext *cx, const jsval *aOnonline);
nsresult GetOnpopstate(JSContext *cx, jsval *aOnpopstate);
nsresult SetOnpopstate(JSContext *cx, const jsval *aOnpopstate);
nsresult GetOnpagehide(JSContext *cx, jsval *aOnpagehide);
nsresult SetOnpagehide(JSContext *cx, const jsval *aOnpagehide);
nsresult GetOnpageshow(JSContext *cx, jsval *aOnpageshow);
nsresult SetOnpageshow(JSContext *cx, const jsval *aOnpageshow);
nsresult GetOnresize(JSContext *cx, jsval *aOnresize);
nsresult SetOnresize(JSContext *cx, const jsval *aOnresize);
nsresult GetOnunload(JSContext *cx, jsval *aOnunload);
nsresult SetOnunload(JSContext *cx, const jsval *aOnunload);
nsresult GetOndevicemotion(JSContext *cx, jsval *aOndevicemotion);
nsresult SetOndevicemotion(JSContext *cx, const jsval *aOndevicemotion);
nsresult GetOndeviceorientation(JSContext *cx, jsval *aOndeviceorientation);
nsresult SetOndeviceorientation(JSContext *cx, const jsval *aOndeviceorientation);
nsresult GetOndeviceproximity(JSContext* cx, jsval *aOndeviceproximity);
nsresult SetOndeviceproximity(JSContext* cx, const jsval *aOndeviceproximity);
nsresult GetOnuserproximity(JSContext* cx, jsval *aOndeviceproximity);
nsresult SetOnuserproximity(JSContext* cx, const jsval *aOndeviceproximity);
nsresult GetOndevicelight(JSContext* cx, jsval *aOndevicelight);
nsresult SetOndevicelight(JSContext* cx, const jsval *aOndevicelight);
nsresult GetOnmouseenter(JSContext* cx, jsval *aOnmouseenter);
nsresult SetOnmouseenter(JSContext* cx, const jsval *aOnmouseenter);
nsresult GetOnmouseleave(JSContext* cx, jsval *aOnmouseleave);
nsresult SetOnmouseleave(JSContext* cx, const jsval *aOnmouseleave);
nsresult GetConsole(JSContext *cx, jsval *aConsole);
nsresult SetConsole(JSContext *cx, const jsval *aConsole);
}
@ -1864,7 +1830,7 @@ interface nsIDOMHTMLTextAreaElement : nsISupports
[
object,
uuid(4627336e-3070-4e73-8f67-3851b54cc0eb),
uuid(fe96dc1c-40e4-4974-9354-e3fce663c3d5),
local
]
interface nsIDOMHTMLScriptElement : nsISupports
@ -1885,13 +1851,11 @@ interface nsIDOMHTMLScriptElement : nsISupports
nsresult SetHtmlFor(const nsAString *aHtmlFor);
nsresult GetEvent(nsAString *aEvent);
nsresult SetEvent(const nsAString *aEvent);
nsresult GetCrossOrigin(nsAString *aCrossOrigin);
nsresult SetCrossOrigin(const nsAString *aCrossOrigin);
}
[
object,
uuid(e83e726a-0aef-4292-938b-253fec691e2f),
uuid(ec18e71c-4f5c-4cc3-aa36-5273168644dc),
local
]
interface nsIDOMHTMLImageElement : nsISupports
@ -1904,8 +1868,6 @@ interface nsIDOMHTMLImageElement : nsISupports
nsresult SetSrcset(const nsAString *aSrcset) ;
nsresult GetSizes(nsAString *aSizes);
nsresult SetSizes(const nsAString *aSizes);
nsresult GetCrossOrigin(nsAString *aCrossOrigin);
nsresult SetCrossOrigin(const nsAString *aCrossOrigin);
nsresult GetUseMap(nsAString *aUseMap);
nsresult SetUseMap(const nsAString *aUseMap);
nsresult GetIsMap(bool *aIsMap);
@ -1988,7 +1950,45 @@ interface nsIDOMHTMLAnchorElement : nsISupports
[
object,
uuid(95d6ec66-2754-45bd-a068-49ac1fb45004),
uuid(40c78026-36dc-40ca-9221-de73267e9e99),
local
]
interface nsIDOMHTMLAreaElement : nsISupports
{
nsresult GetAlt(const nsAString *aAlt);
nsresult SetAlt(nsAString *aAlt);
nsresult GetCoords(const nsAString *aCoords);
nsresult SetCoords(nsAString *aCoords);
nsresult GetShape(const nsAString *aShape);
nsresult SetShape(nsAString *aShape);
nsresult GetHref(const nsAString *aHref);
nsresult SetHref(nsAString *aHref);
nsresult GetTarget(const nsAString *aTarget);
nsresult SetTarget(nsAString *aTarget);
nsresult GetPing(const nsAString *aPing);
nsresult SetPing(nsAString *aPing);
nsresult GetDownload(const nsAString *aDownload);
nsresult SetDownload(nsAString *aDownload);
nsresult GetProtocol(const nsAString *aProtocol);
nsresult SetProtocol(nsAString *aProtocol);
nsresult GetHost(const nsAString *aHost);
nsresult SetHost(nsAString *aHost);
nsresult GetPort(const nsAString *aPort);
nsresult SetPort(nsAString *aPort);
nsresult GetPathname(const nsAString *aPathname);
nsresult SetPathname(nsAString *aPathname);
nsresult GetSearch(const nsAString *aSearch);
nsresult SetSearch(nsAString *aSearch);
nsresult GetHash(const nsAString *aHash);
nsresult SetHash(nsAString *aHash);
nsresult GetNoHref(const nsAString *aNoHref);
nsresult SetNoHref(nsAString *aNoHref);
nsresult ToString(nsAString *_retval);
}
[
object,
uuid(ee50b7ab-0015-4fbe-89e0-e3feacd4ffde),
local
]
interface nsIDOMHTMLLinkElement : nsISupports
@ -2011,8 +2011,6 @@ interface nsIDOMHTMLLinkElement : nsISupports
nsresult SetTarget(const nsAString *aTarget);
nsresult GetType(nsAString *aType);
nsresult SetType(const nsAString *aType);
nsresult GetCrossOrigin(nsAString *aCrossOrigin);
nsresult SetCrossOrigin(const nsAString *aCrossOrigin);
}
[
@ -2022,8 +2020,8 @@ interface nsIDOMHTMLLinkElement : nsISupports
]
interface nsIDOMHTMLTableElement : nsISupports
{
nsresult GetCaption(nsIDOMHTMLTableCaptionElement **aCaption);
nsresult SetCaption(nsIDOMHTMLTableCaptionElement *aCaption);
nsresult GetCaption(nsIDOMHTMLElement **aCaption);
nsresult SetCaption(nsIDOMHTMLElement *aCaption);
nsresult GetTHead(nsIDOMHTMLElement **aTHead);
nsresult SetTHead(nsIDOMHTMLElement *aTHead);
nsresult GetTFoot(nsIDOMHTMLElement **aTFoot);
@ -2250,13 +2248,13 @@ interface nsIDOMHTMLStyleElement : nsISupports
[
object,
uuid(94928ab3-8b63-11d3-989d-001083010e9b),
uuid(10a28f38-32e8-4c63-8aa1-12eaaebc369a),
local
]
interface nsIURIContentListener : nsISupports
{
nsresult OnStartURIOpen(nsIURI *aURI, bool *_retval);
nsresult DoContent(const char *aContentType, bool aIsContentPreferred, nsIRequest *aRequest,
nsresult DoContent(const nsACString *aContentType, bool aIsContentPreferred, nsIRequest *aRequest,
nsIStreamListener **aContentHandler, bool *_retval);
nsresult IsPreferred(const char *aContentType, char **aDesiredContentType, bool *_retval);
nsresult CanHandleContent(const char *aContentType, bool aIsContentPreferred,
@ -2348,7 +2346,7 @@ interface nsIBaseWindow : nsISupports
[
object,
uuid(b7568a50-4c50-442c-a6be-3a340a48d89a),
uuid(0e92d522-53a5-4af6-9a24-4eccdcbf4f91),
local
]
interface nsIWebNavigation : nsISupports
@ -2378,7 +2376,7 @@ interface nsIWebNavigation : nsISupports
nsresult GotoIndex(int32_t index);
nsresult LoadURI(const PRUnichar *aURI, uint32_t aLoadFlags, nsIURI *aReferrer,
nsIInputStream *aPostData, nsIInputStream *aHeaders);
nsresult LoadURIWithBase(const PRUnichar *aURI, uint32_t aLoadFlags, nsIURI *aReferrer,
nsresult LoadURIWithOptions(const PRUnichar *aURI, uint32_t aLoadFlags, nsIURI *aReferrer, uint32_t aReferrerPolicy,
nsIInputStream *aPostData, nsIInputStream *aHeaders, nsIURI *aBaseURI);
nsresult Reload(uint32_t aReloadFlags);
nsresult Stop(uint32_t aStopFlags);
@ -2745,7 +2743,7 @@ interface nsIDirectoryServiceProvider2 : nsIDirectoryServiceProvider
[
object,
uuid(f5753fec-a051-4ddc-8891-11f1f1575072),
uuid(a7aad716-e72c-435d-82f1-7582dffae661),
local
]
interface nsIProtocolHandler : nsISupports
@ -2776,6 +2774,7 @@ interface nsIProtocolHandler : nsISupports
nsresult GetProtocolFlags(uint32_t *aProtocolFlags);
nsresult NewURI(const nsACString *aSpec, const char *aOriginCharset,
nsIURI *aBaseURI, nsIURI **_retval);
nsresult NewChannel2(nsIURI *aURI, nsILoadInfo *aLoadinfo, nsIChannel **_retval);
nsresult NewChannel(nsIURI *aURI, nsIChannel **_retval);
nsresult AllowPort(int32_t port, const char *scheme, bool *_retval);
}
@ -2792,7 +2791,7 @@ interface nsIExternalProtocolHandler : nsIProtocolHandler
[
object,
uuid(bddeda3f-9020-4d12-8c70-984ee9f7935e),
uuid(4286de5a-b2ea-446f-8f70-e2a461f42694),
local
]
interface nsIIOService : nsISupports
@ -2802,13 +2801,26 @@ interface nsIIOService : nsISupports
nsresult NewURI(const nsACString *aSpec, const char *aOriginCharset, nsIURI *aBaseURI,
nsIURI **_retval);
nsresult NewFileURI(nsIFile *aFile, nsIURI **_retval);
nsresult NewChannelFromURI2(nsIURI *aURI, nsIDOMNode *aLoadingNode, nsIPrincipal *aLoadingPrincipal,
nsIPrincipal *aTriggeringPrincipal, uint32_t aSecurityFlags, uint32_t aContentPolicyType,
nsIChannel **_retval);
nsresult NewChannelFromURIWithLoadInfo(nsIURI *aURI, nsILoadInfo *aLoadInfo, nsIChannel **_retval);
nsresult NewChannelFromURI(nsIURI *aURI, nsIChannel **_retval);
nsresult NewChannel2(const nsACString *aSpec, const char *aOriginCharset, nsIURI *aBaseURI,
nsIDOMNode *aLoadingNode, nsIPrincipal *aLoadingPrincipal, nsIPrincipal *aTriggeringPrincipal,
uint32_t aSecurityFlags, uint32_t aContentPolicyType, nsIChannel **_retval);
nsresult NewChannel(const nsACString *aSpec, const char *aOriginCharset, nsIURI *aBaseURI,
nsIChannel **_retval);
nsresult GetOffline(bool *aOffline);
nsresult SetOffline(bool aOffline);
nsresult GetConnectivity(bool *aConnectivity);
nsresult SetAppOffline(uint32_t appId, int32_t state);
nsresult IsAppOffline(uint32_t appId, bool *_retval);
nsresult GetAppOfflineState(uint32_t appId, int32_t *_retval);
nsresult AllowPort(int32_t aPort, const char *aScheme, bool *_retval);
nsresult ExtractScheme(const nsACString *urlString, nsACString *_retval);
nsresult NewLoadInfo(nsIPrincipal *aLoadingPrincipal, nsIPrincipal *aTriggeringPrincipal,
nsIDOMNode *aLoadingNode, uint32_t aSecurityFlags, uint32_t aContentPolicyType, nsILoadInfo **_retval);
}
[
@ -2929,7 +2941,7 @@ interface nsIDOMEvent : nsISupports
[
object,
uuid(11911980-607c-4efd-aacc-de3b9005c058),
uuid(1a75c351-d115-4d51-94df-731dd1723a1f),
local
]
interface nsIDOMWindowUtils : nsISupports
@ -2940,6 +2952,7 @@ interface nsIDOMWindowUtils : nsISupports
nsresult GetCursorType(int16_t *_retval);
nsresult GetDocumentMetadata(const nsAString *aName, nsAString *_retval);
nsresult Redraw(uint32_t aCount, uint32_t *_retval);
nsresult UpdateLayerTree();
nsresult SetCSSViewport(float aWidthPx, float aHeightPx);
nsresult GetViewportInfo(uint32_t aDisplayWidth, uint32_t aDisplayHeight, double *aDefaultZoom, bool *aAllowZoom,
double *aMinZoom, double *aMaxZoom, uint32_t *aWidth, uint32_t *aHeight, bool *aAutoSize);
@ -2948,8 +2961,9 @@ interface nsIDOMWindowUtils : nsISupports
nsresult SetDisplayPortMarginsForElement(float aLeftMargin, float aTopMargin, float aRightMargin, float aBottomMargin,
uint32_t aAlignmentX, uint32_t aAlignmentY, nsIDOMElement *aElement, uint32_t aPriority);
nsresult SetDisplayPortBaseForElement(int32_t aX, int32_t aY, int32_t aWidth, int32_t aHeight, nsIDOMElement *aElement);
nsresult SetResolution(float aXResolution, float aYResolution);
nsresult GetResolution(float *aXResolution, float *aYResolution);
nsresult SetResolution(float aResolution);
nsresult GetResolution(float *aResolution);
nsresult SetResolutionAndScaleTo(float aResolution);
nsresult GetIsResolutionSet(bool *aIsResolutionSet);
nsresult GetIsFirstPaint(bool *aIsFirstPaint);
nsresult SetIsFirstPaint(bool aIsFirstPaint);
@ -2978,15 +2992,16 @@ interface nsIDOMWindowUtils : nsISupports
nsresult SendKeyEvent(const nsAString *aType, int32_t aKeyCode, int32_t aCharCode, int32_t aModifiers,
uint32_t aAdditionalFlags, bool *_retval);
nsresult SendNativeKeyEvent(int32_t aNativeKeyboardLayout, int32_t aNativeKeyCode, int32_t aModifierFlags,
const nsAString *aCharacters, const nsAString *aUnmodifiedCharacters);
const nsAString *aCharacters, const nsAString *aUnmodifiedCharacters, nsIObserver *aObserver);
nsresult SendNativeMouseEvent(int32_t aScreenX, int32_t aScreenY, int32_t aNativeMessage, int32_t aModifierFlags,
nsIDOMElement *aElement);
nsIDOMElement *aElement, nsIObserver *aObserver);
nsresult SendNativeMouseScrollEvent(int32_t aScreenX, int32_t aScreenY, uint32_t aNativeMessage, double aDeltaX,
double aDeltaY, double aDeltaZ, uint32_t aModifierFlags, uint32_t aAdditionalFlags, nsIDOMElement *aElement);
double aDeltaY, double aDeltaZ, uint32_t aModifierFlags, uint32_t aAdditionalFlags, nsIDOMElement *aElement,
nsIObserver *aObserver);
nsresult SendNativeTouchPoint(uint32_t aPointerId, uint32_t aTouchState, int32_t aScreenX, int32_t aScreenY,
double aPressure, uint32_t aOrientation);
nsresult SendNativeTouchTap(int32_t aScreenX, int32_t aScreenY, bool aLongTap);
nsresult ClearNativeTouchSequence();
double aPressure, uint32_t aOrientation, nsIObserver *aObserver);
nsresult SendNativeTouchTap(int32_t aScreenX, int32_t aScreenY, bool aLongTap, nsIObserver *aObserver);
nsresult ClearNativeTouchSequence(nsIObserver *aObserver);
nsresult ActivateNativeMenuItemAt(const nsAString *indexString);
nsresult ForceUpdateNativeMenuAt(const nsAString *indexString);
nsresult Focus(nsIDOMElement *aElement);
@ -3018,8 +3033,6 @@ interface nsIDOMWindowUtils : nsISupports
nsresult DispatchEventToChromeOnly(nsIDOMEventTarget *aTarget, nsIDOMEvent *aEvent, bool *_retval);
nsresult GetClassName(const /*JS::Value*/ void *aObject, JSContext *cx, char **_retval);
nsresult SendContentCommandEvent(const nsAString *aType, nsITransferable *aTransferable);
nsresult SendCompositionEvent(const nsAString *aType, const nsAString *aData, const nsAString *aLocale);
nsresult CreateCompositionStringSynthesizer(int /*nsICompositionStringSynthesizer*/ **_retval);
nsresult SendQueryContentEvent(uint32_t aType, uint32_t aOffset, uint32_t aLength, int32_t aX, int32_t aY,
uint32_t aAdditionalFlags, nsIQueryContentEventResult **_retval);
nsresult RemoteFrameFullscreenChanged(nsIDOMElement *aFrameElement, const nsAString *aNewOrigin);
@ -3029,16 +3042,17 @@ interface nsIDOMWindowUtils : nsISupports
nsresult SelectAtPoint(float aX, float aY, uint32_t aSelectBehavior, bool *_retval);
nsresult GetVisitedDependentComputedStyle(nsIDOMElement *aElement, const nsAString *aPseudoElement,
const nsAString *aPropertyName, nsAString *_retval);
nsresult GetParent(const /*JS::Value*/ void *obj, JSContext *cx, /*JS::Value*/ void *_retval);
nsresult GetOuterWindowID(uint64_t *aOuterWindowID);
nsresult GetCurrentInnerWindowID(uint64_t *aCurrentInnerWindowID);
nsresult EnterModalState();
nsresult LeaveModalState();
nsresult IsInModalState(bool *_retval);
nsresult SetDesktopModeViewport(bool aDesktopModeViewport);
nsresult SuspendTimeouts();
nsresult ResumeTimeouts();
nsresult GetLayerManagerType(nsAString *aLayerManagerType);
nsresult GetLayerManagerRemote(bool *aLayerManagerRemote);
nsresult GetSupportsHardwareH264Decoding(bool *aSupportsHardwareH264Decoding);
nsresult StartFrameTimeRecording(uint32_t *startIndex);
nsresult StopFrameTimeRecording(uint32_t startIndex, uint32_t *frameCount, float **frameIntervals);
nsresult BeginTabSwitch();
@ -3058,9 +3072,11 @@ interface nsIDOMWindowUtils : nsISupports
nsresult FindElementWithViewId(long /*nsViewID*/ aId, nsIDOMElement **_retval);
nsresult GetViewId(nsIDOMElement *aElement, long /*nsViewID*/ *_retval);
nsresult LeafLayersPartitionWindow(bool *_retval);
nsresult GetMayHaveTouchEventListeners(bool *aMayHaveTouchEventListeners);
nsresult CheckAndClearPaintedState(nsIDOMElement *aElement, bool *_retval);
nsresult IsPartOfOpaqueLayer(nsIDOMElement *aElement, bool *_retval);
nsresult NumberOfAssignedPaintedLayers(nsIDOMElement **aElements, uint32_t count, uint32_t *_retval);
nsresult GetFileId(const /*JS::Value*/ void *aFile, JSContext *cx, int64_t *_retval);
nsresult GetFilePath(void /*JS::HandleValue*/ *aFile, JSContext *cx, nsAString *_retval);
nsresult GetFileReferences(const nsAString *aDatabaseName, int64_t aId, void /*JS::HandleValue*/ *aOptions,
int32_t *aRefCnt, int32_t *aDBRefCnt, int32_t *aSliceRefCnt, JSContext* cx, bool *_retval);
nsresult IsIncrementalGCEnabled(JSContext *cx, bool *_retval);
@ -3078,8 +3094,10 @@ interface nsIDOMWindowUtils : nsISupports
nsresult EnableDialogs();
nsresult AreDialogsEnabled(bool *_retval);
nsresult LoadSheet(nsIURI *sheetURI, uint32_t type);
nsresult LoadSheetUsingURIString(const nsACString *sheetURI, uint32_t type);
nsresult AddSheet(nsIDOMStyleSheet *sheet, uint32_t type);
nsresult RemoveSheet(nsIURI *sheetURI, uint32_t type);
nsresult RemoveSheetUsingURIString(const nsACString *sheetURI, uint32_t type);
nsresult GetIsHandlingUserInput(bool *aIsHandlingUserInput);
nsresult AllowScriptsToClose();
nsresult GetIsParentWindowMainWidgetVisible(bool *aIsParentWindowMainWidgetVisible);
@ -3089,15 +3107,22 @@ interface nsIDOMWindowUtils : nsISupports
nsresult RunInStableState(nsIRunnable *runnable);
nsresult RunBeforeNextEvent(nsIRunnable *runnable);
nsresult GetOMTAStyle(nsIDOMElement *aElement, const nsAString *aProperty, nsAString *_retval);
nsresult RequestCompositorProperty(const nsAString *aProperty, float *_retval);
nsresult SetHandlingUserInput(bool aHandlingInput, void /*nsIJSRAIIHelper*/ **_retval);
nsresult GetContentAPZTestData(JSContext *cx, int /*JS::MutableHandleValue*/ _retval);
nsresult GetCompositorAPZTestData(JSContext *cx, void /*JS::MutableHandleValue*/ *_retval);
nsresult PostRestyleSelfEvent(nsIDOMElement *aElement);
nsresult GetAudioMuted(bool *aAudioMuted) ;
nsresult SetAudioMuted(bool aAudioMuted);
nsresult GetAudioVolume(float *aAudioVolume);
nsresult SetAudioVolume(float aAudioVolume);
nsresult XpconnectArgument(nsIDOMWindowUtils *aThis);
nsresult AskPermission(void /*nsIContentPermissionRequest*/ *aRequest);
nsresult GetFramesConstructed(uint64_t *aFramesConstructed);
nsresult GetFramesReflowed(uint64_t *aFramesReflowed);
nsresult SetChromeMargin(int32_t aTop, int32_t aRight, int32_t aBottom, int32_t aLeft);
nsresult GetServiceWorkersTestingEnabled(bool *aServiceWorkersTestingEnabled);
nsresult SetServiceWorkersTestingEnabled(bool aServiceWorkersTestingEnabled);
}
cpp_quote("#define CONTEXT_NONE 0x00")
@ -3389,7 +3414,7 @@ interface nsIController : nsISupports
[
object,
uuid(697a2fe1-5549-48e7-9a1a-c29dab14e239),
uuid(70f7e9ea-a9bf-48cc-ad9d-8acaeed29b68),
local
]
interface nsIContent : nsISupports
@ -3399,7 +3424,7 @@ interface nsIContent : nsISupports
[
object,
uuid(613ea294-0288-48b4-9e7b-0fe93f8cf895),
uuid(0b78eabe-8b94-4ea1-9331-5d48e83ada95),
local
]
interface nsIDocument : nsISupports
@ -3433,12 +3458,13 @@ interface nsIContentSerializer : nsISupports
[
object,
uuid(04714a01-e02f-4ef5-a388-612451d0db16),
uuid(094be624-f0bf-400f-89e2-6a84baab9474),
local
]
interface nsIEditor : nsISupports
{
nsresult GetSelection([out] nsISelection *_retval);
nsresult FinalizeSelection();
nsresult Init([in] nsIDOMDocument *doc, nsIContent *aRoot, nsISelectionController *aSelCon, uint32_t aFlags, nsAString *initialValue);
nsresult SetAttributeOrEquivalent([in] nsIDOMElement *element, [in] const nsAString *sourceAttrName, [in] const nsAString *sourceAttrValue, [in] bool aSuppressTransaction);
nsresult RemoveAttributeOrEquivalent([in] nsIDOMElement *element, [in] const nsAString *sourceAttrName, [in] bool aSuppressTransaction);
@ -3484,6 +3510,7 @@ interface nsIEditor : nsISupports
nsresult CanCut([out] bool *_retval);
nsresult Copy();
nsresult CanCopy([out] bool *_retval);
nsresult CanDelete(bool *_retval);
nsresult Paste([in] int32_t aSelectionType);
nsresult PasteTransferable(nsITransferable *aTransferable);
nsresult CanPaste([in] int32_t aSelectionType, [out] bool *_retval);
@ -3523,7 +3550,7 @@ interface nsIEditor : nsISupports
[
object,
uuid(393a364f-e8e2-48a1-a271-a0067b6bac9b),
uuid(87ee993e-985f-4a43-a974-0d9512da2fb0),
local
]
interface nsIHTMLEditor : nsISupports
@ -3581,7 +3608,6 @@ interface nsIHTMLEditor : nsISupports
nsresult IsAnonymousElement([in] nsIDOMElement *aElement, [out] bool *_retval);
nsresult GetReturnInParagraphCreatesNewParagraph([out] bool *_retval);
nsresult SetReturnInParagraphCreatesNewParagraph([in] bool prb);
nsresult BreakIsVisible(nsIDOMNode *aNode, bool *_retval);
void /*Element*/ *GetActiveEditingHost();
}
@ -3711,12 +3737,13 @@ interface nsIContentViewer : nsISupports
[
object,
uuid(c8d3b1e1-565a-427e-9d68-b109910ce9b7),
uuid(c63e9d64-490d-48bf-8013-b5d8ee4dbc25),
local
]
interface nsIDocShellLoadInfo : nsISupports
{
typedef int nsDocShellInfoLoadType;
typedef int32_t nsDocShellInfoLoadType;
typedef uint32_t nsDocShellInfoReferrerPolicy;
nsresult GetReferrer(nsIURI **aReferrer);
nsresult SetReferrer(nsIURI *aReferrer);
@ -3738,6 +3765,8 @@ interface nsIDocShellLoadInfo : nsISupports
nsresult SetHeadersStream(nsIInputStream *aHeadersStream);
nsresult GetSendReferrer(bool *aSendReferrer);
nsresult SetSendReferrer(bool aSendReferrer);
nsresult GetReferrerPolicy(nsDocShellInfoReferrerPolicy *aReferrerPolicy);
nsresult SetReferrerPolicy(nsDocShellInfoReferrerPolicy aReferrerPolicy);
nsresult GetIsSrcdocLoad(bool *aIsSrcdocLoad);
nsresult GetSrcdocData(nsAString *aSrcdocData);
nsresult SetSrcdocData(const nsAString *aSrcdocData);
@ -3749,7 +3778,7 @@ interface nsIDocShellLoadInfo : nsISupports
[
object,
uuid(3646c915-df79-4500-8b57-c65ab9c3b39f),
uuid(696b32a1-3cf1-4909-b501-474b25fc7954),
local
]
interface nsIDocShell : nsIDocShellTreeItem
@ -3757,9 +3786,10 @@ interface nsIDocShell : nsIDocShellTreeItem
nsresult LoadURI(nsIURI *uri, nsIDocShellLoadInfo *loadInfo, uint32_t aLoadFlags, bool firstParty);
nsresult LoadStream(nsIInputStream *aStream, nsIURI *aURI, const nsACString *aContentType,
const nsACString *aContentCharset, nsIDocShellLoadInfo *aLoadInfo);
nsresult InternalLoad(nsIURI *aURI, nsIURI *aReferrer, nsISupports *aOwner, uint32_t aFlags, const PRUnichar *aWindowTarget,
const char *aTypeHint, nsACString *aFileName, nsIInputStream *aPostDataStream, nsIInputStream *aHeadersStream,
uint32_t aLoadFlags, nsISHEntry *aSHEntry, bool firstParty, const nsAString *aSrcdoc, nsIDocShell *aSourceDocShell,
nsresult InternalLoad(nsIURI *aURI, nsIURI *aReferrer, uint32_t aReferrerPolicy, nsISupports *aOwner,
uint32_t aFlags, const PRUnichar *aWindowTarget, const char *aTypeHint, nsACString *aFileName,
nsIInputStream *aPostDataStream, nsIInputStream *aHeadersStream, uint32_t aLoadFlags,
nsISHEntry *aSHEntry, bool firstParty, const nsAString *aSrcdoc, nsIDocShell *aSourceDocShell,
nsIURI *aBaseURI, nsIDocShell **aDocShell, nsIRequest **aRequest);
nsresult AddState(jsval *aData, const nsAString *aTitle, const nsAString *aURL, bool aReplace, JSContext *cx);
nsresult CreateLoadInfo(nsIDocShellLoadInfo **loadInfo);
@ -3792,6 +3822,8 @@ interface nsIDocShell : nsIDocShellTreeItem
nsresult SetAllowWindowControl(bool aAllowWindowControl);
nsresult GetAllowContentRetargeting(bool *aAllowContentRetargeting);
nsresult SetAllowContentRetargeting(bool aAllowContentRetargeting);
nsresult GetAllowContentRetargetingOnChildren(bool *aAllowContentRetargetingOnChildren);
nsresult SetAllowContentRetargetingOnChildren(bool aAllowContentRetargetingOnChildren);
nsresult GetDocShellEnumerator(int32_t aItemType, int32_t aDirection, nsISimpleEnumerator **_retval);
nsresult GetAppType(uint32_t *aAppType);
nsresult SetAppType(uint32_t aAppType);
@ -3848,6 +3880,8 @@ interface nsIDocShell : nsIDocShellTreeItem
nsresult GetCanExecuteScripts(bool *aCanExecuteScripts);
nsresult GetIsActive(bool *aIsActive);
nsresult SetIsActive(bool aIsActive);
nsresult SetIsPrerendered(bool prerendered);
nsresult GetIsPrerendered(bool *aIsPrerendered);
nsresult GetHistoryID(uint64_t *aHistoryID);
nsresult GetIsAppTab(bool *aIsAppTab);
nsresult SetIsAppTab(bool aIsAppTab);
@ -3859,8 +3893,10 @@ interface nsIDocShell : nsIDocShellTreeItem
nsresult SetForcedCharset(nsIAtom *aForcedCharset);
void SetParentCharset(const nsACString *parentCharset, int32_t parentCharsetSource, nsIPrincipal *parentCharsetPrincipal);
void GetParentCharset(nsACString *parentCharset, int32_t *parentCharsetSource, nsIPrincipal **parentCharsetPrincipal);
nsresult GetParentCharsetSource(int32_t *aParentCharsetSource);
nsresult SetParentCharsetSource(int32_t aParentCharsetSource);
nsresult GetRecordProfileTimelineMarkers(bool *aRecordProfileTimelineMarkers);
nsresult SetRecordProfileTimelineMarkers(bool aRecordProfileTimelineMarkers);
nsresult Now(int /* DOMHighResTimeStamp */ *_retval);
nsresult PopProfileTimelineMarkers(JSContext *cx, void /*JS::MutableHandleValue*/ *_retval);
nsresult AddWeakPrivacyTransitionObserver(nsIPrivacyTransitionObserver *obs);
nsresult AddWeakReflowObserver(nsISupports /*nsIReflowObserver*/ *obs);
nsresult RemoveWeakReflowObserver(nsISupports /*nsIReflowObserver*/ *obs);
@ -3914,10 +3950,16 @@ interface nsIDocShell : nsIDocShellTreeItem
nsresult GetDeviceSizeIsPageSize(bool *aDeviceSizeIsPageSize);
nsresult SetDeviceSizeIsPageSize(bool aDeviceSizeIsPageSize);
void /* thiscall */ SetOpener(void /*nsITabParent*/ *aOpener);
void /* thiscall nsITabParent */ *GetOpener(void) = 0;
void /* thiscall */ SetOpenedRemote(void /*nsITabParent*/ *aOpenedRemote);
void /* thiscall nsITabParent */ *GetOpenedRemote();
void /*mozilla::dom::URLSearchParams */ *GetURLSearchParams(void) = 0;
void /* thiscall nsITabParent */ *GetOpener();
void /*mozilla::dom::URLSearchParams */ *GetURLSearchParams();
void /* thiscall */ NotifyJSRunToCompletionStart(const char *aReason, const char16_t *functionName,
const char16_t *fileName, uint32_t lineNumber);
void /* thiscall */ NotifyJSRunToCompletionStop();
nsresult GetHasLoadedNonBlankURI(bool *aHasLoadedNonBlankURI);
nsresult GetPaymentRequestId(nsAString *aPaymentRequestId);
nsresult SetPaymentRequestId(const nsAString *aPaymentRequestId);
nsresult GetWindowDraggingAllowed(bool *aWindowDraggingAllowed);
nsresult SetWindowDraggingAllowed(bool aWindowDraggingAllowed);
}
[
@ -4047,4 +4089,82 @@ interface nsIPluginInstance : nsISupports
nsresult GetDOMElement(nsIDOMElement **aDOMElement);
}
[
object,
uuid(11afa8be-d997-4e07-a6a3-6f872ec3ee7f),
local
]
interface nsIGlobalObject : nsISupports
{
}
[
object,
uuid(6f54214c-7175-498d-9d2d-0429e38c2869),
local
]
interface nsIXMLHttpRequest : nsISupports
{
nsresult GetChannel(nsIChannel **aChannel);
nsresult GetResponseXML(nsIDOMDocument **aResponseXML);
nsresult GetResponseText(nsAString *aResponseText);
nsresult GetResponseType(nsAString *aResponseType);
nsresult SetResponseType(const nsAString *aResponseType);
nsresult GetResponse(JSContext*cx, int /*JS::MutableHandleValue*/ aResponse);
nsresult GetStatus(uint32_t *aStatus);
nsresult GetStatusText(nsACString *aStatusText);
nsresult SlowAbort();
nsresult GetAllResponseHeaders(nsACString *_retval);
nsresult GetResponseHeader(const nsACString *header, nsACString *_retval);
nsresult Open(const nsACString *method, const nsACString *url, bool async, const nsAString *user, const nsAString *password, uint8_t _argc);
nsresult Send(nsIVariant *body);
nsresult SetRequestHeader(const nsACString *header, const nsACString *value);
nsresult GetTimeout(uint32_t *aTimeout);
nsresult SetTimeout(uint32_t aTimeout);
nsresult GetReadyState(uint16_t *aReadyState);
nsresult SlowOverrideMimeType(const nsAString *mimetype);
nsresult GetMozBackgroundRequest(bool *aMozBackgroundRequest);
nsresult SetMozBackgroundRequest(bool aMozBackgroundRequest);
nsresult GetWithCredentials(bool *aWithCredentials);
nsresult SetWithCredentials(bool aWithCredentials);
nsresult Init(nsIPrincipal *principal, nsIScriptContext *scriptContext, nsIGlobalObject *globalObject, nsIURI *baseURI, nsILoadGroup *loadGroup);
nsresult GetUpload(nsIXMLHttpRequestUpload **aUpload);
nsresult GetOnreadystatechange(JSContext*cx, int /*JS::MutableHandleValue*/ aOnreadystatechange);
nsresult SetOnreadystatechange(JSContext*cx, int /*JS::HandleValue*/ aOnreadystatechange);
nsresult GetMozAnon(bool *aMozAnon);
nsresult GetMozSystem(bool *aMozSystem);
}
[
object,
uuid(ba602ca6-dc7a-457e-a57a-ee5b343fd863),
local
]
interface nsIScriptSecurityManager : nsISupports {
nsresult CanCreateWrapper(JSContext *aJSContext, const nsIID *aIID, nsISupports *aObj, nsIClassInfo *aClassInfo);
nsresult CanCreateInstance(JSContext *aJSContext, const nsCID *aCID);
nsresult CanGetService(JSContext *aJSContext, const nsCID *aCID);
nsresult CheckLoadURIFromScript(JSContext *cx, nsIURI *uri);
nsresult CheckLoadURIWithPrincipal(nsIPrincipal *aPrincipal, nsIURI *uri, uint32_t flags);
nsresult CheckLoadURIStrWithPrincipal(nsIPrincipal *aPrincipal, const nsACString *uri, uint32_t flags);
nsresult ScriptAllowed(JSObject *aGlobal);
nsresult GetSystemPrincipal(nsIPrincipal **_retval);
nsresult GetSimpleCodebasePrincipal(nsIURI *aURI, nsIPrincipal **_retval);
nsresult GetAppCodebasePrincipal(nsIURI *uri, uint32_t appId, bool inMozBrowser, nsIPrincipal **_retval);
nsresult GetLoadContextCodebasePrincipal(nsIURI *uri, nsILoadContext *loadContext, nsIPrincipal **_retval);
nsresult GetDocShellCodebasePrincipal(nsIURI *uri, nsIDocShell *docShell, nsIPrincipal **_retval);
nsresult GetNoAppCodebasePrincipal(nsIURI *uri, nsIPrincipal **_retval);
nsresult GetCodebasePrincipal(nsIURI *uri, nsIPrincipal **_retval);
nsresult CheckSameOriginURI(nsIURI *aSourceURI, nsIURI *aTargetURI, bool reportError);
nsresult GetChannelResultPrincipal(nsIChannel *aChannel, nsIPrincipal **_retval);
nsresult GetChannelURIPrincipal(nsIChannel *aChannel, nsIPrincipal **_retval);
nsresult IsSystemPrincipal(nsIPrincipal *aPrincipal, bool *_retval);
nsresult GetJarPrefix(uint32_t appId, bool inMozBrowser, nsACString *_retval);
nsresult ActivateDomainPolicy(nsIDomainPolicy **_retval);
nsresult GetDomainPolicyActive(bool *aDomainPolicyActive);
nsresult ActivateDomainPolicyInternal(nsIDomainPolicy **_retval);
void CloneDomainPolicy(int /*mozilla::dom::DomainPolicyClone*/ *aClone);
nsresult PolicyAllowsScript(nsIURI *aDomain, bool *_retval);
}
cpp_quote("DEFINE_GUID(IID_nsCycleCollectionISupports, 0xc61eac14,0x5f7a,0x4481,0x96,0x5e,0x7e,0xaa,0x6e,0xff,0xa8,0x5f);")

View file

@ -342,7 +342,7 @@ static http_header_t *find_http_header(struct list *headers, const WCHAR *name,
http_header_t *iter;
LIST_FOR_EACH_ENTRY(iter, headers, http_header_t, entry) {
if(!strcmpiW(iter->header, name))
if(!strncmpiW(iter->header, name, len) && !iter->header[len])
return iter;
}
@ -1256,6 +1256,20 @@ static nsresult NSAPI nsChannel_SetReferrer(nsIHttpChannel *iface, nsIURI *aRefe
return NS_OK;
}
static nsresult NSAPI nsChannel_GetReferrerPolicy(nsIHttpChannel *iface, UINT32 *aReferrerPolicy)
{
nsChannel *This = impl_from_nsIHttpChannel(iface);
FIXME("(%p)->(%p)\n", This, aReferrerPolicy);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsChannel_SetReferrerWithPolicy(nsIHttpChannel *iface, nsIURI *aReferrer, UINT32 aReferrerPolicy)
{
nsChannel *This = impl_from_nsIHttpChannel(iface);
FIXME("(%p)->(%p %x)\n", This, aReferrer, aReferrerPolicy);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsChannel_GetRequestHeader(nsIHttpChannel *iface,
const nsACString *aHeader, nsACString *_retval)
{
@ -1359,9 +1373,10 @@ static nsresult NSAPI nsChannel_GetResponseStatusText(nsIHttpChannel *iface,
{
nsChannel *This = impl_from_nsIHttpChannel(iface);
FIXME("(%p)->(%p)\n", This, aResponseStatusText);
TRACE("(%p)->(%p)\n", This, aResponseStatusText);
return NS_ERROR_NOT_IMPLEMENTED;
nsACString_SetData(aResponseStatusText, This->response_status_text);
return NS_OK;
}
static nsresult NSAPI nsChannel_GetRequestSucceeded(nsIHttpChannel *iface,
@ -1433,6 +1448,15 @@ static nsresult NSAPI nsChannel_IsNoCacheResponse(nsIHttpChannel *iface, cpp_boo
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsChannel_IsPrivateResponse(nsIHttpChannel *iface, cpp_bool *_retval)
{
nsChannel *This = impl_from_nsIHttpChannel(iface);
FIXME("(%p)->(%p)\n", This, _retval);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsChannel_RedirectTo(nsIHttpChannel *iface, nsIURI *aNewURI)
{
nsChannel *This = impl_from_nsIHttpChannel(iface);
@ -1483,6 +1507,8 @@ static const nsIHttpChannelVtbl nsChannelVtbl = {
nsChannel_SetRequestMethod,
nsChannel_GetReferrer,
nsChannel_SetReferrer,
nsChannel_GetReferrerPolicy,
nsChannel_SetReferrerWithPolicy,
nsChannel_GetRequestHeader,
nsChannel_SetRequestHeader,
nsChannel_VisitRequestHeaders,
@ -1500,6 +1526,7 @@ static const nsIHttpChannelVtbl nsChannelVtbl = {
nsChannel_VisitResponseHeaders,
nsChannel_IsNoStoreResponse,
nsChannel_IsNoCacheResponse,
nsChannel_IsPrivateResponse,
nsChannel_RedirectTo
};
@ -1790,34 +1817,6 @@ static nsresult NSAPI nsHttpChannelInternal_SetAllowSpdy(nsIHttpChannelInternal
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_GetLoadAsBlocking(nsIHttpChannelInternal *iface, cpp_bool *aLoadAsBlocking)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%p)\n", This, aLoadAsBlocking);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_SetLoadAsBlocking(nsIHttpChannelInternal *iface, cpp_bool aLoadAsBlocking)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%x)\n", This, aLoadAsBlocking);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_GetLoadUnblocked(nsIHttpChannelInternal *iface, cpp_bool *aLoadUnblocked)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%p)\n", This, aLoadUnblocked);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_SetLoadUnblocked(nsIHttpChannelInternal *iface, cpp_bool aLoadUnblocked)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%x)\n", This, aLoadUnblocked);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_GetResponseTimeoutEnabled(nsIHttpChannelInternal *iface,
cpp_bool *aResponseTimeoutEnabled)
{
@ -1841,6 +1840,20 @@ static nsresult NSAPI nsHttpChannelInternal_GetApiRedirectToURI(nsIHttpChannelIn
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_GetAllowAltSvc(nsIHttpChannelInternal *iface, cpp_bool *aAllowAltSvc)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%p)\n", This, aAllowAltSvc);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_SetAllowAltSvc(nsIHttpChannelInternal *iface, cpp_bool aAllowAltSvc)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%x)\n", This, aAllowAltSvc);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_AddRedirect(nsIHttpChannelInternal *iface, nsIPrincipal *aPrincipal)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
@ -1855,6 +1868,80 @@ static nsresult NSAPI nsHttpChannelInternal_GetLastModifiedTime(nsIHttpChannelIn
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_ForceNoIntercept(nsIHttpChannelInternal *iface)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)\n", This);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_GetCorsIncludeCredentials(nsIHttpChannelInternal *iface,
cpp_bool *aCorsIncludeCredentials)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%p)\n", This, aCorsIncludeCredentials);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_SetCorsIncludeCredentials(nsIHttpChannelInternal *iface,
cpp_bool aCorsIncludeCredentials)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%x)\n", This, aCorsIncludeCredentials);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_GetCorsMode(nsIHttpChannelInternal *iface, UINT32 *aCorsMode)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%p)\n", This, aCorsMode);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_SetCorsMode(nsIHttpChannelInternal *iface, UINT32 aCorsMode)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%d)\n", This, aCorsMode);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_GetTopWindowURI(nsIHttpChannelInternal *iface, nsIURI **aTopWindowURI)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%p)\n", This, aTopWindowURI);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_GetNetworkInterfaceId(nsIHttpChannelInternal *iface,
nsACString *aNetworkInterfaceId)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%p)\n", This, aNetworkInterfaceId);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_SetNetworkInterfaceId(nsIHttpChannelInternal *iface,
const nsACString *aNetworkInterfaceId)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%s)\n", This, debugstr_nsacstr(aNetworkInterfaceId));
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_ContinueBeginConnect(nsIHttpChannelInternal *iface)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)\n", This);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsHttpChannelInternal_GetProxyURI(nsIHttpChannelInternal *iface, nsIURI **aProxyURI)
{
nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
FIXME("(%p)->(%p)\n", This, aProxyURI);
return NS_ERROR_NOT_IMPLEMENTED;
}
static const nsIHttpChannelInternalVtbl nsHttpChannelInternalVtbl = {
nsHttpChannelInternal_QueryInterface,
nsHttpChannelInternal_AddRef,
@ -1879,15 +1966,23 @@ static const nsIHttpChannelInternalVtbl nsHttpChannelInternalVtbl = {
nsHttpChannelInternal_HTTPUpgrade,
nsHttpChannelInternal_GetAllowSpdy,
nsHttpChannelInternal_SetAllowSpdy,
nsHttpChannelInternal_GetLoadAsBlocking,
nsHttpChannelInternal_SetLoadAsBlocking,
nsHttpChannelInternal_GetLoadUnblocked,
nsHttpChannelInternal_SetLoadUnblocked,
nsHttpChannelInternal_GetResponseTimeoutEnabled,
nsHttpChannelInternal_SetResponseTimeoutEnabled,
nsHttpChannelInternal_GetApiRedirectToURI,
nsHttpChannelInternal_GetAllowAltSvc,
nsHttpChannelInternal_SetAllowAltSvc,
nsHttpChannelInternal_AddRedirect,
nsHttpChannelInternal_GetLastModifiedTime
nsHttpChannelInternal_GetLastModifiedTime,
nsHttpChannelInternal_ForceNoIntercept,
nsHttpChannelInternal_GetCorsIncludeCredentials,
nsHttpChannelInternal_SetCorsIncludeCredentials,
nsHttpChannelInternal_GetCorsMode,
nsHttpChannelInternal_SetCorsMode,
nsHttpChannelInternal_GetTopWindowURI,
nsHttpChannelInternal_GetNetworkInterfaceId,
nsHttpChannelInternal_SetNetworkInterfaceId,
nsHttpChannelInternal_ContinueBeginConnect,
nsHttpChannelInternal_GetProxyURI
};
@ -3321,6 +3416,18 @@ static nsresult NSAPI nsProtocolHandler_NewURI(nsIProtocolHandler *iface,
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsProtocolHandler_NewChannel2(nsIProtocolHandler *iface,
nsIURI *aURI, nsILoadInfo *aLoadInfo, nsIChannel **_retval)
{
nsProtocolHandler *This = impl_from_nsIProtocolHandler(iface);
TRACE("(%p)->(%p %p %p)\n", This, aURI, aLoadInfo, _retval);
if(This->nshandler)
return nsIProtocolHandler_NewChannel2(This->nshandler, aURI, aLoadInfo, _retval);
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult NSAPI nsProtocolHandler_NewChannel(nsIProtocolHandler *iface,
nsIURI *aURI, nsIChannel **_retval)
{
@ -3353,6 +3460,7 @@ static const nsIProtocolHandlerVtbl nsProtocolHandlerVtbl = {
nsProtocolHandler_GetDefaultPort,
nsProtocolHandler_GetProtocolFlags,
nsProtocolHandler_NewURI,
nsProtocolHandler_NewChannel2,
nsProtocolHandler_NewChannel,
nsProtocolHandler_AllowPort
};
@ -3416,7 +3524,7 @@ static nsresult NSAPI nsIOService_GetProtocolFlags(nsIIOService *iface, const ch
static BOOL is_gecko_special_uri(const char *spec)
{
static const char *special_schemes[] = {"chrome:", "jar:", "moz-safe-about", "resource:", "javascript:", "wyciwyg:"};
static const char *special_schemes[] = {"chrome:", "data:", "jar:", "moz-safe-about", "resource:", "javascript:", "wyciwyg:"};
unsigned int i;
for(i=0; i < sizeof(special_schemes)/sizeof(*special_schemes); i++) {
@ -3514,19 +3622,16 @@ static nsresult NSAPI nsIOService_NewFileURI(nsIIOService *iface, nsIFile *aFile
return nsIIOService_NewFileURI(nsio, aFile, _retval);
}
static nsresult NSAPI nsIOService_NewChannelFromURI(nsIIOService *iface, nsIURI *aURI,
nsIChannel **_retval)
static nsresult new_channel_from_uri(nsIURI *uri, nsILoadInfo *load_info, nsIChannel **_retval)
{
nsWineURI *wine_uri;
nsChannel *ret;
nsresult nsres;
TRACE("(%p %p)\n", aURI, _retval);
nsres = nsIURI_QueryInterface(aURI, &IID_nsWineURI, (void**)&wine_uri);
nsres = nsIURI_QueryInterface(uri, &IID_nsWineURI, (void**)&wine_uri);
if(NS_FAILED(nsres)) {
TRACE("Could not get nsWineURI: %08x\n", nsres);
return nsIIOService_NewChannelFromURI(nsio, aURI, _retval);
return nsIIOService_NewChannelFromURI(nsio, uri, _retval);
}
nsres = create_nschannel(wine_uri, &ret);
@ -3534,13 +3639,62 @@ static nsresult NSAPI nsIOService_NewChannelFromURI(nsIIOService *iface, nsIURI
if(NS_FAILED(nsres))
return nsres;
nsIURI_AddRef(aURI);
ret->original_uri = aURI;
nsIURI_AddRef(uri);
ret->original_uri = uri;
if(load_info)
nsIHttpChannel_SetLoadInfo(&ret->nsIHttpChannel_iface, load_info);
*_retval = (nsIChannel*)&ret->nsIHttpChannel_iface;
return NS_OK;
}
static nsresult NSAPI nsIOService_NewChannelFromURI2(nsIIOService *iface, nsIURI *aURI,
nsIDOMNode *aLoadingNode, nsIPrincipal *aLoadingPrincipal, nsIPrincipal *aTriggeringPrincipal,
UINT32 aSecurityFlags, UINT32 aContentPolicyType, nsIChannel **_retval)
{
nsILoadInfo *load_info = NULL;
nsresult nsres;
TRACE("(%p %p %p %p %x %d %p)\n", aURI, aLoadingNode, aLoadingPrincipal, aTriggeringPrincipal,
aSecurityFlags, aContentPolicyType, _retval);
if(aLoadingNode || aLoadingPrincipal) {
nsres = nsIIOService_NewLoadInfo(nsio, aLoadingPrincipal, aTriggeringPrincipal, aLoadingNode,
aSecurityFlags, aContentPolicyType, &load_info);
assert(nsres == NS_OK);
}
nsres = new_channel_from_uri(aURI, load_info, _retval);
if(load_info)
nsISupports_Release(load_info);
return nsres;
}
static nsresult NSAPI nsIOService_NewChannelFromURIWithLoadInfo(nsIIOService *iface, nsIURI *aURI,
nsILoadInfo *aLoadInfo, nsIChannel **_retval)
{
TRACE("(%p %p %p)\n", aURI, aLoadInfo, _retval);
return new_channel_from_uri(aURI, aLoadInfo, _retval);
}
static nsresult NSAPI nsIOService_NewChannelFromURI(nsIIOService *iface, nsIURI *aURI,
nsIChannel **_retval)
{
TRACE("(%p %p)\n", aURI, _retval);
return new_channel_from_uri(aURI, NULL, _retval);
}
static nsresult NSAPI nsIOService_NewChannel2(nsIIOService *iface, const nsACString *aSpec,
const char *aOriginCharset, nsIURI *aBaseURI, nsIDOMNode *aLoadingNode, nsIPrincipal *aLoadingPrincipal,
nsIPrincipal *aTriggeringPrincipal, UINT32 aSecurityFlags, UINT32 aContentPolicyType, nsIChannel **_retval)
{
TRACE("(%s %s %p %p %p %p %x %d %p)\n", debugstr_nsacstr(aSpec), debugstr_a(aOriginCharset), aBaseURI,
aLoadingNode, aLoadingPrincipal, aTriggeringPrincipal, aSecurityFlags, aContentPolicyType, _retval);
return nsIIOService_NewChannel2(nsio, aSpec, aOriginCharset, aBaseURI, aLoadingNode, aLoadingPrincipal,
aTriggeringPrincipal, aSecurityFlags, aContentPolicyType, _retval);
}
static nsresult NSAPI nsIOService_NewChannel(nsIIOService *iface, const nsACString *aSpec,
const char *aOriginCharset, nsIURI *aBaseURI, nsIChannel **_retval)
{
@ -3560,6 +3714,30 @@ static nsresult NSAPI nsIOService_SetOffline(nsIIOService *iface, cpp_bool aOffl
return nsIIOService_SetOffline(nsio, aOffline);
}
static nsresult NSAPI nsIOService_GetConnectivity(nsIIOService *iface, cpp_bool *aConnectivity)
{
TRACE("(%p)\n", aConnectivity);
return nsIIOService_GetConnectivity(nsio, aConnectivity);
}
static nsresult NSAPI nsIOService_SetAppOffline(nsIIOService *iface, UINT32 appId, INT32 state)
{
TRACE("(%d %x)\n", appId, state);
return nsIIOService_SetAppOffline(nsio, appId, state);
}
static nsresult NSAPI nsIOService_IsAppOffline(nsIIOService *iface, UINT32 appId, cpp_bool *_retval)
{
TRACE("(%u %p)\n", appId, _retval);
return nsIIOService_IsAppOffline(nsio, appId, _retval);
}
static nsresult NSAPI nsIOService_GetAppOfflineState(nsIIOService *iface, UINT32 appId, INT32 *_retval)
{
TRACE("(%d %p)\n", appId, _retval);
return nsIIOService_GetAppOfflineState(nsio, appId, _retval);
}
static nsresult NSAPI nsIOService_AllowPort(nsIIOService *iface, LONG aPort,
const char *aScheme, cpp_bool *_retval)
{
@ -3582,10 +3760,17 @@ static const nsIIOServiceVtbl nsIOServiceVtbl = {
nsIOService_GetProtocolFlags,
nsIOService_NewURI,
nsIOService_NewFileURI,
nsIOService_NewChannelFromURI2,
nsIOService_NewChannelFromURIWithLoadInfo,
nsIOService_NewChannelFromURI,
nsIOService_NewChannel2,
nsIOService_NewChannel,
nsIOService_GetOffline,
nsIOService_SetOffline,
nsIOService_GetConnectivity,
nsIOService_SetAppOffline,
nsIOService_IsAppOffline,
nsIOService_GetAppOfflineState,
nsIOService_AllowPort,
nsIOService_ExtractScheme
};

View file

@ -19,6 +19,7 @@
#include "mshtml_private.h"
#define NSCMD_COPY "cmd_copy"
#define NSCMD_SELECTALL "cmd_selectAll"
void do_ns_command(HTMLDocument *This, const char *cmd, nsICommandParams *nsparam)
{
@ -336,8 +337,10 @@ static HRESULT exec_cut(HTMLDocument *This, DWORD nCmdexecopt, VARIANT *pvaIn, V
static HRESULT exec_copy(HTMLDocument *This, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
{
FIXME("(%p)->(%d %p %p)\n", This, nCmdexecopt, pvaIn, pvaOut);
return E_NOTIMPL;
TRACE("(%p)->(%d %s %p)\n", This, nCmdexecopt, debugstr_variant(pvaIn), pvaOut);
do_ns_command(This, NSCMD_COPY, NULL);
return S_OK;
}
static HRESULT exec_paste(HTMLDocument *This, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
@ -364,10 +367,18 @@ static HRESULT exec_rendo(HTMLDocument *This, DWORD nCmdexecopt, VARIANT *pvaIn,
return E_NOTIMPL;
}
static HRESULT exec_select_all(HTMLDocument *This, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
static HRESULT exec_select_all(HTMLDocument *This, DWORD nCmdexecopt, VARIANT *in, VARIANT *out)
{
FIXME("(%p)->(%d %p %p)\n", This, nCmdexecopt, pvaIn, pvaOut);
return E_NOTIMPL;
TRACE("(%p)\n", This);
if(in || out)
FIXME("unsupported args\n");
if(This->doc_obj->nscontainer)
do_ns_command(This, NSCMD_SELECTALL, NULL);
update_doc(This, UPDATE_UI);
return S_OK;
}
static HRESULT exec_clear_selection(HTMLDocument *This, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
@ -620,6 +631,14 @@ static HRESULT exec_mshtml_paste(HTMLDocument *This, DWORD cmdexecopt, VARIANT *
return S_OK;
}
static HRESULT query_selall_status(HTMLDocument *This, OLECMD *cmd)
{
TRACE("(%p)->(%p)\n", This, cmd);
cmd->cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED;
return S_OK;
}
static HRESULT exec_browsemode(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARIANT *out)
{
WARN("(%p)->(%08x %p %p)\n", This, cmdexecopt, in, out);
@ -738,6 +757,7 @@ static const cmdtable_t base_cmds[] = {
{IDM_COPY, query_mshtml_copy, exec_mshtml_copy},
{IDM_PASTE, query_mshtml_paste, exec_mshtml_paste},
{IDM_CUT, query_mshtml_cut, exec_mshtml_cut},
{IDM_SELECTALL, query_selall_status, exec_select_all},
{IDM_BROWSEMODE, NULL, exec_browsemode},
{IDM_EDITMODE, NULL, exec_editmode},
{IDM_PRINT, query_enabled_stub, exec_print},

View file

@ -456,8 +456,11 @@ static HRESULT WINAPI HTMLPluginsCollection_get_length(IHTMLPluginsCollection *i
static HRESULT WINAPI HTMLPluginsCollection_refresh(IHTMLPluginsCollection *iface, VARIANT_BOOL reload)
{
HTMLPluginsCollection *This = impl_from_IHTMLPluginsCollection(iface);
FIXME("(%p)->(%x)\n", This, reload);
return E_NOTIMPL;
TRACE("(%p)->(%x)\n", This, reload);
/* Nothing to do here. */
return S_OK;
}
static const IHTMLPluginsCollectionVtbl HTMLPluginsCollectionVtbl = {

View file

@ -103,8 +103,12 @@ void set_current_mon(HTMLOuterWindow *This, IMoniker *mon, DWORD flags)
HRESULT hres;
if(This->mon) {
if(This->doc_obj && !(flags & (BINDING_REPLACE|BINDING_REFRESH)))
notify_travellog_update(This->doc_obj);
if(This->doc_obj && !(flags & (BINDING_REPLACE|BINDING_REFRESH))) {
if(This == This->doc_obj->basedoc.window)
notify_travellog_update(This->doc_obj);
else
TRACE("Skipping travellog update for frame navigation.\n");
}
IMoniker_Release(This->mon);
This->mon = NULL;
}

View file

@ -18,9 +18,6 @@
#include "mshtml_private.h"
const IID IID_HTMLPluginContainer =
{0xbd7a6050,0xb373,0x4f6f,{0xa4,0x93,0xdd,0x40,0xc5,0x23,0xa8,0x6a}};
static BOOL check_load_safety(PluginHost *host)
{
DWORD policy_size, policy;

View file

@ -60,6 +60,8 @@ struct HTMLPluginContainer {
DWORD props_len;
};
DEFINE_GUID(IID_HTMLPluginContainer, 0xbd7a6050,0xb373,0x4f6f,0xa4,0x93,0xdd,0x40,0xc5,0x23,0xa8,0x6a);
extern const IID IID_HTMLPluginContainer DECLSPEC_HIDDEN;
HRESULT create_plugin_host(HTMLDocumentNode*,HTMLPluginContainer*) DECLSPEC_HIDDEN;
@ -74,5 +76,5 @@ HRESULT create_ip_frame(IOleInPlaceFrame**) DECLSPEC_HIDDEN;
HRESULT get_plugin_disp(HTMLPluginContainer*,IDispatch**) DECLSPEC_HIDDEN;
HRESULT get_plugin_dispid(HTMLPluginContainer*,WCHAR*,DISPID*) DECLSPEC_HIDDEN;
HRESULT invoke_plugin_prop(HTMLPluginContainer*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*) DECLSPEC_HIDDEN;
void notif_container_change(HTMLPluginContainer*,DISPID);
void notif_container_change(HTMLPluginContainer*,DISPID) DECLSPEC_HIDDEN;
void bind_activex_event(HTMLDocumentNode*,HTMLPluginContainer*,WCHAR*,IDispatch*) DECLSPEC_HIDDEN;

View file

@ -627,7 +627,7 @@ static HRESULT WINAPI ResProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
*url_file++ = 0;
}else {
url_file = res_type;
res_type = MAKEINTRESOURCEW(RT_HTML);
res_type = (LPWSTR)RT_HTML;
}
/* Ignore query and hash parts. */

View file

@ -1293,10 +1293,9 @@ IDispatch *get_script_disp(ScriptHost *script_host)
return disp;
}
static event_target_t **find_event_target(HTMLDocumentNode *doc, HTMLScriptElement *script_elem, HTMLDOMNode **ret_target_node)
static EventTarget *find_event_target(HTMLDocumentNode *doc, HTMLScriptElement *script_elem)
{
HTMLDOMNode *target_node = NULL;
event_target_t **target = NULL;
EventTarget *event_target = NULL;
const PRUnichar *target_id;
nsAString target_id_str;
nsresult nsres;
@ -1314,24 +1313,24 @@ static event_target_t **find_event_target(HTMLDocumentNode *doc, HTMLScriptEleme
if(!*target_id) {
FIXME("Empty for attribute\n");
}else if(!strcmpW(target_id, documentW)) {
target = &doc->node.event_target;
target_node = &doc->node;
IHTMLDOMNode_AddRef(&target_node->IHTMLDOMNode_iface);
event_target = &doc->node.event_target;
htmldoc_addref(&doc->basedoc);
}else if(!strcmpW(target_id, windowW)) {
target = &doc->body_event_target;
if(doc->window) {
event_target = &doc->window->event_target;
IDispatchEx_AddRef(&event_target->dispex.IDispatchEx_iface);
}
}else {
HTMLElement *target_elem;
hres = get_doc_elem_by_id(doc, target_id, &target_elem);
if(SUCCEEDED(hres) && target_elem) {
target_node = &target_elem->node;
target = &target_elem->node.event_target;
event_target = &target_elem->node.event_target;
}
}
nsAString_Finish(&target_id_str);
*ret_target_node = target_node;
return target;
nsAString_Finish(&target_id_str);
return event_target;
}
static BOOL parse_event_str(WCHAR *event, const WCHAR **args)
@ -1426,9 +1425,8 @@ void bind_event_scripts(HTMLDocumentNode *doc)
HTMLPluginContainer *plugin_container;
nsIDOMHTMLScriptElement *nsscript;
HTMLScriptElement *script_elem;
event_target_t **event_target;
EventTarget *event_target;
nsIDOMNodeList *node_list;
HTMLDOMNode *target_node;
nsIDOMNode *script_node;
nsAString selector_str;
IDispatch *event_disp;
@ -1475,21 +1473,18 @@ void bind_event_scripts(HTMLDocumentNode *doc)
event_disp = parse_event_elem(doc, script_elem, &event);
if(event_disp) {
event_target = find_event_target(doc, script_elem, &target_node);
event_target = find_event_target(doc, script_elem);
if(event_target) {
if(target_node)
hres = IHTMLDOMNode_QueryInterface(&target_node->IHTMLDOMNode_iface, &IID_HTMLPluginContainer,
(void**)&plugin_container);
else
hres = E_NOINTERFACE;
hres = IDispatchEx_QueryInterface(&event_target->dispex.IDispatchEx_iface, &IID_HTMLPluginContainer,
(void**)&plugin_container);
if(SUCCEEDED(hres))
bind_activex_event(doc, plugin_container, event, event_disp);
else
bind_node_event(doc, event_target, target_node, event, event_disp);
bind_target_event(doc, event_target, event, event_disp);
if(target_node)
IHTMLDOMNode_Release(&target_node->IHTMLDOMNode_iface);
IDispatchEx_Release(&event_target->dispex.IDispatchEx_iface);
if(plugin_container)
node_release(&plugin_container->element.node);
}
heap_free(event);

View file

@ -21,6 +21,7 @@
typedef struct {
DispatchEx dispex;
IHTMLSelectionObject IHTMLSelectionObject_iface;
IHTMLSelectionObject2 IHTMLSelectionObject2_iface;
LONG ref;
@ -48,6 +49,8 @@ static HRESULT WINAPI HTMLSelectionObject_QueryInterface(IHTMLSelectionObject *i
*ppv = &This->IHTMLSelectionObject_iface;
}else if(IsEqualGUID(&IID_IHTMLSelectionObject, riid)) {
*ppv = &This->IHTMLSelectionObject_iface;
}else if(IsEqualGUID(&IID_IHTMLSelectionObject2, riid)) {
*ppv = &This->IHTMLSelectionObject2_iface;
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
return *ppv ? S_OK : E_NOINTERFACE;
}else {
@ -221,13 +224,100 @@ static const IHTMLSelectionObjectVtbl HTMLSelectionObjectVtbl = {
HTMLSelectionObject_get_type
};
static inline HTMLSelectionObject *impl_from_IHTMLSelectionObject2(IHTMLSelectionObject2 *iface)
{
return CONTAINING_RECORD(iface, HTMLSelectionObject, IHTMLSelectionObject2_iface);
}
static HRESULT WINAPI HTMLSelectionObject2_QueryInterface(IHTMLSelectionObject2 *iface, REFIID riid, void **ppv)
{
HTMLSelectionObject *This = impl_from_IHTMLSelectionObject2(iface);
return IHTMLSelectionObject_QueryInterface(&This->IHTMLSelectionObject_iface, riid, ppv);
}
static ULONG WINAPI HTMLSelectionObject2_AddRef(IHTMLSelectionObject2 *iface)
{
HTMLSelectionObject *This = impl_from_IHTMLSelectionObject2(iface);
return IHTMLSelectionObject_AddRef(&This->IHTMLSelectionObject_iface);
}
static ULONG WINAPI HTMLSelectionObject2_Release(IHTMLSelectionObject2 *iface)
{
HTMLSelectionObject *This = impl_from_IHTMLSelectionObject2(iface);
return IHTMLSelectionObject_Release(&This->IHTMLSelectionObject_iface);
}
static HRESULT WINAPI HTMLSelectionObject2_GetTypeInfoCount(IHTMLSelectionObject2 *iface, UINT *pctinfo)
{
HTMLSelectionObject *This = impl_from_IHTMLSelectionObject2(iface);
return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLSelectionObject2_GetTypeInfo(IHTMLSelectionObject2 *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLSelectionObject *This = impl_from_IHTMLSelectionObject2(iface);
return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLSelectionObject2_GetIDsOfNames(IHTMLSelectionObject2 *iface, REFIID riid,
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLSelectionObject *This = impl_from_IHTMLSelectionObject2(iface);
return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames,
cNames, lcid, rgDispId);
}
static HRESULT WINAPI HTMLSelectionObject2_Invoke(IHTMLSelectionObject2 *iface, DISPID dispIdMember,
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLSelectionObject *This = impl_from_IHTMLSelectionObject2(iface);
return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid,
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
static HRESULT WINAPI HTMLSelectionObject2_createRangeCollection(IHTMLSelectionObject2 *iface, IDispatch **rangeCollection)
{
HTMLSelectionObject *This = impl_from_IHTMLSelectionObject2(iface);
FIXME("(%p)->(%p)\n", This, rangeCollection);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLSelectionObject2_get_typeDetail(IHTMLSelectionObject2 *iface, BSTR *p)
{
HTMLSelectionObject *This = impl_from_IHTMLSelectionObject2(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static const IHTMLSelectionObject2Vtbl HTMLSelectionObject2Vtbl = {
HTMLSelectionObject2_QueryInterface,
HTMLSelectionObject2_AddRef,
HTMLSelectionObject2_Release,
HTMLSelectionObject2_GetTypeInfoCount,
HTMLSelectionObject2_GetTypeInfo,
HTMLSelectionObject2_GetIDsOfNames,
HTMLSelectionObject2_Invoke,
HTMLSelectionObject2_createRangeCollection,
HTMLSelectionObject2_get_typeDetail
};
static const tid_t HTMLSelectionObject_iface_tids[] = {
IHTMLSelectionObject_tid,
IHTMLSelectionObject2_tid,
0
};
static dispex_static_data_t HTMLSelectionObject_dispex = {
NULL,
IHTMLSelectionObject_tid,
IHTMLSelectionObject_tid, /* FIXME: We have a test for that, but it doesn't expose IHTMLSelectionObject2 iface. */
NULL,
HTMLSelectionObject_iface_tids
};
@ -243,6 +333,7 @@ HRESULT HTMLSelectionObject_Create(HTMLDocumentNode *doc, nsISelection *nsselect
init_dispex(&selection->dispex, (IUnknown*)&selection->IHTMLSelectionObject_iface, &HTMLSelectionObject_dispex);
selection->IHTMLSelectionObject_iface.lpVtbl = &HTMLSelectionObjectVtbl;
selection->IHTMLSelectionObject2_iface.lpVtbl = &HTMLSelectionObject2Vtbl;
selection->ref = 1;
selection->nsselection = nsselection; /* We shouldn't call AddRef here */

View file

@ -181,12 +181,139 @@ static IOleUndoManager *create_undomgr(void)
{
UndoManager *ret = heap_alloc(sizeof(UndoManager));
if (!ret) return NULL;
ret->IOleUndoManager_iface.lpVtbl = &OleUndoManagerVtbl;
ret->ref = 1;
return &ret->IOleUndoManager_iface;
}
typedef struct {
IHTMLEditServices IHTMLEditServices_iface;
LONG ref;
} editsvcs;
static inline editsvcs *impl_from_IHTMLEditServices(IHTMLEditServices *iface)
{
return CONTAINING_RECORD(iface, editsvcs, IHTMLEditServices_iface);
}
static HRESULT WINAPI editsvcs_QueryInterface(IHTMLEditServices *iface, REFIID riid, void **ppv)
{
editsvcs *This = impl_from_IHTMLEditServices(iface);
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
if(IsEqualGUID(riid, &IID_IUnknown)) {
*ppv = &This->IHTMLEditServices_iface;
} else if(IsEqualGUID(riid, &IID_IHTMLEditServices)) {
*ppv = &This->IHTMLEditServices_iface;
} else {
*ppv = NULL;
FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
return E_NOINTERFACE;
}
IUnknown_AddRef((IUnknown*)*ppv);
return S_OK;
}
static ULONG WINAPI editsvcs_AddRef(IHTMLEditServices *iface)
{
editsvcs *This = impl_from_IHTMLEditServices(iface);
LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
return ref;
}
static ULONG WINAPI editsvcs_Release(IHTMLEditServices *iface)
{
editsvcs *This = impl_from_IHTMLEditServices(iface);
LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
if(!ref)
heap_free(This);
return ref;
}
static HRESULT WINAPI editsvcs_AddDesigner(IHTMLEditServices *iface,
IHTMLEditDesigner *pIDesigner)
{
editsvcs *This = impl_from_IHTMLEditServices(iface);
FIXME("(%p)->(%p)\n", This, pIDesigner);
return E_NOTIMPL;
}
static HRESULT WINAPI editsvcs_RemoveDesigner(IHTMLEditServices *iface,
IHTMLEditDesigner *pIDesigner)
{
editsvcs *This = impl_from_IHTMLEditServices(iface);
FIXME("(%p)->(%p)\n", This, pIDesigner);
return E_NOTIMPL;
}
static HRESULT WINAPI editsvcs_GetSelectionServices(IHTMLEditServices *iface,
IMarkupContainer *pIContainer, ISelectionServices **ppSelSvc)
{
editsvcs *This = impl_from_IHTMLEditServices(iface);
FIXME("(%p)->(%p,%p)\n", This, pIContainer, ppSelSvc);
return E_NOTIMPL;
}
static HRESULT WINAPI editsvcs_MoveToSelectionAnchor(IHTMLEditServices *iface,
IMarkupPointer *pIStartAnchor)
{
editsvcs *This = impl_from_IHTMLEditServices(iface);
FIXME("(%p)->(%p)\n", This, pIStartAnchor);
return E_NOTIMPL;
}
static HRESULT WINAPI editsvcs_MoveToSelectionEnd(IHTMLEditServices *iface,
IMarkupPointer *pIEndAnchor)
{
editsvcs *This = impl_from_IHTMLEditServices(iface);
FIXME("(%p)->(%p)\n", This, pIEndAnchor);
return E_NOTIMPL;
}
static HRESULT WINAPI editsvcs_SelectRange(IHTMLEditServices *iface,
IMarkupPointer *pStart, IMarkupPointer *pEnd, SELECTION_TYPE eType)
{
editsvcs *This = impl_from_IHTMLEditServices(iface);
FIXME("(%p)->(%p,%p,%#x)\n", This, pStart, pEnd, eType);
return E_NOTIMPL;
}
static const IHTMLEditServicesVtbl editsvcsVtbl = {
editsvcs_QueryInterface,
editsvcs_AddRef,
editsvcs_Release,
editsvcs_AddDesigner,
editsvcs_RemoveDesigner,
editsvcs_GetSelectionServices,
editsvcs_MoveToSelectionAnchor,
editsvcs_MoveToSelectionEnd,
editsvcs_SelectRange,
};
static IHTMLEditServices *create_editsvcs(void)
{
editsvcs *ret = heap_alloc(sizeof(*ret));
if (ret) {
ret->IHTMLEditServices_iface.lpVtbl = &editsvcsVtbl;
ret->ref = 1;
return &ret->IHTMLEditServices_iface;
}
return NULL;
}
/**********************************************************
* IServiceProvider implementation
*/
@ -230,6 +357,9 @@ static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFG
if(!This->doc_obj->undomgr)
This->doc_obj->undomgr = create_undomgr();
if (!This->doc_obj->undomgr)
return E_OUTOFMEMORY;
return IOleUndoManager_QueryInterface(This->doc_obj->undomgr, riid, ppv);
}
@ -243,6 +373,18 @@ static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFG
return IWindowForBindingUI_QueryInterface(&This->doc_obj->IWindowForBindingUI_iface, riid, ppv);
}
if(IsEqualGUID(&SID_SHTMLEditServices, guidService)) {
TRACE("SID_SHTMLEditServices\n");
if(!This->doc_obj->editsvcs)
This->doc_obj->editsvcs = create_editsvcs();
if (!This->doc_obj->editsvcs)
return E_OUTOFMEMORY;
return IHTMLEditServices_QueryInterface(This->doc_obj->editsvcs, riid, ppv);
}
TRACE("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
if(This->doc_obj->client) {

View file

@ -1192,7 +1192,7 @@ static HRESULT WINAPI HTMLTxtRange_move(IHTMLTxtRange *iface, BSTR Unit,
if(!Count) {
*ActualCount = 0;
return IHTMLTxtRange_collapse(&This->IHTMLTxtRange_iface, TRUE);
return IHTMLTxtRange_collapse(&This->IHTMLTxtRange_iface, VARIANT_TRUE);
}
switch(unit) {
@ -1204,7 +1204,7 @@ static HRESULT WINAPI HTMLTxtRange_move(IHTMLTxtRange *iface, BSTR Unit,
*ActualCount = move_by_chars(&start, Count);
set_start_point(This, &start);
IHTMLTxtRange_collapse(&This->IHTMLTxtRange_iface, TRUE);
IHTMLTxtRange_collapse(&This->IHTMLTxtRange_iface, VARIANT_TRUE);
free_rangepoint(&start);
break;
}
@ -1217,7 +1217,7 @@ static HRESULT WINAPI HTMLTxtRange_move(IHTMLTxtRange *iface, BSTR Unit,
*ActualCount = move_by_words(&start, Count);
set_start_point(This, &start);
IHTMLTxtRange_collapse(&This->IHTMLTxtRange_iface, TRUE);
IHTMLTxtRange_collapse(&This->IHTMLTxtRange_iface, VARIANT_TRUE);
free_rangepoint(&start);
break;
}

View file

@ -0,0 +1,807 @@
/*
* Copyright 2015 Zhenbo Li
*
* 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 "mshtml_private.h"
static HRESULT bstr_to_nsacstr(BSTR bstr, nsACString *str)
{
char *cstr = heap_strdupWtoU(bstr);
if(!cstr)
return E_OUTOFMEMORY;
nsACString_Init(str, cstr);
heap_free(cstr);
return S_OK;
}
static HRESULT variant_to_nsastr(VARIANT var, nsAString *ret)
{
switch(V_VT(&var)) {
case VT_NULL:
case VT_ERROR:
case VT_EMPTY:
nsAString_Init(ret, NULL);
return S_OK;
case VT_BSTR:
nsAString_InitDepend(ret, V_BSTR(&var));
return S_OK;
default:
FIXME("Unsupported VARIANT: %s\n", debugstr_variant(&var));
return E_INVALIDARG;
}
}
static HRESULT return_nscstr(nsresult nsres, nsACString *nscstr, BSTR *p)
{
const char *str;
int len;
if(NS_FAILED(nsres)) {
ERR("failed: %08x\n", nsres);
nsACString_Finish(nscstr);
return E_FAIL;
}
nsACString_GetData(nscstr, &str);
if(*str) {
len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
*p = SysAllocStringLen(NULL, len);
if(!*p) {
nsACString_Finish(nscstr);
return E_OUTOFMEMORY;
}
MultiByteToWideChar(CP_UTF8, 0, str, -1, *p, len);
}else {
*p = NULL;
}
nsACString_Finish(nscstr);
return S_OK;
}
typedef struct XMLHttpReqEventListener XMLHttpReqEventListener;
typedef struct {
EventTarget event_target;
IHTMLXMLHttpRequest IHTMLXMLHttpRequest_iface;
LONG ref;
nsIXMLHttpRequest *nsxhr;
XMLHttpReqEventListener *event_listener;
} HTMLXMLHttpRequest;
struct XMLHttpReqEventListener {
nsIDOMEventListener nsIDOMEventListener_iface;
LONG ref;
HTMLXMLHttpRequest *xhr;
};
static void detach_xhr_event_listener(XMLHttpReqEventListener *event_listener)
{
nsIDOMEventTarget *event_target;
nsAString str;
nsresult nsres;
static const WCHAR readystatechangeW[] =
{'o','n','r','e','a','d','y','s','t','a','t','e','c','h','a','n','g','e',0};
nsres = nsIXMLHttpRequest_QueryInterface(event_listener->xhr->nsxhr, &IID_nsIDOMEventTarget, (void**)&event_target);
assert(nsres == NS_OK);
nsAString_InitDepend(&str, readystatechangeW);
nsres = nsIDOMEventTarget_RemoveEventListener(event_target, &str, &event_listener->nsIDOMEventListener_iface, FALSE);
nsAString_Finish(&str);
nsIDOMEventTarget_Release(event_target);
event_listener->xhr->event_listener = NULL;
event_listener->xhr = NULL;
nsIDOMEventListener_Release(&event_listener->nsIDOMEventListener_iface);
}
static inline XMLHttpReqEventListener *impl_from_nsIDOMEventListener(nsIDOMEventListener *iface)
{
return CONTAINING_RECORD(iface, XMLHttpReqEventListener, nsIDOMEventListener_iface);
}
static nsresult NSAPI XMLHttpReqEventListener_QueryInterface(nsIDOMEventListener *iface,
nsIIDRef riid, void **result)
{
XMLHttpReqEventListener *This = impl_from_nsIDOMEventListener(iface);
if(IsEqualGUID(&IID_nsISupports, riid)) {
TRACE("(%p)->(IID_nsISupports, %p)\n", This, result);
*result = &This->nsIDOMEventListener_iface;
}else if(IsEqualGUID(&IID_nsIDOMEventListener, riid)) {
TRACE("(%p)->(IID_nsIDOMEventListener %p)\n", This, result);
*result = &This->nsIDOMEventListener_iface;
}else {
*result = NULL;
TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), result);
return NS_NOINTERFACE;
}
nsIDOMEventListener_AddRef(&This->nsIDOMEventListener_iface);
return NS_OK;
}
static nsrefcnt NSAPI XMLHttpReqEventListener_AddRef(nsIDOMEventListener *iface)
{
XMLHttpReqEventListener *This = impl_from_nsIDOMEventListener(iface);
LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
return ref;
}
static nsrefcnt NSAPI XMLHttpReqEventListener_Release(nsIDOMEventListener *iface)
{
XMLHttpReqEventListener *This = impl_from_nsIDOMEventListener(iface);
LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
if(!ref) {
assert(!This->xhr);
heap_free(This);
}
return ref;
}
static nsresult NSAPI XMLHttpReqEventListener_HandleEvent(nsIDOMEventListener *iface, nsIDOMEvent *event)
{
XMLHttpReqEventListener *This = impl_from_nsIDOMEventListener(iface);
TRACE("(%p)\n", This);
if(!This->xhr)
return NS_OK;
call_event_handlers(NULL, NULL, &This->xhr->event_target, NULL, EVENTID_READYSTATECHANGE,
(IDispatch*)&This->xhr->IHTMLXMLHttpRequest_iface);
return NS_OK;
}
static const nsIDOMEventListenerVtbl XMLHttpReqEventListenerVtbl = {
XMLHttpReqEventListener_QueryInterface,
XMLHttpReqEventListener_AddRef,
XMLHttpReqEventListener_Release,
XMLHttpReqEventListener_HandleEvent
};
static inline HTMLXMLHttpRequest *impl_from_IHTMLXMLHttpRequest(IHTMLXMLHttpRequest *iface)
{
return CONTAINING_RECORD(iface, HTMLXMLHttpRequest, IHTMLXMLHttpRequest_iface);
}
static HRESULT WINAPI HTMLXMLHttpRequest_QueryInterface(IHTMLXMLHttpRequest *iface, REFIID riid, void **ppv)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
if(IsEqualGUID(&IID_IUnknown, riid)) {
*ppv = &This->IHTMLXMLHttpRequest_iface;
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
*ppv = &This->IHTMLXMLHttpRequest_iface;
}else if(IsEqualGUID(&IID_IHTMLXMLHttpRequest, riid)) {
*ppv = &This->IHTMLXMLHttpRequest_iface;
}else if(dispex_query_interface(&This->event_target.dispex, riid, ppv)) {
return *ppv ? S_OK : E_NOINTERFACE;
}else {
*ppv = NULL;
WARN("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
return E_NOINTERFACE;
}
IUnknown_AddRef((IUnknown*)*ppv);
return S_OK;
}
static ULONG WINAPI HTMLXMLHttpRequest_AddRef(IHTMLXMLHttpRequest *iface)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
return ref;
}
static ULONG WINAPI HTMLXMLHttpRequest_Release(IHTMLXMLHttpRequest *iface)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
if(!ref) {
if(This->event_listener)
detach_xhr_event_listener(This->event_listener);
release_dispex(&This->event_target.dispex);
nsIXMLHttpRequest_Release(This->nsxhr);
heap_free(This);
}
return ref;
}
static HRESULT WINAPI HTMLXMLHttpRequest_GetTypeInfoCount(IHTMLXMLHttpRequest *iface, UINT *pctinfo)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
return IDispatchEx_GetTypeInfoCount(&This->event_target.dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLXMLHttpRequest_GetTypeInfo(IHTMLXMLHttpRequest *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
return IDispatchEx_GetTypeInfo(&This->event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLXMLHttpRequest_GetIDsOfNames(IHTMLXMLHttpRequest *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames,
LCID lcid, DISPID *rgDispId)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
return IDispatchEx_GetIDsOfNames(&This->event_target.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
lcid, rgDispId);
}
static HRESULT WINAPI HTMLXMLHttpRequest_Invoke(IHTMLXMLHttpRequest *iface, DISPID dispIdMember, REFIID riid, LCID lcid,
WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
return IDispatchEx_Invoke(&This->event_target.dispex.IDispatchEx_iface, dispIdMember, riid, lcid, wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr);
}
static HRESULT WINAPI HTMLXMLHttpRequest_get_readyState(IHTMLXMLHttpRequest *iface, LONG *p)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
UINT16 val;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
if(!p)
return E_POINTER;
nsres = nsIXMLHttpRequest_GetReadyState(This->nsxhr, &val);
if(NS_FAILED(nsres)) {
ERR("nsIXMLHttpRequest_GetReadyState failed: %08x\n", nsres);
return E_FAIL;
}
*p = val;
return S_OK;
}
static HRESULT WINAPI HTMLXMLHttpRequest_get_responseBody(IHTMLXMLHttpRequest *iface, VARIANT *p)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLXMLHttpRequest_get_responseText(IHTMLXMLHttpRequest *iface, BSTR *p)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
nsAString nsstr;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
if(!p)
return E_POINTER;
nsAString_Init(&nsstr, NULL);
nsres = nsIXMLHttpRequest_GetResponseText(This->nsxhr, &nsstr);
return return_nsstr(nsres, &nsstr, p);
}
static HRESULT WINAPI HTMLXMLHttpRequest_get_responseXML(IHTMLXMLHttpRequest *iface, IDispatch **p)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLXMLHttpRequest_get_status(IHTMLXMLHttpRequest *iface, LONG *p)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
DWORD val;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
if(!p)
return E_POINTER;
nsres = nsIXMLHttpRequest_GetStatus(This->nsxhr, &val);
if(NS_FAILED(nsres)) {
ERR("nsIXMLHttpRequest_GetStatus failed: %08x\n", nsres);
return E_FAIL;
}
*p = val;
if(val == 0)
return E_FAIL; /* WinAPI thinks this is an error */
return S_OK;
}
static HRESULT WINAPI HTMLXMLHttpRequest_get_statusText(IHTMLXMLHttpRequest *iface, BSTR *p)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
nsACString nscstr;
nsresult nsres;
HRESULT hres;
LONG state;
TRACE("(%p)->(%p)\n", This, p);
if(!p)
return E_POINTER;
hres = IHTMLXMLHttpRequest_get_readyState(iface, &state);
if(FAILED(hres))
return hres;
if(state < 2) {
*p = NULL;
return E_FAIL;
}
nsACString_Init(&nscstr, NULL);
nsres = nsIXMLHttpRequest_GetStatusText(This->nsxhr, &nscstr);
return return_nscstr(nsres, &nscstr, p);
}
static HRESULT WINAPI HTMLXMLHttpRequest_put_onreadystatechange(IHTMLXMLHttpRequest *iface, VARIANT v)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
return set_event_handler(&This->event_target, EVENTID_READYSTATECHANGE, &v);
}
static HRESULT WINAPI HTMLXMLHttpRequest_get_onreadystatechange(IHTMLXMLHttpRequest *iface, VARIANT *p)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
TRACE("(%p)->(%p)\n", This, p);
return get_event_handler(&This->event_target, EVENTID_READYSTATECHANGE, p);
}
static HRESULT WINAPI HTMLXMLHttpRequest_abort(IHTMLXMLHttpRequest *iface)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
nsresult nsres;
TRACE("(%p)->()\n", This);
nsres = nsIXMLHttpRequest_SlowAbort(This->nsxhr);
if(NS_FAILED(nsres)) {
ERR("nsIXMLHttpRequest_SlowAbort failed: %08x\n", nsres);
return E_FAIL;
}
return S_OK;
}
static HRESULT WINAPI HTMLXMLHttpRequest_open(IHTMLXMLHttpRequest *iface, BSTR bstrMethod, BSTR bstrUrl, VARIANT varAsync, VARIANT varUser, VARIANT varPassword)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
nsACString method, url;
nsAString user, password;
nsresult nsres;
HRESULT hres;
TRACE("(%p)->(%s %s %s %s %s)\n", This, debugstr_w(bstrMethod), debugstr_w(bstrUrl), debugstr_variant(&varAsync), debugstr_variant(&varUser), debugstr_variant(&varPassword));
if(V_VT(&varAsync) != VT_BOOL) {
FIXME("varAsync not supported: %s\n", debugstr_variant(&varAsync));
return E_FAIL;
}
/* Note: Starting with Gecko 30.0 (Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27),
* synchronous requests on the main thread have been deprecated due to the negative
* effects to the user experience.
*/
if(!V_BOOL(&varAsync)) {
FIXME("Synchronous request is not supported yet\n");
return E_FAIL;
}
hres = variant_to_nsastr(varUser, &user);
if(FAILED(hres))
return hres;
hres = variant_to_nsastr(varPassword, &password);
if(FAILED(hres)) {
nsAString_Finish(&user);
return hres;
}
hres = bstr_to_nsacstr(bstrMethod, &method);
if(FAILED(hres)) {
nsAString_Finish(&user);
nsAString_Finish(&password);
return hres;
}
hres = bstr_to_nsacstr(bstrUrl, &url);
if(FAILED(hres)) {
nsAString_Finish(&user);
nsAString_Finish(&password);
nsACString_Finish(&method);
return hres;
}
nsres = nsIXMLHttpRequest_Open(This->nsxhr, &method, &url, TRUE,
&user, &password, 0);
nsACString_Finish(&method);
nsACString_Finish(&url);
nsAString_Finish(&user);
nsAString_Finish(&password);
if(NS_FAILED(nsres)) {
ERR("nsIXMLHttpRequest_Open failed: %08x\n", nsres);
return E_FAIL;
}
return S_OK;
}
static HRESULT WINAPI HTMLXMLHttpRequest_send(IHTMLXMLHttpRequest *iface, VARIANT varBody)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
nsresult nsres;
TRACE("(%p)->(%s)\n", This, debugstr_variant(&varBody));
switch(V_VT(&varBody)) {
case VT_NULL:
case VT_EMPTY:
case VT_ERROR:
break;
default:
FIXME("varBody(%s) unsupported\n", debugstr_variant(&varBody));
return E_FAIL;
}
nsres = nsIXMLHttpRequest_Send(This->nsxhr, NULL);
if(NS_FAILED(nsres)) {
ERR("nsIXMLHttpRequest_Send failed: %08x\n", nsres);
return E_FAIL;
}
return S_OK;
}
static HRESULT WINAPI HTMLXMLHttpRequest_getAllResponseHeaders(IHTMLXMLHttpRequest *iface, BSTR *p)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
nsACString nscstr;
nsresult nsres;
HRESULT hres;
LONG state;
TRACE("(%p)->(%p)\n", This, p);
if(!p)
return E_POINTER;
hres = IHTMLXMLHttpRequest_get_readyState(iface, &state);
if(FAILED(hres))
return hres;
if(state < 2) {
*p = NULL;
return E_FAIL;
}
nsACString_Init(&nscstr, NULL);
nsres = nsIXMLHttpRequest_GetAllResponseHeaders(This->nsxhr, &nscstr);
return return_nscstr(nsres, &nscstr, p);
}
static HRESULT WINAPI HTMLXMLHttpRequest_getResponseHeader(IHTMLXMLHttpRequest *iface, BSTR bstrHeader, BSTR *p)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
nsACString header, ret;
char *cstr;
nsresult nsres;
HRESULT hres;
LONG state;
TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrHeader), p);
if(!p)
return E_POINTER;
if(!bstrHeader)
return E_INVALIDARG;
hres = IHTMLXMLHttpRequest_get_readyState(iface, &state);
if(FAILED(hres))
return hres;
if(state < 2) {
*p = NULL;
return E_FAIL;
}
cstr = heap_strdupWtoU(bstrHeader);
nsACString_InitDepend(&header, cstr);
nsACString_Init(&ret, NULL);
nsres = nsIXMLHttpRequest_GetResponseHeader(This->nsxhr, &header, &ret);
nsACString_Finish(&header);
heap_free(cstr);
return return_nscstr(nsres, &ret, p);
}
static HRESULT WINAPI HTMLXMLHttpRequest_setRequestHeader(IHTMLXMLHttpRequest *iface, BSTR bstrHeader, BSTR bstrValue)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
FIXME("(%p)->(%s %s)\n", This, debugstr_w(bstrHeader), debugstr_w(bstrValue));
return E_NOTIMPL;
}
static const IHTMLXMLHttpRequestVtbl HTMLXMLHttpRequestVtbl = {
HTMLXMLHttpRequest_QueryInterface,
HTMLXMLHttpRequest_AddRef,
HTMLXMLHttpRequest_Release,
HTMLXMLHttpRequest_GetTypeInfoCount,
HTMLXMLHttpRequest_GetTypeInfo,
HTMLXMLHttpRequest_GetIDsOfNames,
HTMLXMLHttpRequest_Invoke,
HTMLXMLHttpRequest_get_readyState,
HTMLXMLHttpRequest_get_responseBody,
HTMLXMLHttpRequest_get_responseText,
HTMLXMLHttpRequest_get_responseXML,
HTMLXMLHttpRequest_get_status,
HTMLXMLHttpRequest_get_statusText,
HTMLXMLHttpRequest_put_onreadystatechange,
HTMLXMLHttpRequest_get_onreadystatechange,
HTMLXMLHttpRequest_abort,
HTMLXMLHttpRequest_open,
HTMLXMLHttpRequest_send,
HTMLXMLHttpRequest_getAllResponseHeaders,
HTMLXMLHttpRequest_getResponseHeader,
HTMLXMLHttpRequest_setRequestHeader
};
static inline HTMLXMLHttpRequest *impl_from_DispatchEx(DispatchEx *iface)
{
return CONTAINING_RECORD(iface, HTMLXMLHttpRequest, event_target.dispex);
}
static void HTMLXMLHttpRequest_bind_event(DispatchEx *dispex, int eid)
{
HTMLXMLHttpRequest *This = impl_from_DispatchEx(dispex);
nsIDOMEventTarget *nstarget;
nsAString type_str;
nsresult nsres;
static const WCHAR readystatechangeW[] = {'r','e','a','d','y','s','t','a','t','e','c','h','a','n','g','e',0};
TRACE("(%p)\n", This);
assert(eid == EVENTID_READYSTATECHANGE);
if(This->event_listener)
return;
This->event_listener = heap_alloc(sizeof(*This->event_listener));
if(!This->event_listener)
return;
This->event_listener->nsIDOMEventListener_iface.lpVtbl = &XMLHttpReqEventListenerVtbl;
This->event_listener->ref = 1;
This->event_listener->xhr = This;
nsres = nsIXMLHttpRequest_QueryInterface(This->nsxhr, &IID_nsIDOMEventTarget, (void**)&nstarget);
assert(nsres == NS_OK);
nsAString_InitDepend(&type_str, readystatechangeW);
nsres = nsIDOMEventTarget_AddEventListener(nstarget, &type_str, &This->event_listener->nsIDOMEventListener_iface, FALSE, TRUE, 2);
nsAString_Finish(&type_str);
nsIDOMEventTarget_Release(nstarget);
if(NS_FAILED(nsres))
ERR("AddEventListener failed: %08x\n", nsres);
}
static dispex_static_data_vtbl_t HTMLXMLHttpRequest_dispex_vtbl = {
NULL,
NULL,
NULL,
NULL,
NULL,
HTMLXMLHttpRequest_bind_event
};
static const tid_t HTMLXMLHttpRequest_iface_tids[] = {
IHTMLXMLHttpRequest_tid,
0
};
static dispex_static_data_t HTMLXMLHttpRequest_dispex = {
&HTMLXMLHttpRequest_dispex_vtbl,
DispHTMLXMLHttpRequest_tid,
NULL,
HTMLXMLHttpRequest_iface_tids
};
/* IHTMLXMLHttpRequestFactory */
static inline HTMLXMLHttpRequestFactory *impl_from_IHTMLXMLHttpRequestFactory(IHTMLXMLHttpRequestFactory *iface)
{
return CONTAINING_RECORD(iface, HTMLXMLHttpRequestFactory, IHTMLXMLHttpRequestFactory_iface);
}
static HRESULT WINAPI HTMLXMLHttpRequestFactory_QueryInterface(IHTMLXMLHttpRequestFactory *iface, REFIID riid, void **ppv)
{
HTMLXMLHttpRequestFactory *This = impl_from_IHTMLXMLHttpRequestFactory(iface);
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
if(IsEqualGUID(&IID_IUnknown, riid)) {
*ppv = &This->IHTMLXMLHttpRequestFactory_iface;
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
*ppv = &This->IHTMLXMLHttpRequestFactory_iface;
}else if(IsEqualGUID(&IID_IHTMLXMLHttpRequestFactory, riid)) {
*ppv = &This->IHTMLXMLHttpRequestFactory_iface;
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
return *ppv ? S_OK : E_NOINTERFACE;
}else {
*ppv = NULL;
WARN("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
return E_NOINTERFACE;
}
IUnknown_AddRef((IUnknown*)*ppv);
return S_OK;
}
static ULONG WINAPI HTMLXMLHttpRequestFactory_AddRef(IHTMLXMLHttpRequestFactory *iface)
{
HTMLXMLHttpRequestFactory *This = impl_from_IHTMLXMLHttpRequestFactory(iface);
LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
return ref;
}
static ULONG WINAPI HTMLXMLHttpRequestFactory_Release(IHTMLXMLHttpRequestFactory *iface)
{
HTMLXMLHttpRequestFactory *This = impl_from_IHTMLXMLHttpRequestFactory(iface);
LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
if(!ref) {
release_dispex(&This->dispex);
heap_free(This);
}
return ref;
}
static HRESULT WINAPI HTMLXMLHttpRequestFactory_GetTypeInfoCount(IHTMLXMLHttpRequestFactory *iface, UINT *pctinfo)
{
HTMLXMLHttpRequestFactory *This = impl_from_IHTMLXMLHttpRequestFactory(iface);
return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
}
static HRESULT WINAPI HTMLXMLHttpRequestFactory_GetTypeInfo(IHTMLXMLHttpRequestFactory *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLXMLHttpRequestFactory *This = impl_from_IHTMLXMLHttpRequestFactory(iface);
return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLXMLHttpRequestFactory_GetIDsOfNames(IHTMLXMLHttpRequestFactory *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames,
LCID lcid, DISPID *rgDispId)
{
HTMLXMLHttpRequestFactory *This = impl_from_IHTMLXMLHttpRequestFactory(iface);
return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
lcid, rgDispId);
}
static HRESULT WINAPI HTMLXMLHttpRequestFactory_Invoke(IHTMLXMLHttpRequestFactory *iface, DISPID dispIdMember, REFIID riid, LCID lcid,
WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLXMLHttpRequestFactory *This = impl_from_IHTMLXMLHttpRequestFactory(iface);
return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid, wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr);
}
static HRESULT WINAPI HTMLXMLHttpRequestFactory_create(IHTMLXMLHttpRequestFactory *iface, IHTMLXMLHttpRequest **p)
{
HTMLXMLHttpRequestFactory *This = impl_from_IHTMLXMLHttpRequestFactory(iface);
HTMLXMLHttpRequest *ret;
nsIXMLHttpRequest *nsxhr;
TRACE("(%p)->(%p)\n", This, p);
nsxhr = create_nsxhr(This->window->base.outer_window->nswindow);
if(!nsxhr)
return E_FAIL;
ret = heap_alloc_zero(sizeof(*ret));
if(!ret) {
nsIXMLHttpRequest_Release(nsxhr);
return E_OUTOFMEMORY;
}
ret->nsxhr = nsxhr;
ret->IHTMLXMLHttpRequest_iface.lpVtbl = &HTMLXMLHttpRequestVtbl;
init_dispex(&ret->event_target.dispex, (IUnknown*)&ret->IHTMLXMLHttpRequest_iface,
&HTMLXMLHttpRequest_dispex);
ret->ref = 1;
*p = &ret->IHTMLXMLHttpRequest_iface;
return S_OK;
}
static const IHTMLXMLHttpRequestFactoryVtbl HTMLXMLHttpRequestFactoryVtbl = {
HTMLXMLHttpRequestFactory_QueryInterface,
HTMLXMLHttpRequestFactory_AddRef,
HTMLXMLHttpRequestFactory_Release,
HTMLXMLHttpRequestFactory_GetTypeInfoCount,
HTMLXMLHttpRequestFactory_GetTypeInfo,
HTMLXMLHttpRequestFactory_GetIDsOfNames,
HTMLXMLHttpRequestFactory_Invoke,
HTMLXMLHttpRequestFactory_create
};
static const tid_t HTMLXMLHttpRequestFactory_iface_tids[] = {
IHTMLXMLHttpRequestFactory_tid,
0
};
static dispex_static_data_t HTMLXMLHttpRequestFactory_dispex = {
NULL,
IHTMLXMLHttpRequestFactory_tid,
NULL,
HTMLXMLHttpRequestFactory_iface_tids
};
HRESULT HTMLXMLHttpRequestFactory_Create(HTMLInnerWindow* window, HTMLXMLHttpRequestFactory **ret_ptr)
{
HTMLXMLHttpRequestFactory *ret;
ret = heap_alloc(sizeof(*ret));
if(!ret)
return E_OUTOFMEMORY;
ret->IHTMLXMLHttpRequestFactory_iface.lpVtbl = &HTMLXMLHttpRequestFactoryVtbl;
ret->ref = 1;
ret->window = window;
init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLXMLHttpRequestFactory_iface,
&HTMLXMLHttpRequestFactory_dispex);
*ret_ptr = ret;
return S_OK;
}

View file

@ -113,7 +113,7 @@ reactos/dll/win32/msctf # Synced to WineStaging-1.7.55
reactos/dll/win32/msftedit # Synced to WineStaging-1.7.55
reactos/dll/win32/msg711.acm # Synced to WineStaging-1.7.55
reactos/dll/win32/msgsm32.acm # Synced to WineStaging-1.7.55
reactos/dll/win32/mshtml # Synced to WineStaging-1.7.37
reactos/dll/win32/mshtml # Synced to WineStaging-1.7.55
reactos/dll/win32/mshtml.tlb # Synced to WineStaging-1.7.47
reactos/dll/win32/msi # Synced to WineStaging-1.7.55
reactos/dll/win32/msimg32 # Synced to WineStaging-1.7.55