| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <vector> |
| |
| #include "base/memory/ref_counted.h" |
| #include "base/string16.h" |
| #include "base/task.h" |
| #include "base/utf_string_conversions.h" |
| #include "chrome/browser/autocomplete_history_manager.h" |
| #include "chrome/browser/webdata/web_data_service.h" |
| #include "chrome/test/testing_browser_process.h" |
| #include "chrome/test/testing_browser_process_test.h" |
| #include "chrome/test/testing_profile.h" |
| #include "content/browser/renderer_host/test_render_view_host.h" |
| #include "content/browser/tab_contents/test_tab_contents.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "webkit/glue/form_data.h" |
| |
| using testing::_; |
| using webkit_glue::FormData; |
| |
| class MockWebDataService : public WebDataService { |
| public: |
| MOCK_METHOD1(AddFormFields, |
| void(const std::vector<webkit_glue::FormField>&)); // NOLINT |
| }; |
| |
| class AutocompleteHistoryManagerTest : public RenderViewHostTestHarness { |
| protected: |
| AutocompleteHistoryManagerTest() |
| : ui_thread_(BrowserThread::UI, MessageLoopForUI::current()) { |
| } |
| |
| virtual void SetUp() { |
| RenderViewHostTestHarness::SetUp(); |
| web_data_service_ = new MockWebDataService(); |
| autocomplete_manager_.reset(new AutocompleteHistoryManager( |
| contents(), &profile_, web_data_service_)); |
| } |
| |
| BrowserThread ui_thread_; |
| |
| TestingProfile profile_; |
| scoped_refptr<MockWebDataService> web_data_service_; |
| scoped_ptr<AutocompleteHistoryManager> autocomplete_manager_; |
| }; |
| |
| // Tests that credit card numbers are not sent to the WebDatabase to be saved. |
| TEST_F(AutocompleteHistoryManagerTest, CreditCardNumberValue) { |
| FormData form; |
| form.name = ASCIIToUTF16("MyForm"); |
| form.method = ASCIIToUTF16("POST"); |
| form.origin = GURL("http://myform.com/form.html"); |
| form.action = GURL("http://myform.com/submit.html"); |
| form.user_submitted = true; |
| |
| // Valid Visa credit card number pulled from the paypal help site. |
| webkit_glue::FormField valid_cc(ASCIIToUTF16("Credit Card"), |
| ASCIIToUTF16("ccnum"), |
| ASCIIToUTF16("4012888888881881"), |
| ASCIIToUTF16("text"), |
| 20, |
| false); |
| form.fields.push_back(valid_cc); |
| |
| EXPECT_CALL(*web_data_service_, AddFormFields(_)).Times(0); |
| autocomplete_manager_->OnFormSubmitted(form); |
| } |
| |
| // Contrary test to AutocompleteHistoryManagerTest.CreditCardNumberValue. The |
| // value being submitted is not a valid credit card number, so it will be sent |
| // to the WebDatabase to be saved. |
| TEST_F(AutocompleteHistoryManagerTest, NonCreditCardNumberValue) { |
| FormData form; |
| form.name = ASCIIToUTF16("MyForm"); |
| form.method = ASCIIToUTF16("POST"); |
| form.origin = GURL("http://myform.com/form.html"); |
| form.action = GURL("http://myform.com/submit.html"); |
| form.user_submitted = true; |
| |
| // Invalid credit card number. |
| webkit_glue::FormField invalid_cc(ASCIIToUTF16("Credit Card"), |
| ASCIIToUTF16("ccnum"), |
| ASCIIToUTF16("4580123456789012"), |
| ASCIIToUTF16("text"), |
| 20, |
| false); |
| form.fields.push_back(invalid_cc); |
| |
| EXPECT_CALL(*(web_data_service_.get()), AddFormFields(_)).Times(1); |
| autocomplete_manager_->OnFormSubmitted(form); |
| } |
| |
| // Tests that SSNs are not sent to the WebDatabase to be saved. |
| TEST_F(AutocompleteHistoryManagerTest, SSNValue) { |
| FormData form; |
| form.name = ASCIIToUTF16("MyForm"); |
| form.method = ASCIIToUTF16("POST"); |
| form.origin = GURL("http://myform.com/form.html"); |
| form.action = GURL("http://myform.com/submit.html"); |
| form.user_submitted = true; |
| |
| webkit_glue::FormField ssn(ASCIIToUTF16("Social Security Number"), |
| ASCIIToUTF16("ssn"), |
| ASCIIToUTF16("078-05-1120"), |
| ASCIIToUTF16("text"), |
| 20, |
| false); |
| form.fields.push_back(ssn); |
| |
| EXPECT_CALL(*web_data_service_, AddFormFields(_)).Times(0); |
| autocomplete_manager_->OnFormSubmitted(form); |
| } |