OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <algorithm> | 5 #include <algorithm> |
6 #include <map> | 6 #include <map> |
7 #include <set> | 7 #include <set> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
598 const std::string& folder, const ExpectationArray& sorted_expected) { | 598 const std::string& folder, const ExpectationArray& sorted_expected) { |
599 EXPECT_TRUE(wallet_.hasFolder(folder)); | 599 EXPECT_TRUE(wallet_.hasFolder(folder)); |
600 std::vector<std::string> entries; | 600 std::vector<std::string> entries; |
601 EXPECT_TRUE(wallet_.entryList(folder, &entries)); | 601 EXPECT_TRUE(wallet_.entryList(folder, &entries)); |
602 EXPECT_EQ(sorted_expected.size(), entries.size()); | 602 EXPECT_EQ(sorted_expected.size(), entries.size()); |
603 std::sort(entries.begin(), entries.end()); | 603 std::sort(entries.begin(), entries.end()); |
604 for (size_t i = 0; i < entries.size() && i < sorted_expected.size(); ++i) { | 604 for (size_t i = 0; i < entries.size() && i < sorted_expected.size(); ++i) { |
605 EXPECT_EQ(sorted_expected[i].first, entries[i]); | 605 EXPECT_EQ(sorted_expected[i].first, entries[i]); |
606 TestKWallet::Blob value; | 606 TestKWallet::Blob value; |
607 EXPECT_TRUE(wallet_.readEntry(folder, entries[i], &value)); | 607 EXPECT_TRUE(wallet_.readEntry(folder, entries[i], &value)); |
608 Pickle pickle(reinterpret_cast<const char*>(value.data()), value.size()); | 608 base::Pickle pickle(reinterpret_cast<const char*>(value.data()), |
| 609 value.size()); |
609 ScopedVector<autofill::PasswordForm> forms = | 610 ScopedVector<autofill::PasswordForm> forms = |
610 NativeBackendKWalletStub::DeserializeValue(entries[i], pickle); | 611 NativeBackendKWalletStub::DeserializeValue(entries[i], pickle); |
611 const std::vector<const PasswordForm*>& expect = sorted_expected[i].second; | 612 const std::vector<const PasswordForm*>& expect = sorted_expected[i].second; |
612 EXPECT_EQ(expect.size(), forms.size()); | 613 EXPECT_EQ(expect.size(), forms.size()); |
613 for (size_t j = 0; j < forms.size() && j < expect.size(); ++j) | 614 for (size_t j = 0; j < forms.size() && j < expect.size(); ++j) |
614 CheckPasswordForm(*expect[j], *forms[j], true); | 615 CheckPasswordForm(*expect[j], *forms[j], true); |
615 } | 616 } |
616 } | 617 } |
617 | 618 |
618 TEST_F(NativeBackendKWalletTest, NotEnabled) { | 619 TEST_F(NativeBackendKWalletTest, NotEnabled) { |
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
923 | 924 |
924 TEST_F(NativeBackendKWalletTest, RemoveLoginsSyncedBetween) { | 925 TEST_F(NativeBackendKWalletTest, RemoveLoginsSyncedBetween) { |
925 TestRemoveLoginsBetween(SYNCED); | 926 TestRemoveLoginsBetween(SYNCED); |
926 } | 927 } |
927 | 928 |
928 // TODO(mdm): add more basic tests here at some point. | 929 // TODO(mdm): add more basic tests here at some point. |
929 // (For example tests for storing >1 password per realm pickle.) | 930 // (For example tests for storing >1 password per realm pickle.) |
930 | 931 |
931 class NativeBackendKWalletPickleTest : public NativeBackendKWalletTestBase { | 932 class NativeBackendKWalletPickleTest : public NativeBackendKWalletTestBase { |
932 protected: | 933 protected: |
933 void CreateVersion6Pickle(const PasswordForm& form, Pickle* pickle); | 934 void CreateVersion6Pickle(const PasswordForm& form, base::Pickle* pickle); |
934 void CreateVersion5Pickle(const PasswordForm& form, Pickle* pickle); | 935 void CreateVersion5Pickle(const PasswordForm& form, base::Pickle* pickle); |
935 void CreateVersion3Pickle(const PasswordForm& form, Pickle* pickle); | 936 void CreateVersion3Pickle(const PasswordForm& form, base::Pickle* pickle); |
936 void CreateVersion2Pickle(const PasswordForm& form, Pickle* pickle); | 937 void CreateVersion2Pickle(const PasswordForm& form, base::Pickle* pickle); |
937 void CreateVersion1Pickle(const PasswordForm& form, Pickle* pickle); | 938 void CreateVersion1Pickle(const PasswordForm& form, base::Pickle* pickle); |
938 void CreateVersion0Pickle(bool size_32, | 939 void CreateVersion0Pickle(bool size_32, |
939 const PasswordForm& form, | 940 const PasswordForm& form, |
940 Pickle* pickle); | 941 base::Pickle* pickle); |
941 void CheckVersion6Pickle(); | 942 void CheckVersion6Pickle(); |
942 void CheckVersion5Pickle(); | 943 void CheckVersion5Pickle(); |
943 void CheckVersion3Pickle(); | 944 void CheckVersion3Pickle(); |
944 void CheckVersion2Pickle(); | 945 void CheckVersion2Pickle(); |
945 void CheckVersion1Pickle(); | 946 void CheckVersion1Pickle(); |
946 void CheckVersion0Pickle(bool size_32, PasswordForm::Scheme scheme); | 947 void CheckVersion0Pickle(bool size_32, PasswordForm::Scheme scheme); |
947 | 948 |
948 private: | 949 private: |
949 // Creates a Pickle from |form|. If |size_32| is true, stores the number of | 950 // Creates a Pickle from |form|. If |size_32| is true, stores the number of |
950 // forms in the pickle as a 32bit uint, otherwise as 64 bit size_t. The latter | 951 // forms in the pickle as a 32bit uint, otherwise as 64 bit size_t. The latter |
951 // should be the case for versions > 0. If |date_created_internal| is true, | 952 // should be the case for versions > 0. If |date_created_internal| is true, |
952 // stores |date_created| as base::Time's internal value, otherwise as time_t. | 953 // stores |date_created| as base::Time's internal value, otherwise as time_t. |
953 void CreatePickle(bool size_32, | 954 void CreatePickle(bool size_32, |
954 bool date_created_internal, | 955 bool date_created_internal, |
955 const PasswordForm& form, | 956 const PasswordForm& form, |
956 Pickle* pickle); | 957 base::Pickle* pickle); |
957 }; | 958 }; |
958 | 959 |
959 void NativeBackendKWalletPickleTest::CreateVersion6Pickle( | 960 void NativeBackendKWalletPickleTest::CreateVersion6Pickle( |
960 const PasswordForm& form, | 961 const PasswordForm& form, |
961 Pickle* pickle) { | 962 base::Pickle* pickle) { |
962 pickle->WriteInt(6); | 963 pickle->WriteInt(6); |
963 CreatePickle(false, true, form, pickle); | 964 CreatePickle(false, true, form, pickle); |
964 pickle->WriteInt(form.type); | 965 pickle->WriteInt(form.type); |
965 pickle->WriteInt(form.times_used); | 966 pickle->WriteInt(form.times_used); |
966 autofill::SerializeFormData(form.form_data, pickle); | 967 autofill::SerializeFormData(form.form_data, pickle); |
967 pickle->WriteInt64(form.date_synced.ToInternalValue()); | 968 pickle->WriteInt64(form.date_synced.ToInternalValue()); |
968 pickle->WriteString16(form.display_name); | 969 pickle->WriteString16(form.display_name); |
969 pickle->WriteString(form.avatar_url.spec()); | 970 pickle->WriteString(form.avatar_url.spec()); |
970 pickle->WriteString(form.federation_url.spec()); | 971 pickle->WriteString(form.federation_url.spec()); |
971 pickle->WriteBool(form.skip_zero_click); | 972 pickle->WriteBool(form.skip_zero_click); |
972 pickle->WriteInt(form.generation_upload_status); | 973 pickle->WriteInt(form.generation_upload_status); |
973 } | 974 } |
974 | 975 |
975 void NativeBackendKWalletPickleTest::CreateVersion5Pickle( | 976 void NativeBackendKWalletPickleTest::CreateVersion5Pickle( |
976 const PasswordForm& form, | 977 const PasswordForm& form, |
977 Pickle* pickle) { | 978 base::Pickle* pickle) { |
978 pickle->WriteInt(5); | 979 pickle->WriteInt(5); |
979 CreatePickle(false, true, form, pickle); | 980 CreatePickle(false, true, form, pickle); |
980 pickle->WriteInt(form.type); | 981 pickle->WriteInt(form.type); |
981 pickle->WriteInt(form.times_used); | 982 pickle->WriteInt(form.times_used); |
982 autofill::SerializeFormData(form.form_data, pickle); | 983 autofill::SerializeFormData(form.form_data, pickle); |
983 pickle->WriteInt64(form.date_synced.ToInternalValue()); | 984 pickle->WriteInt64(form.date_synced.ToInternalValue()); |
984 pickle->WriteString16(form.display_name); | 985 pickle->WriteString16(form.display_name); |
985 pickle->WriteString(form.avatar_url.spec()); | 986 pickle->WriteString(form.avatar_url.spec()); |
986 pickle->WriteString(form.federation_url.spec()); | 987 pickle->WriteString(form.federation_url.spec()); |
987 pickle->WriteBool(form.skip_zero_click); | 988 pickle->WriteBool(form.skip_zero_click); |
988 } | 989 } |
989 | 990 |
990 void NativeBackendKWalletPickleTest::CreateVersion3Pickle( | 991 void NativeBackendKWalletPickleTest::CreateVersion3Pickle( |
991 const PasswordForm& form, Pickle* pickle) { | 992 const PasswordForm& form, |
| 993 base::Pickle* pickle) { |
992 pickle->WriteInt(3); | 994 pickle->WriteInt(3); |
993 CreatePickle(false, false, form, pickle); | 995 CreatePickle(false, false, form, pickle); |
994 pickle->WriteInt(form.type); | 996 pickle->WriteInt(form.type); |
995 pickle->WriteInt(form.times_used); | 997 pickle->WriteInt(form.times_used); |
996 autofill::SerializeFormData(form.form_data, pickle); | 998 autofill::SerializeFormData(form.form_data, pickle); |
997 pickle->WriteInt64(form.date_synced.ToInternalValue()); | 999 pickle->WriteInt64(form.date_synced.ToInternalValue()); |
998 } | 1000 } |
999 | 1001 |
1000 void NativeBackendKWalletPickleTest::CreateVersion2Pickle( | 1002 void NativeBackendKWalletPickleTest::CreateVersion2Pickle( |
1001 const PasswordForm& form, Pickle* pickle) { | 1003 const PasswordForm& form, |
| 1004 base::Pickle* pickle) { |
1002 pickle->WriteInt(2); | 1005 pickle->WriteInt(2); |
1003 CreatePickle(false, false, form, pickle); | 1006 CreatePickle(false, false, form, pickle); |
1004 pickle->WriteInt(form.type); | 1007 pickle->WriteInt(form.type); |
1005 pickle->WriteInt(form.times_used); | 1008 pickle->WriteInt(form.times_used); |
1006 autofill::SerializeFormData(form.form_data, pickle); | 1009 autofill::SerializeFormData(form.form_data, pickle); |
1007 } | 1010 } |
1008 | 1011 |
1009 void NativeBackendKWalletPickleTest::CreateVersion1Pickle( | 1012 void NativeBackendKWalletPickleTest::CreateVersion1Pickle( |
1010 const PasswordForm& form, Pickle* pickle) { | 1013 const PasswordForm& form, |
| 1014 base::Pickle* pickle) { |
1011 pickle->WriteInt(1); | 1015 pickle->WriteInt(1); |
1012 CreatePickle(false, false, form, pickle); | 1016 CreatePickle(false, false, form, pickle); |
1013 } | 1017 } |
1014 | 1018 |
1015 void NativeBackendKWalletPickleTest::CreateVersion0Pickle( | 1019 void NativeBackendKWalletPickleTest::CreateVersion0Pickle( |
1016 bool size_32, const PasswordForm& form, Pickle* pickle) { | 1020 bool size_32, |
| 1021 const PasswordForm& form, |
| 1022 base::Pickle* pickle) { |
1017 pickle->WriteInt(0); | 1023 pickle->WriteInt(0); |
1018 CreatePickle(size_32, false, form, pickle); | 1024 CreatePickle(size_32, false, form, pickle); |
1019 } | 1025 } |
1020 | 1026 |
1021 void NativeBackendKWalletPickleTest::CreatePickle(bool size_32, | 1027 void NativeBackendKWalletPickleTest::CreatePickle(bool size_32, |
1022 bool date_created_internal, | 1028 bool date_created_internal, |
1023 const PasswordForm& form, | 1029 const PasswordForm& form, |
1024 Pickle* pickle) { | 1030 base::Pickle* pickle) { |
1025 if (size_32) | 1031 if (size_32) |
1026 pickle->WriteUInt32(1); // Size of form list. 32 bits. | 1032 pickle->WriteUInt32(1); // Size of form list. 32 bits. |
1027 else | 1033 else |
1028 pickle->WriteSizeT(1); // Size of form list. 64 bits. | 1034 pickle->WriteSizeT(1); // Size of form list. 64 bits. |
1029 pickle->WriteInt(form.scheme); | 1035 pickle->WriteInt(form.scheme); |
1030 pickle->WriteString(form.origin.spec()); | 1036 pickle->WriteString(form.origin.spec()); |
1031 pickle->WriteString(form.action.spec()); | 1037 pickle->WriteString(form.action.spec()); |
1032 pickle->WriteString16(form.username_element); | 1038 pickle->WriteString16(form.username_element); |
1033 pickle->WriteString16(form.username_value); | 1039 pickle->WriteString16(form.username_value); |
1034 pickle->WriteString16(form.password_element); | 1040 pickle->WriteString16(form.password_element); |
1035 pickle->WriteString16(form.password_value); | 1041 pickle->WriteString16(form.password_value); |
1036 pickle->WriteString16(form.submit_element); | 1042 pickle->WriteString16(form.submit_element); |
1037 pickle->WriteBool(form.ssl_valid); | 1043 pickle->WriteBool(form.ssl_valid); |
1038 pickle->WriteBool(form.preferred); | 1044 pickle->WriteBool(form.preferred); |
1039 pickle->WriteBool(form.blacklisted_by_user); | 1045 pickle->WriteBool(form.blacklisted_by_user); |
1040 if (date_created_internal) | 1046 if (date_created_internal) |
1041 pickle->WriteInt64(form.date_created.ToInternalValue()); | 1047 pickle->WriteInt64(form.date_created.ToInternalValue()); |
1042 else | 1048 else |
1043 pickle->WriteInt64(form.date_created.ToTimeT()); | 1049 pickle->WriteInt64(form.date_created.ToTimeT()); |
1044 } | 1050 } |
1045 | 1051 |
1046 void NativeBackendKWalletPickleTest::CheckVersion6Pickle() { | 1052 void NativeBackendKWalletPickleTest::CheckVersion6Pickle() { |
1047 Pickle pickle; | 1053 base::Pickle pickle; |
1048 PasswordForm form = form_google_; | 1054 PasswordForm form = form_google_; |
1049 form.generation_upload_status = PasswordForm::NEGATIVE_SIGNAL_SENT; | 1055 form.generation_upload_status = PasswordForm::NEGATIVE_SIGNAL_SENT; |
1050 CreateVersion6Pickle(form, &pickle); | 1056 CreateVersion6Pickle(form, &pickle); |
1051 | 1057 |
1052 ScopedVector<PasswordForm> form_list = | 1058 ScopedVector<PasswordForm> form_list = |
1053 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); | 1059 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); |
1054 | 1060 |
1055 EXPECT_EQ(1u, form_list.size()); | 1061 EXPECT_EQ(1u, form_list.size()); |
1056 if (form_list.size() > 0) | 1062 if (form_list.size() > 0) |
1057 CheckPasswordForm(form, *form_list[0], true); | 1063 CheckPasswordForm(form, *form_list[0], true); |
1058 | 1064 |
1059 } | 1065 } |
1060 | 1066 |
1061 void NativeBackendKWalletPickleTest::CheckVersion5Pickle() { | 1067 void NativeBackendKWalletPickleTest::CheckVersion5Pickle() { |
1062 Pickle pickle; | 1068 base::Pickle pickle; |
1063 PasswordForm form = form_google_; | 1069 PasswordForm form = form_google_; |
1064 CreateVersion5Pickle(form, &pickle); | 1070 CreateVersion5Pickle(form, &pickle); |
1065 | 1071 |
1066 ScopedVector<PasswordForm> form_list = | 1072 ScopedVector<PasswordForm> form_list = |
1067 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); | 1073 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); |
1068 | 1074 |
1069 EXPECT_EQ(1u, form_list.size()); | 1075 EXPECT_EQ(1u, form_list.size()); |
1070 if (form_list.size() > 0) | 1076 if (form_list.size() > 0) |
1071 CheckPasswordForm(form, *form_list[0], true); | 1077 CheckPasswordForm(form, *form_list[0], true); |
1072 } | 1078 } |
1073 | 1079 |
1074 void NativeBackendKWalletPickleTest::CheckVersion3Pickle() { | 1080 void NativeBackendKWalletPickleTest::CheckVersion3Pickle() { |
1075 Pickle pickle; | 1081 base::Pickle pickle; |
1076 PasswordForm form = form_google_; | 1082 PasswordForm form = form_google_; |
1077 // Remove the fields which were not present in version #3. | 1083 // Remove the fields which were not present in version #3. |
1078 form.display_name.clear(); | 1084 form.display_name.clear(); |
1079 form.avatar_url = GURL(); | 1085 form.avatar_url = GURL(); |
1080 form.federation_url = GURL(); | 1086 form.federation_url = GURL(); |
1081 form.skip_zero_click = false; | 1087 form.skip_zero_click = false; |
1082 CreateVersion3Pickle(form, &pickle); | 1088 CreateVersion3Pickle(form, &pickle); |
1083 | 1089 |
1084 ScopedVector<PasswordForm> form_list = | 1090 ScopedVector<PasswordForm> form_list = |
1085 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); | 1091 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); |
1086 | 1092 |
1087 EXPECT_EQ(1u, form_list.size()); | 1093 EXPECT_EQ(1u, form_list.size()); |
1088 if (form_list.size() > 0) | 1094 if (form_list.size() > 0) |
1089 CheckPasswordForm(form, *form_list[0], false); | 1095 CheckPasswordForm(form, *form_list[0], false); |
1090 } | 1096 } |
1091 | 1097 |
1092 void NativeBackendKWalletPickleTest::CheckVersion2Pickle() { | 1098 void NativeBackendKWalletPickleTest::CheckVersion2Pickle() { |
1093 Pickle pickle; | 1099 base::Pickle pickle; |
1094 PasswordForm form = old_form_google_; | 1100 PasswordForm form = old_form_google_; |
1095 form.times_used = form_google_.times_used; | 1101 form.times_used = form_google_.times_used; |
1096 form.type = form_google_.type; | 1102 form.type = form_google_.type; |
1097 form.form_data = form_google_.form_data; | 1103 form.form_data = form_google_.form_data; |
1098 CreateVersion2Pickle(form, &pickle); | 1104 CreateVersion2Pickle(form, &pickle); |
1099 | 1105 |
1100 ScopedVector<PasswordForm> form_list = | 1106 ScopedVector<PasswordForm> form_list = |
1101 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); | 1107 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); |
1102 | 1108 |
1103 EXPECT_EQ(1u, form_list.size()); | 1109 EXPECT_EQ(1u, form_list.size()); |
1104 if (form_list.size() > 0) | 1110 if (form_list.size() > 0) |
1105 CheckPasswordForm(form, *form_list[0], false); | 1111 CheckPasswordForm(form, *form_list[0], false); |
1106 } | 1112 } |
1107 | 1113 |
1108 // Make sure that we can still read version 1 pickles. | 1114 // Make sure that we can still read version 1 pickles. |
1109 void NativeBackendKWalletPickleTest::CheckVersion1Pickle() { | 1115 void NativeBackendKWalletPickleTest::CheckVersion1Pickle() { |
1110 Pickle pickle; | 1116 base::Pickle pickle; |
1111 PasswordForm form = form_google_; | 1117 PasswordForm form = form_google_; |
1112 CreateVersion1Pickle(form, &pickle); | 1118 CreateVersion1Pickle(form, &pickle); |
1113 | 1119 |
1114 ScopedVector<autofill::PasswordForm> form_list = | 1120 ScopedVector<autofill::PasswordForm> form_list = |
1115 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); | 1121 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); |
1116 | 1122 |
1117 // This will match |old_form_google_| because not all the fields present in | 1123 // This will match |old_form_google_| because not all the fields present in |
1118 // |form_google_| will be deserialized. | 1124 // |form_google_| will be deserialized. |
1119 EXPECT_EQ(1u, form_list.size()); | 1125 EXPECT_EQ(1u, form_list.size()); |
1120 if (form_list.size() > 0) | 1126 if (form_list.size() > 0) |
1121 CheckPasswordForm(old_form_google_, *form_list[0], false); | 1127 CheckPasswordForm(old_form_google_, *form_list[0], false); |
1122 } | 1128 } |
1123 | 1129 |
1124 void NativeBackendKWalletPickleTest::CheckVersion0Pickle( | 1130 void NativeBackendKWalletPickleTest::CheckVersion0Pickle( |
1125 bool size_32, PasswordForm::Scheme scheme) { | 1131 bool size_32, PasswordForm::Scheme scheme) { |
1126 Pickle pickle; | 1132 base::Pickle pickle; |
1127 PasswordForm form = old_form_google_; | 1133 PasswordForm form = old_form_google_; |
1128 form.scheme = scheme; | 1134 form.scheme = scheme; |
1129 CreateVersion0Pickle(size_32, form, &pickle); | 1135 CreateVersion0Pickle(size_32, form, &pickle); |
1130 ScopedVector<autofill::PasswordForm> form_list = | 1136 ScopedVector<autofill::PasswordForm> form_list = |
1131 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); | 1137 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); |
1132 EXPECT_EQ(1u, form_list.size()); | 1138 EXPECT_EQ(1u, form_list.size()); |
1133 if (form_list.size() > 0) | 1139 if (form_list.size() > 0) |
1134 CheckPasswordForm(form, *form_list[0], false); | 1140 CheckPasswordForm(form, *form_list[0], false); |
1135 } | 1141 } |
1136 | 1142 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1192 CheckVersion3Pickle(); | 1198 CheckVersion3Pickle(); |
1193 } | 1199 } |
1194 | 1200 |
1195 TEST_F(NativeBackendKWalletPickleTest, CheckVersion5Pickle) { | 1201 TEST_F(NativeBackendKWalletPickleTest, CheckVersion5Pickle) { |
1196 CheckVersion5Pickle(); | 1202 CheckVersion5Pickle(); |
1197 } | 1203 } |
1198 | 1204 |
1199 TEST_F(NativeBackendKWalletPickleTest, CheckVersion6Pickle) { | 1205 TEST_F(NativeBackendKWalletPickleTest, CheckVersion6Pickle) { |
1200 CheckVersion6Pickle(); | 1206 CheckVersion6Pickle(); |
1201 } | 1207 } |
OLD | NEW |