From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmlobject.c | 11 +---------- dlls/mshtml/pluginhost.c | 26 ++++++++++++++++++++++++++ dlls/mshtml/pluginhost.h | 1 + dlls/mshtml/tests/documentmode.js | 2 +- 4 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/dlls/mshtml/htmlobject.c b/dlls/mshtml/htmlobject.c index 8d47dc9306d..b75dea24272 100644 --- a/dlls/mshtml/htmlobject.c +++ b/dlls/mshtml/htmlobject.c @@ -653,15 +653,6 @@ static void HTMLObjectElement_unlink(DispatchEx *dispex) unlink_ref(&This->nsobject); }
-static HRESULT HTMLObjectElement_dispex_get_name(DispatchEx *dispex, DISPID id, BSTR *name) -{ - HTMLObjectElement *This = impl_from_DispatchEx(dispex); - - FIXME("(%p)->(%lx %p)\n", This, id, name); - - return E_NOTIMPL; -} - static const NodeImplVtbl HTMLObjectElementImplVtbl = { .clsid = &CLSID_HTMLObjectElement, .cpc_entries = HTMLElement_cpc, @@ -678,7 +669,7 @@ static const event_target_vtbl_t HTMLObjectElement_event_target_vtbl = { .traverse = HTMLObjectElement_traverse, .unlink = HTMLObjectElement_unlink, .get_dispid = HTMLPluginContainer_get_dispid, - .get_name = HTMLObjectElement_dispex_get_name, + .get_prop_desc = HTMLPluginContainer_get_prop_desc, .invoke = HTMLPluginContainer_invoke }, HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, diff --git a/dlls/mshtml/pluginhost.c b/dlls/mshtml/pluginhost.c index bbf93c2b713..5479e25b0b8 100644 --- a/dlls/mshtml/pluginhost.c +++ b/dlls/mshtml/pluginhost.c @@ -813,6 +813,32 @@ HRESULT HTMLPluginContainer_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WOR lcid, flags, params, res, ei, NULL); }
+HRESULT HTMLPluginContainer_get_prop_desc(DispatchEx *dispex, DISPID id, struct property_info *desc) +{ + HTMLPluginContainer *plugin_container = impl_from_DispatchEx(dispex); + PluginHost *host; + + if(id >= MSHTML_DISPID_CUSTOM_MIN + plugin_container->props_len) + return DISP_E_MEMBERNOTFOUND; + + host = plugin_container->plugin_host; + if(!host || !host->disp) { + WARN("Called with no disp\n"); + return E_UNEXPECTED; + } + + if(!check_script_safety(host)) { + FIXME("Insecure object\n"); + return E_FAIL; + } + + desc->id = id; + desc->flags = 0; + desc->name = plugin_container->props[id - MSHTML_DISPID_CUSTOM_MIN]->name; + desc->func_iid = 0; + return S_OK; +} + typedef struct { DISPID id; IDispatch *disp; diff --git a/dlls/mshtml/pluginhost.h b/dlls/mshtml/pluginhost.h index afbbc40e657..96490f8652e 100644 --- a/dlls/mshtml/pluginhost.h +++ b/dlls/mshtml/pluginhost.h @@ -80,3 +80,4 @@ void HTMLPluginContainer_destructor(DispatchEx *dispex); HRESULT HTMLPluginContainer_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD grfdex, DISPID *dispid); HRESULT HTMLPluginContainer_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller); +HRESULT HTMLPluginContainer_get_prop_desc(DispatchEx *dispex, DISPID id, struct property_info *desc); diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index ec670ec0756..0a9be1204e4 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -181,7 +181,7 @@ sync_test("builtin_toString", function() { [ "nav", "" ], [ "noframes", "" ], [ "noscript", "" ], - [ "object", "Object", -1 ], + [ "object", "Object" ], [ "ol", "OList", -1 ], [ "optgroup", "OptGroup", -1 ], [ "option", "Option" ],