Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: chrome/browser/ui/webui/print_preview/extension_printer_handler_unittest.cc

Issue 1148383002: Add onGetUsbPrinterInfoRequested event to printerProvider API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Only include the permission granting part in this patch. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <queue>
5 #include <string> 6 #include <string>
6 #include <vector>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/files/scoped_temp_dir.h" 10 #include "base/files/scoped_temp_dir.h"
11 #include "base/json/json_string_value_serializer.h" 11 #include "base/json/json_string_value_serializer.h"
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/run_loop.h" 14 #include "base/run_loop.h"
15 #include "base/strings/string16.h" 15 #include "base/strings/string16.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 } 173 }
174 174
175 // Used as a callback to StartGetUsbPrinters in tests. 175 // Used as a callback to StartGetUsbPrinters in tests.
176 void RecordListValue(scoped_ptr<base::ListValue>* list_value_out, 176 void RecordListValue(scoped_ptr<base::ListValue>* list_value_out,
177 const base::Closure& callback, 177 const base::Closure& callback,
178 const base::ListValue& list_value) { 178 const base::ListValue& list_value) {
179 list_value_out->reset(list_value.DeepCopy()); 179 list_value_out->reset(list_value.DeepCopy());
180 callback.Run(); 180 callback.Run();
181 } 181 }
182 182
183 // Used as a callback to StartGrantUsbPrinterAccess in tests.
184 // Increases |*call_count| and records the value returned.
185 void RecordPrinterInfo(size_t* call_count,
186 scoped_ptr<base::DictionaryValue>* printer_info_out,
187 const base::DictionaryValue& printer_info) {
188 ++(*call_count);
189 printer_info_out->reset(printer_info.DeepCopy());
190 }
191
183 // Converts JSON string to base::ListValue object. 192 // Converts JSON string to base::ListValue object.
184 // On failure, returns NULL and fills |*error| string. 193 // On failure, returns NULL and fills |*error| string.
185 scoped_ptr<base::ListValue> GetJSONAsListValue(const std::string& json, 194 scoped_ptr<base::ListValue> GetJSONAsListValue(const std::string& json,
186 std::string* error) { 195 std::string* error) {
187 scoped_ptr<base::Value> deserialized( 196 scoped_ptr<base::Value> deserialized(
188 JSONStringValueDeserializer(json).Deserialize(NULL, error)); 197 JSONStringValueDeserializer(json).Deserialize(NULL, error));
189 if (!deserialized) 198 if (!deserialized)
190 return scoped_ptr<base::ListValue>(); 199 return scoped_ptr<base::ListValue>();
191 base::ListValue* list = nullptr; 200 base::ListValue* list = nullptr;
192 if (!deserialized->GetAsList(&list)) { 201 if (!deserialized->GetAsList(&list)) {
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 // Fake PrinterProviderAPI used in tests. 300 // Fake PrinterProviderAPI used in tests.
292 // It caches requests issued to API and exposes methods to trigger their 301 // It caches requests issued to API and exposes methods to trigger their
293 // callbacks. 302 // callbacks.
294 class FakePrinterProviderAPI : public PrinterProviderAPI { 303 class FakePrinterProviderAPI : public PrinterProviderAPI {
295 public: 304 public:
296 FakePrinterProviderAPI() = default; 305 FakePrinterProviderAPI() = default;
297 ~FakePrinterProviderAPI() override = default; 306 ~FakePrinterProviderAPI() override = default;
298 307
299 void DispatchGetPrintersRequested( 308 void DispatchGetPrintersRequested(
300 const PrinterProviderAPI::GetPrintersCallback& callback) override { 309 const PrinterProviderAPI::GetPrintersCallback& callback) override {
301 pending_printers_callbacks_.push_back(callback); 310 pending_printers_callbacks_.push(callback);
302 } 311 }
303 312
304 void DispatchGetCapabilityRequested( 313 void DispatchGetCapabilityRequested(
305 const std::string& destination_id, 314 const std::string& destination_id,
306 const PrinterProviderAPI::GetCapabilityCallback& callback) override { 315 const PrinterProviderAPI::GetCapabilityCallback& callback) override {
307 pending_capability_callbacks_.push_back(base::Bind(callback)); 316 pending_capability_callbacks_.push(callback);
308 } 317 }
309 318
310 void DispatchPrintRequested( 319 void DispatchPrintRequested(
311 const PrinterProviderPrintJob& job, 320 const PrinterProviderPrintJob& job,
312 const PrinterProviderAPI::PrintCallback& callback) override { 321 const PrinterProviderAPI::PrintCallback& callback) override {
313 PrintRequestInfo request_info; 322 PrintRequestInfo request_info;
314 request_info.callback = callback; 323 request_info.callback = callback;
315 request_info.job = job; 324 request_info.job = job;
316 325
317 pending_print_requests_.push_back(request_info); 326 pending_print_requests_.push(request_info);
327 }
328
329 void DispatchGrantUsbPrinterAccess(
330 const std::string& extension_id,
331 int device_id,
332 const PrinterProviderAPI::UsbAccessGrantedCallback& callback) override {
333 EXPECT_EQ("fake extension id", extension_id);
334 EXPECT_EQ(0, device_id);
335 pending_usb_access_granted_callbacks_.push(callback);
318 } 336 }
319 337
320 size_t pending_get_printers_count() const { 338 size_t pending_get_printers_count() const {
321 return pending_printers_callbacks_.size(); 339 return pending_printers_callbacks_.size();
322 } 340 }
323 341
324 const PrinterProviderPrintJob* GetPrintJob( 342 const PrinterProviderPrintJob* GetPrintJob(
325 const extensions::Extension* extension, 343 const extensions::Extension* extension,
326 int request_id) const override { 344 int request_id) const override {
327 ADD_FAILURE() << "Not reached"; 345 ADD_FAILURE() << "Not reached";
328 return nullptr; 346 return nullptr;
329 } 347 }
330 348
331 void TriggerNextGetPrintersCallback(const base::ListValue& printers, 349 void TriggerNextGetPrintersCallback(const base::ListValue& printers,
332 bool done) { 350 bool done) {
333 ASSERT_GT(pending_get_printers_count(), 0u); 351 ASSERT_GT(pending_get_printers_count(), 0u);
334 pending_printers_callbacks_[0].Run(printers, done); 352 pending_printers_callbacks_.front().Run(printers, done);
335 pending_printers_callbacks_.erase(pending_printers_callbacks_.begin()); 353 pending_printers_callbacks_.pop();
336 } 354 }
337 355
338 size_t pending_get_capability_count() const { 356 size_t pending_get_capability_count() const {
339 return pending_capability_callbacks_.size(); 357 return pending_capability_callbacks_.size();
340 } 358 }
341 359
342 void TriggerNextGetCapabilityCallback( 360 void TriggerNextGetCapabilityCallback(
343 const base::DictionaryValue& description) { 361 const base::DictionaryValue& description) {
344 ASSERT_GT(pending_get_capability_count(), 0u); 362 ASSERT_GT(pending_get_capability_count(), 0u);
345 pending_capability_callbacks_[0].Run(description); 363 pending_capability_callbacks_.front().Run(description);
346 pending_capability_callbacks_.erase(pending_capability_callbacks_.begin()); 364 pending_capability_callbacks_.pop();
347 } 365 }
348 366
349 size_t pending_print_count() const { return pending_print_requests_.size(); } 367 size_t pending_print_count() const { return pending_print_requests_.size(); }
350 368
351 const PrinterProviderPrintJob* GetNextPendingPrintJob() const { 369 const PrinterProviderPrintJob* GetNextPendingPrintJob() const {
352 EXPECT_GT(pending_print_count(), 0u); 370 EXPECT_GT(pending_print_count(), 0u);
353 if (pending_print_count() == 0) 371 if (pending_print_count() == 0)
354 return NULL; 372 return NULL;
355 return &pending_print_requests_[0].job; 373 return &pending_print_requests_.front().job;
356 } 374 }
357 375
358 void TriggerNextPrintCallback(const std::string& result) { 376 void TriggerNextPrintCallback(const std::string& result) {
359 ASSERT_GT(pending_print_count(), 0u); 377 ASSERT_GT(pending_print_count(), 0u);
360 pending_print_requests_[0].callback.Run(result == kPrintRequestSuccess, 378 pending_print_requests_.front().callback.Run(result == kPrintRequestSuccess,
361 result); 379 result);
362 pending_print_requests_.erase(pending_print_requests_.begin()); 380 pending_print_requests_.pop();
381 }
382
383 size_t pending_usb_access_granted_count() const {
384 return pending_usb_access_granted_callbacks_.size();
385 }
386
387 void TriggerNextUsbAccessGrantedCallback(
388 const base::DictionaryValue& printer_info) {
389 ASSERT_GT(pending_usb_access_granted_count(), 0u);
390 pending_usb_access_granted_callbacks_.front().Run(printer_info);
391 pending_usb_access_granted_callbacks_.pop();
363 } 392 }
364 393
365 private: 394 private:
366 std::vector<PrinterProviderAPI::GetPrintersCallback> 395 std::queue<PrinterProviderAPI::GetPrintersCallback>
367 pending_printers_callbacks_; 396 pending_printers_callbacks_;
368 std::vector<PrinterProviderAPI::GetCapabilityCallback> 397 std::queue<PrinterProviderAPI::GetCapabilityCallback>
369 pending_capability_callbacks_; 398 pending_capability_callbacks_;
370 std::vector<PrintRequestInfo> pending_print_requests_; 399 std::queue<PrintRequestInfo> pending_print_requests_;
400 std::queue<PrinterProviderAPI::UsbAccessGrantedCallback>
401 pending_usb_access_granted_callbacks_;
371 402
372 DISALLOW_COPY_AND_ASSIGN(FakePrinterProviderAPI); 403 DISALLOW_COPY_AND_ASSIGN(FakePrinterProviderAPI);
373 }; 404 };
374 405
375 KeyedService* BuildTestingPrinterProviderAPI(content::BrowserContext* context) { 406 KeyedService* BuildTestingPrinterProviderAPI(content::BrowserContext* context) {
376 return new FakePrinterProviderAPI(); 407 return new FakePrinterProviderAPI();
377 } 408 }
378 409
379 class FakeDeviceClient : public device::DeviceClient { 410 class FakeDeviceClient : public device::DeviceClient {
380 public: 411 public:
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 extension_printer_handler_->StartPrint( 946 extension_printer_handler_->StartPrint(
916 kPrinterId, kPWGRasterOnlyPrinterSimpleDescription, title, 947 kPrinterId, kPWGRasterOnlyPrinterSimpleDescription, title,
917 kEmptyPrintTicket, gfx::Size(100, 100), print_data, 948 kEmptyPrintTicket, gfx::Size(100, 100), print_data,
918 base::Bind(&RecordPrintResult, &call_count, &success, &status)); 949 base::Bind(&RecordPrintResult, &call_count, &success, &status));
919 950
920 EXPECT_EQ(1u, call_count); 951 EXPECT_EQ(1u, call_count);
921 952
922 EXPECT_FALSE(success); 953 EXPECT_FALSE(success);
923 EXPECT_EQ("INVALID_DATA", status); 954 EXPECT_EQ("INVALID_DATA", status);
924 } 955 }
956
957 TEST_F(ExtensionPrinterHandlerTest, GrantUsbPrinterAccess) {
958 size_t call_count = 0;
959 scoped_ptr<base::DictionaryValue> printer_info;
960
961 extension_printer_handler_->StartGrantUsbPrinterAccess(
962 "fake extension id", 0,
963 base::Bind(&RecordPrinterInfo, &call_count, &printer_info));
964
965 EXPECT_FALSE(printer_info.get());
966 FakePrinterProviderAPI* fake_api = GetPrinterProviderAPI();
967 ASSERT_TRUE(fake_api);
968 ASSERT_EQ(1u, fake_api->pending_usb_access_granted_count());
969
970 scoped_ptr<base::DictionaryValue> original_printer_info(
971 DictionaryBuilder()
972 .Set("id", "printer1")
973 .Set("name", "Printer 1")
974 .Build());
975
976 fake_api->TriggerNextUsbAccessGrantedCallback(*original_printer_info);
977
978 EXPECT_EQ(1u, call_count);
979 ASSERT_TRUE(printer_info.get());
980 EXPECT_TRUE(printer_info->Equals(original_printer_info.get()))
981 << *printer_info << ", expected: " << *original_printer_info;
982 }
983
984 TEST_F(ExtensionPrinterHandlerTest, GrantUsbPrinterAccess_Reset) {
985 size_t call_count = 0;
986 scoped_ptr<base::DictionaryValue> printer_info;
987
988 extension_printer_handler_->StartGrantUsbPrinterAccess(
989 "fake extension id", 0,
990 base::Bind(&RecordPrinterInfo, &call_count, &printer_info));
991
992 EXPECT_FALSE(printer_info.get());
993 FakePrinterProviderAPI* fake_api = GetPrinterProviderAPI();
994 ASSERT_TRUE(fake_api);
995 ASSERT_EQ(1u, fake_api->pending_usb_access_granted_count());
996
997 extension_printer_handler_->Reset();
998
999 scoped_ptr<base::DictionaryValue> original_printer_info(
1000 DictionaryBuilder()
1001 .Set("id", "printer1")
1002 .Set("name", "Printer 1")
1003 .Build());
1004
1005 fake_api->TriggerNextUsbAccessGrantedCallback(*original_printer_info);
1006
1007 EXPECT_EQ(0u, call_count);
1008 EXPECT_FALSE(printer_info.get());
1009 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698