From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlobject.c | 85 +++++++++++++++++++++++++++++++ dlls/mshtml/tests/documentmode.js | 5 +- 2 files changed, 87 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlobject.c b/dlls/mshtml/htmlobject.c index aedbdefb00b..5241305ae93 100644 --- a/dlls/mshtml/htmlobject.c +++ b/dlls/mshtml/htmlobject.c @@ -40,6 +40,7 @@ struct HTMLObjectElement {
IHTMLObjectElement IHTMLObjectElement_iface; IHTMLObjectElement2 IHTMLObjectElement2_iface; + IWineHTMLInputPrivate IWineHTMLInputPrivate_iface;
nsIDOMHTMLObjectElement *nsobject; }; @@ -580,6 +581,80 @@ ULONG WINAPI wrapper_Release(IUnknown *iface) return ref; }
+static inline HTMLObjectElement *impl_from_IWineHTMLInputPrivateVtbl(IWineHTMLInputPrivate *iface) +{ + return CONTAINING_RECORD(iface, HTMLObjectElement, IWineHTMLInputPrivate_iface); +} + +DISPEX_IDISPATCH_IMPL(HTMLObjectElement_input_private, IWineHTMLInputPrivate, + impl_from_IWineHTMLInputPrivateVtbl(iface)->plugin_container.element.node.event_target.dispex) + +static HRESULT WINAPI HTMLObjectElement_input_private_put_autofocus(IWineHTMLInputPrivate *iface, VARIANT_BOOL v) +{ + HTMLObjectElement *This = impl_from_IWineHTMLInputPrivateVtbl(iface); + WARN("(%p)->(%x)\n", This, v); + return E_UNEXPECTED; +} + +static HRESULT WINAPI HTMLObjectElement_input_private_get_autofocus(IWineHTMLInputPrivate *iface, VARIANT_BOOL *ret) +{ + HTMLObjectElement *This = impl_from_IWineHTMLInputPrivateVtbl(iface); + WARN("(%p)->(%p)\n", This, ret); + return E_UNEXPECTED; +} + +static HRESULT WINAPI HTMLObjectElement_input_private_get_validationMessage(IWineHTMLInputPrivate *iface, BSTR *ret) +{ + HTMLObjectElement *This = impl_from_IWineHTMLInputPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLObjectElement_input_private_get_validity(IWineHTMLInputPrivate *iface, IDispatch **ret) +{ + HTMLObjectElement *This = impl_from_IWineHTMLInputPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLObjectElement_input_private_get_willValidate(IWineHTMLInputPrivate *iface, VARIANT_BOOL *ret) +{ + HTMLObjectElement *This = impl_from_IWineHTMLInputPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLObjectElement_input_private_setCustomValidity(IWineHTMLInputPrivate *iface, VARIANT *message) +{ + HTMLObjectElement *This = impl_from_IWineHTMLInputPrivateVtbl(iface); + FIXME("(%p)->(%s)\n", This, debugstr_variant(message)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLObjectElement_input_private_checkValidity(IWineHTMLInputPrivate *iface, VARIANT_BOOL *ret) +{ + HTMLObjectElement *This = impl_from_IWineHTMLInputPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static const IWineHTMLInputPrivateVtbl WineHTMLInputPrivateVtbl = { + HTMLObjectElement_input_private_QueryInterface, + HTMLObjectElement_input_private_AddRef, + HTMLObjectElement_input_private_Release, + HTMLObjectElement_input_private_GetTypeInfoCount, + HTMLObjectElement_input_private_GetTypeInfo, + HTMLObjectElement_input_private_GetIDsOfNames, + HTMLObjectElement_input_private_Invoke, + HTMLObjectElement_input_private_put_autofocus, + HTMLObjectElement_input_private_get_autofocus, + HTMLObjectElement_input_private_get_validationMessage, + HTMLObjectElement_input_private_get_validity, + HTMLObjectElement_input_private_get_willValidate, + HTMLObjectElement_input_private_setCustomValidity, + HTMLObjectElement_input_private_checkValidity +}; + static inline HTMLObjectElement *impl_from_HTMLDOMNode(HTMLDOMNode *iface) { return CONTAINING_RECORD(iface, HTMLObjectElement, plugin_container.element.node); @@ -606,6 +681,8 @@ static void *HTMLObjectElement_query_interface(DispatchEx *dispex, REFIID riid) return &This->IHTMLObjectElement_iface; if(IsEqualGUID(&IID_IHTMLObjectElement2, riid)) return &This->IHTMLObjectElement2_iface; + if(IsEqualGUID(&IID_IWineHTMLInputPrivate, riid)) + return &This->IWineHTMLInputPrivate_iface; if(IsEqualGUID(&IID_HTMLPluginContainer, riid)) { /* Special pseudo-interface returning HTMLPluginContainer struct. */ return &This->plugin_container; @@ -671,8 +748,15 @@ static void HTMLObjectElement_init_dispex_info(dispex_data_t *info, compat_mode_ {DISPID_IHTMLOBJECTELEMENT_ALTHTML, .noattr = TRUE}, {DISPID_UNKNOWN} }; + static const dispex_hook_t private_hooks[] = { + {DISPID_IWINEHTMLINPUTPRIVATE_AUTOFOCUS}, + {DISPID_UNKNOWN} + }; + dispex_info_add_interface(info, IHTMLObjectElement2_tid, NULL); dispex_info_add_interface(info, IHTMLObjectElement_tid, hooks); + if(mode >= COMPAT_MODE_IE10) + dispex_info_add_interface(info, IWineHTMLInputPrivate_tid, private_hooks);
HTMLElement_init_dispex_info(info, mode); } @@ -711,6 +795,7 @@ HRESULT HTMLObjectElement_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, H
ret->IHTMLObjectElement_iface.lpVtbl = &HTMLObjectElementVtbl; ret->IHTMLObjectElement2_iface.lpVtbl = &HTMLObjectElement2Vtbl; + ret->IWineHTMLInputPrivate_iface.lpVtbl = &WineHTMLInputPrivateVtbl; ret->plugin_container.element.node.vtbl = &HTMLObjectElementImplVtbl;
HTMLElement_Init(&ret->plugin_container.element, doc, nselem, &HTMLObjectElement_dispex); diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 46c2aa8a6eb..388842aa2cc 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -4370,9 +4370,8 @@ sync_test("prototype props", function() { ["msPlayToPreferredSourceUri",11], ["msPlayToPrimary",11], "name", "namedRecordset", "object", ["readyState",11], "recordset", ["setCustomValidity",10], "standby", "type", "useMap", ["validationMessage",10], ["validity",10], "vspace", "width", ["willValidate",10] ], [ - "alt", "archive", "border", ["checkValidity",10], "contentDocument", ["dataFld",9,10], ["dataFormatAs",9,10], ["dataSrc",9,10], "declare", "getSVGDocument", - ["msPlayToDisabled",11], ["msPlayToPreferredSourceUri",11], ["msPlayToPrimary",11], ["onreadystatechange",11], ["readyState",11], ["setCustomValidity",10], - "standby", "useMap", ["validationMessage",10], ["validity",10], ["willValidate",10] + "alt", "archive", "border", "contentDocument", ["dataFld",9,10], ["dataFormatAs",9,10], ["dataSrc",9,10], "declare", "getSVGDocument", ["msPlayToDisabled",11], + ["msPlayToPreferredSourceUri",11], ["msPlayToPrimary",11], ["onreadystatechange",11], ["readyState",11], "standby", "useMap" ]); check(HTMLOptionElement, [ ["dataFld",9,10], ["dataFormatAs",9,10], ["dataSrc",9,10], "defaultSelected", "form", "index", "label", "selected", "text", "value" ], [ ["dataFld",9,10], ["dataFormatAs",9,10], ["dataSrc",9,10], "label" ]);