| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/service/cloud_print/cloud_print_proxy_backend.h" | 5 #include "chrome/service/cloud_print/cloud_print_proxy_backend.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 bool succeeded); | 73 bool succeeded); |
| 74 | 74 |
| 75 virtual void OnRequestAuthError(); | 75 virtual void OnRequestAuthError(); |
| 76 | 76 |
| 77 // cloud_print::PrintServerWatcherDelegate implementation | 77 // cloud_print::PrintServerWatcherDelegate implementation |
| 78 virtual void OnPrinterAdded(); | 78 virtual void OnPrinterAdded(); |
| 79 // PrinterJobHandler::Delegate implementation | 79 // PrinterJobHandler::Delegate implementation |
| 80 virtual void OnPrinterJobHandlerShutdown(PrinterJobHandler* job_handler, | 80 virtual void OnPrinterJobHandlerShutdown(PrinterJobHandler* job_handler, |
| 81 const std::string& printer_id); | 81 const std::string& printer_id); |
| 82 virtual void OnAuthError(); | 82 virtual void OnAuthError(); |
| 83 virtual bool OnPrinterNotFound(const std::string& printer_name); |
| 83 | 84 |
| 84 // notifier::TalkMediator::Delegate implementation. | 85 // notifier::TalkMediator::Delegate implementation. |
| 85 virtual void OnNotificationStateChange( | 86 virtual void OnNotificationStateChange( |
| 86 bool notifications_enabled); | 87 bool notifications_enabled); |
| 87 virtual void OnIncomingNotification( | 88 virtual void OnIncomingNotification( |
| 88 const IncomingNotificationData& notification_data); | 89 const IncomingNotificationData& notification_data); |
| 89 virtual void OnOutgoingNotification(); | 90 virtual void OnOutgoingNotification(); |
| 90 | 91 |
| 91 private: | 92 private: |
| 92 // Prototype for a response handler. | 93 // Prototype for a response handler. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 108 const GURL& url, | 109 const GURL& url, |
| 109 DictionaryValue* json_data, | 110 DictionaryValue* json_data, |
| 110 bool succeeded); | 111 bool succeeded); |
| 111 | 112 |
| 112 CloudPrintURLFetcher::ResponseAction HandleRegisterFailedStatusResponse( | 113 CloudPrintURLFetcher::ResponseAction HandleRegisterFailedStatusResponse( |
| 113 const URLFetcher* source, | 114 const URLFetcher* source, |
| 114 const GURL& url, | 115 const GURL& url, |
| 115 DictionaryValue* json_data, | 116 DictionaryValue* json_data, |
| 116 bool succeeded); | 117 bool succeeded); |
| 117 | 118 |
| 118 CloudPrintURLFetcher::ResponseAction HandlePrintSystemUnavailableResponse( | 119 CloudPrintURLFetcher::ResponseAction HandlePrintSystemUnavailableResponse( |
| 120 const URLFetcher* source, |
| 121 const GURL& url, |
| 122 DictionaryValue* json_data, |
| 123 bool succeeded); |
| 124 |
| 125 CloudPrintURLFetcher::ResponseAction HandleEnumPrintersFailedResponse( |
| 119 const URLFetcher* source, | 126 const URLFetcher* source, |
| 120 const GURL& url, | 127 const GURL& url, |
| 121 DictionaryValue* json_data, | 128 DictionaryValue* json_data, |
| 122 bool succeeded); | 129 bool succeeded); |
| 123 // End response handlers | 130 // End response handlers |
| 124 | 131 |
| 125 // NotifyXXX is how the Core communicates with the frontend across | 132 // NotifyXXX is how the Core communicates with the frontend across |
| 126 // threads. | 133 // threads. |
| 127 void NotifyPrinterListAvailable( | 134 void NotifyPrinterListAvailable( |
| 128 const printing::PrinterList& printer_list); | 135 const printing::PrinterList& printer_list); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 143 // Retrieves the list of registered printers for this user/proxy combination | 150 // Retrieves the list of registered printers for this user/proxy combination |
| 144 // from the cloud print server. | 151 // from the cloud print server. |
| 145 void GetRegisteredPrinters(); | 152 void GetRegisteredPrinters(); |
| 146 // Removes the given printer from the list. Returns false if the printer | 153 // Removes the given printer from the list. Returns false if the printer |
| 147 // did not exist in the list. | 154 // did not exist in the list. |
| 148 bool RemovePrinterFromList(const std::string& printer_name); | 155 bool RemovePrinterFromList(const std::string& printer_name); |
| 149 // Initializes a job handler object for the specified printer. The job | 156 // Initializes a job handler object for the specified printer. The job |
| 150 // handler is responsible for checking for pending print jobs for this | 157 // handler is responsible for checking for pending print jobs for this |
| 151 // printer and print them. | 158 // printer and print them. |
| 152 void InitJobHandlerForPrinter(DictionaryValue* printer_data); | 159 void InitJobHandlerForPrinter(DictionaryValue* printer_data); |
| 153 // Sends a diagnostic message to the cloud print server that the print | 160 // Reports a diagnostic message to the server. |
| 154 // system failed to initialize. | 161 void ReportUserMessage(const std::string& message_id, |
| 155 void ReportPrintSystemUnavailable(const std::string& failure_message); | 162 const std::string& failure_message, |
| 163 ResponseHandler handler); |
| 156 | 164 |
| 157 // Callback method for GetPrinterCapsAndDefaults. | 165 // Callback method for GetPrinterCapsAndDefaults. |
| 158 void OnReceivePrinterCaps( | 166 void OnReceivePrinterCaps( |
| 159 bool succeeded, | 167 bool succeeded, |
| 160 const std::string& printer_name, | 168 const std::string& printer_name, |
| 161 const printing::PrinterCapsAndDefaults& caps_and_defaults); | 169 const printing::PrinterCapsAndDefaults& caps_and_defaults); |
| 162 | 170 |
| 163 void HandlePrinterNotification(const std::string& printer_id); | 171 void HandlePrinterNotification(const std::string& printer_id); |
| 164 void PollForJobs(); | 172 void PollForJobs(); |
| 165 // Schedules a task to poll for jobs. Does nothing if a task is already | 173 // Schedules a task to poll for jobs. Does nothing if a task is already |
| 166 // scheduled. | 174 // scheduled. |
| 167 void ScheduleJobPoll(); | 175 void ScheduleJobPoll(); |
| 168 | 176 |
| 169 // Our parent CloudPrintProxyBackend | 177 // Our parent CloudPrintProxyBackend |
| 170 CloudPrintProxyBackend* backend_; | 178 CloudPrintProxyBackend* backend_; |
| 171 | 179 |
| 172 GURL cloud_print_server_url_; | 180 GURL cloud_print_server_url_; |
| 173 scoped_ptr<DictionaryValue> print_system_settings_; | 181 scoped_ptr<DictionaryValue> print_system_settings_; |
| 174 // Pointer to current print system. | 182 // Pointer to current print system. |
| 175 scoped_refptr<cloud_print::PrintSystem> print_system_; | 183 scoped_refptr<cloud_print::PrintSystem> print_system_; |
| 176 // The list of printers to be registered with the cloud print server. | 184 // The list of printers to be registered with the cloud print server. |
| 177 // To begin with,this list is initialized with the list of local and network | 185 // To begin with,this list is initialized with the list of local and network |
| 178 // printers available. Then we query the server for the list of printers | 186 // printers available. Then we query the server for the list of printers |
| 179 // already registered. We trim this list to remove the printers already | 187 // already registered. We trim this list to remove the printers already |
| 180 // registered. We then pass a copy of this list to the frontend to give the | 188 // registered. We then pass a copy of this list to the frontend to give the |
| 181 // user a chance to further trim the list. When the frontend gives us the | 189 // user a chance to further trim the list. When the frontend gives us the |
| 182 // final list we make a copy into this so that we can start registering. | 190 // final list we make a copy into this so that we can start registering. |
| 183 printing::PrinterList printer_list_; | 191 printing::PrinterList printer_list_; |
| 192 // Indicates whether the printers in printer_list_ is the complete set of |
| 193 // printers to be registered for this proxy. |
| 194 bool complete_list_available_; |
| 184 // The CloudPrintURLFetcher instance for the current request. | 195 // The CloudPrintURLFetcher instance for the current request. |
| 185 scoped_refptr<CloudPrintURLFetcher> request_; | 196 scoped_refptr<CloudPrintURLFetcher> request_; |
| 186 // The index of the nex printer to be uploaded. | 197 // The index of the nex printer to be uploaded. |
| 187 size_t next_upload_index_; | 198 size_t next_upload_index_; |
| 188 // The unique id for this proxy | 199 // The unique id for this proxy |
| 189 std::string proxy_id_; | 200 std::string proxy_id_; |
| 190 // The GAIA auth token | 201 // The GAIA auth token |
| 191 std::string auth_token_; | 202 std::string auth_token_; |
| 192 // Cached info about the last printer that we tried to upload. We cache this | 203 // Cached info about the last printer that we tried to upload. We cache this |
| 193 // so we won't have to requery the printer if the upload fails and we need | 204 // so we won't have to requery the printer if the upload fails and we need |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 core_.get(), | 284 core_.get(), |
| 274 &CloudPrintProxyBackend::Core::DoRegisterSelectedPrinters, | 285 &CloudPrintProxyBackend::Core::DoRegisterSelectedPrinters, |
| 275 printer_list)); | 286 printer_list)); |
| 276 } | 287 } |
| 277 | 288 |
| 278 CloudPrintProxyBackend::Core::Core(CloudPrintProxyBackend* backend, | 289 CloudPrintProxyBackend::Core::Core(CloudPrintProxyBackend* backend, |
| 279 const GURL& cloud_print_server_url, | 290 const GURL& cloud_print_server_url, |
| 280 const DictionaryValue* print_system_settings) | 291 const DictionaryValue* print_system_settings) |
| 281 : backend_(backend), | 292 : backend_(backend), |
| 282 cloud_print_server_url_(cloud_print_server_url), | 293 cloud_print_server_url_(cloud_print_server_url), |
| 294 complete_list_available_(false), |
| 283 next_upload_index_(0), | 295 next_upload_index_(0), |
| 284 next_response_handler_(NULL), | 296 next_response_handler_(NULL), |
| 285 new_printers_available_(false), | 297 new_printers_available_(false), |
| 286 notifications_enabled_(false), | 298 notifications_enabled_(false), |
| 287 job_poll_scheduled_(false) { | 299 job_poll_scheduled_(false) { |
| 288 if (print_system_settings) { | 300 if (print_system_settings) { |
| 289 // It is possible to have no print settings specified. | 301 // It is possible to have no print settings specified. |
| 290 print_system_settings_.reset(print_system_settings->DeepCopy()); | 302 print_system_settings_.reset(print_system_settings->DeepCopy()); |
| 291 } | 303 } |
| 292 } | 304 } |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 talk_mediator_->Login(); | 387 talk_mediator_->Login(); |
| 376 | 388 |
| 377 print_server_watcher_ = print_system_->CreatePrintServerWatcher(); | 389 print_server_watcher_ = print_system_->CreatePrintServerWatcher(); |
| 378 print_server_watcher_->StartWatching(this); | 390 print_server_watcher_->StartWatching(this); |
| 379 | 391 |
| 380 proxy_id_ = proxy_id; | 392 proxy_id_ = proxy_id; |
| 381 | 393 |
| 382 StartRegistration(); | 394 StartRegistration(); |
| 383 } else { | 395 } else { |
| 384 // We could not initialize the print system. We need to notify the server. | 396 // We could not initialize the print system. We need to notify the server. |
| 385 ReportPrintSystemUnavailable(result.message()); | 397 ReportUserMessage( |
| 398 kPrintSystemFailedMessageId, |
| 399 result.message(), |
| 400 &CloudPrintProxyBackend::Core::HandlePrintSystemUnavailableResponse); |
| 386 } | 401 } |
| 387 } | 402 } |
| 388 | 403 |
| 389 void CloudPrintProxyBackend::Core::StartRegistration() { | 404 void CloudPrintProxyBackend::Core::StartRegistration() { |
| 390 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 405 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
| 391 printer_list_.clear(); | 406 printer_list_.clear(); |
| 392 print_system_->EnumeratePrinters(&printer_list_); | 407 cloud_print::PrintSystem::PrintSystemResult result = |
| 393 // Now we need to ask the server about printers that were registered on the | 408 print_system_->EnumeratePrinters(&printer_list_); |
| 394 // server so that we can trim this list. | 409 complete_list_available_ = result.succeeded(); |
| 395 GetRegisteredPrinters(); | 410 if (!result.succeeded() && !result.message().empty()) { |
| 411 // There was a failure enumerating printers. Send a message to the server. |
| 412 ReportUserMessage( |
| 413 kEnumPrintersFailedMessageId, |
| 414 result.message(), |
| 415 &CloudPrintProxyBackend::Core::HandleEnumPrintersFailedResponse); |
| 416 } else { |
| 417 // Now we need to ask the server about printers that were registered on the |
| 418 // server so that we can trim this list. |
| 419 GetRegisteredPrinters(); |
| 420 } |
| 396 } | 421 } |
| 397 | 422 |
| 398 void CloudPrintProxyBackend::Core::EndRegistration() { | 423 void CloudPrintProxyBackend::Core::EndRegistration() { |
| 399 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 424 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
| 400 request_ = NULL; | 425 request_ = NULL; |
| 401 if (new_printers_available_) { | 426 if (new_printers_available_) { |
| 402 new_printers_available_ = false; | 427 new_printers_available_ = false; |
| 403 StartRegistration(); | 428 StartRegistration(); |
| 404 } | 429 } |
| 405 } | 430 } |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 } else { | 496 } else { |
| 472 EndRegistration(); | 497 EndRegistration(); |
| 473 } | 498 } |
| 474 } | 499 } |
| 475 | 500 |
| 476 void CloudPrintProxyBackend::Core::OnReceivePrinterCaps( | 501 void CloudPrintProxyBackend::Core::OnReceivePrinterCaps( |
| 477 bool succeeded, | 502 bool succeeded, |
| 478 const std::string& printer_name, | 503 const std::string& printer_name, |
| 479 const printing::PrinterCapsAndDefaults& caps_and_defaults) { | 504 const printing::PrinterCapsAndDefaults& caps_and_defaults) { |
| 480 DCHECK(next_upload_index_ < printer_list_.size()); | 505 DCHECK(next_upload_index_ < printer_list_.size()); |
| 481 std::string mime_boundary; | |
| 482 CloudPrintHelpers::CreateMimeBoundaryForUpload(&mime_boundary); | |
| 483 std::string post_data; | |
| 484 GURL post_url; | |
| 485 if (succeeded) { | 506 if (succeeded) { |
| 486 const printing::PrinterBasicInfo& info = | 507 const printing::PrinterBasicInfo& info = |
| 487 printer_list_.at(next_upload_index_); | 508 printer_list_.at(next_upload_index_); |
| 488 | 509 |
| 489 last_uploaded_printer_name_ = info.printer_name; | 510 last_uploaded_printer_name_ = info.printer_name; |
| 490 last_uploaded_printer_info_ = caps_and_defaults; | 511 last_uploaded_printer_info_ = caps_and_defaults; |
| 491 | 512 |
| 513 std::string mime_boundary; |
| 514 CloudPrintHelpers::CreateMimeBoundaryForUpload(&mime_boundary); |
| 515 std::string post_data; |
| 516 |
| 492 CloudPrintHelpers::AddMultipartValueForUpload(kProxyIdValue, proxy_id_, | 517 CloudPrintHelpers::AddMultipartValueForUpload(kProxyIdValue, proxy_id_, |
| 493 mime_boundary, | 518 mime_boundary, |
| 494 std::string(), &post_data); | 519 std::string(), &post_data); |
| 495 CloudPrintHelpers::AddMultipartValueForUpload(kPrinterNameValue, | 520 CloudPrintHelpers::AddMultipartValueForUpload(kPrinterNameValue, |
| 496 info.printer_name, | 521 info.printer_name, |
| 497 mime_boundary, | 522 mime_boundary, |
| 498 std::string(), &post_data); | 523 std::string(), &post_data); |
| 499 CloudPrintHelpers::AddMultipartValueForUpload(kPrinterDescValue, | 524 CloudPrintHelpers::AddMultipartValueForUpload(kPrinterDescValue, |
| 500 info.printer_description, | 525 info.printer_description, |
| 501 mime_boundary, | 526 mime_boundary, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 515 CloudPrintHelpers::AddMultipartValueForUpload( | 540 CloudPrintHelpers::AddMultipartValueForUpload( |
| 516 kPrinterDefaultsValue, last_uploaded_printer_info_.printer_defaults, | 541 kPrinterDefaultsValue, last_uploaded_printer_info_.printer_defaults, |
| 517 mime_boundary, last_uploaded_printer_info_.defaults_mime_type, | 542 mime_boundary, last_uploaded_printer_info_.defaults_mime_type, |
| 518 &post_data); | 543 &post_data); |
| 519 // Send a hash of the printer capabilities to the server. We will use this | 544 // Send a hash of the printer capabilities to the server. We will use this |
| 520 // later to check if the capabilities have changed | 545 // later to check if the capabilities have changed |
| 521 CloudPrintHelpers::AddMultipartValueForUpload( | 546 CloudPrintHelpers::AddMultipartValueForUpload( |
| 522 kPrinterCapsHashValue, | 547 kPrinterCapsHashValue, |
| 523 MD5String(last_uploaded_printer_info_.printer_capabilities), | 548 MD5String(last_uploaded_printer_info_.printer_capabilities), |
| 524 mime_boundary, std::string(), &post_data); | 549 mime_boundary, std::string(), &post_data); |
| 525 post_url = CloudPrintHelpers::GetUrlForPrinterRegistration( | 550 GURL post_url = CloudPrintHelpers::GetUrlForPrinterRegistration( |
| 526 cloud_print_server_url_); | 551 cloud_print_server_url_); |
| 527 | 552 |
| 528 next_response_handler_ = | 553 next_response_handler_ = |
| 529 &CloudPrintProxyBackend::Core::HandleRegisterPrinterResponse; | 554 &CloudPrintProxyBackend::Core::HandleRegisterPrinterResponse; |
| 555 // Terminate the request body |
| 556 post_data.append("--" + mime_boundary + "--\r\n"); |
| 557 std::string mime_type("multipart/form-data; boundary="); |
| 558 mime_type += mime_boundary; |
| 559 request_ = new CloudPrintURLFetcher; |
| 560 request_->StartPostRequest(post_url, this, auth_token_, |
| 561 kCloudPrintAPIMaxRetryCount, mime_type, |
| 562 post_data); |
| 530 } else { | 563 } else { |
| 531 LOG(ERROR) << "CP_PROXY: Failed to get printer info for: " << | 564 LOG(ERROR) << "CP_PROXY: Failed to get printer info for: " << |
| 532 printer_name; | 565 printer_name; |
| 533 // This printer failed to register, notify the server of this failure. | 566 // This printer failed to register, notify the server of this failure. |
| 534 post_url = CloudPrintHelpers::GetUrlForUserMessage( | |
| 535 cloud_print_server_url_, | |
| 536 kGetPrinterCapsFailedMessageId); | |
| 537 string16 printer_name_utf16 = UTF8ToUTF16(printer_name); | 567 string16 printer_name_utf16 = UTF8ToUTF16(printer_name); |
| 538 std::string status_message = l10n_util::GetStringFUTF8( | 568 std::string status_message = l10n_util::GetStringFUTF8( |
| 539 IDS_CLOUD_PRINT_REGISTER_PRINTER_FAILED, | 569 IDS_CLOUD_PRINT_REGISTER_PRINTER_FAILED, |
| 540 printer_name_utf16); | 570 printer_name_utf16); |
| 541 CloudPrintHelpers::AddMultipartValueForUpload(kMessageTextValue, | 571 ReportUserMessage( |
| 542 status_message, | 572 kGetPrinterCapsFailedMessageId, |
| 543 mime_boundary, | 573 status_message, |
| 544 std::string(), | 574 &CloudPrintProxyBackend::Core::HandleRegisterFailedStatusResponse); |
| 545 &post_data); | |
| 546 next_response_handler_ = | |
| 547 &CloudPrintProxyBackend::Core::HandleRegisterFailedStatusResponse; | |
| 548 } | 575 } |
| 549 // Terminate the request body | |
| 550 post_data.append("--" + mime_boundary + "--\r\n"); | |
| 551 std::string mime_type("multipart/form-data; boundary="); | |
| 552 mime_type += mime_boundary; | |
| 553 request_ = new CloudPrintURLFetcher; | |
| 554 request_->StartPostRequest(post_url, this, auth_token_, | |
| 555 kCloudPrintAPIMaxRetryCount, mime_type, | |
| 556 post_data); | |
| 557 } | 576 } |
| 558 | 577 |
| 559 void CloudPrintProxyBackend::Core::HandlePrinterNotification( | 578 void CloudPrintProxyBackend::Core::HandlePrinterNotification( |
| 560 const std::string& printer_id) { | 579 const std::string& printer_id) { |
| 561 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 580 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
| 562 VLOG(1) << "CP_PROXY: Handle printer notification, id: " << printer_id; | 581 VLOG(1) << "CP_PROXY: Handle printer notification, id: " << printer_id; |
| 563 JobHandlerMap::iterator index = job_handler_map_.find(printer_id); | 582 JobHandlerMap::iterator index = job_handler_map_.find(printer_id); |
| 564 if (index != job_handler_map_.end()) | 583 if (index != job_handler_map_.end()) |
| 565 index->second->CheckForJobs(kJobFetchReasonNotified); | 584 index->second->CheckForJobs(kJobFetchReasonNotified); |
| 566 } | 585 } |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 718 } | 737 } |
| 719 scoped_refptr<PrinterJobHandler> job_handler; | 738 scoped_refptr<PrinterJobHandler> job_handler; |
| 720 job_handler = new PrinterJobHandler(printer_info, printer_info_cloud, | 739 job_handler = new PrinterJobHandler(printer_info, printer_info_cloud, |
| 721 auth_token_, cloud_print_server_url_, | 740 auth_token_, cloud_print_server_url_, |
| 722 print_system_.get(), this); | 741 print_system_.get(), this); |
| 723 job_handler_map_[printer_info_cloud.printer_id] = job_handler; | 742 job_handler_map_[printer_info_cloud.printer_id] = job_handler; |
| 724 job_handler->Initialize(); | 743 job_handler->Initialize(); |
| 725 } | 744 } |
| 726 } | 745 } |
| 727 | 746 |
| 728 void CloudPrintProxyBackend::Core::ReportPrintSystemUnavailable( | 747 void CloudPrintProxyBackend::Core::ReportUserMessage( |
| 729 const std::string& failure_message) { | 748 const std::string& message_id, |
| 749 const std::string& failure_message, |
| 750 ResponseHandler handler) { |
| 730 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 751 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
| 731 std::string mime_boundary; | 752 std::string mime_boundary; |
| 732 CloudPrintHelpers::CreateMimeBoundaryForUpload(&mime_boundary); | 753 CloudPrintHelpers::CreateMimeBoundaryForUpload(&mime_boundary); |
| 733 GURL post_url = CloudPrintHelpers::GetUrlForUserMessage( | 754 GURL post_url = CloudPrintHelpers::GetUrlForUserMessage( |
| 734 cloud_print_server_url_, | 755 cloud_print_server_url_, |
| 735 kPrintSystemFailedMessageId); | 756 message_id); |
| 736 std::string post_data; | 757 std::string post_data; |
| 737 CloudPrintHelpers::AddMultipartValueForUpload(kMessageTextValue, | 758 CloudPrintHelpers::AddMultipartValueForUpload(kMessageTextValue, |
| 738 failure_message, | 759 failure_message, |
| 739 mime_boundary, | 760 mime_boundary, |
| 740 std::string(), | 761 std::string(), |
| 741 &post_data); | 762 &post_data); |
| 742 next_response_handler_ = | 763 next_response_handler_ = handler; |
| 743 &CloudPrintProxyBackend::Core::HandlePrintSystemUnavailableResponse; | |
| 744 // Terminate the request body | 764 // Terminate the request body |
| 745 post_data.append("--" + mime_boundary + "--\r\n"); | 765 post_data.append("--" + mime_boundary + "--\r\n"); |
| 746 std::string mime_type("multipart/form-data; boundary="); | 766 std::string mime_type("multipart/form-data; boundary="); |
| 747 mime_type += mime_boundary; | 767 mime_type += mime_boundary; |
| 748 request_ = new CloudPrintURLFetcher; | 768 request_ = new CloudPrintURLFetcher; |
| 749 request_->StartPostRequest(post_url, this, auth_token_, | 769 request_->StartPostRequest(post_url, this, auth_token_, |
| 750 kCloudPrintAPIMaxRetryCount, mime_type, | 770 kCloudPrintAPIMaxRetryCount, mime_type, |
| 751 post_data); | 771 post_data); |
| 752 } | 772 } |
| 753 | 773 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 800 bool succeeded) { | 820 bool succeeded) { |
| 801 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 821 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
| 802 // Let the frontend know that we do not have a print system. | 822 // Let the frontend know that we do not have a print system. |
| 803 backend_->frontend_loop_->PostTask( | 823 backend_->frontend_loop_->PostTask( |
| 804 FROM_HERE, | 824 FROM_HERE, |
| 805 NewRunnableMethod(this, | 825 NewRunnableMethod(this, |
| 806 &Core::NotifyPrintSystemUnavailable)); | 826 &Core::NotifyPrintSystemUnavailable)); |
| 807 return CloudPrintURLFetcher::STOP_PROCESSING; | 827 return CloudPrintURLFetcher::STOP_PROCESSING; |
| 808 } | 828 } |
| 809 | 829 |
| 830 CloudPrintURLFetcher::ResponseAction |
| 831 CloudPrintProxyBackend::Core::HandleEnumPrintersFailedResponse( |
| 832 const URLFetcher* source, |
| 833 const GURL& url, |
| 834 DictionaryValue* json_data, |
| 835 bool succeeded) { |
| 836 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
| 837 // Now proceed with printer registration. |
| 838 GetRegisteredPrinters(); |
| 839 return CloudPrintURLFetcher::STOP_PROCESSING; |
| 840 } |
| 841 |
| 842 |
| 810 bool CloudPrintProxyBackend::Core::RemovePrinterFromList( | 843 bool CloudPrintProxyBackend::Core::RemovePrinterFromList( |
| 811 const std::string& printer_name) { | 844 const std::string& printer_name) { |
| 812 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 845 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
| 813 for (printing::PrinterList::iterator index = printer_list_.begin(); | 846 for (printing::PrinterList::iterator index = printer_list_.begin(); |
| 814 index != printer_list_.end(); index++) { | 847 index != printer_list_.end(); index++) { |
| 815 if (0 == base::strcasecmp(index->printer_name.c_str(), | 848 if (0 == base::strcasecmp(index->printer_name.c_str(), |
| 816 printer_name.c_str())) { | 849 printer_name.c_str())) { |
| 817 index = printer_list_.erase(index); | 850 index = printer_list_.erase(index); |
| 818 return true; | 851 return true; |
| 819 } | 852 } |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 876 VLOG(1) << "CP_PROXY: Printer job handle shutdown, id " << printer_id; | 909 VLOG(1) << "CP_PROXY: Printer job handle shutdown, id " << printer_id; |
| 877 job_handler_map_.erase(printer_id); | 910 job_handler_map_.erase(printer_id); |
| 878 } | 911 } |
| 879 | 912 |
| 880 void CloudPrintProxyBackend::Core::OnAuthError() { | 913 void CloudPrintProxyBackend::Core::OnAuthError() { |
| 881 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 914 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
| 882 VLOG(1) << "CP_PROXY: Auth Error"; | 915 VLOG(1) << "CP_PROXY: Auth Error"; |
| 883 backend_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, | 916 backend_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, |
| 884 &Core::NotifyAuthenticationFailed)); | 917 &Core::NotifyAuthenticationFailed)); |
| 885 } | 918 } |
| 919 |
| 920 bool CloudPrintProxyBackend::Core::OnPrinterNotFound( |
| 921 const std::string& printer_name) { |
| 922 // If we have a complete list of local printers, then this needs to be deleted |
| 923 // from the server. |
| 924 return complete_list_available_; |
| 925 } |
| OLD | NEW |