Changeset 158537 in webkit
- Timestamp:
- Nov 3, 2013, 12:19:52 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r158536 r158537 1 2013-11-03 Antti Koivisto <antti@apple.com> 2 3 Switch createContextualFragment to element iterator 4 https://bugs.webkit.org/show_bug.cgi?id=123704 5 6 Reviewed by Andreas Kling. 7 8 * editing/FrameSelection.cpp: 9 (WebCore::scanForForm): 10 11 Use type helpers instead of hasTagName 12 13 * editing/markup.cpp: 14 (WebCore::collectElementsToRemoveFromFragment): 15 (WebCore::removeElementFromFragmentPreservingChildren): 16 (WebCore::createContextualFragment): 17 * html/HTMLFormElement.cpp: 18 (WebCore::HTMLFormElement::formElementIndex): 19 20 Use type helpers instead of hasTagName 21 22 * html/HTMLTagNames.in: 23 24 Generate type helpers for <html>. 25 1 26 2013-11-03 Antti Koivisto <antti@apple.com> 2 27 -
trunk/Source/WebCore/editing/FrameSelection.cpp
r158530 r158537 1960 1960 if (isHTMLFormElement(&element)) 1961 1961 return toHTMLFormElement(&element); 1962 if (element.isFormControlElement()) 1963 return static_cast<HTMLFormControlElement&>(element).form(); 1964 if (element.hasTagName(frameTag) || element.hasTagName(iframeTag)) { 1965 if (HTMLFormElement* frameResult = scanForForm(toHTMLFrameElementBase(element).contentDocument()->documentElement())) 1962 if (isHTMLFormControlElement(element)) 1963 return toHTMLFormControlElement(element).form(); 1964 if (isHTMLFrameElementBase(element)) { 1965 Document* contentDocument = toHTMLFrameElementBase(element).contentDocument(); 1966 if (!contentDocument) 1967 continue; 1968 if (HTMLFormElement* frameResult = scanForForm(contentDocument->documentElement())) 1966 1969 return frameResult; 1967 1970 } -
trunk/Source/WebCore/editing/markup.cpp
r158163 r158537 903 903 } 904 904 905 static inline void removeElementPreservingChildren(PassRefPtr<DocumentFragment> fragment, HTMLElement* element) 905 static Vector<Ref<HTMLElement>> collectElementsToRemoveFromFragment(ContainerNode& container) 906 { 907 Vector<Ref<HTMLElement>> toRemove; 908 auto children = childrenOfType<HTMLElement>(container); 909 for (auto it = children.begin(), end = children.end(); it != end; ++it) { 910 HTMLElement& element = *it; 911 if (isHTMLHtmlElement(element)) { 912 toRemove.append(element); 913 collectElementsToRemoveFromFragment(element); 914 continue; 915 } 916 if (isHTMLHeadElement(element) || isHTMLBodyElement(element)) 917 toRemove.append(element); 918 } 919 return toRemove; 920 } 921 922 static void removeElementFromFragmentPreservingChildren(DocumentFragment& fragment, HTMLElement& element) 906 923 { 907 924 RefPtr<Node> nextChild; 908 for (RefPtr<Node> child = element ->firstChild(); child; child = nextChild) {925 for (RefPtr<Node> child = element.firstChild(); child; child = nextChild) { 909 926 nextChild = child->nextSibling(); 910 element ->removeChild(child.get(), ASSERT_NO_EXCEPTION);911 fragment ->insertBefore(child,element, ASSERT_NO_EXCEPTION);912 } 913 fragment ->removeChild(element, ASSERT_NO_EXCEPTION);927 element.removeChild(child.get(), ASSERT_NO_EXCEPTION); 928 fragment.insertBefore(child, &element, ASSERT_NO_EXCEPTION); 929 } 930 fragment.removeChild(&element, ASSERT_NO_EXCEPTION); 914 931 } 915 932 … … 935 952 // accommodate folks passing complete HTML documents to make the 936 953 // child of an element. 937 938 RefPtr<HTMLElement> nextElement; 939 for (RefPtr<HTMLElement> element = Traversal<HTMLElement>::firstWithin(fragment.get()); element; element = nextElement) { 940 nextElement = Traversal<HTMLElement>::nextSibling(element.get()); 941 if (element->hasTagName(htmlTag) || element->hasTagName(headTag) || element->hasTagName(bodyTag)) { 942 if (HTMLElement* firstChild = Traversal<HTMLElement>::firstChild(element.get())) 943 nextElement = firstChild; 944 removeElementPreservingChildren(fragment, element.get()); 945 } 946 } 954 auto toRemove = collectElementsToRemoveFromFragment(*fragment); 955 for (unsigned i = 0; i < toRemove.size(); ++i) 956 removeElementFromFragmentPreservingChildren(*fragment, toRemove[i].get()); 957 947 958 return fragment.release(); 948 959 } -
trunk/Source/WebCore/html/HTMLFormElement.cpp
r158530 r158537 481 481 if (&element == &associatedHTMLElement) 482 482 return i; 483 if (! element.isFormControlElement() && !element.hasTagName(objectTag))483 if (!isHTMLFormControlElement(element) && !isHTMLObjectElement(element)) 484 484 continue; 485 485 if (element.form() != this) -
trunk/Source/WebCore/html/HTMLTagNames.in
r157405 r158537 62 62 hgroup interfaceName=HTMLElement 63 63 hr interfaceName=HTMLHRElement 64 html 64 html generateTypeHelpers 65 65 i interfaceName=HTMLElement 66 66 iframe interfaceName=HTMLIFrameElement, generateTypeHelpers
Note:
See TracChangeset
for help on using the changeset viewer.