Changeset 117754 in webkit
- Timestamp:
- May 21, 2012 3:29:37 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r117753 r117754 1 2012-05-21 Rakesh KN <rakesh.kn@motorola.com> 2 3 [Forms] Refactor HTMLFormCollection 4 https://bugs.webkit.org/show_bug.cgi?id=86602 5 6 Reviewed by Kent Tamura. 7 8 Modify HTMLFormCollection to be independent of HTMLFormElement which is needed 9 for implementing HTMLFieldSetElement's element attribute. 10 11 Covered by existing tests. 12 13 * html/HTMLFormCollection.cpp: 14 (WebCore::HTMLFormCollection::HTMLFormCollection): 15 Modified to take more generic HTMLElement* instead of HTMLFormElement* so that 16 HTMLFormCollection for HTMLFieldSetElement can also be created. 17 (WebCore::HTMLFormCollection::create): Ditto. 18 (WebCore::HTMLFormCollection::formControlElements): 19 Helper function for getting the array of FormAssociatedElements for this form. 20 (WebCore::HTMLFormCollection::formImageElements): 21 Helper function for getting the array of image elements for this form. 22 (WebCore::HTMLFormCollection::numberOfFormControlElements): 23 Helper function for getting the number of elements in this form. 24 (WebCore::HTMLFormCollection::calcLength): 25 Modified to use new helper functions defined for getting the FormAssociatedElements 26 and image elements array instead of static_cast to HTMLFormElement. 27 (WebCore::HTMLFormCollection::item): Ditto. 28 (WebCore::HTMLFormCollection::getNamedFormItem): Ditto. 29 (WebCore::HTMLFormCollection::updateNameCache): Ditto. 30 * html/HTMLFormCollection.h: 31 (WebCore): 32 (HTMLFormCollection): 33 * html/HTMLFormElement.h: 34 (WebCore::HTMLFormElement::imageElements): 35 New accessor for image elements array of form element. 36 Also HTMLFormCollection is not needed to be friend of HTMLFormElement as collection 37 does not access the form element memebers directly now. 38 1 39 2012-05-21 Yury Semikhatsky <yurys@chromium.org> 2 40 -
trunk/Source/WebCore/html/HTMLFormCollection.cpp
r116487 r117754 36 36 // calculation every time if anything has changed. 37 37 38 HTMLFormCollection::HTMLFormCollection(HTML FormElement* form)39 : HTMLCollection( form, FormControls)38 HTMLFormCollection::HTMLFormCollection(HTMLElement* base) 39 : HTMLCollection(base, FormControls) 40 40 , currentPos(0) 41 41 { 42 42 } 43 43 44 PassOwnPtr<HTMLFormCollection> HTMLFormCollection::create(HTML FormElement* form)45 { 46 return adoptPtr(new HTMLFormCollection( form));44 PassOwnPtr<HTMLFormCollection> HTMLFormCollection::create(HTMLElement* base) 45 { 46 return adoptPtr(new HTMLFormCollection(base)); 47 47 } 48 48 … … 51 51 } 52 52 53 const Vector<FormAssociatedElement*>& HTMLFormCollection::formControlElements() const 54 { 55 ASSERT(base()); 56 ASSERT(base()->hasTagName(formTag)); 57 return static_cast<HTMLFormElement*>(base())->associatedElements(); 58 } 59 60 const Vector<HTMLImageElement*>& HTMLFormCollection::formImageElements() const 61 { 62 ASSERT(base()); 63 ASSERT(base()->hasTagName(formTag)); 64 return static_cast<HTMLFormElement*>(base())->imageElements(); 65 } 66 67 unsigned HTMLFormCollection::numberOfFormControlElements() const 68 { 69 ASSERT(base()); 70 ASSERT(base()->hasTagName(formTag)); 71 return static_cast<HTMLFormElement*>(base())->length(); 72 } 73 53 74 unsigned HTMLFormCollection::calcLength() const 54 75 { 55 return static_cast<HTMLFormElement*>(base())->length();76 return numberOfFormControlElements(); 56 77 } 57 78 … … 72 93 } 73 94 74 Vector<FormAssociatedElement*>& elementsArray = static_cast<HTMLFormElement*>(base())->m_associatedElements;95 const Vector<FormAssociatedElement*>& elementsArray = formControlElements(); 75 96 unsigned currentIndex = m_cache.position; 76 97 … … 100 121 Element* HTMLFormCollection::getNamedFormItem(const QualifiedName& attrName, const String& name, int duplicateNumber) const 101 122 { 102 HTMLFormElement* form = static_cast<HTMLFormElement*>(base()); 103 104 if (!form) 105 return 0; 123 const Vector<FormAssociatedElement*>& elementsArray = formControlElements(); 106 124 107 125 bool foundInputElements = false; 108 for (unsigned i = 0; i < form->m_associatedElements.size(); ++i) {109 FormAssociatedElement* associatedElement = form->m_associatedElements[i];126 for (unsigned i = 0; i < elementsArray.size(); ++i) { 127 FormAssociatedElement* associatedElement = elementsArray[i]; 110 128 HTMLElement* element = toHTMLElement(associatedElement); 111 129 if (associatedElement->isEnumeratable() && element->getAttribute(attrName) == name) { … … 117 135 } 118 136 137 const Vector<HTMLImageElement*>& imageElementsArray = formImageElements(); 119 138 if (!foundInputElements) { 120 for (unsigned i = 0; i < form->m_imageElements.size(); ++i) {121 HTMLImageElement* element = form->m_imageElements[i];139 for (unsigned i = 0; i < imageElementsArray.size(); ++i) { 140 HTMLImageElement* element = imageElementsArray[i]; 122 141 if (element->getAttribute(attrName) == name) { 123 142 if (!duplicateNumber) … … 158 177 HashSet<AtomicStringImpl*> foundInputElements; 159 178 160 HTMLFormElement* f = static_cast<HTMLFormElement*>(base());161 162 for (unsigned i = 0; i < f->m_associatedElements.size(); ++i) {163 FormAssociatedElement* associatedElement = f->m_associatedElements[i];179 const Vector<FormAssociatedElement*>& elementsArray = formControlElements(); 180 181 for (unsigned i = 0; i < elementsArray.size(); ++i) { 182 FormAssociatedElement* associatedElement = elementsArray[i]; 164 183 if (associatedElement->isEnumeratable()) { 165 184 HTMLElement* element = toHTMLElement(associatedElement); … … 177 196 } 178 197 179 for (unsigned i = 0; i < f->m_imageElements.size(); ++i) { 180 HTMLImageElement* element = f->m_imageElements[i]; 198 const Vector<HTMLImageElement*>& imageElementsArray = formImageElements(); 199 for (unsigned i = 0; i < imageElementsArray.size(); ++i) { 200 HTMLImageElement* element = imageElementsArray[i]; 181 201 const AtomicString& idAttrVal = element->getIdAttribute(); 182 202 const AtomicString& nameAttrVal = element->getNameAttribute(); -
trunk/Source/WebCore/html/HTMLFormCollection.h
r104383 r117754 28 28 namespace WebCore { 29 29 30 class HTMLFormElement; 30 class FormAssociatedElement; 31 class HTMLElement; 32 class HTMLImageElement; 31 33 class QualifiedName; 32 33 34 // This class is just a big hack to find form elements even in malformed HTML elements. 34 35 // The famous <table><tr><form><td> problem. … … 36 37 class HTMLFormCollection : public HTMLCollection { 37 38 public: 38 static PassOwnPtr<HTMLFormCollection> create(HTML FormElement*);39 static PassOwnPtr<HTMLFormCollection> create(HTMLElement*); 39 40 40 41 virtual ~HTMLFormCollection(); … … 46 47 47 48 private: 48 HTMLFormCollection(HTML FormElement*);49 HTMLFormCollection(HTMLElement*); 49 50 50 51 virtual void updateNameCache() const; … … 54 55 Element* getNamedFormItem(const QualifiedName& attrName, const String& name, int duplicateNumber) const; 55 56 57 const Vector<FormAssociatedElement*>& formControlElements() const; 58 const Vector<HTMLImageElement*>& formImageElements() const; 59 unsigned numberOfFormControlElements() const; 60 56 61 mutable int currentPos; 57 62 }; -
trunk/Source/WebCore/html/HTMLFormElement.h
r117195 r117754 111 111 112 112 const Vector<FormAssociatedElement*>& associatedElements() const { return m_associatedElements; } 113 113 const Vector<HTMLImageElement*>& imageElements() const { return m_imageElements; } 114 114 115 void getTextFieldValues(StringPairVector& fieldNamesAndValues) const; 115 116 … … 146 147 bool checkInvalidControlsAndCollectUnhandled(Vector<RefPtr<FormAssociatedElement> >&); 147 148 148 friend class HTMLFormCollection;149 150 149 typedef HashMap<RefPtr<AtomicStringImpl>, RefPtr<HTMLFormControlElement> > AliasMap; 151 150
Note: See TracChangeset
for help on using the changeset viewer.