Changeset 35406 in webkit
- Timestamp:
- Jul 27, 2008 3:03:41 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r35403 r35406 1 2008-07-27 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Oliver Hunt. 4 5 Tests for https://bugs.webkit.org/show_bug.cgi?id=20176 6 querySelectorAll id optimization no longer working 7 8 * fast/dom/SelectorAPI/caseID-almost-strict-expected.txt: Added. 9 * fast/dom/SelectorAPI/caseID-almost-strict.html: Added. 10 * fast/dom/SelectorAPI/caseID-expected.txt: Added. 11 * fast/dom/SelectorAPI/caseID-strict-expected.txt: Added. 12 * fast/dom/SelectorAPI/caseID-strict.html: Added. 13 * fast/dom/SelectorAPI/caseID.html: Added. 14 1 15 2008-07-27 Anatoli Papirovski <apapirovski@mac.com> 2 16 -
trunk/WebCore/ChangeLog
r35403 r35406 1 2008-07-27 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Oliver Hunt. 4 5 Fix for https://bugs.webkit.org/show_bug.cgi?id=20176 6 querySelectorAll id optimization no longer working 7 8 Turn the querySelector/querySelectorAll id optimization back on 9 for only strict and almost strict mode. In quirks mode, the optimiztion 10 won't work as the id match is not case sensitive. 11 12 Tests: fast/dom/SelectorAPI/caseID-almost-strict.html 13 fast/dom/SelectorAPI/caseID-strict.html 14 fast/dom/SelectorAPI/caseID.html 15 16 * dom/Node.cpp: 17 (WebCore::Node::querySelector): 18 (WebCore::Node::querySelectorAll): 19 * dom/SelectorNodeList.cpp: 20 (WebCore::createSelectorNodeList): 21 * dom/SelectorNodeList.h: 22 1 23 2008-07-27 Anatoli Papirovski <apapirovski@mac.com> 2 24 -
trunk/WebCore/dom/Node.cpp
r35375 r35406 1330 1330 return 0; 1331 1331 } 1332 CSSParser p(!document()->inCompatMode()); 1332 bool strictParsing = !document()->inCompatMode(); 1333 CSSParser p(strictParsing); 1333 1334 if (resolver) { 1334 1335 String defaultNamespace = resolver->lookupNamespaceURI(exec, String()); 1335 1336 if (exec && exec->hadException()) 1336 return false;1337 return 0; 1337 1338 if (!defaultNamespace.isEmpty()) 1338 1339 p.m_defaultNamespace = defaultNamespace; … … 1357 1358 } 1358 1359 1359 if (inDocument() && !querySelector->next() && querySelector->m_match == CSSSelector::Id 1360 && !querySelector->hasTag() && !querySelector->hasAttribute() 1361 && !querySelector->m_tagHistory && !querySelector->m_simpleSelector) { 1360 // FIXME: we could also optimize for the the [id="foo"] case 1361 if (strictParsing && inDocument() && !querySelector->next() && querySelector->m_match == CSSSelector::Id 1362 && !querySelector->hasTag() && !querySelector->m_tagHistory && !querySelector->m_simpleSelector) { 1363 ASSERT(querySelector->m_attr == idAttr); 1362 1364 Element* element = document()->getElementById(querySelector->m_value); 1363 1365 if (element && (isDocumentNode() || element->isDescendantOf(this))) … … 1366 1368 } 1367 1369 1368 CSSStyleSelector::SelectorChecker selectorChecker(document(), !document()->inCompatMode());1370 CSSStyleSelector::SelectorChecker selectorChecker(document(), strictParsing); 1369 1371 1370 1372 // FIXME: We can speed this up by implementing caching similar to the one use by getElementById … … 1388 1390 return 0; 1389 1391 } 1390 CSSParser p(!document()->inCompatMode()); 1392 bool strictParsing = !document()->inCompatMode(); 1393 CSSParser p(strictParsing); 1391 1394 if (resolver) { 1392 1395 String defaultNamespace = resolver->lookupNamespaceURI(exec, String()); -
trunk/WebCore/dom/SelectorNodeList.cpp
r35145 r35406 34 34 #include "Document.h" 35 35 #include "Element.h" 36 #include "HTMLNames.h" 36 37 37 38 namespace WebCore { 38 39 39 PassRefPtr<StaticNodeList> createSelectorNodeList(PassRefPtr<Node> rootNode, CSSSelector* querySelector) 40 using namespace HTMLNames; 41 42 PassRefPtr<StaticNodeList> createSelectorNodeList(Node* rootNode, CSSSelector* querySelector) 40 43 { 41 44 Vector<RefPtr<Node> > nodes; 42 45 Document* document = rootNode->document(); 43 46 AtomicString selectorValue = querySelector->m_value; 47 bool strictParsing = !document->inCompatMode(); 44 48 45 if (rootNode->inDocument() && !querySelector->next() && querySelector->m_match == CSSSelector::Id 46 && !querySelector->hasTag() && !querySelector->hasAttribute() 47 && !querySelector->m_tagHistory && !querySelector->m_simpleSelector 49 if (strictParsing && rootNode->inDocument() && !querySelector->next() && querySelector->m_match == CSSSelector::Id 50 && !querySelector->hasTag() && !querySelector->m_tagHistory && !querySelector->m_simpleSelector 48 51 && !document->containsMultipleElementsWithId(selectorValue)) { 52 ASSERT(querySelector->m_attr == idAttr); 49 53 Element* element = document->getElementById(selectorValue); 50 if (element && (rootNode->isDocumentNode() || element->isDescendantOf(rootNode .get())))54 if (element && (rootNode->isDocumentNode() || element->isDescendantOf(rootNode))) 51 55 nodes.append(element); 52 56 } else { 53 CSSStyleSelector::SelectorChecker selectorChecker(document, !document->inCompatMode()); 54 55 for (Node* n = rootNode->firstChild(); n; n = n->traverseNextNode(rootNode.get())) { 57 CSSStyleSelector::SelectorChecker selectorChecker(document, strictParsing); 58 for (Node* n = rootNode->firstChild(); n; n = n->traverseNextNode(rootNode)) { 56 59 if (n->isElementNode()) { 57 60 Element* element = static_cast<Element*>(n); -
trunk/WebCore/dom/SelectorNodeList.h
r34432 r35406 36 36 class CSSSelector; 37 37 38 PassRefPtr<StaticNodeList> createSelectorNodeList( PassRefPtr<Node>rootNode, CSSSelector*);38 PassRefPtr<StaticNodeList> createSelectorNodeList(Node* rootNode, CSSSelector*); 39 39 40 40 } // namespace WebCore
Note: See TracChangeset
for help on using the changeset viewer.