OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "chrome/common/safe_browsing/file_type_policies.h" | 5 #include "chrome/common/safe_browsing/file_type_policies.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 // that gen_file_type_proto.py does its job. | 47 // that gen_file_type_proto.py does its job. |
48 // | 48 // |
49 // NOTE: If the settings for these change in download_file_types.asciipb, | 49 // NOTE: If the settings for these change in download_file_types.asciipb, |
50 // then you'll need to change them here as well. | 50 // then you'll need to change them here as well. |
51 | 51 |
52 // Lookup .exe that varies on OS_WIN. | 52 // Lookup .exe that varies on OS_WIN. |
53 base::FilePath exe_file(FILE_PATH_LITERAL("a/foo.exe")); | 53 base::FilePath exe_file(FILE_PATH_LITERAL("a/foo.exe")); |
54 DownloadFileType file_type = policies_.PolicyForFile(exe_file); | 54 DownloadFileType file_type = policies_.PolicyForFile(exe_file); |
55 EXPECT_EQ("exe", file_type.extension()); | 55 EXPECT_EQ("exe", file_type.extension()); |
56 EXPECT_EQ(0l, file_type.uma_value()); | 56 EXPECT_EQ(0l, file_type.uma_value()); |
57 EXPECT_EQ(false, file_type.is_archive()); | 57 EXPECT_FALSE(file_type.is_archive()); |
58 EXPECT_EQ(DownloadFileType::FULL_PING, file_type.ping_setting()); | 58 EXPECT_EQ(DownloadFileType::FULL_PING, file_type.ping_setting()); |
59 #if defined(OS_WIN) | 59 #if defined(OS_WIN) |
60 EXPECT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, | 60 EXPECT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, |
61 file_type.platform_settings(0).danger_level()); | 61 file_type.platform_settings(0).danger_level()); |
62 EXPECT_EQ(DownloadFileType::DISALLOW_AUTO_OPEN, | 62 EXPECT_EQ(DownloadFileType::DISALLOW_AUTO_OPEN, |
63 file_type.platform_settings(0).auto_open_hint()); | 63 file_type.platform_settings(0).auto_open_hint()); |
64 #else | 64 #else |
65 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, | 65 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, |
66 file_type.platform_settings(0).danger_level()); | 66 file_type.platform_settings(0).danger_level()); |
67 EXPECT_EQ(DownloadFileType::ALLOW_AUTO_OPEN, | 67 EXPECT_EQ(DownloadFileType::ALLOW_AUTO_OPEN, |
68 file_type.platform_settings(0).auto_open_hint()); | 68 file_type.platform_settings(0).auto_open_hint()); |
69 #endif | 69 #endif |
70 | 70 |
71 // Lookup .class that varies on OS_CHROMEOS, and also has a | 71 // Lookup .class that varies on OS_CHROMEOS, and also has a |
72 // default setting set. | 72 // default setting set. |
73 base::FilePath class_file(FILE_PATH_LITERAL("foo.class")); | 73 base::FilePath class_file(FILE_PATH_LITERAL("foo.class")); |
74 file_type = policies_.PolicyForFile(class_file); | 74 file_type = policies_.PolicyForFile(class_file); |
75 EXPECT_EQ("class", file_type.extension()); | 75 EXPECT_EQ("class", file_type.extension()); |
76 EXPECT_EQ(13l, file_type.uma_value()); | 76 EXPECT_EQ(13l, file_type.uma_value()); |
77 EXPECT_EQ(false, file_type.is_archive()); | 77 EXPECT_FALSE(file_type.is_archive()); |
78 EXPECT_EQ(DownloadFileType::FULL_PING, file_type.ping_setting()); | 78 EXPECT_EQ(DownloadFileType::FULL_PING, file_type.ping_setting()); |
79 #if defined(OS_CHROMEOS) | 79 #if defined(OS_CHROMEOS) |
80 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, | 80 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, |
81 file_type.platform_settings(0).danger_level()); | 81 file_type.platform_settings(0).danger_level()); |
82 EXPECT_EQ(DownloadFileType::ALLOW_AUTO_OPEN, | 82 EXPECT_EQ(DownloadFileType::ALLOW_AUTO_OPEN, |
83 file_type.platform_settings(0).auto_open_hint()); | 83 file_type.platform_settings(0).auto_open_hint()); |
84 #else | 84 #else |
85 EXPECT_EQ(DownloadFileType::DANGEROUS, | 85 EXPECT_EQ(DownloadFileType::DANGEROUS, |
86 file_type.platform_settings(0).danger_level()); | 86 file_type.platform_settings(0).danger_level()); |
87 EXPECT_EQ(DownloadFileType::DISALLOW_AUTO_OPEN, | 87 EXPECT_EQ(DownloadFileType::DISALLOW_AUTO_OPEN, |
88 file_type.platform_settings(0).auto_open_hint()); | 88 file_type.platform_settings(0).auto_open_hint()); |
89 #endif | 89 #endif |
90 | 90 |
91 // Lookup .dmg that varies on OS_MACOS | 91 // Lookup .dmg that varies on OS_MACOS |
92 base::FilePath dmg_file(FILE_PATH_LITERAL("foo.dmg")); | 92 base::FilePath dmg_file(FILE_PATH_LITERAL("foo.dmg")); |
93 file_type = policies_.PolicyForFile(dmg_file); | 93 file_type = policies_.PolicyForFile(dmg_file); |
94 EXPECT_EQ("dmg", file_type.extension()); | 94 EXPECT_EQ("dmg", file_type.extension()); |
95 EXPECT_EQ(21, file_type.uma_value()); | 95 EXPECT_EQ(21, file_type.uma_value()); |
96 EXPECT_EQ(false, file_type.is_archive()); | 96 EXPECT_FALSE(file_type.is_archive()); |
97 EXPECT_EQ(DownloadFileType::FULL_PING, file_type.ping_setting()); | 97 EXPECT_EQ(DownloadFileType::FULL_PING, file_type.ping_setting()); |
98 #if defined(OS_MACOSX) | 98 #if defined(OS_MACOSX) |
99 EXPECT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, | 99 EXPECT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, |
100 file_type.platform_settings(0).danger_level()); | 100 file_type.platform_settings(0).danger_level()); |
101 EXPECT_EQ(DownloadFileType::DISALLOW_AUTO_OPEN, | 101 EXPECT_EQ(DownloadFileType::DISALLOW_AUTO_OPEN, |
102 file_type.platform_settings(0).auto_open_hint()); | 102 file_type.platform_settings(0).auto_open_hint()); |
103 #else | 103 #else |
104 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, | 104 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, |
105 file_type.platform_settings(0).danger_level()); | 105 file_type.platform_settings(0).danger_level()); |
106 EXPECT_EQ(DownloadFileType::ALLOW_AUTO_OPEN, | 106 EXPECT_EQ(DownloadFileType::ALLOW_AUTO_OPEN, |
107 file_type.platform_settings(0).auto_open_hint()); | 107 file_type.platform_settings(0).auto_open_hint()); |
108 #endif | 108 #endif |
109 | 109 |
110 // Lookup .dex that varies on OS_ANDROID | 110 // Lookup .dex that varies on OS_ANDROID |
111 base::FilePath dex_file(FILE_PATH_LITERAL("foo.dex")); | 111 base::FilePath dex_file(FILE_PATH_LITERAL("foo.dex")); |
112 file_type = policies_.PolicyForFile(dex_file); | 112 file_type = policies_.PolicyForFile(dex_file); |
113 EXPECT_EQ("dex", file_type.extension()); | 113 EXPECT_EQ("dex", file_type.extension()); |
114 EXPECT_EQ(143, file_type.uma_value()); | 114 EXPECT_EQ(143, file_type.uma_value()); |
115 EXPECT_EQ(false, file_type.is_archive()); | 115 EXPECT_FALSE(file_type.is_archive()); |
116 EXPECT_EQ(DownloadFileType::FULL_PING, file_type.ping_setting()); | 116 EXPECT_EQ(DownloadFileType::FULL_PING, file_type.ping_setting()); |
117 #if defined(OS_ANDROID) | 117 #if defined(OS_ANDROID) |
118 EXPECT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, | 118 EXPECT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, |
119 file_type.platform_settings(0).danger_level()); | 119 file_type.platform_settings(0).danger_level()); |
120 EXPECT_EQ(DownloadFileType::DISALLOW_AUTO_OPEN, | 120 EXPECT_EQ(DownloadFileType::DISALLOW_AUTO_OPEN, |
121 file_type.platform_settings(0).auto_open_hint()); | 121 file_type.platform_settings(0).auto_open_hint()); |
122 #else | 122 #else |
123 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, | 123 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, |
124 file_type.platform_settings(0).danger_level()); | 124 file_type.platform_settings(0).danger_level()); |
125 EXPECT_EQ(DownloadFileType::ALLOW_AUTO_OPEN, | 125 EXPECT_EQ(DownloadFileType::ALLOW_AUTO_OPEN, |
126 file_type.platform_settings(0).auto_open_hint()); | 126 file_type.platform_settings(0).auto_open_hint()); |
127 #endif | 127 #endif |
128 | 128 |
129 // Lookup .rpm that varies on OS_LINUX | 129 // Lookup .rpm that varies on OS_LINUX |
130 base::FilePath rpm_file(FILE_PATH_LITERAL("foo.rpm")); | 130 base::FilePath rpm_file(FILE_PATH_LITERAL("foo.rpm")); |
131 file_type = policies_.PolicyForFile(rpm_file); | 131 file_type = policies_.PolicyForFile(rpm_file); |
132 EXPECT_EQ("rpm", file_type.extension()); | 132 EXPECT_EQ("rpm", file_type.extension()); |
133 EXPECT_EQ(142, file_type.uma_value()); | 133 EXPECT_EQ(142, file_type.uma_value()); |
134 EXPECT_EQ(false, file_type.is_archive()); | 134 EXPECT_FALSE(file_type.is_archive()); |
135 EXPECT_EQ(DownloadFileType::FULL_PING, file_type.ping_setting()); | 135 EXPECT_EQ(DownloadFileType::FULL_PING, file_type.ping_setting()); |
136 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) | 136 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
137 EXPECT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, | 137 EXPECT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, |
138 file_type.platform_settings(0).danger_level()); | 138 file_type.platform_settings(0).danger_level()); |
139 EXPECT_EQ(DownloadFileType::DISALLOW_AUTO_OPEN, | 139 EXPECT_EQ(DownloadFileType::DISALLOW_AUTO_OPEN, |
140 file_type.platform_settings(0).auto_open_hint()); | 140 file_type.platform_settings(0).auto_open_hint()); |
141 #else | 141 #else |
142 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, | 142 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, |
143 file_type.platform_settings(0).danger_level()); | 143 file_type.platform_settings(0).danger_level()); |
144 EXPECT_EQ(DownloadFileType::ALLOW_AUTO_OPEN, | 144 EXPECT_EQ(DownloadFileType::ALLOW_AUTO_OPEN, |
145 file_type.platform_settings(0).auto_open_hint()); | 145 file_type.platform_settings(0).auto_open_hint()); |
146 #endif | 146 #endif |
147 | 147 |
148 // Look .zip, an archive. The same on all platforms. | 148 // Look .zip, an archive. The same on all platforms. |
149 base::FilePath zip_file(FILE_PATH_LITERAL("b/bar.txt.zip")); | 149 base::FilePath zip_file(FILE_PATH_LITERAL("b/bar.txt.zip")); |
150 file_type = policies_.PolicyForFile(zip_file); | 150 file_type = policies_.PolicyForFile(zip_file); |
151 EXPECT_EQ("zip", file_type.extension()); | 151 EXPECT_EQ("zip", file_type.extension()); |
152 EXPECT_EQ(7l, file_type.uma_value()); | 152 EXPECT_EQ(7l, file_type.uma_value()); |
153 EXPECT_EQ(true, file_type.is_archive()); | 153 EXPECT_TRUE(file_type.is_archive()); |
154 EXPECT_EQ(DownloadFileType::FULL_PING, file_type.ping_setting()); | 154 EXPECT_EQ(DownloadFileType::FULL_PING, file_type.ping_setting()); |
155 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, | 155 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, |
156 file_type.platform_settings(0).danger_level()); | 156 file_type.platform_settings(0).danger_level()); |
157 | 157 |
158 // Check other accessors | 158 // Check other accessors |
159 EXPECT_EQ(7l, policies_.UmaValueForFile(zip_file)); | 159 EXPECT_EQ(7l, policies_.UmaValueForFile(zip_file)); |
160 EXPECT_EQ(true, policies_.IsFileAnArchive(zip_file)); | 160 EXPECT_TRUE(policies_.IsArchiveFile(zip_file)); |
| 161 EXPECT_FALSE(policies_.IsArchiveFile(exe_file)); |
161 | 162 |
162 // Verify settings on the default type. | 163 // Verify settings on the default type. |
163 file_type = policies_.PolicyForFile( | 164 file_type = policies_.PolicyForFile( |
164 base::FilePath(FILE_PATH_LITERAL("a/foo.fooobar"))); | 165 base::FilePath(FILE_PATH_LITERAL("a/foo.fooobar"))); |
165 EXPECT_EQ("", file_type.extension()); | 166 EXPECT_EQ("", file_type.extension()); |
166 EXPECT_EQ(18l, file_type.uma_value()); | 167 EXPECT_EQ(18l, file_type.uma_value()); |
167 EXPECT_EQ(false, file_type.is_archive()); | 168 EXPECT_FALSE(file_type.is_archive()); |
168 EXPECT_EQ(DownloadFileType::SAMPLED_PING, file_type.ping_setting()); | 169 EXPECT_EQ(DownloadFileType::SAMPLED_PING, file_type.ping_setting()); |
169 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, | 170 EXPECT_EQ(DownloadFileType::NOT_DANGEROUS, |
170 file_type.platform_settings(0).danger_level()); | 171 file_type.platform_settings(0).danger_level()); |
171 EXPECT_EQ(DownloadFileType::ALLOW_AUTO_OPEN, | 172 EXPECT_EQ(DownloadFileType::ALLOW_AUTO_OPEN, |
172 file_type.platform_settings(0).auto_open_hint()); | 173 file_type.platform_settings(0).auto_open_hint()); |
173 } | 174 } |
174 | 175 |
175 TEST_F(FileTypePoliciesTest, BadProto) { | 176 TEST_F(FileTypePoliciesTest, BadProto) { |
| 177 base::AutoLock lock(policies_.lock_); |
176 EXPECT_EQ(FileTypePolicies::UpdateResult::FAILED_EMPTY, | 178 EXPECT_EQ(FileTypePolicies::UpdateResult::FAILED_EMPTY, |
177 policies_.PopulateFromBinaryPb(std::string())); | 179 policies_.PopulateFromBinaryPb(std::string())); |
178 | 180 |
179 EXPECT_EQ(FileTypePolicies::UpdateResult::FAILED_PROTO_PARSE, | 181 EXPECT_EQ(FileTypePolicies::UpdateResult::FAILED_PROTO_PARSE, |
180 policies_.PopulateFromBinaryPb("foobar")); | 182 policies_.PopulateFromBinaryPb("foobar")); |
181 | 183 |
182 DownloadFileTypeConfig cfg; | 184 DownloadFileTypeConfig cfg; |
183 cfg.set_sampled_ping_probability(0.1f); | 185 cfg.set_sampled_ping_probability(0.1f); |
184 EXPECT_EQ(FileTypePolicies::UpdateResult::FAILED_DEFAULT_SETTING_SET, | 186 EXPECT_EQ(FileTypePolicies::UpdateResult::FAILED_DEFAULT_SETTING_SET, |
185 policies_.PopulateFromBinaryPb(cfg.SerializeAsString())); | 187 policies_.PopulateFromBinaryPb(cfg.SerializeAsString())); |
186 | 188 |
187 cfg.mutable_default_file_type()->add_platform_settings(); | 189 cfg.mutable_default_file_type()->add_platform_settings(); |
188 auto file_type = cfg.add_file_types(); // This is missing a platform_setting. | 190 auto file_type = cfg.add_file_types(); // This is missing a platform_setting. |
189 EXPECT_EQ(FileTypePolicies::UpdateResult::FAILED_WRONG_SETTINGS_COUNT, | 191 EXPECT_EQ(FileTypePolicies::UpdateResult::FAILED_WRONG_SETTINGS_COUNT, |
190 policies_.PopulateFromBinaryPb(cfg.SerializeAsString())); | 192 policies_.PopulateFromBinaryPb(cfg.SerializeAsString())); |
191 | 193 |
192 file_type->add_platform_settings(); | 194 file_type->add_platform_settings(); |
193 EXPECT_EQ(FileTypePolicies::UpdateResult::SUCCESS, | 195 EXPECT_EQ(FileTypePolicies::UpdateResult::SUCCESS, |
194 policies_.PopulateFromBinaryPb(cfg.SerializeAsString())); | 196 policies_.PopulateFromBinaryPb(cfg.SerializeAsString())); |
195 } | 197 } |
196 | 198 |
197 TEST_F(FileTypePoliciesTest, BadUpdateFromExisting) { | 199 TEST_F(FileTypePoliciesTest, BadUpdateFromExisting) { |
| 200 base::AutoLock lock(policies_.lock_); |
198 // Make a minimum viable config | 201 // Make a minimum viable config |
199 DownloadFileTypeConfig cfg; | 202 DownloadFileTypeConfig cfg; |
200 cfg.mutable_default_file_type()->add_platform_settings(); | 203 cfg.mutable_default_file_type()->add_platform_settings(); |
201 cfg.add_file_types()->add_platform_settings(); | 204 cfg.add_file_types()->add_platform_settings(); |
202 cfg.set_version_id(2); | 205 cfg.set_version_id(2); |
203 EXPECT_EQ(FileTypePolicies::UpdateResult::SUCCESS, | 206 EXPECT_EQ(FileTypePolicies::UpdateResult::SUCCESS, |
204 policies_.PopulateFromBinaryPb(cfg.SerializeAsString())); | 207 policies_.PopulateFromBinaryPb(cfg.SerializeAsString())); |
205 | 208 |
206 // Can't update to the same version | 209 // Can't update to the same version |
207 EXPECT_EQ(FileTypePolicies::UpdateResult::FAILED_VERSION_CHECK, | 210 EXPECT_EQ(FileTypePolicies::UpdateResult::FAILED_VERSION_CHECK, |
208 policies_.PopulateFromBinaryPb(cfg.SerializeAsString())); | 211 policies_.PopulateFromBinaryPb(cfg.SerializeAsString())); |
209 | 212 |
210 // Can't go backward | 213 // Can't go backward |
211 cfg.set_version_id(1); | 214 cfg.set_version_id(1); |
212 EXPECT_EQ(FileTypePolicies::UpdateResult::FAILED_VERSION_CHECK, | 215 EXPECT_EQ(FileTypePolicies::UpdateResult::FAILED_VERSION_CHECK, |
213 policies_.PopulateFromBinaryPb(cfg.SerializeAsString())); | 216 policies_.PopulateFromBinaryPb(cfg.SerializeAsString())); |
214 } | 217 } |
215 } // namespace safe_browsing | 218 } // namespace safe_browsing |
OLD | NEW |