12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/md5.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 10b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/cloud_print/cloud_print_constants.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/service/cloud_print/cloud_print_service_helpers.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/service/cloud_print/cloud_print_token_store.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/service/cloud_print/print_system.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/service/cloud_print/printer_job_handler.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/http_response_headers.h" 180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "net/http/http_status_code.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "net/url_request/url_request_status.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_request_test_util.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "printing/backend/print_backend.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::AtLeast; 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using ::testing::DoAll; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Exactly; 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using ::testing::Invoke; 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using ::testing::InvokeWithoutArgs; 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using ::testing::NiceMock; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Return; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::SaveArg; 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using ::testing::Sequence; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::SetArgPointee; 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using ::testing::StrictMock; 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using ::testing::_; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cloud_print { 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using base::StringPrintf; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExampleCloudPrintServerURL[] = "https://www.google.com/cloudprint/"; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExamplePrintTicket[] = "{\"MediaType\":\"plain\"," 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"Resolution\":\"300x300dpi\",\"PageRegion\":\"Letter\"," 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"InputSlot\":\"auto\",\"PageSize\":\"Letter\",\"EconoMode\":\"off\"}"; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The fillowing constants will all be constructed with StringPrintf. The 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// following types of parameters are possible: 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// job number(int): ID # of job from given job list. All job IDs follow the 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// format __example_job_idN for some N. 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// fetch reason(string): Fetch reason used by the code. The job list URL 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// requested by PrinterJobHandler has an extra parameter that signifies when 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the request was triggered. 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// status string(string): Status of print job, one of IN_PROGRESS, DONE or ERROR 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// job object list(string/JSON formatted): a comma-separated list of job objects 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// StringPrintf parameters: job number, job number, job number, job number 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExampleJobObject[] = "{" 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"tags\": [" 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"^own\"" 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" ]," 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"printerName\": \"Example Printer\"," 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"status\": \"QUEUED\"," 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"ownerId\": \"sampleuser@gmail.com\"," 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"ticketUrl\": \"https://www.google.com/cloudprint/ticket?exampleURI%d\"," 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"printerid\": \"__example_printer_id\"," 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"printerType\": \"GOOGLE\"," 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"contentType\": \"text/html\"," 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"fileUrl\": \"https://www.google.com/cloudprint/download?exampleURI%d\"," 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"id\": \"__example_job_id%d\"," 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"message\": \"\"," 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"title\": \"Example Job %d\"," 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"errorCode\": \"\"," 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"numberOfPages\": 3" 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" }"; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// StringPrintf parameters: job object list 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExampleJobListResponse[] = "{" 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"success\": true," 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"jobs\": [" 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" %s" 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" ]," 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"xsrf_token\": \"AIp06DjUd3AV6BO0aujB9NvM2a9ZbogxOQ:1360021066932\"," 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"request\": {" 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"time\": \"0\"," 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"users\": [" 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"sampleuser@gmail.com\"" 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" ]," 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"params\": {" 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"printerid\": [" 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"__example_printer_id\"" 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" ]" 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" }," 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"user\": \"sampleuser@gmail.com\"" 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" }" 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)"}"; 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// StringPrintf parameters: job number 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExampleJobID[] = "__example_job_id%d"; 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// StringPrintf parameters: job number 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExamplePrintTicketURI[] = 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "https://www.google.com/cloudprint/ticket?exampleURI%d"; 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// StringPrintf parameters: job number 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExamplePrintDownloadURI[] = 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "https://www.google.com/cloudprint/download?exampleURI%d"; 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// StringPrintf parameters: job number 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExampleUpdateDoneURI[] = 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "https://www.google.com/cloudprint/control?jobid=__example_job_id%d" 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "&status=DONE&code=0&message=&numpages=0&pagesprinted=0"; 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// StringPrintf parameters: job number 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExampleUpdateErrorURI[] = 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "https://www.google.com/cloudprint/control?jobid=__example_job_id%d" 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "&status=ERROR"; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// StringPrintf parameters: fetch reason 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExamplePrinterJobListURI[] = 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "https://www.google.com/cloudprint/fetch" 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "?printerid=__example_printer_id&deb=%s"; 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// StringPrintf parameters: status string, job number, status string (repeat) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExampleControlResponse[] = "{" 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"success\": true," 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"message\": \"Print job updated successfully.\"," 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"xsrf_token\": \"AIp06DjKgbfGalbqzj23V1bU6i-vtR2B4w:1360023068789\"," 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"request\": {" 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"time\": \"0\"," 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"users\": [" 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"sampleuser@gmail.com\"" 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" ]," 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"params\": {" 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"xsrf\": [" 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"AIp06DgeGIETs42Cj28QWmxGPWVDiaXwVQ:1360023041852\"" 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" ]," 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"status\": [" 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"%s\"" 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" ]," 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"jobid\": [" 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"__example_job_id%d\"" 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" ]" 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" }," 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"user\": \"sampleuser@gmail.com\"" 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" }," 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"job\": {" 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"tags\": [" 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"^own\"" 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" ]," 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"printerName\": \"Example Printer\"," 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"status\": \"%s\"," 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"ownerId\": \"sampleuser@gmail.com\"," 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"ticketUrl\": \"https://www.google.com/cloudprint/ticket?exampleURI1\"," 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"printerid\": \"__example_printer_id\"," 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"contentType\": \"text/html\"," 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"fileUrl\": \"https://www.google.com/cloudprint/download?exampleURI1\"," 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"id\": \"__example_job_id1\"," 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"message\": \"\"," 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"title\": \"Example Job\"," 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"errorCode\": \"\"," 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" \"numberOfPages\": 3" 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)" }" 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)"}"; 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExamplePrinterID[] = "__example_printer_id"; 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExamplePrinterCapabilities[] = ""; 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExampleCapsMimeType[] = ""; 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// These can stay empty 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExampleDefaults[] = ""; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExampleDefaultMimeType[] = ""; 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Since we're not connecting to the server, this can be any non-empty string. 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExampleCloudPrintOAuthToken[] = "__SAMPLE_TOKEN"; 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Not actually printing, no need for real PDF. 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExamplePrintData[] = "__EXAMPLE_PRINT_DATA"; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExampleJobDownloadResponseHeaders[] = 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Content-Type: Application/PDF\n"; 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExamplePrinterName[] = "Example Printer"; 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExamplePrinterDescription[] = "Example Description"; 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// These are functions used to construct the various sample strings. 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string JobListResponse(int num_jobs) { 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string job_objects; 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < num_jobs; i++) { 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) job_objects = job_objects + StringPrintf(kExampleJobObject, i+1, i+1, i+1, 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) i+1); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (i != num_jobs-1) job_objects = job_objects + ","; 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return StringPrintf(kExampleJobListResponse, job_objects.c_str()); 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL JobListURI(const char* reason) { 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return GURL(StringPrintf(kExamplePrinterJobListURI, reason)); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL DoneURI(int job_num) { 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return GURL(StringPrintf(kExampleUpdateDoneURI, job_num)); 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL ErrorURI(int job_num) { 2174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return GURL(StringPrintf(kExampleUpdateErrorURI, job_num)); 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL TicketURI(int job_num) { 2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return GURL(StringPrintf(kExamplePrintTicketURI, job_num)); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL DownloadURI(int job_num) { 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return GURL(StringPrintf(kExamplePrintDownloadURI, job_num)); 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL InProgressURI(int job_num) { 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetUrlForJobStatusUpdate(GURL(kExampleCloudPrintServerURL), 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringPrintf(kExampleJobID, job_num), 23168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PRINT_JOB_STATUS_IN_PROGRESS, 2324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0); 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string StatusResponse(int job_num, const char* status_string) { 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return StringPrintf(kExampleControlResponse, 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_string, 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) job_num, 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_string); 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CloudPrintURLFetcherNoServiceProcess 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public CloudPrintURLFetcher { 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CloudPrintURLFetcherNoServiceProcess() : 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context_getter_(new net::TestURLRequestContextGetter( 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::MessageLoopProxy::current())) {} 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual net::URLRequestContextGetter* GetRequestContextGetter() OVERRIDE { 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return context_getter_.get(); 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~CloudPrintURLFetcherNoServiceProcess() {} 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> context_getter_; 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CloudPrintURLFetcherNoServiceProcessFactory 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public CloudPrintURLFetcherFactory { 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual CloudPrintURLFetcher* CreateCloudPrintURLFetcher() OVERRIDE { 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new CloudPrintURLFetcherNoServiceProcess; 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~CloudPrintURLFetcherNoServiceProcessFactory() {} 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class handles the callback from FakeURLFetcher 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// It is a separate class because callback methods must be 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// on RefCounted classes 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TestURLFetcherCallback { 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<net::FakeURLFetcher> CreateURLFetcher( 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& url, 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLFetcherDelegate* d, 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& response_data, 282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::HttpStatusCode response_code, 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::Status status) { 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<net::FakeURLFetcher> fetcher( 285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new net::FakeURLFetcher(url, d, response_data, response_code, status)); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnRequestCreate(url, fetcher.get()); 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return fetcher.Pass(); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD2(OnRequestCreate, 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void(const GURL&, net::FakeURLFetcher*)); 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockPrinterJobHandlerDelegate 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public PrinterJobHandler::Delegate { 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(OnAuthError, void()); 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(OnPrinterDeleted, void(const std::string& str)); 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockPrinterJobHandlerDelegate() {} 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockPrintServerWatcher 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public PrintSystem::PrintServerWatcher { 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(StartWatching, 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool(PrintSystem::PrintServerWatcher::Delegate* d)); 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(StopWatching, bool()); 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockPrintServerWatcher(); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintSystem::PrintServerWatcher::Delegate* delegate() const { 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return delegate_; 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class scoped_refptr<NiceMock<MockPrintServerWatcher> >; 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class scoped_refptr<StrictMock<MockPrintServerWatcher> >; 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class scoped_refptr<MockPrintServerWatcher>; 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockPrintServerWatcher() {} 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintSystem::PrintServerWatcher::Delegate* delegate_; 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockPrinterWatcher : public PrintSystem::PrinterWatcher { 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(StartWatching, bool(PrintSystem::PrinterWatcher::Delegate* d)); 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(StopWatching, bool()); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(GetCurrentPrinterInfo, 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool(printing::PrinterBasicInfo* printer_info)); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockPrinterWatcher(); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintSystem::PrinterWatcher::Delegate* delegate() const { return delegate_; } 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class scoped_refptr<NiceMock<MockPrinterWatcher> >; 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class scoped_refptr<StrictMock<MockPrinterWatcher> >; 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class scoped_refptr<MockPrinterWatcher>; 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockPrinterWatcher() {} 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintSystem::PrinterWatcher::Delegate* delegate_; 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockJobSpooler : public PrintSystem::JobSpooler { 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD7(Spool, bool( 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& print_ticket, 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& print_data_file_path, 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& print_data_mime_type, 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& printer_name, 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& job_title, 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<std::string>& tags, 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintSystem::JobSpooler::Delegate* delegate)); 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockJobSpooler(); 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintSystem::JobSpooler::Delegate* delegate() const { return delegate_; } 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class scoped_refptr<NiceMock<MockJobSpooler> >; 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class scoped_refptr<StrictMock<MockJobSpooler> >; 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class scoped_refptr<MockJobSpooler>; 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockJobSpooler() {} 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintSystem::JobSpooler::Delegate* delegate_; 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockPrintSystem : public PrintSystem { 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockPrintSystem(); 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintSystem::PrintSystemResult succeed() { 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PrintSystem::PrintSystemResult(true, "success"); 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintSystem::PrintSystemResult fail() { 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PrintSystem::PrintSystemResult(false, "failure"); 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 387868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MockJobSpooler& JobSpooler() { return *job_spooler_.get(); } 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 389868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MockPrinterWatcher& PrinterWatcher() { return *printer_watcher_.get(); } 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockPrintServerWatcher& PrintServerWatcher() { 392868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return *print_server_watcher_.get(); 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(Init, PrintSystem::PrintSystemResult()); 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(EnumeratePrinters, PrintSystem::PrintSystemResult( 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) printing::PrinterList* printer_list)); 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD2( 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetPrinterCapsAndDefaults, 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void(const std::string& printer_name, 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PrintSystem::PrinterCapsAndDefaultsCallback& callback)); 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(IsValidPrinter, bool(const std::string& printer_name)); 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD2(ValidatePrintTicket, bool(const std::string& printer_name, 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& print_ticket_data)); 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD3(GetJobDetails, bool(const std::string& printer_name, 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PlatformJobId job_id, 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintJobDetails* job_details)); 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(CreatePrintServerWatcher, PrintSystem::PrintServerWatcher*()); 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(CreatePrinterWatcher, 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintSystem::PrinterWatcher*(const std::string& printer_name)); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(CreateJobSpooler, PrintSystem::JobSpooler*()); 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(GetSupportedMimeTypes, std::string()); 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class scoped_refptr<NiceMock<MockPrintSystem> >; 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class scoped_refptr<StrictMock<MockPrintSystem> >; 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class scoped_refptr<MockPrintSystem>; 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockPrintSystem() {} 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<MockJobSpooler> job_spooler_; 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<MockPrinterWatcher> printer_watcher_; 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<MockPrintServerWatcher> print_server_watcher_; 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrinterJobHandlerTest : public ::testing::Test { 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrinterJobHandlerTest(); 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE; 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE; 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void IdleOut(); 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool GetPrinterInfo(printing::PrinterBasicInfo* info); 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SendCapsAndDefaults( 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& printer_name, 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PrintSystem::PrinterCapsAndDefaultsCallback& callback); 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddMimeHeader(const GURL& url, net::FakeURLFetcher* fetcher); 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool PostSpoolSuccess(); 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetUpJobSuccessTest(int job_num); 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void BeginTest(int timeout_seconds); 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void MakeJobFetchReturnNoJobs(); 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 450a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) static void MessageLoopQuitNowHelper(base::MessageLoop* message_loop); 451a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) static void MessageLoopQuitSoonHelper(base::MessageLoop* message_loop); 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 453a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::MessageLoopForIO loop_; 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestURLFetcherCallback url_callback_; 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockPrinterJobHandlerDelegate jobhandler_delegate_; 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CloudPrintTokenStore token_store_; 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CloudPrintURLFetcherNoServiceProcessFactory cloud_print_factory_; 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<PrinterJobHandler> job_handler_; 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<NiceMock<MockPrintSystem> > print_system_; 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::FakeURLFetcherFactory factory_; 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) printing::PrinterBasicInfo basic_info_; 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) printing::PrinterCapsAndDefaults caps_and_defaults_; 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrinterJobHandler::PrinterInfoFromCloud info_from_cloud_; 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PrinterJobHandlerTest::SetUp() { 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) basic_info_.printer_name = kExamplePrinterName; 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) basic_info_.printer_description = kExamplePrinterDescription; 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) basic_info_.is_default = 0; 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_from_cloud_.printer_id = kExamplePrinterID; 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_from_cloud_.tags_hash = GetHashOfPrinterInfo(basic_info_); 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_from_cloud_.caps_hash = base::MD5String(kExamplePrinterCapabilities); 47668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) info_from_cloud_.current_xmpp_timeout = 300; 47768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) info_from_cloud_.pending_xmpp_timeout = 0; 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) caps_and_defaults_.printer_capabilities = kExamplePrinterCapabilities; 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) caps_and_defaults_.caps_mime_type = kExampleCapsMimeType; 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) caps_and_defaults_.printer_defaults = kExampleDefaults; 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) caps_and_defaults_.defaults_mime_type = kExampleDefaultMimeType; 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) print_system_ = new NiceMock<MockPrintSystem>(); 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) token_store_.SetToken(kExampleCloudPrintOAuthToken); 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ON_CALL(print_system_->PrinterWatcher(), GetCurrentPrinterInfo(_)) 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillByDefault(Invoke(this, &PrinterJobHandlerTest::GetPrinterInfo)); 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 491868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ON_CALL(*print_system_.get(), GetPrinterCapsAndDefaults(_, _)) 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillByDefault(Invoke(this, &PrinterJobHandlerTest::SendCapsAndDefaults)); 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CloudPrintURLFetcher::set_factory(&cloud_print_factory_); 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PrinterJobHandlerTest::MakeJobFetchReturnNoJobs() { 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), 499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(0), net::HTTP_OK, 500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), 502f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(0), net::HTTP_OK, 503f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), 505f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(0), net::HTTP_OK, 506f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PrinterJobHandlerTest::MessageLoopQuitNowHelper( 510a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::MessageLoop* message_loop) { 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop->QuitWhenIdle(); 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PrinterJobHandlerTest::MessageLoopQuitSoonHelper( 515a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::MessageLoop* message_loop) { 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop->message_loop_proxy()->PostTask( 517a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) FROM_HERE, base::Bind(&MessageLoopQuitNowHelper, message_loop)); 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PrinterJobHandlerTest::PrinterJobHandlerTest() 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : factory_(NULL, base::Bind(&TestURLFetcherCallback::CreateURLFetcher, 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(&url_callback_))) { 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool PrinterJobHandlerTest::PostSpoolSuccess() { 526a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::MessageLoop::current()->PostTask( 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FROM_HERE, 528a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::Bind(&PrinterJobHandler::OnJobSpoolSucceeded, job_handler_, 0)); 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Everything that would be posted on the printer thread queue 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // has been posted, we can tell the main message loop to quit when idle 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // and not worry about it idling while the print thread does work 533a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::MessageLoop::current()->PostTask( 534a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) FROM_HERE, base::Bind(&MessageLoopQuitSoonHelper, &loop_)); 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PrinterJobHandlerTest::AddMimeHeader(const GURL& url, 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::FakeURLFetcher* fetcher) { 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<net::HttpResponseHeaders> download_headers = 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new net::HttpResponseHeaders(kExampleJobDownloadResponseHeaders); 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->set_response_headers(download_headers); 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PrinterJobHandlerTest::SetUpJobSuccessTest(int job_num) { 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(TicketURI(job_num), 548f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kExamplePrintTicket, net::HTTP_OK, 549f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(DownloadURI(job_num), 551f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kExamplePrintData, net::HTTP_OK, 552f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(DoneURI(job_num), 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StatusResponse(job_num, "DONE"), 556f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::HTTP_OK, 557f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(InProgressURI(job_num), 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StatusResponse(job_num, "IN_PROGRESS"), 560f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::HTTP_OK, 561f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The times requirement is relaxed for the ticket URI 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // in order to accommodate TicketDownloadFailureTest 5654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(url_callback_, OnRequestCreate(TicketURI(job_num), _)) 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(1)); 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(url_callback_, OnRequestCreate(DownloadURI(job_num), _)) 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(Exactly(1)) 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillOnce(Invoke(this, &PrinterJobHandlerTest::AddMimeHeader)); 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(url_callback_, OnRequestCreate(InProgressURI(job_num), _)) 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(Exactly(1)); 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(url_callback_, OnRequestCreate(DoneURI(job_num), _)) 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(Exactly(1)); 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(print_system_->JobSpooler(), 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Spool(kExamplePrintTicket, _, _, _, _, _, _)) 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(Exactly(1)) 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillOnce(InvokeWithoutArgs(this, 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &PrinterJobHandlerTest::PostSpoolSuccess)); 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PrinterJobHandlerTest::BeginTest(int timeout_seconds) { 586868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) job_handler_ = new PrinterJobHandler(basic_info_, 587868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) info_from_cloud_, 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(kExampleCloudPrintServerURL), 589868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) print_system_.get(), 590868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) &jobhandler_delegate_); 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) job_handler_->Initialize(); 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 594a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FROM_HERE, 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&PrinterJobHandlerTest::MessageLoopQuitSoonHelper, 597a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::MessageLoop::current()), 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromSeconds(timeout_seconds)); 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 600a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::MessageLoop::current()->Run(); 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PrinterJobHandlerTest::SendCapsAndDefaults( 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& printer_name, 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PrintSystem::PrinterCapsAndDefaultsCallback& callback) { 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback.Run(true, printer_name, caps_and_defaults_); 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool PrinterJobHandlerTest::GetPrinterInfo(printing::PrinterBasicInfo* info) { 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *info = basic_info_; 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PrinterJobHandlerTest::TearDown() { 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IdleOut(); 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CloudPrintURLFetcher::set_factory(NULL); 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PrinterJobHandlerTest::IdleOut() { 620a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MockPrintServerWatcher::MockPrintServerWatcher() : delegate_(NULL) { 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ON_CALL(*this, StartWatching(_)) 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillByDefault(DoAll(SaveArg<0>(&delegate_), Return(true))); 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ON_CALL(*this, StopWatching()).WillByDefault(Return(true)); 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MockPrinterWatcher::MockPrinterWatcher() : delegate_(NULL) { 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ON_CALL(*this, StartWatching(_)) 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillByDefault(DoAll(SaveArg<0>(&delegate_), Return(true))); 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ON_CALL(*this, StopWatching()).WillByDefault(Return(true)); 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MockJobSpooler::MockJobSpooler() : delegate_(NULL) { 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ON_CALL(*this, Spool(_, _, _, _, _, _, _)) 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillByDefault(DoAll(SaveArg<6>(&delegate_), Return(true))); 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MockPrintSystem::MockPrintSystem() 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : job_spooler_(new NiceMock<MockJobSpooler>()), 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) printer_watcher_(new NiceMock<MockPrinterWatcher>()), 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) print_server_watcher_(new NiceMock<MockPrintServerWatcher>()) { 645eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ON_CALL(*this, CreateJobSpooler()).WillByDefault(Return(job_spooler_.get())); 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ON_CALL(*this, CreatePrinterWatcher(_)) 648eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch .WillByDefault(Return(printer_watcher_.get())); 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ON_CALL(*this, CreatePrintServerWatcher()) 651eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch .WillByDefault(Return(print_server_watcher_.get())); 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ON_CALL(*this, IsValidPrinter(_)). 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WillByDefault(Return(true)); 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ON_CALL(*this, ValidatePrintTicket(_, _)). 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WillByDefault(Return(true)); 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This test simulates an end-to-end printing of a document 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// but tests only non-failure cases. 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Disabled - http://crbug.com/184245 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(PrinterJobHandlerTest, DISABLED_HappyPathTest) { 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), 665f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(1), net::HTTP_OK, 666f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), 668f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(0), net::HTTP_OK, 669f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(url_callback_, 6724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(Exactly(1)); 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(url_callback_, 6754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnRequestCreate(JobListURI(kJobFetchReasonQueryMore), _)) 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(Exactly(1)); 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpJobSuccessTest(1); 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BeginTest(20); 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(PrinterJobHandlerTest, TicketDownloadFailureTest) { 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), 684f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(2), net::HTTP_OK, 685f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), 687f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(2), net::HTTP_OK, 688f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), 690f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(0), net::HTTP_OK, 691f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 6920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) factory_.SetFakeResponse(TicketURI(1), std::string(), 693f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::HTTP_INTERNAL_SERVER_ERROR, 694f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::FAILED); 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(url_callback_, OnRequestCreate(TicketURI(1), _)) 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(1)); 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(url_callback_, 7004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(1)); 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(url_callback_, 7044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnRequestCreate(JobListURI(kJobFetchReasonQueryMore), _)) 7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(1)); 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(url_callback_, 7084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnRequestCreate(JobListURI(kJobFetchReasonFailure), _)) 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(1)); 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpJobSuccessTest(2); 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BeginTest(20); 7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(noamsml): Figure out how to make this test not take 1 second and 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// re-enable it 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(PrinterJobHandlerTest, DISABLED_ManyFailureTest) { 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), 719f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(1), net::HTTP_OK, 720f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), 722f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(1), net::HTTP_OK, 723f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), 725f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(1), net::HTTP_OK, 726f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), 728f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(0), net::HTTP_OK, 729f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(url_callback_, 7324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(1)); 7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(url_callback_, 7364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnRequestCreate(JobListURI(kJobFetchReasonQueryMore), _)) 7372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(1)); 7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(url_callback_, 7404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnRequestCreate(JobListURI(kJobFetchReasonFailure), _)) 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(1)); 7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(url_callback_, 7444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnRequestCreate(JobListURI(kJobFetchReasonRetry), _)) 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(1)); 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpJobSuccessTest(1); 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) factory_.SetFakeResponse(TicketURI(1), 7500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string(), 751f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::HTTP_INTERNAL_SERVER_ERROR, 752f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::FAILED); 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.PostDelayedTask(FROM_HERE, 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&net::FakeURLFetcherFactory::SetFakeResponse, 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(&factory_), 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TicketURI(1), 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kExamplePrintTicket, 759f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::HTTP_OK, 760f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS), 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromSeconds(1)); 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BeginTest(5); 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(noamsml): Figure out how to make this test not take ~64-~2048 (depending 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// constant values) seconds and re-enable it 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(PrinterJobHandlerTest, DISABLED_CompleteFailureTest) { 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), 772f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(1), net::HTTP_OK, 773f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), 775f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(1), net::HTTP_OK, 776f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), 778f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JobListResponse(1), net::HTTP_OK, 779f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 7800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) factory_.SetFakeResponse(ErrorURI(1), StatusResponse(1, "ERROR"), 781f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::HTTP_OK, net::URLRequestStatus::SUCCESS); 7820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) factory_.SetFakeResponse(TicketURI(1), std::string(), 783f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::HTTP_INTERNAL_SERVER_ERROR, 784f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestStatus::FAILED); 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(url_callback_, 7874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(1)); 7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(url_callback_, 7914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnRequestCreate(JobListURI(kJobFetchReasonFailure), _)) 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(1)); 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(url_callback_, 7954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnRequestCreate(JobListURI(kJobFetchReasonRetry), _)) 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(1)); 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(url_callback_, OnRequestCreate(ErrorURI(1), _)) 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(Exactly(1)) 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillOnce(InvokeWithoutArgs( 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, &PrinterJobHandlerTest::MakeJobFetchReturnNoJobs)); 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(url_callback_, OnRequestCreate(TicketURI(1), _)) 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AtLeast(kNumRetriesBeforeAbandonJob)); 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BeginTest(70); 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cloud_print 810