[MSHTML]
authorChristoph von Wittich <christoph_vw@reactos.org>
Tue, 2 Mar 2010 14:08:15 +0000 (14:08 +0000)
committerChristoph von Wittich <christoph_vw@reactos.org>
Tue, 2 Mar 2010 14:08:15 +0000 (14:08 +0000)
sync mshtml to wine 1.1.39

svn path=/trunk/; revision=45754

51 files changed:
reactos/dll/win32/mshtml/De.rc
reactos/dll/win32/mshtml/Fr.rc
reactos/dll/win32/mshtml/It.rc [new file with mode: 0644]
reactos/dll/win32/mshtml/Ja.rc
reactos/dll/win32/mshtml/Lt.rc
reactos/dll/win32/mshtml/No.rc
reactos/dll/win32/mshtml/Si.rc
reactos/dll/win32/mshtml/Uk.rc [new file with mode: 0644]
reactos/dll/win32/mshtml/dispex.c
reactos/dll/win32/mshtml/editor.c
reactos/dll/win32/mshtml/htmlanchor.c
reactos/dll/win32/mshtml/htmlbody.c
reactos/dll/win32/mshtml/htmlcomment.c
reactos/dll/win32/mshtml/htmldoc.c
reactos/dll/win32/mshtml/htmldoc3.c
reactos/dll/win32/mshtml/htmldoc5.c
reactos/dll/win32/mshtml/htmlelem.c
reactos/dll/win32/mshtml/htmlelem2.c
reactos/dll/win32/mshtml/htmlelemcol.c
reactos/dll/win32/mshtml/htmlevent.c
reactos/dll/win32/mshtml/htmlevent.h
reactos/dll/win32/mshtml/htmlform.c
reactos/dll/win32/mshtml/htmlframe.c [new file with mode: 0644]
reactos/dll/win32/mshtml/htmlframebase.c
reactos/dll/win32/mshtml/htmlgeneric.c
reactos/dll/win32/mshtml/htmliframe.c
reactos/dll/win32/mshtml/htmlimg.c
reactos/dll/win32/mshtml/htmlinput.c
reactos/dll/win32/mshtml/htmlnode.c
reactos/dll/win32/mshtml/htmloption.c
reactos/dll/win32/mshtml/htmlscript.c
reactos/dll/win32/mshtml/htmlselect.c
reactos/dll/win32/mshtml/htmlstyle.c
reactos/dll/win32/mshtml/htmltable.c
reactos/dll/win32/mshtml/htmltablerow.c
reactos/dll/win32/mshtml/htmltextarea.c
reactos/dll/win32/mshtml/htmlwindow.c
reactos/dll/win32/mshtml/main.c
reactos/dll/win32/mshtml/mshtml.inf
reactos/dll/win32/mshtml/mshtml.rbuild
reactos/dll/win32/mshtml/mshtml_private.h
reactos/dll/win32/mshtml/mutation.c
reactos/dll/win32/mshtml/nsembed.c
reactos/dll/win32/mshtml/nsevents.c
reactos/dll/win32/mshtml/nsio.c
reactos/dll/win32/mshtml/rsrc.rc
reactos/dll/win32/mshtml/script.c
reactos/dll/win32/mshtml/txtrange.c
reactos/dll/win32/mshtml/view.c
reactos/include/psdk/mshtmdid.h
reactos/include/psdk/mshtml.idl

index 219549c..43e0cfe 100644 (file)
@@ -72,4 +72,4 @@ FONT 8, "MS Shell Dlg"
     PUSHBUTTON "OK", IDOK, 40, 65, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
     PUSHBUTTON "Abbrechen", IDCANCEL, 115, 65, 45, 15, WS_GROUP | WS_TABSTOP
 }
-
+#pragma code_page(default)
index 0d14f45..84ee453 100644 (file)
@@ -72,3 +72,4 @@ FONT 8, "MS Shell Dlg"
     PUSHBUTTON "OK", IDOK, 40, 65, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
     PUSHBUTTON "Annuler", IDCANCEL, 115, 65, 45, 15, WS_GROUP | WS_TABSTOP
 }
+#pragma code_page(default)
diff --git a/reactos/dll/win32/mshtml/It.rc b/reactos/dll/win32/mshtml/It.rc
new file mode 100644 (file)
index 0000000..4b262c5
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2010 Luca Bennati
+ *
+ * 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 "resource.h"
+
+/*UTF-8*/
+#pragma code_page(65001)
+
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE DISCARDABLE
+{
+    IDS_HTMLDISABLED    "Il rendering HTML è correntemente disattivato."
+    IDS_HTMLDOCUMENT    "Documento HTML"
+    IDS_DOWNLOADING     "Scaricando..."
+    IDS_INSTALLING      "Installando..."
+}
+
+ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE  0, 0, 260, 95
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Installer di Wine Gecko"
+FONT 8, "MS Shell Dlg"
+{
+    LTEXT "Wine non ha trovato un pacchetto Gecko che è necessario per applicazioni che incorporano HTML " \
+          "per funzionare correttamente. Wine può automaticamente scaricarlo ed installarlo per te.\n\n" \
+          "Nota: è raccomandato usare i pacchetti delle distribuzioni. Leggi http://wiki.winehq.org/Gecko per i dettagli.",
+          ID_DWL_STATUS, 10, 10, 240, 50, SS_LEFT
+    CONTROL "Avanzamento", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12
+    DEFPUSHBUTTON "&Installa", ID_DWL_INSTALL, 200, 70, 50, 15, WS_GROUP | WS_TABSTOP
+    PUSHBUTTON "&Annulla", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP
+}
+
+IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65
+STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Hyperlink"
+FONT 8, "MS Shell Dlg"
+{
+    GROUPBOX "Informazioni sull'hyperlink", -1, 5, 5, 190, 55
+    LTEXT "&Tipo:", -1, 10, 22, 20, 10
+    COMBOBOX IDC_TYPE, 35, 20, 45, 100, WS_TABSTOP | WS_GROUP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS
+    LTEXT "&URL:", -1, 10, 42, 20, 10
+    EDITTEXT IDC_URL, 35, 40, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
+    PUSHBUTTON "OK", IDOK, 200, 10, 45, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
+    PUSHBUTTON "Annulla", IDCANCEL, 200, 28, 45, 14, WS_GROUP | WS_TABSTOP
+}
+
+ID_PROMPT_DIALOG DIALOG 0, 0, 200, 90
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION ""
+FONT 8, "MS Shell Dlg"
+{
+    LTEXT "", ID_PROMPT_PROMPT, 10, 10, 180, 30
+    EDITTEXT ID_PROMPT_EDIT, 10, 45, 180, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
+    PUSHBUTTON "OK", IDOK, 40, 65, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
+    PUSHBUTTON "Annulla", IDCANCEL, 115, 65, 45, 15, WS_GROUP | WS_TABSTOP
+}
+#pragma code_page(default)
index 04fc32e..40db7b5 100644 (file)
@@ -69,3 +69,4 @@ FONT 8, "MS Shell Dlg"
     PUSHBUTTON "OK", IDOK, 40, 65, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
     PUSHBUTTON "キャンセル", IDCANCEL, 115, 65, 45, 15, WS_GROUP | WS_TABSTOP
 }
+#pragma code_page(default)
index 8f7e772..560cc08 100644 (file)
@@ -69,3 +69,4 @@ FONT 8, "MS Shell Dlg"
     PUSHBUTTON "Gerai", IDOK, 40, 65, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
     PUSHBUTTON "Atsisakyti", IDCANCEL, 115, 65, 45, 15, WS_GROUP | WS_TABSTOP
 }
+#pragma code_page(default)
index 4592599..3a3b45d 100644 (file)
@@ -70,3 +70,4 @@ FONT 8, "MS Shell Dlg"
     PUSHBUTTON "OK", IDOK, 40, 65, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
     PUSHBUTTON "Avbryt", IDCANCEL, 115, 65, 45, 15, WS_GROUP | WS_TABSTOP
 }
+#pragma code_page(default)
index 6881add..500081b 100644 (file)
@@ -68,3 +68,4 @@ FONT 8, "MS Shell Dlg"
     PUSHBUTTON "V redu", IDOK, 40, 65, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
     PUSHBUTTON "Prekliči", IDCANCEL, 115, 65, 45, 15, WS_GROUP | WS_TABSTOP
 }
+#pragma code_page(default)
diff --git a/reactos/dll/win32/mshtml/Uk.rc b/reactos/dll/win32/mshtml/Uk.rc
new file mode 100644 (file)
index 0000000..5e11b4d
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2005-2006 Jacek Caban
+ * Copyright 2010 Igor Paliychuk
+ *
+ * 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 "resource.h"
+
+/* UTF-8 */
+#pragma code_page(65001)
+
+LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+
+STRINGTABLE DISCARDABLE
+{
+    IDS_HTMLDISABLED    "HTML rendering is currently disabled."
+    IDS_HTMLDOCUMENT    "Документ HTML"
+    IDS_DOWNLOADING     "Завантаження..."
+    IDS_INSTALLING      "Встановлення..."
+}
+
+ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE  0, 0, 260, 95
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Wine Gecko Installer"
+FONT 8, "MS Shell Dlg"
+{
+    LTEXT "Wine не може знайти пакунок Gecko, який потрібний  для додатків embedding HTML " \
+          "для коректної роботи. Wine може автоматично завантажити та встановити його для Вас.\n\n" \
+          "Зауважте: Рекомендується використати пакет з вашого дистрибутиву. Детальніше читайте http://wiki.winehq.org/Gecko.",
+          ID_DWL_STATUS, 10, 10, 240, 50, SS_LEFT
+    CONTROL "Прогрес", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12
+    DEFPUSHBUTTON "&Встановити", ID_DWL_INSTALL, 200, 70, 50, 15, WS_GROUP | WS_TABSTOP
+    PUSHBUTTON "&Скасувати", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP
+}
+
+IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65
+STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Гіперпосилання"
+FONT 8, "MS Shell Dlg"
+{
+    GROUPBOX "Дані про Гіперпосилання", -1, 5, 5, 190, 55
+    LTEXT "&Тип:", -1, 10, 22, 20, 10
+    COMBOBOX IDC_TYPE, 35, 20, 45, 100, WS_TABSTOP | WS_GROUP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS
+    LTEXT "&URL:", -1, 10, 42, 20, 10
+    EDITTEXT IDC_URL, 35, 40, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
+    PUSHBUTTON "OK", IDOK, 200, 10, 45, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
+    PUSHBUTTON "Скасувати", IDCANCEL, 200, 28, 45, 14, WS_GROUP | WS_TABSTOP
+}
+
+ID_PROMPT_DIALOG DIALOG 0, 0, 200, 90
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION ""
+FONT 8, "MS Shell Dlg"
+{
+    LTEXT "", ID_PROMPT_PROMPT, 10, 10, 180, 30
+    EDITTEXT ID_PROMPT_EDIT, 10, 45, 180, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
+    PUSHBUTTON "OK", IDOK, 40, 65, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
+    PUSHBUTTON "Скасувати", IDCANCEL, 115, 65, 45, 15, WS_GROUP | WS_TABSTOP
+}
index c77ebb9..4b1bd88 100644 (file)
@@ -92,6 +92,7 @@ static REFIID tid_ids[] = {
     &DIID_DispHTMLElementCollection,
     &DIID_DispHTMLFormElement,
     &DIID_DispHTMLGenericElement,
+    &DIID_DispHTMLFrameElement,
     &DIID_DispHTMLIFrame,
     &DIID_DispHTMLImg,
     &DIID_DispHTMLInputElement,
@@ -99,10 +100,12 @@ static REFIID tid_ids[] = {
     &DIID_DispHTMLNavigator,
     &DIID_DispHTMLOptionElement,
     &DIID_DispHTMLScreen,
+    &DIID_DispHTMLScriptElement,
     &DIID_DispHTMLSelectElement,
     &DIID_DispHTMLStyle,
     &DIID_DispHTMLTable,
     &DIID_DispHTMLTableRow,
+    &DIID_DispHTMLTextAreaElement,
     &DIID_DispHTMLUnknownElement,
     &DIID_DispHTMLWindow2,
     &DIID_HTMLDocumentEvents,
@@ -133,12 +136,15 @@ static REFIID tid_ids[] = {
     &IID_IHTMLFrameBase,
     &IID_IHTMLFrameBase2,
     &IID_IHTMLGenericElement,
+    &IID_IHTMLFrameElement3,
+    &IID_IHTMLIFrameElement,
     &IID_IHTMLImageElementFactory,
     &IID_IHTMLImgElement,
     &IID_IHTMLInputElement,
     &IID_IHTMLLocation,
     &IID_IHTMLOptionElement,
     &IID_IHTMLScreen,
+    &IID_IHTMLScriptElement,
     &IID_IHTMLSelectElement,
     &IID_IHTMLStyle,
     &IID_IHTMLStyle2,
@@ -146,6 +152,7 @@ static REFIID tid_ids[] = {
     &IID_IHTMLStyle4,
     &IID_IHTMLTable,
     &IID_IHTMLTableRow,
+    &IID_IHTMLTextAreaElement,
     &IID_IHTMLTextContainer,
     &IID_IHTMLUniqueName,
     &IID_IHTMLWindow2,
@@ -397,18 +404,19 @@ HRESULT call_disp_func(IDispatch *disp, DISPPARAMS *dp)
     VARIANT res;
     HRESULT hres;
 
-    hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
-    if(FAILED(hres)) {
-        FIXME("Could not get IDispatchEx interface: %08x\n", hres);
-        return hres;
-    }
-
     VariantInit(&res);
     memset(&ei, 0, sizeof(ei));
 
-    hres = IDispatchEx_InvokeEx(dispex, 0, GetUserDefaultLCID(), DISPATCH_METHOD, dp, &res, &ei, NULL);
+    hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
+    if(SUCCEEDED(hres)) {
+        hres = IDispatchEx_InvokeEx(dispex, 0, GetUserDefaultLCID(), DISPATCH_METHOD, dp, &res, &ei, NULL);
+        IDispatchEx_Release(dispex);
+    }else {
+        TRACE("Could not get IDispatchEx interface: %08x\n", hres);
+        hres = IDispatch_Invoke(disp, 0, &IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD,
+                dp, &res, &ei, NULL);
+    }
 
-    IDispatchEx_Release(dispex);
     VariantClear(&res);
     return hres;
 }
@@ -975,7 +983,10 @@ static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lc
 static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
 {
     DispatchEx *This = DISPATCHEX_THIS(iface);
-    FIXME("(%p)->(%s %x)\n", This, debugstr_w(bstrName), grfdex);
+
+    TRACE("(%p)->(%s %x)\n", This, debugstr_w(bstrName), grfdex);
+
+    /* Not implemented by IE */
     return E_NOTIMPL;
 }
 
index 568e127..961bb91 100644 (file)
@@ -298,7 +298,7 @@ static void get_font_size(HTMLDocument *This, WCHAR *ret)
 
                 TRACE("found font tag %p\n", elem);
 
-                nsAString_Init(&size_str, sizeW);
+                nsAString_InitDepend(&size_str, sizeW);
                 nsAString_Init(&val_str, NULL);
 
                 nsIDOMElement_GetAttribute(elem, &size_str, &val_str);
@@ -360,10 +360,11 @@ static void set_font_size(HTMLDocument *This, LPCWSTR size)
 
     create_nselem(This->doc_node, fontW, &elem);
 
-    nsAString_Init(&size_str, sizeW);
-    nsAString_Init(&val_str, size);
+    nsAString_InitDepend(&size_str, sizeW);
+    nsAString_InitDepend(&val_str, size);
 
     nsIDOMElement_SetAttribute(elem, &size_str, &val_str);
+    nsAString_Finish(&val_str);
 
     nsISelection_GetRangeAt(nsselection, 0, &range);
     nsISelection_GetIsCollapsed(nsselection, &collapsed);
@@ -384,7 +385,6 @@ static void set_font_size(HTMLDocument *This, LPCWSTR size)
     nsIDOMElement_Release(elem);
 
     nsAString_Finish(&size_str);
-    nsAString_Finish(&val_str);
 
     set_dirty(This, VARIANT_TRUE);
 }
@@ -1167,8 +1167,8 @@ static HRESULT exec_hyperlink(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in,
     /* create an element for the link */
     create_nselem(This->doc_node, aW, &anchor_elem);
 
-    nsAString_Init(&href_str, hrefW);
-    nsAString_Init(&ns_url, url);
+    nsAString_InitDepend(&href_str, hrefW);
+    nsAString_InitDepend(&ns_url, url);
     nsIDOMElement_SetAttribute(anchor_elem, &href_str, &ns_url);
     nsAString_Finish(&href_str);
 
index 6bbaf26..ae269ee 100644 (file)
@@ -520,12 +520,7 @@ static const NodeImplVtbl HTMLAnchorElementImplVtbl = {
 
 static const tid_t HTMLAnchorElement_iface_tids[] = {
     IHTMLAnchorElement_tid,
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
-    IHTMLElement4_tid,
+    HTMLELEMENT_TIDS,
     IHTMLTextContainer_tid,
     IHTMLUniqueName_tid,
     0
index 7f22a4e..5c66e65 100644 (file)
@@ -252,23 +252,18 @@ static HRESULT WINAPI HTMLBodyElement_Invoke(IHTMLBodyElement *iface, DISPID dis
 static HRESULT WINAPI HTMLBodyElement_put_background(IHTMLBodyElement *iface, BSTR v)
 {
     HTMLBodyElement *This = HTMLBODY_THIS(iface);
-    HRESULT hr = S_OK;
     nsAString nsstr;
     nsresult nsres;
 
     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
 
-    nsAString_Init(&nsstr, v);
-
+    nsAString_InitDepend(&nsstr, v);
     nsres = nsIDOMHTMLBodyElement_SetBackground(This->nsbody, &nsstr);
-    if(!NS_SUCCEEDED(nsres))
-    {
-        hr = E_FAIL;
-    }
-
     nsAString_Finish(&nsstr);
+    if(NS_FAILED(nsres))
+        return E_FAIL;
 
-    return hr;
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLBodyElement_get_background(IHTMLBodyElement *iface, BSTR *p)
@@ -799,12 +794,7 @@ static const NodeImplVtbl HTMLBodyElementImplVtbl = {
 static const tid_t HTMLBodyElement_iface_tids[] = {
     IHTMLBodyElement_tid,
     IHTMLBodyElement2_tid,
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
-    IHTMLElement4_tid,
+    HTMLELEMENT_TIDS,
     IHTMLTextContainer_tid,
     IHTMLUniqueName_tid,
     0
index e38432c..7040d18 100644 (file)
@@ -103,8 +103,10 @@ static HRESULT WINAPI HTMLCommentElement_put_text(IHTMLCommentElement *iface, BS
 static HRESULT WINAPI HTMLCommentElement_get_text(IHTMLCommentElement *iface, BSTR *p)
 {
     HTMLCommentElement *This = HTMLCOMMENT_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    return IHTMLElement_get_outerHTML(HTMLELEM(&This->element), p);
 }
 
 static HRESULT WINAPI HTMLCommentElement_put_atomic(IHTMLCommentElement *iface, LONG v)
@@ -171,11 +173,7 @@ static const NodeImplVtbl HTMLCommentElementImplVtbl = {
 };
 
 static const tid_t HTMLCommentElement_iface_tids[] = {
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
+    HTMLELEMENT_TIDS,
     IHTMLCommentElement_tid,
     0
 };
index ac67a84..93aea06 100644 (file)
@@ -348,7 +348,7 @@ static HRESULT WINAPI HTMLDocument_put_title(IHTMLDocument2 *iface, BSTR v)
         return E_UNEXPECTED;
     }
 
-    nsAString_Init(&nsstr, v);
+    nsAString_InitDepend(&nsstr, v);
     nsres = nsIDOMHTMLDocument_SetTitle(This->doc_node->nsdoc, &nsstr);
     nsAString_Finish(&nsstr);
     if(NS_FAILED(nsres))
@@ -776,6 +776,9 @@ static HRESULT document_write(HTMLDocument *This, SAFEARRAY *psarray, BOOL ln)
         return E_UNEXPECTED;
     }
 
+    if (!psarray)
+        return S_OK;
+
     if(psarray->cDims != 1) {
         FIXME("cDims=%d\n", psarray->cDims);
         return E_INVALIDARG;
@@ -1770,6 +1773,9 @@ static BOOL htmldoc_qi(HTMLDocument *This, REFIID riid, void **ppv)
     }else if(IsEqualGUID(&IID_IMarshal, riid)) {
         TRACE("(%p)->(IID_IMarshal %p) returning NULL\n", This, ppv);
         *ppv = NULL;
+    }else if(IsEqualGUID(&IID_IExternalConnection, riid)) {
+        TRACE("(%p)->(IID_IExternalConnection %p) returning NULL\n", This, ppv);
+        *ppv = NULL;
     }else if(IsEqualGUID(&IID_IObjectWithSite, riid)) {
         TRACE("(%p)->(IID_IObjectWithSite %p)\n", This, ppv);
         *ppv = OBJSITE(This);
@@ -1989,6 +1995,8 @@ static ULONG WINAPI CustomDoc_Release(ICustomDoc *iface)
         if(This->basedoc.advise_holder)
             IOleAdviseHolder_Release(This->basedoc.advise_holder);
 
+        if(This->view_sink)
+            IAdviseSink_Release(This->view_sink);
         if(This->client)
             IOleObject_SetClientSite(OLEOBJ(&This->basedoc), NULL);
         if(This->in_place_active)
index de32302..9079bbc 100644 (file)
@@ -116,7 +116,7 @@ static HRESULT WINAPI HTMLDocument3_createTextNode(IHTMLDocument3 *iface, BSTR t
         return E_UNEXPECTED;
     }
 
-    nsAString_Init(&text_str, text);
+    nsAString_InitDepend(&text_str, text);
     nsres = nsIDOMHTMLDocument_CreateTextNode(This->doc_node->nsdoc, &text_str, &nstext);
     nsAString_Finish(&text_str);
     if(NS_FAILED(nsres)) {
@@ -443,7 +443,7 @@ static HRESULT WINAPI HTMLDocument3_getElementById(IHTMLDocument3 *iface, BSTR v
         return E_UNEXPECTED;
     }
 
-    nsAString_Init(&id_str, v);
+    nsAString_InitDepend(&id_str, v);
     /* get element by id attribute */
     nsres = nsIDOMHTMLDocument_GetElementById(This->doc_node->nsdoc, &id_str, &nselem);
     if(FAILED(nsres)) {
@@ -455,9 +455,9 @@ static HRESULT WINAPI HTMLDocument3_getElementById(IHTMLDocument3 *iface, BSTR v
 
     /* get first element by name attribute */
     nsres = nsIDOMHTMLDocument_GetElementsByName(This->doc_node->nsdoc, &id_str, &nsnode_list);
+    nsAString_Finish(&id_str);
     if(FAILED(nsres)) {
         ERR("getElementsByName failed: %08x\n", nsres);
-        nsAString_Finish(&id_str);
         if(nsnode_by_id)
             nsIDOMNode_Release(nsnode_by_id);
         return E_FAIL;
@@ -465,7 +465,6 @@ static HRESULT WINAPI HTMLDocument3_getElementById(IHTMLDocument3 *iface, BSTR v
     nsIDOMNodeList_Item(nsnode_list, 0, &nsnode_by_name);
     nsIDOMNodeList_Release(nsnode_list);
 
-    nsAString_Finish(&id_str);
 
     if(nsnode_by_name && nsnode_by_id) {
         nsIDOM3Node *node3;
@@ -528,8 +527,8 @@ static HRESULT WINAPI HTMLDocument3_getElementsByTagName(IHTMLDocument3 *iface,
         return E_UNEXPECTED;
     }
 
-    nsAString_Init(&id_str, v);
-    nsAString_Init(&ns_str, str);
+    nsAString_InitDepend(&id_str, v);
+    nsAString_InitDepend(&ns_str, str);
     nsres = nsIDOMHTMLDocument_GetElementsByTagNameNS(This->doc_node->nsdoc, &ns_str, &id_str, &nslist);
     nsAString_Finish(&id_str);
     nsAString_Finish(&ns_str);
index e3b1423..12742f6 100644 (file)
@@ -136,7 +136,7 @@ static HRESULT WINAPI HTMLDocument5_createComment(IHTMLDocument5 *iface, BSTR bs
         return E_UNEXPECTED;
     }
 
-    nsAString_Init(&str, bstrdata);
+    nsAString_InitDepend(&str, bstrdata);
     nsres = nsIDOMHTMLDocument_CreateComment(This->doc_node->nsdoc, &str, &nscomment);
     nsAString_Finish(&str);
     if(NS_FAILED(nsres)) {
index a65ed20..e77c1dc 100644 (file)
@@ -65,7 +65,7 @@ HRESULT create_nselem(HTMLDocumentNode *doc, const WCHAR *tag, nsIDOMHTMLElement
         return E_UNEXPECTED;
     }
 
-    nsAString_Init(&tag_str, tag);
+    nsAString_InitDepend(&tag_str, tag);
     nsres = nsIDOMDocument_CreateElement(doc->nsdoc, &tag_str, &nselem);
     nsAString_Finish(&tag_str);
     if(NS_FAILED(nsres)) {
@@ -215,7 +215,7 @@ static HRESULT WINAPI HTMLElement_put_className(IHTMLElement *iface, BSTR v)
         return E_NOTIMPL;
     }
 
-    nsAString_Init(&classname_str, v);
+    nsAString_InitDepend(&classname_str, v);
     nsres = nsIDOMHTMLElement_SetClassName(This->nselem, &classname_str);
     nsAString_Finish(&classname_str);
     if(NS_FAILED(nsres))
@@ -269,7 +269,7 @@ static HRESULT WINAPI HTMLElement_put_id(IHTMLElement *iface, BSTR v)
         return S_OK;
     }
 
-    nsAString_Init(&id_str, v);
+    nsAString_InitDepend(&id_str, v);
     nsres = nsIDOMHTMLElement_SetId(This->nselem, &id_str);
     nsAString_Finish(&id_str);
     if(NS_FAILED(nsres))
@@ -593,6 +593,8 @@ static HRESULT WINAPI HTMLElement_get_document(IHTMLElement *iface, IDispatch **
     return S_OK;
 }
 
+static const WCHAR titleW[] = {'t','i','t','l','e',0};
+
 static HRESULT WINAPI HTMLElement_put_title(IHTMLElement *iface, BSTR v)
 {
     HTMLElement *This = HTMLELEM_THIS(iface);
@@ -601,7 +603,21 @@ static HRESULT WINAPI HTMLElement_put_title(IHTMLElement *iface, BSTR v)
 
     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
 
-    nsAString_Init(&title_str, v);
+    if(!This->nselem) {
+        VARIANT *var;
+        HRESULT hres;
+
+        hres = dispex_get_dprop_ref(&This->node.dispex, titleW, TRUE, &var);
+        if(FAILED(hres))
+            return hres;
+
+        VariantClear(var);
+        V_VT(var) = VT_BSTR;
+        V_BSTR(var) = v ? SysAllocString(v) : NULL;
+        return S_OK;
+    }
+
+    nsAString_InitDepend(&title_str, v);
     nsres = nsIDOMHTMLElement_SetTitle(This->nselem, &title_str);
     nsAString_Finish(&title_str);
     if(NS_FAILED(nsres))
@@ -618,6 +634,23 @@ static HRESULT WINAPI HTMLElement_get_title(IHTMLElement *iface, BSTR *p)
 
     TRACE("(%p)->(%p)\n", This, p);
 
+    if(!This->nselem) {
+        VARIANT *var;
+        HRESULT hres;
+
+        hres = dispex_get_dprop_ref(&This->node.dispex, titleW, FALSE, &var);
+        if(hres == DISP_E_UNKNOWNNAME) {
+            *p = NULL;
+        }else if(V_VT(var) != VT_BSTR) {
+            FIXME("title = %s\n", debugstr_variant(var));
+            return E_FAIL;
+        }else {
+            *p = V_BSTR(var) ? SysAllocString(V_BSTR(var)) : NULL;
+        }
+
+        return S_OK;
+    }
+
     nsAString_Init(&title_str, NULL);
     nsres = nsIDOMHTMLElement_GetTitle(This->nselem, &title_str);
     if(NS_SUCCEEDED(nsres)) {
@@ -820,7 +853,7 @@ static HRESULT WINAPI HTMLElement_put_innerHTML(IHTMLElement *iface, BSTR v)
         return E_FAIL;
     }
 
-    nsAString_Init(&html_str, v);
+    nsAString_InitDepend(&html_str, v);
     nsres = nsIDOMNSHTMLElement_SetInnerHTML(nselem, &html_str);
     nsAString_Finish(&html_str);
 
@@ -896,7 +929,7 @@ static HRESULT WINAPI HTMLElement_put_innerText(IHTMLElement *iface, BSTR v)
         nsIDOMNode_Release(tmp);
     }
 
-    nsAString_Init(&text_str, v);
+    nsAString_InitDepend(&text_str, v);
     nsres = nsIDOMHTMLDocument_CreateTextNode(This->node.doc->nsdoc, &text_str, &text_node);
     nsAString_Finish(&text_str);
     if(NS_FAILED(nsres)) {
@@ -955,7 +988,7 @@ static HRESULT WINAPI HTMLElement_put_outerHTML(IHTMLElement *iface, BSTR v)
         return E_FAIL;
     }
 
-    nsAString_Init(&html_str, v);
+    nsAString_InitDepend(&html_str, v);
     nsIDOMNSRange_CreateContextualFragment(nsrange, &html_str, &nsfragment);
     nsIDOMNSRange_Release(nsrange);
     nsAString_Finish(&html_str);
@@ -1131,7 +1164,7 @@ static HRESULT WINAPI HTMLElement_insertAdjacentHTML(IHTMLElement *iface, BSTR w
         return E_FAIL;
     }
 
-    nsAString_Init(&ns_html, html);
+    nsAString_InitDepend(&ns_html, html);
 
     nsres = nsIDOMNSRange_CreateContextualFragment(nsrange, &ns_html, (nsIDOMDocumentFragment **)&nsnode);
     nsIDOMNSRange_Release(nsrange);
@@ -1166,7 +1199,7 @@ static HRESULT WINAPI HTMLElement_insertAdjacentText(IHTMLElement *iface, BSTR w
     }
 
 
-    nsAString_Init(&ns_text, text);
+    nsAString_InitDepend(&ns_text, text);
     nsres = nsIDOMDocument_CreateTextNode(This->node.doc->nsdoc, &ns_text, (nsIDOMText **)&nsnode);
     nsAString_Finish(&ns_text);
 
@@ -1572,11 +1605,7 @@ static const NodeImplVtbl HTMLElementImplVtbl = {
 };
 
 static const tid_t HTMLElement_iface_tids[] = {
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
+    HTMLELEMENT_TIDS,
     0
 };
 
@@ -1675,7 +1704,7 @@ HTMLElement *HTMLElement_Create(HTMLDocumentNode *doc, nsIDOMNode *nsnode, BOOL
 
     if(!ret) {
         ret = heap_alloc_zero(sizeof(HTMLElement));
-        HTMLElement_Init(ret, doc, nselem, NULL);
+        HTMLElement_Init(ret, doc, nselem, &HTMLElement_dispex);
         ret->node.vtbl = &HTMLElementImplVtbl;
     }
 
index cd9b676..cd877ce 100644 (file)
@@ -655,8 +655,10 @@ static HRESULT WINAPI HTMLElement2_attachEvent(IHTMLElement2 *iface, BSTR event,
 static HRESULT WINAPI HTMLElement2_detachEvent(IHTMLElement2 *iface, BSTR event, IDispatch *pDisp)
 {
     HTMLElement *This = HTMLELEM2_THIS(iface);
-    FIXME("(%p)->(%s %p)\n", This, debugstr_w(event), pDisp);
-    return E_NOTIMPL;
+
+    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);
 }
 
 static HRESULT WINAPI HTMLElement2_get_readyState(IHTMLElement2 *iface, VARIANT *p)
@@ -1087,7 +1089,7 @@ static HRESULT WINAPI HTMLElement2_getElementsByTagName(IHTMLElement2 *iface, BS
 
     TRACE("(%p)->(%s %p)\n", This, debugstr_w(v), pelColl);
 
-    nsAString_Init(&tag_str, v);
+    nsAString_InitDepend(&tag_str, v);
     nsres = nsIDOMHTMLElement_GetElementsByTagName(This->nselem, &tag_str, &nslist);
     nsAString_Finish(&tag_str);
     if(NS_FAILED(nsres)) {
index c973707..9c0fedd 100644 (file)
@@ -245,7 +245,7 @@ static BOOL is_elem_name(HTMLElement *elem, LPCWSTR name)
         return TRUE;
     }
 
-    nsAString_Init(&nsname, nameW);
+    nsAString_InitDepend(&nsname, nameW);
     nsres =  nsIDOMHTMLElement_GetAttribute(elem->nselem, &nsname, &nsstr);
     nsAString_Finish(&nsname);
     if(NS_SUCCEEDED(nsres)) {
index d04b2e6..54429c3 100644 (file)
@@ -743,7 +743,7 @@ static IHTMLEventObj *create_event(HTMLDOMNode *target, eventid_t eid, nsIDOMEve
         if(NS_SUCCEEDED(nsres)) {
             nsAString type_str;
 
-            nsAString_Init(&type_str, event_types[event_info[eid].type]);
+            nsAString_InitDepend(&type_str, event_types[event_info[eid].type]);
             nsres = nsIDOMDocumentEvent_CreateEvent(doc_event, &type_str, &ret->nsevent);
             nsAString_Finish(&type_str);
             nsIDOMDocumentEvent_Release(doc_event);
@@ -816,7 +816,7 @@ static void call_event_handlers(HTMLDocumentNode *doc, IHTMLEventObj *event_obj,
         ConnectionPointContainer *cp_container, eventid_t eid, IDispatch *this_obj)
 {
     handler_vector_t *handler_vector = NULL;
-    DWORD i;
+    int i;
     HRESULT hres;
 
     if(event_target)
@@ -845,7 +845,8 @@ static void call_event_handlers(HTMLDocumentNode *doc, IHTMLEventObj *event_obj,
         V_VT(&arg) = VT_DISPATCH;
         V_DISPATCH(&arg) = (IDispatch*)event_obj;
 
-        for(i=0; i < handler_vector->handler_cnt; i++) {
+        i = handler_vector->handler_cnt;
+        while(i--) {
             if(handler_vector->handlers[i]) {
                 TRACE("%s [%d] >>>\n", debugstr_w(event_info[eid].name), i);
                 hres = call_disp_func(handler_vector->handlers[i], &dp);
@@ -866,6 +867,9 @@ static void call_event_handlers(HTMLDocumentNode *doc, IHTMLEventObj *event_obj,
         for(cp = cp_container->cp_list; cp; cp = cp->next) {
             if(cp->sinks_size && is_cp_event(cp->data, event_info[eid].dispid)) {
                 for(i=0; i < cp->sinks_size; i++) {
+                    if(!cp->sinks[i].disp)
+                        continue;
+
                     TRACE("cp %s [%d] >>>\n", debugstr_w(event_info[eid].name), i);
                     hres = call_cp_func(cp->sinks[i].disp, event_info[eid].dispid);
                     if(hres == S_OK)
@@ -1124,6 +1128,34 @@ HRESULT attach_event(event_target_t **event_target_ptr, HTMLDocument *doc, BSTR
     event_target->event_table[eid]->handlers[i] = disp;
 
     *res = VARIANT_TRUE;
+    return ensure_nsevent_handler(doc->doc_node, eid);
+}
+
+HRESULT detach_event(event_target_t *event_target, HTMLDocument *doc, BSTR name, IDispatch *disp)
+{
+    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])
+        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;
+        }
+        i++;
+    }
+
     return S_OK;
 }
 
index 1a8572f..96ff4cd 100644 (file)
@@ -46,6 +46,7 @@ void fire_event(HTMLDocumentNode*,eventid_t,nsIDOMNode*,nsIDOMEvent*);
 HRESULT set_event_handler(event_target_t**,HTMLDocumentNode*,eventid_t,VARIANT*);
 HRESULT get_event_handler(event_target_t**,eventid_t,VARIANT*);
 HRESULT attach_event(event_target_t**,HTMLDocument*,BSTR,IDispatch*,VARIANT_BOOL*);
+HRESULT detach_event(event_target_t*,HTMLDocument*,BSTR,IDispatch*);
 HRESULT dispatch_event(HTMLDOMNode*,const WCHAR*,VARIANT*,VARIANT_BOOL*);
 HRESULT call_event(HTMLDOMNode*,eventid_t);
 void update_cp_events(HTMLWindow*,cp_static_data_t*);
index 1db965a..6886056 100644 (file)
@@ -343,10 +343,12 @@ static HRESULT HTMLFormElement_get_dispid(HTMLDOMNode *iface,
 {
     HTMLFormElement *This = HTMLFORM_NODE_THIS(iface);
     nsIDOMHTMLCollection *elements;
+    nsAString nsname, nsstr;
     PRUint32 len, i;
-    static const PRUnichar nameW[] = {'n','a','m','e',0};
-    nsAString nsname;
     nsresult nsres;
+    HRESULT hres = DISP_E_UNKNOWNNAME;
+
+    static const PRUnichar nameW[] = {'n','a','m','e',0};
 
     TRACE("(%p)->(%s %x %p)\n", This, wine_dbgstr_w(name), grfdex, pid);
 
@@ -363,72 +365,62 @@ static HRESULT HTMLFormElement_get_dispid(HTMLDOMNode *iface,
         return E_FAIL;
     }
 
-    nsAString_Init(&nsname, nameW);
+    nsAString_InitDepend(&nsname, nameW);
+    nsAString_Init(&nsstr, NULL);
     for(i = 0; i < len; ++i) {
         nsIDOMNode *nsitem;
         nsIDOMHTMLElement *nshtml_elem;
-        nsAString nsstr;
         const PRUnichar *str;
 
         nsres = nsIDOMHTMLCollection_Item(elements, i, &nsitem);
         if(NS_FAILED(nsres)) {
             FIXME("Item failed: 0x%08x\n", nsres);
-            nsAString_Finish(&nsname);
-            nsIDOMHTMLCollection_Release(elements);
-            return E_FAIL;
+            hres = E_FAIL;
+            break;
         }
 
         nsres = nsIDOMNode_QueryInterface(nsitem, &IID_nsIDOMHTMLElement, (void**)&nshtml_elem);
         nsIDOMNode_Release(nsitem);
         if(NS_FAILED(nsres)) {
             FIXME("Failed to get nsIDOMHTMLNode interface: 0x%08x\n", nsres);
-            nsAString_Finish(&nsname);
-            nsIDOMHTMLCollection_Release(elements);
-            return E_FAIL;
+            hres = E_FAIL;
+            break;
         }
 
         /* compare by id attr */
-        nsAString_Init(&nsstr, NULL);
         nsres = nsIDOMHTMLElement_GetId(nshtml_elem, &nsstr);
         if(NS_FAILED(nsres)) {
             FIXME("GetId failed: 0x%08x\n", nsres);
-            nsAString_Finish(&nsname);
             nsIDOMHTMLElement_Release(nshtml_elem);
-            nsIDOMHTMLCollection_Release(elements);
-            return E_FAIL;
+            hres = E_FAIL;
+            break;
         }
         nsAString_GetData(&nsstr, &str);
         if(!strcmpiW(str, name)) {
+            nsIDOMHTMLElement_Release(nshtml_elem);
             /* FIXME: using index for dispid */
             *pid = MSHTML_DISPID_CUSTOM_MIN + i;
-            nsAString_Finish(&nsname);
-            nsAString_Finish(&nsstr);
-            nsIDOMHTMLElement_Release(nshtml_elem);
-            nsIDOMHTMLCollection_Release(elements);
-            return S_OK;
+            hres = S_OK;
+            break;
         }
 
         /* compare by name attr */
         nsres = nsIDOMHTMLElement_GetAttribute(nshtml_elem, &nsname, &nsstr);
+        nsIDOMHTMLElement_Release(nshtml_elem);
         nsAString_GetData(&nsstr, &str);
         if(!strcmpiW(str, name)) {
             /* FIXME: using index for dispid */
             *pid = MSHTML_DISPID_CUSTOM_MIN + i;
-            nsAString_Finish(&nsname);
-            nsAString_Finish(&nsstr);
-            nsIDOMHTMLElement_Release(nshtml_elem);
-            nsIDOMHTMLCollection_Release(elements);
-            return S_OK;
+            hres = S_OK;
+            break;
         }
-        nsAString_Finish(&nsstr);
-
-        nsIDOMHTMLElement_Release(nshtml_elem);
     }
     nsAString_Finish(&nsname);
+    nsAString_Finish(&nsstr);
 
     nsIDOMHTMLCollection_Release(elements);
 
-    return DISP_E_UNKNOWNNAME;
+    return hres;
 }
 
 static HRESULT HTMLFormElement_invoke(HTMLDOMNode *iface,
@@ -483,11 +475,7 @@ static const NodeImplVtbl HTMLFormElementImplVtbl = {
 };
 
 static const tid_t HTMLFormElement_iface_tids[] = {
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
+    HTMLELEMENT_TIDS,
     IHTMLFormElement_tid,
     0
 };
diff --git a/reactos/dll/win32/mshtml/htmlframe.c b/reactos/dll/win32/mshtml/htmlframe.c
new file mode 100644 (file)
index 0000000..8d458f7
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+ * Copyright 2010 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+
+#define COBJMACROS
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "ole2.h"
+
+#include "mshtml_private.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
+
+typedef struct {
+    HTMLFrameBase framebase;
+    const IHTMLFrameElement3Vtbl  *lpIHTMLFrameElement3Vtbl;
+} HTMLFrameElement;
+
+#define HTMLFRAMEELEM3(x)   ((IHTMLFrameElement3*)  &(x)->lpIHTMLFrameElement3Vtbl)
+
+#define HTMLFRAME3_THIS(iface) DEFINE_THIS(HTMLFrameElement, IHTMLFrameElement3, iface)
+
+static HRESULT WINAPI HTMLFrameElement3_QueryInterface(IHTMLFrameElement3 *iface,
+        REFIID riid, void **ppv)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+
+    return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->framebase.element.node), riid, ppv);
+}
+
+static ULONG WINAPI HTMLFrameElement3_AddRef(IHTMLFrameElement3 *iface)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+
+    return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->framebase.element.node));
+}
+
+static ULONG WINAPI HTMLFrameElement3_Release(IHTMLFrameElement3 *iface)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+
+    return IHTMLDOMNode_Release(HTMLDOMNODE(&This->framebase.element.node));
+}
+
+static HRESULT WINAPI HTMLFrameElement3_GetTypeInfoCount(IHTMLFrameElement3 *iface, UINT *pctinfo)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+    return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->framebase.element.node.dispex), pctinfo);
+}
+
+static HRESULT WINAPI HTMLFrameElement3_GetTypeInfo(IHTMLFrameElement3 *iface, UINT iTInfo,
+        LCID lcid, ITypeInfo **ppTInfo)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+    return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->framebase.element.node.dispex), iTInfo, lcid, ppTInfo);
+}
+
+static HRESULT WINAPI HTMLFrameElement3_GetIDsOfNames(IHTMLFrameElement3 *iface, REFIID riid,
+        LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+    return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->framebase.element.node.dispex), riid, rgszNames, cNames, lcid, rgDispId);
+}
+
+static HRESULT WINAPI HTMLFrameElement3_Invoke(IHTMLFrameElement3 *iface, DISPID dispIdMember,
+        REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
+        VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+    return IDispatchEx_Invoke(DISPATCHEX(&This->framebase.element.node.dispex), dispIdMember, riid,
+            lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+}
+
+static HRESULT WINAPI HTMLFrameElement3_get_contentDocument(IHTMLFrameElement3 *iface, IDispatch **p)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+    IHTMLDocument2 *doc;
+    HRESULT hres;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    if(!This->framebase.content_window) {
+        FIXME("NULL window\n");
+        return E_FAIL;
+    }
+
+    hres = IHTMLWindow2_get_document(HTMLWINDOW2(This->framebase.content_window), &doc);
+    if(FAILED(hres))
+        return hres;
+
+    *p = doc ? (IDispatch*)doc : NULL;
+    return S_OK;
+}
+
+static HRESULT WINAPI HTMLFrameElement3_put_src(IHTMLFrameElement3 *iface, BSTR v)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+    FIXME("(%p)->(%s)\n", This, debugstr_w(v));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLFrameElement3_get_src(IHTMLFrameElement3 *iface, BSTR *p)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLFrameElement3_put_longDesc(IHTMLFrameElement3 *iface, BSTR v)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+    FIXME("(%p)->(%s)\n", This, debugstr_w(v));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLFrameElement3_get_longDesc(IHTMLFrameElement3 *iface, BSTR *p)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLFrameElement3_put_frameBorder(IHTMLFrameElement3 *iface, BSTR v)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+    FIXME("(%p)->(%s)\n", This, debugstr_w(v));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLFrameElement3_get_frameBorder(IHTMLFrameElement3 *iface, BSTR *p)
+{
+    HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+#undef HTMLFRAME3_THIS
+
+static const IHTMLFrameElement3Vtbl HTMLFrameElement3Vtbl = {
+    HTMLFrameElement3_QueryInterface,
+    HTMLFrameElement3_AddRef,
+    HTMLFrameElement3_Release,
+    HTMLFrameElement3_GetTypeInfoCount,
+    HTMLFrameElement3_GetTypeInfo,
+    HTMLFrameElement3_GetIDsOfNames,
+    HTMLFrameElement3_Invoke,
+    HTMLFrameElement3_get_contentDocument,
+    HTMLFrameElement3_put_src,
+    HTMLFrameElement3_get_src,
+    HTMLFrameElement3_put_longDesc,
+    HTMLFrameElement3_get_longDesc,
+    HTMLFrameElement3_put_frameBorder,
+    HTMLFrameElement3_get_frameBorder
+};
+
+#define HTMLFRAME_NODE_THIS(iface) DEFINE_THIS2(HTMLFrameElement, framebase.element.node, iface)
+
+static HRESULT HTMLFrameElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
+{
+    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
+
+    if(IsEqualGUID(&IID_IHTMLFrameElement3, riid)) {
+        TRACE("(%p)->(IID_IHTMLFrameElement3 %p)\n", This, ppv);
+        *ppv = HTMLFRAMEELEM3(This);
+    }else {
+        return HTMLFrameBase_QI(&This->framebase, riid, ppv);
+    }
+
+    IUnknown_AddRef((IUnknown*)*ppv);
+    return S_OK;
+}
+
+static void HTMLFrameElement_destructor(HTMLDOMNode *iface)
+{
+    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
+
+    HTMLFrameBase_destructor(&This->framebase);
+}
+
+static HRESULT HTMLFrameElement_get_document(HTMLDOMNode *iface, IDispatch **p)
+{
+    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
+
+    if(!This->framebase.content_window || !This->framebase.content_window->doc) {
+        *p = NULL;
+        return S_OK;
+    }
+
+    *p = (IDispatch*)HTMLDOC(&This->framebase.content_window->doc->basedoc);
+    IDispatch_AddRef(*p);
+    return S_OK;
+}
+
+static HRESULT HTMLFrameElement_get_dispid(HTMLDOMNode *iface, BSTR name,
+        DWORD grfdex, DISPID *pid)
+{
+    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
+
+    if(!This->framebase.content_window)
+        return DISP_E_UNKNOWNNAME;
+
+    return search_window_props(This->framebase.content_window, name, grfdex, pid);
+}
+
+static HRESULT HTMLFrameElement_invoke(HTMLDOMNode *iface, DISPID id, LCID lcid,
+        WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
+{
+    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
+
+    if(!This->framebase.content_window) {
+        ERR("no content window to invoke on\n");
+        return E_FAIL;
+    }
+
+    return IDispatchEx_InvokeEx(DISPATCHEX(This->framebase.content_window), id, lcid, flags, params, res, ei, caller);
+}
+
+static HRESULT HTMLFrameElement_bind_to_tree(HTMLDOMNode *iface)
+{
+    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
+    nsIDOMDocument *nsdoc;
+    nsresult nsres;
+    HRESULT hres;
+
+    nsres = nsIDOMHTMLFrameElement_GetContentDocument(This->framebase.nsframe, &nsdoc);
+    if(NS_FAILED(nsres) || !nsdoc) {
+        ERR("GetContentDocument failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    hres = set_frame_doc(&This->framebase, nsdoc);
+    nsIDOMDocument_Release(nsdoc);
+    return hres;
+}
+
+#undef HTMLFRAME_NODE_THIS
+
+static const NodeImplVtbl HTMLFrameElementImplVtbl = {
+    HTMLFrameElement_QI,
+    HTMLFrameElement_destructor,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    HTMLFrameElement_get_document,
+    NULL,
+    HTMLFrameElement_get_dispid,
+    HTMLFrameElement_invoke,
+    HTMLFrameElement_bind_to_tree
+};
+
+static const tid_t HTMLFrameElement_iface_tids[] = {
+    HTMLELEMENT_TIDS,
+    IHTMLFrameBase_tid,
+    IHTMLFrameBase2_tid,
+    IHTMLFrameElement3_tid,
+    0
+};
+
+static dispex_static_data_t HTMLFrameElement_dispex = {
+    NULL,
+    DispHTMLFrameElement_tid,
+    NULL,
+    HTMLFrameElement_iface_tids
+};
+
+HTMLElement *HTMLFrameElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem)
+{
+    HTMLFrameElement *ret;
+
+    ret = heap_alloc_zero(sizeof(HTMLFrameElement));
+
+    ret->framebase.element.node.vtbl = &HTMLFrameElementImplVtbl;
+    ret->lpIHTMLFrameElement3Vtbl = &HTMLFrameElement3Vtbl;
+
+    HTMLFrameBase_Init(&ret->framebase, doc, nselem, &HTMLFrameElement_dispex);
+
+    return &ret->framebase.element;
+}
index e94c801..56c1023 100644 (file)
@@ -283,10 +283,10 @@ static HRESULT WINAPI HTMLFrameBase_put_scrolling(IHTMLFrameBase *iface, BSTR v)
         return E_INVALIDARG;
 
     if(This->nsframe) {
-        nsAString_Init(&nsstr, v);
+        nsAString_InitDepend(&nsstr, v);
         nsres = nsIDOMHTMLFrameElement_SetScrolling(This->nsframe, &nsstr);
     }else if(This->nsiframe) {
-        nsAString_Init(&nsstr, v);
+        nsAString_InitDepend(&nsstr, v);
         nsres = nsIDOMHTMLIFrameElement_SetScrolling(This->nsiframe, &nsstr);
     }else {
         ERR("No attached ns frame object\n");
@@ -562,108 +562,3 @@ void HTMLFrameBase_Init(HTMLFrameBase *This, HTMLDocumentNode *doc, nsIDOMHTMLEl
     }else
         This->nsiframe = NULL;
 }
-
-typedef struct {
-    HTMLFrameBase framebase;
-} HTMLFrameElement;
-
-#define HTMLFRAME_NODE_THIS(iface) DEFINE_THIS2(HTMLFrameElement, framebase.element.node, iface)
-
-static HRESULT HTMLFrameElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
-{
-    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
-
-    return HTMLFrameBase_QI(&This->framebase, riid, ppv);
-}
-
-static void HTMLFrameElement_destructor(HTMLDOMNode *iface)
-{
-    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
-
-    HTMLFrameBase_destructor(&This->framebase);
-}
-
-static HRESULT HTMLFrameElement_get_document(HTMLDOMNode *iface, IDispatch **p)
-{
-    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
-
-    if(!This->framebase.content_window || !This->framebase.content_window->doc) {
-        *p = NULL;
-        return S_OK;
-    }
-
-    *p = (IDispatch*)HTMLDOC(&This->framebase.content_window->doc->basedoc);
-    IDispatch_AddRef(*p);
-    return S_OK;
-}
-
-static HRESULT HTMLFrameElement_get_dispid(HTMLDOMNode *iface, BSTR name,
-        DWORD grfdex, DISPID *pid)
-{
-    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
-
-    if(!This->framebase.content_window)
-        return DISP_E_UNKNOWNNAME;
-
-    return search_window_props(This->framebase.content_window, name, grfdex, pid);
-}
-
-static HRESULT HTMLFrameElement_invoke(HTMLDOMNode *iface, DISPID id, LCID lcid,
-        WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
-{
-    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
-
-    if(!This->framebase.content_window) {
-        ERR("no content window to invoke on\n");
-        return E_FAIL;
-    }
-
-    return IDispatchEx_InvokeEx(DISPATCHEX(This->framebase.content_window), id, lcid, flags, params, res, ei, caller);
-}
-
-static HRESULT HTMLFrameElement_bind_to_tree(HTMLDOMNode *iface)
-{
-    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
-    nsIDOMDocument *nsdoc;
-    nsresult nsres;
-    HRESULT hres;
-
-    nsres = nsIDOMHTMLFrameElement_GetContentDocument(This->framebase.nsframe, &nsdoc);
-    if(NS_FAILED(nsres) || !nsdoc) {
-        ERR("GetContentDocument failed: %08x\n", nsres);
-        return E_FAIL;
-    }
-
-    hres = set_frame_doc(&This->framebase, nsdoc);
-    nsIDOMDocument_Release(nsdoc);
-    return hres;
-}
-
-#undef HTMLFRAME_NODE_THIS
-
-static const NodeImplVtbl HTMLFrameElementImplVtbl = {
-    HTMLFrameElement_QI,
-    HTMLFrameElement_destructor,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    HTMLFrameElement_get_document,
-    NULL,
-    HTMLFrameElement_get_dispid,
-    HTMLFrameElement_invoke,
-    HTMLFrameElement_bind_to_tree
-};
-
-HTMLElement *HTMLFrameElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem)
-{
-    HTMLFrameElement *ret;
-
-    ret = heap_alloc_zero(sizeof(HTMLFrameElement));
-
-    ret->framebase.element.node.vtbl = &HTMLFrameElementImplVtbl;
-
-    HTMLFrameBase_Init(&ret->framebase, doc, nselem, NULL);
-
-    return &ret->framebase.element;
-}
index 8b75316..82075b8 100644 (file)
@@ -153,11 +153,7 @@ static const NodeImplVtbl HTMLGenericElementImplVtbl = {
 };
 
 static const tid_t HTMLGenericElement_iface_tids[] = {
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
+    HTMLELEMENT_TIDS,
     IHTMLGenericElement_tid,
     0
 };
index ddb32c8..12cd427 100644 (file)
@@ -33,15 +33,139 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
 
 typedef struct {
     HTMLFrameBase framebase;
+    const IHTMLIFrameElementVtbl *lpIHTMLIFrameElementVtbl;
 } HTMLIFrame;
 
+#define HTMLIFRAMEELEM(x)   ((IHTMLIFrameElement*)  &(x)->lpIHTMLIFrameElementVtbl)
+
+#define HTMLIFRAME_THIS(iface) DEFINE_THIS(HTMLIFrame, IHTMLIFrameElement, iface)
+
+static HRESULT WINAPI HTMLIFrameElement_QueryInterface(IHTMLIFrameElement *iface,
+        REFIID riid, void **ppv)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+
+    return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->framebase.element.node), riid, ppv);
+}
+
+static ULONG WINAPI HTMLIFrameElement_AddRef(IHTMLIFrameElement *iface)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+
+    return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->framebase.element.node));
+}
+
+static ULONG WINAPI HTMLIFrameElement_Release(IHTMLIFrameElement *iface)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+
+    return IHTMLDOMNode_Release(HTMLDOMNODE(&This->framebase.element.node));
+}
+
+static HRESULT WINAPI HTMLIFrameElement_GetTypeInfoCount(IHTMLIFrameElement *iface, UINT *pctinfo)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+    return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->framebase.element.node.dispex), pctinfo);
+}
+
+static HRESULT WINAPI HTMLIFrameElement_GetTypeInfo(IHTMLIFrameElement *iface, UINT iTInfo,
+        LCID lcid, ITypeInfo **ppTInfo)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+    return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->framebase.element.node.dispex), iTInfo, lcid, ppTInfo);
+}
+
+static HRESULT WINAPI HTMLIFrameElement_GetIDsOfNames(IHTMLIFrameElement *iface, REFIID riid,
+        LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+    return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->framebase.element.node.dispex), riid, rgszNames, cNames, lcid, rgDispId);
+}
+
+static HRESULT WINAPI HTMLIFrameElement_Invoke(IHTMLIFrameElement *iface, DISPID dispIdMember,
+        REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
+        VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+    return IDispatchEx_Invoke(DISPATCHEX(&This->framebase.element.node.dispex), dispIdMember, riid,
+            lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+}
+
+static HRESULT WINAPI HTMLIFrameElement_put_vspace(IHTMLIFrameElement *iface, LONG v)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+    FIXME("(%p)->(%d)\n", This, v);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLIFrameElement_get_vspace(IHTMLIFrameElement *iface, LONG *p)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLIFrameElement_put_hspace(IHTMLIFrameElement *iface, LONG v)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+    FIXME("(%p)->(%d)\n", This, v);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLIFrameElement_get_hspace(IHTMLIFrameElement *iface, LONG *p)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLIFrameElement_put_align(IHTMLIFrameElement *iface, BSTR v)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+    FIXME("(%p)->(%s)\n", This, debugstr_w(v));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLIFrameElement_get_align(IHTMLIFrameElement *iface, BSTR *p)
+{
+    HTMLIFrame *This = HTMLIFRAME_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+#undef HTMLIFRAME_THIS
+
+static const IHTMLIFrameElementVtbl HTMLIFrameElementVtbl = {
+    HTMLIFrameElement_QueryInterface,
+    HTMLIFrameElement_AddRef,
+    HTMLIFrameElement_Release,
+    HTMLIFrameElement_GetTypeInfoCount,
+    HTMLIFrameElement_GetTypeInfo,
+    HTMLIFrameElement_GetIDsOfNames,
+    HTMLIFrameElement_Invoke,
+    HTMLIFrameElement_put_vspace,
+    HTMLIFrameElement_get_vspace,
+    HTMLIFrameElement_put_hspace,
+    HTMLIFrameElement_get_hspace,
+    HTMLIFrameElement_put_align,
+    HTMLIFrameElement_get_align
+};
+
 #define HTMLIFRAME_NODE_THIS(iface) DEFINE_THIS2(HTMLIFrame, framebase.element.node, iface)
 
 static HRESULT HTMLIFrame_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
 {
     HTMLIFrame *This = HTMLIFRAME_NODE_THIS(iface);
 
-    return HTMLFrameBase_QI(&This->framebase, riid, ppv);
+    if(IsEqualGUID(&IID_IHTMLIFrameElement, riid)) {
+        TRACE("(%p)->(IID_IHTMLIFrameElement %p)\n", This, ppv);
+        *ppv = HTMLIFRAMEELEM(This);
+    }else {
+        return HTMLFrameBase_QI(&This->framebase, riid, ppv);
+    }
+
+    IUnknown_AddRef((IUnknown*)*ppv);
+    return S_OK;
 }
 
 static void HTMLIFrame_destructor(HTMLDOMNode *iface)
@@ -131,13 +255,10 @@ static const NodeImplVtbl HTMLIFrameImplVtbl = {
 };
 
 static const tid_t HTMLIFrame_iface_tids[] = {
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
+    HTMLELEMENT_TIDS,
     IHTMLFrameBase_tid,
     IHTMLFrameBase2_tid,
+    IHTMLIFrameElement_tid,
     0
 };
 
@@ -154,6 +275,7 @@ HTMLElement *HTMLIFrame_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem)
 
     ret = heap_alloc_zero(sizeof(HTMLIFrame));
 
+    ret->lpIHTMLIFrameElementVtbl = &HTMLIFrameElementVtbl;
     ret->framebase.element.node.vtbl = &HTMLIFrameImplVtbl;
 
     HTMLFrameBase_Init(&ret->framebase, doc, nselem, &HTMLIFrame_dispex);
index 87fe498..17b6cce 100644 (file)
@@ -228,7 +228,7 @@ static HRESULT WINAPI HTMLImgElement_put_alt(IHTMLImgElement *iface, BSTR v)
 
     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
 
-    nsAString_Init(&alt_str, v);
+    nsAString_InitDepend(&alt_str, v);
     nsres = nsIDOMHTMLImageElement_SetAlt(This->nsimg, &alt_str);
     nsAString_Finish(&alt_str);
     if(NS_FAILED(nsres))
@@ -268,7 +268,7 @@ static HRESULT WINAPI HTMLImgElement_put_src(IHTMLImgElement *iface, BSTR v)
 
     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
 
-    nsAString_Init(&src_str, v);
+    nsAString_InitDepend(&src_str, v);
     nsres = nsIDOMHTMLImageElement_SetSrc(This->nsimg, &src_str);
     nsAString_Finish(&src_str);
     if(NS_FAILED(nsres))
@@ -460,29 +460,69 @@ static HRESULT WINAPI HTMLImgElement_get_name(IHTMLImgElement *iface, BSTR *p)
 static HRESULT WINAPI HTMLImgElement_put_width(IHTMLImgElement *iface, LONG v)
 {
     HTMLImgElement *This = HTMLIMG_THIS(iface);
-    FIXME("(%p)->(%d)\n", This, v);
-    return E_NOTIMPL;
+    nsresult nsres;
+
+    TRACE("(%p)->(%d)\n", This, v);
+
+    nsres = nsIDOMHTMLImageElement_SetWidth(This->nsimg, v);
+    if(NS_FAILED(nsres)) {
+        ERR("SetWidth failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLImgElement_get_width(IHTMLImgElement *iface, LONG *p)
 {
     HTMLImgElement *This = HTMLIMG_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    PRInt32 width;
+    nsresult nsres;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    nsres = nsIDOMHTMLImageElement_GetWidth(This->nsimg, &width);
+    if(NS_FAILED(nsres)) {
+        ERR("GetWidth failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    *p = width;
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLImgElement_put_height(IHTMLImgElement *iface, LONG v)
 {
     HTMLImgElement *This = HTMLIMG_THIS(iface);
-    FIXME("(%p)->(%d)\n", This, v);
-    return E_NOTIMPL;
+    nsresult nsres;
+
+    TRACE("(%p)->(%d)\n", This, v);
+
+    nsres = nsIDOMHTMLImageElement_SetHeight(This->nsimg, v);
+    if(NS_FAILED(nsres)) {
+        ERR("SetHeight failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLImgElement_get_height(IHTMLImgElement *iface, LONG *p)
 {
     HTMLImgElement *This = HTMLIMG_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    PRInt32 height;
+    nsresult nsres;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    nsres = nsIDOMHTMLImageElement_GetHeight(This->nsimg, &height);
+    if(NS_FAILED(nsres)) {
+        ERR("GetHeight failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    *p = height;
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLImgElement_put_start(IHTMLImgElement *iface, BSTR v)
@@ -609,11 +649,7 @@ static const NodeImplVtbl HTMLImgElementImplVtbl = {
 };
 
 static const tid_t HTMLImgElement_iface_tids[] = {
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
+    HTMLELEMENT_TIDS,
     IHTMLImgElement_tid,
     0
 };
@@ -728,12 +764,38 @@ static HRESULT WINAPI HTMLImageElementFactory_Invoke(IHTMLImageElementFactory *i
     return E_NOTIMPL;
 }
 
+static LONG var_to_size(const VARIANT *v)
+{
+    switch(V_VT(v)) {
+    case VT_EMPTY:
+        return 0;
+    case VT_I4:
+        return V_I4(v);
+    case VT_BSTR: {
+        LONG ret;
+        HRESULT hres;
+
+        hres = VarI4FromStr(V_BSTR(v), 0, 0, &ret);
+        if(FAILED(hres)) {
+            FIXME("VarI4FromStr failed: %08x\n", hres);
+            return 0;
+        }
+        return ret;
+    }
+    default:
+        FIXME("unsupported size %s\n", debugstr_variant(v));
+    }
+    return 0;
+}
+
 static HRESULT WINAPI HTMLImageElementFactory_create(IHTMLImageElementFactory *iface,
         VARIANT width, VARIANT height, IHTMLImgElement **img_elem)
 {
     HTMLImageElementFactory *This = HTMLIMGFACTORY_THIS(iface);
+    IHTMLImgElement *img;
     HTMLElement *elem;
     nsIDOMHTMLElement *nselem;
+    LONG l;
     HRESULT hres;
 
     static const PRUnichar imgW[] = {'I','M','G',0};
@@ -758,7 +820,7 @@ static HRESULT WINAPI HTMLImageElementFactory_create(IHTMLImageElementFactory *i
         return E_FAIL;
     }
 
-    hres = IHTMLElement_QueryInterface(HTMLELEM(elem), &IID_IHTMLImgElement, (void**)img_elem);
+    hres = IHTMLElement_QueryInterface(HTMLELEM(elem), &IID_IHTMLImgElement, (void**)&img);
     if(FAILED(hres)) {
         ERR("IHTMLElement_QueryInterface failed: 0x%08x\n", hres);
         return hres;
@@ -766,9 +828,14 @@ static HRESULT WINAPI HTMLImageElementFactory_create(IHTMLImageElementFactory *i
 
     nsIDOMHTMLElement_Release(nselem);
 
-    if(V_VT(&width) != VT_EMPTY || V_VT(&height) != VT_EMPTY)
-        FIXME("Not setting image dimensions\n");
+    l = var_to_size(&width);
+    if(l)
+        IHTMLImgElement_put_width(img, l);
+    l = var_to_size(&height);
+    if(l)
+        IHTMLImgElement_put_height(img, l);
 
+    *img_elem = img;
     return S_OK;
 }
 
index ae7994a..1b8d1c5 100644 (file)
@@ -143,7 +143,7 @@ static HRESULT WINAPI HTMLInputElement_put_value(IHTMLInputElement *iface, BSTR
 
     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
 
-    nsAString_Init(&val_str, v);
+    nsAString_InitDepend(&val_str, v);
     nsres = nsIDOMHTMLInputElement_SetValue(This->nsinput, &val_str);
     nsAString_Finish(&val_str);
     if(NS_FAILED(nsres))
@@ -512,7 +512,7 @@ static HRESULT WINAPI HTMLInputElement_put_src(IHTMLInputElement *iface, BSTR v)
 
     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
 
-    nsAString_Init(&nsstr, v);
+    nsAString_InitDepend(&nsstr, v);
     nsres = nsIDOMHTMLInputElement_SetSrc(This->nsinput, &nsstr);
     nsAString_Finish(&nsstr);
     if(NS_FAILED(nsres))
@@ -1173,11 +1173,7 @@ static const NodeImplVtbl HTMLInputElementImplVtbl = {
 };
 
 static const tid_t HTMLInputElement_iface_tids[] = {
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
+    HTMLELEMENT_TIDS,
     IHTMLInputElement_tid,
     0
 };
index b8cecf0..a5ea3f4 100644 (file)
@@ -645,7 +645,7 @@ static HRESULT WINAPI HTMLDOMNode_put_nodeValue(IHTMLDOMNode *iface, VARIANT v)
 
         TRACE("bstr %s\n", debugstr_w(V_BSTR(&v)));
 
-        nsAString_Init(&val_str, V_BSTR(&v));
+        nsAString_InitDepend(&val_str, V_BSTR(&v));
         nsIDOMNode_SetNodeValue(This->nsnode, &val_str);
         nsAString_Finish(&val_str);
 
index 4701c57..3e03762 100644 (file)
@@ -117,7 +117,7 @@ static HRESULT WINAPI HTMLOptionElement_put_value(IHTMLOptionElement *iface, BST
 
     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
 
-    nsAString_Init(&value_str, v);
+    nsAString_InitDepend(&value_str, v);
     nsres = nsIDOMHTMLOptionElement_SetValue(This->nsoption, &value_str);
     nsAString_Finish(&value_str);
     if(NS_FAILED(nsres))
@@ -209,7 +209,7 @@ static HRESULT WINAPI HTMLOptionElement_put_text(IHTMLOptionElement *iface, BSTR
         }
     }
 
-    nsAString_Init(&text_str, v);
+    nsAString_InitDepend(&text_str, v);
     nsres = nsIDOMHTMLDocument_CreateTextNode(This->element.node.doc->nsdoc, &text_str, &text_node);
     nsAString_Finish(&text_str);
     if(NS_FAILED(nsres)) {
@@ -324,11 +324,7 @@ static const NodeImplVtbl HTMLOptionElementImplVtbl = {
 };
 
 static const tid_t HTMLOptionElement_iface_tids[] = {
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
+    HTMLELEMENT_TIDS,
     IHTMLOptionElement_tid,
     0
 };
index d86f398..2427309 100644 (file)
@@ -319,6 +319,19 @@ static const NodeImplVtbl HTMLScriptElementImplVtbl = {
     HTMLScriptElement_get_readystate
 };
 
+static const tid_t HTMLScriptElement_iface_tids[] = {
+    HTMLELEMENT_TIDS,
+    IHTMLScriptElement_tid,
+    0
+};
+
+static dispex_static_data_t HTMLScriptElement_dispex = {
+    NULL,
+    DispHTMLScriptElement_tid,
+    NULL,
+    HTMLScriptElement_iface_tids
+};
+
 HTMLElement *HTMLScriptElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem)
 {
     HTMLScriptElement *ret = heap_alloc_zero(sizeof(HTMLScriptElement));
@@ -327,7 +340,7 @@ HTMLElement *HTMLScriptElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *
     ret->lpHTMLScriptElementVtbl = &HTMLScriptElementVtbl;
     ret->element.node.vtbl = &HTMLScriptElementImplVtbl;
 
-    HTMLElement_Init(&ret->element, doc, nselem, NULL);
+    HTMLElement_Init(&ret->element, doc, nselem, &HTMLScriptElement_dispex);
 
     nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLScriptElement, (void**)&ret->nsscript);
     if(NS_FAILED(nsres))
index f9b7182..6698606 100644 (file)
@@ -253,7 +253,7 @@ static HRESULT WINAPI HTMLSelectElement_put_value(IHTMLSelectElement *iface, BST
 
     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
 
-    nsAString_Init(&value_str, v);
+    nsAString_InitDepend(&value_str, v);
     nsres = nsIDOMHTMLSelectElement_SetValue(This->nsselect, &value_str);
     nsAString_Finish(&value_str);
     if(NS_FAILED(nsres))
@@ -332,8 +332,26 @@ static HRESULT WINAPI HTMLSelectElement_add(IHTMLSelectElement *iface, IHTMLElem
                                             VARIANT before)
 {
     HTMLSelectElement *This = HTMLSELECT_THIS(iface);
-    FIXME("(%p)->(%p v)\n", This, element);
-    return E_NOTIMPL;
+    IHTMLDOMNode *node, *tmp;
+    HRESULT hres;
+
+    FIXME("(%p)->(%p %s): semi-stub\n", This, element, debugstr_variant(&before));
+
+    if(V_VT(&before) != VT_EMPTY) {
+        FIXME("unhandled before %s\n", debugstr_variant(&before));
+        return E_NOTIMPL;
+    }
+
+    hres = IHTMLElement_QueryInterface(element, &IID_IHTMLDOMNode, (void**)&node);
+    if(FAILED(hres))
+        return hres;
+
+    hres = IHTMLDOMNode_appendChild(HTMLDOMNODE(&This->element.node), node, &tmp);
+    IHTMLDOMNode_Release(node);
+    if(SUCCEEDED(hres) && tmp)
+        IHTMLDOMNode_Release(tmp);
+
+    return hres;
 }
 
 static HRESULT WINAPI HTMLSelectElement_remove(IHTMLSelectElement *iface, LONG index)
@@ -487,11 +505,7 @@ static const NodeImplVtbl HTMLSelectElementImplVtbl = {
 };
 
 static const tid_t HTMLSelectElement_tids[] = {
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
+    HTMLELEMENT_TIDS,
     IHTMLSelectElement_tid,
     0
 };
index 467464a..cb86b79 100644 (file)
@@ -315,9 +315,9 @@ HRESULT set_nsstyle_attr(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, LPCW
     if(flags & ATTR_FIX_URL)
         val = fix_url_value(value);
 
-    nsAString_Init(&str_name, style_tbl[sid].name);
-    nsAString_Init(&str_value, val ? val : value);
-    nsAString_Init(&str_empty, wszEmpty);
+    nsAString_InitDepend(&str_name, style_tbl[sid].name);
+    nsAString_InitDepend(&str_value, val ? val : value);
+    nsAString_InitDepend(&str_empty, wszEmpty);
     heap_free(val);
 
     nsres = nsIDOMCSSStyleDeclaration_SetProperty(nsstyle, &str_name, &str_value, &str_empty);
@@ -345,10 +345,12 @@ HRESULT set_nsstyle_attr_var(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid,
 
     case VT_I4: {
         WCHAR str[14];
+
         static const WCHAR format[] = {'%','d',0};
+        static const WCHAR px_format[] = {'%','d','p','x',0};
 
-        wsprintfW(str, format, V_I4(value));
-        return set_nsstyle_attr(nsstyle, sid, str, flags);
+        wsprintfW(str, flags&ATTR_FIX_PX ? px_format : format, V_I4(value));
+        return set_nsstyle_attr(nsstyle, sid, str, flags & ~ATTR_FIX_PX);
     }
     default:
         FIXME("not implemented vt %d\n", V_VT(value));
@@ -369,7 +371,7 @@ static HRESULT get_nsstyle_attr_nsval(nsIDOMCSSStyleDeclaration *nsstyle, stylei
     nsAString str_name;
     nsresult nsres;
 
-    nsAString_Init(&str_name, style_tbl[sid].name);
+    nsAString_InitDepend(&str_name, style_tbl[sid].name);
 
     nsres = nsIDOMCSSStyleDeclaration_GetPropertyValue(nsstyle, &str_name, value);
     if(NS_FAILED(nsres)) {
@@ -1531,8 +1533,10 @@ static HRESULT WINAPI HTMLStyle_put_borderTopColor(IHTMLStyle *iface, VARIANT v)
 static HRESULT WINAPI HTMLStyle_get_borderTopColor(IHTMLStyle *iface, VARIANT *p)
 {
     HTMLStyle *This = HTMLSTYLE_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_TOP_COLOR, p, 0);
 }
 
 static HRESULT WINAPI HTMLStyle_put_borderRightColor(IHTMLStyle *iface, VARIANT v)
@@ -1545,8 +1549,10 @@ static HRESULT WINAPI HTMLStyle_put_borderRightColor(IHTMLStyle *iface, VARIANT
 static HRESULT WINAPI HTMLStyle_get_borderRightColor(IHTMLStyle *iface, VARIANT *p)
 {
     HTMLStyle *This = HTMLSTYLE_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_RIGHT_COLOR, p, 0);
 }
 
 static HRESULT WINAPI HTMLStyle_put_borderBottomColor(IHTMLStyle *iface, VARIANT v)
@@ -1559,8 +1565,10 @@ static HRESULT WINAPI HTMLStyle_put_borderBottomColor(IHTMLStyle *iface, VARIANT
 static HRESULT WINAPI HTMLStyle_get_borderBottomColor(IHTMLStyle *iface, VARIANT *p)
 {
     HTMLStyle *This = HTMLSTYLE_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_BOTTOM_COLOR, p, 0);
 }
 
 static HRESULT WINAPI HTMLStyle_put_borderLeftColor(IHTMLStyle *iface, VARIANT v)
@@ -1573,8 +1581,10 @@ static HRESULT WINAPI HTMLStyle_put_borderLeftColor(IHTMLStyle *iface, VARIANT v
 static HRESULT WINAPI HTMLStyle_get_borderLeftColor(IHTMLStyle *iface, VARIANT *p)
 {
     HTMLStyle *This = HTMLSTYLE_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_LEFT_COLOR, p, 0);
 }
 
 static HRESULT WINAPI HTMLStyle_put_borderWidth(IHTMLStyle *iface, BSTR v)
@@ -1779,15 +1789,7 @@ static HRESULT WINAPI HTMLStyle_put_width(IHTMLStyle *iface, VARIANT v)
 
     TRACE("(%p)->(v%d)\n", This, V_VT(&v));
 
-    switch(V_VT(&v)) {
-    case VT_BSTR:
-        TRACE("%s\n", debugstr_w(V_BSTR(&v)));
-        return set_style_attr(This, STYLEID_WIDTH, V_BSTR(&v), 0);
-    default:
-        FIXME("unsupported vt %d\n", V_VT(&v));
-    }
-
-    return E_NOTIMPL;
+    return set_nsstyle_attr_var(This->nsstyle, STYLEID_WIDTH, &v, ATTR_FIX_PX);
 }
 
 static HRESULT WINAPI HTMLStyle_get_width(IHTMLStyle *iface, VARIANT *p)
@@ -2129,7 +2131,7 @@ static HRESULT WINAPI HTMLStyle_put_cssText(IHTMLStyle *iface, BSTR v)
 
     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
 
-    nsAString_Init(&text_str, v);
+    nsAString_InitDepend(&text_str, v);
     nsres = nsIDOMCSSStyleDeclaration_SetCssText(This->nsstyle, &text_str);
     nsAString_Finish(&text_str);
     if(NS_FAILED(nsres)) {
index 6357f77..1286952 100644 (file)
@@ -558,11 +558,7 @@ static const NodeImplVtbl HTMLTableImplVtbl = {
 };
 
 static const tid_t HTMLTable_iface_tids[] = {
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
+    HTMLELEMENT_TIDS,
     IHTMLTable_tid,
     0
 };
index 862ed75..950535a 100644 (file)
@@ -301,11 +301,7 @@ static const NodeImplVtbl HTMLTableRowImplVtbl = {
 };
 
 static const tid_t HTMLTableRow_iface_tids[] = {
-    IHTMLDOMNode_tid,
-    IHTMLDOMNode2_tid,
-    IHTMLElement_tid,
-    IHTMLElement2_tid,
-    IHTMLElement3_tid,
+    HTMLELEMENT_TIDS,
     IHTMLTableRow_tid,
     0
 };
index 0a07379..9ded8ac 100644 (file)
@@ -411,6 +411,19 @@ static const NodeImplVtbl HTMLTextAreaElementImplVtbl = {
     HTMLTextAreaElementImpl_get_disabled
 };
 
+static const tid_t HTMLTextAreaElement_iface_tids[] = {
+    HTMLELEMENT_TIDS,
+    IHTMLTextAreaElement_tid,
+    0
+};
+
+static dispex_static_data_t HTMLTextAreaElement_dispex = {
+    NULL,
+    DispHTMLTextAreaElement_tid,
+    NULL,
+    HTMLTextAreaElement_iface_tids
+};
+
 HTMLElement *HTMLTextAreaElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem)
 {
     HTMLTextAreaElement *ret = heap_alloc_zero(sizeof(HTMLTextAreaElement));
@@ -419,7 +432,7 @@ HTMLElement *HTMLTextAreaElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement
     ret->lpHTMLTextAreaElementVtbl = &HTMLTextAreaElementVtbl;
     ret->element.node.vtbl = &HTMLTextAreaElementImplVtbl;
 
-    HTMLElement_Init(&ret->element, doc, nselem, NULL);
+    HTMLElement_Init(&ret->element, doc, nselem, &HTMLTextAreaElement_dispex);
 
     nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLTextAreaElement,
                                              (void**)&ret->nstextarea);
index 4a2babe..58d5f7b 100644 (file)
@@ -694,7 +694,7 @@ static HRESULT WINAPI HTMLWindow2_put_name(IHTMLWindow2 *iface, BSTR v)
 
     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
 
-    nsAString_Init(&name_str, v);
+    nsAString_InitDepend(&name_str, v);
     nsres = nsIDOMWindow_SetName(This->nswindow, &name_str);
     nsAString_Finish(&name_str);
     if(NS_FAILED(nsres))
@@ -1688,13 +1688,20 @@ static HRESULT WINAPI WindowDispEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid
                                                  LCID lcid, DISPID *rgDispId)
 {
     HTMLWindow *This = DISPEX_THIS(iface);
+    UINT i;
+    HRESULT hres;
 
-    TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
+    WARN("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
           lcid, rgDispId);
 
-    /* FIXME: Use script dispatch */
+    for(i=0; i < cNames; i++) {
+        /* We shouldn't use script's IDispatchEx here, so we shouldn't use GetDispID */
+        hres = IDispatchEx_GetDispID(DISPATCHEX(This), rgszNames[i], 0, rgDispId+i);
+        if(FAILED(hres))
+            return hres;
+    }
 
-    return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->dispex), riid, rgszNames, cNames, lcid, rgDispId);
+    return S_OK;
 }
 
 static HRESULT WINAPI WindowDispEx_Invoke(IDispatchEx *iface, DISPID dispIdMember,
index 1e30066..f54c6e3 100644 (file)
@@ -439,11 +439,14 @@ HRESULT WINAPI DllUnregisterServer(void)
 
 const char *debugstr_variant(const VARIANT *v)
 {
+    if(!v)
+        return "(null)";
+
     switch(V_VT(v)) {
     case VT_EMPTY:
-        return wine_dbg_sprintf("{VT_EMPTY}");
+        return "{VT_EMPTY}";
     case VT_NULL:
-        return wine_dbg_sprintf("{VT_NULL}");
+        return "{VT_NULL}";
     case VT_I4:
         return wine_dbg_sprintf("{VT_I4: %d}", V_I4(v));
     case VT_R8:
index f493a3b..dccd736 100644 (file)
@@ -90,7 +90,7 @@ HKCR,"CLSID\%CLSID_CRecalcEngine%\InProcServer32","ThreadingModel",,"Apartment"
 
 ;; CrSource
 HKCR,"CLSID\%CLSID_CrSource%",,,"Microsoft CrSource 4.0"
-HKCR,"CLSID\%CLSID_CrSource%\BrowseInPlace",,,""
+HKCR,"CLSID\%CLSID_CrSource%\BrowseInPlace",,16
 ;; HKCR,"CLSID\%CLSID_CrSource%\DefaultIcon",,0x00020000,"%IEXPLORE%,1"
 HKCR,"CLSID\%CLSID_CrSource%\EnablePlugin\.css",,,"PointPlus plugin"
 HKCR,"CLSID\%CLSID_CrSource%\InProcServer32",,,"mshtml.dll"
@@ -113,7 +113,7 @@ HKCR,"ScriptBridge.ScriptBridge.1\CLSID",,,"%CLSID_Scriptlet%"
 
 ;; HTADocument
 HKCR,"CLSID\%CLSID_HTADocument%",,,"Microsoft HTA Document 6.0"
-HKCR,"CLSID\%CLSID_HTADocument%\BrowseInPlace",,,""
+HKCR,"CLSID\%CLSID_HTADocument%\BrowseInPlace",,16
 HKCR,"CLSID\%CLSID_HTADocument%\InProcServer32",,,"mshtml.dll"
 HKCR,"CLSID\%CLSID_HTADocument%\InProcServer32","ThreadingModel",,"Apartment"
 HKCR,"CLSID\%CLSID_HTADocument%\MiscStatus",,,"2228625"
@@ -121,7 +121,7 @@ HKCR,"CLSID\%CLSID_HTADocument%\Version",,,"6.0"
 
 ;; HTMLDocument
 HKCR,"CLSID\%CLSID_HTMLDocument%",,,"HTML Document"
-HKCR,"CLSID\%CLSID_HTMLDocument%\BrowseInPlace",,,""
+HKCR,"CLSID\%CLSID_HTMLDocument%\BrowseInPlace",,16
 ;; HKCR,"CLSID\%CLSID_HTMLDocument%\DefaultIcon",,0x00020000,"%IEXPLORE%,1"
 HKCR,"CLSID\%CLSID_HTMLDocument%\InProcServer32",,,"mshtml.dll"
 HKCR,"CLSID\%CLSID_HTMLDocument%\InProcServer32","ThreadingModel",,"Apartment"
@@ -132,7 +132,7 @@ HKCR,"CLSID\%CLSID_HTMLDocument%\EnablePlugin\.css",,,"PointPlus plugin"
 
 ;; HTMLPluginDocument
 HKCR,"CLSID\%CLSID_HTMLPluginDocument%",,,"Microsoft HTML Document 6.0"
-HKCR,"CLSID\%CLSID_HTMLPluginDocument%\BrowseInPlace",,,""
+HKCR,"CLSID\%CLSID_HTMLPluginDocument%\BrowseInPlace",,16
 HKCR,"CLSID\%CLSID_HTMLPluginDocument%\InProcServer32",,,"mshtml.dll"
 HKCR,"CLSID\%CLSID_HTMLPluginDocument%\InProcServer32","ThreadingModel",,"Apartment"
 HKCR,"CLSID\%CLSID_HTMLPluginDocument%\MiscStatus",,,"0"
@@ -159,7 +159,7 @@ HKCR,"CLSID\%CLSID_HTMLWindowProxy%\InProcServer32",,,"mshtml.dll"
 HKCR,"CLSID\%CLSID_HTMLWindowProxy%\InProcServer32","ThreadingModel",,"Apartment"
 
 ;; IImageDecodeFilter
-HKCR,"CLSID\%CLSID_IImageDecodeFilter%",,,""
+HKCR,"CLSID\%CLSID_IImageDecodeFilter%",,,"CoICOFilter Class"
 HKCR,"CLSID\%CLSID_IImageDecodeFilter%\InProcServer32",,,%_MOD_PATH%
 HKCR,"CLSID\%CLSID_IImageDecodeFilter%\InProcServer32","ThreadingModel",,"Apartment"
 HKCR,"MIME\Database\Content Type\image/x-wmf","Image Filter CLSID",,"%CLSID_IImageDecodeFilter%"
@@ -214,7 +214,7 @@ HKCR,"CLSID\%CLSID_MailtoProtocol%\InProcServer32","ThreadingModel",,"Apartment"
 
 ;; MHTMLDocument
 HKCR,"CLSID\%CLSID_MHTMLDocument%",,,"MHTML Document"
-HKCR,"CLSID\%CLSID_MHTMLDocument%\BrowseInPlace",,,""
+HKCR,"CLSID\%CLSID_MHTMLDocument%\BrowseInPlace",,16
 ;; HKCR,"CLSID\%CLSID_MHTMLDocument%\DefaultIcon",,0x00020000,"%IEXPLORE%,1"
 HKCR,"CLSID\%CLSID_MHTMLDocument%\InProcServer32",,,"mshtml.dll"
 HKCR,"CLSID\%CLSID_MHTMLDocument%\InProcServer32","ThreadingModel",,"Apartment"
@@ -229,13 +229,13 @@ HKCR,"CLSID\%CLSID_ResProtocol%\InProcServer32","ThreadingModel",,"Apartment"
 
 ;; Scriptlet
 HKCR,"CLSID\%CLSID_Scriptlet%",,,"Microsoft Scriptlet Component"
-HKCR,"CLSID\%CLSID_Scriptlet%\Control"
+HKCR,"CLSID\%CLSID_Scriptlet%\Control",,16
 HKCR,"CLSID\%CLSID_Scriptlet%\InProcServer32",,,"%_MOD_PATH%"
 HKCR,"CLSID\%CLSID_Scriptlet%\InProcServer32","ThreadingModel",,"Apartment"
 HKCR,"CLSID\%CLSID_Scriptlet%\MiscStatus",,,"0"
 HKCR,"CLSID\%CLSID_Scriptlet%\MiscStatus\1",,,"131473"
 HKCR,"CLSID\%CLSID_Scriptlet%\ProgID",,,"ScriptBridge.ScriptBridge.1"
-HKCR,"CLSID\%CLSID_Scriptlet%\Programmable"
+HKCR,"CLSID\%CLSID_Scriptlet%\Programmable",,16
 ;; HKCR,"CLSID\%CLSID_Scriptlet%\ToolboxBitmap32",,,"%IEXPLORE%,1"
 HKCR,"CLSID\%CLSID_Scriptlet%\TypeLib",,,"%LIBID_MSHTML%"
 HKCR,"CLSID\%CLSID_Scriptlet%\Version",,,"4.0"
@@ -337,11 +337,11 @@ HKCR,"InternetShortcut\shell\printto\command",,,"rundll32.exe mshtml.dll,PrintHT
 HKCR,"htmlfile\shell\print\command",,,"rundll32.exe mshtml.dll,PrintHTML ""%%1"""
 HKCR,"htmlfile\shell\printto\command",,,"rundll32.exe mshtml.dll,PrintHTML ""%%1"" ""%%2"" ""%%3"" ""%%4"""
 HKCR,"htmlfile",,,"HTML Document"
-HKCR,"htmlfile\BrowseInPlace",,,""
+HKCR,"htmlfile\BrowseInPlace",,16
 HKCR,"htmlfile\CLSID",,,"%CLSID_HTMLDocument%"
 ;; HKCR,"htmlfile\DefaultIcon",,0x00020000,"%IEXPLORE%,1"
 HKCR,"htmlfile_FullWindowEmbed",,,"HTML Plugin Document"
-HKCR,"htmlfile_FullWindowEmbed\BrowseInPlace",,,""
+HKCR,"htmlfile_FullWindowEmbed\BrowseInPlace",,16
 HKCR,"htmlfile_FullWindowEmbed\CLSID",,,"%CLSID_HTMLPluginDocument%"
 HKCR,".htm",,,"htmlfile"
 HKCR,".htm","Content Type",,"text/html"
@@ -398,7 +398,7 @@ HKCR,".mhtml","Content Type",,"message/rfc822"
 HKCR,".mht",,2,"mhtmlfile"
 HKCR,".mht","Content Type",,"message/rfc822"
 HKCR,"mhtmlfile",,,"MHTML Document"
-HKCR,"mhtmlfile\BrowseInPlace",,,""
+HKCR,"mhtmlfile\BrowseInPlace",,16
 HKCR,"mhtmlfile\CLSID",,,"%CLSID_MHTMLDocument%"
 
 ;; MPEG
index 562a68a..c3f56cd 100644 (file)
@@ -30,6 +30,7 @@
        <file>htmlelemcol.c</file>
        <file>htmlevent.c</file>
        <file>htmlform.c</file>
+       <file>htmlframe.c</file>
        <file>htmlframebase.c</file>
        <file>htmlgeneric.c</file>
        <file>htmliframe.c</file>
index 68b3393..c65bffa 100644 (file)
@@ -68,6 +68,7 @@ typedef enum {
     DispHTMLElementCollection_tid,
     DispHTMLFormElement_tid,
     DispHTMLGenericElement_tid,
+    DispHTMLFrameElement_tid,
     DispHTMLIFrame_tid,
     DispHTMLImg_tid,
     DispHTMLInputElement_tid,
@@ -75,10 +76,12 @@ typedef enum {
     DispHTMLNavigator_tid,
     DispHTMLOptionElement_tid,
     DispHTMLScreen_tid,
+    DispHTMLScriptElement_tid,
     DispHTMLSelectElement_tid,
     DispHTMLStyle_tid,
     DispHTMLTable_tid,
     DispHTMLTableRow_tid,
+    DispHTMLTextAreaElement_tid,
     DispHTMLUnknownElement_tid,
     DispHTMLWindow2_tid,
     HTMLDocumentEvents_tid,
@@ -108,13 +111,16 @@ typedef enum {
     IHTMLFormElement_tid,
     IHTMLFrameBase_tid,
     IHTMLFrameBase2_tid,
+    IHTMLFrameElement3_tid,
     IHTMLGenericElement_tid,
+    IHTMLIFrameElement_tid,
     IHTMLImageElementFactory_tid,
     IHTMLImgElement_tid,
     IHTMLInputElement_tid,
     IHTMLLocation_tid,
     IHTMLOptionElement_tid,
     IHTMLScreen_tid,
+    IHTMLScriptElement_tid,
     IHTMLSelectElement_tid,
     IHTMLStyle_tid,
     IHTMLStyle2_tid,
@@ -122,6 +128,7 @@ typedef enum {
     IHTMLStyle4_tid,
     IHTMLTable_tid,
     IHTMLTableRow_tid,
+    IHTMLTextAreaElement_tid,
     IHTMLTextContainer_tid,
     IHTMLUniqueName_tid,
     IHTMLWindow2_tid,
@@ -373,6 +380,7 @@ struct HTMLDocumentObj {
     IOleInPlaceSite *ipsite;
     IOleInPlaceFrame *frame;
     IOleInPlaceUIWindow *ip_window;
+    IAdviseSink *view_sink;
 
     DOCHOSTUIINFO hostinfo;
 
@@ -487,6 +495,14 @@ typedef struct {
     nsIDOMHTMLElement *nselem;
 } HTMLElement;
 
+#define HTMLELEMENT_TIDS    \
+    IHTMLDOMNode_tid,       \
+    IHTMLDOMNode2_tid,      \
+    IHTMLElement_tid,       \
+    IHTMLElement2_tid,      \
+    IHTMLElement3_tid,      \
+    IHTMLElement4_tid
+
 typedef struct {
     HTMLElement element;
 
@@ -696,7 +712,8 @@ void nsfree(void*);
 void nsACString_SetData(nsACString*,const char*);
 PRUint32 nsACString_GetData(const nsACString*,const char**);
 
-void nsAString_Init(nsAString*,const PRUnichar*);
+BOOL nsAString_Init(nsAString*,const PRUnichar*);
+void nsAString_InitDepend(nsAString*,const PRUnichar*);
 void nsAString_SetData(nsAString*,const PRUnichar*);
 PRUint32 nsAString_GetData(const nsAString*,const PRUnichar**);
 void nsAString_Finish(nsAString*);
index 372c467..61ceca8 100644 (file)
@@ -168,12 +168,12 @@ static BOOL handle_insert_comment(HTMLDocumentNode *doc, const PRUnichar *commen
 
     memcpy(buf, ptr, (end-ptr)*sizeof(WCHAR));
     buf[end-ptr] = 0;
-    nsAString_Init(&nsstr, buf);
-    heap_free(buf);
+    nsAString_InitDepend(&nsstr, buf);
 
     /* FIXME: Find better way to insert HTML to document. */
     nsres = nsIDOMHTMLDocument_Write(doc->nsdoc, &nsstr);
     nsAString_Finish(&nsstr);
+    heap_free(buf);
     if(NS_FAILED(nsres)) {
         ERR("Write failed: %08x\n", nsres);
         return FALSE;
@@ -322,6 +322,8 @@ static void parse_complete_proc(task_t *task)
         init_editor(&doc->basedoc);
 
     call_explorer_69(doc);
+    if(doc->view_sink)
+        IAdviseSink_OnViewChange(doc->view_sink, DVASPECT_CONTENT, -1);
     call_property_onchanged(&doc->basedoc.cp_propnotif, 1005);
     call_explorer_69(doc);
 
@@ -396,7 +398,7 @@ static nsresult NSAPI nsRunnable_Run(nsIRunnable *iface)
                 static const PRUnichar remove_comment_magicW[] =
                     {'#','!','w','i','n','e', 'r','e','m','o','v','e','!','#',0};
 
-                nsAString_Init(&magic_str, remove_comment_magicW);
+                nsAString_InitDepend(&magic_str, remove_comment_magicW);
                 nsres = nsIDOMComment_SetData(nscomment, &magic_str);
                 nsAString_Finish(&magic_str);
                 if(NS_FAILED(nsres))
index 6858897..3415657 100644 (file)
@@ -52,13 +52,15 @@ struct nsCStringContainer {
     void *v;
     void *d1;
     PRUint32 d2;
-    void *d3;
+    PRUint32 d3;
 };
 
+#define NS_STRING_CONTAINER_INIT_DEPEND  0x0002
+
 static nsresult (*NS_InitXPCOM2)(nsIServiceManager**,void*,void*);
 static nsresult (*NS_ShutdownXPCOM)(nsIServiceManager*);
 static nsresult (*NS_GetComponentRegistrar)(nsIComponentRegistrar**);
-static nsresult (*NS_StringContainerInit)(nsStringContainer*);
+static nsresult (*NS_StringContainerInit2)(nsStringContainer*,const PRUnichar*,PRUint32,PRUint32);
 static nsresult (*NS_CStringContainerInit)(nsCStringContainer*);
 static nsresult (*NS_StringContainerFinish)(nsStringContainer*);
 static nsresult (*NS_CStringContainerFinish)(nsCStringContainer*);
@@ -194,7 +196,7 @@ static BOOL load_xpcom(const PRUnichar *gre_path)
     NS_DLSYM(NS_InitXPCOM2);
     NS_DLSYM(NS_ShutdownXPCOM);
     NS_DLSYM(NS_GetComponentRegistrar);
-    NS_DLSYM(NS_StringContainerInit);
+    NS_DLSYM(NS_StringContainerInit2);
     NS_DLSYM(NS_CStringContainerInit);
     NS_DLSYM(NS_StringContainerFinish);
     NS_DLSYM(NS_CStringContainerFinish);
@@ -424,7 +426,7 @@ static BOOL init_xpcom(const PRUnichar *gre_path)
     nsAString path;
     nsIFile *gre_dir;
 
-    nsAString_Init(&path, gre_path);
+    nsAString_InitDepend(&path, gre_path);
     nsres = NS_NewLocalFile(&path, FALSE, &gre_dir);
     nsAString_Finish(&path);
     if(NS_FAILED(nsres)) {
@@ -555,11 +557,18 @@ static void nsACString_Finish(nsACString *str)
     NS_CStringContainerFinish(str);
 }
 
-void nsAString_Init(nsAString *str, const PRUnichar *data)
+BOOL nsAString_Init(nsAString *str, const PRUnichar *data)
 {
-    NS_StringContainerInit(str);
-    if(data)
-        nsAString_SetData(str, data);
+    return NS_SUCCEEDED(NS_StringContainerInit2(str, data, PR_UINT32_MAX, 0));
+}
+
+/*
+ * Initializes nsAString with data owned by caller.
+ * Caller must ensure that data is valid during lifetime of string object.
+ */
+void nsAString_InitDepend(nsAString *str, const PRUnichar *data)
+{
+    NS_StringContainerInit2(str, data, PR_UINT32_MAX, NS_STRING_CONTAINER_INIT_DEPEND);
 }
 
 void nsAString_SetData(nsAString *str, const PRUnichar *data)
index 46f057f..65bcae0 100644 (file)
@@ -236,6 +236,9 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event
     set_ready_state(doc->basedoc.window, READYSTATE_COMPLETE);
 
     if(doc == doc_obj->basedoc.doc_node) {
+        if(doc_obj->view_sink)
+            IAdviseSink_OnViewChange(doc_obj->view_sink, DVASPECT_CONTENT, -1);
+
         if(doc_obj->frame) {
             static const WCHAR wszDone[] = {'D','o','n','e',0};
             IOleInPlaceFrame_SetStatusText(doc_obj->frame, wszDone);
@@ -316,7 +319,7 @@ static void init_event(nsIDOMEventTarget *target, const PRUnichar *type,
     nsAString type_str;
     nsresult nsres;
 
-    nsAString_Init(&type_str, type);
+    nsAString_InitDepend(&type_str, type);
     nsres = nsIDOMEventTarget_AddEventListener(target, &type_str, listener, capture);
     nsAString_Finish(&type_str);
     if(NS_FAILED(nsres))
index 46fdcbc..763e877 100644 (file)
@@ -438,7 +438,7 @@ static nsresult NSAPI nsChannel_GetSecurityInfo(nsIHttpChannel *iface, nsISuppor
 {
     nsChannel *This = NSCHANNEL_THIS(iface);
 
-    FIXME("(%p)->(%p)\n", This, aSecurityInfo);
+    TRACE("(%p)->(%p)\n", This, aSecurityInfo);
 
     return NS_ERROR_NOT_IMPLEMENTED;
 }
index 5e669de..7df2d92 100644 (file)
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "windef.h"
+#include "winuser.h"
+#include "commctrl.h"
+#include "mshtmcid.h"
+
+#include "resource.h"
+
 #define WINE_OLESELFREGISTER
 #define WINE_FILEDESCRIPTION_STR "Wine HTML Viewer"
 #define WINE_FILENAME_STR "mshtml.dll"
 
 #include "wine/wine_common_ver.rc"
 
+#include "Bg.rc"
+#include "Da.rc"
+#include "De.rc"
+#include "En.rc"
+#include "Es.rc"
+#include "Fi.rc"
+#include "Fr.rc"
+#include "Hu.rc"
+#include "It.rc"
+#include "Ja.rc"
+#include "Ko.rc"
+#include "Lt.rc"
+#include "Nl.rc"
+#include "No.rc"
+#include "Pl.rc"
+#include "Pt.rc"
+#include "Ro.rc"
+#include "Ru.rc"
+#include "Si.rc"
+#include "Sv.rc"
+#include "Tr.rc"
+#include "Uk.rc"
+#include "Zh.rc"
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
 /* @makedep: mshtml.inf */
 REGINST REGINST mshtml.inf
 
index efd2605..1d21da9 100644 (file)
@@ -758,9 +758,9 @@ static BOOL get_script_guid(nsIDOMHTMLScriptElement *nsscript, GUID *guid)
         ERR("GetType failed: %08x\n", nsres);
     }
 
-    nsAString_Init(&attr_str, languageW);
-
+    nsAString_InitDepend(&attr_str, languageW);
     nsres = nsIDOMHTMLScriptElement_GetAttribute(nsscript, &attr_str, &val_str);
+    nsAString_Finish(&attr_str);
     if(NS_SUCCEEDED(nsres)) {
         const PRUnichar *language;
 
@@ -776,7 +776,6 @@ static BOOL get_script_guid(nsIDOMHTMLScriptElement *nsscript, GUID *guid)
         ERR("GetAttribute(language) failed: %08x\n", nsres);
     }
 
-    nsAString_Finish(&attr_str);
     nsAString_Finish(&val_str);
 
     return ret;
index 0ece6ec..9b2bb94 100644 (file)
@@ -1141,7 +1141,7 @@ static HRESULT WINAPI HTMLTxtRange_put_text(IHTMLTxtRange *iface, BSTR v)
     if(!This->doc)
         return MSHTML_E_NODOC;
 
-    nsAString_Init(&text_str, v);
+    nsAString_InitDepend(&text_str, v);
     nsres = nsIDOMHTMLDocument_CreateTextNode(This->doc->nsdoc, &text_str, &text_node);
     nsAString_Finish(&text_str);
     if(NS_FAILED(nsres)) {
index f4c62a0..261e959 100644 (file)
@@ -807,8 +807,19 @@ static HRESULT WINAPI ViewObject_Unfreeze(IViewObjectEx *iface, DWORD dwFreeze)
 static HRESULT WINAPI ViewObject_SetAdvise(IViewObjectEx *iface, DWORD aspects, DWORD advf, IAdviseSink *pAdvSink)
 {
     HTMLDocument *This = VIEWOBJ_THIS(iface);
-    FIXME("(%p)->(%d %d %p)\n", This, aspects, advf, pAdvSink);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%d %d %p)\n", This, aspects, advf, pAdvSink);
+
+    if(aspects != DVASPECT_CONTENT || advf != ADVF_PRIMEFIRST)
+        FIXME("unsuported arguments\n");
+
+    if(This->doc_obj->view_sink)
+        IAdviseSink_Release(This->doc_obj->view_sink);
+    if(pAdvSink)
+        IAdviseSink_AddRef(pAdvSink);
+
+    This->doc_obj->view_sink = pAdvSink;
+    return S_OK;
 }
 
 static HRESULT WINAPI ViewObject_GetAdvise(IViewObjectEx *iface, DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink)
index 0d12849..e3683e9 100644 (file)
 #define DISPID_IE8_ELEMENTMAX   (DISPID_SITE-1)
 #define DISPID_IE8_ELEMENT      DISPID_IE8_ELEMENTBASE
 
+#define DISPID_IE8_FRAMESITEBASE  (DISPID_FRAMESITE+1120)
+#define DISPID_IE8_FRAMEMAX       (WEBOC_DISPIDBASE-1)
+#define DISPID_IE8_FRAME          DISPID_IE8_FRAMESITEBASE
+#define DISPID_IE8_IFRAME         DISPID_IE8_FRAMESITEBASE
+
 #define DISPID_COLLECTION      (DISPID_NORMAL_FIRST+500)
 #define DISPID_OPTIONS_COL     (DISPID_NORMAL_FIRST+500)
 #define DISPID_IMG             (DISPID_IMGBASE+1000)
 /* IHTMLScriptElement2 */
 #define DISPID_IHTMLSCRIPTELEMENT2_CHARSET  DISPID_SCRIPT+10
 
+/* IHTMLScriptElement3 */
+#define DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC  DISPID_IE8_SCRIPT
+
 /* IHTMLFrameBase */
 #define DISPID_IHTMLFRAMEBASE_SRC           DISPID_FRAMESITE+0
 #define DISPID_IHTMLFRAMEBASE_NAME          STDPROPID_XOBJ_NAME
 /* IHTMLFrameBase3 */
 #define DISPID_IHTMLFRAMEBASE3_LONGDESC  DISPID_FRAMESITE+10
 
+/* IHTMLFrameElement */
+#define DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR  DISPID_FRAME+1
+
+/* IHTMLFrameElement2 */
+#define DISPID_IHTMLFRAMEELEMENT2_HEIGHT  STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLFRAMEELEMENT2_WIDTH   STDPROPID_XOBJ_WIDTH
+
+/* IHTMLFrameElement3 */
+#define DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT  DISPID_IE8_FRAME
+#define DISPID_IHTMLFRAMEELEMENT3_IE8_SRC          DISPID_IE8_FRAME+1
+#define DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC     DISPID_IE8_FRAME+2
+#define DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER  DISPID_IE8_FRAME+3
+
 /* IHTMLIFrameElement */
 #define DISPID_IHTMLIFRAMEELEMENT_VSPACE  DISPID_IFRAME+1
 #define DISPID_IHTMLIFRAMEELEMENT_HSPACE  DISPID_IFRAME+2
index 4a182f2..98edbbc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004-2007 Jacek Caban for CodeWeavers
+ * Copyright 2004-2010 Jacek Caban for CodeWeavers
  * Copyright 2008      Konstantin Kondratyuk (Etersoft)
  *
  * This library is free software; you can redistribute it and/or
@@ -2876,7 +2876,7 @@ interface IHTMLCurrentStyle4 : IDispatch
 
     [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH), displaybind, bindable]
     HRESULT maxWidth([retval, out] VARIANT * p);
-};
+}
 
 /*****************************************************************************
  *    DispHTMLCurrentStyle dispinterface
@@ -5903,7 +5903,7 @@ coclass HTMLStyleSheetPage
     [default]           dispinterface DispHTMLStyleSheetPage;
                         interface IHTMLStyleSheetPage;
                         interface IHTMLDOMConstructor;
-};
+}
 
 [
     odl,
@@ -6702,7 +6702,7 @@ methods:
 
     [id(DISPID_HTMLFORMELEMENTEVENTS_ONRESET)]
     VARIANT_BOOL onreset();
-};
+}
 
 interface IHTMLEventObj;
 
@@ -6905,7 +6905,7 @@ methods:
 
     [id(DISPID_HTMLFORMELEMENTEVENTS2_ONRESET)]
     VARIANT_BOOL onreset([in] IHTMLEventObj* pEvtObj);
-};
+}
 
 [
     noncreatable,
@@ -7365,7 +7365,7 @@ interface IHTMLControlElement : IDispatch
 
     [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTLEFT), displaybind, bindable]
     HRESULT clientLeft([retval, out] LONG * p);
-};
+}
 
 /*****************************************************************************
  *    IHTMLBodyElement interface
@@ -7634,7 +7634,7 @@ methods:
 
     [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
     VARIANT onafterprint();
-};
+}
 
 [
     uuid(3050f24a-98b5-11cf-bb82-00aa00bdce0b)
@@ -7655,7 +7655,7 @@ coclass HTMLBody
                         interface IHTMLTextContainer;
                         interface IHTMLBodyElement;
                         interface IHTMLBodyElement2;
-};
+}
 
 /*****************************************************************************
  *    IHTMLAnchorElement interface
@@ -8970,6 +8970,92 @@ interface IHTMLTextAreaElement : IDispatch
     HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
 }
 
+/*****************************************************************************
+ *    DispHTMLTextAreaElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f521-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLTextAreaElement
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_TYPE)]
+    BSTR type();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
+    void value(BSTR v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
+    BSTR value();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
+    void status(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
+    VARIANT status();
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_FORM)]
+    IHTMLFormElement *form();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+    void defaultValue(BSTR v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+    BSTR defaultValue();
+
+    [id(DISPID_IHTMLTEXTAREAELEMENT_SELECT)]
+    void select();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
+    void onchange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
+    VARIANT onchange();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
+    void onselect(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
+    VARIANT onselect();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
+    void readOnly(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
+    VARIANT_BOOL readOnly();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
+    void rows(LONG v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
+    LONG rows();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
+    void cols(LONG v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
+    LONG cols();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
+    void wrap(BSTR v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
+    BSTR wrap();
+
+    [id(DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE)]
+    IHTMLTxtRange *createTextRange();
+}
+
 /*****************************************************************************
  *    DispHTMLUnknownElement interface
  */
@@ -10245,7 +10331,7 @@ interface IHTMLWindow4 : IDispatch
 
     [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]
     HRESULT frameElement([retval, out] IHTMLFrameBase* * p);
-};
+}
 
 /*****************************************************************************
  *    IHTMLWindow5 interface
@@ -10263,7 +10349,7 @@ interface IHTMLWindow5 : IDispatch
 
     [propget, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
     HRESULT XMLHttpRequest([retval, out] VARIANT * p);
-};
+}
 
 /*****************************************************************************
  *    DispHTMLScreen dispinterface
@@ -10902,7 +10988,7 @@ methods:
 
     [propget, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
     VARIANT XMLHttpRequest();
-};
+}
 
 /*****************************************************************************
  *    HTMLWindowEvents interface
@@ -10949,7 +11035,7 @@ methods:
 
     [id(DISPID_HTMLWINDOWEVENTS_ONAFTERPRINT)]
     void onafterprint();
-};
+}
 
 /*****************************************************************************
  *    HTMLWindowEvents2 interface
@@ -10996,7 +11082,7 @@ methods:
 
     [id(DISPID_HTMLWINDOWEVENTS2_ONAFTERPRINT)]
     void onafterprint([in] IHTMLEventObj* pEvtObj);
-};
+}
 
 /*****************************************************************************
  *    HTMLWindowProxy class
@@ -11013,7 +11099,7 @@ coclass HTMLWindowProxy
                         interface IHTMLWindow3;
                         interface IHTMLWindow4;
                         interface IHTMLWindow5;
-};
+}
 
 /*****************************************************************************
  *    HTMLDocumentEvents2 interface
@@ -11473,7 +11559,7 @@ methods:
 
     [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONSELECT)]
     void onselect();
-};
+}
 
 /*****************************************************************************
  *    HTMLTextContainerEvents2 interface
@@ -11677,7 +11763,7 @@ methods:
 
     [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONSELECT)]
     void onselect([in] IHTMLEventObj* pEvtObj);
-};
+}
 
 /*****************************************************************************
  *    IHTMLDocument interface
@@ -13329,7 +13415,8 @@ methods:
 
     [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
     VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);
-};
+}
+
 [
     hidden,
     uuid(3050f33c-98b5-11cf-bb82-00aa00bdce0b)
@@ -13526,8 +13613,7 @@ methods:
 
     [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
     void onfocusout();
-
-};
+}
 
 [
     noncreatable,
@@ -13943,7 +14029,7 @@ methods:
 
     [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
     VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);
-};
+}
 
 /*****************************************************************************
  *    IHTMLTableCaption interface
@@ -14153,7 +14239,7 @@ interface IHTMLTable2 : IDispatch
     HRESULT moveRow([defaultvalue(-1), in] LONG indexFrom,
         [defaultvalue(-1), in] LONG indexTo,
         [retval, out] IDispatch** row);
-};
+}
 
 [
     odl,
@@ -14168,7 +14254,7 @@ interface IHTMLTable3 : IDispatch
 
     [propget, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
     HRESULT summary([retval, out] BSTR * p);
-};
+}
 
 [
     noncreatable,
@@ -14191,7 +14277,7 @@ coclass HTMLTable
                         interface IHTMLTable;
                         interface IHTMLTable2;
                         interface IHTMLTable3;
-};
+}
 
 [
     odl,
@@ -14626,6 +14712,74 @@ interface IHTMLScriptElement2 : IDispatch
     HRESULT charset([retval, out] BSTR *p);
 }
 
+/*****************************************************************************
+ *    DispHTMLScriptElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f530-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLScriptElement
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
+    void src(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
+    BSTR src();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
+    void htmlFor(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
+    BSTR htmlFor();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
+    void event(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
+    BSTR event();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
+    void text(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
+    BSTR text();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
+    void defer(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
+    VARIANT_BOOL defer();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
+    void onerror(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
+    VARIANT onerror();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
+    void type(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
+    BSTR type();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
+    void charset(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
+    BSTR charset();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC)]
+    void ie8_src(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC)]
+    BSTR ie8_src();
+}
+
 /*****************************************************************************
  *    IHTMLFrameBase interface
  */
@@ -14692,6 +14846,61 @@ interface IHTMLFrameBase : IDispatch
     HRESULT scrolling([out, retval] BSTR *p);
 }
 
+#define WINE_IHTMLFRAMEBASE_DISPINTERFACE_DECL          \
+    [propput, id(DISPID_IHTMLFRAMEBASE_SRC)]            \
+    void src(BSTR v);                                   \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_SRC)]            \
+    BSTR src();                                         \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_NAME)]           \
+    void name(BSTR v);                                  \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_NAME)]           \
+    BSTR name();                                        \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)]         \
+    void border(VARIANT v);                             \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)]         \
+    VARIANT border();                                   \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]    \
+    void frameBorder(BSTR v);                           \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]    \
+    BSTR frameBorder();                                 \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]   \
+    void frameSpacing(VARIANT v);                       \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]   \
+    VARIANT frameSpacing();                             \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]    \
+    void marginWidth(VARIANT v);                        \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]    \
+    VARIANT marginWidth();                              \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]   \
+    void marginHeight(VARIANT v);                       \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]   \
+    VARIANT marginHeight();                             \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]       \
+    void noResize(VARIANT_BOOL v);                      \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]       \
+    VARIANT_BOOL noResize();                            \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]      \
+    void scrolling(BSTR v);                             \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]      \
+    BSTR scrolling()
+
 /*****************************************************************************
  *    IHTMLFrameBase2 interface
  */
@@ -14728,93 +14937,164 @@ interface IHTMLFrameBase2 : IDispatch
     HRESULT allowTransparency([retval, out] VARIANT_BOOL *p);
 }
 
+#define WINE_IHTMLFRAMEBASE2_DISPINTERFACE_DECL                         \
+    [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)]                 \
+    IHTMLWindow2 *contentWindow();                                      \
+                                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] \
+    void onload(VARIANT v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] \
+    VARIANT onload();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]             \
+    void allowTransparency(VARIANT_BOOL v);                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]             \
+    VARIANT_BOOL allowTransparency()
+
+#define WINE_IHTMLFRAMEBASE3_DISPINTERFACE_DECL                           \
+    [propput, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable] \
+    void longDesc(BSTR v);                                                \
+                                                                          \
+    [propget, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable] \
+    BSTR longDesc()
+
+
+#define WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL \
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;  \
+    WINE_IHTMLFRAMEBASE_DISPINTERFACE_DECL;   \
+    WINE_IHTMLFRAMEBASE2_DISPINTERFACE_DECL;  \
+    WINE_IHTMLFRAMEBASE3_DISPINTERFACE_DECL
+
 /*****************************************************************************
- *    DispHTMLIFrame dispinterface
+ *    IHTMLFrameElement3 interface
  */
 [
-    hidden,
-    uuid(3050f51b-98b5-11cf-bb82-00aa00bdce0b)
+    odl,
+    oleautomation,
+    dual,
+    uuid(3051042d-98b5-11cf-bb82-00aa00bdce0b)
 ]
-dispinterface DispHTMLIFrame
+interface IHTMLFrameElement3 : IDispatch
 {
-properties:
-methods:
-    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT)]
+    HRESULT contentDocument([out, retval] IDispatch **p);
 
-    [propput, id(DISPID_IHTMLFRAMEBASE_SRC)]
-    void src(BSTR v);
+    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
+    HRESULT src([in] BSTR v);
 
-    [propget, id(DISPID_IHTMLFRAMEBASE_SRC)]
-    BSTR src();
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
+    HRESULT src([out, retval] BSTR *p);
 
-    [propput, id(DISPID_IHTMLFRAMEBASE_NAME)]
-    void name(BSTR v);
+    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
+    HRESULT longDesc([in] BSTR v);
 
-    [propget, id(DISPID_IHTMLFRAMEBASE_NAME)]
-    BSTR name();
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
+    HRESULT longDesc([out, retval] BSTR *p);
 
-    [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)]
-    void border(VARIANT v);
+    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
+    HRESULT frameBorder([in] BSTR v);
 
-    [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)]
-    VARIANT border();
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
+    HRESULT frameBorder([out, retval] BSTR * p);
+}
 
-    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
-    void frameBorder(BSTR v);
+/*****************************************************************************
+ *    DispHTMLFrameElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f513-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLFrameElement
+{
+properties:
+methods:
+    WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL;
 
-    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
-    BSTR frameBorder();
+    [propput, id(DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR)]
+    void borderColor(VARIANT v);
 
-    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
-    void frameSpacing(VARIANT v);
+    [propget, id(DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR)]
+    VARIANT borderColor();
 
-    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
-    VARIANT frameSpacing();
+    [propput, id(DISPID_IHTMLFRAMEELEMENT2_HEIGHT)]
+    void height(VARIANT v);
 
-    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
-    void marginWidth(VARIANT v);
+    [propget, id(DISPID_IHTMLFRAMEELEMENT2_HEIGHT)]
+    VARIANT height();
 
-    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
-    VARIANT marginWidth();
+    [propput, id(DISPID_IHTMLFRAMEELEMENT2_WIDTH)]
+    void width(VARIANT v);
 
-    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
-    void marginHeight(VARIANT v);
+    [propget, id(DISPID_IHTMLFRAMEELEMENT2_WIDTH)]
+    VARIANT width();
 
-    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
-    VARIANT marginHeight();
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT)]
+    IDispatch *contentDocument();
 
-    [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
-    void noResize(VARIANT_BOOL v);
+    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
+    void ie8_src(BSTR v);
 
-    [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
-    VARIANT_BOOL noResize();
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
+    BSTR ie8_src();
 
-    [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
-    void scrolling(BSTR v);
+    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
+    void ie8_longDesc(BSTR v);
 
-    [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
-    BSTR scrolling();
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
+    BSTR ie8_longDesc();
 
-    [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)]
-    IHTMLWindow2 *contentWindow();
+    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
+    void ie8_frameBorder(BSTR v);
 
-    [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
-    void onload(VARIANT v);
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
+    BSTR ie8_frameBorder();
+}
 
-    [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
-    VARIANT onload();
+/*****************************************************************************
+ *    IHTMLIFrameElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f315-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLIFrameElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
+    HRESULT vspace([in] LONG v);
 
-    [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
-    void allowTransparency(VARIANT_BOOL v);
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
+    HRESULT vspace([retval, out] LONG *p);
 
-    [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
-    VARIANT_BOOL allowTransparency();
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
+    HRESULT hspace([in] LONG v);
 
-    [propput, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable]
-    void longDesc(BSTR v);
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
+    HRESULT hspace([retval, out] LONG *p);
 
-    [propget, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable]
-    BSTR longDesc();
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
+    HRESULT align([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
+    HRESULT align([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    DispHTMLIFrame dispinterface
+ */
+[
+    hidden,
+    uuid(3050f51b-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLIFrame
+{
+properties:
+methods:
+    WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL;
 
     [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
     void vspace(LONG v);