diff options
author | estade <estade@chromium.org> | 2015-04-27 13:05:17 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-27 20:05:22 +0000 |
commit | aa3219ce27ef5471c19670fe5145b136925cbc89 (patch) | |
tree | f6df2ab9bf44f52e682d0f0d7ebfd54a94666062 | |
parent | 70027abd1a6d6e23f05c40128203b95f13b6761b (diff) | |
download | chromium_src-aa3219ce27ef5471c19670fe5145b136925cbc89.zip chromium_src-aa3219ce27ef5471c19670fe5145b136925cbc89.tar.gz chromium_src-aa3219ce27ef5471c19670fe5145b136925cbc89.tar.bz2 |
Limit form-less Autofilling to pages that look like checkout pages.
This should hopefully stem the tide of false positives on non-checkout pages, while preserving desired behavior on Best Buy and Apple checkout.
Fixing FormStructureBrowserTests: I went back and added <form>s that were present in the source pages but not in the local copies. I also added the original <title> tags, except for ones that did /not/ include any of the checkout keywords. For these, I added the checkout keywords to the title, so that the test still had some value (instead of passing trivially because the title was "Google Calendar" and not something like "Payment information").
BUG=471090,477466
Review URL: https://codereview.chromium.org/1081803003
Cr-Commit-Position: refs/heads/master@{#327108}
32 files changed, 920 insertions, 90 deletions
diff --git a/chrome/renderer/autofill/form_autofill_browsertest.cc b/chrome/renderer/autofill/form_autofill_browsertest.cc index 394aef8..88d8994 100644 --- a/chrome/renderer/autofill/form_autofill_browsertest.cc +++ b/chrome/renderer/autofill/form_autofill_browsertest.cc @@ -90,6 +90,7 @@ const char kFormHtml[] = "</FORM>"; const char kUnownedFormHtml[] = + "<HEAD><TITLE>enter shipping info</TITLE></HEAD>" "<INPUT type='text' id='firstname'/>" "<INPUT type='text' id='lastname'/>" "<INPUT type='hidden' id='imhidden'/>" @@ -1037,6 +1038,7 @@ class FormAutofillTest : public ChromeRenderViewTest { EXPECT_TRUE( FindFormAndFieldForFormControlElement(firstname, &form, &field)); EXPECT_EQ(GURL(web_frame->document().url()), form.origin); + EXPECT_FALSE(form.origin.is_empty()); if (!unowned) { EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); EXPECT_EQ(GURL("http://buh.com"), form.action); @@ -1131,6 +1133,7 @@ class FormAutofillTest : public ChromeRenderViewTest { EXPECT_TRUE( FindFormAndFieldForFormControlElement(firstname, &form, &field)); EXPECT_EQ(GURL(web_frame->document().url()), form.origin); + EXPECT_FALSE(form.origin.is_empty()); if (!unowned) { EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); EXPECT_EQ(GURL("http://buh.com"), form.action); @@ -1918,6 +1921,7 @@ TEST_F(FormAutofillTest, WebFormElementToFormData) { &field)); EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); EXPECT_EQ(GURL(frame->document().url()), form.origin); + EXPECT_FALSE(form.origin.is_empty()); EXPECT_EQ(GURL("http://cnn.com"), form.action); const std::vector<FormFieldData>& fields = form.fields; @@ -2030,6 +2034,7 @@ TEST_F(FormAutofillTest, ExtractMultipleForms) { const FormData& form = forms[0]; EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); EXPECT_EQ(GURL(web_frame->document().url()), form.origin); + EXPECT_FALSE(form.origin.is_empty()); EXPECT_EQ(GURL("http://cnn.com"), form.action); const std::vector<FormFieldData>& fields = form.fields; @@ -2055,6 +2060,7 @@ TEST_F(FormAutofillTest, ExtractMultipleForms) { const FormData& form2 = forms[1]; EXPECT_EQ(ASCIIToUTF16("TestForm2"), form2.name); EXPECT_EQ(GURL(web_frame->document().url()), form2.origin); + EXPECT_FALSE(form.origin.is_empty()); EXPECT_EQ(GURL("http://zoo.com"), form2.action); const std::vector<FormFieldData>& fields2 = form2.fields; @@ -2277,6 +2283,7 @@ TEST_F(FormAutofillTest, FindFormForInputElement) { TEST_F(FormAutofillTest, FindFormForInputElementForUnownedForm) { TestFindFormForInputElement( + "<HEAD><TITLE>delivery recipient</TITLE></HEAD>" "<INPUT type='text' id='firstname' value='John'/>" "<INPUT type='text' id='lastname' value='Smith'/>" "<INPUT type='text' id='email' value='john@example.com'" @@ -2304,6 +2311,7 @@ TEST_F(FormAutofillTest, FindFormForTextAreaElement) { TEST_F(FormAutofillTest, FindFormForTextAreaElementForUnownedForm) { TestFindFormForTextAreaElement( + "<HEAD><TITLE>delivery address</TITLE></HEAD>" "<INPUT type='text' id='firstname' value='John'/>" "<INPUT type='text' id='lastname' value='Smith'/>" "<INPUT type='text' id='email' value='john@example.com'" @@ -3371,6 +3379,7 @@ TEST_F(FormAutofillTest, FillFormMaxLength) { TEST_F(FormAutofillTest, FillFormMaxLengthForUnownedForm) { TestFillFormMaxLength( + "<HEAD><TITLE>delivery recipient info</TITLE></HEAD>" "<INPUT type='text' id='firstname' maxlength='5'/>" "<INPUT type='text' id='lastname' maxlength='7'/>" "<INPUT type='text' id='email' maxlength='9'/>" @@ -3383,6 +3392,7 @@ TEST_F(FormAutofillTest, FillFormMaxLengthForUnownedForm) { // maxlength (defined in WebKit.) TEST_F(FormAutofillTest, FillFormNegativeMaxLength) { TestFillFormNegativeMaxLength( + "<HEAD><TITLE>delivery recipient info</TITLE></HEAD>" "<FORM name='TestForm' action='http://buh.com' method='post'>" " <INPUT type='text' id='firstname' maxlength='-1'/>" " <INPUT type='text' id='lastname' maxlength='-10'/>" @@ -3394,6 +3404,7 @@ TEST_F(FormAutofillTest, FillFormNegativeMaxLength) { TEST_F(FormAutofillTest, FillFormNegativeMaxLengthForUnownedForm) { TestFillFormNegativeMaxLength( + "<HEAD><TITLE>delivery recipient info</TITLE></HEAD>" "<INPUT type='text' id='firstname' maxlength='-1'/>" "<INPUT type='text' id='lastname' maxlength='-10'/>" "<INPUT type='text' id='email' maxlength='-13'/>" @@ -3414,6 +3425,7 @@ TEST_F(FormAutofillTest, FillFormEmptyName) { TEST_F(FormAutofillTest, FillFormEmptyNameForUnownedForm) { TestFillFormEmptyName( + "<HEAD><TITLE>delivery recipient info</TITLE></HEAD>" "<INPUT type='text' id='firstname'/>" "<INPUT type='text' id='lastname'/>" "<INPUT type='text' id='email'/>" @@ -3440,6 +3452,7 @@ TEST_F(FormAutofillTest, FillFormEmptyFormNames) { TEST_F(FormAutofillTest, FillFormEmptyFormNamesForUnownedForm) { TestFillFormEmptyFormNames( + "<HEAD><TITLE>enter delivery preferences</TITLE></HEAD>" "<INPUT type='text' id='firstname'/>" "<INPUT type='text' id='middlename'/>" "<INPUT type='text' id='lastname'/>" @@ -3463,7 +3476,6 @@ TEST_F(FormAutofillTest, ThreePartPhone) { " <input type='submit' name='reply-send' value='Send'>" "</FORM>"); - WebFrame* frame = GetMainFrame(); ASSERT_NE(nullptr, frame); @@ -3479,6 +3491,7 @@ TEST_F(FormAutofillTest, ThreePartPhone) { nullptr)); EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); EXPECT_EQ(GURL(frame->document().url()), form.origin); + EXPECT_FALSE(form.origin.is_empty()); EXPECT_EQ(GURL("http://cnn.com"), form.action); const std::vector<FormFieldData>& fields = form.fields; @@ -3593,11 +3606,13 @@ TEST_F(FormAutofillTest, FillFormNonEmptyField) { } TEST_F(FormAutofillTest, FillFormNonEmptyFieldForUnownedForm) { - TestFillFormNonEmptyField("<INPUT type='text' id='firstname'/>" - "<INPUT type='text' id='lastname'/>" - "<INPUT type='text' id='email'/>" - "<INPUT type='submit' value='Send'/>", - true); + TestFillFormNonEmptyField( + "<HEAD><TITLE>delivery recipient info</TITLE></HEAD>" + "<INPUT type='text' id='firstname'/>" + "<INPUT type='text' id='lastname'/>" + "<INPUT type='text' id='email'/>" + "<INPUT type='submit' value='Send'/>", + true); } TEST_F(FormAutofillTest, ClearFormWithNode) { @@ -3622,6 +3637,7 @@ TEST_F(FormAutofillTest, ClearFormWithNode) { TEST_F(FormAutofillTest, ClearFormWithNodeForUnownedForm) { TestClearFormWithNode( + "<HEAD><TITLE>store checkout</TITLE></HEAD>" " <!-- Indented on purpose //-->" " <INPUT type='text' id='firstname' value='Wyatt'/>" " <INPUT type='text' id='lastname' value='Earp'/>" @@ -3657,6 +3673,7 @@ TEST_F(FormAutofillTest, ClearFormWithNodeContainingSelectOne) { TEST_F(FormAutofillTest, ClearFormWithNodeContainingSelectOneForUnownedForm) { TestClearFormWithNodeContainingSelectOne( + "<HEAD><TITLE>store checkout</TITLE></HEAD>" "<INPUT type='text' id='firstname' value='Wyatt'/>" "<INPUT type='text' id='lastname' value='Earp'/>" "<SELECT id='state' name='state'>" @@ -3683,6 +3700,7 @@ TEST_F(FormAutofillTest, ClearPreviewedFormWithElement) { TEST_F(FormAutofillTest, ClearPreviewedFormWithElementForUnownedForm) { TestClearPreviewedFormWithElement( + "<HEAD><TITLE>store checkout</TITLE></HEAD>" "<INPUT type='text' id='firstname' value='Wyatt'/>" "<INPUT type='text' id='lastname'/>" "<INPUT type='text' id='email'/>" @@ -3706,6 +3724,7 @@ TEST_F(FormAutofillTest, ClearPreviewedFormWithNonEmptyInitiatingNode) { TEST_F(FormAutofillTest, ClearPreviewedFormWithNonEmptyInitiatingNodeForUnownedForm) { TestClearPreviewedFormWithNonEmptyInitiatingNode( + "<HEAD><TITLE>shipping details</TITLE></HEAD>" "<INPUT type='text' id='firstname' value='W'/>" "<INPUT type='text' id='lastname'/>" "<INPUT type='text' id='email'/>" @@ -3729,6 +3748,7 @@ TEST_F(FormAutofillTest, ClearPreviewedFormWithAutofilledInitiatingNode) { TEST_F(FormAutofillTest, ClearPreviewedFormWithAutofilledInitiatingNodeForUnownedForm) { TestClearPreviewedFormWithAutofilledInitiatingNode( + "<HEAD><TITLE>shipping details</TITLE></HEAD>" "<INPUT type='text' id='firstname' value='W'/>" "<INPUT type='text' id='lastname'/>" "<INPUT type='text' id='email'/>" @@ -3751,6 +3771,7 @@ TEST_F(FormAutofillTest, ClearOnlyAutofilledFields) { TEST_F(FormAutofillTest, ClearOnlyAutofilledFieldsForUnownedForm) { TestClearOnlyAutofilledFields( + "<HEAD><TITLE>shipping details</TITLE></HEAD>" "<INPUT type='text' id='firstname' value='Wyatt'/>" "<INPUT type='text' id='lastname' value='Earp'/>" "<INPUT type='email' id='email' value='wyatt@earp.com'/>" @@ -3913,9 +3934,9 @@ TEST_F(FormAutofillTest, const ExtractMask extract_mask = static_cast<ExtractMask>(EXTRACT_VALUE | EXTRACT_OPTIONS); - const GURL dummy_origin("http://www.example.com"); - LoadHTML("<DIV>" + LoadHTML("<HEAD><TITLE>delivery info</TITLE></HEAD>" + "<DIV>" " <FIELDSET>" " <LABEL for='firstname'>First name:</LABEL>" " <LABEL for='lastname'>Last name:</LABEL>" @@ -3938,11 +3959,11 @@ TEST_F(FormAutofillTest, FormData form; EXPECT_TRUE(UnownedFormElementsAndFieldSetsToFormData( - fieldsets, control_elements, nullptr, dummy_origin, extract_mask, &form, - nullptr)); + fieldsets, control_elements, nullptr, frame->document(), extract_mask, + &form, nullptr)); EXPECT_TRUE(form.name.empty()); - EXPECT_EQ(dummy_origin, form.origin); + EXPECT_EQ(frame->document().url(), form.origin); EXPECT_FALSE(form.action.is_valid()); const std::vector<FormFieldData>& fields = form.fields; @@ -3975,9 +3996,9 @@ TEST_F(FormAutofillTest, const ExtractMask extract_mask = static_cast<ExtractMask>(EXTRACT_VALUE | EXTRACT_OPTIONS); - const GURL dummy_origin("http://www.example.com"); - LoadHTML("<DIV>" + LoadHTML("<HEAD><TITLE>shipping details</TITLE></HEAD>" + "<DIV>" " <FIELDSET>" " <LABEL for='firstname'>First name:</LABEL>" " <LABEL for='lastname'>Last name:</LABEL>" @@ -3998,11 +4019,11 @@ TEST_F(FormAutofillTest, FormData form; EXPECT_TRUE(UnownedFormElementsAndFieldSetsToFormData( - fieldsets, control_elements, nullptr, dummy_origin, extract_mask, &form, - nullptr)); + fieldsets, control_elements, nullptr, frame->document(), extract_mask, + &form, nullptr)); EXPECT_TRUE(form.name.empty()); - EXPECT_EQ(dummy_origin, form.origin); + EXPECT_EQ(frame->document().url(), form.origin); EXPECT_FALSE(form.action.is_valid()); const std::vector<FormFieldData>& fields = form.fields; @@ -4034,7 +4055,6 @@ TEST_F(FormAutofillTest, UnownedFormElementsAndFieldSetsToFormDataWithForm) { const ExtractMask extract_mask = static_cast<ExtractMask>(EXTRACT_VALUE | EXTRACT_OPTIONS); - const GURL dummy_origin("http://www.example.com"); LoadHTML(kFormHtml); @@ -4048,8 +4068,8 @@ TEST_F(FormAutofillTest, UnownedFormElementsAndFieldSetsToFormDataWithForm) { FormData form; EXPECT_FALSE(UnownedFormElementsAndFieldSetsToFormData( - fieldsets, control_elements, nullptr, dummy_origin, extract_mask, &form, - nullptr)); + fieldsets, control_elements, nullptr, frame->document(), extract_mask, + &form, nullptr)); } } // namespace autofill diff --git a/chrome/test/data/autofill/autofill_noform_dynamic.html b/chrome/test/data/autofill/autofill_noform_dynamic.html index 65ded26..bd3e6eb 100644 --- a/chrome/test/data/autofill/autofill_noform_dynamic.html +++ b/chrome/test/data/autofill/autofill_noform_dynamic.html @@ -2,7 +2,7 @@ <!-- Autofill test with dynamically created fields, and without a form tag. --> <html> <head> - <title>Dynamic Autofill Test - No Form</title> + <title>Dynamic Autofill Test - No Form - Collects address information</title> <script> function AddFields() { var fields = document.getElementById("fields"); diff --git a/chrome/test/data/autofill/heuristics/input/25_checkout_m_llbean.com.html b/chrome/test/data/autofill/heuristics/input/25_checkout_m_llbean.com.html index 7df7e9f..830b474 100644 --- a/chrome/test/data/autofill/heuristics/input/25_checkout_m_llbean.com.html +++ b/chrome/test/data/autofill/heuristics/input/25_checkout_m_llbean.com.html @@ -1,3 +1,5 @@ +<head><title>L.L.Bean Secure Checkout:</title></head> +<form id="stepShippingForm" name="stepShippingForm" class="formElements container_12" autocomplete="off"> <div> <div><select id="shipPersonTitle" name="_1_personTitle" selectedtitle=""> <option value="" selected="selected">Title (optional)</option> <option value="Mr."> Mr.</option> <option value="Mrs."> Mrs.</option> <option value="Ms."> Ms.</option> <option value="Dr."> Dr.</option> <option value="Sir"> Sir</option> </select> </div> <div><label for="shipFirstName">First Name </label><input value="" id="shipFirstName" maxlength="20" name="_1_firstName" type="text" autocomplete="off" autocapitalize="on" autocorrect="off"> <span></span><div></div></div> @@ -30,3 +32,4 @@ <div id="shipLocaleMessage"></div><br> <div> <span> <div><input name="un_jtt_cktbtn_0" type="submit" value="Continue to Billing Address" myclass=""></div> </span> <div><a data-address="" data-step="payment">Return to Previous Recipient</a></div> <div><a data-address="" data-step="payment" href="/shoppingbag.html">Return to Shopping Bag</a></div> <div><a data-address="" data-step="payment" href="/checkout.html#payment">Cancel</a></div> </div> </div> +</form> diff --git a/chrome/test/data/autofill/heuristics/input/b465571.html b/chrome/test/data/autofill/heuristics/input/b465571.html index 132e736..ae1162d 100644 --- a/chrome/test/data/autofill/heuristics/input/b465571.html +++ b/chrome/test/data/autofill/heuristics/input/b465571.html @@ -1,3 +1,5 @@ + +<form id="checkoutCommand" class="stdForm" action="/checkout" method="post"> <fieldset id="shipAdr"> <ol> <li> <label for="address.name">* Name <span class="fText">(first and last)</span>: </label> @@ -93,3 +95,4 @@ </span> </li> </ol> +</form> diff --git a/chrome/test/data/autofill/heuristics/input/bug_454366.html b/chrome/test/data/autofill/heuristics/input/bug_454366.html index 6ebcd47..641ca98 100644 --- a/chrome/test/data/autofill/heuristics/input/bug_454366.html +++ b/chrome/test/data/autofill/heuristics/input/bug_454366.html @@ -1,5 +1,5 @@ <html> -<head></head> +<head><title>Google+ - terms to make this test non-trivial: payment checkout address</title></head> <body> <input type="text name="hist_state" id="hist_state" style="display: none;"> <div class="g-h-f-ci g-h-f-Au"> diff --git a/chrome/test/data/autofill/heuristics/input/bug_454366b.html b/chrome/test/data/autofill/heuristics/input/bug_454366b.html index 32133d4..e87252b 100644 --- a/chrome/test/data/autofill/heuristics/input/bug_454366b.html +++ b/chrome/test/data/autofill/heuristics/input/bug_454366b.html @@ -1,5 +1,5 @@ <html> -<head></head> +<head><title>Google+ - terms to make this test non-trivial: payment checkout address</title></head> <body> <input type="text name="hist_state" id="hist_state" style="display: none;"> <div class="g-h-f-ci g-h-f-Au"> diff --git a/chrome/test/data/autofill/heuristics/input/bug_459132.html b/chrome/test/data/autofill/heuristics/input/bug_459132.html index 9df9803..d23dbbb 100644 --- a/chrome/test/data/autofill/heuristics/input/bug_459132.html +++ b/chrome/test/data/autofill/heuristics/input/bug_459132.html @@ -1,6 +1,14 @@ -<div id="fb_mod_personal" class="lh_fbMargin clearfix"> +<form data-dojo-attach-point="containerNode" data-dojo-attach-event="onreset:_onReset,onsubmit:_onSubmit" name="FeedbackForm" lang="en" action="https://www.lufthansa.com/online/portal/lh/de/help_contact/feedback/!ut/p/c5/04_SB8K8xLLM9MSSzPy8xBz9CP0os3hHg2B_U3d350DfMA9jA0czF5OgUFNLC9MAU6B8JE75gAADYnQb4ACOhHR76Uel5-QnAV0ZDnI3bne4mOKXB7kTJI_HJX4e-bmp-gW5oRGVwZ66AI5DSgQ!/dl3/d3/L0lJSklna2tra2tra25wQSEvb013d0FBQVlnQUNFSVFRaUtVUXhnb1lCem5KUUZnQSEvNEJuNHNvMFZnTGE5Mmd6a0xLQnl3ZyEhLzZfQTBTTzVHR0NRTVZIMzBBNkQ0UlU1OTg1UDUvN19BMFNPNUdHQ1FNVkgzMEE2RDRSVTU5MEkwMS9zYS5GZWVkYmFja0lucHV0QWN0aW9uL25vcm1hbC9EZWZhdWx0/?l=en&cid=18002&action=FeedbackInputAction&command=sumbitForm&p=LH&s=DE&l=en&cid=18002&action=FeedbackInputAction&command=sumbitForm&p=LH&s=DE" id="fb_form" method="post" widgetid="fb_form"> + + <!-- Hidden input to disable content header portlet--> + <input type="hidden" name="formSubmitted" value="true"> + <input type="hidden" value="" name="formtype" id="formTypeInput"> + <input type="hidden" name="isFlynet" value="false"> + <input type="hidden" name="categoryId" id="categoryId" value=""> + + <div id="fb_mod_personal" class="lh_fbMargin clearfix"> <div class="fieldwrapper wide"> - <h1>Your personal data</h1> + <h1>Your personal data</h1> </div> <span class="overwriteMessage">Please note that any changes will not be saved to your profile.</span> @@ -15,13 +23,14 @@ <div class="cl"> <div class="fieldwrapper"> <label for="firstname" class="firstname">First name</label> - <div id="firstname"><div class="dijit dijitReset dijitInline dijitLeft fb_protect firstname dijitTextBox dijitValidationTextBox dijitTextBoxIncomplete dijitValidationTextBoxIncomplete dijitIncomplete" id="widget_firstname" role="presentation" widgetid="firstname"><div class="dijitReset dijitValidationContainer"><input class="dijitReset dijitInputField dijitValidationIcon dijitValidationInner" value="Χ " type="text" tabindex="-1" readonly="readonly" role="presentation"></div><div class="dijitReset dijitInputField dijitInputContainer"><input class="dijitReset dijitInputInner" data-dojo-attach-point="textbox,focusNode" autocomplete="off" name="FirstName_1" type="text" tabindex="0" id="firstname" aria-required="true" maxlength="50" value="" aria-invalid="true"></div></div></div> + <div id="firstname"><div class="dijit dijitReset dijitInline dijitLeft fb_protect firstname dijitTextBox dijitValidationTextBox dijitTextBoxError dijitValidationTextBoxError dijitError" id="widget_firstname" role="presentation" widgetid="firstname"><div class="dijitReset dijitValidationContainer"><input class="dijitReset dijitInputField dijitValidationIcon dijitValidationInner" value="Χ " type="text" tabindex="-1" readonly="readonly" role="presentation"></div><div class="dijitReset dijitInputField dijitInputContainer"><input class="dijitReset dijitInputInner" data-dojo-attach-point="textbox,focusNode" autocomplete="off" name="FirstName_1" type="text" tabindex="0" id="firstname" aria-required="true" maxlength="50" value="" aria-invalid="true"></div></div></div> </div> </div> + <div class="cl"> <div class="fieldwrapper"> <label for="lastname" class="lastname">Last name</label> - <div id="lastname"><div class="dijit dijitReset dijitInline dijitLeft fb_protect lastname dijitTextBox dijitValidationTextBox dijitTextBoxIncomplete dijitValidationTextBoxIncomplete dijitIncomplete" id="widget_lastname" role="presentation" widgetid="lastname"><div class="dijitReset dijitValidationContainer"><input class="dijitReset dijitInputField dijitValidationIcon dijitValidationInner" value="Χ " type="text" tabindex="-1" readonly="readonly" role="presentation"></div><div class="dijitReset dijitInputField dijitInputContainer"><input class="dijitReset dijitInputInner" data-dojo-attach-point="textbox,focusNode" autocomplete="off" name="LastName_1" type="text" tabindex="0" id="lastname" aria-required="true" maxlength="50" value="" aria-invalid="true"></div></div></div> + <div id="lastname"><div class="dijit dijitReset dijitInline dijitLeft fb_protect lastname dijitTextBox dijitValidationTextBox dijitTextBoxIncomplete dijitValidationTextBoxIncomplete dijitIncomplete" id="widget_lastname" role="presentation" widgetid="lastname"><div class="dijitReset dijitValidationContainer"><input class="dijitReset dijitInputField dijitValidationIcon dijitValidationInner" value="Χ " type="text" tabindex="-1" readonly="readonly" role="presentation"></div><div class="dijitReset dijitInputField dijitInputContainer"><input class="dijitReset dijitInputInner" data-dojo-attach-point="textbox,focusNode" autocomplete="off" name="LastName_1" type="text" tabindex="0" id="lastname" aria-required="true" maxlength="50" value="" aria-invalid="false"></div></div></div> </div> </div> </div> @@ -30,16 +39,19 @@ <div class="cl"> <div class="fieldwrapper"> <label for="email" class="email">Email</label> - <div id="email"><div class="dijit dijitReset dijitInline dijitLeft fb_protect email dijitTextBox dijitValidationTextBox dijitTextBoxIncomplete dijitValidationTextBoxIncomplete dijitIncomplete" id="widget_email" role="presentation" widgetid="email"><div class="dijitReset dijitValidationContainer"><input class="dijitReset dijitInputField dijitValidationIcon dijitValidationInner" value="Χ " type="text" tabindex="-1" readonly="readonly" role="presentation"></div><div class="dijitReset dijitInputField dijitInputContainer"><input class="dijitReset dijitInputInner" data-dojo-attach-point="textbox,focusNode" autocomplete="off" name="Email_1" type="text" tabindex="0" id="email" aria-required="true" value="" aria-invalid="true"></div></div></div> + <div id="email"><div class="dijit dijitReset dijitInline dijitLeft fb_protect email dijitTextBox dijitValidationTextBox dijitTextBoxIncomplete dijitValidationTextBoxIncomplete dijitIncomplete dijitTextBoxFocused dijitValidationTextBoxFocused dijitTextBoxIncompleteFocused dijitValidationTextBoxIncompleteFocused dijitIncompleteFocused dijitFocused" id="widget_email" role="presentation" widgetid="email"><div class="dijitReset dijitValidationContainer"><input class="dijitReset dijitInputField dijitValidationIcon dijitValidationInner" value="Χ " type="text" tabindex="-1" readonly="readonly" role="presentation"></div><div class="dijitReset dijitInputField dijitInputContainer"><input class="dijitReset dijitInputInner" data-dojo-attach-point="textbox,focusNode" autocomplete="off" name="Email_1" type="text" tabindex="0" id="email" aria-required="true" value="" aria-invalid="false"></div></div></div> </div> </div> + <div class="cl"> <div class="fieldwrapper"> <label for="r_email" class="email">Re-enter email</label> <div id="r_email"><div class="dijit dijitReset dijitInline dijitLeft dijitTextBox dijitValidationTextBox fb_protect email" id="widget_r_email" role="presentation" widgetid="r_email"><div class="dijitReset dijitValidationContainer"><input class="dijitReset dijitInputField dijitValidationIcon dijitValidationInner" value="Χ " type="text" tabindex="-1" readonly="readonly" role="presentation"></div><div class="dijitReset dijitInputField dijitInputContainer"><input class="dijitReset dijitInputInner" data-dojo-attach-point="textbox,focusNode" autocomplete="off" name="rEmail_1" type="text" tabindex="0" id="r_email" aria-required="true" value="" aria-invalid="false"></div></div></div> </div> </div> + </div> + <div class="subtpl clear"> <div class="cl"> <div class="fieldwrapper"> @@ -48,4 +60,742 @@ </div> </div> </div> -/div> +</div> + <div id="fb_mod_catSelector" class="lh_fbMargin clearfix"> + <div class="subtpl"> + <div class="cl w50 firstColumn"> + <h1>What can we do for you?</h1> + <table class="dijit dijitReset dijitInline dijitLeft dijitDownArrowButton fb_protect cat_select1 dijitSelectFixedWidth dijitValidationTextBoxFixedWidth dijitSelect dijitValidationTextBox dijitSelectIncomplete dijitValidationTextBoxIncomplete dijitIncomplete" data-dojo-attach-point="_buttonNode,tableNode,focusNode,_popupStateNode" cellspacing="0" cellpadding="0" role="listbox" aria-haspopup="true" tabindex="0" id="CAT_SELECT_1" aria-required="true" widgetid="CAT_SELECT_1" aria-expanded="false" aria-invalid="true" style="-webkit-user-select: none; display: block; width: auto; font-size: 14px; padding: 1px 0px 1px 10px; margin: 10px 0px 0px;"><tbody role="presentation"><tr role="presentation"><td class="dijitReset dijitStretch dijitButtonContents" role="presentation"><div class="dijitReset dijitInputField dijitButtonText" data-dojo-attach-point="containerNode,textDirNode" role="presentation"><span role="option" class="dijitReset dijitInline dijitSelectLabel dijitValidationTextBoxLabel ">Please select a category</span></div><div class="dijitReset dijitValidationContainer"><input class="dijitReset dijitInputField dijitValidationIcon dijitValidationInner" value="Χ " type="text" tabindex="-1" readonly="readonly" role="presentation"></div><input type="hidden" name="Category_1" data-dojo-attach-point="valueNode" value=" " aria-hidden="true"></td><td class="dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer" data-dojo-attach-point="titleNode" role="presentation"><input class="dijitReset dijitInputField dijitArrowButtonInner" value="▼ " type="text" tabindex="-1" readonly="readonly" role="presentation"></td></tr></tbody></table></div> + + <div class="cr w50 secondColumn"> + <p class="x-hidden"> + <iframe src="" id="iInterceptor"></iframe> + </p> + </div> + </div> + <div class="selectorQuestion fb_borderSeperator x-hidden clear"></div> +</div> + + <div id="fb_mod_dynamicWrapper" class="lh_fbMargin x-hidden"> + <h1>Please fill in more detailed information</h1> + + + <div id="fb_mod_cstm_wrp" class="fb_borderSeperator x-hidden"> + <div id="fb_mod_address" class="x-hidden"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Your address</h3> + </div> + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="street_name" class="street_name">Street name</label> + <div id="street_name"></div> + </div> + </div> + + <div class="cl"> + <div class="fieldwrapper"> + <label for="street_no" class="street_no">Number</label> + <div id="street_no"></div> + </div> + </div> + </div> + + <div class="subtpl clear"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="zip" class="zip">ZIP</label> + <div id="zip"></div> + </div> + </div> + + <div class="cl"> + <div class="fieldwrapper"> + <label for="city" class="city">City</label> + <div id="city"></div> + </div> + </div> + </div> + + <div class="subtpl"> + <div class="fieldwrapper"> + <label for="address_details" class="addressDetails">Additional address line <span class="optional"><span> </span>optional</span></label> + <div id="address_details"></div> + </div> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="country" class="country">Country</label> + <div id="country"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper x-hidden"> + <label for="regions" class="regions">State / Region</label> + <div id="regions"> </div> + </div> + </div> + </div> +</div> + <div id="fb_mod_phone" class="x-hidden"> + <div class="subtpl clear"> + <label for="phone" class="phone">Telephone</label> + <div class="cl"> + <div class="fieldwrapper wide"> + <div id="phone_country"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper wide"> + <div id="phone_area"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper wide"> + <div id="phone_number"></div> + </div> + </div> + </div> +</div> + +<div id="fb_mod_customer2" class="x-hidden fb_borderSeperator"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Personal data of customer <a href="#" id="passenger2" class="fb_removePassenger"><span>Remove</span></a></h3> + </div> + + <div class="subtpl"> + <div class="fieldwrapper"> + <div id="adressChkBox2"> + <label for="adressCheckbox2" class="customerChk">Copy address above</label> + </div> + </div> + </div> + + <div class="subtpl clear"> + <div class="fieldwrapper"> + <label for="title2" class="title">Title</label> + <div id="title2"></div> + </div> + </div> + + <div class="subtpl clear"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="firstname2" class="firstname">First name</label> + <div id="firstname2"></div> + </div> + </div> + + <div class="cl"> + <div class="fieldwrapper"> + <label for="lastname2" class="lastname">Last name</label> + <div id="lastname2"></div> + </div> + </div> + </div> + + + <div class="subtpl clear"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="email2" class="email">Email</label> + <div id="email2"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper"> + <label for="r_email2" class="email">Re-enter email</label> + <div id="r_email2"></div> + </div> + </div> + </div> + + <div class="subtpl clear"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="mam_number2" class="mam_number">Miles & More number</label> + <div id="mam_number2"></div> + </div> + </div> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="street_name2" class="street_name">Street name</label> + <div id="street_name2"></div> + </div> + </div> + + <div class="cl"> + <div class="fieldwrapper"> + <label for="street_no2" class="street_no">Number</label> + <div id="street_no2"></div> + </div> + </div> + </div> + + <div class="subtpl clear"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="zip2" class="zip">ZIP</label> + <div id="zip2"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper"> + <label for="city2" class="city">City</label> + <div id="city2"></div> + </div> + </div> + </div> + + <div class="subtpl"> + <div class="fieldwrapper"> + <label for="address_details2" class="addressDetails">Additional address line</label> + <div id="address_details2"></div> + </div> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="country2" class="country">Country</label> + <div id="country2"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper x-hidden"> + <label for="regions2">State / Region</label> + <div id="regions2"> </div> + </div> + </div> + </div> + + <div class="subtpl clear"> + <label for="phone2" class="phone">Telephone</label> + <div class="cl"> + <div class="fieldwrapper"> + <div id="phone_country2" class="cl"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper"> + <div id="phone_area2"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper"> + <div id="phone_number2" class="cl"></div> + </div> + </div> + </div> +</div> + +<div id="fb_mod_customer3" class="x-hidden fb_borderSeperator"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Personal data of customer <a href="#" id="passenger3" class="fb_removePassenger"><span>Remove</span></a></h3> + </div> + + <div class="subtpl"> + <div class="fieldwrapper"> + <div id="adressChkBox3"> + <label for="adressCheckbox3" class="customerChk">Copy address above</label> + </div> + </div> + </div> + + <div class="subtpl clear"> + <div class="fieldwrapper"> + <label for="title3" class="title">Title</label> + <div id="title3"></div> + </div> + </div> + + <div class="subtpl clear"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="firstname3" class="firstname">First name</label> + <div id="firstname3"></div> + </div> + </div> + + <div class="cl"> + <div class="fieldwrapper"> + <label for="lastname3" class="lastname">Last name</label> + <div id="lastname3"></div> + </div> + </div> + </div> + + + <div class="subtpl clear"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="email3" class="email">Email</label> + <div id="email3"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper"> + <label for="r_email3" class="email">Re-enter email</label> + <div id="r_email3"></div> + </div> + </div> + </div> + + <div class="subtpl clear"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="mam_number3" class="mam_number">Miles & More number</label> + <div id="mam_number3"></div> + </div> + </div> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="street_name3" class="street_name">Street name</label> + <div id="street_name3"></div> + </div> + </div> + + <div class="cl"> + <div class="fieldwrapper"> + <label for="street_no3" class="street_no">Number</label> + <div id="street_no3"></div> + </div> + </div> + </div> + + <div class="subtpl clear"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="zip3" class="zip">ZIP</label> + <div id="zip3"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper"> + <label for="city3" class="city">City</label> + <div id="city3"></div> + </div> + </div> + </div> + + <div class="subtpl"> + <div class="fieldwrapper"> + <label for="address_details3" class="addressDetails">Additional address line</label> + <div id="address_details3"></div> + </div> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="country3" class="country">Country</label> + <div id="country3"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper x-hidden"> + <label for="regions3">State / Region</label> + <div id="regions3"> </div> + </div> + </div> + </div> + + <div class="subtpl clear"> + <label for="phone3" class="phone">Telephone</label> + <div class="cl"> + <div class="fieldwrapper"> + <div id="phone_country3" class="cl"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper"> + <div id="phone_area3"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper"> + <div id="phone_number3" class="cl"></div> + </div> + </div> + </div> +</div> + + <div id="addCustomer"></div> + </div> + + + <div id="fb_mod_prm"> + <div id="fb_mod_flightDetails" class="lh_fbMargin fb_borderSeperator x-hidden"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Flight information</h3> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="fd_file_key">File key</label> + <div id="fd_FileKey"></div> + </div> + </div> + + <div class="cl"> + <div class="fieldwrapper"> + <label for="fd_flight_number" class="flight_number">Flight number</label> <span class="flight_number_prefix">LH</span> + <div id="fd_FlightNumber"></div> + </div> + </div> + </div> + + <div class="subtpl clear"> + <div class="cl"> + <div class="fieldwrapper wide"> + <label for="fd_flight_date">Flight date</label> + <div id="fd_flight_date"> + <input type="text" id="FlightDate2" name="FlightDate2" class="fb_protect datepicker" widgetid="FlightDate2" readonly=""> + <input type="hidden" id="FlightDateHidden2" name="FlightDateHidden2" disabled=""> + </div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper wide"> + <label for="fd_flight_time">Flight time</label> + <div id="fd_FlightTime"></div> + </div> + </div> + </div> +</div> + <div id="fb_mod_assistanceType" class="lh_fbMargin fb_borderSeperator x-hidden"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Please choose the appropriate option</h3> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <div id="at_LongDistances"></div> + <label for="at_long_distances_radio" class="fb_radio">I cannot walk long distances, however, short distances and stairs are no problem</label> + </div> + </div> + </div> + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <div id="at_Staircases"></div> + <label for="at_staircases_radio" class="fb_radio">I can walk short and long distances, but I have difficulties with stairs</label> + </div> + </div> + </div> + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper wide"> + <div id="at_Walking"></div> + <label for="at_walking_radio" class="fb_radio">I cannot walk at all</label> + </div> + </div> + </div> +</div> + <div id="fb_mod_disabilityType" class="lh_fbMargin fb_borderSeperator x-hidden"> + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <div id="dt_Blind"></div> + <label for="dt_blind_chkbox" class="fb_radio">I am blind or have a severe visual impairment.</label> + </div> + </div> + </div> + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <div id="dt_Deaf"></div> + <label for="dt_deaf_chkbox" class="fb_radio">I am deaf or have a severe hearing impairment</label> + </div> + </div> + </div> + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper wide"> + <div id="dt_Dpna"></div> + <label for="dt_dpna_chkbox" class="fb_radio">I need help finding my way around</label> + </div> + </div> + </div> +</div> + <div id="fb_mod_companionReasons" class="lh_fbMargin fb_borderSeperator x-hidden"> + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <div id="cr_Hc"></div> + <label for="cr_hc_radio" class="fb_radio">I have to travel with an especially trained dog due to my handicap</label> + </div> + </div> + </div> + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper wide"> + <div id="cr_Pr"></div> + <label for="cr_pr_radio" class="fb_radio">I need to travel in companionship of a dog due to psychological reasons</label> + </div> + </div> + </div> +</div> + <div class="subtpl"> + <div class="cr"> + <div id="fd_reset" class="x-hidden"></div> + </div> + </div> + +</div> + <div id="fb_mod_pir" class="lh_fbMargin fb_borderSeperator x-hidden"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Property Irregularity Report Number (PIR)</h3> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper wide"> + <label for="pir">PIR number / File Reference (e.g. FRALH12345)</label> + <div id="pir"></div> + </div> + </div> + </div> +</div> + <div id="fb_mod_flight" class="lh_fbMargin fb_borderSeperator x-hidden"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Flight information<span class="optional"><span> </span>optional</span></h3> + </div> + <div class="subtpl"> + <div class="fieldwrapper"> + <label for="FlightDate" class="flightDate">Flight date</label> + <input type="text" id="FlightDate" name="FlightDate" class="fb_protect datepicker" widgetid="FlightDate" readonly=""> + <input type="hidden" id="FlightDateHidden" name="FlightDateHidden" disabled=""> + </div> + </div> + + <div class="subtpl clear"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="airline" class="airline">Airline</label> + <div id="airline"></div> + </div> + </div> + + <div class="cl"> + <div class="fieldwrapper"> + <label for="flight_number" class="flight_number">Flight number</label> <span class="flight_number_prefix"></span> + <div id="flight_number"></div> + </div> + </div> + </div> + + <div class="subtpl"> + <div class="fieldwrapper"> + <label for="seat_number" class="seat_number">Seat number</label> + <div id="seat_number"></div> + </div> + </div> + + <div class="subtpl clear"> + <div class="fieldwrapper wide aa-link"> + <label for="f-originName0" class="origin">Origin</label> + <input type="text" autocomplete="off" id="f-originName0" name="originName"> + <input type="hidden" id="f-originCode0" name="originCode"> + <a href="#" id="lnk-origin" data-dojo-type="lh.widget.AirportAtlas" data-dojo-props="fieldId:'f-originName0',hiddenFieldId:'f-originCode0',url:'/dlvutils/AirportAtlasApplication?app=FB&selected=DE&lang=en',serviceUrl:'/dlvutils/AirportAtlasApplication', app:'FB', language:'en'"> + <span class="airport-dir"> </span> + </a> + <div id="lh-typeahead-append-node-f-origin0" class="dijitMenu" tabindex="-1" style="display:none;"> + <div id="lh-typeahead-close-f-origin0" class="dijitMenuCloseButton">close</div></div> + <div id="lh-airport-f-origin0" style="display:none;"></div> + </div> + </div> + + <div class="subtpl clear"> + <div class="fieldwrapper wide aa-link"> + <label for="f-destinationName0">Destination</label> + <input type="text" autocomplete="off" id="f-destinationName0" name="destinationName"> + <input type="hidden" id="f-destinationCode0" name="destinationCode"> + <a href="#" id="lnk-destination" data-dojo-type="lh.widget.AirportAtlas" data-dojo-props="fieldId:'f-destinationName0',hiddenFieldId:'f-destinationCode0',url:'/dlvutils/AirportAtlasApplication?app=FB&lang=en',serviceUrl:'/dlvutils/AirportAtlasApplication', app:'FB', language:'en'"> + <span class="airport-dir"> </span> + </a> + <div id="lh-typeahead-append-node-f-destination0" class="dijitMenu" tabindex="-1" style="display:none;"> + <div id="lh-typeahead-close-f-destination0" class="dijitMenuCloseButton">close</div></div> + <div id="lh-airport-f-destination" style="display:none;"></div> + </div> + </div> +</div> + <div id="fb_mod_ticket" class="lh_fbMargin fb_borderSeperator x-hidden"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Ticket / booking information<a class="infoMessage" title="Information" id="ticket_toolTip1" href="javascript:void(0);"> </a></h3> + </div> + <div connectid="ticket_toolTip1" dojotype="dijit.Tooltip" showdelay="250" label="Please enter your ticketnumber (s. ticket) or the booking code / filekey from your booking confirmation" class="dijitTooltipData" id="dijit_Tooltip_3" lang="en" widgetid="dijit_Tooltip_3"> </div> + + <div class="fbRadioWrapper"> + <div class="fieldwrapper wide"> + <label for="ticket_no" class="marginLeft">Ticket number</label> + <div id="ticket_no"></div> + </div> + </div> + + <div class="fbRadioWrapper"> + <div class="fieldwrapper wide"> + <label for="file_key" class="marginLeft">File key</label> + <div id="file_key"></div> + </div> + </div> +</div> + <div id="fb_mod_refund" class="lh_fbMargin fb_borderSeperator x-hidden"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Refund <a class="infoMessage" title="Information" id="ticket_toolTip1" href="javascript:void(0);"> </a></h3> + <div connectid="ticket_toolTip1" dojotype="dijit.Tooltip" showdelay="250" label="Please enter your details" class="dijitTooltipData" id="dijit_Tooltip_4" lang="en" widgetid="dijit_Tooltip_4"> </div> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <div id="refundTicketChkbox"> + <label for="refundTicketCheckbox" class="customerChk">Refund entire ticket</label> + </div> + </div> + </div> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="refund_reason">Refund reason</label> + <div id="refund_reason"></div> + </div> + </div> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper wide"> + <label for="refund_filey_key" class="refund_file_key">File key <span class="optional"><span> </span>optional</span></label> + <div id="refund_file_key"></div> + </div> + </div> + + <div class="cl"> + <div class="fieldwrapper wide"> + <label for="ticket_no_lh" class="ticket_no_lh">Ticket number</label> + <span class="ticket_number_prefix">220</span><div id="ticket_no_lh"></div> + </div> + </div> + </div> + + <div class="subtpl x-hidden"> + <div class="cl"> + <div class="fieldwrapper wide"> + <label for="refund_segment">Travel segments to be refunded</label> + <div id="refund_segment"></div> + </div> + </div> + </div> +</div> + <div id="fb_mod_bank" class="lh_fbMargin fb_borderSeperator x-hidden"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Bank account information<a class="infoMessage" id="bank_toolTip1" href="javascript:void(0);"> </a></h3> + <div connectid="bank_toolTip1" dojotype="dijit.Tooltip" showdelay="250" label="Please enter your bank account information" class="dijitTooltipData" id="dijit_Tooltip_5" lang="en" widgetid="dijit_Tooltip_5"> </div> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper"> + <label for="card_holder">Account holder</label> + <div id="card_holder"></div> + </div> + </div> + <div class="cl"> + <div class="fieldwrapper"> + <label for="bank_name">Bank name</label> + <div id="bank_name"></div> + </div> + </div> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper wide"> + <label for="iban">IBAN Number</label> + <div id="iban"></div> + </div> + </div> + + <div class="cl"> + <div class="fieldwrapper wide"> + <label for="bic">SWIFT/BIC code</label> + <div id="bic"></div> + </div> + </div> + </div> +</div> + <div id="fb_mod_technial" class="lh_fbMargin fb_borderSeperator x-hidden"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Technical information</h3> + </div> + + <div class="subtpl"> + <div class="cl"> + <div class="fieldwrapper wide"> + <label for="browser">Browser name</label> + <div id="browser"></div> + </div> + </div> + + <div class="cl"> + <div class="fieldwrapper wide"> + <label for="os">Operating system</label> + <div id="os"></div> + </div> + </div> + </div> +</div> + <div id="fb_mod_feedbackID" class="lh_fbMargin fb_borderSeperator x-hidden"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Feedback ID</h3> + </div> + + <div class="subtpl"> + <div class="fieldwrapper wide"> + <label for="feedbackId">Please enter your feedback ID</label> + <div id="feedbackId"></div> + </div> + </div> +</div> + <div id="fb_mod_comment" class="lh_fbMargin fb_borderSeperator x-hidden"> + <div class="fieldwrapper wide"> + <h3 class="pi_containerSubline">Your feedback or question</h3> + </div> + <div class="fieldwrapper wide"> + <div id="comment"></div> + </div> +</div> + + + </div> + + + <input type="hidden" class="x-fup-hd-filename" name="FileName_1" id="attach_filename_1" value=""> + <input type="hidden" class="x-fup-hd-filename" name="FileName_2" id="attach_filename_2" value=""> + <input type="hidden" class="x-fup-hd-filename" name="FileName_3" id="attach_filename_3" value=""> + <input type="hidden" class="x-fup-hd-filename" name="FileName_4" id="attach_filename_4" value=""> + <input type="hidden" class="x-fup-hd-filename" name="FileName_5" id="attach_filename_5" value=""> + <input type="hidden" class="x-fup-hd-filename" name="FileName_6" id="attach_filename_6" value=""> <br> + + <input type="hidden" class="x-fup-hd-fileid" name="FileId_1" id="attach_fileid_1" value=""> + <input type="hidden" class="x-fup-hd-fileid" name="FileId_2" id="attach_fileid_2" value=""> + <input type="hidden" class="x-fup-hd-fileid" name="FileId_3" id="attach_fileid_3" value=""> + <input type="hidden" class="x-fup-hd-fileid" name="FileId_4" id="attach_fileid_4" value=""> + <input type="hidden" class="x-fup-hd-fileid" name="FileId_5" id="attach_fileid_5" value=""> + <input type="hidden" class="x-fup-hd-fileid" name="FileId_6" id="attach_fileid_6" value=""> + + + </form> diff --git a/chrome/test/data/autofill/heuristics/input/bug_460832.html b/chrome/test/data/autofill/heuristics/input/bug_460832.html index 0c98cfa..734d9da 100644 --- a/chrome/test/data/autofill/heuristics/input/bug_460832.html +++ b/chrome/test/data/autofill/heuristics/input/bug_460832.html @@ -1,3 +1,6 @@ +<head> + <title>Google.com - Calendar - terms to make this test non-trivial: payments checkout address</title> +</head> <div class="ep" data-eid="foo"> <div class="ep-ea noprint"> <div id=":27.print-btn" class="ep-ea-btn-wrapper ep-ea-print-btn"> diff --git a/chrome/test/data/autofill/heuristics/input/bug_462080.html b/chrome/test/data/autofill/heuristics/input/bug_462080.html index 1b66d24..382f65e 100644 --- a/chrome/test/data/autofill/heuristics/input/bug_462080.html +++ b/chrome/test/data/autofill/heuristics/input/bug_462080.html @@ -1,3 +1,6 @@ +<head> +<title><title>payment instructions - Google Slides</title></title> +</head> <div class="modal-dialog-content"> <div class="simple-sharing-contents"> <div class="simple-sharing-link-area"> diff --git a/chrome/test/data/autofill/heuristics/input/bug_463856.html b/chrome/test/data/autofill/heuristics/input/bug_463856.html index fe112c8..482a117 100644 --- a/chrome/test/data/autofill/heuristics/input/bug_463856.html +++ b/chrome/test/data/autofill/heuristics/input/bug_463856.html @@ -1,3 +1,6 @@ +<head> + <title>Google+ - terms to make this test non-trivial: payment checkout address</title> +</head> <input name="hist_state" type="text"></input> <input placeholder="Location (optional)" type="text"></input> <input name="sbdp" placeholder="+ Invite names, circles, or email addresses" type="text"></input> diff --git a/chrome/test/data/autofill/heuristics/input/bug_465053.html b/chrome/test/data/autofill/heuristics/input/bug_465053.html index 511aae1..1e06b98 100644 --- a/chrome/test/data/autofill/heuristics/input/bug_465053.html +++ b/chrome/test/data/autofill/heuristics/input/bug_465053.html @@ -1,3 +1,7 @@ +<head> + <title>Google Developers Console</title> +</head> +<form class="p6n-billing-freetrial-signup-form p6n-align-left p6n-form ng-pristine ng-scope ng-invalid ng-invalid-required" name="controller.signupForm"> <div class="creation-form-content" data-value="creditCard"> <div id="creditCardForm" class="instrument-form payments-instruments-creditcard" data-component-name="CREDIT_CARD"> <div class="b3-credit-card-field b3-card-number-input-container"><img class="b3id-detected-card-icon card-icon-images-row" style="display: none;"> @@ -180,3 +184,4 @@ <input type="hidden" id="creditCardForm.supportedCountries" name="supportedCountries" value="["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BM","BN","BO","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CV","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IN","IO","IQ","IS","IT","JM","JO","JP","KE","KG","KH","KI","KM","KN","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MG","MH","MK","ML","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","ST","SV","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"]"> </div> </div> +</form> diff --git a/chrome/test/data/autofill/heuristics/input/bug_465576.html b/chrome/test/data/autofill/heuristics/input/bug_465576.html index d44c735..809a019 100644 --- a/chrome/test/data/autofill/heuristics/input/bug_465576.html +++ b/chrome/test/data/autofill/heuristics/input/bug_465576.html @@ -1,3 +1,7 @@ +<head> + <title>NikeStore</title> +</head> +<form id="creditCardForm" method="post" action="/payment/checkout/addNewCard.htm?country=US&view=html&billingCountry=US&langLocale=en_US" novalidate=""> <div id="creditCardFormContainer"> <div class="cardNotification hidden"> <div class="nsg-form--global-message--alert"> @@ -110,3 +114,4 @@ </div> </div> </div> +</form> diff --git a/chrome/test/data/autofill/heuristics/input/bug_471748.html b/chrome/test/data/autofill/heuristics/input/bug_471748.html index 27b9ac3..0ef0e3b 100644 --- a/chrome/test/data/autofill/heuristics/input/bug_471748.html +++ b/chrome/test/data/autofill/heuristics/input/bug_471748.html @@ -1,41 +1,46 @@ -<div class="pay_method"> - <h3 class="h_check">Pay with Credit Card:</h3> +<head> + <title>Payment Information</title> +</head> +<form name="info" method="post" action="https://www.runningwarehouse.com/finalcheckout.html" id="creditcard"> + <div class="pay_method"> + <h3 class="h_check">Pay with Credit Card:</h3> - <div class="saved_wrap clearfix"> + <div class="saved_wrap clearfix"> - </div> + </div> - <div id="fade_card"> - <div class="cc_row card_type cf"> - <label for="cctype">Card Type:</label> - <div class="cc_selwrap"> - <div class="dropdownbox"><div class="current_selection"><span class="selection_text" title="Visa">Visa</span><span class="drop_arrow"><span></span></span></div><ul class="optionslist"><li class="option selected">Visa</li><li class="option">MasterCard</li><li class="option">American Express</li><li class="option">Discover</li></ul></div><select name="ccType" id="cctype" class="fancy_select" style="display: none;"> - <option value="VISA" selected="">Visa</option> - <option value="MASTERCARD">MasterCard</option> - <option value="AMEX">American Express</option> - <option value="DISCOVER">Discover</option> - </select> + <div id="fade_card"> + <div class="cc_row card_type cf"> + <label for="cctype">Card Type:</label> + <div class="cc_selwrap"> + <div class="dropdownbox"><div class="current_selection"><span class="selection_text" title="Visa">Visa</span><span class="drop_arrow"><span></span></span></div><ul class="optionslist"><li class="option selected">Visa</li><li class="option">MasterCard</li><li class="option">American Express</li><li class="option">Discover</li></ul></div><select name="ccType" id="cctype" class="fancy_select" style="display: none;"> + <option value="VISA" selected="">Visa</option> + <option value="MASTERCARD">MasterCard</option> + <option value="AMEX">American Express</option> + <option value="DISCOVER">Discover</option> + </select> + </div> + <div class="cc_iconwrap"> + <span class="cc_icon ic_visa selected">Visa</span> + <span class="cc_icon ic_mc">MasterCard</span> + <span class="cc_icon ic_ae">American Express</span> + <span class="cc_icon ic_disc">Discover</span> + </div> </div> - <div class="cc_iconwrap"> - <span class="cc_icon ic_visa selected">Visa</span> - <span class="cc_icon ic_mc">MasterCard</span> - <span class="cc_icon ic_ae">American Express</span> - <span class="cc_icon ic_disc">Discover</span> + <div class="cc_row cc_num"> + <label for="cardnum">Card #:</label> + <input type="text" name="cardnum" id="cardnum" maxlength="19" class="check_text"> + </div> + <div class="cc_row"> + <label for="expdate">Expire Date:</label> + <input type="text" name="expdate" id="expdate" maxlength="5" class="check_text"> + <span>MM/YY</span> + </div> + <div class="cc_row"> + <label for="cvv2">CCV2:</label> + <input type="text" name="cvv2" id="cvv2" maxlength="4" class="check_text"> + <a href="https://www.runningwarehouse.com/cvv2.html#cvv2_info" class="lightboxpop" data-boxheight="375" data-boxwidth="500">what's this?</a> </div> - </div> - <div class="cc_row cc_num"> - <label for="cardnum">Card #:</label> - <input type="text" name="cardnum" id="cardnum" maxlength="19" class="check_text"> - </div> - <div class="cc_row"> - <label for="expdate">Expire Date:</label> - <input type="text" name="expdate" id="expdate" maxlength="5" class="check_text"> - <span>MM/YY</span> - </div> - <div class="cc_row"> - <label for="cvv2">CCV2:</label> - <input type="text" name="cvv2" id="cvv2" maxlength="4" class="check_text"> - <a href="https://www.runningwarehouse.com/cvv2.html#cvv2_info" class="lightboxpop" data-boxheight="375" data-boxwidth="500">what's this?</a> </div> </div> -</div> +</form> diff --git a/chrome/test/data/autofill/heuristics/input/bug_471831.html b/chrome/test/data/autofill/heuristics/input/bug_471831.html index e9298e1..e976141 100644 --- a/chrome/test/data/autofill/heuristics/input/bug_471831.html +++ b/chrome/test/data/autofill/heuristics/input/bug_471831.html @@ -1,3 +1,7 @@ +<head> + <title>Stripe: Checkout</title> +</head> +<form class="checkoutView" method="POST" novalidate="true"> <div class="layoutView paymentView" style="opacity: 1; height: 291px; transition: none; -webkit-transition: none; transform: translateX(0px); overflow: inherit;"> <div class="layoutSubview" style="height: 55px; transform: translateY(0px); opacity: 1; transition: none; -webkit-transition: none;"> <div class="emailInput input"> @@ -93,3 +97,4 @@ </div> </div> </div> +</form> diff --git a/chrome/test/data/autofill/heuristics/output/b465571.out b/chrome/test/data/autofill/heuristics/output/b465571.out index 51b6bcc..74f090d 100644 --- a/chrome/test/data/autofill/heuristics/output/b465571.out +++ b/chrome/test/data/autofill/heuristics/output/b465571.out @@ -5,5 +5,5 @@ ADDRESS_HOME_CITY | address.city | * City: | | address.name_1-default ADDRESS_HOME_STATE | address.state | * State: | | address.name_1-default ADDRESS_HOME_ZIP | address.postalCode | * Zip: | | address.name_1-default PHONE_HOME_WHOLE_NUMBER | address.phoneNumber | * Phone Number: | | address.name_1-default -UNKNOWN_TYPE | address.rememberedAsBoolean | | true | address.name_1-default -UNKNOWN_TYPE | address.primary | | true | address.name_1-default +UNKNOWN_TYPE | address.rememberedAsBoolean | Save this shipping address for future orders. | true | address.name_1-default +UNKNOWN_TYPE | address.primary | Make this my primary shipping address. | true | address.name_1-default diff --git a/chrome/test/data/autofill/heuristics/output/bug_459132.out b/chrome/test/data/autofill/heuristics/output/bug_459132.out index 86bf84a..60f7d22 100644 --- a/chrome/test/data/autofill/heuristics/output/bug_459132.out +++ b/chrome/test/data/autofill/heuristics/output/bug_459132.out @@ -10,3 +10,9 @@ UNKNOWN_TYPE | | Re-enter email | Χ | _1-default EMAIL_ADDRESS | rEmail_1 | Re-enter email | | _1-default UNKNOWN_TYPE | | Miles & More number optional | Χ | _1-default UNKNOWN_TYPE | MamNumber_1 | Miles & More number optional | | _1-default +UNKNOWN_TYPE | | Please select a category | Χ | _1-default +UNKNOWN_TYPE | | Please select a category | ▼ | _1-default +UNKNOWN_TYPE | FlightDate2 | Flight date | | _1-default +UNKNOWN_TYPE | FlightDate | Flight date | | _1-default +UNKNOWN_TYPE | originName | Origin | | _1-default +UNKNOWN_TYPE | destinationName | Destination | | _1-default diff --git a/chrome/test/data/autofill/heuristics/output/bug_465576.out b/chrome/test/data/autofill/heuristics/output/bug_465576.out index 5ace284..0577aad 100644 --- a/chrome/test/data/autofill/heuristics/output/bug_465576.out +++ b/chrome/test/data/autofill/heuristics/output/bug_465576.out @@ -2,5 +2,5 @@ CREDIT_CARD_TYPE | cardTypeSelect | : | Visa | cardTypeSelect_1-cc CREDIT_CARD_NUMBER | creditCardNumber | Card Number * | | cardTypeSelect_1-cc CREDIT_CARD_EXP_MONTH | expirationMonth | Expiry Date * | | cardTypeSelect_1-cc CREDIT_CARD_EXP_4_DIGIT_YEAR | expirationYear | Expiry Date * | | cardTypeSelect_1-cc -CREDIT_CARD_VERIFICATION_CODE | cvNumber | Where do I find this? | | cardTypeSelect_1-cc +CREDIT_CARD_VERIFICATION_CODE | cvNumber | security code * | | cardTypeSelect_1-cc PHONE_HOME_WHOLE_NUMBER | phoneNumber | Billing Phone Your registered number with your payment issuer is required to process your order. * | | cardTypeSelect_1-default diff --git a/chrome/test/data/autofill/heuristics/output/bug_471748.out b/chrome/test/data/autofill/heuristics/output/bug_471748.out index 6aa4821..6f4d1d3 100644 --- a/chrome/test/data/autofill/heuristics/output/bug_471748.out +++ b/chrome/test/data/autofill/heuristics/output/bug_471748.out @@ -1,4 +1,4 @@ -CREDIT_CARD_TYPE | ccType | VisaVisaMasterCardAmerican ExpressDiscover | VISA | ccType_1-cc +CREDIT_CARD_TYPE | ccType | Card Type: | VISA | ccType_1-cc CREDIT_CARD_NUMBER | cardnum | Card #: | | ccType_1-cc CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR | expdate | Expire Date: | | ccType_1-cc CREDIT_CARD_VERIFICATION_CODE | cvv2 | CCV2: | | ccType_1-cc diff --git a/components/autofill.gypi b/components/autofill.gypi index 25f6909..283881c 100644 --- a/components/autofill.gypi +++ b/components/autofill.gypi @@ -27,6 +27,8 @@ 'autofill/core/common/autofill_l10n_util.h', 'autofill/core/common/autofill_pref_names.cc', 'autofill/core/common/autofill_pref_names.h', + 'autofill/core/common/autofill_regexes.cc', + 'autofill/core/common/autofill_regexes.h', 'autofill/core/common/autofill_switches.cc', 'autofill/core/common/autofill_switches.h', 'autofill/core/common/form_data.cc', @@ -48,6 +50,9 @@ 'autofill/core/common/web_element_descriptor.cc', 'autofill/core/common/web_element_descriptor.h', ], + + # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. + 'msvs_disabled_warnings': [4267, ], }, { @@ -126,8 +131,6 @@ 'autofill/core/browser/autofill_profile.h', 'autofill/core/browser/autofill_regex_constants.cc', 'autofill/core/browser/autofill_regex_constants.h', - 'autofill/core/browser/autofill_regexes.cc', - 'autofill/core/browser/autofill_regexes.h', 'autofill/core/browser/autofill_scanner.cc', 'autofill/core/browser/autofill_scanner.h', 'autofill/core/browser/autofill_server_field_info.h', diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc index b1f3056..ab28cde 100644 --- a/components/autofill/content/renderer/form_autofill_util.cc +++ b/components/autofill/content/renderer/form_autofill_util.cc @@ -14,6 +14,7 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "components/autofill/core/common/autofill_data_validation.h" +#include "components/autofill/core/common/autofill_regexes.h" #include "components/autofill/core/common/autofill_switches.h" #include "components/autofill/core/common/form_data.h" #include "components/autofill/core/common/form_field_data.h" @@ -1161,9 +1162,8 @@ void WebFormControlElementToFormField(const WebFormControlElement& element, // labels for all form control elements are scraped from the DOM and set in // WebFormElementToFormData. field->name = element.nameForAutofill(); - field->form_control_type = base::UTF16ToUTF8(element.formControlType()); - field->autocomplete_attribute = - base::UTF16ToUTF8(element.getAttribute(kAutocomplete)); + field->form_control_type = element.formControlType().utf8(); + field->autocomplete_attribute = element.getAttribute(kAutocomplete).utf8(); if (field->autocomplete_attribute.size() > kMaxDataLength) { // Discard overly long attribute values to avoid DOS-ing the browser // process. However, send over a default string to indicate that the @@ -1286,11 +1286,28 @@ bool UnownedFormElementsAndFieldSetsToFormData( const std::vector<blink::WebElement>& fieldsets, const std::vector<blink::WebFormControlElement>& control_elements, const blink::WebFormControlElement* element, - const GURL& origin, + const blink::WebDocument& document, ExtractMask extract_mask, FormData* form, FormFieldData* field) { - form->origin = origin; + // Only attempt formless Autofill on checkout flows. This avoids the many + // false positives found on the non-checkout web. See http://crbug.com/462375 + // For now this early abort only applies to English-language pages, because + // the regex is not translated. Note that an empty "lang" attribute counts as + // English. A potential problem is that this only checks document.title(), but + // should actually check the main frame's title. Thus it may make bad + // decisions for iframes. + WebElement html_element = document.documentElement(); + std::string lang; + if (!html_element.isNull()) + lang = html_element.getAttribute("lang").utf8(); + if ((lang.empty() || StartsWithASCII(lang, "en", false)) && + !MatchesPattern(document.title(), + base::UTF8ToUTF16("payment|checkout|address|delivery|shipping"))) { + return false; + } + + form->origin = document.url(); form->user_submitted = false; form->is_form_tag = false; @@ -1314,7 +1331,7 @@ bool FindFormAndFieldForFormControlElement(const WebFormControlElement& element, std::vector<WebFormControlElement> control_elements = GetUnownedAutofillableFormFieldElements(document.all(), &fieldsets); return UnownedFormElementsAndFieldSetsToFormData( - fieldsets, control_elements, &element, document.url(), extract_mask, + fieldsets, control_elements, &element, document, extract_mask, form, field); } diff --git a/components/autofill/content/renderer/form_autofill_util.h b/components/autofill/content/renderer/form_autofill_util.h index 0faf82c..1be05cd 100644 --- a/components/autofill/content/renderer/form_autofill_util.h +++ b/components/autofill/content/renderer/form_autofill_util.h @@ -122,7 +122,7 @@ bool UnownedFormElementsAndFieldSetsToFormData( const std::vector<blink::WebElement>& fieldsets, const std::vector<blink::WebFormControlElement>& control_elements, const blink::WebFormControlElement* element, - const GURL& origin, + const blink::WebDocument& document, ExtractMask extract_mask, FormData* form, FormFieldData* field); diff --git a/components/autofill/content/renderer/form_cache.cc b/components/autofill/content/renderer/form_cache.cc index 029c5fa..c1a41a8 100644 --- a/components/autofill/content/renderer/form_cache.cc +++ b/components/autofill/content/renderer/form_cache.cc @@ -133,7 +133,7 @@ std::vector<FormData> FormCache::ExtractNewForms() { FormData synthetic_form; if (!UnownedFormElementsAndFieldSetsToFormData( - fieldsets, control_elements, nullptr, document.url(), extract_mask, + fieldsets, control_elements, nullptr, document, extract_mask, &synthetic_form, nullptr)) { return forms; } diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn index 6c2d3d1..a689000 100644 --- a/components/autofill/core/browser/BUILD.gn +++ b/components/autofill/core/browser/BUILD.gn @@ -42,8 +42,6 @@ static_library("browser") { "autofill_profile.h", "autofill_regex_constants.cc", "autofill_regex_constants.h", - "autofill_regexes.cc", - "autofill_regexes.h", "autofill_scanner.cc", "autofill_scanner.h", "autofill_server_field_info.h", @@ -207,7 +205,6 @@ source_set("unit_tests") { "autofill_merge_unittest.cc", "autofill_metrics_unittest.cc", "autofill_profile_unittest.cc", - "autofill_regexes_unittest.cc", "autofill_type_unittest.cc", "autofill_xml_parser_unittest.cc", "contact_info_unittest.cc", diff --git a/components/autofill/core/browser/credit_card.cc b/components/autofill/core/browser/credit_card.cc index 8bdab44..b4c1c9e 100644 --- a/components/autofill/core/browser/credit_card.cc +++ b/components/autofill/core/browser/credit_card.cc @@ -20,10 +20,10 @@ #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" #include "components/autofill/core/browser/autofill_field.h" -#include "components/autofill/core/browser/autofill_regexes.h" #include "components/autofill/core/browser/autofill_type.h" #include "components/autofill/core/browser/validation.h" #include "components/autofill/core/common/autofill_l10n_util.h" +#include "components/autofill/core/common/autofill_regexes.h" #include "components/autofill/core/common/form_field_data.h" #include "grit/components_scaled_resources.h" #include "grit/components_strings.h" diff --git a/components/autofill/core/browser/credit_card_field.cc b/components/autofill/core/browser/credit_card_field.cc index 7d48bd5..d6b67dc 100644 --- a/components/autofill/core/browser/credit_card_field.cc +++ b/components/autofill/core/browser/credit_card_field.cc @@ -15,9 +15,9 @@ #include "base/time/time.h" #include "components/autofill/core/browser/autofill_field.h" #include "components/autofill/core/browser/autofill_regex_constants.h" -#include "components/autofill/core/browser/autofill_regexes.h" #include "components/autofill/core/browser/autofill_scanner.h" #include "components/autofill/core/browser/field_types.h" +#include "components/autofill/core/common/autofill_regexes.h" #include "grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" diff --git a/components/autofill/core/browser/form_field.cc b/components/autofill/core/browser/form_field.cc index 7ea3ce4..50d7e8a 100644 --- a/components/autofill/core/browser/form_field.cc +++ b/components/autofill/core/browser/form_field.cc @@ -15,13 +15,13 @@ #include "base/strings/utf_string_conversions.h" #include "components/autofill/core/browser/address_field.h" #include "components/autofill/core/browser/autofill_field.h" -#include "components/autofill/core/browser/autofill_regexes.h" #include "components/autofill/core/browser/autofill_scanner.h" #include "components/autofill/core/browser/credit_card_field.h" #include "components/autofill/core/browser/email_field.h" #include "components/autofill/core/browser/form_structure.h" #include "components/autofill/core/browser/name_field.h" #include "components/autofill/core/browser/phone_field.h" +#include "components/autofill/core/common/autofill_regexes.h" namespace autofill { namespace { diff --git a/components/autofill/core/browser/validation.cc b/components/autofill/core/browser/validation.cc index 0688c29..ef7c330 100644 --- a/components/autofill/core/browser/validation.cc +++ b/components/autofill/core/browser/validation.cc @@ -9,10 +9,9 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" -#include "components/autofill/core/browser/autofill_regexes.h" #include "components/autofill/core/browser/credit_card.h" #include "components/autofill/core/browser/state_names.h" - +#include "components/autofill/core/common/autofill_regexes.h" namespace autofill { diff --git a/components/autofill/core/common/BUILD.gn b/components/autofill/core/common/BUILD.gn index 9ba33f3..cf884d9 100644 --- a/components/autofill/core/common/BUILD.gn +++ b/components/autofill/core/common/BUILD.gn @@ -12,6 +12,8 @@ static_library("common") { "autofill_l10n_util.h", "autofill_pref_names.cc", "autofill_pref_names.h", + "autofill_regexes.cc", + "autofill_regexes.h", "autofill_switches.cc", "autofill_switches.h", "form_data.cc", @@ -50,6 +52,7 @@ static_library("common") { source_set("unit_tests") { testonly = true sources = [ + "autofill_regexes_unittest.cc", "form_data_unittest.cc", "form_field_data_unittest.cc", "password_form_fill_data_unittest.cc", diff --git a/components/autofill/core/browser/autofill_regexes.cc b/components/autofill/core/common/autofill_regexes.cc index bd5c0e9..64a60f6 100644 --- a/components/autofill/core/browser/autofill_regexes.cc +++ b/components/autofill/core/common/autofill_regexes.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "components/autofill/core/browser/autofill_regexes.h" +#include "components/autofill/core/common/autofill_regexes.h" #include "base/containers/scoped_ptr_hash_map.h" #include "base/logging.h" diff --git a/components/autofill/core/browser/autofill_regexes.h b/components/autofill/core/common/autofill_regexes.h index f4b5775..1bf1aa7 100644 --- a/components/autofill/core/browser/autofill_regexes.h +++ b/components/autofill/core/common/autofill_regexes.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_REGEXES_H_ -#define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_REGEXES_H_ +#ifndef COMPONENTS_AUTOFILL_CORE_COMMON_AUTOFILL_REGEXES_H_ +#define COMPONENTS_AUTOFILL_CORE_COMMON_AUTOFILL_REGEXES_H_ #include "base/strings/string16.h" @@ -17,4 +17,4 @@ bool MatchesPattern(const base::string16& input, } // namespace autofill -#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_REGEXES_H_ +#endif // COMPONENTS_AUTOFILL_CORE_COMMON_AUTOFILL_REGEXES_H_ diff --git a/components/autofill/core/browser/autofill_regexes_unittest.cc b/components/autofill/core/common/autofill_regexes_unittest.cc index d77afa7..954a7e8 100644 --- a/components/autofill/core/browser/autofill_regexes_unittest.cc +++ b/components/autofill/core/common/autofill_regexes_unittest.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "components/autofill/core/browser/autofill_regexes.h" +#include "components/autofill/core/common/autofill_regexes.h" #include "base/strings/string16.h" #include "base/strings/utf_string_conversions.h" diff --git a/components/components_tests.gyp b/components/components_tests.gyp index c9191c7..a9af680 100644 --- a/components/components_tests.gyp +++ b/components/components_tests.gyp @@ -41,7 +41,6 @@ 'autofill/core/browser/autofill_merge_unittest.cc', 'autofill/core/browser/autofill_metrics_unittest.cc', 'autofill/core/browser/autofill_profile_unittest.cc', - 'autofill/core/browser/autofill_regexes_unittest.cc', 'autofill/core/browser/autofill_type_unittest.cc', 'autofill/core/browser/autofill_xml_parser_unittest.cc', 'autofill/core/browser/contact_info_unittest.cc', @@ -59,6 +58,7 @@ 'autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc', 'autofill/core/browser/webdata/autofill_table_unittest.cc', 'autofill/core/browser/webdata/web_data_service_unittest.cc', + 'autofill/core/common/autofill_regexes_unittest.cc', 'autofill/core/common/form_data_unittest.cc', 'autofill/core/common/form_field_data_unittest.cc', 'autofill/core/common/password_form_fill_data_unittest.cc', |