Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Unified Diff: components/autofill/browser/webdata/web_data_service_unittest.cc

Issue 17392006: In components/autofill, move browser/ to core/browser/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase to fix conflicts Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/autofill/browser/webdata/web_data_service_unittest.cc
diff --git a/components/autofill/browser/webdata/web_data_service_unittest.cc b/components/autofill/browser/webdata/web_data_service_unittest.cc
deleted file mode 100644
index 746df1b2112efbb0d48b8a7f763f8a919be2cf35..0000000000000000000000000000000000000000
--- a/components/autofill/browser/webdata/web_data_service_unittest.cc
+++ /dev/null
@@ -1,574 +0,0 @@
-// Copyright (c) 2012 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 <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/scoped_vector.h"
-#include "base/message_loop.h"
-#include "base/stl_util.h"
-#include "base/strings/string16.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/time.h"
-#include "chrome/browser/webdata/web_data_service.h"
-#include "components/autofill/browser/autofill_country.h"
-#include "components/autofill/browser/autofill_profile.h"
-#include "components/autofill/browser/credit_card.h"
-#include "components/autofill/browser/webdata/autofill_change.h"
-#include "components/autofill/browser/webdata/autofill_entry.h"
-#include "components/autofill/browser/webdata/autofill_table.h"
-#include "components/autofill/browser/webdata/autofill_webdata_service.h"
-#include "components/autofill/browser/webdata/autofill_webdata_service_observer.h"
-#include "components/autofill/core/common/form_field_data.h"
-#include "components/webdata/common/web_data_results.h"
-#include "components/webdata/common/web_data_service_base.h"
-#include "components/webdata/common/web_data_service_consumer.h"
-#include "components/webdata/common/web_database_service.h"
-#include "content/public/test/test_browser_thread.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using base::Time;
-using base::TimeDelta;
-using base::WaitableEvent;
-using content::BrowserThread;
-using testing::_;
-using testing::DoDefault;
-using testing::ElementsAreArray;
-using testing::Pointee;
-using testing::Property;
-
-namespace {
-
-template <class T>
-class AutofillWebDataServiceConsumer: public WebDataServiceConsumer {
- public:
- AutofillWebDataServiceConsumer() : handle_(0) {}
- virtual ~AutofillWebDataServiceConsumer() {}
-
- virtual void OnWebDataServiceRequestDone(WebDataService::Handle handle,
- const WDTypedResult* result) {
- using content::BrowserThread;
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- handle_ = handle;
- const WDResult<T>* wrapped_result =
- static_cast<const WDResult<T>*>(result);
- result_ = wrapped_result->GetValue();
-
- base::MessageLoop::current()->Quit();
- }
-
- WebDataService::Handle handle() { return handle_; }
- T& result() { return result_; }
-
- private:
- WebDataService::Handle handle_;
- T result_;
- DISALLOW_COPY_AND_ASSIGN(AutofillWebDataServiceConsumer);
-};
-
-} // namespace
-
-namespace autofill {
-
-static const int kWebDataServiceTimeoutSeconds = 8;
-
-ACTION_P(SignalEvent, event) {
- event->Signal();
-}
-
-class MockAutofillWebDataServiceObserver
- : public AutofillWebDataServiceObserverOnDBThread {
- public:
- MOCK_METHOD1(AutofillEntriesChanged,
- void(const AutofillChangeList& changes));
- MOCK_METHOD1(AutofillProfileChanged,
- void(const AutofillProfileChange& change));
-};
-
-class WebDataServiceTest : public testing::Test {
- public:
- WebDataServiceTest()
- : ui_thread_(BrowserThread::UI, &message_loop_),
- db_thread_(BrowserThread::DB) {}
-
- protected:
- virtual void SetUp() {
- db_thread_.Start();
-
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
- base::FilePath path = temp_dir_.path().AppendASCII("TestWebDB");
-
- wdbs_ = new WebDatabaseService(
- path,
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB));
- wdbs_->AddTable(scoped_ptr<WebDatabaseTable>(new AutofillTable("en-US")));
- wdbs_->LoadDatabase();
-
- wds_ = new AutofillWebDataService(
- wdbs_, WebDataServiceBase::ProfileErrorCallback());
- wds_->Init();
- }
-
- virtual void TearDown() {
- wds_->ShutdownOnUIThread();
- wdbs_->ShutdownDatabase();
- wds_ = NULL;
- wdbs_ = NULL;
- WaitForDatabaseThread();
-
- base::MessageLoop::current()->PostTask(FROM_HERE,
- base::MessageLoop::QuitClosure());
- base::MessageLoop::current()->Run();
- db_thread_.Stop();
- }
-
- void WaitForDatabaseThread() {
- base::WaitableEvent done(false, false);
- BrowserThread::PostTask(
- BrowserThread::DB,
- FROM_HERE,
- base::Bind(&base::WaitableEvent::Signal, base::Unretained(&done)));
- done.Wait();
- }
-
- base::MessageLoopForUI message_loop_;
- content::TestBrowserThread ui_thread_;
- content::TestBrowserThread db_thread_;
- base::FilePath profile_dir_;
- scoped_refptr<AutofillWebDataService> wds_;
- scoped_refptr<WebDatabaseService> wdbs_;
- base::ScopedTempDir temp_dir_;
-};
-
-class WebDataServiceAutofillTest : public WebDataServiceTest {
- public:
- WebDataServiceAutofillTest()
- : WebDataServiceTest(),
- unique_id1_(1),
- unique_id2_(2),
- test_timeout_(TimeDelta::FromSeconds(kWebDataServiceTimeoutSeconds)),
- done_event_(false, false) {}
-
- protected:
- virtual void SetUp() {
- WebDataServiceTest::SetUp();
- name1_ = ASCIIToUTF16("name1");
- name2_ = ASCIIToUTF16("name2");
- value1_ = ASCIIToUTF16("value1");
- value2_ = ASCIIToUTF16("value2");
-
- void(AutofillWebDataService::*add_observer_func)(
- AutofillWebDataServiceObserverOnDBThread*) =
- &AutofillWebDataService::AddObserver;
- BrowserThread::PostTask(
- BrowserThread::DB,
- FROM_HERE,
- base::Bind(add_observer_func, wds_, &observer_));
- WaitForDatabaseThread();
- }
-
- virtual void TearDown() {
- void(AutofillWebDataService::*remove_observer_func)(
- AutofillWebDataServiceObserverOnDBThread*) =
- &AutofillWebDataService::RemoveObserver;
- BrowserThread::PostTask(
- BrowserThread::DB,
- FROM_HERE,
- base::Bind(remove_observer_func, wds_, &observer_));
- WaitForDatabaseThread();
-
- WebDataServiceTest::TearDown();
- }
-
- void AppendFormField(const base::string16& name,
- const base::string16& value,
- std::vector<FormFieldData>* form_fields) {
- FormFieldData field;
- field.name = name;
- field.value = value;
- form_fields->push_back(field);
- }
-
- base::string16 name1_;
- base::string16 name2_;
- base::string16 value1_;
- base::string16 value2_;
- int unique_id1_, unique_id2_;
- const TimeDelta test_timeout_;
- testing::NiceMock<MockAutofillWebDataServiceObserver> observer_;
- WaitableEvent done_event_;
-};
-
-// Simple consumer for Keywords data. Stores the result data and quits UI
-// message loop when callback is invoked.
-class KeywordsConsumer : public WebDataServiceConsumer {
- public:
- KeywordsConsumer() : load_succeeded(false) {}
-
- virtual void OnWebDataServiceRequestDone(
- WebDataService::Handle h,
- const WDTypedResult* result) OVERRIDE {
- if (result) {
- load_succeeded = true;
- DCHECK(result->GetType() == KEYWORDS_RESULT);
- keywords_result =
- reinterpret_cast<const WDResult<WDKeywordsResult>*>(
- result)->GetValue();
- }
-
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- base::MessageLoop::current()->Quit();
- }
-
- // True if keywords data was loaded successfully.
- bool load_succeeded;
- // Result data from completion callback.
- WDKeywordsResult keywords_result;
-};
-
-TEST_F(WebDataServiceAutofillTest, FormFillAdd) {
- const AutofillChange expected_changes[] = {
- AutofillChange(AutofillChange::ADD, AutofillKey(name1_, value1_)),
- AutofillChange(AutofillChange::ADD, AutofillKey(name2_, value2_))
- };
-
- // This will verify that the correct notification is triggered,
- // passing the correct list of autofill keys in the details.
- EXPECT_CALL(observer_,
- AutofillEntriesChanged(ElementsAreArray(expected_changes)))
- .WillOnce(SignalEvent(&done_event_));
-
- std::vector<FormFieldData> form_fields;
- AppendFormField(name1_, value1_, &form_fields);
- AppendFormField(name2_, value2_, &form_fields);
- wds_->AddFormFields(form_fields);
-
- // The event will be signaled when the mock observer is notified.
- done_event_.TimedWait(test_timeout_);
-
- AutofillWebDataServiceConsumer<std::vector<base::string16> > consumer;
- WebDataService::Handle handle;
- static const int limit = 10;
- handle = wds_->GetFormValuesForElementName(
- name1_, base::string16(), limit, &consumer);
-
- // The message loop will exit when the consumer is called.
- base::MessageLoop::current()->Run();
-
- EXPECT_EQ(handle, consumer.handle());
- ASSERT_EQ(1U, consumer.result().size());
- EXPECT_EQ(value1_, consumer.result()[0]);
-}
-
-TEST_F(WebDataServiceAutofillTest, FormFillRemoveOne) {
- // First add some values to autofill.
- EXPECT_CALL(observer_, AutofillEntriesChanged(_))
- .WillOnce(SignalEvent(&done_event_));
- std::vector<FormFieldData> form_fields;
- AppendFormField(name1_, value1_, &form_fields);
- wds_->AddFormFields(form_fields);
-
- // The event will be signaled when the mock observer is notified.
- done_event_.TimedWait(test_timeout_);
-
- // This will verify that the correct notification is triggered,
- // passing the correct list of autofill keys in the details.
- const AutofillChange expected_changes[] = {
- AutofillChange(AutofillChange::REMOVE, AutofillKey(name1_, value1_))
- };
- EXPECT_CALL(observer_,
- AutofillEntriesChanged(ElementsAreArray(expected_changes)))
- .WillOnce(SignalEvent(&done_event_));
- wds_->RemoveFormValueForElementName(name1_, value1_);
-
- // The event will be signaled when the mock observer is notified.
- done_event_.TimedWait(test_timeout_);
-}
-
-TEST_F(WebDataServiceAutofillTest, FormFillRemoveMany) {
- TimeDelta one_day(TimeDelta::FromDays(1));
- Time t = Time::Now();
-
- EXPECT_CALL(observer_, AutofillEntriesChanged(_))
- .WillOnce(SignalEvent(&done_event_));
-
- std::vector<FormFieldData> form_fields;
- AppendFormField(name1_, value1_, &form_fields);
- AppendFormField(name2_, value2_, &form_fields);
- wds_->AddFormFields(form_fields);
-
- // The event will be signaled when the mock observer is notified.
- done_event_.TimedWait(test_timeout_);
-
- // This will verify that the correct notification is triggered,
- // passing the correct list of autofill keys in the details.
- const AutofillChange expected_changes[] = {
- AutofillChange(AutofillChange::REMOVE, AutofillKey(name1_, value1_)),
- AutofillChange(AutofillChange::REMOVE, AutofillKey(name2_, value2_))
- };
- EXPECT_CALL(observer_,
- AutofillEntriesChanged(ElementsAreArray(expected_changes)))
- .WillOnce(SignalEvent(&done_event_));
- wds_->RemoveFormElementsAddedBetween(t, t + one_day);
-
- // The event will be signaled when the mock observer is notified.
- done_event_.TimedWait(test_timeout_);
-}
-
-TEST_F(WebDataServiceAutofillTest, ProfileAdd) {
- AutofillProfile profile;
-
- // Check that GUID-based notification was sent.
- const AutofillProfileChange expected_change(
- AutofillProfileChange::ADD, profile.guid(), &profile);
- EXPECT_CALL(observer_, AutofillProfileChanged(expected_change))
- .WillOnce(SignalEvent(&done_event_));
-
- wds_->AddAutofillProfile(profile);
- done_event_.TimedWait(test_timeout_);
-
- // Check that it was added.
- AutofillWebDataServiceConsumer<std::vector<AutofillProfile*> > consumer;
- WebDataService::Handle handle = wds_->GetAutofillProfiles(&consumer);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle, consumer.handle());
- ASSERT_EQ(1U, consumer.result().size());
- EXPECT_EQ(profile, *consumer.result()[0]);
- STLDeleteElements(&consumer.result());
-}
-
-TEST_F(WebDataServiceAutofillTest, ProfileRemove) {
- AutofillProfile profile;
-
- // Add a profile.
- EXPECT_CALL(observer_, AutofillProfileChanged(_))
- .WillOnce(SignalEvent(&done_event_));
- wds_->AddAutofillProfile(profile);
- done_event_.TimedWait(test_timeout_);
-
- // Check that it was added.
- AutofillWebDataServiceConsumer<std::vector<AutofillProfile*> > consumer;
- WebDataService::Handle handle = wds_->GetAutofillProfiles(&consumer);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle, consumer.handle());
- ASSERT_EQ(1U, consumer.result().size());
- EXPECT_EQ(profile, *consumer.result()[0]);
- STLDeleteElements(&consumer.result());
-
- // Check that GUID-based notification was sent.
- const AutofillProfileChange expected_change(
- AutofillProfileChange::REMOVE, profile.guid(), NULL);
- EXPECT_CALL(observer_, AutofillProfileChanged(expected_change))
- .WillOnce(SignalEvent(&done_event_));
-
- // Remove the profile.
- wds_->RemoveAutofillProfile(profile.guid());
- done_event_.TimedWait(test_timeout_);
-
- // Check that it was removed.
- AutofillWebDataServiceConsumer<std::vector<AutofillProfile*> > consumer2;
- WebDataService::Handle handle2 = wds_->GetAutofillProfiles(&consumer2);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle2, consumer2.handle());
- ASSERT_EQ(0U, consumer2.result().size());
-}
-
-TEST_F(WebDataServiceAutofillTest, ProfileUpdate) {
- AutofillProfile profile1;
- profile1.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Abe"));
- AutofillProfile profile2;
- profile2.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Alice"));
-
- EXPECT_CALL(observer_, AutofillProfileChanged(_))
- .WillOnce(DoDefault())
- .WillOnce(SignalEvent(&done_event_));
-
- wds_->AddAutofillProfile(profile1);
- wds_->AddAutofillProfile(profile2);
- done_event_.TimedWait(test_timeout_);
-
- // Check that they were added.
- AutofillWebDataServiceConsumer<std::vector<AutofillProfile*> > consumer;
- WebDataService::Handle handle = wds_->GetAutofillProfiles(&consumer);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle, consumer.handle());
- ASSERT_EQ(2U, consumer.result().size());
- EXPECT_EQ(profile1, *consumer.result()[0]);
- EXPECT_EQ(profile2, *consumer.result()[1]);
- STLDeleteElements(&consumer.result());
-
- AutofillProfile profile1_changed(profile1);
- profile1_changed.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bill"));
- const AutofillProfileChange expected_change(
- AutofillProfileChange::UPDATE, profile1.guid(), &profile1_changed);
-
- EXPECT_CALL(observer_, AutofillProfileChanged(expected_change))
- .WillOnce(SignalEvent(&done_event_));
-
- // Update the profile.
- wds_->UpdateAutofillProfile(profile1_changed);
- done_event_.TimedWait(test_timeout_);
-
- // Check that the updates were made.
- AutofillWebDataServiceConsumer<std::vector<AutofillProfile*> > consumer2;
- WebDataService::Handle handle2 = wds_->GetAutofillProfiles(&consumer2);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle2, consumer2.handle());
- ASSERT_EQ(2U, consumer2.result().size());
- EXPECT_NE(profile1, *consumer2.result()[0]);
- EXPECT_EQ(profile1_changed, *consumer2.result()[0]);
- EXPECT_EQ(profile2, *consumer2.result()[1]);
- STLDeleteElements(&consumer2.result());
-}
-
-TEST_F(WebDataServiceAutofillTest, CreditAdd) {
- CreditCard card;
- wds_->AddCreditCard(card);
- WaitForDatabaseThread();
-
- // Check that it was added.
- AutofillWebDataServiceConsumer<std::vector<CreditCard*> > consumer;
- WebDataService::Handle handle = wds_->GetCreditCards(&consumer);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle, consumer.handle());
- ASSERT_EQ(1U, consumer.result().size());
- EXPECT_EQ(card, *consumer.result()[0]);
- STLDeleteElements(&consumer.result());
-}
-
-TEST_F(WebDataServiceAutofillTest, CreditCardRemove) {
- CreditCard credit_card;
-
- // Add a credit card.
- wds_->AddCreditCard(credit_card);
- WaitForDatabaseThread();
-
- // Check that it was added.
- AutofillWebDataServiceConsumer<std::vector<CreditCard*> > consumer;
- WebDataService::Handle handle = wds_->GetCreditCards(&consumer);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle, consumer.handle());
- ASSERT_EQ(1U, consumer.result().size());
- EXPECT_EQ(credit_card, *consumer.result()[0]);
- STLDeleteElements(&consumer.result());
-
- // Remove the credit card.
- wds_->RemoveCreditCard(credit_card.guid());
- WaitForDatabaseThread();
-
- // Check that it was removed.
- AutofillWebDataServiceConsumer<std::vector<CreditCard*> > consumer2;
- WebDataService::Handle handle2 = wds_->GetCreditCards(&consumer2);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle2, consumer2.handle());
- ASSERT_EQ(0U, consumer2.result().size());
-}
-
-TEST_F(WebDataServiceAutofillTest, CreditUpdate) {
- CreditCard card1;
- card1.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Abe"));
- CreditCard card2;
- card2.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Alice"));
-
- wds_->AddCreditCard(card1);
- wds_->AddCreditCard(card2);
- WaitForDatabaseThread();
-
- // Check that they got added.
- AutofillWebDataServiceConsumer<std::vector<CreditCard*> > consumer;
- WebDataService::Handle handle = wds_->GetCreditCards(&consumer);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle, consumer.handle());
- ASSERT_EQ(2U, consumer.result().size());
- EXPECT_EQ(card1, *consumer.result()[0]);
- EXPECT_EQ(card2, *consumer.result()[1]);
- STLDeleteElements(&consumer.result());
-
- CreditCard card1_changed(card1);
- card1_changed.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Bill"));
-
- wds_->UpdateCreditCard(card1_changed);
- WaitForDatabaseThread();
-
- // Check that the updates were made.
- AutofillWebDataServiceConsumer<std::vector<CreditCard*> > consumer2;
- WebDataService::Handle handle2 = wds_->GetCreditCards(&consumer2);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle2, consumer2.handle());
- ASSERT_EQ(2U, consumer2.result().size());
- EXPECT_NE(card1, *consumer2.result()[0]);
- EXPECT_EQ(card1_changed, *consumer2.result()[0]);
- EXPECT_EQ(card2, *consumer2.result()[1]);
- STLDeleteElements(&consumer2.result());
-}
-
-TEST_F(WebDataServiceAutofillTest, AutofillRemoveModifiedBetween) {
- // Add a profile.
- EXPECT_CALL(observer_, AutofillProfileChanged(_))
- .WillOnce(SignalEvent(&done_event_));
- AutofillProfile profile;
- wds_->AddAutofillProfile(profile);
- done_event_.TimedWait(test_timeout_);
-
- // Check that it was added.
- AutofillWebDataServiceConsumer<std::vector<AutofillProfile*> >
- profile_consumer;
- WebDataService::Handle handle = wds_->GetAutofillProfiles(&profile_consumer);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle, profile_consumer.handle());
- ASSERT_EQ(1U, profile_consumer.result().size());
- EXPECT_EQ(profile, *profile_consumer.result()[0]);
- STLDeleteElements(&profile_consumer.result());
-
- // Add a credit card.
- CreditCard credit_card;
- wds_->AddCreditCard(credit_card);
- WaitForDatabaseThread();
-
- // Check that it was added.
- AutofillWebDataServiceConsumer<std::vector<CreditCard*> > card_consumer;
- handle = wds_->GetCreditCards(&card_consumer);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle, card_consumer.handle());
- ASSERT_EQ(1U, card_consumer.result().size());
- EXPECT_EQ(credit_card, *card_consumer.result()[0]);
- STLDeleteElements(&card_consumer.result());
-
- // Check that GUID-based notification was sent for the profile.
- const AutofillProfileChange expected_profile_change(
- AutofillProfileChange::REMOVE, profile.guid(), NULL);
- EXPECT_CALL(observer_, AutofillProfileChanged(expected_profile_change))
- .WillOnce(SignalEvent(&done_event_));
-
- // Remove the profile using time range of "all time".
- wds_->RemoveAutofillDataModifiedBetween(Time(), Time());
- done_event_.TimedWait(test_timeout_);
- WaitForDatabaseThread();
-
- // Check that the profile was removed.
- AutofillWebDataServiceConsumer<std::vector<AutofillProfile*> >
- profile_consumer2;
- WebDataService::Handle handle2 =
- wds_->GetAutofillProfiles(&profile_consumer2);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle2, profile_consumer2.handle());
- ASSERT_EQ(0U, profile_consumer2.result().size());
-
- // Check that the credit card was removed.
- AutofillWebDataServiceConsumer<std::vector<CreditCard*> > card_consumer2;
- handle2 = wds_->GetCreditCards(&card_consumer2);
- base::MessageLoop::current()->Run();
- EXPECT_EQ(handle2, card_consumer2.handle());
- ASSERT_EQ(0U, card_consumer2.result().size());
-}
-
-} // namespace autofill

Powered by Google App Engine
This is Rietveld 408576698