| OLD | NEW | 
|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "base/files/file_path.h" | 5 #include "base/files/file_path.h" | 
| 6 #include "base/md5.h" | 6 #include "base/md5.h" | 
| 7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" | 
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" | 
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" | 
| 10 #include "base/message_loop/message_loop_proxy.h" | 10 #include "base/message_loop/message_loop_proxy.h" | 
| 11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" | 
| 12 #include "chrome/common/cloud_print/cloud_print_constants.h" | 12 #include "chrome/common/cloud_print/cloud_print_constants.h" | 
| 13 #include "chrome/service/cloud_print/cloud_print_helpers.h" | 13 #include "chrome/service/cloud_print/cloud_print_helpers.h" | 
| 14 #include "chrome/service/cloud_print/cloud_print_token_store.h" | 14 #include "chrome/service/cloud_print/cloud_print_token_store.h" | 
| 15 #include "chrome/service/cloud_print/print_system.h" | 15 #include "chrome/service/cloud_print/print_system.h" | 
| 16 #include "chrome/service/cloud_print/printer_job_handler.h" | 16 #include "chrome/service/cloud_print/printer_job_handler.h" | 
| 17 #include "net/http/http_response_headers.h" | 17 #include "net/http/http_response_headers.h" | 
| 18 #include "net/url_request/test_url_fetcher_factory.h" | 18 #include "net/url_request/test_url_fetcher_factory.h" | 
| 19 #include "net/url_request/url_request_test_util.h" | 19 #include "net/url_request/url_request_test_util.h" | 
| 20 #include "printing/backend/print_backend.h" | 20 #include "printing/backend/print_backend.h" | 
| 21 #include "testing/gmock/include/gmock/gmock.h" | 21 #include "testing/gmock/include/gmock/gmock.h" | 
| 22 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" | 
| 23 | 23 | 
| 24 using ::testing::AtLeast; | 24 using ::testing::AtLeast; | 
|  | 25 using ::testing::DoAll; | 
| 25 using ::testing::Exactly; | 26 using ::testing::Exactly; | 
| 26 using ::testing::Sequence; | 27 using ::testing::Invoke; | 
|  | 28 using ::testing::InvokeWithoutArgs; | 
|  | 29 using ::testing::NiceMock; | 
| 27 using ::testing::Return; | 30 using ::testing::Return; | 
| 28 using ::testing::SaveArg; | 31 using ::testing::SaveArg; | 
| 29 using ::testing::DoAll; | 32 using ::testing::Sequence; | 
|  | 33 using ::testing::SetArgPointee; | 
|  | 34 using ::testing::StrictMock; | 
| 30 using ::testing::_; | 35 using ::testing::_; | 
| 31 using ::testing::NiceMock; |  | 
| 32 using ::testing::StrictMock; |  | 
| 33 using ::testing::Invoke; |  | 
| 34 using ::testing::SetArgPointee; |  | 
| 35 using ::testing::InvokeWithoutArgs; |  | 
| 36 | 36 | 
| 37 namespace cloud_print { | 37 namespace cloud_print { | 
| 38 | 38 | 
| 39 namespace { | 39 namespace { | 
| 40 | 40 | 
| 41 using base::StringPrintf; | 41 using base::StringPrintf; | 
| 42 | 42 | 
| 43 const char kExampleCloudPrintServerURL[] = "https://www.google.com/cloudprint/"; | 43 const char kExampleCloudPrintServerURL[] = "https://www.google.com/cloudprint/"; | 
| 44 | 44 | 
| 45 const char kExamplePrintTicket[] = "{\"MediaType\":\"plain\"," | 45 const char kExamplePrintTicket[] = "{\"MediaType\":\"plain\"," | 
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 196 std::string JobListResponse(int num_jobs) { | 196 std::string JobListResponse(int num_jobs) { | 
| 197   std::string job_objects; | 197   std::string job_objects; | 
| 198   for (int i = 0; i < num_jobs; i++) { | 198   for (int i = 0; i < num_jobs; i++) { | 
| 199     job_objects = job_objects + StringPrintf(kExampleJobObject, i+1, i+1, i+1, | 199     job_objects = job_objects + StringPrintf(kExampleJobObject, i+1, i+1, i+1, | 
| 200                                              i+1); | 200                                              i+1); | 
| 201     if (i != num_jobs-1) job_objects = job_objects + ","; | 201     if (i != num_jobs-1) job_objects = job_objects + ","; | 
| 202   } | 202   } | 
| 203   return StringPrintf(kExampleJobListResponse, job_objects.c_str()); | 203   return StringPrintf(kExampleJobListResponse, job_objects.c_str()); | 
| 204 } | 204 } | 
| 205 | 205 | 
| 206 std::string JobListURI(const char* reason) { | 206 GURL JobListURI(const char* reason) { | 
| 207   return StringPrintf(kExamplePrinterJobListURI, reason); | 207   return GURL(StringPrintf(kExamplePrinterJobListURI, reason)); | 
| 208 } | 208 } | 
| 209 | 209 | 
| 210 std::string JobID(int job_num) { | 210 std::string JobID(int job_num) { | 
| 211   return StringPrintf(kExampleJobID, job_num); | 211   return StringPrintf(kExampleJobID, job_num); | 
| 212 } | 212 } | 
| 213 | 213 | 
| 214 std::string DoneURI(int job_num) { | 214 GURL DoneURI(int job_num) { | 
| 215   return StringPrintf(kExampleUpdateDoneURI, job_num); | 215   return GURL(StringPrintf(kExampleUpdateDoneURI, job_num)); | 
| 216 } | 216 } | 
| 217 | 217 | 
| 218 std::string ErrorURI(int job_num) { | 218 GURL ErrorURI(int job_num) { | 
| 219   return StringPrintf(kExampleUpdateErrorURI, job_num); | 219   return GURL(StringPrintf(kExampleUpdateErrorURI, job_num)); | 
| 220 } | 220 } | 
| 221 | 221 | 
| 222 std::string TicketURI(int job_num) { | 222 GURL TicketURI(int job_num) { | 
| 223   return StringPrintf(kExamplePrintTicketURI, job_num); | 223   return GURL(StringPrintf(kExamplePrintTicketURI, job_num)); | 
| 224 } | 224 } | 
| 225 | 225 | 
| 226 std::string DownloadURI(int job_num) { | 226 GURL DownloadURI(int job_num) { | 
| 227   return StringPrintf(kExamplePrintDownloadURI, job_num); | 227   return GURL(StringPrintf(kExamplePrintDownloadURI, job_num)); | 
| 228 } | 228 } | 
| 229 | 229 | 
| 230 // converts to string for consistency | 230 GURL InProgressURI(int job_num) { | 
| 231 std::string InProgressURI(int job_num) { |  | 
| 232   return GetUrlForJobStatusUpdate(GURL(kExampleCloudPrintServerURL), | 231   return GetUrlForJobStatusUpdate(GURL(kExampleCloudPrintServerURL), | 
| 233                                   StringPrintf(kExampleJobID, job_num), | 232                                   StringPrintf(kExampleJobID, job_num), | 
| 234                                   PRINT_JOB_STATUS_IN_PROGRESS, | 233                                   PRINT_JOB_STATUS_IN_PROGRESS, | 
| 235                                   0).spec(); | 234                                   0); | 
| 236 } | 235 } | 
| 237 | 236 | 
| 238 std::string StatusResponse(int job_num, const char* status_string) { | 237 std::string StatusResponse(int job_num, const char* status_string) { | 
| 239   return StringPrintf(kExampleControlResponse, | 238   return StringPrintf(kExampleControlResponse, | 
| 240                       status_string, | 239                       status_string, | 
| 241                       job_num, | 240                       job_num, | 
| 242                       status_string); | 241                       status_string); | 
| 243 } | 242 } | 
| 244 | 243 | 
| 245 }  // namespace | 244 }  // namespace | 
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 550 | 549 | 
| 551   factory_.SetFakeResponse(DoneURI(job_num), | 550   factory_.SetFakeResponse(DoneURI(job_num), | 
| 552                            StatusResponse(job_num, "DONE"), | 551                            StatusResponse(job_num, "DONE"), | 
| 553                            true); | 552                            true); | 
| 554   factory_.SetFakeResponse(InProgressURI(job_num), | 553   factory_.SetFakeResponse(InProgressURI(job_num), | 
| 555                            StatusResponse(job_num, "IN_PROGRESS"), | 554                            StatusResponse(job_num, "IN_PROGRESS"), | 
| 556                            true); | 555                            true); | 
| 557 | 556 | 
| 558   // The times requirement is relaxed for the ticket URI | 557   // The times requirement is relaxed for the ticket URI | 
| 559   // in order to accommodate TicketDownloadFailureTest | 558   // in order to accommodate TicketDownloadFailureTest | 
| 560   EXPECT_CALL(url_callback_, OnRequestCreate( | 559   EXPECT_CALL(url_callback_, OnRequestCreate(TicketURI(job_num), _)) | 
| 561       GURL(TicketURI(job_num)), _)) |  | 
| 562       .Times(AtLeast(1)); | 560       .Times(AtLeast(1)); | 
| 563 | 561 | 
| 564   EXPECT_CALL(url_callback_, OnRequestCreate(GURL(DownloadURI(job_num)), _)) | 562   EXPECT_CALL(url_callback_, OnRequestCreate(DownloadURI(job_num), _)) | 
| 565       .Times(Exactly(1)) | 563       .Times(Exactly(1)) | 
| 566       .WillOnce(Invoke(this, &PrinterJobHandlerTest::AddMimeHeader)); | 564       .WillOnce(Invoke(this, &PrinterJobHandlerTest::AddMimeHeader)); | 
| 567 | 565 | 
| 568   EXPECT_CALL(url_callback_, OnRequestCreate(GURL(InProgressURI(job_num)), _)) | 566   EXPECT_CALL(url_callback_, OnRequestCreate(InProgressURI(job_num), _)) | 
| 569       .Times(Exactly(1)); | 567       .Times(Exactly(1)); | 
| 570 | 568 | 
| 571   EXPECT_CALL(url_callback_, OnRequestCreate(GURL(DoneURI(job_num)), _)) | 569   EXPECT_CALL(url_callback_, OnRequestCreate(DoneURI(job_num), _)) | 
| 572       .Times(Exactly(1)); | 570       .Times(Exactly(1)); | 
| 573 | 571 | 
| 574   EXPECT_CALL(print_system_->JobSpooler(), | 572   EXPECT_CALL(print_system_->JobSpooler(), | 
| 575               Spool(kExamplePrintTicket, _, _, _, _, _, _)) | 573               Spool(kExamplePrintTicket, _, _, _, _, _, _)) | 
| 576       .Times(Exactly(1)) | 574       .Times(Exactly(1)) | 
| 577       .WillOnce(InvokeWithoutArgs(this, | 575       .WillOnce(InvokeWithoutArgs(this, | 
| 578                                   &PrinterJobHandlerTest::PostSpoolSuccess)); | 576                                   &PrinterJobHandlerTest::PostSpoolSuccess)); | 
| 579 } | 577 } | 
| 580 | 578 | 
| 581 void PrinterJobHandlerTest::BeginTest(int timeout_seconds) { | 579 void PrinterJobHandlerTest::BeginTest(int timeout_seconds) { | 
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 656 // This test simulates an end-to-end printing of a document | 654 // This test simulates an end-to-end printing of a document | 
| 657 // but tests only non-failure cases. | 655 // but tests only non-failure cases. | 
| 658 // Disabled - http://crbug.com/184245 | 656 // Disabled - http://crbug.com/184245 | 
| 659 TEST_F(PrinterJobHandlerTest, DISABLED_HappyPathTest) { | 657 TEST_F(PrinterJobHandlerTest, DISABLED_HappyPathTest) { | 
| 660   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 658   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 
| 661                            JobListResponse(1), true); | 659                            JobListResponse(1), true); | 
| 662   factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), | 660   factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), | 
| 663                            JobListResponse(0), true); | 661                            JobListResponse(0), true); | 
| 664 | 662 | 
| 665   EXPECT_CALL(url_callback_, | 663   EXPECT_CALL(url_callback_, | 
| 666               OnRequestCreate(GURL(JobListURI(kJobFetchReasonStartup)), _)) | 664               OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) | 
| 667       .Times(Exactly(1)); | 665       .Times(Exactly(1)); | 
| 668   EXPECT_CALL(url_callback_, | 666   EXPECT_CALL(url_callback_, | 
| 669               OnRequestCreate(GURL(JobListURI(kJobFetchReasonQueryMore)), _)) | 667               OnRequestCreate(JobListURI(kJobFetchReasonQueryMore), _)) | 
| 670       .Times(Exactly(1)); | 668       .Times(Exactly(1)); | 
| 671 | 669 | 
| 672   SetUpJobSuccessTest(1); | 670   SetUpJobSuccessTest(1); | 
| 673   BeginTest(20); | 671   BeginTest(20); | 
| 674 } | 672 } | 
| 675 | 673 | 
| 676 TEST_F(PrinterJobHandlerTest, TicketDownloadFailureTest) { | 674 TEST_F(PrinterJobHandlerTest, TicketDownloadFailureTest) { | 
| 677   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 675   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 
| 678                            JobListResponse(2), true); | 676                            JobListResponse(2), true); | 
| 679   factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), | 677   factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), | 
| 680                            JobListResponse(2), true); | 678                            JobListResponse(2), true); | 
| 681   factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), | 679   factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), | 
| 682                            JobListResponse(0), true); | 680                            JobListResponse(0), true); | 
| 683   factory_.SetFakeResponse(TicketURI(1), std::string(), false); | 681   factory_.SetFakeResponse(TicketURI(1), std::string(), false); | 
| 684 | 682 | 
| 685   EXPECT_CALL(url_callback_, OnRequestCreate(GURL(TicketURI(1)), _)) | 683   EXPECT_CALL(url_callback_, OnRequestCreate(TicketURI(1), _)) | 
| 686       .Times(AtLeast(1)); | 684       .Times(AtLeast(1)); | 
| 687 | 685 | 
| 688   EXPECT_CALL(url_callback_, | 686   EXPECT_CALL(url_callback_, | 
| 689               OnRequestCreate(GURL(JobListURI(kJobFetchReasonStartup)), _)) | 687               OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) | 
| 690       .Times(AtLeast(1)); | 688       .Times(AtLeast(1)); | 
| 691 | 689 | 
| 692   EXPECT_CALL(url_callback_, | 690   EXPECT_CALL(url_callback_, | 
| 693               OnRequestCreate(GURL(JobListURI(kJobFetchReasonQueryMore)), _)) | 691               OnRequestCreate(JobListURI(kJobFetchReasonQueryMore), _)) | 
| 694       .Times(AtLeast(1)); | 692       .Times(AtLeast(1)); | 
| 695 | 693 | 
| 696   EXPECT_CALL(url_callback_, | 694   EXPECT_CALL(url_callback_, | 
| 697               OnRequestCreate(GURL(JobListURI(kJobFetchReasonFailure)), _)) | 695               OnRequestCreate(JobListURI(kJobFetchReasonFailure), _)) | 
| 698       .Times(AtLeast(1)); | 696       .Times(AtLeast(1)); | 
| 699 | 697 | 
| 700   SetUpJobSuccessTest(2); | 698   SetUpJobSuccessTest(2); | 
| 701   BeginTest(20); | 699   BeginTest(20); | 
| 702 } | 700 } | 
| 703 | 701 | 
| 704 // TODO(noamsml): Figure out how to make this test not take 1 second and | 702 // TODO(noamsml): Figure out how to make this test not take 1 second and | 
| 705 // re-enable it | 703 // re-enable it | 
| 706 TEST_F(PrinterJobHandlerTest, DISABLED_ManyFailureTest) { | 704 TEST_F(PrinterJobHandlerTest, DISABLED_ManyFailureTest) { | 
| 707   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 705   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 
| 708                            JobListResponse(1), true); | 706                            JobListResponse(1), true); | 
| 709   factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), | 707   factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), | 
| 710                            JobListResponse(1), true); | 708                            JobListResponse(1), true); | 
| 711   factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), | 709   factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), | 
| 712                            JobListResponse(1), true); | 710                            JobListResponse(1), true); | 
| 713   factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), | 711   factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), | 
| 714                            JobListResponse(0), true); | 712                            JobListResponse(0), true); | 
| 715 | 713 | 
| 716   EXPECT_CALL(url_callback_, | 714   EXPECT_CALL(url_callback_, | 
| 717               OnRequestCreate(GURL(JobListURI(kJobFetchReasonStartup)), _)) | 715               OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) | 
| 718       .Times(AtLeast(1)); | 716       .Times(AtLeast(1)); | 
| 719 | 717 | 
| 720   EXPECT_CALL(url_callback_, | 718   EXPECT_CALL(url_callback_, | 
| 721               OnRequestCreate(GURL(JobListURI(kJobFetchReasonQueryMore)), _)) | 719               OnRequestCreate(JobListURI(kJobFetchReasonQueryMore), _)) | 
| 722       .Times(AtLeast(1)); | 720       .Times(AtLeast(1)); | 
| 723 | 721 | 
| 724   EXPECT_CALL(url_callback_, | 722   EXPECT_CALL(url_callback_, | 
| 725               OnRequestCreate(GURL(JobListURI(kJobFetchReasonFailure)), _)) | 723               OnRequestCreate(JobListURI(kJobFetchReasonFailure), _)) | 
| 726       .Times(AtLeast(1)); | 724       .Times(AtLeast(1)); | 
| 727 | 725 | 
| 728   EXPECT_CALL(url_callback_, | 726   EXPECT_CALL(url_callback_, | 
| 729               OnRequestCreate(GURL(JobListURI(kJobFetchReasonRetry)), _)) | 727               OnRequestCreate(JobListURI(kJobFetchReasonRetry), _)) | 
| 730       .Times(AtLeast(1)); | 728       .Times(AtLeast(1)); | 
| 731 | 729 | 
| 732   SetUpJobSuccessTest(1); | 730   SetUpJobSuccessTest(1); | 
| 733 | 731 | 
| 734   factory_.SetFakeResponse(TicketURI(1), std::string(), false); | 732   factory_.SetFakeResponse(TicketURI(1), std::string(), false); | 
| 735 | 733 | 
| 736   loop_.PostDelayedTask(FROM_HERE, | 734   loop_.PostDelayedTask(FROM_HERE, | 
| 737                         base::Bind(&net::FakeURLFetcherFactory::SetFakeResponse, | 735                         base::Bind(&net::FakeURLFetcherFactory::SetFakeResponse, | 
| 738                                    base::Unretained(&factory_), | 736                                    base::Unretained(&factory_), | 
| 739                                    TicketURI(1), | 737                                    TicketURI(1), | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 752   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 750   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 
| 753                            JobListResponse(1), true); | 751                            JobListResponse(1), true); | 
| 754   factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), | 752   factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), | 
| 755                            JobListResponse(1), true); | 753                            JobListResponse(1), true); | 
| 756   factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), | 754   factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), | 
| 757                            JobListResponse(1), true); | 755                            JobListResponse(1), true); | 
| 758   factory_.SetFakeResponse(ErrorURI(1), StatusResponse(1, "ERROR"), true); | 756   factory_.SetFakeResponse(ErrorURI(1), StatusResponse(1, "ERROR"), true); | 
| 759   factory_.SetFakeResponse(TicketURI(1), std::string(), false); | 757   factory_.SetFakeResponse(TicketURI(1), std::string(), false); | 
| 760 | 758 | 
| 761   EXPECT_CALL(url_callback_, | 759   EXPECT_CALL(url_callback_, | 
| 762               OnRequestCreate(GURL(JobListURI(kJobFetchReasonStartup)), _)) | 760               OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) | 
| 763       .Times(AtLeast(1)); | 761       .Times(AtLeast(1)); | 
| 764 | 762 | 
| 765   EXPECT_CALL(url_callback_, | 763   EXPECT_CALL(url_callback_, | 
| 766               OnRequestCreate(GURL(JobListURI(kJobFetchReasonFailure)), _)) | 764               OnRequestCreate(JobListURI(kJobFetchReasonFailure), _)) | 
| 767       .Times(AtLeast(1)); | 765       .Times(AtLeast(1)); | 
| 768 | 766 | 
| 769   EXPECT_CALL(url_callback_, | 767   EXPECT_CALL(url_callback_, | 
| 770               OnRequestCreate(GURL(JobListURI(kJobFetchReasonRetry)), _)) | 768               OnRequestCreate(JobListURI(kJobFetchReasonRetry), _)) | 
| 771       .Times(AtLeast(1)); | 769       .Times(AtLeast(1)); | 
| 772 | 770 | 
| 773   EXPECT_CALL(url_callback_, OnRequestCreate(GURL(ErrorURI(1)), _)) | 771   EXPECT_CALL(url_callback_, OnRequestCreate(ErrorURI(1), _)) | 
| 774       .Times(Exactly(1)) | 772       .Times(Exactly(1)) | 
| 775       .WillOnce(InvokeWithoutArgs( | 773       .WillOnce(InvokeWithoutArgs( | 
| 776           this, &PrinterJobHandlerTest::MakeJobFetchReturnNoJobs)); | 774           this, &PrinterJobHandlerTest::MakeJobFetchReturnNoJobs)); | 
| 777 | 775 | 
| 778   EXPECT_CALL(url_callback_, OnRequestCreate(GURL(TicketURI(1)), _)) | 776   EXPECT_CALL(url_callback_, OnRequestCreate(TicketURI(1), _)) | 
| 779       .Times(AtLeast(kNumRetriesBeforeAbandonJob)); | 777       .Times(AtLeast(kNumRetriesBeforeAbandonJob)); | 
| 780 | 778 | 
| 781   BeginTest(70); | 779   BeginTest(70); | 
| 782 } | 780 } | 
| 783 | 781 | 
| 784 }  // namespace cloud_print | 782 }  // namespace cloud_print | 
| OLD | NEW | 
|---|