SVN commit 1215545 by orlovich: Merged revision:r1215544 | orlovich | 2011-01-18 19:59:02 -0500 (Tue, 18 Jan 2011) | 18 lines Various fixes for the new twitter website: 1) The alleged DOM 0 DOMNode::item doesn't exist in Gecko and WebCore at least, and it confuses the script loader (as we have NodeList-like .item, but not an index [[Get]]). Remove it, but add one to HTMLSelectElement as that's legit HTML5. 2) When document.domain is set to the present domain, we still want to call setDomainFromDOM(), as it would set the 'script-set domain' bit moving the origin into that namespace --- otherwise it will be inaccessible to other things that opted in. 3) XMLHttpRequest should complete relative URLs in its own context, not the dynamic one. BUG: 261041 M +0 -6 ecma/kjs_dom.cpp M +1 -1 ecma/kjs_dom.h M +5 -0 ecma/kjs_html.cpp M +1 -1 ecma/kjs_html.h M +1 -4 ecma/xmlhttprequest.cpp M +7 -2 xml/dom_docimpl.cpp --- branches/KDE/4.6/kdelibs/khtml/ecma/kjs_dom.cpp #1215544:1215545 @@ -107,8 +107,6 @@ # IE extensions contains DOMNode::Contains DontDelete|Function 1 insertAdjacentHTML DOMNode::InsertAdjacentHTML DontDelete|Function 2 -# "DOM level 0" (from Gecko DOM reference; also in WinIE) - item DOMNode::Item DontDelete|Function 1 @end */ KJS_IMPLEMENT_PROTOFUNC(DOMNodeProtoFunc) @@ -693,10 +691,6 @@ return jsUndefined(); } - case DOMNode::Item: { - SharedPtr childNodes = node.childNodes(); - return getDOMNode(exec, childNodes->item(static_cast(args[0]->toNumber(exec)))); - } case DOMNode::CompareDocumentPosition: { DOM::NodeImpl* other = toNode(args[0]); if (!other) --- branches/KDE/4.6/kdelibs/khtml/ecma/kjs_dom.h #1215544:1215545 @@ -56,7 +56,7 @@ virtual void pushEventHandlerScope(ExecState *exec, ScopeChain &scope) const; enum { NodeName, NodeValue, NodeType, ParentNode, ParentElement, - ChildNodes, FirstChild, LastChild, PreviousSibling, NextSibling, Item, + ChildNodes, FirstChild, LastChild, PreviousSibling, NextSibling, Attributes, NamespaceURI, Prefix, LocalName, OwnerDocument, InsertBefore, ReplaceChild, RemoveChild, AppendChild, HasAttributes, HasChildNodes, CloneNode, Normalize, IsSupported, AddEventListener, RemoveEventListener, --- branches/KDE/4.6/kdelibs/khtml/ecma/kjs_html.cpp #1215544:1215545 @@ -808,6 +808,7 @@ @end @begin HTMLSelectElementProtoTable 4 add KJS::HTMLElement::SelectAdd DontDelete|Function 2 + item KJS::HTMLElement::SelectItem DontDelete|Function 1 remove KJS::HTMLElement::SelectRemove DontDelete|Function 1 @end @begin HTMLOptGroupElementTable 2 @@ -2206,6 +2207,10 @@ select.add(toHTMLElement(args[0]),toHTMLElement(args[1]),exception); return jsUndefined(); } + else if (id == KJS::HTMLElement::SelectItem) { + SharedPtr opts = select.options(); + return getDOMNode(exec, opts->item(static_cast(args[0]->toNumber(exec)))); + } else if (id == KJS::HTMLElement::SelectRemove) { // Apparently this takes both elements and indices (ebay.fr) DOM::NodeImpl* node = toNode(args[0]); --- branches/KDE/4.6/kdelibs/khtml/ecma/kjs_html.h #1215544:1215545 @@ -100,7 +100,7 @@ FormReset, FormTarget, FormName, FormMethod, FormSubmit, SelectAdd, SelectTabIndex, SelectValue, SelectSelectedIndex, SelectLength, SelectRemove, SelectForm, SelectType, SelectOptions, - SelectDisabled, SelectMultiple, SelectName, SelectSize, + SelectDisabled, SelectMultiple, SelectName, SelectSize, SelectItem, OptGroupDisabled, OptGroupLabel, OptionIndex, OptionSelected, OptionForm, OptionText, OptionDefaultSelected, OptionDisabled, OptionLabel, OptionValue, InputReadOnly, InputAccept, --- branches/KDE/4.6/kdelibs/khtml/ecma/xmlhttprequest.cpp #1215544:1215545 @@ -917,10 +917,7 @@ return throwError(exec, SyntaxError, "Not enough arguments"); QString method = args[0]->toString(exec).qstring(); - KHTMLPart *part = qobject_cast(Window::retrieveActive(exec)->part()); - if (!part) - return jsUndefined(); - KUrl url = KUrl(part->document().completeURL(args[1]->toString(exec).qstring()).string()); + KUrl url = KUrl(request->doc->completeURL(args[1]->toString(exec).qstring())); bool async = true; if (args.size() >= 3) { --- branches/KDE/4.6/kdelibs/khtml/xml/dom_docimpl.cpp #1215544:1215545 @@ -2870,8 +2870,7 @@ // the new domain is a suffix of the old domain. int oldLength = oldDomain.length(); int newLength = newDomain.length(); - if ( newLength < oldLength ) // e.g. newDomain=kde.org (7) and m_domain=www.kde.org (11) - { + if ( newLength < oldLength ) { // e.g. newDomain=kde.org (7) and m_domain=www.kde.org (11) DOMString test = oldDomain.copy(); DOMString reference = newDomain.lower(); if ( test[oldLength - newLength - 1] == '.' ) // Check that it's a subdomain, not e.g. "de.org" @@ -2880,6 +2879,12 @@ if ( test == reference ) // and we check that it's the same thing as newDomain m_origin->setDomainFromDOM( reference.string() ); } + } else if ( oldLength == newLength ) { + // It's OK and not a no-op to set the domain to the present one: + // we want to set the 'set from DOM' bit in that case + DOMString reference = newDomain.lower(); + if ( oldDomain.lower() == reference ) + m_origin->setDomainFromDOM( reference.string() ); } }