OLD | NEW |
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 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 RefPtr<Text> textNode = Text::createWithLengthLimit(task.parent->documen
t(), shouldUseAtomicString ? AtomicString(characters).string() : characters, cur
rentPosition); | 384 RefPtr<Text> textNode = Text::createWithLengthLimit(task.parent->documen
t(), shouldUseAtomicString ? AtomicString(characters).string() : characters, cur
rentPosition); |
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 |
| 395 if (task.parent->document() != task.child->document()) |
| 396 task.parent->document()->adoptNode(task.child, ASSERT_NO_EXCEPTION); |
| 397 |
394 executeTask(task); | 398 executeTask(task); |
395 } | 399 } |
396 } | 400 } |
397 | 401 |
398 PassRefPtr<Element> HTMLConstructionSite::createElement(AtomicHTMLToken* token,
const AtomicString& namespaceURI) | 402 PassRefPtr<Element> HTMLConstructionSite::createElement(AtomicHTMLToken* token,
const AtomicString& namespaceURI) |
399 { | 403 { |
400 QualifiedName tagName(nullAtom, token->name(), namespaceURI); | 404 QualifiedName tagName(nullAtom, token->name(), namespaceURI); |
401 RefPtr<Element> element = ownerDocumentForCurrentNode()->createElement(tagNa
me, true); | 405 RefPtr<Element> element = ownerDocumentForCurrentNode()->createElement(tagNa
me, true); |
402 element->parserSetAttributes(token->attributes(), m_fragmentScriptingPermiss
ion); | 406 element->parserSetAttributes(token->attributes(), m_fragmentScriptingPermiss
ion); |
403 return element.release(); | 407 return element.release(); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
515 && currentStackItem()->isElementNode() | 519 && currentStackItem()->isElementNode() |
516 && currentStackItem()->causesFosterParenting(); | 520 && currentStackItem()->causesFosterParenting(); |
517 } | 521 } |
518 | 522 |
519 void HTMLConstructionSite::fosterParent(PassRefPtr<Node> node) | 523 void HTMLConstructionSite::fosterParent(PassRefPtr<Node> node) |
520 { | 524 { |
521 HTMLConstructionSiteTask task; | 525 HTMLConstructionSiteTask task; |
522 findFosterSite(task); | 526 findFosterSite(task); |
523 task.child = node; | 527 task.child = node; |
524 ASSERT(task.parent); | 528 ASSERT(task.parent); |
| 529 |
| 530 if (task.parent->document() != task.child->document()) |
| 531 task.parent->document()->adoptNode(task.child, ASSERT_NO_EXCEPTION); |
| 532 |
525 m_attachmentQueue.append(task); | 533 m_attachmentQueue.append(task); |
526 } | 534 } |
527 | 535 |
528 } | 536 } |
OLD | NEW |