From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmldoc.c | 72 +++++++++++++++++++++++++------ dlls/mshtml/tests/documentmode.js | 10 ++--- 2 files changed, 63 insertions(+), 19 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index de9cc10c9bd..850f3490796 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -5667,7 +5667,6 @@ static const NodeImplVtbl HTMLDocumentFragmentImplVtbl = {
static const tid_t HTMLDocumentNode_iface_tids[] = { IHTMLDOMNode_tid, - IHTMLDocument4_tid, IHTMLDocument5_tid, IDocumentSelector_tid, 0 @@ -5675,24 +5674,67 @@ static const tid_t HTMLDocumentNode_iface_tids[] = {
static void HTMLDocumentNode_init_dispex_info(dispex_data_t *info, compat_mode_t mode) { - static const dispex_hook_t document2_hooks[] = { + static const dispex_hook_t document2_ie9_hooks[] = { + {DISPID_IHTMLDOCUMENT2_CLEAR}, + {DISPID_IHTMLDOCUMENT2_EXPANDO}, + {DISPID_IHTMLDOCUMENT2_TOSTRING}, {DISPID_IHTMLDOCUMENT2_URL, NULL, L"URL"}, {DISPID_IHTMLDOCUMENT2_LOCATION, HTMLDocumentNode_location_hook}, {DISPID_UNKNOWN} }; static const dispex_hook_t document2_ie11_hooks[] = { - {DISPID_IHTMLDOCUMENT2_URL, NULL, L"URL"}, - {DISPID_IHTMLDOCUMENT2_LOCATION, HTMLDocumentNode_location_hook}, - {DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET, NULL}, - {DISPID_IHTMLDOCUMENT2_FILESIZE, NULL}, - {DISPID_IHTMLDOCUMENT2_SELECTION, NULL}, + {DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET}, + {DISPID_IHTMLDOCUMENT2_FILESIZE}, + {DISPID_IHTMLDOCUMENT2_SELECTION}, + {DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE}, + {DISPID_IHTMLDOCUMENT2_ONROWEXIT}, + {DISPID_IHTMLDOCUMENT2_ONROWENTER}, + {DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE}, + {DISPID_IHTMLDOCUMENT2_ONERRORUPDATE}, + + /* IE10+ */ + {DISPID_IHTMLDOCUMENT2_EXPANDO}, + {DISPID_IHTMLDOCUMENT2_TOSTRING}, + + /* all modes */ + {DISPID_IHTMLDOCUMENT2_URL, NULL, L"URL"}, + {DISPID_IHTMLDOCUMENT2_LOCATION, HTMLDocumentNode_location_hook}, {DISPID_UNKNOWN} }; + const dispex_hook_t *const document2_ie10_hooks = document2_ie11_hooks + 8; + const dispex_hook_t *const document2_hooks = document2_ie10_hooks + 2; static const dispex_hook_t document3_ie11_hooks[] = { - {DISPID_IHTMLDOCUMENT3_ATTACHEVENT, NULL}, - {DISPID_IHTMLDOCUMENT3_DETACHEVENT, NULL}, + {DISPID_IHTMLDOCUMENT3_ATTACHEVENT}, + {DISPID_IHTMLDOCUMENT3_DETACHEVENT}, + {DISPID_IHTMLDOCUMENT3_ONROWSDELETE}, + {DISPID_IHTMLDOCUMENT3_ONROWSINSERTED}, + {DISPID_IHTMLDOCUMENT3_ONCELLCHANGE}, + {DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED}, + {DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE}, + {DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE}, + {DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE}, + {DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS}, + + /* IE9+ */ + {DISPID_IHTMLDOCUMENT3_RECALC}, {DISPID_UNKNOWN} }; + const dispex_hook_t *const document3_ie9_hooks = document3_ie11_hooks + 10; + static const dispex_hook_t document4_ie11_hooks[] = { + {DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT}, + {DISPID_IHTMLDOCUMENT4_FIREEVENT}, + {DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT}, + + /* IE10+ */ + {DISPID_IHTMLDOCUMENT4_NAMESPACES}, + + /* IE9+ */ + {DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL}, + {DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE}, + {DISPID_UNKNOWN} + }; + const dispex_hook_t *const document4_ie10_hooks = document4_ie11_hooks + 3; + const dispex_hook_t *const document4_ie9_hooks = document4_ie10_hooks + 1; static const dispex_hook_t document6_ie9_hooks[] = { {DISPID_IHTMLDOCUMENT6_ONSTORAGE}, {DISPID_UNKNOWN} @@ -5712,9 +5754,15 @@ static void HTMLDocumentNode_init_dispex_info(dispex_data_t *info, compat_mode_t dispex_info_add_interface(info, IHTMLDocument6_tid, NULL); }else { dispex_info_add_interface(info, IHTMLDocument6_tid, mode >= COMPAT_MODE_IE9 ? document6_ie9_hooks : NULL); - dispex_info_add_interface(info, IHTMLDocument3_tid, mode >= COMPAT_MODE_IE11 ? document3_ie11_hooks : NULL); - } - dispex_info_add_interface(info, IHTMLDocument2_tid, mode >= COMPAT_MODE_IE11 ? document2_ie11_hooks : document2_hooks); + dispex_info_add_interface(info, IHTMLDocument3_tid, mode >= COMPAT_MODE_IE11 ? document3_ie11_hooks : + mode >= COMPAT_MODE_IE9 ? document3_ie9_hooks : NULL); + } + dispex_info_add_interface(info, IHTMLDocument2_tid, mode >= COMPAT_MODE_IE11 ? document2_ie11_hooks : + mode >= COMPAT_MODE_IE10 ? document2_ie10_hooks : + mode >= COMPAT_MODE_IE9 ? document2_ie9_hooks : document2_hooks); + dispex_info_add_interface(info, IHTMLDocument4_tid, mode >= COMPAT_MODE_IE11 ? document4_ie11_hooks : + mode >= COMPAT_MODE_IE10 ? document4_ie10_hooks : + mode >= COMPAT_MODE_IE9 ? document4_ie9_hooks : NULL); }
dispex_static_data_t Document_dispex = { diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 363f01787f3..1de3dad4441 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3750,19 +3750,15 @@ sync_test("prototype props", function() { "scripts", "security", ["selection",9,10], "styleSheets", "swapNode", "title", "uniqueID", "updateSettings", ["visibilityState",10], "vlinkColor", "write", "writeln", "xmlEncoding", "xmlStandalone", "xmlVersion" ], [ - ["captureEvents",11], ["clear",9,9], "createDocumentFromUrl", ["createEventObject",11], "createNodeIterator", "createRange", - "createRenderStyle", "createTreeWalker", "expando", ["fireEvent",11], ["hidden",10], "msCapsLockWarningOff", + ["captureEvents",11], "createNodeIterator", "createRange", "createTreeWalker", ["hidden",10], "msCapsLockWarningOff", ["msCSSOMElementFloatMetrics",10], ["msElementsFromPoint",10], ["msElementsFromRect",10], ["msExitFullscreen",11], - ["msFullscreenElement",11], ["msFullscreenEnabled",11], ["msHidden",10], ["msVisibilityState",10], ["namespaces",10], - ["onafterupdate",11], ["onbeforeeditfocus",11], ["onbeforeupdate",11], ["oncellchange",11], ["oncontrolselect",11], - ["ondataavailable",11], ["ondatasetchanged",11], ["ondatasetcomplete",11], ["onerrorupdate",11], ["onmscontentzoom",10], + ["msFullscreenElement",11], ["msFullscreenEnabled",11], ["msHidden",10], ["msVisibilityState",10], ["onmscontentzoom",10], ["onmsfullscreenchange",11], ["onmsfullscreenerror",11], ["onmsgesturechange",10], ["onmsgesturedoubletap",10], ["onmsgestureend",10], ["onmsgesturehold",10], ["onmsgesturestart",10], ["onmsgesturetap",10], ["onmsinertiastart",10], ["onmsmanipulationstatechanged",10], ["onmspointercancel",10], ["onmspointerdown",10], ["onmspointerenter",11], ["onmspointerhover",10,10], ["onmspointerleave",11], ["onmspointermove",10], ["onmspointerout",10], ["onmspointerover",10], ["onmspointerup",10], ["onpointercancel",11], ["onpointerdown",11], ["onpointerenter",11], ["onpointerleave",11], ["onpointermove",11], ["onpointerout",11], ["onpointerover",11], ["onpointerup",11], - ["onpropertychange",11], ["onrowenter",11], ["onrowexit",11], ["onrowsdelete",11], ["onrowsinserted",11], "recalc", ["releaseEvents",11], - "rootElement", "toString", ["visibilityState",10] + ["releaseEvents",11], "rootElement", ["visibilityState",10] ]); check(DocumentFragment, [ ["attachEvent",9,10], ["detachEvent",9,10], "querySelector", "querySelectorAll", "removeNode", "replaceNode", "swapNode" ]); check(DocumentType, [ "entities", "internalSubset", "name", "notations", "publicId", "systemId" ]);