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

Side by Side Diff: Source/core/editing/markup.cpp

Issue 22417002: Rename ASSERT_NO_EXCEPTION_STATE and IGNORE_EXCEPTION_STATE (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 4 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
3 * Copyright (C) 2008, 2009, 2010, 2011 Google Inc. All rights reserved. 3 * Copyright (C) 2008, 2009, 2010, 2011 Google Inc. All rights reserved.
4 * Copyright (C) 2011 Igalia S.L. 4 * Copyright (C) 2011 Igalia S.L.
5 * Copyright (C) 2011 Motorola Mobility. All rights reserved. 5 * Copyright (C) 2011 Motorola Mobility. All rights reserved.
6 * 6 *
7 * Redistribution and use in source and binary forms, with or without 7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions 8 * modification, are permitted provided that the following conditions
9 * are met: 9 * are met:
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 } 489 }
490 490
491 static bool isElementPresentational(const Node* node) 491 static bool isElementPresentational(const Node* node)
492 { 492 {
493 return node->hasTagName(uTag) || node->hasTagName(sTag) || node->hasTagName( strikeTag) 493 return node->hasTagName(uTag) || node->hasTagName(sTag) || node->hasTagName( strikeTag)
494 || node->hasTagName(iTag) || node->hasTagName(emTag) || node->hasTagName (bTag) || node->hasTagName(strongTag); 494 || node->hasTagName(iTag) || node->hasTagName(emTag) || node->hasTagName (bTag) || node->hasTagName(strongTag);
495 } 495 }
496 496
497 static Node* highestAncestorToWrapMarkup(const Range* range, EAnnotateForInterch ange shouldAnnotate, Node* constrainingAncestor) 497 static Node* highestAncestorToWrapMarkup(const Range* range, EAnnotateForInterch ange shouldAnnotate, Node* constrainingAncestor)
498 { 498 {
499 Node* commonAncestor = range->commonAncestorContainer(IGNORE_EXCEPTION_STATE ); 499 Node* commonAncestor = range->commonAncestorContainer(IGNORE_EXCEPTION);
500 ASSERT(commonAncestor); 500 ASSERT(commonAncestor);
501 Node* specialCommonAncestor = 0; 501 Node* specialCommonAncestor = 0;
502 if (shouldAnnotate == AnnotateForInterchange) { 502 if (shouldAnnotate == AnnotateForInterchange) {
503 // Include ancestors that aren't completely inside the range but are req uired to retain 503 // Include ancestors that aren't completely inside the range but are req uired to retain
504 // the structure and appearance of the copied markup. 504 // the structure and appearance of the copied markup.
505 specialCommonAncestor = ancestorToRetainStructureAndAppearance(commonAnc estor); 505 specialCommonAncestor = ancestorToRetainStructureAndAppearance(commonAnc estor);
506 506
507 if (Node* parentListNode = enclosingNodeOfType(firstPositionInOrBeforeNo de(range->firstNode()), isListItem)) { 507 if (Node* parentListNode = enclosingNodeOfType(firstPositionInOrBeforeNo de(range->firstNode()), isListItem)) {
508 if (WebCore::areRangesEqual(VisibleSelection::selectionFromContentsO fNode(parentListNode).toNormalizedRange().get(), range)) { 508 if (WebCore::areRangesEqual(VisibleSelection::selectionFromContentsO fNode(parentListNode).toNormalizedRange().get(), range)) {
509 specialCommonAncestor = parentListNode->parentNode(); 509 specialCommonAncestor = parentListNode->parentNode();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 // FIXME: Shouldn't we omit style info when annotate == DoNotAnnotateForIntercha nge? 542 // FIXME: Shouldn't we omit style info when annotate == DoNotAnnotateForIntercha nge?
543 // FIXME: At least, annotation and style info should probably not be included in range.markupString() 543 // FIXME: At least, annotation and style info should probably not be included in range.markupString()
544 static String createMarkupInternal(Document* document, const Range* range, const Range* updatedRange, Vector<Node*>* nodes, 544 static String createMarkupInternal(Document* document, const Range* range, const Range* updatedRange, Vector<Node*>* nodes,
545 EAnnotateForInterchange shouldAnnotate, bool convertBlocksToInlines, EAbsolu teURLs shouldResolveURLs, Node* constrainingAncestor) 545 EAnnotateForInterchange shouldAnnotate, bool convertBlocksToInlines, EAbsolu teURLs shouldResolveURLs, Node* constrainingAncestor)
546 { 546 {
547 ASSERT(document); 547 ASSERT(document);
548 ASSERT(range); 548 ASSERT(range);
549 ASSERT(updatedRange); 549 ASSERT(updatedRange);
550 DEFINE_STATIC_LOCAL(const String, interchangeNewlineString, (ASCIILiteral("< br class=\"" AppleInterchangeNewline "\">"))); 550 DEFINE_STATIC_LOCAL(const String, interchangeNewlineString, (ASCIILiteral("< br class=\"" AppleInterchangeNewline "\">")));
551 551
552 bool collapsed = updatedRange->collapsed(ASSERT_NO_EXCEPTION_STATE); 552 bool collapsed = updatedRange->collapsed(ASSERT_NO_EXCEPTION);
553 if (collapsed) 553 if (collapsed)
554 return emptyString(); 554 return emptyString();
555 Node* commonAncestor = updatedRange->commonAncestorContainer(ASSERT_NO_EXCEP TION_STATE); 555 Node* commonAncestor = updatedRange->commonAncestorContainer(ASSERT_NO_EXCEP TION);
556 if (!commonAncestor) 556 if (!commonAncestor)
557 return emptyString(); 557 return emptyString();
558 558
559 document->updateLayoutIgnorePendingStylesheets(); 559 document->updateLayoutIgnorePendingStylesheets();
560 560
561 Node* body = enclosingNodeWithTag(firstPositionInNode(commonAncestor), bodyT ag); 561 Node* body = enclosingNodeWithTag(firstPositionInNode(commonAncestor), bodyT ag);
562 Node* fullySelectedRoot = 0; 562 Node* fullySelectedRoot = 0;
563 // FIXME: Do this for all fully selected blocks, not just the body. 563 // FIXME: Do this for all fully selected blocks, not just the body.
564 if (body && areRangesEqual(VisibleSelection::selectionFromContentsOfNode(bod y).toNormalizedRange().get(), range)) 564 if (body && areRangesEqual(VisibleSelection::selectionFromContentsOfNode(bod y).toNormalizedRange().get(), range))
565 fullySelectedRoot = body; 565 fullySelectedRoot = body;
566 Node* specialCommonAncestor = highestAncestorToWrapMarkup(updatedRange, shou ldAnnotate, constrainingAncestor); 566 Node* specialCommonAncestor = highestAncestorToWrapMarkup(updatedRange, shou ldAnnotate, constrainingAncestor);
567 StyledMarkupAccumulator accumulator(nodes, shouldResolveURLs, shouldAnnotate , updatedRange, specialCommonAncestor); 567 StyledMarkupAccumulator accumulator(nodes, shouldResolveURLs, shouldAnnotate , updatedRange, specialCommonAncestor);
568 Node* pastEnd = updatedRange->pastLastNode(); 568 Node* pastEnd = updatedRange->pastLastNode();
569 569
570 Node* startNode = updatedRange->firstNode(); 570 Node* startNode = updatedRange->firstNode();
571 VisiblePosition visibleStart(updatedRange->startPosition(), VP_DEFAULT_AFFIN ITY); 571 VisiblePosition visibleStart(updatedRange->startPosition(), VP_DEFAULT_AFFIN ITY);
572 VisiblePosition visibleEnd(updatedRange->endPosition(), VP_DEFAULT_AFFINITY) ; 572 VisiblePosition visibleEnd(updatedRange->endPosition(), VP_DEFAULT_AFFINITY) ;
573 if (shouldAnnotate == AnnotateForInterchange && needInterchangeNewlineAfter( visibleStart)) { 573 if (shouldAnnotate == AnnotateForInterchange && needInterchangeNewlineAfter( visibleStart)) {
574 if (visibleStart == visibleEnd.previous()) 574 if (visibleStart == visibleEnd.previous())
575 return interchangeNewlineString; 575 return interchangeNewlineString;
576 576
577 accumulator.appendString(interchangeNewlineString); 577 accumulator.appendString(interchangeNewlineString);
578 startNode = visibleStart.next().deepEquivalent().deprecatedNode(); 578 startNode = visibleStart.next().deepEquivalent().deprecatedNode();
579 579
580 if (pastEnd && Range::compareBoundaryPoints(startNode, 0, pastEnd, 0, AS SERT_NO_EXCEPTION_STATE) >= 0) 580 if (pastEnd && Range::compareBoundaryPoints(startNode, 0, pastEnd, 0, AS SERT_NO_EXCEPTION) >= 0)
581 return interchangeNewlineString; 581 return interchangeNewlineString;
582 } 582 }
583 583
584 Node* lastClosed = accumulator.serializeNodes(startNode, pastEnd); 584 Node* lastClosed = accumulator.serializeNodes(startNode, pastEnd);
585 585
586 if (specialCommonAncestor && lastClosed) { 586 if (specialCommonAncestor && lastClosed) {
587 // Also include all of the ancestors of lastClosed up to this special an cestor. 587 // Also include all of the ancestors of lastClosed up to this special an cestor.
588 for (ContainerNode* ancestor = lastClosed->parentNode(); ancestor; ances tor = ancestor->parentNode()) { 588 for (ContainerNode* ancestor = lastClosed->parentNode(); ancestor; ances tor = ancestor->parentNode()) {
589 if (ancestor == fullySelectedRoot && !convertBlocksToInlines) { 589 if (ancestor == fullySelectedRoot && !convertBlocksToInlines) {
590 RefPtr<EditingStyle> fullySelectedRootStyle = styleFromMatchedRu lesAndInlineDecl(fullySelectedRoot); 590 RefPtr<EditingStyle> fullySelectedRootStyle = styleFromMatchedRu lesAndInlineDecl(fullySelectedRoot);
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 static void trimFragment(DocumentFragment* fragment, Node* nodeBeforeContext, No de* nodeAfterContext) 675 static void trimFragment(DocumentFragment* fragment, Node* nodeBeforeContext, No de* nodeAfterContext)
676 { 676 {
677 RefPtr<Node> next; 677 RefPtr<Node> next;
678 for (RefPtr<Node> node = fragment->firstChild(); node; node = next) { 678 for (RefPtr<Node> node = fragment->firstChild(); node; node = next) {
679 if (nodeBeforeContext->isDescendantOf(node.get())) { 679 if (nodeBeforeContext->isDescendantOf(node.get())) {
680 next = NodeTraversal::next(node.get()); 680 next = NodeTraversal::next(node.get());
681 continue; 681 continue;
682 } 682 }
683 next = NodeTraversal::nextSkippingChildren(node.get()); 683 next = NodeTraversal::nextSkippingChildren(node.get());
684 ASSERT(!node->contains(nodeAfterContext)); 684 ASSERT(!node->contains(nodeAfterContext));
685 node->parentNode()->removeChild(node.get(), ASSERT_NO_EXCEPTION_STATE); 685 node->parentNode()->removeChild(node.get(), ASSERT_NO_EXCEPTION);
686 if (nodeBeforeContext == node) 686 if (nodeBeforeContext == node)
687 break; 687 break;
688 } 688 }
689 689
690 ASSERT(nodeAfterContext->parentNode()); 690 ASSERT(nodeAfterContext->parentNode());
691 for (RefPtr<Node> node = nodeAfterContext; node; node = next) { 691 for (RefPtr<Node> node = nodeAfterContext; node; node = next) {
692 next = NodeTraversal::nextSkippingChildren(node.get()); 692 next = NodeTraversal::nextSkippingChildren(node.get());
693 node->parentNode()->removeChild(node.get(), ASSERT_NO_EXCEPTION_STATE); 693 node->parentNode()->removeChild(node.get(), ASSERT_NO_EXCEPTION);
694 } 694 }
695 } 695 }
696 696
697 PassRefPtr<DocumentFragment> createFragmentFromMarkupWithContext(Document* docum ent, const String& markup, unsigned fragmentStart, unsigned fragmentEnd, 697 PassRefPtr<DocumentFragment> createFragmentFromMarkupWithContext(Document* docum ent, const String& markup, unsigned fragmentStart, unsigned fragmentEnd,
698 const String& baseURL, ParserContentPolicy parserContentPolicy) 698 const String& baseURL, ParserContentPolicy parserContentPolicy)
699 { 699 {
700 // FIXME: Need to handle the case where the markup already contains these ma rkers. 700 // FIXME: Need to handle the case where the markup already contains these ma rkers.
701 701
702 StringBuilder taggedMarkup; 702 StringBuilder taggedMarkup;
703 taggedMarkup.append(markup.left(fragmentStart)); 703 taggedMarkup.append(markup.left(fragmentStart));
704 MarkupAccumulator::appendComment(taggedMarkup, fragmentMarkerTag); 704 MarkupAccumulator::appendComment(taggedMarkup, fragmentMarkerTag);
705 taggedMarkup.append(markup.substring(fragmentStart, fragmentEnd - fragmentSt art)); 705 taggedMarkup.append(markup.substring(fragmentStart, fragmentEnd - fragmentSt art));
706 MarkupAccumulator::appendComment(taggedMarkup, fragmentMarkerTag); 706 MarkupAccumulator::appendComment(taggedMarkup, fragmentMarkerTag);
707 taggedMarkup.append(markup.substring(fragmentEnd)); 707 taggedMarkup.append(markup.substring(fragmentEnd));
708 708
709 RefPtr<DocumentFragment> taggedFragment = createFragmentFromMarkup(document, taggedMarkup.toString(), baseURL, parserContentPolicy); 709 RefPtr<DocumentFragment> taggedFragment = createFragmentFromMarkup(document, taggedMarkup.toString(), baseURL, parserContentPolicy);
710 RefPtr<Document> taggedDocument = Document::create(); 710 RefPtr<Document> taggedDocument = Document::create();
711 taggedDocument->setContextFeatures(document->contextFeatures()); 711 taggedDocument->setContextFeatures(document->contextFeatures());
712 taggedDocument->takeAllChildrenFrom(taggedFragment.get()); 712 taggedDocument->takeAllChildrenFrom(taggedFragment.get());
713 713
714 RefPtr<Node> nodeBeforeContext; 714 RefPtr<Node> nodeBeforeContext;
715 RefPtr<Node> nodeAfterContext; 715 RefPtr<Node> nodeAfterContext;
716 if (!findNodesSurroundingContext(taggedDocument.get(), nodeBeforeContext, no deAfterContext)) 716 if (!findNodesSurroundingContext(taggedDocument.get(), nodeBeforeContext, no deAfterContext))
717 return 0; 717 return 0;
718 718
719 RefPtr<Range> range = Range::create(taggedDocument.get(), 719 RefPtr<Range> range = Range::create(taggedDocument.get(),
720 positionAfterNode(nodeBeforeContext.get()).parentAnchoredEquivalent(), 720 positionAfterNode(nodeBeforeContext.get()).parentAnchoredEquivalent(),
721 positionBeforeNode(nodeAfterContext.get()).parentAnchoredEquivalent()); 721 positionBeforeNode(nodeAfterContext.get()).parentAnchoredEquivalent());
722 722
723 Node* commonAncestor = range->commonAncestorContainer(ASSERT_NO_EXCEPTION_ST ATE); 723 Node* commonAncestor = range->commonAncestorContainer(ASSERT_NO_EXCEPTION);
724 Node* specialCommonAncestor = ancestorToRetainStructureAndAppearanceWithNoRe nderer(commonAncestor); 724 Node* specialCommonAncestor = ancestorToRetainStructureAndAppearanceWithNoRe nderer(commonAncestor);
725 725
726 // When there's a special common ancestor outside of the fragment, we must i nclude it as well to 726 // When there's a special common ancestor outside of the fragment, we must i nclude it as well to
727 // preserve the structure and appearance of the fragment. For example, if th e fragment contains 727 // preserve the structure and appearance of the fragment. For example, if th e fragment contains
728 // TD, we need to include the enclosing TABLE tag as well. 728 // TD, we need to include the enclosing TABLE tag as well.
729 RefPtr<DocumentFragment> fragment = DocumentFragment::create(document); 729 RefPtr<DocumentFragment> fragment = DocumentFragment::create(document);
730 if (specialCommonAncestor) 730 if (specialCommonAncestor)
731 fragment->appendChild(specialCommonAncestor, ASSERT_NO_EXCEPTION_STATE); 731 fragment->appendChild(specialCommonAncestor, ASSERT_NO_EXCEPTION);
732 else 732 else
733 fragment->takeAllChildrenFrom(toContainerNode(commonAncestor)); 733 fragment->takeAllChildrenFrom(toContainerNode(commonAncestor));
734 734
735 trimFragment(fragment.get(), nodeBeforeContext.get(), nodeAfterContext.get() ); 735 trimFragment(fragment.get(), nodeBeforeContext.get(), nodeAfterContext.get() );
736 736
737 return fragment; 737 return fragment;
738 } 738 }
739 739
740 String createMarkup(const Node* node, EChildrenOnly childrenOnly, Vector<Node*>* nodes, EAbsoluteURLs shouldResolveURLs, Vector<QualifiedName>* tagNamesToSkip) 740 String createMarkup(const Node* node, EChildrenOnly childrenOnly, Vector<Node*>* nodes, EAbsoluteURLs shouldResolveURLs, Vector<QualifiedName>* tagNamesToSkip)
741 { 741 {
742 if (!node) 742 if (!node)
743 return ""; 743 return "";
744 744
745 MarkupAccumulator accumulator(nodes, shouldResolveURLs); 745 MarkupAccumulator accumulator(nodes, shouldResolveURLs);
746 return accumulator.serializeNodes(const_cast<Node*>(node), childrenOnly, tag NamesToSkip); 746 return accumulator.serializeNodes(const_cast<Node*>(node), childrenOnly, tag NamesToSkip);
747 } 747 }
748 748
749 static void fillContainerFromString(ContainerNode* paragraph, const String& stri ng) 749 static void fillContainerFromString(ContainerNode* paragraph, const String& stri ng)
750 { 750 {
751 Document* document = paragraph->document(); 751 Document* document = paragraph->document();
752 752
753 if (string.isEmpty()) { 753 if (string.isEmpty()) {
754 paragraph->appendChild(createBlockPlaceholderElement(document), ASSERT_N O_EXCEPTION_STATE); 754 paragraph->appendChild(createBlockPlaceholderElement(document), ASSERT_N O_EXCEPTION);
755 return; 755 return;
756 } 756 }
757 757
758 ASSERT(string.find('\n') == notFound); 758 ASSERT(string.find('\n') == notFound);
759 759
760 Vector<String> tabList; 760 Vector<String> tabList;
761 string.split('\t', true, tabList); 761 string.split('\t', true, tabList);
762 String tabText = emptyString(); 762 String tabText = emptyString();
763 bool first = true; 763 bool first = true;
764 size_t numEntries = tabList.size(); 764 size_t numEntries = tabList.size();
765 for (size_t i = 0; i < numEntries; ++i) { 765 for (size_t i = 0; i < numEntries; ++i) {
766 const String& s = tabList[i]; 766 const String& s = tabList[i];
767 767
768 // append the non-tab textual part 768 // append the non-tab textual part
769 if (!s.isEmpty()) { 769 if (!s.isEmpty()) {
770 if (!tabText.isEmpty()) { 770 if (!tabText.isEmpty()) {
771 paragraph->appendChild(createTabSpanElement(document, tabText), ASSERT_NO_EXCEPTION_STATE); 771 paragraph->appendChild(createTabSpanElement(document, tabText), ASSERT_NO_EXCEPTION);
772 tabText = emptyString(); 772 tabText = emptyString();
773 } 773 }
774 RefPtr<Node> textNode = document->createTextNode(stringWithRebalance dWhitespace(s, first, i + 1 == numEntries)); 774 RefPtr<Node> textNode = document->createTextNode(stringWithRebalance dWhitespace(s, first, i + 1 == numEntries));
775 paragraph->appendChild(textNode.release(), ASSERT_NO_EXCEPTION_STATE ); 775 paragraph->appendChild(textNode.release(), ASSERT_NO_EXCEPTION);
776 } 776 }
777 777
778 // there is a tab after every entry, except the last entry 778 // there is a tab after every entry, except the last entry
779 // (if the last character is a tab, the list gets an extra empty entry) 779 // (if the last character is a tab, the list gets an extra empty entry)
780 if (i + 1 != numEntries) 780 if (i + 1 != numEntries)
781 tabText.append('\t'); 781 tabText.append('\t');
782 else if (!tabText.isEmpty()) 782 else if (!tabText.isEmpty())
783 paragraph->appendChild(createTabSpanElement(document, tabText), ASSE RT_NO_EXCEPTION_STATE); 783 paragraph->appendChild(createTabSpanElement(document, tabText), ASSE RT_NO_EXCEPTION);
784 784
785 first = false; 785 first = false;
786 } 786 }
787 } 787 }
788 788
789 bool isPlainTextMarkup(Node *node) 789 bool isPlainTextMarkup(Node *node)
790 { 790 {
791 if (!node->isElementNode() || !node->hasTagName(divTag) || toElement(node)-> hasAttributes()) 791 if (!node->isElementNode() || !node->hasTagName(divTag) || toElement(node)-> hasAttributes())
792 return false; 792 return false;
793 793
(...skipping 20 matching lines...) Expand all
814 814
815 if (text.isEmpty()) 815 if (text.isEmpty())
816 return fragment.release(); 816 return fragment.release();
817 817
818 String string = text; 818 String string = text;
819 string.replace("\r\n", "\n"); 819 string.replace("\r\n", "\n");
820 string.replace('\r', '\n'); 820 string.replace('\r', '\n');
821 821
822 RenderObject* renderer = styleNode->renderer(); 822 RenderObject* renderer = styleNode->renderer();
823 if (renderer && renderer->style()->preserveNewline()) { 823 if (renderer && renderer->style()->preserveNewline()) {
824 fragment->appendChild(document->createTextNode(string), ASSERT_NO_EXCEPT ION_STATE); 824 fragment->appendChild(document->createTextNode(string), ASSERT_NO_EXCEPT ION);
825 if (string.endsWith('\n')) { 825 if (string.endsWith('\n')) {
826 RefPtr<Element> element = createBreakElement(document); 826 RefPtr<Element> element = createBreakElement(document);
827 element->setAttribute(classAttr, AppleInterchangeNewline); 827 element->setAttribute(classAttr, AppleInterchangeNewline);
828 fragment->appendChild(element.release(), ASSERT_NO_EXCEPTION_STATE); 828 fragment->appendChild(element.release(), ASSERT_NO_EXCEPTION);
829 } 829 }
830 return fragment.release(); 830 return fragment.release();
831 } 831 }
832 832
833 // A string with no newlines gets added inline, rather than being put into a paragraph. 833 // A string with no newlines gets added inline, rather than being put into a paragraph.
834 if (string.find('\n') == notFound) { 834 if (string.find('\n') == notFound) {
835 fillContainerFromString(fragment.get(), string); 835 fillContainerFromString(fragment.get(), string);
836 return fragment.release(); 836 return fragment.release();
837 } 837 }
838 838
(...skipping 21 matching lines...) Expand all
860 } else if (useLineBreak) { 860 } else if (useLineBreak) {
861 element = createBreakElement(document); 861 element = createBreakElement(document);
862 fillContainerFromString(fragment.get(), s); 862 fillContainerFromString(fragment.get(), s);
863 } else { 863 } else {
864 if (useClonesOfEnclosingBlock) 864 if (useClonesOfEnclosingBlock)
865 element = block->cloneElementWithoutChildren(); 865 element = block->cloneElementWithoutChildren();
866 else 866 else
867 element = createDefaultParagraphElement(document); 867 element = createDefaultParagraphElement(document);
868 fillContainerFromString(element.get(), s); 868 fillContainerFromString(element.get(), s);
869 } 869 }
870 fragment->appendChild(element.release(), ASSERT_NO_EXCEPTION_STATE); 870 fragment->appendChild(element.release(), ASSERT_NO_EXCEPTION);
871 } 871 }
872 return fragment.release(); 872 return fragment.release();
873 } 873 }
874 874
875 PassRefPtr<DocumentFragment> createFragmentFromNodes(Document *document, const V ector<Node*>& nodes) 875 PassRefPtr<DocumentFragment> createFragmentFromNodes(Document *document, const V ector<Node*>& nodes)
876 { 876 {
877 if (!document) 877 if (!document)
878 return 0; 878 return 0;
879 879
880 RefPtr<DocumentFragment> fragment = document->createDocumentFragment(); 880 RefPtr<DocumentFragment> fragment = document->createDocumentFragment();
881 881
882 size_t size = nodes.size(); 882 size_t size = nodes.size();
883 for (size_t i = 0; i < size; ++i) { 883 for (size_t i = 0; i < size; ++i) {
884 RefPtr<Element> element = createDefaultParagraphElement(document); 884 RefPtr<Element> element = createDefaultParagraphElement(document);
885 element->appendChild(nodes[i], ASSERT_NO_EXCEPTION_STATE); 885 element->appendChild(nodes[i], ASSERT_NO_EXCEPTION);
886 fragment->appendChild(element.release(), ASSERT_NO_EXCEPTION_STATE); 886 fragment->appendChild(element.release(), ASSERT_NO_EXCEPTION);
887 } 887 }
888 888
889 return fragment.release(); 889 return fragment.release();
890 } 890 }
891 891
892 String createFullMarkup(const Node* node) 892 String createFullMarkup(const Node* node)
893 { 893 {
894 if (!node) 894 if (!node)
895 return String(); 895 return String();
896 896
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 // FIXME: Do we need to mess with URLs here? 983 // FIXME: Do we need to mess with URLs here?
984 984
985 return fragment.release(); 985 return fragment.release();
986 } 986 }
987 987
988 static inline void removeElementPreservingChildren(PassRefPtr<DocumentFragment> fragment, HTMLElement* element) 988 static inline void removeElementPreservingChildren(PassRefPtr<DocumentFragment> fragment, HTMLElement* element)
989 { 989 {
990 RefPtr<Node> nextChild; 990 RefPtr<Node> nextChild;
991 for (RefPtr<Node> child = element->firstChild(); child; child = nextChild) { 991 for (RefPtr<Node> child = element->firstChild(); child; child = nextChild) {
992 nextChild = child->nextSibling(); 992 nextChild = child->nextSibling();
993 element->removeChild(child.get(), ASSERT_NO_EXCEPTION_STATE); 993 element->removeChild(child.get(), ASSERT_NO_EXCEPTION);
994 fragment->insertBefore(child, element, ASSERT_NO_EXCEPTION_STATE); 994 fragment->insertBefore(child, element, ASSERT_NO_EXCEPTION);
995 } 995 }
996 fragment->removeChild(element, ASSERT_NO_EXCEPTION_STATE); 996 fragment->removeChild(element, ASSERT_NO_EXCEPTION);
997 } 997 }
998 998
999 PassRefPtr<DocumentFragment> createContextualFragment(const String& markup, HTML Element* element, ParserContentPolicy parserContentPolicy, ExceptionState& es) 999 PassRefPtr<DocumentFragment> createContextualFragment(const String& markup, HTML Element* element, ParserContentPolicy parserContentPolicy, ExceptionState& es)
1000 { 1000 {
1001 ASSERT(element); 1001 ASSERT(element);
1002 if (element->ieForbidsInsertHTML()) { 1002 if (element->ieForbidsInsertHTML()) {
1003 es.throwDOMException(NotSupportedError); 1003 es.throwDOMException(NotSupportedError);
1004 return 0; 1004 return 0;
1005 } 1005 }
1006 1006
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1083 if (hasOneChild(containerNode.get())) { 1083 if (hasOneChild(containerNode.get())) {
1084 containerNode->replaceChild(textNode.release(), containerNode->firstChil d(), es); 1084 containerNode->replaceChild(textNode.release(), containerNode->firstChil d(), es);
1085 return; 1085 return;
1086 } 1086 }
1087 1087
1088 containerNode->removeChildren(); 1088 containerNode->removeChildren();
1089 containerNode->appendChild(textNode.release(), es); 1089 containerNode->appendChild(textNode.release(), es);
1090 } 1090 }
1091 1091
1092 } 1092 }
OLDNEW
« no previous file with comments | « Source/core/editing/htmlediting.cpp ('k') | Source/core/html/BaseChooserOnlyDateAndTimeInputType.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698