| 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 |