WinCairo build fails to link.
[WebKit-https.git] / Source / WebKit / chromium / src / WebSearchableFormData.cpp
index d6c89a9..d0d9c65 100644 (file)
@@ -64,14 +64,18 @@ void GetFormEncoding(const HTMLFormElement* form, TextEncoding* encoding)
         if (encoding->isValid())
             return;
     }
-    *encoding = TextEncoding(form->document()->loader()->writer()->encoding());
+    if (!form->document()->loader())
+         return;
+    *encoding = TextEncoding(form->document()->encoding());
 }
 
 // Returns true if the submit request results in an HTTP URL.
 bool IsHTTPFormSubmit(const HTMLFormElement* form)
 {
+    // FIXME: This function is insane. This is an overly complicated way to get this information.
     String action(form->action());
-    return form->document()->frame()->loader()->completeURL(action.isNull() ? "" : action).protocol() == "http";
+    // The isNull() check is trying to avoid completeURL returning KURL() when passed a null string.
+    return form->document()->completeURL(action.isNull() ? "" : action).protocolIs("http");
 }
 
 // If the form does not have an activated submit button, the first submit
@@ -95,15 +99,15 @@ HTMLFormControlElement* GetButtonToActivate(HTMLFormElement* form)
 
 // Returns true if the selected state of all the options matches the default
 // selected state.
-bool IsSelectInDefaultState(const HTMLSelectElement* select)
+bool IsSelectInDefaultState(HTMLSelectElement* select)
 {
-    const Vector<Element*>& listItems = select->listItems();
+    const Vector<HTMLElement*>& listItems = select->listItems();
     if (select->multiple() || select->size() > 1) {
-        for (Vector<Element*>::const_iterator i(listItems.begin()); i != listItems.end(); ++i) {
+        for (Vector<HTMLElement*>::const_iterator i(listItems.begin()); i != listItems.end(); ++i) {
             if (!(*i)->hasLocalName(HTMLNames::optionTag))
                 continue;
-            const HTMLOptionElement* optionElement = static_cast<const HTMLOptionElement*>(*i);
-            if (optionElement->selected() != optionElement->defaultSelected())
+            HTMLOptionElement* optionElement = toHTMLOptionElement(*i);
+            if (optionElement->selected() != optionElement->hasAttribute(selectedAttr))
                 return false;
         }
         return true;
@@ -111,12 +115,12 @@ bool IsSelectInDefaultState(const HTMLSelectElement* select)
 
     // The select is rendered as a combobox (called menulist in WebKit). At
     // least one item is selected, determine which one.
-    const HTMLOptionElement* initialSelected = 0;
-    for (Vector<Element*>::const_iterator i(listItems.begin()); i != listItems.end(); ++i) {
+    HTMLOptionElement* initialSelected = 0;
+    for (Vector<HTMLElement*>::const_iterator i(listItems.begin()); i != listItems.end(); ++i) {
         if (!(*i)->hasLocalName(HTMLNames::optionTag))
             continue;
-        const HTMLOptionElement* optionElement = static_cast<const HTMLOptionElement*>(*i);
-        if (optionElement->defaultSelected()) {
+        HTMLOptionElement* optionElement = toHTMLOptionElement(*i);
+        if (optionElement->hasAttribute(selectedAttr)) {
             // The page specified the option to select.
             initialSelected = optionElement;
             break;
@@ -124,21 +128,21 @@ bool IsSelectInDefaultState(const HTMLSelectElement* select)
         if (!initialSelected)
             initialSelected = optionElement;
     }
-    return initialSelected ? initialSelected->selected() : true;
+    return !initialSelected || initialSelected->selected();
 }
 
 // Returns true if the form element is in its default state, false otherwise.
 // The default state is the state of the form element on initial load of the
 // page, and varies depending upon the form element. For example, a checkbox is
 // in its default state if the checked state matches the state of the checked attribute.
-bool IsInDefaultState(const HTMLFormControlElement* formElement)
+bool IsInDefaultState(HTMLFormControlElement* formElement)
 {
     if (formElement->hasTagName(HTMLNames::inputTag)) {
-        const HTMLInputElement* inputElement = static_cast<const HTMLInputElement*>(formElement);
+        const HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(formElement);
         if (inputElement->isCheckbox() || inputElement->isRadioButton())
             return inputElement->checked() == inputElement->hasAttribute(checkedAttr);
     } else if (formElement->hasTagName(HTMLNames::selectTag))
-        return IsSelectInDefaultState(static_cast<const HTMLSelectElement*>(formElement));
+        return IsSelectInDefaultState(static_cast<HTMLSelectElement*>(formElement));
     return true;
 }
 
@@ -158,7 +162,7 @@ HTMLInputElement* findSuitableSearchInputElement(const HTMLFormElement* form)
 
         HTMLFormControlElement* formElement = static_cast<HTMLFormControlElement*>(*i);
 
-        if (formElement->disabled() || formElement->name().isNull())
+        if (formElement->isDisabledFormControl() || formElement->name().isNull())
             continue;
 
         if (!IsInDefaultState(formElement) || formElement->hasTagName(HTMLNames::textareaTag))
@@ -201,7 +205,7 @@ bool buildSearchString(const HTMLFormElement* form, Vector<char>* encodedString,
 
         HTMLFormControlElement* formElement = static_cast<HTMLFormControlElement*>(*i);
 
-        if (formElement->disabled() || formElement->name().isNull())
+        if (formElement->isDisabledFormControl() || formElement->name().isNull())
             continue;
 
         FormDataList dataList(*encoding);
@@ -236,10 +240,6 @@ namespace WebKit {
 WebSearchableFormData::WebSearchableFormData(const WebFormElement& form, const WebInputElement& selectedInputElement)
 {
     RefPtr<HTMLFormElement> formElement = form.operator PassRefPtr<HTMLFormElement>();
-    const Frame* frame = formElement->document()->frame();
-    if (!frame)
-        return;
-
     HTMLInputElement* inputElement = selectedInputElement.operator PassRefPtr<HTMLInputElement>().get();
 
     // Only consider forms that GET data.
@@ -287,7 +287,7 @@ WebSearchableFormData::WebSearchableFormData(const WebFormElement& form, const W
         return;
 
     String action(formElement->action());
-    KURL url(frame->loader()->completeURL(action.isNull() ? "" : action));
+    KURL url(formElement->document()->completeURL(action.isNull() ? "" : action));
     RefPtr<FormData> formData = FormData::create(encodedString);
     url.setQuery(formData->flattenToString());
     m_url = url;