Module: wine Branch: master Commit: 8b04ab10b9dc36fe5f8b1a74eb7866b465d5cd5d URL: http://source.winehq.org/git/wine.git/?a=commit;h=8b04ab10b9dc36fe5f8b1a74eb...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Oct 22 11:59:10 2012 +0200
mshtml: Fixed attribute object caching logic.
---
dlls/mshtml/htmlelem.c | 21 +++++++++++---------- dlls/mshtml/tests/jstest.html | 10 ++++++++++ 2 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index d11ebbc..753bbcb 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -2254,7 +2254,6 @@ static inline HRESULT get_domattr(HTMLAttributeCollection *This, DISPID id, LONG return E_UNEXPECTED; }
- pos++; hres = HTMLDOMAttribute_Create(This->elem, id, attr); if(FAILED(hres)) return hres; @@ -2596,20 +2595,22 @@ static HRESULT HTMLAttributeCollection_invoke(DispatchEx *dispex, DISPID id, LCI switch(flags) { case DISPATCH_PROPERTYGET: { HTMLDOMAttribute *iter; + DWORD pos;
- id = id-MSHTML_DISPID_CUSTOM_MIN+1; + pos = id-MSHTML_DISPID_CUSTOM_MIN;
LIST_FOR_EACH_ENTRY(iter, &This->attrs, HTMLDOMAttribute, entry) { - if(!(--id)) - break; + if(!pos) { + IHTMLDOMAttribute_AddRef(&iter->IHTMLDOMAttribute_iface); + V_VT(res) = VT_DISPATCH; + V_DISPATCH(res) = (IDispatch*)&iter->IHTMLDOMAttribute_iface; + return S_OK; + } + pos--; } - if(id) - return E_INVALIDARG;
- IHTMLDOMAttribute_AddRef(&iter->IHTMLDOMAttribute_iface); - V_VT(res) = VT_DISPATCH; - V_DISPATCH(res) = (IDispatch*)&iter->IHTMLDOMAttribute_iface; - return S_OK; + WARN("invalid arg\n"); + return E_INVALIDARG; }
default: diff --git a/dlls/mshtml/tests/jstest.html b/dlls/mshtml/tests/jstest.html index 70478e4..7fa9565 100644 --- a/dlls/mshtml/tests/jstest.html +++ b/dlls/mshtml/tests/jstest.html @@ -113,7 +113,16 @@ function test_setAttribute() {
input.setAttribute("checked", ""); ok(input.checked === false, "input.checked = " + input.checked); +} + +function test_attribute_collection() { + var div, attr; + + document.body.innerHTML = '<div id="divid" class="test"></div>'; + div = document.getElementById("divid");
+ attr = div.attributes["dir"]; + ok(attr === div.attributes["dir"], "attr !== div.attributes['dir']"); }
function test_getter_call() { @@ -166,6 +175,7 @@ function runTests() { test_remove_style_attribute(); test_getter_call(); test_setAttribute(); + test_attribute_collection(); test_override_functions();
var r = window.execScript("globalVar = true;");