blob: 8f2935e1530ee55d169b41643ed21cf12d2f0f02 [file] [log] [blame]
// 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);
}