OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r
ights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r
ights reserved. |
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. |
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 | 682 |
683 DOMImplementation& Document::implementation() | 683 DOMImplementation& Document::implementation() |
684 { | 684 { |
685 if (!m_implementation) | 685 if (!m_implementation) |
686 m_implementation = DOMImplementation::create(*this); | 686 m_implementation = DOMImplementation::create(*this); |
687 return *m_implementation; | 687 return *m_implementation; |
688 } | 688 } |
689 | 689 |
690 bool Document::hasManifest() const | 690 bool Document::hasManifest() const |
691 { | 691 { |
692 return documentElement() && documentElement()->hasTagName(htmlTag) && docume
ntElement()->hasAttribute(manifestAttr); | 692 return isHTMLHtmlElement(documentElement()) && documentElement()->hasAttribu
te(manifestAttr); |
693 } | 693 } |
694 | 694 |
695 Location* Document::location() const | 695 Location* Document::location() const |
696 { | 696 { |
697 if (!frame()) | 697 if (!frame()) |
698 return 0; | 698 return 0; |
699 | 699 |
700 return &domWindow()->location(); | 700 return &domWindow()->location(); |
701 } | 701 } |
702 | 702 |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
928 exceptionState.throwDOMException(NamespaceError, "The imported node
has an invalid namespace."); | 928 exceptionState.throwDOMException(NamespaceError, "The imported node
has an invalid namespace."); |
929 return nullptr; | 929 return nullptr; |
930 } | 930 } |
931 RefPtr<Element> newElement = createElement(oldElement->tagQName(), false
); | 931 RefPtr<Element> newElement = createElement(oldElement->tagQName(), false
); |
932 | 932 |
933 newElement->cloneDataFromElement(*oldElement); | 933 newElement->cloneDataFromElement(*oldElement); |
934 | 934 |
935 if (deep) { | 935 if (deep) { |
936 if (!importContainerNodeChildren(oldElement, newElement, exceptionSt
ate)) | 936 if (!importContainerNodeChildren(oldElement, newElement, exceptionSt
ate)) |
937 return nullptr; | 937 return nullptr; |
938 if (oldElement->hasTagName(templateTag) | 938 if (isHTMLTemplateElement(*oldElement) |
939 && !importContainerNodeChildren(toHTMLTemplateElement(oldElement
)->content(), toHTMLTemplateElement(newElement)->content(), exceptionState)) | 939 && !importContainerNodeChildren(toHTMLTemplateElement(oldElement
)->content(), toHTMLTemplateElement(newElement)->content(), exceptionState)) |
940 return nullptr; | 940 return nullptr; |
941 } | 941 } |
942 | 942 |
943 return newElement.release(); | 943 return newElement.release(); |
944 } | 944 } |
945 case ATTRIBUTE_NODE: | 945 case ATTRIBUTE_NODE: |
946 return Attr::create(*this, QualifiedName(nullAtom, AtomicString(toAttr(i
mportedNode)->name()), nullAtom), toAttr(importedNode)->value()); | 946 return Attr::create(*this, QualifiedName(nullAtom, AtomicString(toAttr(i
mportedNode)->name()), nullAtom), toAttr(importedNode)->value()); |
947 case DOCUMENT_FRAGMENT_NODE: { | 947 case DOCUMENT_FRAGMENT_NODE: { |
948 if (importedNode->isShadowRoot()) { | 948 if (importedNode->isShadowRoot()) { |
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1328 m_titleSetExplicitly = true; | 1328 m_titleSetExplicitly = true; |
1329 if (!isHTMLDocument() && !isXHTMLDocument()) | 1329 if (!isHTMLDocument() && !isXHTMLDocument()) |
1330 m_titleElement = nullptr; | 1330 m_titleElement = nullptr; |
1331 else if (!m_titleElement) { | 1331 else if (!m_titleElement) { |
1332 if (HTMLElement* headElement = head()) { | 1332 if (HTMLElement* headElement = head()) { |
1333 m_titleElement = HTMLTitleElement::create(*this); | 1333 m_titleElement = HTMLTitleElement::create(*this); |
1334 headElement->appendChild(m_titleElement); | 1334 headElement->appendChild(m_titleElement); |
1335 } | 1335 } |
1336 } | 1336 } |
1337 | 1337 |
1338 if (m_titleElement && m_titleElement->hasTagName(titleTag)) | 1338 if (isHTMLTitleElement(m_titleElement)) |
1339 toHTMLTitleElement(m_titleElement)->setText(title); | 1339 toHTMLTitleElement(m_titleElement)->setText(title); |
1340 else | 1340 else |
1341 updateTitle(title); | 1341 updateTitle(title); |
1342 } | 1342 } |
1343 | 1343 |
1344 void Document::setTitleElement(const String& title, Element* titleElement) | 1344 void Document::setTitleElement(const String& title, Element* titleElement) |
1345 { | 1345 { |
1346 if (titleElement != m_titleElement) { | 1346 if (titleElement != m_titleElement) { |
1347 if (m_titleElement || m_titleSetExplicitly) | 1347 if (m_titleElement || m_titleSetExplicitly) |
1348 // Only allow the first title element to change the title -- others
have no effect. | 1348 // Only allow the first title element to change the title -- others
have no effect. |
(...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2229 return HTMLDocumentParser::create(toHTMLDocument(this), reportErrors); | 2229 return HTMLDocumentParser::create(toHTMLDocument(this), reportErrors); |
2230 } | 2230 } |
2231 // FIXME: this should probably pass the frame instead | 2231 // FIXME: this should probably pass the frame instead |
2232 return XMLDocumentParser::create(this, view()); | 2232 return XMLDocumentParser::create(this, view()); |
2233 } | 2233 } |
2234 | 2234 |
2235 bool Document::isFrameSet() const | 2235 bool Document::isFrameSet() const |
2236 { | 2236 { |
2237 if (!isHTMLDocument()) | 2237 if (!isHTMLDocument()) |
2238 return false; | 2238 return false; |
2239 HTMLElement* bodyElement = body(); | 2239 return isHTMLFrameSetElement(body()); |
2240 return bodyElement && bodyElement->hasTagName(framesetTag); | |
2241 } | 2240 } |
2242 | 2241 |
2243 ScriptableDocumentParser* Document::scriptableDocumentParser() const | 2242 ScriptableDocumentParser* Document::scriptableDocumentParser() const |
2244 { | 2243 { |
2245 return parser() ? parser()->asScriptableDocumentParser() : 0; | 2244 return parser() ? parser()->asScriptableDocumentParser() : 0; |
2246 } | 2245 } |
2247 | 2246 |
2248 void Document::open(Document* ownerDocument) | 2247 void Document::open(Document* ownerDocument) |
2249 { | 2248 { |
2250 if (ownerDocument) { | 2249 if (ownerDocument) { |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2315 setReadyState(Loading); | 2314 setReadyState(Loading); |
2316 | 2315 |
2317 return m_parser; | 2316 return m_parser; |
2318 } | 2317 } |
2319 | 2318 |
2320 HTMLElement* Document::body() const | 2319 HTMLElement* Document::body() const |
2321 { | 2320 { |
2322 if (!documentElement()) | 2321 if (!documentElement()) |
2323 return 0; | 2322 return 0; |
2324 | 2323 |
2325 for (Element* child = ElementTraversal::firstWithin(*documentElement()); chi
ld; child = ElementTraversal::nextSibling(*child)) { | 2324 for (HTMLElement* child = Traversal<HTMLElement>::firstWithin(*documentEleme
nt()); child; child = Traversal<HTMLElement>::nextSibling(*child)) { |
2326 if (child->hasTagName(framesetTag) || child->hasTagName(bodyTag)) | 2325 if (isHTMLFrameSetElement(*child) || isHTMLBodyElement(*child)) |
2327 return toHTMLElement(child); | 2326 return child; |
2328 } | 2327 } |
2329 | 2328 |
2330 return 0; | 2329 return 0; |
2331 } | 2330 } |
2332 | 2331 |
2333 void Document::setBody(PassRefPtr<HTMLElement> prpNewBody, ExceptionState& excep
tionState) | 2332 void Document::setBody(PassRefPtr<HTMLElement> prpNewBody, ExceptionState& excep
tionState) |
2334 { | 2333 { |
2335 RefPtr<HTMLElement> newBody = prpNewBody; | 2334 RefPtr<HTMLElement> newBody = prpNewBody; |
2336 | 2335 |
2337 if (!newBody) { | 2336 if (!newBody) { |
2338 exceptionState.throwDOMException(HierarchyRequestError, ExceptionMessage
s::argumentNullOrIncorrectType(1, "HTMLElement")); | 2337 exceptionState.throwDOMException(HierarchyRequestError, ExceptionMessage
s::argumentNullOrIncorrectType(1, "HTMLElement")); |
2339 return; | 2338 return; |
2340 } | 2339 } |
2341 if (!documentElement()) { | 2340 if (!documentElement()) { |
2342 exceptionState.throwDOMException(HierarchyRequestError, "No document ele
ment exists."); | 2341 exceptionState.throwDOMException(HierarchyRequestError, "No document ele
ment exists."); |
2343 return; | 2342 return; |
2344 } | 2343 } |
2345 | 2344 |
2346 if (!newBody->hasTagName(bodyTag) && !newBody->hasTagName(framesetTag)) { | 2345 if (!isHTMLBodyElement(*newBody) && !isHTMLFrameSetElement(*newBody)) { |
2347 exceptionState.throwDOMException(HierarchyRequestError, "The new body el
ement is of type '" + newBody->tagName() + "'. It must be either a 'BODY' or 'FR
AMESET' element."); | 2346 exceptionState.throwDOMException(HierarchyRequestError, "The new body el
ement is of type '" + newBody->tagName() + "'. It must be either a 'BODY' or 'FR
AMESET' element."); |
2348 return; | 2347 return; |
2349 } | 2348 } |
2350 | 2349 |
2351 HTMLElement* oldBody = body(); | 2350 HTMLElement* oldBody = body(); |
2352 if (oldBody == newBody) | 2351 if (oldBody == newBody) |
2353 return; | 2352 return; |
2354 | 2353 |
2355 if (oldBody) | 2354 if (oldBody) |
2356 documentElement()->replaceChild(newBody.release(), oldBody, exceptionSta
te); | 2355 documentElement()->replaceChild(newBody.release(), oldBody, exceptionSta
te); |
(...skipping 20 matching lines...) Expand all Loading... |
2377 // Otherwise it's the root element's properties that are to be propagated. | 2376 // Otherwise it's the root element's properties that are to be propagated. |
2378 Element* rootElement = documentElement(); | 2377 Element* rootElement = documentElement(); |
2379 Element* bodyElement = body(); | 2378 Element* bodyElement = body(); |
2380 if (!rootElement) | 2379 if (!rootElement) |
2381 return 0; | 2380 return 0; |
2382 if (!rootStyle) { | 2381 if (!rootStyle) { |
2383 rootStyle = rootElement->renderStyle(); | 2382 rootStyle = rootElement->renderStyle(); |
2384 if (!rootStyle) | 2383 if (!rootStyle) |
2385 return 0; | 2384 return 0; |
2386 } | 2385 } |
2387 if (bodyElement && rootStyle->isOverflowVisible() && rootElement->hasTagName
(htmlTag)) | 2386 if (bodyElement && rootStyle->isOverflowVisible() && isHTMLHtmlElement(*root
Element)) |
2388 return bodyElement; | 2387 return bodyElement; |
2389 return rootElement; | 2388 return rootElement; |
2390 } | 2389 } |
2391 | 2390 |
2392 void Document::close() | 2391 void Document::close() |
2393 { | 2392 { |
2394 // FIXME: We should follow the specification more closely: | 2393 // FIXME: We should follow the specification more closely: |
2395 // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-cl
ose | 2394 // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-cl
ose |
2396 | 2395 |
2397 if (!scriptableDocumentParser() || !scriptableDocumentParser()->wasCreatedBy
Script() || !scriptableDocumentParser()->isParsing()) | 2396 if (!scriptableDocumentParser() || !scriptableDocumentParser()->wasCreatedBy
Script() || !scriptableDocumentParser()->isParsing()) |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2551 } | 2550 } |
2552 | 2551 |
2553 void Document::dispatchUnloadEvents() | 2552 void Document::dispatchUnloadEvents() |
2554 { | 2553 { |
2555 RefPtr<Document> protect(this); | 2554 RefPtr<Document> protect(this); |
2556 if (m_parser) | 2555 if (m_parser) |
2557 m_parser->stopParsing(); | 2556 m_parser->stopParsing(); |
2558 | 2557 |
2559 if (m_loadEventProgress >= LoadEventTried && m_loadEventProgress <= UnloadEv
entInProgress) { | 2558 if (m_loadEventProgress >= LoadEventTried && m_loadEventProgress <= UnloadEv
entInProgress) { |
2560 Element* currentFocusedElement = focusedElement(); | 2559 Element* currentFocusedElement = focusedElement(); |
2561 if (currentFocusedElement && currentFocusedElement->hasTagName(inputTag)
) | 2560 if (isHTMLInputElement(currentFocusedElement)) |
2562 toHTMLInputElement(currentFocusedElement)->endEditing(); | 2561 toHTMLInputElement(*currentFocusedElement).endEditing(); |
2563 if (m_loadEventProgress < PageHideInProgress) { | 2562 if (m_loadEventProgress < PageHideInProgress) { |
2564 m_loadEventProgress = PageHideInProgress; | 2563 m_loadEventProgress = PageHideInProgress; |
2565 if (DOMWindow* window = domWindow()) | 2564 if (DOMWindow* window = domWindow()) |
2566 window->dispatchEvent(PageTransitionEvent::create(EventTypeNames
::pagehide, false), this); | 2565 window->dispatchEvent(PageTransitionEvent::create(EventTypeNames
::pagehide, false), this); |
2567 if (!m_frame) | 2566 if (!m_frame) |
2568 return; | 2567 return; |
2569 | 2568 |
2570 // The DocumentLoader (and thus its DocumentLoadTiming) might get de
stroyed | 2569 // The DocumentLoader (and thus its DocumentLoadTiming) might get de
stroyed |
2571 // while dispatching the event, so protect it to prevent writing the
end | 2570 // while dispatching the event, so protect it to prevent writing the
end |
2572 // time into freed memory. | 2571 // time into freed memory. |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2617 | 2616 |
2618 bool Document::shouldScheduleLayout() | 2617 bool Document::shouldScheduleLayout() |
2619 { | 2618 { |
2620 // This function will only be called when FrameView thinks a layout is neede
d. | 2619 // This function will only be called when FrameView thinks a layout is neede
d. |
2621 // This enforces a couple extra rules. | 2620 // This enforces a couple extra rules. |
2622 // | 2621 // |
2623 // (a) Only schedule a layout once the stylesheets are loaded. | 2622 // (a) Only schedule a layout once the stylesheets are loaded. |
2624 // (b) Only schedule layout once we have a body element. | 2623 // (b) Only schedule layout once we have a body element. |
2625 | 2624 |
2626 return (haveStylesheetsLoaded() && body()) | 2625 return (haveStylesheetsLoaded() && body()) |
2627 || (documentElement() && !documentElement()->hasTagName(htmlTag)); | 2626 || (documentElement() && !isHTMLHtmlElement(*documentElement())); |
2628 } | 2627 } |
2629 | 2628 |
2630 bool Document::shouldParserYieldAgressivelyBeforeScriptExecution() | 2629 bool Document::shouldParserYieldAgressivelyBeforeScriptExecution() |
2631 { | 2630 { |
2632 return view() && view()->layoutPending(); | 2631 return view() && view()->layoutPending(); |
2633 } | 2632 } |
2634 | 2633 |
2635 int Document::elapsedTime() const | 2634 int Document::elapsedTime() const |
2636 { | 2635 { |
2637 return static_cast<int>((currentTime() - m_startTime) * 1000); | 2636 return static_cast<int>((currentTime() - m_startTime) * 1000); |
(...skipping 1581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4219 if (!frame() || frame()->tree().parent()) | 4218 if (!frame() || frame()->tree().parent()) |
4220 return KURL(); | 4219 return KURL(); |
4221 | 4220 |
4222 // FIXME: Why do we need to wait for FrameStateComplete? | 4221 // FIXME: Why do we need to wait for FrameStateComplete? |
4223 if (frame()->loader().state() != FrameStateComplete) | 4222 if (frame()->loader().state() != FrameStateComplete) |
4224 return KURL(); | 4223 return KURL(); |
4225 | 4224 |
4226 if (!head()) | 4225 if (!head()) |
4227 return KURL(); | 4226 return KURL(); |
4228 | 4227 |
4229 RefPtr<HTMLCollection> children = head()->children(); | 4228 for (HTMLLinkElement* linkElement = Traversal<HTMLLinkElement>::firstChild(*
head()); linkElement; linkElement = Traversal<HTMLLinkElement>::nextSibling(*lin
kElement)) { |
4230 for (unsigned i = 0; Element* child = children->item(i); i++) { | |
4231 if (!child->hasTagName(linkTag)) | |
4232 continue; | |
4233 HTMLLinkElement* linkElement = toHTMLLinkElement(child); | |
4234 if (!equalIgnoringCase(linkElement->type(), openSearchMIMEType) || !equa
lIgnoringCase(linkElement->rel(), openSearchRelation)) | 4229 if (!equalIgnoringCase(linkElement->type(), openSearchMIMEType) || !equa
lIgnoringCase(linkElement->rel(), openSearchRelation)) |
4235 continue; | 4230 continue; |
4236 if (linkElement->href().isEmpty()) | 4231 if (linkElement->href().isEmpty()) |
4237 continue; | 4232 continue; |
4238 return linkElement->href(); | 4233 return linkElement->href(); |
4239 } | 4234 } |
4240 | 4235 |
4241 return KURL(); | 4236 return KURL(); |
4242 } | 4237 } |
4243 | 4238 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4344 | 4339 |
4345 SVGDocumentExtensions& Document::accessSVGExtensions() | 4340 SVGDocumentExtensions& Document::accessSVGExtensions() |
4346 { | 4341 { |
4347 if (!m_svgExtensions) | 4342 if (!m_svgExtensions) |
4348 m_svgExtensions = adoptPtr(new SVGDocumentExtensions(this)); | 4343 m_svgExtensions = adoptPtr(new SVGDocumentExtensions(this)); |
4349 return *m_svgExtensions; | 4344 return *m_svgExtensions; |
4350 } | 4345 } |
4351 | 4346 |
4352 bool Document::hasSVGRootNode() const | 4347 bool Document::hasSVGRootNode() const |
4353 { | 4348 { |
4354 return documentElement() && documentElement()->hasTagName(SVGNames::svgTag); | 4349 return isSVGSVGElement(documentElement()); |
4355 } | 4350 } |
4356 | 4351 |
4357 PassRefPtr<HTMLCollection> Document::ensureCachedCollection(CollectionType type) | 4352 PassRefPtr<HTMLCollection> Document::ensureCachedCollection(CollectionType type) |
4358 { | 4353 { |
4359 return ensureRareData().ensureNodeLists().addCache<HTMLCollection>(*this, ty
pe); | 4354 return ensureRareData().ensureNodeLists().addCache<HTMLCollection>(*this, ty
pe); |
4360 } | 4355 } |
4361 | 4356 |
4362 PassRefPtr<HTMLCollection> Document::images() | 4357 PassRefPtr<HTMLCollection> Document::images() |
4363 { | 4358 { |
4364 return ensureCachedCollection(DocImages); | 4359 return ensureCachedCollection(DocImages); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4465 } | 4460 } |
4466 | 4461 |
4467 Vector<IconURL> Document::iconURLs(int iconTypesMask) | 4462 Vector<IconURL> Document::iconURLs(int iconTypesMask) |
4468 { | 4463 { |
4469 IconURL firstFavicon; | 4464 IconURL firstFavicon; |
4470 IconURL firstTouchIcon; | 4465 IconURL firstTouchIcon; |
4471 IconURL firstTouchPrecomposedIcon; | 4466 IconURL firstTouchPrecomposedIcon; |
4472 Vector<IconURL> secondaryIcons; | 4467 Vector<IconURL> secondaryIcons; |
4473 | 4468 |
4474 // Start from the last child node so that icons seen later take precedence a
s required by the spec. | 4469 // Start from the last child node so that icons seen later take precedence a
s required by the spec. |
4475 RefPtr<HTMLCollection> children = head() ? head()->children() : nullptr; | 4470 for (HTMLLinkElement* linkElement = head() ? Traversal<HTMLLinkElement>::fir
stChild(*head()) : 0; linkElement; linkElement = Traversal<HTMLLinkElement>::nex
tSibling(*linkElement)) { |
4476 unsigned length = children ? children->length() : 0; | |
4477 for (unsigned i = 0; i < length; i++) { | |
4478 Element* child = children->item(i); | |
4479 if (!child->hasTagName(linkTag)) | |
4480 continue; | |
4481 HTMLLinkElement* linkElement = toHTMLLinkElement(child); | |
4482 if (!(linkElement->iconType() & iconTypesMask)) | 4471 if (!(linkElement->iconType() & iconTypesMask)) |
4483 continue; | 4472 continue; |
4484 if (linkElement->href().isEmpty()) | 4473 if (linkElement->href().isEmpty()) |
4485 continue; | 4474 continue; |
4486 if (!RuntimeEnabledFeatures::touchIconLoadingEnabled() && linkElement->i
conType() != Favicon) | 4475 if (!RuntimeEnabledFeatures::touchIconLoadingEnabled() && linkElement->i
conType() != Favicon) |
4487 continue; | 4476 continue; |
4488 | 4477 |
4489 IconURL newURL(linkElement->href(), linkElement->iconSizes(), linkElemen
t->type(), linkElement->iconType()); | 4478 IconURL newURL(linkElement->href(), linkElement->iconSizes(), linkElemen
t->type(), linkElement->iconType()); |
4490 if (linkElement->iconType() == Favicon) { | 4479 if (linkElement->iconType() == Favicon) { |
4491 if (firstFavicon.m_iconType != InvalidIcon) | 4480 if (firstFavicon.m_iconType != InvalidIcon) |
(...skipping 992 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5484 } | 5473 } |
5485 | 5474 |
5486 void Document::invalidateNodeListCaches(const QualifiedName* attrName) | 5475 void Document::invalidateNodeListCaches(const QualifiedName* attrName) |
5487 { | 5476 { |
5488 HashSet<LiveNodeListBase*>::iterator end = m_listsInvalidatedAtDocument.end(
); | 5477 HashSet<LiveNodeListBase*>::iterator end = m_listsInvalidatedAtDocument.end(
); |
5489 for (HashSet<LiveNodeListBase*>::iterator it = m_listsInvalidatedAtDocument.
begin(); it != end; ++it) | 5478 for (HashSet<LiveNodeListBase*>::iterator it = m_listsInvalidatedAtDocument.
begin(); it != end; ++it) |
5490 (*it)->invalidateCache(attrName); | 5479 (*it)->invalidateCache(attrName); |
5491 } | 5480 } |
5492 | 5481 |
5493 } // namespace WebCore | 5482 } // namespace WebCore |
OLD | NEW |