| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
| 8 #include "base/string16.h" | 8 #include "base/string16.h" |
| 9 #include "base/task.h" | 9 #include "base/task.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| 11 #include "chrome/browser/autocomplete_history_manager.h" | 11 #include "chrome/browser/autocomplete_history_manager.h" |
| 12 #include "chrome/browser/autofill/autofill_external_delegate.h" | 12 #include "chrome/browser/autofill/autofill_external_delegate.h" |
| 13 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 13 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 14 #include "chrome/browser/webdata/web_data_service.h" | 14 #include "chrome/browser/webdata/web_data_service.h" |
| 15 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 15 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 16 #include "chrome/test/base/testing_browser_process.h" | 16 #include "chrome/test/base/testing_browser_process.h" |
| 17 #include "chrome/test/base/testing_profile.h" | 17 #include "chrome/test/base/testing_profile.h" |
| 18 #include "content/browser/tab_contents/test_tab_contents.h" | 18 #include "content/browser/tab_contents/test_tab_contents.h" |
| 19 #include "content/test/test_browser_thread.h" | 19 #include "content/test/test_browser_thread.h" |
| 20 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| 22 #include "ui/gfx/rect.h" | 22 #include "ui/gfx/rect.h" |
| 23 #include "webkit/glue/form_data.h" | 23 #include "webkit/forms/form_data.h" |
| 24 | 24 |
| 25 using content::BrowserThread; | 25 using content::BrowserThread; |
| 26 using testing::_; | 26 using testing::_; |
| 27 using webkit_glue::FormData; | 27 using webkit::forms::FormData; |
| 28 | 28 |
| 29 class MockWebDataService : public WebDataService { | 29 class MockWebDataService : public WebDataService { |
| 30 public: | 30 public: |
| 31 MOCK_METHOD1(AddFormFields, | 31 MOCK_METHOD1(AddFormFields, |
| 32 void(const std::vector<webkit_glue::FormField>&)); // NOLINT | 32 void(const std::vector<webkit::forms::FormField>&)); // NOLINT |
| 33 }; | 33 }; |
| 34 | 34 |
| 35 class AutocompleteHistoryManagerTest : public ChromeRenderViewHostTestHarness { | 35 class AutocompleteHistoryManagerTest : public ChromeRenderViewHostTestHarness { |
| 36 protected: | 36 protected: |
| 37 AutocompleteHistoryManagerTest() | 37 AutocompleteHistoryManagerTest() |
| 38 : ui_thread_(BrowserThread::UI, MessageLoopForUI::current()) { | 38 : ui_thread_(BrowserThread::UI, MessageLoopForUI::current()) { |
| 39 } | 39 } |
| 40 | 40 |
| 41 virtual void SetUp() { | 41 virtual void SetUp() { |
| 42 ChromeRenderViewHostTestHarness::SetUp(); | 42 ChromeRenderViewHostTestHarness::SetUp(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 55 // Tests that credit card numbers are not sent to the WebDatabase to be saved. | 55 // Tests that credit card numbers are not sent to the WebDatabase to be saved. |
| 56 TEST_F(AutocompleteHistoryManagerTest, CreditCardNumberValue) { | 56 TEST_F(AutocompleteHistoryManagerTest, CreditCardNumberValue) { |
| 57 FormData form; | 57 FormData form; |
| 58 form.name = ASCIIToUTF16("MyForm"); | 58 form.name = ASCIIToUTF16("MyForm"); |
| 59 form.method = ASCIIToUTF16("POST"); | 59 form.method = ASCIIToUTF16("POST"); |
| 60 form.origin = GURL("http://myform.com/form.html"); | 60 form.origin = GURL("http://myform.com/form.html"); |
| 61 form.action = GURL("http://myform.com/submit.html"); | 61 form.action = GURL("http://myform.com/submit.html"); |
| 62 form.user_submitted = true; | 62 form.user_submitted = true; |
| 63 | 63 |
| 64 // Valid Visa credit card number pulled from the paypal help site. | 64 // Valid Visa credit card number pulled from the paypal help site. |
| 65 webkit_glue::FormField valid_cc; | 65 webkit::forms::FormField valid_cc; |
| 66 valid_cc.label = ASCIIToUTF16("Credit Card"); | 66 valid_cc.label = ASCIIToUTF16("Credit Card"); |
| 67 valid_cc.name = ASCIIToUTF16("ccnum"); | 67 valid_cc.name = ASCIIToUTF16("ccnum"); |
| 68 valid_cc.value = ASCIIToUTF16("4012888888881881"); | 68 valid_cc.value = ASCIIToUTF16("4012888888881881"); |
| 69 valid_cc.form_control_type = ASCIIToUTF16("text"); | 69 valid_cc.form_control_type = ASCIIToUTF16("text"); |
| 70 form.fields.push_back(valid_cc); | 70 form.fields.push_back(valid_cc); |
| 71 | 71 |
| 72 EXPECT_CALL(*web_data_service_, AddFormFields(_)).Times(0); | 72 EXPECT_CALL(*web_data_service_, AddFormFields(_)).Times(0); |
| 73 autocomplete_manager_->OnFormSubmitted(form); | 73 autocomplete_manager_->OnFormSubmitted(form); |
| 74 } | 74 } |
| 75 | 75 |
| 76 // Contrary test to AutocompleteHistoryManagerTest.CreditCardNumberValue. The | 76 // Contrary test to AutocompleteHistoryManagerTest.CreditCardNumberValue. The |
| 77 // value being submitted is not a valid credit card number, so it will be sent | 77 // value being submitted is not a valid credit card number, so it will be sent |
| 78 // to the WebDatabase to be saved. | 78 // to the WebDatabase to be saved. |
| 79 TEST_F(AutocompleteHistoryManagerTest, NonCreditCardNumberValue) { | 79 TEST_F(AutocompleteHistoryManagerTest, NonCreditCardNumberValue) { |
| 80 FormData form; | 80 FormData form; |
| 81 form.name = ASCIIToUTF16("MyForm"); | 81 form.name = ASCIIToUTF16("MyForm"); |
| 82 form.method = ASCIIToUTF16("POST"); | 82 form.method = ASCIIToUTF16("POST"); |
| 83 form.origin = GURL("http://myform.com/form.html"); | 83 form.origin = GURL("http://myform.com/form.html"); |
| 84 form.action = GURL("http://myform.com/submit.html"); | 84 form.action = GURL("http://myform.com/submit.html"); |
| 85 form.user_submitted = true; | 85 form.user_submitted = true; |
| 86 | 86 |
| 87 // Invalid credit card number. | 87 // Invalid credit card number. |
| 88 webkit_glue::FormField invalid_cc; | 88 webkit::forms::FormField invalid_cc; |
| 89 invalid_cc.label = ASCIIToUTF16("Credit Card"); | 89 invalid_cc.label = ASCIIToUTF16("Credit Card"); |
| 90 invalid_cc.name = ASCIIToUTF16("ccnum"); | 90 invalid_cc.name = ASCIIToUTF16("ccnum"); |
| 91 invalid_cc.value = ASCIIToUTF16("4580123456789012"); | 91 invalid_cc.value = ASCIIToUTF16("4580123456789012"); |
| 92 invalid_cc.form_control_type = ASCIIToUTF16("text"); | 92 invalid_cc.form_control_type = ASCIIToUTF16("text"); |
| 93 form.fields.push_back(invalid_cc); | 93 form.fields.push_back(invalid_cc); |
| 94 | 94 |
| 95 EXPECT_CALL(*(web_data_service_.get()), AddFormFields(_)).Times(1); | 95 EXPECT_CALL(*(web_data_service_.get()), AddFormFields(_)).Times(1); |
| 96 autocomplete_manager_->OnFormSubmitted(form); | 96 autocomplete_manager_->OnFormSubmitted(form); |
| 97 } | 97 } |
| 98 | 98 |
| 99 // Tests that SSNs are not sent to the WebDatabase to be saved. | 99 // Tests that SSNs are not sent to the WebDatabase to be saved. |
| 100 TEST_F(AutocompleteHistoryManagerTest, SSNValue) { | 100 TEST_F(AutocompleteHistoryManagerTest, SSNValue) { |
| 101 FormData form; | 101 FormData form; |
| 102 form.name = ASCIIToUTF16("MyForm"); | 102 form.name = ASCIIToUTF16("MyForm"); |
| 103 form.method = ASCIIToUTF16("POST"); | 103 form.method = ASCIIToUTF16("POST"); |
| 104 form.origin = GURL("http://myform.com/form.html"); | 104 form.origin = GURL("http://myform.com/form.html"); |
| 105 form.action = GURL("http://myform.com/submit.html"); | 105 form.action = GURL("http://myform.com/submit.html"); |
| 106 form.user_submitted = true; | 106 form.user_submitted = true; |
| 107 | 107 |
| 108 webkit_glue::FormField ssn; | 108 webkit::forms::FormField ssn; |
| 109 ssn.label = ASCIIToUTF16("Social Security Number"); | 109 ssn.label = ASCIIToUTF16("Social Security Number"); |
| 110 ssn.name = ASCIIToUTF16("ssn"); | 110 ssn.name = ASCIIToUTF16("ssn"); |
| 111 ssn.value = ASCIIToUTF16("078-05-1120"); | 111 ssn.value = ASCIIToUTF16("078-05-1120"); |
| 112 ssn.form_control_type = ASCIIToUTF16("text"); | 112 ssn.form_control_type = ASCIIToUTF16("text"); |
| 113 form.fields.push_back(ssn); | 113 form.fields.push_back(ssn); |
| 114 | 114 |
| 115 EXPECT_CALL(*web_data_service_, AddFormFields(_)).Times(0); | 115 EXPECT_CALL(*web_data_service_, AddFormFields(_)).Times(0); |
| 116 autocomplete_manager_->OnFormSubmitted(form); | 116 autocomplete_manager_->OnFormSubmitted(form); |
| 117 } | 117 } |
| 118 | 118 |
| 119 // Verify that autocomplete text is saved for search fields. | 119 // Verify that autocomplete text is saved for search fields. |
| 120 TEST_F(AutocompleteHistoryManagerTest, SearchField) { | 120 TEST_F(AutocompleteHistoryManagerTest, SearchField) { |
| 121 FormData form; | 121 FormData form; |
| 122 form.name = ASCIIToUTF16("MyForm"); | 122 form.name = ASCIIToUTF16("MyForm"); |
| 123 form.method = ASCIIToUTF16("POST"); | 123 form.method = ASCIIToUTF16("POST"); |
| 124 form.origin = GURL("http://myform.com/form.html"); | 124 form.origin = GURL("http://myform.com/form.html"); |
| 125 form.action = GURL("http://myform.com/submit.html"); | 125 form.action = GURL("http://myform.com/submit.html"); |
| 126 form.user_submitted = true; | 126 form.user_submitted = true; |
| 127 | 127 |
| 128 // Search field. | 128 // Search field. |
| 129 webkit_glue::FormField search_field; | 129 webkit::forms::FormField search_field; |
| 130 search_field.label = ASCIIToUTF16("Search"); | 130 search_field.label = ASCIIToUTF16("Search"); |
| 131 search_field.name = ASCIIToUTF16("search"); | 131 search_field.name = ASCIIToUTF16("search"); |
| 132 search_field.value = ASCIIToUTF16("my favorite query"); | 132 search_field.value = ASCIIToUTF16("my favorite query"); |
| 133 search_field.form_control_type = ASCIIToUTF16("search"); | 133 search_field.form_control_type = ASCIIToUTF16("search"); |
| 134 form.fields.push_back(search_field); | 134 form.fields.push_back(search_field); |
| 135 | 135 |
| 136 EXPECT_CALL(*(web_data_service_.get()), AddFormFields(_)).Times(1); | 136 EXPECT_CALL(*(web_data_service_.get()), AddFormFields(_)).Times(1); |
| 137 autocomplete_manager_->OnFormSubmitted(form); | 137 autocomplete_manager_->OnFormSubmitted(form); |
| 138 } | 138 } |
| 139 | 139 |
| 140 namespace { | 140 namespace { |
| 141 | 141 |
| 142 class MockAutofillExternalDelegate : public AutofillExternalDelegate { | 142 class MockAutofillExternalDelegate : public AutofillExternalDelegate { |
| 143 public: | 143 public: |
| 144 explicit MockAutofillExternalDelegate(TabContentsWrapper* wrapper) | 144 explicit MockAutofillExternalDelegate(TabContentsWrapper* wrapper) |
| 145 : AutofillExternalDelegate(wrapper) {} | 145 : AutofillExternalDelegate(wrapper) {} |
| 146 virtual ~MockAutofillExternalDelegate() {} | 146 virtual ~MockAutofillExternalDelegate() {} |
| 147 | 147 |
| 148 virtual void OnQuery(int query_id, | 148 virtual void OnQuery(int query_id, |
| 149 const webkit_glue::FormData& form, | 149 const webkit::forms::FormData& form, |
| 150 const webkit_glue::FormField& field, | 150 const webkit::forms::FormField& field, |
| 151 const gfx::Rect& bounds, | 151 const gfx::Rect& bounds, |
| 152 bool display_warning) OVERRIDE {} | 152 bool display_warning) OVERRIDE {} |
| 153 | 153 |
| 154 MOCK_METHOD5(OnSuggestionsReturned, | 154 MOCK_METHOD5(OnSuggestionsReturned, |
| 155 void(int query_id, | 155 void(int query_id, |
| 156 const std::vector<string16>& autofill_values, | 156 const std::vector<string16>& autofill_values, |
| 157 const std::vector<string16>& autofill_labels, | 157 const std::vector<string16>& autofill_labels, |
| 158 const std::vector<string16>& autofill_icons, | 158 const std::vector<string16>& autofill_icons, |
| 159 const std::vector<int>& autofill_unique_ids)); | 159 const std::vector<int>& autofill_unique_ids)); |
| 160 | 160 |
| 161 virtual void HideAutofillPopup() OVERRIDE {} | 161 virtual void HideAutofillPopup() OVERRIDE {} |
| 162 | 162 |
| 163 | 163 |
| 164 virtual void ApplyAutofillSuggestions( | 164 virtual void ApplyAutofillSuggestions( |
| 165 const std::vector<string16>& autofill_values, | 165 const std::vector<string16>& autofill_values, |
| 166 const std::vector<string16>& autofill_labels, | 166 const std::vector<string16>& autofill_labels, |
| 167 const std::vector<string16>& autofill_icons, | 167 const std::vector<string16>& autofill_icons, |
| 168 const std::vector<int>& autofill_unique_ids, | 168 const std::vector<int>& autofill_unique_ids, |
| 169 int separator_index) OVERRIDE {} | 169 int separator_index) OVERRIDE {} |
| 170 | 170 |
| 171 virtual void OnQueryPlatformSpecific( | 171 virtual void OnQueryPlatformSpecific( |
| 172 int query_id, | 172 int query_id, |
| 173 const webkit_glue::FormData& form, | 173 const webkit::forms::FormData& form, |
| 174 const webkit_glue::FormField& field) OVERRIDE {} | 174 const webkit::forms::FormField& field) OVERRIDE {} |
| 175 | 175 |
| 176 private: | 176 private: |
| 177 DISALLOW_COPY_AND_ASSIGN(MockAutofillExternalDelegate); | 177 DISALLOW_COPY_AND_ASSIGN(MockAutofillExternalDelegate); |
| 178 }; | 178 }; |
| 179 | 179 |
| 180 class AutocompleteHistoryManagerStubSend : public AutocompleteHistoryManager { | 180 class AutocompleteHistoryManagerStubSend : public AutocompleteHistoryManager { |
| 181 public: | 181 public: |
| 182 explicit AutocompleteHistoryManagerStubSend(TabContents* tab_contents, | 182 explicit AutocompleteHistoryManagerStubSend(TabContents* tab_contents, |
| 183 Profile* profile, | 183 Profile* profile, |
| 184 WebDataService* wds) | 184 WebDataService* wds) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 198 &profile_, web_data_service_); | 198 &profile_, web_data_service_); |
| 199 | 199 |
| 200 MockAutofillExternalDelegate external_delegate( | 200 MockAutofillExternalDelegate external_delegate( |
| 201 TabContentsWrapper::GetCurrentWrapperForContents(contents())); | 201 TabContentsWrapper::GetCurrentWrapperForContents(contents())); |
| 202 EXPECT_CALL(external_delegate, OnSuggestionsReturned(_, _, _, _, _)); | 202 EXPECT_CALL(external_delegate, OnSuggestionsReturned(_, _, _, _, _)); |
| 203 autocomplete_history_manager.SetExternalDelegate(&external_delegate); | 203 autocomplete_history_manager.SetExternalDelegate(&external_delegate); |
| 204 | 204 |
| 205 // Should trigger a call to OnSuggestionsReturned, verified by the mock. | 205 // Should trigger a call to OnSuggestionsReturned, verified by the mock. |
| 206 autocomplete_history_manager.SendSuggestions(NULL); | 206 autocomplete_history_manager.SendSuggestions(NULL); |
| 207 } | 207 } |
| OLD | NEW |