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 "chrome/browser/chromeos/printer_detector/printer_detector.h" | 5 #include "chrome/browser/chromeos/printer_detector/printer_detector.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 uint16_t product_id, | 122 uint16_t product_id, |
123 uint8_t interface_class) { | 123 uint8_t interface_class) { |
124 device::UsbConfigDescriptor config(1, false, false, 0); | 124 device::UsbConfigDescriptor config(1, false, false, 0); |
125 config.interfaces.emplace_back(1, 0, interface_class, 0, 0); | 125 config.interfaces.emplace_back(1, 0, interface_class, 0, 0); |
126 usb_service_.AddDevice( | 126 usb_service_.AddDevice( |
127 new device::MockUsbDevice(vendor_id, product_id, config)); | 127 new device::MockUsbDevice(vendor_id, product_id, config)); |
128 } | 128 } |
129 | 129 |
130 // Creates a test extension with the provided permissions. | 130 // Creates a test extension with the provided permissions. |
131 scoped_refptr<extensions::Extension> CreateTestExtension( | 131 scoped_refptr<extensions::Extension> CreateTestExtension( |
132 ListBuilder permissions_builder, | 132 scoped_ptr<base::ListValue> permissions_builder, |
133 DictionaryBuilder usb_printers_builder) { | 133 scoped_ptr<base::DictionaryValue> usb_printers_builder) { |
134 return extensions::ExtensionBuilder() | 134 return extensions::ExtensionBuilder() |
135 .SetID("fake_extension_id") | 135 .SetID("fake_extension_id") |
136 .SetManifest(std::move( | 136 .SetManifest( |
137 DictionaryBuilder() | 137 DictionaryBuilder() |
138 .Set("name", "Printer provider extension") | 138 .Set("name", "Printer provider extension") |
139 .Set("manifest_version", 2) | 139 .Set("manifest_version", 2) |
140 .Set("version", "1.0") | 140 .Set("version", "1.0") |
141 // Needed to enable usb API. | 141 // Needed to enable usb API. |
142 .Set("app", std::move(DictionaryBuilder().Set( | 142 .Set("app", |
143 "background", | 143 DictionaryBuilder() |
144 std::move(DictionaryBuilder().Set( | 144 .Set("background", |
145 "scripts", std::move(ListBuilder().Append( | 145 DictionaryBuilder() |
146 "bg.js"))))))) | 146 .Set("scripts", |
| 147 ListBuilder().Append("bg.js").Build()) |
| 148 .Build()) |
| 149 .Build()) |
147 .Set("permissions", std::move(permissions_builder)) | 150 .Set("permissions", std::move(permissions_builder)) |
148 .Set("usb_printers", std::move(usb_printers_builder)))) | 151 .Set("usb_printers", std::move(usb_printers_builder)) |
| 152 .Build()) |
149 .Build(); | 153 .Build(); |
150 } | 154 } |
151 | 155 |
152 content::TestBrowserThreadBundle thread_bundle_; | 156 content::TestBrowserThreadBundle thread_bundle_; |
153 StubNotificationUIManager notification_ui_manager_; | 157 StubNotificationUIManager notification_ui_manager_; |
154 user_manager::FakeUserManager* user_manager_; | 158 user_manager::FakeUserManager* user_manager_; |
155 chromeos::ScopedUserManagerEnabler user_manager_enabler_; | 159 chromeos::ScopedUserManagerEnabler user_manager_enabler_; |
156 device::MockUsbService usb_service_; | 160 device::MockUsbService usb_service_; |
157 scoped_ptr<TestingProfile> profile_; | 161 scoped_ptr<TestingProfile> profile_; |
158 FakeDeviceClient device_client_; | 162 FakeDeviceClient device_client_; |
159 | 163 |
160 DISALLOW_COPY_AND_ASSIGN(PrinterDetectorAppSearchEnabledTest); | 164 DISALLOW_COPY_AND_ASSIGN(PrinterDetectorAppSearchEnabledTest); |
161 }; | 165 }; |
162 | 166 |
163 TEST_F(PrinterDetectorAppSearchEnabledTest, ShowFindAppNotification) { | 167 TEST_F(PrinterDetectorAppSearchEnabledTest, ShowFindAppNotification) { |
164 InvokeUsbAdded(123, 456, kPrinterInterfaceClass); | 168 InvokeUsbAdded(123, 456, kPrinterInterfaceClass); |
165 | 169 |
166 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); | 170 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); |
167 const Notification& notification = | 171 const Notification& notification = |
168 notification_ui_manager_.GetNotificationAt(0); | 172 notification_ui_manager_.GetNotificationAt(0); |
169 EXPECT_EQ("123:456", notification.tag()); | 173 EXPECT_EQ("123:456", notification.tag()); |
170 EXPECT_EQ( | 174 EXPECT_EQ( |
171 base::StringPrintf(kPrinterAppNotFoundDelegateIDTemplate, "123", "456"), | 175 base::StringPrintf(kPrinterAppNotFoundDelegateIDTemplate, "123", "456"), |
172 notification.delegate_id()); | 176 notification.delegate_id()); |
173 } | 177 } |
174 | 178 |
175 TEST_F(PrinterDetectorAppSearchEnabledTest, ShowAppFoundNotification) { | 179 TEST_F(PrinterDetectorAppSearchEnabledTest, ShowAppFoundNotification) { |
176 scoped_refptr<extensions::Extension> extension = CreateTestExtension( | 180 scoped_refptr<extensions::Extension> extension = CreateTestExtension( |
177 std::move(ListBuilder() | 181 ListBuilder() |
178 .Append("usb") | 182 .Append("usb") |
179 .Append("printerProvider") | 183 .Append("printerProvider") |
180 .Append(std::move(DictionaryBuilder().Set( | 184 .Append(DictionaryBuilder() |
181 "usbDevices", std::move(ListBuilder().Append(std::move( | 185 .Set("usbDevices", ListBuilder() |
182 DictionaryBuilder() | 186 .Append(DictionaryBuilder() |
183 .Set("vendorId", 123) | 187 .Set("vendorId", 123) |
184 .Set("productId", 456)))))))), | 188 .Set("productId", 456) |
185 std::move(DictionaryBuilder().Set("filters", ListBuilder()))); | 189 .Build()) |
| 190 .Build()) |
| 191 .Build()) |
| 192 .Build(), |
| 193 DictionaryBuilder().Set("filters", ListBuilder().Build()).Build()); |
186 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) | 194 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) |
187 ->AddEnabled(extension)); | 195 ->AddEnabled(extension)); |
188 | 196 |
189 InvokeUsbAdded(123, 456, kPrinterInterfaceClass); | 197 InvokeUsbAdded(123, 456, kPrinterInterfaceClass); |
190 | 198 |
191 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); | 199 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); |
192 const Notification& notification = | 200 const Notification& notification = |
193 notification_ui_manager_.GetNotificationAt(0); | 201 notification_ui_manager_.GetNotificationAt(0); |
194 EXPECT_EQ("123:456", notification.tag()); | 202 EXPECT_EQ("123:456", notification.tag()); |
195 EXPECT_EQ( | 203 EXPECT_EQ( |
196 base::StringPrintf(kPrinterAppExistsDelegateIDTemplate, "123", "456"), | 204 base::StringPrintf(kPrinterAppExistsDelegateIDTemplate, "123", "456"), |
197 notification.delegate_id()); | 205 notification.delegate_id()); |
198 } | 206 } |
199 | 207 |
200 TEST_F(PrinterDetectorAppSearchEnabledTest, | 208 TEST_F(PrinterDetectorAppSearchEnabledTest, |
201 UsbHandlerExists_NotPrinterProvider) { | 209 UsbHandlerExists_NotPrinterProvider) { |
202 scoped_refptr<extensions::Extension> extension = CreateTestExtension( | 210 scoped_refptr<extensions::Extension> extension = CreateTestExtension( |
203 std::move( | 211 ListBuilder() |
204 ListBuilder().Append("usb").Append(std::move(DictionaryBuilder().Set( | 212 .Append("usb") |
205 "usbDevices", std::move(ListBuilder().Append( | 213 .Append(DictionaryBuilder() |
206 std::move(DictionaryBuilder() | 214 .Set("usbDevices", ListBuilder() |
207 .Set("vendorId", 123) | 215 .Append(DictionaryBuilder() |
208 .Set("productId", 756)))))))), | 216 .Set("vendorId", 123) |
209 std::move(DictionaryBuilder().Set("filters", ListBuilder()))); | 217 .Set("productId", 756) |
| 218 .Build()) |
| 219 .Build()) |
| 220 .Build()) |
| 221 .Build(), |
| 222 DictionaryBuilder().Set("filters", ListBuilder().Build()).Build()); |
210 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) | 223 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) |
211 ->AddEnabled(extension)); | 224 ->AddEnabled(extension)); |
212 | 225 |
213 InvokeUsbAdded(123, 756, kPrinterInterfaceClass); | 226 InvokeUsbAdded(123, 756, kPrinterInterfaceClass); |
214 | 227 |
215 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); | 228 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); |
216 const Notification& notification = | 229 const Notification& notification = |
217 notification_ui_manager_.GetNotificationAt(0); | 230 notification_ui_manager_.GetNotificationAt(0); |
218 EXPECT_EQ("123:756", notification.tag()); | 231 EXPECT_EQ("123:756", notification.tag()); |
219 EXPECT_EQ( | 232 EXPECT_EQ( |
220 base::StringPrintf(kPrinterAppNotFoundDelegateIDTemplate, "123", "756"), | 233 base::StringPrintf(kPrinterAppNotFoundDelegateIDTemplate, "123", "756"), |
221 notification.delegate_id()); | 234 notification.delegate_id()); |
222 } | 235 } |
223 | 236 |
224 TEST_F(PrinterDetectorAppSearchEnabledTest, | 237 TEST_F(PrinterDetectorAppSearchEnabledTest, |
225 PrinterProvider_DifferentUsbProductId) { | 238 PrinterProvider_DifferentUsbProductId) { |
226 scoped_refptr<extensions::Extension> extension = CreateTestExtension( | 239 scoped_refptr<extensions::Extension> extension = CreateTestExtension( |
227 std::move(ListBuilder() | 240 ListBuilder() |
228 .Append("usb") | 241 .Append("usb") |
229 .Append("printerProvider") | 242 .Append("printerProvider") |
230 .Append(std::move(DictionaryBuilder().Set( | 243 .Append(DictionaryBuilder() |
231 "usbDevices", std::move(ListBuilder().Append(std::move( | 244 .Set("usbDevices", ListBuilder() |
232 DictionaryBuilder() | 245 .Append(DictionaryBuilder() |
233 .Set("vendorId", 123) | 246 .Set("vendorId", 123) |
234 .Set("productId", 001)))))))), | 247 .Set("productId", 001) |
235 std::move(DictionaryBuilder().Set("filters", ListBuilder()))); | 248 .Build()) |
| 249 .Build()) |
| 250 .Build()) |
| 251 .Build(), |
| 252 DictionaryBuilder().Set("filters", ListBuilder().Build()).Build()); |
236 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) | 253 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) |
237 ->AddEnabled(extension)); | 254 ->AddEnabled(extension)); |
238 | 255 |
239 InvokeUsbAdded(123, 456, kPrinterInterfaceClass); | 256 InvokeUsbAdded(123, 456, kPrinterInterfaceClass); |
240 | 257 |
241 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); | 258 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); |
242 const Notification& notification = | 259 const Notification& notification = |
243 notification_ui_manager_.GetNotificationAt(0); | 260 notification_ui_manager_.GetNotificationAt(0); |
244 EXPECT_EQ("123:456", notification.tag()); | 261 EXPECT_EQ("123:456", notification.tag()); |
245 EXPECT_EQ( | 262 EXPECT_EQ( |
246 base::StringPrintf(kPrinterAppNotFoundDelegateIDTemplate, "123", "456"), | 263 base::StringPrintf(kPrinterAppNotFoundDelegateIDTemplate, "123", "456"), |
247 notification.delegate_id()); | 264 notification.delegate_id()); |
248 } | 265 } |
249 | 266 |
250 TEST_F(PrinterDetectorAppSearchEnabledTest, | 267 TEST_F(PrinterDetectorAppSearchEnabledTest, |
251 PrinterProvider_UsbPrinters_NotFound) { | 268 PrinterProvider_UsbPrinters_NotFound) { |
252 scoped_refptr<extensions::Extension> extension = CreateTestExtension( | 269 scoped_refptr<extensions::Extension> extension = CreateTestExtension( |
253 std::move(ListBuilder().Append("usb").Append("printerProvider")), | 270 ListBuilder().Append("usb").Append("printerProvider").Build(), |
254 std::move(DictionaryBuilder().Set( | 271 DictionaryBuilder() |
255 "filters", std::move(ListBuilder().Append( | 272 .Set("filters", ListBuilder() |
256 std::move(DictionaryBuilder() | 273 .Append(DictionaryBuilder() |
257 .Set("vendorId", 123) | 274 .Set("vendorId", 123) |
258 .Set("productId", 001))))))); | 275 .Set("productId", 001) |
| 276 .Build()) |
| 277 .Build()) |
| 278 .Build()); |
259 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) | 279 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) |
260 ->AddEnabled(extension)); | 280 ->AddEnabled(extension)); |
261 | 281 |
262 InvokeUsbAdded(123, 456, kPrinterInterfaceClass); | 282 InvokeUsbAdded(123, 456, kPrinterInterfaceClass); |
263 | 283 |
264 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); | 284 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); |
265 const Notification& notification = | 285 const Notification& notification = |
266 notification_ui_manager_.GetNotificationAt(0); | 286 notification_ui_manager_.GetNotificationAt(0); |
267 EXPECT_EQ("123:456", notification.tag()); | 287 EXPECT_EQ("123:456", notification.tag()); |
268 EXPECT_EQ( | 288 EXPECT_EQ( |
269 base::StringPrintf(kPrinterAppNotFoundDelegateIDTemplate, "123", "456"), | 289 base::StringPrintf(kPrinterAppNotFoundDelegateIDTemplate, "123", "456"), |
270 notification.delegate_id()); | 290 notification.delegate_id()); |
271 } | 291 } |
272 | 292 |
273 TEST_F(PrinterDetectorAppSearchEnabledTest, | 293 TEST_F(PrinterDetectorAppSearchEnabledTest, |
274 PrinterProvider_UsbPrinters_WithProductId) { | 294 PrinterProvider_UsbPrinters_WithProductId) { |
275 scoped_refptr<extensions::Extension> extension = CreateTestExtension( | 295 scoped_refptr<extensions::Extension> extension = CreateTestExtension( |
276 std::move(ListBuilder().Append("usb").Append("printerProvider")), | 296 ListBuilder().Append("usb").Append("printerProvider").Build(), |
277 std::move(DictionaryBuilder().Set( | 297 DictionaryBuilder() |
278 "filters", std::move(ListBuilder().Append( | 298 .Set("filters", ListBuilder() |
279 std::move(DictionaryBuilder() | 299 .Append(DictionaryBuilder() |
280 .Set("vendorId", 123) | 300 .Set("vendorId", 123) |
281 .Set("productId", 456))))))); | 301 .Set("productId", 456) |
| 302 .Build()) |
| 303 .Build()) |
| 304 .Build()); |
282 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) | 305 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) |
283 ->AddEnabled(extension)); | 306 ->AddEnabled(extension)); |
284 | 307 |
285 InvokeUsbAdded(123, 456, kPrinterInterfaceClass); | 308 InvokeUsbAdded(123, 456, kPrinterInterfaceClass); |
286 | 309 |
287 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); | 310 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); |
288 const Notification& notification = | 311 const Notification& notification = |
289 notification_ui_manager_.GetNotificationAt(0); | 312 notification_ui_manager_.GetNotificationAt(0); |
290 EXPECT_EQ("123:456", notification.tag()); | 313 EXPECT_EQ("123:456", notification.tag()); |
291 EXPECT_EQ( | 314 EXPECT_EQ( |
292 base::StringPrintf(kPrinterAppExistsDelegateIDTemplate, "123", "456"), | 315 base::StringPrintf(kPrinterAppExistsDelegateIDTemplate, "123", "456"), |
293 notification.delegate_id()); | 316 notification.delegate_id()); |
294 } | 317 } |
295 | 318 |
296 TEST_F(PrinterDetectorAppSearchEnabledTest, | 319 TEST_F(PrinterDetectorAppSearchEnabledTest, |
297 PrinterProvider_UsbPrinters_WithInterfaceClass) { | 320 PrinterProvider_UsbPrinters_WithInterfaceClass) { |
298 scoped_refptr<extensions::Extension> extension = CreateTestExtension( | 321 scoped_refptr<extensions::Extension> extension = CreateTestExtension( |
299 std::move(ListBuilder().Append("usb").Append("printerProvider")), | 322 ListBuilder().Append("usb").Append("printerProvider").Build(), |
300 std::move(DictionaryBuilder().Set( | 323 DictionaryBuilder() |
301 "filters", | 324 .Set("filters", |
302 std::move(ListBuilder().Append(std::move( | 325 ListBuilder() |
303 DictionaryBuilder() | 326 .Append(DictionaryBuilder() |
304 .Set("vendorId", 123) | 327 .Set("vendorId", 123) |
305 .Set("interfaceClass", kPrinterInterfaceClass))))))); | 328 .Set("interfaceClass", kPrinterInterfaceClass) |
| 329 .Build()) |
| 330 .Build()) |
| 331 .Build()); |
306 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) | 332 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) |
307 ->AddEnabled(extension)); | 333 ->AddEnabled(extension)); |
308 | 334 |
309 InvokeUsbAdded(123, 456, kPrinterInterfaceClass); | 335 InvokeUsbAdded(123, 456, kPrinterInterfaceClass); |
310 | 336 |
311 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); | 337 ASSERT_EQ(1u, notification_ui_manager_.GetNotificationCount()); |
312 const Notification& notification = | 338 const Notification& notification = |
313 notification_ui_manager_.GetNotificationAt(0); | 339 notification_ui_manager_.GetNotificationAt(0); |
314 EXPECT_EQ("123:456", notification.tag()); | 340 EXPECT_EQ("123:456", notification.tag()); |
315 EXPECT_EQ( | 341 EXPECT_EQ( |
316 base::StringPrintf(kPrinterAppExistsDelegateIDTemplate, "123", "456"), | 342 base::StringPrintf(kPrinterAppExistsDelegateIDTemplate, "123", "456"), |
317 notification.delegate_id()); | 343 notification.delegate_id()); |
318 } | 344 } |
319 | 345 |
320 TEST_F(PrinterDetectorAppSearchEnabledTest, IgnoreNonPrinters) { | 346 TEST_F(PrinterDetectorAppSearchEnabledTest, IgnoreNonPrinters) { |
321 scoped_refptr<extensions::Extension> extension = CreateTestExtension( | 347 scoped_refptr<extensions::Extension> extension = CreateTestExtension( |
322 std::move(ListBuilder().Append("usb").Append("printerProvider")), | 348 ListBuilder().Append("usb").Append("printerProvider").Build(), |
323 std::move(DictionaryBuilder().Set( | 349 DictionaryBuilder() |
324 "filters", | 350 .Set("filters", |
325 std::move(ListBuilder().Append(std::move( | 351 ListBuilder() |
326 DictionaryBuilder() | 352 .Append(DictionaryBuilder() |
327 .Set("vendorId", 123) | 353 .Set("vendorId", 123) |
328 .Set("interfaceClass", kPrinterInterfaceClass))))))); | 354 .Set("interfaceClass", kPrinterInterfaceClass) |
| 355 .Build()) |
| 356 .Build()) |
| 357 .Build()); |
329 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) | 358 ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile_.get()) |
330 ->AddEnabled(extension)); | 359 ->AddEnabled(extension)); |
331 | 360 |
332 InvokeUsbAdded(123, 456, 1); | 361 InvokeUsbAdded(123, 456, 1); |
333 | 362 |
334 ASSERT_EQ(0u, notification_ui_manager_.GetNotificationCount()); | 363 ASSERT_EQ(0u, notification_ui_manager_.GetNotificationCount()); |
335 } | 364 } |
336 | 365 |
337 } // namespace chromeos | 366 } // namespace chromeos |
OLD | NEW |