| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011, 2013 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011, 2013 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2014 Samsung Electronics. All rights reserved. | 3 * Copyright (C) 2014 Samsung Electronics. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 void SelectorDataList::findTraverseRootsAndExecute(ContainerNode& rootNode, type
name SelectorQueryTrait::OutputType& output) const | 252 void SelectorDataList::findTraverseRootsAndExecute(ContainerNode& rootNode, type
name SelectorQueryTrait::OutputType& output) const |
| 253 { | 253 { |
| 254 // We need to return the matches in document order. To use id lookup while t
here is possiblity of multiple matches | 254 // We need to return the matches in document order. To use id lookup while t
here is possiblity of multiple matches |
| 255 // we would need to sort the results. For now, just traverse the document in
that case. | 255 // we would need to sort the results. For now, just traverse the document in
that case. |
| 256 DCHECK_EQ(m_selectors.size(), 1u); | 256 DCHECK_EQ(m_selectors.size(), 1u); |
| 257 | 257 |
| 258 bool isRightmostSelector = true; | 258 bool isRightmostSelector = true; |
| 259 bool startFromParent = false; | 259 bool startFromParent = false; |
| 260 | 260 |
| 261 for (const CSSSelector* selector = m_selectors[0]; selector; selector = sele
ctor->tagHistory()) { | 261 for (const CSSSelector* selector = m_selectors[0]; selector; selector = sele
ctor->tagHistory()) { |
| 262 if (selector->match() == CSSSelector::Id && !rootNode.treeScope().contai
nsMultipleElementsWithId(selector->value())) { | 262 if (selector->match() == CSSSelector::Id && rootNode.isInTreeScope() &&
!rootNode.containingTreeScope().containsMultipleElementsWithId(selector->value()
)) { |
| 263 Element* element = rootNode.treeScope().getElementById(selector->val
ue()); | 263 Element* element = rootNode.containingTreeScope().getElementById(sel
ector->value()); |
| 264 ContainerNode* adjustedNode = &rootNode; | 264 ContainerNode* adjustedNode = &rootNode; |
| 265 if (element && (isTreeScopeRoot(rootNode) || element->isDescendantOf
(&rootNode))) | 265 if (element && (isTreeScopeRoot(rootNode) || element->isDescendantOf
(&rootNode))) |
| 266 adjustedNode = element; | 266 adjustedNode = element; |
| 267 else if (!element || isRightmostSelector) | 267 else if (!element || isRightmostSelector) |
| 268 adjustedNode = nullptr; | 268 adjustedNode = nullptr; |
| 269 if (isRightmostSelector) { | 269 if (isRightmostSelector) { |
| 270 executeForTraverseRoot<SelectorQueryTrait>(*m_selectors[0], adju
stedNode, MatchesTraverseRoots, rootNode, output); | 270 executeForTraverseRoot<SelectorQueryTrait>(*m_selectors[0], adju
stedNode, MatchesTraverseRoots, rootNode, output); |
| 271 return; | 271 return; |
| 272 } | 272 } |
| 273 | 273 |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 575 | 575 |
| 576 return m_entries.add(selectors, SelectorQuery::adopt(std::move(selectorList)
)).storedValue->value.get(); | 576 return m_entries.add(selectors, SelectorQuery::adopt(std::move(selectorList)
)).storedValue->value.get(); |
| 577 } | 577 } |
| 578 | 578 |
| 579 void SelectorQueryCache::invalidate() | 579 void SelectorQueryCache::invalidate() |
| 580 { | 580 { |
| 581 m_entries.clear(); | 581 m_entries.clear(); |
| 582 } | 582 } |
| 583 | 583 |
| 584 } // namespace blink | 584 } // namespace blink |
| OLD | NEW |