2 * Copyright 2006 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
28 #include "wine/debug.h"
29 #include "wine/unicode.h"
31 #include "mshtml_private.h"
32 #include "htmlevent.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
37 static struct list window_list = LIST_INIT(window_list);
39 void window_set_docnode(HTMLWindow *window, HTMLDocumentNode *doc_node)
42 window->doc->basedoc.window = NULL;
43 htmldoc_release(&window->doc->basedoc);
45 window->doc = doc_node;
47 htmldoc_addref(&doc_node->basedoc);
50 #define HTMLWINDOW2_THIS(iface) DEFINE_THIS(HTMLWindow, HTMLWindow2, iface)
52 static HRESULT WINAPI HTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID riid, void **ppv)
54 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
58 if(IsEqualGUID(&IID_IUnknown, riid)) {
59 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
60 *ppv = HTMLWINDOW2(This);
61 }else if(IsEqualGUID(&IID_IDispatch, riid)) {
62 TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
63 *ppv = HTMLWINDOW2(This);
64 }else if(IsEqualGUID(&IID_IDispatchEx, riid)) {
65 TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv);
66 *ppv = DISPATCHEX(This);
67 }else if(IsEqualGUID(&IID_IHTMLFramesCollection2, riid)) {
68 TRACE("(%p)->(IID_IHTMLFramesCollection2 %p)\n", This, ppv);
69 *ppv = HTMLWINDOW2(This);
70 }else if(IsEqualGUID(&IID_IHTMLWindow2, riid)) {
71 TRACE("(%p)->(IID_IHTMLWindow2 %p)\n", This, ppv);
72 *ppv = HTMLWINDOW2(This);
73 }else if(IsEqualGUID(&IID_IHTMLWindow3, riid)) {
74 TRACE("(%p)->(IID_IHTMLWindow2 %p)\n", This, ppv);
75 *ppv = HTMLWINDOW3(This);
76 }else if(dispex_query_interface(&This->dispex, riid, ppv)) {
77 return *ppv ? S_OK : E_NOINTERFACE;
81 IUnknown_AddRef((IUnknown*)*ppv);
85 WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
89 static ULONG WINAPI HTMLWindow2_AddRef(IHTMLWindow2 *iface)
91 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
92 LONG ref = InterlockedIncrement(&This->ref);
94 TRACE("(%p) ref=%d\n", This, ref);
99 static ULONG WINAPI HTMLWindow2_Release(IHTMLWindow2 *iface)
101 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
102 LONG ref = InterlockedDecrement(&This->ref);
104 TRACE("(%p) ref=%d\n", This, ref);
109 window_set_docnode(This, NULL);
111 if(This->option_factory) {
112 This->option_factory->window = NULL;
113 IHTMLOptionElementFactory_Release(HTMLOPTFACTORY(This->option_factory));
117 This->location->window = NULL;
118 IHTMLLocation_Release(HTMLLOCATION(This->location));
121 if(This->event_target)
122 release_event_target(This->event_target);
123 for(i=0; i < This->global_prop_cnt; i++)
124 heap_free(This->global_props[i].name);
125 heap_free(This->global_props);
126 heap_free(This->event_vector);
127 release_script_hosts(This);
128 list_remove(&This->entry);
129 release_dispex(&This->dispex);
136 static HRESULT WINAPI HTMLWindow2_GetTypeInfoCount(IHTMLWindow2 *iface, UINT *pctinfo)
138 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
140 return IDispatchEx_GetTypeInfoCount(DISPATCHEX(This), pctinfo);
143 static HRESULT WINAPI HTMLWindow2_GetTypeInfo(IHTMLWindow2 *iface, UINT iTInfo,
144 LCID lcid, ITypeInfo **ppTInfo)
146 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
148 return IDispatchEx_GetTypeInfo(DISPATCHEX(This), iTInfo, lcid, ppTInfo);
151 static HRESULT WINAPI HTMLWindow2_GetIDsOfNames(IHTMLWindow2 *iface, REFIID riid,
152 LPOLESTR *rgszNames, UINT cNames,
153 LCID lcid, DISPID *rgDispId)
155 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
157 return IDispatchEx_GetIDsOfNames(DISPATCHEX(This), riid, rgszNames, cNames, lcid, rgDispId);
160 static HRESULT WINAPI HTMLWindow2_Invoke(IHTMLWindow2 *iface, DISPID dispIdMember,
161 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
162 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
164 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
166 return IDispatchEx_Invoke(DISPATCHEX(This), dispIdMember, riid, lcid, wFlags, pDispParams,
167 pVarResult, pExcepInfo, puArgErr);
170 static HRESULT WINAPI HTMLWindow2_item(IHTMLWindow2 *iface, VARIANT *pvarIndex, VARIANT *pvarResult)
172 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
173 FIXME("(%p)->(%p %p)\n", This, pvarIndex, pvarResult);
177 static HRESULT WINAPI HTMLWindow2_get_length(IHTMLWindow2 *iface, LONG *p)
179 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
180 nsIDOMWindowCollection *nscollection;
184 TRACE("(%p)->(%p)\n", This, p);
186 nsres = nsIDOMWindow_GetFrames(This->nswindow, &nscollection);
187 if(NS_FAILED(nsres)) {
188 ERR("GetFrames failed: %08x\n", nsres);
192 nsres = nsIDOMWindowCollection_GetLength(nscollection, &length);
193 nsIDOMWindowCollection_Release(nscollection);
194 if(NS_FAILED(nsres)) {
195 ERR("GetLength failed: %08x\n", nsres);
203 static HRESULT WINAPI HTMLWindow2_get_frames(IHTMLWindow2 *iface, IHTMLFramesCollection2 **p)
205 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
206 FIXME("(%p)->(%p)\n", This, p);
210 static HRESULT WINAPI HTMLWindow2_put_defaultStatus(IHTMLWindow2 *iface, BSTR v)
212 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
213 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
217 static HRESULT WINAPI HTMLWindow2_get_defaultStatus(IHTMLWindow2 *iface, BSTR *p)
219 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
220 FIXME("(%p)->(%p)\n", This, p);
224 static HRESULT WINAPI HTMLWindow2_put_status(IHTMLWindow2 *iface, BSTR v)
226 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
227 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
231 static HRESULT WINAPI HTMLWindow2_get_status(IHTMLWindow2 *iface, BSTR *p)
233 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
234 FIXME("(%p)->(%p)\n", This, p);
238 static HRESULT WINAPI HTMLWindow2_setTimeout(IHTMLWindow2 *iface, BSTR expression,
239 LONG msec, VARIANT *language, LONG *timerID)
241 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
244 TRACE("(%p)->(%s %d %p %p)\n", This, debugstr_w(expression), msec, language, timerID);
246 V_VT(&expr_var) = VT_BSTR;
247 V_BSTR(&expr_var) = expression;
249 return IHTMLWindow3_setTimeout(HTMLWINDOW3(This), &expr_var, msec, language, timerID);
252 static HRESULT WINAPI HTMLWindow2_clearTimeout(IHTMLWindow2 *iface, LONG timerID)
254 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
256 TRACE("(%p)->(%d)\n", This, timerID);
258 return clear_task_timer(&This->doc->basedoc, FALSE, timerID);
261 static HRESULT WINAPI HTMLWindow2_alert(IHTMLWindow2 *iface, BSTR message)
263 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
266 TRACE("(%p)->(%s)\n", This, debugstr_w(message));
268 if(!LoadStringW(get_shdoclc(), IDS_MESSAGE_BOX_TITLE, wszTitle,
269 sizeof(wszTitle)/sizeof(WCHAR))) {
270 WARN("Could not load message box title: %d\n", GetLastError());
274 MessageBoxW(This->doc_obj->hwnd, message, wszTitle, MB_ICONWARNING);
278 static HRESULT WINAPI HTMLWindow2_confirm(IHTMLWindow2 *iface, BSTR message,
279 VARIANT_BOOL *confirmed)
281 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
284 TRACE("(%p)->(%s %p)\n", This, debugstr_w(message), confirmed);
286 if(!confirmed) return E_INVALIDARG;
288 if(!LoadStringW(get_shdoclc(), IDS_MESSAGE_BOX_TITLE, wszTitle,
289 sizeof(wszTitle)/sizeof(WCHAR))) {
290 WARN("Could not load message box title: %d\n", GetLastError());
291 *confirmed = VARIANT_TRUE;
295 if(MessageBoxW(This->doc_obj->hwnd, message, wszTitle,
296 MB_OKCANCEL|MB_ICONQUESTION)==IDOK)
297 *confirmed = VARIANT_TRUE;
298 else *confirmed = VARIANT_FALSE;
310 static INT_PTR CALLBACK prompt_dlgproc(HWND hwnd, UINT msg,
311 WPARAM wparam, LPARAM lparam)
317 prompt_arg *arg = (prompt_arg*)lparam;
320 if(!LoadStringW(get_shdoclc(), IDS_MESSAGE_BOX_TITLE, wszTitle,
321 sizeof(wszTitle)/sizeof(WCHAR))) {
322 WARN("Could not load message box title: %d\n", GetLastError());
323 EndDialog(hwnd, wparam);
327 SetWindowLongPtrW(hwnd, DWLP_USER, lparam);
328 SetWindowTextW(hwnd, wszTitle);
329 SetWindowTextW(GetDlgItem(hwnd, ID_PROMPT_PROMPT), arg->message);
330 SetWindowTextW(GetDlgItem(hwnd, ID_PROMPT_EDIT), arg->dststr);
336 case MAKEWPARAM(IDCANCEL, BN_CLICKED):
337 EndDialog(hwnd, wparam);
339 case MAKEWPARAM(IDOK, BN_CLICKED):
342 (prompt_arg*)GetWindowLongPtrW(hwnd, DWLP_USER);
343 HWND hwndPrompt = GetDlgItem(hwnd, ID_PROMPT_EDIT);
344 INT len = GetWindowTextLengthW(hwndPrompt);
348 EndDialog(hwnd, wparam);
352 V_VT(arg->textdata) = VT_BSTR;
353 if(!len && !arg->dststr)
354 V_BSTR(arg->textdata) = NULL;
357 V_BSTR(arg->textdata) = SysAllocStringLen(NULL, len);
358 GetWindowTextW(hwndPrompt, V_BSTR(arg->textdata), len+1);
360 EndDialog(hwnd, wparam);
366 EndDialog(hwnd, IDCANCEL);
373 static HRESULT WINAPI HTMLWindow2_prompt(IHTMLWindow2 *iface, BSTR message,
374 BSTR dststr, VARIANT *textdata)
376 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
379 TRACE("(%p)->(%s %s %p)\n", This, debugstr_w(message), debugstr_w(dststr), textdata);
381 if(textdata) V_VT(textdata) = VT_NULL;
383 arg.message = message;
385 arg.textdata = textdata;
387 DialogBoxParamW(hInst, MAKEINTRESOURCEW(ID_PROMPT_DIALOG),
388 This->doc_obj->hwnd, prompt_dlgproc, (LPARAM)&arg);
392 static HRESULT WINAPI HTMLWindow2_get_Image(IHTMLWindow2 *iface, IHTMLImageElementFactory **p)
394 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
395 FIXME("(%p)->(%p)\n", This, p);
399 static HRESULT WINAPI HTMLWindow2_get_location(IHTMLWindow2 *iface, IHTMLLocation **p)
401 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
403 TRACE("(%p)->(%p)\n", This, p);
406 IHTMLLocation_AddRef(HTMLLOCATION(This->location));
410 hres = HTMLLocation_Create(This, &This->location);
415 *p = HTMLLOCATION(This->location);
419 static HRESULT WINAPI HTMLWindow2_get_history(IHTMLWindow2 *iface, IOmHistory **p)
421 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
422 FIXME("(%p)->(%p)\n", This, p);
426 static HRESULT WINAPI HTMLWindow2_close(IHTMLWindow2 *iface)
428 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
429 FIXME("(%p)->()\n", This);
433 static HRESULT WINAPI HTMLWindow2_put_opener(IHTMLWindow2 *iface, VARIANT v)
435 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
436 FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
440 static HRESULT WINAPI HTMLWindow2_get_opener(IHTMLWindow2 *iface, VARIANT *p)
442 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
443 FIXME("(%p)->(%p)\n", This, p);
447 static HRESULT WINAPI HTMLWindow2_get_navigator(IHTMLWindow2 *iface, IOmNavigator **p)
449 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
451 TRACE("(%p)->(%p)\n", This, p);
453 *p = OmNavigator_Create();
457 static HRESULT WINAPI HTMLWindow2_put_name(IHTMLWindow2 *iface, BSTR v)
459 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
463 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
465 nsAString_Init(&name_str, v);
466 nsres = nsIDOMWindow_SetName(This->nswindow, &name_str);
467 nsAString_Finish(&name_str);
469 ERR("SetName failed: %08x\n", nsres);
474 static HRESULT WINAPI HTMLWindow2_get_name(IHTMLWindow2 *iface, BSTR *p)
476 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
481 TRACE("(%p)->(%p)\n", This, p);
483 nsAString_Init(&name_str, NULL);
484 nsres = nsIDOMWindow_GetName(This->nswindow, &name_str);
485 if(NS_SUCCEEDED(nsres)) {
486 const PRUnichar *name;
488 nsAString_GetData(&name_str, &name);
490 *p = SysAllocString(name);
491 hres = *p ? S_OK : E_OUTOFMEMORY;
497 ERR("GetName failed: %08x\n", nsres);
500 nsAString_Finish(&name_str);
505 static HRESULT WINAPI HTMLWindow2_get_parent(IHTMLWindow2 *iface, IHTMLWindow2 **p)
507 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
508 FIXME("(%p)->(%p)\n", This, p);
512 static HRESULT WINAPI HTMLWindow2_open(IHTMLWindow2 *iface, BSTR url, BSTR name,
513 BSTR features, VARIANT_BOOL replace, IHTMLWindow2 **pomWindowResult)
515 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
516 FIXME("(%p)->(%s %s %s %x %p)\n", This, debugstr_w(url), debugstr_w(name),
517 debugstr_w(features), replace, pomWindowResult);
521 static HRESULT WINAPI HTMLWindow2_get_self(IHTMLWindow2 *iface, IHTMLWindow2 **p)
523 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
525 TRACE("(%p)->(%p)\n", This, p);
527 /* FIXME: We should return kind of proxy window here. */
528 IHTMLWindow2_AddRef(HTMLWINDOW2(This));
529 *p = HTMLWINDOW2(This);
533 static HRESULT WINAPI HTMLWindow2_get_top(IHTMLWindow2 *iface, IHTMLWindow2 **p)
535 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
536 FIXME("(%p)->(%p)\n", This, p);
540 static HRESULT WINAPI HTMLWindow2_get_window(IHTMLWindow2 *iface, IHTMLWindow2 **p)
542 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
544 TRACE("(%p)->(%p)\n", This, p);
546 /* FIXME: We should return kind of proxy window here. */
547 IHTMLWindow2_AddRef(HTMLWINDOW2(This));
548 *p = HTMLWINDOW2(This);
552 static HRESULT WINAPI HTMLWindow2_navigate(IHTMLWindow2 *iface, BSTR url)
554 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
555 FIXME("(%p)->(%s)\n", This, debugstr_w(url));
559 static HRESULT WINAPI HTMLWindow2_put_onfocus(IHTMLWindow2 *iface, VARIANT v)
561 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
562 FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
566 static HRESULT WINAPI HTMLWindow2_get_onfocus(IHTMLWindow2 *iface, VARIANT *p)
568 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
569 FIXME("(%p)->(%p)\n", This, p);
573 static HRESULT WINAPI HTMLWindow2_put_onblur(IHTMLWindow2 *iface, VARIANT v)
575 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
576 FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
580 static HRESULT WINAPI HTMLWindow2_get_onblur(IHTMLWindow2 *iface, VARIANT *p)
582 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
583 FIXME("(%p)->(%p)\n", This, p);
587 static HRESULT WINAPI HTMLWindow2_put_onload(IHTMLWindow2 *iface, VARIANT v)
589 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
591 TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
593 return set_window_event(This, EVENTID_LOAD, &v);
596 static HRESULT WINAPI HTMLWindow2_get_onload(IHTMLWindow2 *iface, VARIANT *p)
598 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
600 TRACE("(%p)->(%p)\n", This, p);
602 return get_window_event(This, EVENTID_LOAD, p);
605 static HRESULT WINAPI HTMLWindow2_put_onbeforeunload(IHTMLWindow2 *iface, VARIANT v)
607 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
609 TRACE("(%p)->(v(%d))\n", This, V_VT(&v));
611 return set_window_event(This, EVENTID_BEFOREUNLOAD, &v);
614 static HRESULT WINAPI HTMLWindow2_get_onbeforeunload(IHTMLWindow2 *iface, VARIANT *p)
616 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
618 TRACE("(%p)->(%p)\n", This, p);
620 return get_window_event(This, EVENTID_BEFOREUNLOAD, p);
623 static HRESULT WINAPI HTMLWindow2_put_onunload(IHTMLWindow2 *iface, VARIANT v)
625 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
626 FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
630 static HRESULT WINAPI HTMLWindow2_get_onunload(IHTMLWindow2 *iface, VARIANT *p)
632 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
633 FIXME("(%p)->(%p)\n", This, p);
637 static HRESULT WINAPI HTMLWindow2_put_onhelp(IHTMLWindow2 *iface, VARIANT v)
639 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
640 FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
644 static HRESULT WINAPI HTMLWindow2_get_onhelp(IHTMLWindow2 *iface, VARIANT *p)
646 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
647 FIXME("(%p)->(%p)\n", This, p);
651 static HRESULT WINAPI HTMLWindow2_put_onerror(IHTMLWindow2 *iface, VARIANT v)
653 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
654 FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
658 static HRESULT WINAPI HTMLWindow2_get_onerror(IHTMLWindow2 *iface, VARIANT *p)
660 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
661 FIXME("(%p)->(%p)\n", This, p);
665 static HRESULT WINAPI HTMLWindow2_put_onresize(IHTMLWindow2 *iface, VARIANT v)
667 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
668 FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
672 static HRESULT WINAPI HTMLWindow2_get_onresize(IHTMLWindow2 *iface, VARIANT *p)
674 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
675 FIXME("(%p)->(%p)\n", This, p);
679 static HRESULT WINAPI HTMLWindow2_put_onscroll(IHTMLWindow2 *iface, VARIANT v)
681 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
682 FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
686 static HRESULT WINAPI HTMLWindow2_get_onscroll(IHTMLWindow2 *iface, VARIANT *p)
688 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
689 FIXME("(%p)->(%p)\n", This, p);
693 static HRESULT WINAPI HTMLWindow2_get_document(IHTMLWindow2 *iface, IHTMLDocument2 **p)
695 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
697 TRACE("(%p)->(%p)\n", This, p);
700 /* FIXME: We should return a wrapper object here */
701 *p = HTMLDOC(&This->doc->basedoc);
702 IHTMLDocument2_AddRef(*p);
710 static HRESULT WINAPI HTMLWindow2_get_event(IHTMLWindow2 *iface, IHTMLEventObj **p)
712 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
714 TRACE("(%p)->(%p)\n", This, p);
717 IHTMLEventObj_AddRef(This->event);
722 static HRESULT WINAPI HTMLWindow2_get__newEnum(IHTMLWindow2 *iface, IUnknown **p)
724 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
725 FIXME("(%p)->(%p)\n", This, p);
729 static HRESULT WINAPI HTMLWindow2_showModalDialog(IHTMLWindow2 *iface, BSTR dialog,
730 VARIANT *varArgIn, VARIANT *varOptions, VARIANT *varArgOut)
732 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
733 FIXME("(%p)->(%s %p %p %p)\n", This, debugstr_w(dialog), varArgIn, varOptions, varArgOut);
737 static HRESULT WINAPI HTMLWindow2_showHelp(IHTMLWindow2 *iface, BSTR helpURL, VARIANT helpArg,
740 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
741 FIXME("(%p)->(%s v(%d) %s)\n", This, debugstr_w(helpURL), V_VT(&helpArg), debugstr_w(features));
745 static HRESULT WINAPI HTMLWindow2_get_screen(IHTMLWindow2 *iface, IHTMLScreen **p)
747 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
748 FIXME("(%p)->(%p)\n", This, p);
752 static HRESULT WINAPI HTMLWindow2_get_Option(IHTMLWindow2 *iface, IHTMLOptionElementFactory **p)
754 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
756 TRACE("(%p)->(%p)\n", This, p);
758 if(!This->option_factory)
759 This->option_factory = HTMLOptionElementFactory_Create(This);
761 *p = HTMLOPTFACTORY(This->option_factory);
762 IHTMLOptionElementFactory_AddRef(*p);
767 static HRESULT WINAPI HTMLWindow2_focus(IHTMLWindow2 *iface)
769 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
770 FIXME("(%p)->()\n", This);
774 static HRESULT WINAPI HTMLWindow2_get_closed(IHTMLWindow2 *iface, VARIANT_BOOL *p)
776 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
777 FIXME("(%p)->(%p)\n", This, p);
781 static HRESULT WINAPI HTMLWindow2_blur(IHTMLWindow2 *iface)
783 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
784 FIXME("(%p)->()\n", This);
788 static HRESULT WINAPI HTMLWindow2_scroll(IHTMLWindow2 *iface, LONG x, LONG y)
790 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
791 FIXME("(%p)->(%d %d)\n", This, x, y);
795 static HRESULT WINAPI HTMLWindow2_get_clientInformation(IHTMLWindow2 *iface, IOmNavigator **p)
797 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
798 FIXME("(%p)->(%p)\n", This, p);
802 static HRESULT WINAPI HTMLWindow2_setInterval(IHTMLWindow2 *iface, BSTR expression,
803 LONG msec, VARIANT *language, LONG *timerID)
805 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
808 TRACE("(%p)->(%s %d %p %p)\n", This, debugstr_w(expression), msec, language, timerID);
810 V_VT(&expr) = VT_BSTR;
811 V_BSTR(&expr) = expression;
812 return IHTMLWindow3_setInterval(HTMLWINDOW3(This), &expr, msec, language, timerID);
815 static HRESULT WINAPI HTMLWindow2_clearInterval(IHTMLWindow2 *iface, LONG timerID)
817 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
819 TRACE("(%p)->(%d)\n", This, timerID);
821 return clear_task_timer(&This->doc->basedoc, TRUE, timerID);
824 static HRESULT WINAPI HTMLWindow2_put_offscreenBuffering(IHTMLWindow2 *iface, VARIANT v)
826 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
827 FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
831 static HRESULT WINAPI HTMLWindow2_get_offscreenBuffering(IHTMLWindow2 *iface, VARIANT *p)
833 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
834 FIXME("(%p)->(%p)\n", This, p);
838 static HRESULT WINAPI HTMLWindow2_execScript(IHTMLWindow2 *iface, BSTR scode, BSTR language,
841 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
842 FIXME("(%p)->(%s %s %p)\n", This, debugstr_w(scode), debugstr_w(language), pvarRet);
846 static HRESULT WINAPI HTMLWindow2_toString(IHTMLWindow2 *iface, BSTR *String)
848 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
850 static const WCHAR objectW[] = {'[','o','b','j','e','c','t',']',0};
852 TRACE("(%p)->(%p)\n", This, String);
857 *String = SysAllocString(objectW);
858 return *String ? S_OK : E_OUTOFMEMORY;
861 static HRESULT WINAPI HTMLWindow2_scrollBy(IHTMLWindow2 *iface, LONG x, LONG y)
863 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
866 TRACE("(%p)->(%d %d)\n", This, x, y);
868 nsres = nsIDOMWindow_ScrollBy(This->nswindow, x, y);
870 ERR("ScrollBy failed: %08x\n", nsres);
875 static HRESULT WINAPI HTMLWindow2_scrollTo(IHTMLWindow2 *iface, LONG x, LONG y)
877 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
880 TRACE("(%p)->(%d %d)\n", This, x, y);
882 nsres = nsIDOMWindow_ScrollTo(This->nswindow, x, y);
884 ERR("ScrollTo failed: %08x\n", nsres);
889 static HRESULT WINAPI HTMLWindow2_moveTo(IHTMLWindow2 *iface, LONG x, LONG y)
891 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
892 FIXME("(%p)->(%d %d)\n", This, x, y);
896 static HRESULT WINAPI HTMLWindow2_moveBy(IHTMLWindow2 *iface, LONG x, LONG y)
898 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
899 FIXME("(%p)->(%d %d)\n", This, x, y);
903 static HRESULT WINAPI HTMLWindow2_resizeTo(IHTMLWindow2 *iface, LONG x, LONG y)
905 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
906 FIXME("(%p)->(%d %d)\n", This, x, y);
910 static HRESULT WINAPI HTMLWindow2_resizeBy(IHTMLWindow2 *iface, LONG x, LONG y)
912 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
913 FIXME("(%p)->(%d %d)\n", This, x, y);
917 static HRESULT WINAPI HTMLWindow2_get_external(IHTMLWindow2 *iface, IDispatch **p)
919 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
921 TRACE("(%p)->(%p)\n", This, p);
925 if(!This->doc_obj->hostui)
928 return IDocHostUIHandler_GetExternal(This->doc_obj->hostui, p);
931 static HRESULT HTMLWindow_invoke(IUnknown *iface, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params,
932 VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
934 HTMLWindow *This = HTMLWINDOW2_THIS(iface);
940 idx = id - MSHTML_DISPID_CUSTOM_MIN;
941 if(idx >= This->global_prop_cnt)
942 return DISP_E_MEMBERNOTFOUND;
944 disp = get_script_disp(This->global_props[idx].script_host);
948 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
949 if(SUCCEEDED(hres)) {
950 TRACE("%s >>>\n", debugstr_w(This->global_props[idx].name));
951 hres = IDispatchEx_InvokeEx(dispex, This->global_props[idx].id, lcid, flags, params, res, ei, caller);
953 TRACE("%s <<<\n", debugstr_w(This->global_props[idx].name));
955 WARN("%s <<< %08x\n", debugstr_w(This->global_props[idx].name), hres);
956 IDispatchEx_Release(dispex);
958 FIXME("No IDispatchEx\n");
961 IDispatch_Release(disp);
965 #undef HTMLWINDOW2_THIS
967 static const IHTMLWindow2Vtbl HTMLWindow2Vtbl = {
968 HTMLWindow2_QueryInterface,
971 HTMLWindow2_GetTypeInfoCount,
972 HTMLWindow2_GetTypeInfo,
973 HTMLWindow2_GetIDsOfNames,
976 HTMLWindow2_get_length,
977 HTMLWindow2_get_frames,
978 HTMLWindow2_put_defaultStatus,
979 HTMLWindow2_get_defaultStatus,
980 HTMLWindow2_put_status,
981 HTMLWindow2_get_status,
982 HTMLWindow2_setTimeout,
983 HTMLWindow2_clearTimeout,
987 HTMLWindow2_get_Image,
988 HTMLWindow2_get_location,
989 HTMLWindow2_get_history,
991 HTMLWindow2_put_opener,
992 HTMLWindow2_get_opener,
993 HTMLWindow2_get_navigator,
994 HTMLWindow2_put_name,
995 HTMLWindow2_get_name,
996 HTMLWindow2_get_parent,
998 HTMLWindow2_get_self,
1000 HTMLWindow2_get_window,
1001 HTMLWindow2_navigate,
1002 HTMLWindow2_put_onfocus,
1003 HTMLWindow2_get_onfocus,
1004 HTMLWindow2_put_onblur,
1005 HTMLWindow2_get_onblur,
1006 HTMLWindow2_put_onload,
1007 HTMLWindow2_get_onload,
1008 HTMLWindow2_put_onbeforeunload,
1009 HTMLWindow2_get_onbeforeunload,
1010 HTMLWindow2_put_onunload,
1011 HTMLWindow2_get_onunload,
1012 HTMLWindow2_put_onhelp,
1013 HTMLWindow2_get_onhelp,
1014 HTMLWindow2_put_onerror,
1015 HTMLWindow2_get_onerror,
1016 HTMLWindow2_put_onresize,
1017 HTMLWindow2_get_onresize,
1018 HTMLWindow2_put_onscroll,
1019 HTMLWindow2_get_onscroll,
1020 HTMLWindow2_get_document,
1021 HTMLWindow2_get_event,
1022 HTMLWindow2_get__newEnum,
1023 HTMLWindow2_showModalDialog,
1024 HTMLWindow2_showHelp,
1025 HTMLWindow2_get_screen,
1026 HTMLWindow2_get_Option,
1028 HTMLWindow2_get_closed,
1031 HTMLWindow2_get_clientInformation,
1032 HTMLWindow2_setInterval,
1033 HTMLWindow2_clearInterval,
1034 HTMLWindow2_put_offscreenBuffering,
1035 HTMLWindow2_get_offscreenBuffering,
1036 HTMLWindow2_execScript,
1037 HTMLWindow2_toString,
1038 HTMLWindow2_scrollBy,
1039 HTMLWindow2_scrollTo,
1042 HTMLWindow2_resizeTo,
1043 HTMLWindow2_resizeBy,
1044 HTMLWindow2_get_external
1047 #define HTMLWINDOW3_THIS(iface) DEFINE_THIS(HTMLWindow, HTMLWindow3, iface)
1049 static HRESULT WINAPI HTMLWindow3_QueryInterface(IHTMLWindow3 *iface, REFIID riid, void **ppv)
1051 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1053 return IHTMLWindow2_QueryInterface(HTMLWINDOW2(This), riid, ppv);
1056 static ULONG WINAPI HTMLWindow3_AddRef(IHTMLWindow3 *iface)
1058 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1060 return IHTMLWindow2_AddRef(HTMLWINDOW2(This));
1063 static ULONG WINAPI HTMLWindow3_Release(IHTMLWindow3 *iface)
1065 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1067 return IHTMLWindow2_Release(HTMLWINDOW2(This));
1070 static HRESULT WINAPI HTMLWindow3_GetTypeInfoCount(IHTMLWindow3 *iface, UINT *pctinfo)
1072 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1074 return IDispatchEx_GetTypeInfoCount(DISPATCHEX(This), pctinfo);
1077 static HRESULT WINAPI HTMLWindow3_GetTypeInfo(IHTMLWindow3 *iface, UINT iTInfo,
1078 LCID lcid, ITypeInfo **ppTInfo)
1080 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1082 return IDispatchEx_GetTypeInfo(DISPATCHEX(This), iTInfo, lcid, ppTInfo);
1085 static HRESULT WINAPI HTMLWindow3_GetIDsOfNames(IHTMLWindow3 *iface, REFIID riid,
1086 LPOLESTR *rgszNames, UINT cNames,
1087 LCID lcid, DISPID *rgDispId)
1089 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1091 return IDispatchEx_GetIDsOfNames(DISPATCHEX(This), riid, rgszNames, cNames, lcid, rgDispId);
1094 static HRESULT WINAPI HTMLWindow3_Invoke(IHTMLWindow3 *iface, DISPID dispIdMember,
1095 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
1096 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
1098 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1100 return IDispatchEx_Invoke(DISPATCHEX(This), dispIdMember, riid, lcid, wFlags, pDispParams,
1101 pVarResult, pExcepInfo, puArgErr);
1104 static HRESULT WINAPI HTMLWindow3_get_screenLeft(IHTMLWindow3 *iface, LONG *p)
1106 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1107 FIXME("(%p)->(%p)\n", This, p);
1111 static HRESULT WINAPI HTMLWindow3_get_screenTop(IHTMLWindow3 *iface, LONG *p)
1113 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1114 FIXME("(%p)->(%p)\n", This, p);
1118 static HRESULT WINAPI HTMLWindow3_attachEvent(IHTMLWindow3 *iface, BSTR event, IDispatch *pDisp, VARIANT_BOOL *pfResult)
1120 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1122 TRACE("(%p)->(%s %p %p)\n", This, debugstr_w(event), pDisp, pfResult);
1124 return attach_event(&This->event_target, &This->doc_obj->basedoc, event, pDisp, pfResult);
1127 static HRESULT WINAPI HTMLWindow3_detachEvent(IHTMLWindow3 *iface, BSTR event, IDispatch *pDisp)
1129 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1130 FIXME("(%p)->()\n", This);
1134 static HRESULT window_set_timer(HTMLWindow *This, VARIANT *expr, LONG msec, VARIANT *language,
1135 BOOL interval, LONG *timer_id)
1137 IDispatch *disp = NULL;
1139 switch(V_VT(expr)) {
1141 disp = V_DISPATCH(expr);
1142 IDispatch_AddRef(disp);
1146 disp = script_parse_event(This, V_BSTR(expr));
1150 FIXME("unimplemented vt=%d\n", V_VT(expr));
1157 *timer_id = set_task_timer(&This->doc->basedoc, msec, interval, disp);
1158 IDispatch_Release(disp);
1163 static HRESULT WINAPI HTMLWindow3_setTimeout(IHTMLWindow3 *iface, VARIANT *expression, LONG msec,
1164 VARIANT *language, LONG *timerID)
1166 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1168 TRACE("(%p)->(%p(%d) %d %p %p)\n", This, expression, V_VT(expression), msec, language, timerID);
1170 return window_set_timer(This, expression, msec, language, FALSE, timerID);
1173 static HRESULT WINAPI HTMLWindow3_setInterval(IHTMLWindow3 *iface, VARIANT *expression, LONG msec,
1174 VARIANT *language, LONG *timerID)
1176 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1178 TRACE("(%p)->(%p %d %p %p)\n", This, expression, msec, language, timerID);
1180 return window_set_timer(This, expression, msec, language, TRUE, timerID);
1183 static HRESULT WINAPI HTMLWindow3_print(IHTMLWindow3 *iface)
1185 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1186 FIXME("(%p)\n", This);
1190 static HRESULT WINAPI HTMLWindow3_put_onbeforeprint(IHTMLWindow3 *iface, VARIANT v)
1192 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1193 FIXME("(%p)->()\n", This);
1197 static HRESULT WINAPI HTMLWindow3_get_onbeforeprint(IHTMLWindow3 *iface, VARIANT *p)
1199 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1200 FIXME("(%p)->(%p)\n", This, p);
1204 static HRESULT WINAPI HTMLWindow3_put_onafterprint(IHTMLWindow3 *iface, VARIANT v)
1206 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1207 FIXME("(%p)->()\n", This);
1211 static HRESULT WINAPI HTMLWindow3_get_onafterprint(IHTMLWindow3 *iface, VARIANT *p)
1213 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1214 FIXME("(%p)->(%p)\n", This, p);
1218 static HRESULT WINAPI HTMLWindow3_get_clipboardData(IHTMLWindow3 *iface, IHTMLDataTransfer **p)
1220 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1221 FIXME("(%p)->(%p)\n", This, p);
1225 static HRESULT WINAPI HTMLWindow3_showModelessDialog(IHTMLWindow3 *iface, BSTR url,
1226 VARIANT *varArgIn, VARIANT *options, IHTMLWindow2 **pDialog)
1228 HTMLWindow *This = HTMLWINDOW3_THIS(iface);
1229 FIXME("(%p)->(%s %p %p %p)\n", This, debugstr_w(url), varArgIn, options, pDialog);
1233 #undef HTMLWINDOW3_THIS
1235 static const IHTMLWindow3Vtbl HTMLWindow3Vtbl = {
1236 HTMLWindow3_QueryInterface,
1238 HTMLWindow3_Release,
1239 HTMLWindow3_GetTypeInfoCount,
1240 HTMLWindow3_GetTypeInfo,
1241 HTMLWindow3_GetIDsOfNames,
1243 HTMLWindow3_get_screenLeft,
1244 HTMLWindow3_get_screenTop,
1245 HTMLWindow3_attachEvent,
1246 HTMLWindow3_detachEvent,
1247 HTMLWindow3_setTimeout,
1248 HTMLWindow3_setInterval,
1250 HTMLWindow3_put_onbeforeprint,
1251 HTMLWindow3_get_onbeforeprint,
1252 HTMLWindow3_put_onafterprint,
1253 HTMLWindow3_get_onafterprint,
1254 HTMLWindow3_get_clipboardData,
1255 HTMLWindow3_showModelessDialog
1258 #define DISPEX_THIS(iface) DEFINE_THIS(HTMLWindow, IDispatchEx, iface)
1260 static HRESULT WINAPI WindowDispEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
1262 HTMLWindow *This = DISPEX_THIS(iface);
1264 return IHTMLWindow2_QueryInterface(HTMLWINDOW2(This), riid, ppv);
1267 static ULONG WINAPI WindowDispEx_AddRef(IDispatchEx *iface)
1269 HTMLWindow *This = DISPEX_THIS(iface);
1271 return IHTMLWindow2_AddRef(HTMLWINDOW2(This));
1274 static ULONG WINAPI WindowDispEx_Release(IDispatchEx *iface)
1276 HTMLWindow *This = DISPEX_THIS(iface);
1278 return IHTMLWindow2_Release(HTMLWINDOW2(This));
1281 static HRESULT WINAPI WindowDispEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
1283 HTMLWindow *This = DISPEX_THIS(iface);
1285 TRACE("(%p)->(%p)\n", This, pctinfo);
1287 return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->dispex), pctinfo);
1290 static HRESULT WINAPI WindowDispEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo,
1291 LCID lcid, ITypeInfo **ppTInfo)
1293 HTMLWindow *This = DISPEX_THIS(iface);
1295 TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
1297 return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->dispex), iTInfo, lcid, ppTInfo);
1300 static HRESULT WINAPI WindowDispEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid,
1301 LPOLESTR *rgszNames, UINT cNames,
1302 LCID lcid, DISPID *rgDispId)
1304 HTMLWindow *This = DISPEX_THIS(iface);
1306 TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
1309 /* FIXME: Use script dispatch */
1311 return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->dispex), riid, rgszNames, cNames, lcid, rgDispId);
1314 static HRESULT WINAPI WindowDispEx_Invoke(IDispatchEx *iface, DISPID dispIdMember,
1315 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
1316 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
1318 HTMLWindow *This = DISPEX_THIS(iface);
1320 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
1321 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
1323 /* FIXME: Use script dispatch */
1325 return IDispatchEx_Invoke(DISPATCHEX(&This->dispex), dispIdMember, riid, lcid, wFlags, pDispParams,
1326 pVarResult, pExcepInfo, puArgErr);
1329 static HRESULT WINAPI WindowDispEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
1331 HTMLWindow *This = DISPEX_THIS(iface);
1332 ScriptHost *script_host;
1336 TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid);
1338 for(i=0; i < This->global_prop_cnt; i++) {
1339 /* FIXME: case sensitivity */
1340 if(!strcmpW(This->global_props[i].name, bstrName)) {
1341 *pid = MSHTML_DISPID_CUSTOM_MIN+i;
1346 if(find_global_prop(This, bstrName, grfdex, &script_host, &id)) {
1347 if(This->global_prop_cnt == This->global_prop_size) {
1348 global_prop_t *new_props;
1351 if(This->global_props) {
1352 new_size = This->global_prop_size*2;
1353 new_props = heap_realloc(This->global_props, new_size*sizeof(global_prop_t));
1356 new_props = heap_alloc(new_size*sizeof(global_prop_t));
1359 return E_OUTOFMEMORY;
1360 This->global_props = new_props;
1361 This->global_prop_size = new_size;
1364 This->global_props[This->global_prop_cnt].name = heap_strdupW(bstrName);
1365 if(!This->global_props[This->global_prop_cnt].name)
1366 return E_OUTOFMEMORY;
1368 This->global_props[This->global_prop_cnt].script_host = script_host;
1369 This->global_props[This->global_prop_cnt].id = id;
1371 *pid = MSHTML_DISPID_CUSTOM_MIN + (This->global_prop_cnt++);
1375 return IDispatchEx_GetDispID(DISPATCHEX(&This->dispex), bstrName, grfdex, pid);
1378 static HRESULT WINAPI WindowDispEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
1379 VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
1381 HTMLWindow *This = DISPEX_THIS(iface);
1383 TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
1385 return IDispatchEx_InvokeEx(DISPATCHEX(&This->dispex), id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
1388 static HRESULT WINAPI WindowDispEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
1390 HTMLWindow *This = DISPEX_THIS(iface);
1392 TRACE("(%p)->(%s %x)\n", This, debugstr_w(bstrName), grfdex);
1394 return IDispatchEx_DeleteMemberByName(DISPATCHEX(&This->dispex), bstrName, grfdex);
1397 static HRESULT WINAPI WindowDispEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
1399 HTMLWindow *This = DISPEX_THIS(iface);
1401 TRACE("(%p)->(%x)\n", This, id);
1403 return IDispatchEx_DeleteMemberByDispID(DISPATCHEX(&This->dispex), id);
1406 static HRESULT WINAPI WindowDispEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
1408 HTMLWindow *This = DISPEX_THIS(iface);
1410 TRACE("(%p)->(%x %x %p)\n", This, id, grfdexFetch, pgrfdex);
1412 return IDispatchEx_GetMemberProperties(DISPATCHEX(&This->dispex), id, grfdexFetch, pgrfdex);
1415 static HRESULT WINAPI WindowDispEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
1417 HTMLWindow *This = DISPEX_THIS(iface);
1419 TRACE("(%p)->(%x %p)\n", This, id, pbstrName);
1421 return IDispatchEx_GetMemberName(DISPATCHEX(&This->dispex), id, pbstrName);
1424 static HRESULT WINAPI WindowDispEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
1426 HTMLWindow *This = DISPEX_THIS(iface);
1428 TRACE("(%p)->(%x %x %p)\n", This, grfdex, id, pid);
1430 return IDispatchEx_GetNextDispID(DISPATCHEX(&This->dispex), grfdex, id, pid);
1433 static HRESULT WINAPI WindowDispEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
1435 HTMLWindow *This = DISPEX_THIS(iface);
1437 TRACE("(%p)->(%p)\n", This, ppunk);
1445 static const IDispatchExVtbl WindowDispExVtbl = {
1446 WindowDispEx_QueryInterface,
1447 WindowDispEx_AddRef,
1448 WindowDispEx_Release,
1449 WindowDispEx_GetTypeInfoCount,
1450 WindowDispEx_GetTypeInfo,
1451 WindowDispEx_GetIDsOfNames,
1452 WindowDispEx_Invoke,
1453 WindowDispEx_GetDispID,
1454 WindowDispEx_InvokeEx,
1455 WindowDispEx_DeleteMemberByName,
1456 WindowDispEx_DeleteMemberByDispID,
1457 WindowDispEx_GetMemberProperties,
1458 WindowDispEx_GetMemberName,
1459 WindowDispEx_GetNextDispID,
1460 WindowDispEx_GetNameSpaceParent
1463 static const tid_t HTMLWindow_iface_tids[] = {
1469 static const dispex_static_data_vtbl_t HTMLWindow_dispex_vtbl = {
1475 static dispex_static_data_t HTMLWindow_dispex = {
1476 &HTMLWindow_dispex_vtbl,
1477 DispHTMLWindow2_tid,
1479 HTMLWindow_iface_tids
1482 HRESULT HTMLWindow_Create(HTMLDocumentObj *doc_obj, nsIDOMWindow *nswindow, HTMLWindow **ret)
1486 window = heap_alloc_zero(sizeof(HTMLWindow));
1488 return E_OUTOFMEMORY;
1490 window->lpHTMLWindow2Vtbl = &HTMLWindow2Vtbl;
1491 window->lpHTMLWindow3Vtbl = &HTMLWindow3Vtbl;
1492 window->lpIDispatchExVtbl = &WindowDispExVtbl;
1494 window->doc_obj = doc_obj;
1496 init_dispex(&window->dispex, (IUnknown*)HTMLWINDOW2(window), &HTMLWindow_dispex);
1499 nsIDOMWindow_AddRef(nswindow);
1500 window->nswindow = nswindow;
1503 window->scriptmode = SCRIPTMODE_GECKO;
1504 list_init(&window->script_hosts);
1506 list_add_head(&window_list, &window->entry);
1512 HTMLWindow *nswindow_to_window(const nsIDOMWindow *nswindow)
1516 LIST_FOR_EACH_ENTRY(iter, &window_list, HTMLWindow, entry) {
1517 if(iter->nswindow == nswindow)