Changeset 29212 in webkit
- Timestamp:
- Jan 6, 2008 12:35:04 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r29211 r29212 34 34 * fast/dom/Range/range-clone-empty.html: Added. 35 35 * fast/dom/Range/resources/range-clone-empty.js: Added. 36 37 2008-01-06 Eric Seidel <eric@webkit.org> 38 39 Reviewed by darin. 40 41 Make attr selectors case-insensitive for certain HTML attributes 42 http://bugs.webkit.org/show_bug.cgi?id=15470 43 44 * fast/css/html-attr-case-sensitivity-expected.txt: Added. 45 * fast/css/html-attr-case-sensitivity.html: Added. 46 * fast/css/resources/html-attr-case-sensitivity.js: Added. 36 47 37 48 2008-01-06 Eric Seidel <eric@webkit.org> -
trunk/WebCore/ChangeLog
r29211 r29212 60 60 * html/CanvasPattern.cpp: 61 61 (WebCore::CanvasPattern::CanvasPattern): 62 63 2008-01-06 Eric Seidel <eric@webkit.org> 64 65 Reviewed by darin. 66 67 Make attr selectors case-insensitive for certain HTML attributes 68 http://bugs.webkit.org/show_bug.cgi?id=15470 69 70 Test: fast/css/html-attr-case-sensitivity.html 71 72 * css/CSSStyleSelector.cpp: 73 (WebCore::addLocalNameToSet): 74 (WebCore::createHtmlCaseInsensitiveAttributesSet): 75 (WebCore::htmlAttributeHasCaseInsensitiveValue): 76 (WebCore::CSSStyleSelector::checkOneSelector): 62 77 63 78 2008-01-06 Eric Seidel <eric@webkit.org> -
trunk/WebCore/css/CSSStyleSelector.cpp
r29191 r29212 1410 1410 } 1411 1411 1412 static void addLocalNameToSet(HashSet<AtomicStringImpl*>* set, const QualifiedName& qName) 1413 { 1414 set->add(qName.localName().impl()); 1415 } 1416 1417 static HashSet<AtomicStringImpl*>* createHtmlCaseInsensitiveAttributesSet() 1418 { 1419 // This is the list of attributes in HTML 4.01 with values marked as "[CI]" or case-insensitive 1420 // Mozilla treats all other values as case-sensitive, thus so do we. 1421 HashSet<AtomicStringImpl*>* attrSet = new HashSet<AtomicStringImpl*>; 1422 1423 addLocalNameToSet(attrSet, accept_charsetAttr); 1424 addLocalNameToSet(attrSet, acceptAttr); 1425 addLocalNameToSet(attrSet, alignAttr); 1426 addLocalNameToSet(attrSet, alinkAttr); 1427 addLocalNameToSet(attrSet, axisAttr); 1428 addLocalNameToSet(attrSet, bgcolorAttr); 1429 addLocalNameToSet(attrSet, charsetAttr); 1430 addLocalNameToSet(attrSet, checkedAttr); 1431 addLocalNameToSet(attrSet, clearAttr); 1432 addLocalNameToSet(attrSet, codetypeAttr); 1433 addLocalNameToSet(attrSet, colorAttr); 1434 addLocalNameToSet(attrSet, compactAttr); 1435 addLocalNameToSet(attrSet, declareAttr); 1436 addLocalNameToSet(attrSet, deferAttr); 1437 addLocalNameToSet(attrSet, dirAttr); 1438 addLocalNameToSet(attrSet, disabledAttr); 1439 addLocalNameToSet(attrSet, enctypeAttr); 1440 addLocalNameToSet(attrSet, faceAttr); 1441 addLocalNameToSet(attrSet, frameAttr); 1442 addLocalNameToSet(attrSet, hreflangAttr); 1443 addLocalNameToSet(attrSet, http_equivAttr); 1444 addLocalNameToSet(attrSet, langAttr); 1445 addLocalNameToSet(attrSet, languageAttr); 1446 addLocalNameToSet(attrSet, linkAttr); 1447 addLocalNameToSet(attrSet, mediaAttr); 1448 addLocalNameToSet(attrSet, methodAttr); 1449 addLocalNameToSet(attrSet, multipleAttr); 1450 addLocalNameToSet(attrSet, nohrefAttr); 1451 addLocalNameToSet(attrSet, noresizeAttr); 1452 addLocalNameToSet(attrSet, noshadeAttr); 1453 addLocalNameToSet(attrSet, nowrapAttr); 1454 addLocalNameToSet(attrSet, readonlyAttr); 1455 addLocalNameToSet(attrSet, relAttr); 1456 addLocalNameToSet(attrSet, revAttr); 1457 addLocalNameToSet(attrSet, rulesAttr); 1458 addLocalNameToSet(attrSet, scopeAttr); 1459 addLocalNameToSet(attrSet, scrollingAttr); 1460 addLocalNameToSet(attrSet, selectedAttr); 1461 addLocalNameToSet(attrSet, shapeAttr); 1462 addLocalNameToSet(attrSet, targetAttr); 1463 addLocalNameToSet(attrSet, textAttr); 1464 addLocalNameToSet(attrSet, typeAttr); 1465 addLocalNameToSet(attrSet, valignAttr); 1466 addLocalNameToSet(attrSet, valuetypeAttr); 1467 addLocalNameToSet(attrSet, vlinkAttr); 1468 1469 return attrSet; 1470 } 1471 1472 static bool htmlAttributeHasCaseInsensitiveValue(const QualifiedName& attr) 1473 { 1474 static HashSet<AtomicStringImpl*>* htmlCaseInsensitiveAttributesSet = createHtmlCaseInsensitiveAttributesSet(); 1475 bool isPossibleHTMLAttr = !attr.hasPrefix() && (attr.namespaceURI() == nullAtom); 1476 return isPossibleHTMLAttr && htmlCaseInsensitiveAttributesSet->contains(attr.localName().impl()); 1477 } 1478 1412 1479 bool CSSStyleSelector::checkOneSelector(CSSSelector* sel, Element* e, bool isAncestor, bool isSubSelector) 1413 1480 { … … 1447 1514 return false; // attribute is not set 1448 1515 1516 bool caseSensitive = isXMLDoc || !htmlAttributeHasCaseInsensitiveValue(sel->m_attr); 1517 1449 1518 switch (sel->m_match) { 1450 1519 case CSSSelector::Exact: 1451 if ( (isXMLDoc && sel->m_value != value) || (!isXMLDoc && !equalIgnoringCase(sel->m_value, value)))1520 if (caseSensitive ? sel->m_value != value : !equalIgnoringCase(sel->m_value, value)) 1452 1521 return false; 1453 1522 break; … … 1460 1529 int startSearchAt = 0; 1461 1530 while (true) { 1462 int foundPos = value.find(sel->m_value, startSearchAt, isXMLDoc);1531 int foundPos = value.find(sel->m_value, startSearchAt, caseSensitive); 1463 1532 if (foundPos == -1) 1464 1533 return false; … … 1475 1544 } 1476 1545 case CSSSelector::Contain: 1477 if (!value.contains(sel->m_value, isXMLDoc))1546 if (!value.contains(sel->m_value, caseSensitive)) 1478 1547 return false; 1479 1548 break; 1480 1549 case CSSSelector::Begin: 1481 if (!value.startsWith(sel->m_value, isXMLDoc))1550 if (!value.startsWith(sel->m_value, caseSensitive)) 1482 1551 return false; 1483 1552 break; 1484 1553 case CSSSelector::End: 1485 if (!value.endsWith(sel->m_value, isXMLDoc))1554 if (!value.endsWith(sel->m_value, caseSensitive)) 1486 1555 return false; 1487 1556 break; … … 1489 1558 if (value.length() < sel->m_value.length()) 1490 1559 return false; 1491 if (!value.startsWith(sel->m_value, isXMLDoc))1560 if (!value.startsWith(sel->m_value, caseSensitive)) 1492 1561 return false; 1493 1562 // It they start the same, check for exact match or following '-': … … 1501 1570 } 1502 1571 } 1503 if (sel->m_match == CSSSelector::PseudoClass) 1504 { 1572 if (sel->m_match == CSSSelector::PseudoClass) { 1505 1573 switch (sel->pseudoType()) { 1506 1574 // Pseudo classes:
Note: See TracChangeset
for help on using the changeset viewer.