Commit 7419fdde authored by Findit's avatar Findit

Revert "[AF] Add integration tests for wallet metadata"

This reverts commit 4cde6da1.

Reason for revert:

Findit (https://goo.gl/kROfz5) identified CL at revision 607282 as the
culprit for flakes in the build cycles as shown on:
https://findit-for-me.appspot.com/waterfall/flake/flake-culprit?key=ag9zfmZpbmRpdC1mb3ItbWVyQwsSDEZsYWtlQ3VscHJpdCIxY2hyb21pdW0vNGNkZTZkYTFiNmM4NTM0YjEyZGJlOGNlZDc2NTY1MTE2NWYyYmNlMgw

Sample Failed Build: https://ci.chromium.org/buildbot/chromium.win/Win7%20Tests%20%28dbg%29%281%29/72883

Sample Failed Step: sync_integration_tests

Sample Flaky Test: USS/TwoClientWalletSyncTest.UpdateCreditCardMetadata/1

Original change's description:
> [AF] Add integration tests for wallet metadata
> 
> This CL creates the first integration tests for the autofill wallet
> metadata model type.
> 
> Bug: 894001
> Change-Id: Ie756264fe6b22d863a6965456ec0d7b627774c23
> Reviewed-on: https://chromium-review.googlesource.com/c/1306357
> Commit-Queue: Jan Krcal <jkrcal@chromium.org>
> Reviewed-by: Sebastien Seguin-Gagnon <sebsg@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#607282}

Change-Id: I6021aa4d092acfeb62f635bc04c76b7c11738101
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 894001, 904577
Reviewed-on: https://chromium-review.googlesource.com/c/1332393
Cr-Commit-Position: refs/heads/master@{#607359}
parent 5698367b
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "components/autofill/core/browser/autofill_profile.h" #include "components/autofill/core/browser/autofill_profile.h"
#include "components/autofill/core/browser/autofill_test_utils.h" #include "components/autofill/core/browser/autofill_test_utils.h"
#include "components/autofill/core/browser/autofill_type.h" #include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/payments/payments_customer_data.h"
#include "components/autofill/core/browser/personal_data_manager.h" #include "components/autofill/core/browser/personal_data_manager.h"
#include "components/autofill/core/browser/webdata/autofill_entry.h" #include "components/autofill/core/browser/webdata/autofill_entry.h"
#include "components/autofill/core/browser/webdata/autofill_table.h" #include "components/autofill/core/browser/webdata/autofill_table.h"
...@@ -59,11 +60,6 @@ class MockWebDataServiceObserver ...@@ -59,11 +60,6 @@ class MockWebDataServiceObserver
void(const AutofillChangeList& changes)); void(const AutofillChangeList& changes));
}; };
scoped_refptr<AutofillWebDataService> GetWebDataService(int index) {
return WebDataServiceFactory::GetAutofillWebDataForProfile(
test()->GetProfile(index), ServiceAccessType::EXPLICIT_ACCESS);
}
void WaitForCurrentTasksToComplete(base::SequencedTaskRunner* task_runner) { void WaitForCurrentTasksToComplete(base::SequencedTaskRunner* task_runner) {
base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL, base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL,
base::WaitableEvent::InitialState::NOT_SIGNALED); base::WaitableEvent::InitialState::NOT_SIGNALED);
...@@ -80,7 +76,8 @@ void RemoveKeyDontBlockForSync(int profile, const AutofillKey& key) { ...@@ -80,7 +76,8 @@ void RemoveKeyDontBlockForSync(int profile, const AutofillKey& key) {
EXPECT_CALL(mock_observer, AutofillEntriesChanged(_)) EXPECT_CALL(mock_observer, AutofillEntriesChanged(_))
.WillOnce(SignalEvent(&done_event)); .WillOnce(SignalEvent(&done_event));
scoped_refptr<AutofillWebDataService> wds = GetWebDataService(profile); scoped_refptr<AutofillWebDataService> wds =
autofill_helper::GetProfileWebDataService(profile);
void (AutofillWebDataService::*add_observer_func)( void (AutofillWebDataService::*add_observer_func)(
AutofillWebDataServiceObserverOnDBSequence*) = AutofillWebDataServiceObserverOnDBSequence*) =
...@@ -114,6 +111,30 @@ std::vector<AutofillEntry> GetAllAutofillEntries(AutofillWebDataService* wds) { ...@@ -114,6 +111,30 @@ std::vector<AutofillEntry> GetAllAutofillEntries(AutofillWebDataService* wds) {
return entries; return entries;
} }
void SetServerCardsOnDBSequence(
AutofillWebDataService* wds,
const std::vector<autofill::CreditCard>& credit_cards) {
DCHECK(wds->GetDBTaskRunner()->RunsTasksInCurrentSequence());
AutofillTable::FromWebDatabase(wds->GetDatabase())
->SetServerCreditCards(credit_cards);
}
void SetServerProfilesOnDBSequence(
AutofillWebDataService* wds,
const std::vector<autofill::AutofillProfile>& profiles) {
DCHECK(wds->GetDBTaskRunner()->RunsTasksInCurrentSequence());
AutofillTable::FromWebDatabase(wds->GetDatabase())
->SetServerProfiles(profiles);
}
void SetPaymentsCustomerDataOnDBSequence(
AutofillWebDataService* wds,
const autofill::PaymentsCustomerData& customer_data) {
DCHECK(wds->GetDBTaskRunner()->RunsTasksInCurrentSequence());
AutofillTable::FromWebDatabase(wds->GetDatabase())
->SetPaymentsCustomerData(&customer_data);
}
bool ProfilesMatchImpl( bool ProfilesMatchImpl(
int profile_a, int profile_a,
const std::vector<AutofillProfile*>& autofill_profiles_a, const std::vector<AutofillProfile*>& autofill_profiles_a,
...@@ -206,6 +227,16 @@ AutofillProfile CreateUniqueAutofillProfile() { ...@@ -206,6 +227,16 @@ AutofillProfile CreateUniqueAutofillProfile() {
return profile; return profile;
} }
scoped_refptr<AutofillWebDataService> GetProfileWebDataService(int index) {
return WebDataServiceFactory::GetAutofillWebDataForProfile(
test()->GetProfile(index), ServiceAccessType::EXPLICIT_ACCESS);
}
scoped_refptr<AutofillWebDataService> GetAccountWebDataService(int index) {
return WebDataServiceFactory::GetAutofillWebDataForAccount(
test()->GetProfile(index), ServiceAccessType::EXPLICIT_ACCESS);
}
PersonalDataManager* GetPersonalDataManager(int index) { PersonalDataManager* GetPersonalDataManager(int index) {
return autofill::PersonalDataManagerFactory::GetForProfile( return autofill::PersonalDataManagerFactory::GetForProfile(
test()->GetProfile(index)); test()->GetProfile(index));
...@@ -226,7 +257,7 @@ void AddKeys(int profile, const std::set<AutofillKey>& keys) { ...@@ -226,7 +257,7 @@ void AddKeys(int profile, const std::set<AutofillKey>& keys) {
EXPECT_CALL(mock_observer, AutofillEntriesChanged(_)) EXPECT_CALL(mock_observer, AutofillEntriesChanged(_))
.WillOnce(SignalEvent(&done_event)); .WillOnce(SignalEvent(&done_event));
scoped_refptr<AutofillWebDataService> wds = GetWebDataService(profile); scoped_refptr<AutofillWebDataService> wds = GetProfileWebDataService(profile);
void (AutofillWebDataService::*add_observer_func)( void (AutofillWebDataService::*add_observer_func)(
AutofillWebDataServiceObserverOnDBSequence*) = AutofillWebDataServiceObserverOnDBSequence*) =
...@@ -247,7 +278,8 @@ void AddKeys(int profile, const std::set<AutofillKey>& keys) { ...@@ -247,7 +278,8 @@ void AddKeys(int profile, const std::set<AutofillKey>& keys) {
void RemoveKey(int profile, const AutofillKey& key) { void RemoveKey(int profile, const AutofillKey& key) {
RemoveKeyDontBlockForSync(profile, key); RemoveKeyDontBlockForSync(profile, key);
WaitForCurrentTasksToComplete(GetWebDataService(profile)->GetDBTaskRunner()); WaitForCurrentTasksToComplete(
autofill_helper::GetProfileWebDataService(profile)->GetDBTaskRunner());
} }
void RemoveKeys(int profile) { void RemoveKeys(int profile) {
...@@ -255,11 +287,12 @@ void RemoveKeys(int profile) { ...@@ -255,11 +287,12 @@ void RemoveKeys(int profile) {
for (const AutofillEntry& entry : keys) { for (const AutofillEntry& entry : keys) {
RemoveKeyDontBlockForSync(profile, entry.key()); RemoveKeyDontBlockForSync(profile, entry.key());
} }
WaitForCurrentTasksToComplete(GetWebDataService(profile)->GetDBTaskRunner()); WaitForCurrentTasksToComplete(
autofill_helper::GetProfileWebDataService(profile)->GetDBTaskRunner());
} }
std::set<AutofillEntry> GetAllKeys(int profile) { std::set<AutofillEntry> GetAllKeys(int profile) {
scoped_refptr<AutofillWebDataService> wds = GetWebDataService(profile); scoped_refptr<AutofillWebDataService> wds = GetProfileWebDataService(profile);
std::vector<AutofillEntry> all_entries = GetAllAutofillEntries(wds.get()); std::vector<AutofillEntry> all_entries = GetAllAutofillEntries(wds.get());
return std::set<AutofillEntry>(all_entries.begin(), all_entries.end()); return std::set<AutofillEntry>(all_entries.begin(), all_entries.end());
} }
...@@ -276,6 +309,35 @@ void SetCreditCards(int profile, std::vector<CreditCard>* credit_cards) { ...@@ -276,6 +309,35 @@ void SetCreditCards(int profile, std::vector<CreditCard>* credit_cards) {
GetPersonalDataManager(profile)->SetCreditCards(credit_cards); GetPersonalDataManager(profile)->SetCreditCards(credit_cards);
} }
void SetServerCreditCards(
int profile,
const std::vector<autofill::CreditCard>& credit_cards) {
scoped_refptr<AutofillWebDataService> wds = GetProfileWebDataService(profile);
wds->GetDBTaskRunner()->PostTask(
FROM_HERE, base::BindOnce(&SetServerCardsOnDBSequence,
base::Unretained(wds.get()), credit_cards));
WaitForCurrentTasksToComplete(wds->GetDBTaskRunner());
}
void SetServerProfiles(int profile,
const std::vector<autofill::AutofillProfile>& profiles) {
scoped_refptr<AutofillWebDataService> wds = GetProfileWebDataService(profile);
wds->GetDBTaskRunner()->PostTask(
FROM_HERE, base::BindOnce(&SetServerProfilesOnDBSequence,
base::Unretained(wds.get()), profiles));
WaitForCurrentTasksToComplete(wds->GetDBTaskRunner());
}
void SetPaymentsCustomerData(
int profile,
const autofill::PaymentsCustomerData& customer_data) {
scoped_refptr<AutofillWebDataService> wds = GetProfileWebDataService(profile);
wds->GetDBTaskRunner()->PostTask(
FROM_HERE, base::BindOnce(&SetPaymentsCustomerDataOnDBSequence,
base::Unretained(wds.get()), customer_data));
WaitForCurrentTasksToComplete(wds->GetDBTaskRunner());
}
void AddProfile(int profile, const AutofillProfile& autofill_profile) { void AddProfile(int profile, const AutofillProfile& autofill_profile) {
std::vector<AutofillProfile> autofill_profiles; std::vector<AutofillProfile> autofill_profiles;
for (AutofillProfile* profile : GetAllAutoFillProfiles(profile)) { for (AutofillProfile* profile : GetAllAutoFillProfiles(profile)) {
...@@ -327,7 +389,8 @@ std::vector<AutofillProfile*> GetAllAutoFillProfiles(int profile) { ...@@ -327,7 +389,8 @@ std::vector<AutofillProfile*> GetAllAutoFillProfiles(int profile) {
// data, but this shouldn't cause problems. While PersonalDataManager will // data, but this shouldn't cause problems. While PersonalDataManager will
// cancel outstanding queries, this is only instigated on the UI sequence, // cancel outstanding queries, this is only instigated on the UI sequence,
// which we are about to block, which means we are safe. // which we are about to block, which means we are safe.
WaitForCurrentTasksToComplete(GetWebDataService(profile)->GetDBTaskRunner()); WaitForCurrentTasksToComplete(
autofill_helper::GetProfileWebDataService(profile)->GetDBTaskRunner());
return pdm->GetProfiles(); return pdm->GetProfiles();
} }
...@@ -383,9 +446,9 @@ bool AutofillProfileChecker::Wait() { ...@@ -383,9 +446,9 @@ bool AutofillProfileChecker::Wait() {
// before any locally instigated async writes. This is run exactly one time // before any locally instigated async writes. This is run exactly one time
// before the first IsExitConditionSatisfied() is called. // before the first IsExitConditionSatisfied() is called.
WaitForCurrentTasksToComplete( WaitForCurrentTasksToComplete(
GetWebDataService(profile_a_)->GetDBTaskRunner()); autofill_helper::GetProfileWebDataService(profile_a_)->GetDBTaskRunner());
WaitForCurrentTasksToComplete( WaitForCurrentTasksToComplete(
GetWebDataService(profile_b_)->GetDBTaskRunner()); autofill_helper::GetProfileWebDataService(profile_b_)->GetDBTaskRunner());
return StatusChangeChecker::Wait(); return StatusChangeChecker::Wait();
} }
......
...@@ -20,7 +20,9 @@ class AutofillEntry; ...@@ -20,7 +20,9 @@ class AutofillEntry;
class AutofillKey; class AutofillKey;
class AutofillProfile; class AutofillProfile;
class AutofillType; class AutofillType;
class AutofillWebDataService;
class CreditCard; class CreditCard;
struct PaymentsCustomerData;
class PersonalDataManager; class PersonalDataManager;
} // namespace autofill } // namespace autofill
...@@ -33,6 +35,15 @@ enum ProfileType { ...@@ -33,6 +35,15 @@ enum ProfileType {
PROFILE_NULL PROFILE_NULL
}; };
// Used to access the web data service within a particular sync profile.
scoped_refptr<autofill::AutofillWebDataService> GetProfileWebDataService(
int index) WARN_UNUSED_RESULT;
// Used to access the account-scoped web data service within a particular sync
// profile.
scoped_refptr<autofill::AutofillWebDataService> GetAccountWebDataService(
int index) WARN_UNUSED_RESULT;
// Used to access the personal data manager within a particular sync profile. // Used to access the personal data manager within a particular sync profile.
autofill::PersonalDataManager* GetPersonalDataManager( autofill::PersonalDataManager* GetPersonalDataManager(
int index) WARN_UNUSED_RESULT; int index) WARN_UNUSED_RESULT;
...@@ -65,6 +76,17 @@ void SetProfiles(int profile, ...@@ -65,6 +76,17 @@ void SetProfiles(int profile,
void SetCreditCards(int profile, void SetCreditCards(int profile,
std::vector<autofill::CreditCard>* credit_cards); std::vector<autofill::CreditCard>* credit_cards);
void SetServerCreditCards(
int profile,
const std::vector<autofill::CreditCard>& credit_cards);
void SetServerProfiles(int profile,
const std::vector<autofill::AutofillProfile>& profiles);
void SetPaymentsCustomerData(
int profile,
const autofill::PaymentsCustomerData& customer_data);
// Adds the autofill profile |autofill_profile| to sync profile |profile|. // Adds the autofill profile |autofill_profile| to sync profile |profile|.
void AddProfile(int profile, const autofill::AutofillProfile& autofill_profile); void AddProfile(int profile, const autofill::AutofillProfile& autofill_profile);
......
// Copyright 2018 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 "base/macros.h"
#include "chrome/browser/sync/test/integration/sync_test.h"
#include "chrome/browser/sync/test/integration/wallet_helper.h"
#include "components/autofill/core/browser/autofill_profile.h"
#include "components/autofill/core/browser/credit_card.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
using autofill::AutofillProfile;
using autofill::CreditCard;
using autofill::PersonalDataManager;
using wallet_helper::CreateDefaultSyncPaymentsCustomerData;
using wallet_helper::CreateSyncWalletAddress;
using wallet_helper::CreateSyncWalletCard;
using wallet_helper::GetCreditCard;
using wallet_helper::GetServerCreditCards;
using wallet_helper::GetServerProfiles;
using wallet_helper::UpdateServerAddressMetadata;
using wallet_helper::UpdateServerCardMetadata;
class TwoClientWalletSyncTest : public UssWalletSwitchToggler, public SyncTest {
public:
TwoClientWalletSyncTest() : SyncTest(TWO_CLIENT) {}
~TwoClientWalletSyncTest() override {}
bool TestUsesSelfNotifications() override { return false; }
private:
DISALLOW_COPY_AND_ASSIGN(TwoClientWalletSyncTest);
};
IN_PROC_BROWSER_TEST_P(TwoClientWalletSyncTest, UpdateCreditCardMetadata) {
InitWithDefaultFeatures();
GetFakeServer()->SetWalletData(
{CreateSyncWalletCard(/*name=*/"card-1", /*last_four=*/"0001"),
CreateSyncWalletAddress(/*name=*/"address-1", /*company=*/"Company-1"),
CreateDefaultSyncPaymentsCustomerData()});
ASSERT_TRUE(SetupSync());
// Increase use count on the first client.
CreditCard card = GetCreditCard(/*name=*/"card-1", /*last_four=*/"0001");
card.set_use_count(5);
UpdateServerCardMetadata(0, card);
EXPECT_TRUE(AutofillWalletChecker(0, 1).Wait());
// Make sure both clients have use_count=5.
std::vector<CreditCard*> credit_cards = GetServerCreditCards(1);
EXPECT_EQ(1U, credit_cards.size());
EXPECT_EQ(5u, credit_cards[0]->use_count());
credit_cards = GetServerCreditCards(0);
EXPECT_EQ(1U, credit_cards.size());
EXPECT_EQ(5u, credit_cards[0]->use_count());
}
INSTANTIATE_TEST_CASE_P(USS,
TwoClientWalletSyncTest,
::testing::Values(false, true));
} // namespace
This diff is collapsed.
// Copyright 2018 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.
#ifndef CHROME_BROWSER_SYNC_TEST_INTEGRATION_WALLET_HELPER_H_
#define CHROME_BROWSER_SYNC_TEST_INTEGRATION_WALLET_HELPER_H_
#include <vector>
#include "base/test/scoped_feature_list.h"
#include "chrome/browser/sync/test/integration/multi_client_status_change_checker.h"
#include "components/autofill/core/browser/personal_data_manager_observer.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace autofill {
class AutofillProfile;
class AutofillWebDataService;
class CreditCard;
class PersonalDataManager;
struct PaymentsCustomerData;
} // namespace autofill
namespace sync_pb {
class SyncEntity;
}
namespace wallet_helper {
extern const char kDefaultCardID[];
extern const char kDefaultAddressID[];
extern const char kDefaultCustomerID[];
extern const char kDefaultBillingAddressID[];
// Used to access the personal data manager within a particular sync profile.
autofill::PersonalDataManager* GetPersonalDataManager(int index)
WARN_UNUSED_RESULT;
// Used to access the web data service within a particular sync profile.
scoped_refptr<autofill::AutofillWebDataService> GetProfileWebDataService(
int index) WARN_UNUSED_RESULT;
// Used to access the account-scoped web data service within a particular sync
// profile.
scoped_refptr<autofill::AutofillWebDataService> GetAccountWebDataService(
int index) WARN_UNUSED_RESULT;
void SetServerCreditCards(
int profile,
const std::vector<autofill::CreditCard>& credit_cards);
void SetServerProfiles(int profile,
const std::vector<autofill::AutofillProfile>& profiles);
void SetPaymentsCustomerData(
int profile,
const autofill::PaymentsCustomerData& customer_data);
void UpdateServerCardMetadata(int profile,
const autofill::CreditCard& credit_card);
void UpdateServerAddressMetadata(
int profile,
const autofill::AutofillProfile& server_address);
sync_pb::SyncEntity CreateDefaultSyncWalletCard();
sync_pb::SyncEntity CreateSyncWalletCard(const std::string& name,
const std::string& last_four);
sync_pb::SyncEntity CreateSyncPaymentsCustomerData(
const std::string& customer_id);
sync_pb::SyncEntity CreateDefaultSyncPaymentsCustomerData();
autofill::CreditCard GetDefaultCreditCard();
autofill::CreditCard GetCreditCard(const std::string& name,
const std::string& last_four);
sync_pb::SyncEntity CreateDefaultSyncWalletAddress();
sync_pb::SyncEntity CreateSyncWalletAddress(const std::string& name,
const std::string& company);
// TODO(sebsg): Instead add a function to create a card, and one to inject in
// the server. Then compare the cards directly.
void ExpectDefaultCreditCardValues(const autofill::CreditCard& card);
// TODO(sebsg): Instead add a function to create a profile, and one to inject in
// the server. Then compare the profiles directly.
void ExpectDefaultProfileValues(const autofill::AutofillProfile& profile);
// Load current data from the database of profile |profile|.
std::vector<autofill::AutofillProfile*> GetServerProfiles(int profile);
std::vector<autofill::CreditCard*> GetServerCreditCards(int profile);
} // namespace wallet_helper
// Checker to block until autofill wallet & server profiles match on both
// profiles.
class AutofillWalletChecker : public StatusChangeChecker,
public autofill::PersonalDataManagerObserver {
public:
AutofillWalletChecker(int profile_a, int profile_b);
~AutofillWalletChecker() override;
// StatusChangeChecker implementation.
bool Wait() override;
bool IsExitConditionSatisfied() override;
std::string GetDebugMessage() const override;
// autofill::PersonalDataManager implementation.
void OnPersonalDataChanged() override;
private:
const int profile_a_;
const int profile_b_;
};
// Class that enables or disables USS based on test parameter. Must be the first
// base class of the test fixture.
// TODO(jkrcal): When the new implementation fully launches, remove this class,
// convert all tests from *_P back to *_F and remove the instance at the end.
class UssWalletSwitchToggler : public testing::WithParamInterface<bool> {
public:
UssWalletSwitchToggler();
// Sets up feature overrides, based on the parameter of the test.
void InitWithDefaultFeatures();
// Sets up feature overrides, adds the toggled feature on top of specified
// |enabled_features| and |disabled_features|. Vectors are passed by value
// because we need to alter them anyway.
void InitWithFeatures(std::vector<base::Feature> enabled_features,
std::vector<base::Feature> disabled_features);
private:
base::test::ScopedFeatureList override_features_;
};
#endif // CHROME_BROWSER_SYNC_TEST_INTEGRATION_WALLET_HELPER_H_
...@@ -5272,8 +5272,6 @@ if (!is_android && !is_fuchsia) { ...@@ -5272,8 +5272,6 @@ if (!is_android && !is_fuchsia) {
"../browser/sync/test/integration/typed_urls_helper.h", "../browser/sync/test/integration/typed_urls_helper.h",
"../browser/sync/test/integration/updated_progress_marker_checker.cc", "../browser/sync/test/integration/updated_progress_marker_checker.cc",
"../browser/sync/test/integration/updated_progress_marker_checker.h", "../browser/sync/test/integration/updated_progress_marker_checker.h",
"../browser/sync/test/integration/wallet_helper.cc",
"../browser/sync/test/integration/wallet_helper.h",
"../browser/sync/test/integration/wifi_credentials_helper.cc", "../browser/sync/test/integration/wifi_credentials_helper.cc",
"../browser/sync/test/integration/wifi_credentials_helper.h", "../browser/sync/test/integration/wifi_credentials_helper.h",
"../browser/sync/test/integration/wifi_credentials_helper_chromeos.cc", "../browser/sync/test/integration/wifi_credentials_helper_chromeos.cc",
...@@ -5380,7 +5378,6 @@ if (!is_android && !is_fuchsia) { ...@@ -5380,7 +5378,6 @@ if (!is_android && !is_fuchsia) {
"../browser/sync/test/integration/two_client_themes_sync_test.cc", "../browser/sync/test/integration/two_client_themes_sync_test.cc",
"../browser/sync/test/integration/two_client_typed_urls_sync_test.cc", "../browser/sync/test/integration/two_client_typed_urls_sync_test.cc",
"../browser/sync/test/integration/two_client_uss_sync_test.cc", "../browser/sync/test/integration/two_client_uss_sync_test.cc",
"../browser/sync/test/integration/two_client_wallet_sync_test.cc",
"data/resource.rc", "data/resource.rc",
] ]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment