| Index: chrome/browser/sync/test/integration/two_client_autofill_sync_test.cc
|
| diff --git a/chrome/browser/sync/test/integration/two_client_autofill_sync_test.cc b/chrome/browser/sync/test/integration/two_client_autofill_sync_test.cc
|
| index 44d69c49f8f329737b1f2e1cb912f02375680236..772f99405349846b171e4c2cdb0862582a2e78c3 100644
|
| --- a/chrome/browser/sync/test/integration/two_client_autofill_sync_test.cc
|
| +++ b/chrome/browser/sync/test/integration/two_client_autofill_sync_test.cc
|
| @@ -22,6 +22,8 @@ using autofill::CreditCard;
|
| using autofill::PersonalDataManager;
|
| using autofill_helper::AddKeys;
|
| using autofill_helper::AddProfile;
|
| +using autofill_helper::AwaitKeysMatch;
|
| +using autofill_helper::AwaitProfilesMatch;
|
| using autofill_helper::CreateAutofillProfile;
|
| using autofill_helper::GetAllKeys;
|
| using autofill_helper::GetAllProfiles;
|
| @@ -47,6 +49,8 @@ class TwoClientAutofillSyncTest : public SyncTest {
|
| TwoClientAutofillSyncTest() : SyncTest(TWO_CLIENT) { count = 0; }
|
| virtual ~TwoClientAutofillSyncTest() {}
|
|
|
| + virtual bool TestUsesSelfNotifications() OVERRIDE { return false; }
|
| +
|
| // We do this so as to make a change that will trigger the autofill to sync.
|
| // By default autofill does not sync unless there is some other change.
|
| void MakeABookmarkChange(int profile) {
|
| @@ -67,8 +71,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, WebDataServiceSanity) {
|
| keys.insert(AutofillKey("name0", "value0"));
|
| AddKeys(0, keys);
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(KeysMatch(0, 1));
|
| + ASSERT_TRUE(AwaitKeysMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllKeys(0).size());
|
|
|
| // Client1 adds a key.
|
| @@ -76,8 +79,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, WebDataServiceSanity) {
|
| keys.insert(AutofillKey("name1", "value1-0"));
|
| AddKeys(1, keys);
|
| MakeABookmarkChange(1);
|
| - ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
|
| - ASSERT_TRUE(KeysMatch(0, 1));
|
| + ASSERT_TRUE(AwaitKeysMatch(0, 1));
|
| ASSERT_EQ(2U, GetAllKeys(0).size());
|
|
|
| // Client0 adds a key with the same name.
|
| @@ -85,23 +87,20 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, WebDataServiceSanity) {
|
| keys.insert(AutofillKey("name1", "value1-1"));
|
| AddKeys(0, keys);
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(KeysMatch(0, 1));
|
| + ASSERT_TRUE(AwaitKeysMatch(0, 1));
|
| ASSERT_EQ(3U, GetAllKeys(0).size());
|
|
|
| // Client1 removes a key.
|
| RemoveKey(1, AutofillKey("name1", "value1-0"));
|
| MakeABookmarkChange(1);
|
| - ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
|
| - ASSERT_TRUE(KeysMatch(0, 1));
|
| + ASSERT_TRUE(AwaitKeysMatch(0, 1));
|
| ASSERT_EQ(2U, GetAllKeys(0).size());
|
|
|
| // Client0 removes the rest.
|
| RemoveKey(0, AutofillKey("name0", "value0"));
|
| RemoveKey(0, AutofillKey("name1", "value1-1"));
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(KeysMatch(0, 1));
|
| + ASSERT_TRUE(AwaitKeysMatch(0, 1));
|
| ASSERT_EQ(0U, GetAllKeys(0).size());
|
| }
|
|
|
| @@ -114,8 +113,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, AddUnicodeProfile) {
|
| base::WideToUTF16(L"\u00C1g\u00E6tis byrjun")));
|
| AddKeys(0, keys);
|
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
|
| - ASSERT_TRUE(AwaitQuiescence());
|
| - ASSERT_TRUE(KeysMatch(0, 1));
|
| + ASSERT_TRUE(AwaitKeysMatch(0, 1));
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest,
|
| @@ -128,8 +126,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest,
|
| keys.insert(AutofillKey("name1", "value1"));
|
| AddKeys(0, keys);
|
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
|
| - ASSERT_TRUE(AwaitQuiescence());
|
| - ASSERT_TRUE(KeysMatch(0, 1));
|
| + ASSERT_TRUE(AwaitKeysMatch(0, 1));
|
| ASSERT_EQ(2U, GetAllKeys(0).size());
|
| }
|
|
|
| @@ -149,8 +146,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest,
|
| AddKeys(1, keys1);
|
|
|
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
|
| - ASSERT_TRUE(AwaitQuiescence());
|
| - ASSERT_TRUE(KeysMatch(0, 1));
|
| + ASSERT_TRUE(AwaitKeysMatch(0, 1));
|
| ASSERT_EQ(5U, GetAllKeys(0).size());
|
| }
|
|
|
| @@ -161,29 +157,25 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest,
|
| // Client0 adds a profile.
|
| AddProfile(0, CreateAutofillProfile(PROFILE_HOMER));
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
|
|
| // Client1 adds a profile.
|
| AddProfile(1, CreateAutofillProfile(PROFILE_MARION));
|
| MakeABookmarkChange(1);
|
| - ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(2U, GetAllProfiles(0).size());
|
|
|
| // Client0 adds the same profile.
|
| AddProfile(0, CreateAutofillProfile(PROFILE_MARION));
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(2U, GetAllProfiles(0).size());
|
|
|
| // Client1 removes a profile.
|
| RemoveProfile(1, GetAllProfiles(1)[0]->guid());
|
| MakeABookmarkChange(1);
|
| - ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
|
|
| // Client0 updates a profile.
|
| @@ -192,15 +184,13 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest,
|
| AutofillType(autofill::NAME_FIRST),
|
| base::ASCIIToUTF16("Bart"));
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
|
|
| // Client1 removes remaining profile.
|
| RemoveProfile(1, GetAllProfiles(1)[0]->guid());
|
| MakeABookmarkChange(1);
|
| - ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(0U, GetAllProfiles(0).size());
|
| }
|
|
|
| @@ -211,8 +201,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, AddDuplicateProfiles) {
|
| AddProfile(0, CreateAutofillProfile(PROFILE_HOMER));
|
| AddProfile(0, CreateAutofillProfile(PROFILE_HOMER));
|
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
|
| - ASSERT_TRUE(AwaitQuiescence());
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
| }
|
|
|
| @@ -228,8 +217,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, SameProfileWithConflict) {
|
| AddProfile(0, profile0);
|
| AddProfile(1, profile1);
|
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
|
| - ASSERT_TRUE(AwaitQuiescence());
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
| }
|
|
|
| @@ -238,8 +226,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, AddEmptyProfile) {
|
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
|
|
|
| AddProfile(0, CreateAutofillProfile(PROFILE_NULL));
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(0U, GetAllProfiles(0).size());
|
| }
|
|
|
| @@ -249,8 +236,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, AddProfile) {
|
|
|
| AddProfile(0, CreateAutofillProfile(PROFILE_HOMER));
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
| }
|
|
|
| @@ -262,8 +248,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, AddMultipleProfiles) {
|
| AddProfile(0, CreateAutofillProfile(PROFILE_MARION));
|
| AddProfile(0, CreateAutofillProfile(PROFILE_FRASIER));
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(3U, GetAllProfiles(0).size());
|
| }
|
|
|
| @@ -273,14 +258,12 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, DeleteProfile) {
|
|
|
| AddProfile(0, CreateAutofillProfile(PROFILE_HOMER));
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
|
|
| RemoveProfile(1, GetAllProfiles(1)[0]->guid());
|
| MakeABookmarkChange(1);
|
| - ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(0U, GetAllProfiles(0).size());
|
| }
|
|
|
| @@ -292,8 +275,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, MergeProfiles) {
|
| AddProfile(1, CreateAutofillProfile(PROFILE_MARION));
|
| AddProfile(1, CreateAutofillProfile(PROFILE_FRASIER));
|
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
|
| - ASSERT_TRUE(AwaitQuiescence());
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(3U, GetAllProfiles(0).size());
|
| }
|
|
|
| @@ -303,8 +285,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, UpdateFields) {
|
|
|
| AddProfile(0, CreateAutofillProfile(PROFILE_HOMER));
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
|
|
| UpdateProfile(0,
|
| @@ -316,20 +297,17 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, UpdateFields) {
|
| AutofillType(autofill::EMAIL_ADDRESS),
|
| base::ASCIIToUTF16("grrrl@TV.com"));
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
| }
|
|
|
| // TCM ID - 3628299.
|
| -// This test is flaky on all platforms. See crbug.com/152551.
|
| -IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, DISABLED_ConflictingFields) {
|
| +IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, ConflictingFields) {
|
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
|
|
|
| AddProfile(0, CreateAutofillProfile(PROFILE_HOMER));
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
| UpdateProfile(0,
|
| GetAllProfiles(0)[0]->guid(),
|
| @@ -341,58 +319,8 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, DISABLED_ConflictingFields) {
|
| AutofillType(autofill::NAME_FIRST),
|
| base::ASCIIToUTF16("Bart"));
|
| MakeABookmarkChange(1);
|
| - ASSERT_TRUE(AwaitQuiescence());
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| - ASSERT_EQ(1U, GetAllProfiles(0).size());
|
| -}
|
| -
|
| -// TCM ID - 3663293.
|
| -IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, DisableAutofill) {
|
| - ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
|
| -
|
| - AddProfile(0, CreateAutofillProfile(PROFILE_HOMER));
|
| - MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| - ASSERT_EQ(1U, GetAllProfiles(0).size());
|
| -
|
| - ASSERT_TRUE(GetClient(0)->DisableSyncForDatatype(syncer::AUTOFILL));
|
| - AddProfile(0, CreateAutofillProfile(PROFILE_FRASIER));
|
| - MakeABookmarkChange(0);
|
| - ASSERT_TRUE(AwaitQuiescence());
|
| - ASSERT_FALSE(ProfilesMatch(0, 1));
|
| - ASSERT_EQ(2U, GetAllProfiles(0).size());
|
| - ASSERT_EQ(1U, GetAllProfiles(1).size());
|
| -
|
| - ASSERT_TRUE(GetClient(0)->EnableSyncForDatatype(syncer::AUTOFILL));
|
| - MakeABookmarkChange(0);
|
| - ASSERT_TRUE(AwaitQuiescence());
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| - ASSERT_EQ(2U, GetAllProfiles(0).size());
|
| -}
|
| -
|
| -// TCM ID - 3661291.
|
| -IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, DisableSync) {
|
| - ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
|
| -
|
| - AddProfile(0, CreateAutofillProfile(PROFILE_HOMER));
|
| - MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
| -
|
| - ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes());
|
| - AddProfile(0, CreateAutofillProfile(PROFILE_FRASIER));
|
| - MakeABookmarkChange(0);
|
| - ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0))));
|
| - ASSERT_FALSE(ProfilesMatch(0, 1));
|
| - ASSERT_EQ(2U, GetAllProfiles(0).size());
|
| - ASSERT_EQ(1U, GetAllProfiles(1).size());
|
| -
|
| - ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes());
|
| - ASSERT_TRUE(AwaitQuiescence());
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| - ASSERT_EQ(2U, GetAllProfiles(0).size());
|
| }
|
|
|
| // TCM ID - 3608295.
|
| @@ -401,8 +329,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, MaxLength) {
|
|
|
| AddProfile(0, CreateAutofillProfile(PROFILE_HOMER));
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
|
|
| base::string16 max_length_string(AutofillTable::kMaxDataLength, '.');
|
| @@ -424,8 +351,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, MaxLength) {
|
| max_length_string);
|
|
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, ExceedsMaxLength) {
|
| @@ -433,8 +359,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, ExceedsMaxLength) {
|
|
|
| AddProfile(0, CreateAutofillProfile(PROFILE_HOMER));
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
|
|
| base::string16 exceeds_max_length_string(
|
| @@ -457,8 +382,8 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, ExceedsMaxLength) {
|
| exceeds_max_length_string);
|
|
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_FALSE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(bookmarks_helper::AwaitAllModelsMatch());
|
| + EXPECT_FALSE(ProfilesMatch(0, 1));
|
| }
|
|
|
| // Test credit cards don't sync.
|
| @@ -475,8 +400,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientAutofillSyncTest, NoCreditCardSync) {
|
| SetCreditCards(0, &credit_cards);
|
|
|
| MakeABookmarkChange(0);
|
| - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
|
| - ASSERT_TRUE(ProfilesMatch(0, 1));
|
| + ASSERT_TRUE(AwaitProfilesMatch(0, 1));
|
| ASSERT_EQ(1U, GetAllProfiles(0).size());
|
|
|
| PersonalDataManager* pdm = GetPersonalDataManager(1);
|
|
|