Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(187)

Side by Side Diff: Source/WebCore/html/parser/HTMLConstructionSite.cpp

Issue 12178024: Merge 141198 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1364/
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/WebCore/dom/ContainerNode.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved.
3 * Copyright (C) 2011 Apple Inc. All rights reserved. 3 * Copyright (C) 2011 Apple Inc. 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 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 // If we have a whole string of unbreakable characters the above could l ead to an infinite loop. Exceeding the length limit is the lesser evil. 385 // If we have a whole string of unbreakable characters the above could l ead to an infinite loop. Exceeding the length limit is the lesser evil.
386 if (!textNode->length()) { 386 if (!textNode->length()) {
387 String substring = characters.substring(currentPosition); 387 String substring = characters.substring(currentPosition);
388 textNode = Text::create(task.parent->document(), shouldUseAtomicStri ng ? AtomicString(substring).string() : substring); 388 textNode = Text::create(task.parent->document(), shouldUseAtomicStri ng ? AtomicString(substring).string() : substring);
389 } 389 }
390 390
391 currentPosition += textNode->length(); 391 currentPosition += textNode->length();
392 ASSERT(currentPosition <= characters.length()); 392 ASSERT(currentPosition <= characters.length());
393 task.child = textNode.release(); 393 task.child = textNode.release();
394 394
395 if (task.parent->document() != task.child->document())
396 task.parent->document()->adoptNode(task.child, ASSERT_NO_EXCEPTION);
397
398 executeTask(task); 395 executeTask(task);
399 } 396 }
400 } 397 }
401 398
402 PassRefPtr<Element> HTMLConstructionSite::createElement(AtomicHTMLToken* token, const AtomicString& namespaceURI) 399 PassRefPtr<Element> HTMLConstructionSite::createElement(AtomicHTMLToken* token, const AtomicString& namespaceURI)
403 { 400 {
404 QualifiedName tagName(nullAtom, token->name(), namespaceURI); 401 QualifiedName tagName(nullAtom, token->name(), namespaceURI);
405 RefPtr<Element> element = ownerDocumentForCurrentNode()->createElement(tagNa me, true); 402 RefPtr<Element> element = ownerDocumentForCurrentNode()->createElement(tagNa me, true);
406 element->parserSetAttributes(token->attributes(), m_fragmentScriptingPermiss ion); 403 element->parserSetAttributes(token->attributes(), m_fragmentScriptingPermiss ion);
407 return element.release(); 404 return element.release();
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 while (hasImpliedEndTag(currentStackItem())) 480 while (hasImpliedEndTag(currentStackItem()))
484 m_openElements.pop(); 481 m_openElements.pop();
485 } 482 }
486 483
487 void HTMLConstructionSite::findFosterSite(HTMLConstructionSiteTask& task) 484 void HTMLConstructionSite::findFosterSite(HTMLConstructionSiteTask& task)
488 { 485 {
489 #if ENABLE(TEMPLATE_ELEMENT) 486 #if ENABLE(TEMPLATE_ELEMENT)
490 // When a node is to be foster parented, the last template element with no t able element is below it in the stack of open elements is the foster parent elem ent (NOT the template's parent!) 487 // When a node is to be foster parented, the last template element with no t able element is below it in the stack of open elements is the foster parent elem ent (NOT the template's parent!)
491 HTMLElementStack::ElementRecord* lastTemplateElement = m_openElements.topmos t(templateTag.localName()); 488 HTMLElementStack::ElementRecord* lastTemplateElement = m_openElements.topmos t(templateTag.localName());
492 if (lastTemplateElement && !m_openElements.inTableScope(tableTag)) { 489 if (lastTemplateElement && !m_openElements.inTableScope(tableTag)) {
493 task.parent = toHTMLTemplateElement(lastTemplateElement->element())->con tent(); 490 task.parent = lastTemplateElement->element();
494 return; 491 return;
495 } 492 }
496 493
497 #endif 494 #endif
498 495
499 HTMLElementStack::ElementRecord* lastTableElementRecord = m_openElements.top most(tableTag.localName()); 496 HTMLElementStack::ElementRecord* lastTableElementRecord = m_openElements.top most(tableTag.localName());
500 if (lastTableElementRecord) { 497 if (lastTableElementRecord) {
501 Element* lastTableElement = lastTableElementRecord->element(); 498 Element* lastTableElement = lastTableElementRecord->element();
502 ContainerNode* parent = lastTableElement->parentNode(); 499 ContainerNode* parent = lastTableElement->parentNode();
503 // When parsing HTML fragments, we skip step 4.2 ("Let root be a new htm l element with no attributes") for efficiency, 500 // When parsing HTML fragments, we skip step 4.2 ("Let root be a new htm l element with no attributes") for efficiency,
(...skipping 17 matching lines...) Expand all
521 && currentStackItem()->causesFosterParenting(); 518 && currentStackItem()->causesFosterParenting();
522 } 519 }
523 520
524 void HTMLConstructionSite::fosterParent(PassRefPtr<Node> node) 521 void HTMLConstructionSite::fosterParent(PassRefPtr<Node> node)
525 { 522 {
526 HTMLConstructionSiteTask task; 523 HTMLConstructionSiteTask task;
527 findFosterSite(task); 524 findFosterSite(task);
528 task.child = node; 525 task.child = node;
529 ASSERT(task.parent); 526 ASSERT(task.parent);
530 527
531 if (task.parent->document() != task.child->document())
532 task.parent->document()->adoptNode(task.child, ASSERT_NO_EXCEPTION);
533
534 m_attachmentQueue.append(task); 528 m_attachmentQueue.append(task);
535 } 529 }
536 530
537 } 531 }
OLDNEW
« no previous file with comments | « Source/WebCore/dom/ContainerNode.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698