| 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).spec(); | 233                                   PRINT_JOB_STATUS_IN_PROGRESS); | 
| 235 } | 234 } | 
| 236 | 235 | 
| 237 std::string StatusResponse(int job_num, const char* status_string) { | 236 std::string StatusResponse(int job_num, const char* status_string) { | 
| 238   return StringPrintf(kExampleControlResponse, | 237   return StringPrintf(kExampleControlResponse, | 
| 239                       status_string, | 238                       status_string, | 
| 240                       job_num, | 239                       job_num, | 
| 241                       status_string); | 240                       status_string); | 
| 242 } | 241 } | 
| 243 | 242 | 
| 244 }  // namespace | 243 }  // namespace | 
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 547 | 546 | 
| 548   factory_.SetFakeResponse(DoneURI(job_num), | 547   factory_.SetFakeResponse(DoneURI(job_num), | 
| 549                            StatusResponse(job_num, "DONE"), | 548                            StatusResponse(job_num, "DONE"), | 
| 550                            true); | 549                            true); | 
| 551   factory_.SetFakeResponse(InProgressURI(job_num), | 550   factory_.SetFakeResponse(InProgressURI(job_num), | 
| 552                            StatusResponse(job_num, "IN_PROGRESS"), | 551                            StatusResponse(job_num, "IN_PROGRESS"), | 
| 553                            true); | 552                            true); | 
| 554 | 553 | 
| 555   // The times requirement is relaxed for the ticket URI | 554   // The times requirement is relaxed for the ticket URI | 
| 556   // in order to accommodate TicketDownloadFailureTest | 555   // in order to accommodate TicketDownloadFailureTest | 
| 557   EXPECT_CALL(url_callback_, OnRequestCreate( | 556   EXPECT_CALL(url_callback_, OnRequestCreate(TicketURI(job_num), _)) | 
| 558       GURL(TicketURI(job_num)), _)) |  | 
| 559       .Times(AtLeast(1)); | 557       .Times(AtLeast(1)); | 
| 560 | 558 | 
| 561   EXPECT_CALL(url_callback_, OnRequestCreate(GURL(DownloadURI(job_num)), _)) | 559   EXPECT_CALL(url_callback_, OnRequestCreate(DownloadURI(job_num), _)) | 
| 562       .Times(Exactly(1)) | 560       .Times(Exactly(1)) | 
| 563       .WillOnce(Invoke(this, &PrinterJobHandlerTest::AddMimeHeader)); | 561       .WillOnce(Invoke(this, &PrinterJobHandlerTest::AddMimeHeader)); | 
| 564 | 562 | 
| 565   EXPECT_CALL(url_callback_, OnRequestCreate(GURL(InProgressURI(job_num)), _)) | 563   EXPECT_CALL(url_callback_, OnRequestCreate(InProgressURI(job_num), _)) | 
| 566       .Times(Exactly(1)); | 564       .Times(Exactly(1)); | 
| 567 | 565 | 
| 568   EXPECT_CALL(url_callback_, OnRequestCreate(GURL(DoneURI(job_num)), _)) | 566   EXPECT_CALL(url_callback_, OnRequestCreate(DoneURI(job_num), _)) | 
| 569       .Times(Exactly(1)); | 567       .Times(Exactly(1)); | 
| 570 | 568 | 
| 571   EXPECT_CALL(print_system_->JobSpooler(), | 569   EXPECT_CALL(print_system_->JobSpooler(), | 
| 572               Spool(kExamplePrintTicket, _, _, _, _, _, _)) | 570               Spool(kExamplePrintTicket, _, _, _, _, _, _)) | 
| 573       .Times(Exactly(1)) | 571       .Times(Exactly(1)) | 
| 574       .WillOnce(InvokeWithoutArgs(this, | 572       .WillOnce(InvokeWithoutArgs(this, | 
| 575                                   &PrinterJobHandlerTest::PostSpoolSuccess)); | 573                                   &PrinterJobHandlerTest::PostSpoolSuccess)); | 
| 576 } | 574 } | 
| 577 | 575 | 
| 578 void PrinterJobHandlerTest::BeginTest(int timeout_seconds) { | 576 void PrinterJobHandlerTest::BeginTest(int timeout_seconds) { | 
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 653 // This test simulates an end-to-end printing of a document | 651 // This test simulates an end-to-end printing of a document | 
| 654 // but tests only non-failure cases. | 652 // but tests only non-failure cases. | 
| 655 // Disabled - http://crbug.com/184245 | 653 // Disabled - http://crbug.com/184245 | 
| 656 TEST_F(PrinterJobHandlerTest, DISABLED_HappyPathTest) { | 654 TEST_F(PrinterJobHandlerTest, DISABLED_HappyPathTest) { | 
| 657   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 655   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 
| 658                            JobListResponse(1), true); | 656                            JobListResponse(1), true); | 
| 659   factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), | 657   factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), | 
| 660                            JobListResponse(0), true); | 658                            JobListResponse(0), true); | 
| 661 | 659 | 
| 662   EXPECT_CALL(url_callback_, | 660   EXPECT_CALL(url_callback_, | 
| 663               OnRequestCreate(GURL(JobListURI(kJobFetchReasonStartup)), _)) | 661               OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) | 
| 664       .Times(Exactly(1)); | 662       .Times(Exactly(1)); | 
| 665   EXPECT_CALL(url_callback_, | 663   EXPECT_CALL(url_callback_, | 
| 666               OnRequestCreate(GURL(JobListURI(kJobFetchReasonQueryMore)), _)) | 664               OnRequestCreate(JobListURI(kJobFetchReasonQueryMore), _)) | 
| 667       .Times(Exactly(1)); | 665       .Times(Exactly(1)); | 
| 668 | 666 | 
| 669   SetUpJobSuccessTest(1); | 667   SetUpJobSuccessTest(1); | 
| 670   BeginTest(20); | 668   BeginTest(20); | 
| 671 } | 669 } | 
| 672 | 670 | 
| 673 TEST_F(PrinterJobHandlerTest, TicketDownloadFailureTest) { | 671 TEST_F(PrinterJobHandlerTest, TicketDownloadFailureTest) { | 
| 674   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 672   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 
| 675                            JobListResponse(2), true); | 673                            JobListResponse(2), true); | 
| 676   factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), | 674   factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), | 
| 677                            JobListResponse(2), true); | 675                            JobListResponse(2), true); | 
| 678   factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), | 676   factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), | 
| 679                            JobListResponse(0), true); | 677                            JobListResponse(0), true); | 
| 680   factory_.SetFakeResponse(TicketURI(1), std::string(), false); | 678   factory_.SetFakeResponse(TicketURI(1), std::string(), false); | 
| 681 | 679 | 
| 682   EXPECT_CALL(url_callback_, OnRequestCreate(GURL(TicketURI(1)), _)) | 680   EXPECT_CALL(url_callback_, OnRequestCreate(TicketURI(1), _)) | 
| 683       .Times(AtLeast(1)); | 681       .Times(AtLeast(1)); | 
| 684 | 682 | 
| 685   EXPECT_CALL(url_callback_, | 683   EXPECT_CALL(url_callback_, | 
| 686               OnRequestCreate(GURL(JobListURI(kJobFetchReasonStartup)), _)) | 684               OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) | 
| 687       .Times(AtLeast(1)); | 685       .Times(AtLeast(1)); | 
| 688 | 686 | 
| 689   EXPECT_CALL(url_callback_, | 687   EXPECT_CALL(url_callback_, | 
| 690               OnRequestCreate(GURL(JobListURI(kJobFetchReasonQueryMore)), _)) | 688               OnRequestCreate(JobListURI(kJobFetchReasonQueryMore), _)) | 
| 691       .Times(AtLeast(1)); | 689       .Times(AtLeast(1)); | 
| 692 | 690 | 
| 693   EXPECT_CALL(url_callback_, | 691   EXPECT_CALL(url_callback_, | 
| 694               OnRequestCreate(GURL(JobListURI(kJobFetchReasonFailure)), _)) | 692               OnRequestCreate(JobListURI(kJobFetchReasonFailure), _)) | 
| 695       .Times(AtLeast(1)); | 693       .Times(AtLeast(1)); | 
| 696 | 694 | 
| 697   SetUpJobSuccessTest(2); | 695   SetUpJobSuccessTest(2); | 
| 698   BeginTest(20); | 696   BeginTest(20); | 
| 699 } | 697 } | 
| 700 | 698 | 
| 701 // TODO(noamsml): Figure out how to make this test not take 1 second and | 699 // TODO(noamsml): Figure out how to make this test not take 1 second and | 
| 702 // re-enable it | 700 // re-enable it | 
| 703 TEST_F(PrinterJobHandlerTest, DISABLED_ManyFailureTest) { | 701 TEST_F(PrinterJobHandlerTest, DISABLED_ManyFailureTest) { | 
| 704   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 702   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 
| 705                            JobListResponse(1), true); | 703                            JobListResponse(1), true); | 
| 706   factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), | 704   factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), | 
| 707                            JobListResponse(1), true); | 705                            JobListResponse(1), true); | 
| 708   factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), | 706   factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), | 
| 709                            JobListResponse(1), true); | 707                            JobListResponse(1), true); | 
| 710   factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), | 708   factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), | 
| 711                            JobListResponse(0), true); | 709                            JobListResponse(0), true); | 
| 712 | 710 | 
| 713   EXPECT_CALL(url_callback_, | 711   EXPECT_CALL(url_callback_, | 
| 714               OnRequestCreate(GURL(JobListURI(kJobFetchReasonStartup)), _)) | 712               OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) | 
| 715       .Times(AtLeast(1)); | 713       .Times(AtLeast(1)); | 
| 716 | 714 | 
| 717   EXPECT_CALL(url_callback_, | 715   EXPECT_CALL(url_callback_, | 
| 718               OnRequestCreate(GURL(JobListURI(kJobFetchReasonQueryMore)), _)) | 716               OnRequestCreate(JobListURI(kJobFetchReasonQueryMore), _)) | 
| 719       .Times(AtLeast(1)); | 717       .Times(AtLeast(1)); | 
| 720 | 718 | 
| 721   EXPECT_CALL(url_callback_, | 719   EXPECT_CALL(url_callback_, | 
| 722               OnRequestCreate(GURL(JobListURI(kJobFetchReasonFailure)), _)) | 720               OnRequestCreate(JobListURI(kJobFetchReasonFailure), _)) | 
| 723       .Times(AtLeast(1)); | 721       .Times(AtLeast(1)); | 
| 724 | 722 | 
| 725   EXPECT_CALL(url_callback_, | 723   EXPECT_CALL(url_callback_, | 
| 726               OnRequestCreate(GURL(JobListURI(kJobFetchReasonRetry)), _)) | 724               OnRequestCreate(JobListURI(kJobFetchReasonRetry), _)) | 
| 727       .Times(AtLeast(1)); | 725       .Times(AtLeast(1)); | 
| 728 | 726 | 
| 729   SetUpJobSuccessTest(1); | 727   SetUpJobSuccessTest(1); | 
| 730 | 728 | 
| 731   factory_.SetFakeResponse(TicketURI(1), std::string(), false); | 729   factory_.SetFakeResponse(TicketURI(1), std::string(), false); | 
| 732 | 730 | 
| 733   loop_.PostDelayedTask(FROM_HERE, | 731   loop_.PostDelayedTask(FROM_HERE, | 
| 734                         base::Bind(&net::FakeURLFetcherFactory::SetFakeResponse, | 732                         base::Bind(&net::FakeURLFetcherFactory::SetFakeResponse, | 
| 735                                    base::Unretained(&factory_), | 733                                    base::Unretained(&factory_), | 
| 736                                    TicketURI(1), | 734                                    TicketURI(1), | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 749   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 747   factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), | 
| 750                            JobListResponse(1), true); | 748                            JobListResponse(1), true); | 
| 751   factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), | 749   factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), | 
| 752                            JobListResponse(1), true); | 750                            JobListResponse(1), true); | 
| 753   factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), | 751   factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), | 
| 754                            JobListResponse(1), true); | 752                            JobListResponse(1), true); | 
| 755   factory_.SetFakeResponse(ErrorURI(1), StatusResponse(1, "ERROR"), true); | 753   factory_.SetFakeResponse(ErrorURI(1), StatusResponse(1, "ERROR"), true); | 
| 756   factory_.SetFakeResponse(TicketURI(1), std::string(), false); | 754   factory_.SetFakeResponse(TicketURI(1), std::string(), false); | 
| 757 | 755 | 
| 758   EXPECT_CALL(url_callback_, | 756   EXPECT_CALL(url_callback_, | 
| 759               OnRequestCreate(GURL(JobListURI(kJobFetchReasonStartup)), _)) | 757               OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) | 
| 760       .Times(AtLeast(1)); | 758       .Times(AtLeast(1)); | 
| 761 | 759 | 
| 762   EXPECT_CALL(url_callback_, | 760   EXPECT_CALL(url_callback_, | 
| 763               OnRequestCreate(GURL(JobListURI(kJobFetchReasonFailure)), _)) | 761               OnRequestCreate(JobListURI(kJobFetchReasonFailure), _)) | 
| 764       .Times(AtLeast(1)); | 762       .Times(AtLeast(1)); | 
| 765 | 763 | 
| 766   EXPECT_CALL(url_callback_, | 764   EXPECT_CALL(url_callback_, | 
| 767               OnRequestCreate(GURL(JobListURI(kJobFetchReasonRetry)), _)) | 765               OnRequestCreate(JobListURI(kJobFetchReasonRetry), _)) | 
| 768       .Times(AtLeast(1)); | 766       .Times(AtLeast(1)); | 
| 769 | 767 | 
| 770   EXPECT_CALL(url_callback_, OnRequestCreate(GURL(ErrorURI(1)), _)) | 768   EXPECT_CALL(url_callback_, OnRequestCreate(ErrorURI(1), _)) | 
| 771       .Times(Exactly(1)) | 769       .Times(Exactly(1)) | 
| 772       .WillOnce(InvokeWithoutArgs( | 770       .WillOnce(InvokeWithoutArgs( | 
| 773           this, &PrinterJobHandlerTest::MakeJobFetchReturnNoJobs)); | 771           this, &PrinterJobHandlerTest::MakeJobFetchReturnNoJobs)); | 
| 774 | 772 | 
| 775   EXPECT_CALL(url_callback_, OnRequestCreate(GURL(TicketURI(1)), _)) | 773   EXPECT_CALL(url_callback_, OnRequestCreate(TicketURI(1), _)) | 
| 776       .Times(AtLeast(kNumRetriesBeforeAbandonJob)); | 774       .Times(AtLeast(kNumRetriesBeforeAbandonJob)); | 
| 777 | 775 | 
| 778   BeginTest(70); | 776   BeginTest(70); | 
| 779 } | 777 } | 
| 780 | 778 | 
| 781 }  // namespace cloud_print | 779 }  // namespace cloud_print | 
| OLD | NEW | 
|---|