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

Side by Side Diff: chrome/service/cloud_print/cloud_print_proxy_backend.cc

Issue 6245005: Code to send diagnostic messages about cloud print proxy. Currently diagnosti... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Fixed build errors yet again Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "app/l10n_util.h"
10 #include "base/file_util.h" 11 #include "base/file_util.h"
11 #include "base/md5.h" 12 #include "base/md5.h"
12 #include "base/rand_util.h" 13 #include "base/rand_util.h"
13 #include "base/string_number_conversions.h" 14 #include "base/string_number_conversions.h"
14 #include "base/string_split.h" 15 #include "base/string_split.h"
15 #include "base/string_util.h" 16 #include "base/string_util.h"
16 #include "base/utf_string_conversions.h" 17 #include "base/utf_string_conversions.h"
17 #include "base/values.h" 18 #include "base/values.h"
18 #include "chrome/service/cloud_print/cloud_print_consts.h" 19 #include "chrome/service/cloud_print/cloud_print_consts.h"
19 #include "chrome/service/cloud_print/cloud_print_helpers.h" 20 #include "chrome/service/cloud_print/cloud_print_helpers.h"
20 #include "chrome/service/cloud_print/cloud_print_url_fetcher.h" 21 #include "chrome/service/cloud_print/cloud_print_url_fetcher.h"
21 #include "chrome/service/cloud_print/printer_job_handler.h" 22 #include "chrome/service/cloud_print/printer_job_handler.h"
22 #include "chrome/service/gaia/service_gaia_authenticator.h" 23 #include "chrome/service/gaia/service_gaia_authenticator.h"
23 #include "chrome/service/service_process.h" 24 #include "chrome/service/service_process.h"
24 #include "googleurl/src/gurl.h" 25 #include "googleurl/src/gurl.h"
26 #include "grit/generated_resources.h"
25 #include "jingle/notifier/base/notifier_options.h" 27 #include "jingle/notifier/base/notifier_options.h"
26 #include "jingle/notifier/listener/push_notifications_thread.h" 28 #include "jingle/notifier/listener/push_notifications_thread.h"
27 #include "jingle/notifier/listener/talk_mediator_impl.h" 29 #include "jingle/notifier/listener/talk_mediator_impl.h"
28 #include "net/url_request/url_request_status.h" 30 #include "net/url_request/url_request_status.h"
29 31
30 // The real guts of CloudPrintProxyBackend, to keep the public client API clean. 32 // The real guts of CloudPrintProxyBackend, to keep the public client API clean.
31 class CloudPrintProxyBackend::Core 33 class CloudPrintProxyBackend::Core
32 : public base::RefCountedThreadSafe<CloudPrintProxyBackend::Core>, 34 : public base::RefCountedThreadSafe<CloudPrintProxyBackend::Core>,
33 public CloudPrintURLFetcherDelegate, 35 public CloudPrintURLFetcherDelegate,
34 public cloud_print::PrintServerWatcherDelegate, 36 public cloud_print::PrintServerWatcherDelegate,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 const URLFetcher* source, 101 const URLFetcher* source,
100 const GURL& url, 102 const GURL& url,
101 DictionaryValue* json_data, 103 DictionaryValue* json_data,
102 bool succeeded); 104 bool succeeded);
103 105
104 CloudPrintURLFetcher::ResponseAction HandleRegisterPrinterResponse( 106 CloudPrintURLFetcher::ResponseAction HandleRegisterPrinterResponse(
105 const URLFetcher* source, 107 const URLFetcher* source,
106 const GURL& url, 108 const GURL& url,
107 DictionaryValue* json_data, 109 DictionaryValue* json_data,
108 bool succeeded); 110 bool succeeded);
111
112 CloudPrintURLFetcher::ResponseAction HandleRegisterFailedStatusResponse(
113 const URLFetcher* source,
114 const GURL& url,
115 DictionaryValue* json_data,
116 bool succeeded);
117
118 CloudPrintURLFetcher::ResponseAction HandlePrintSystemUnavailableResponse(
119 const URLFetcher* source,
120 const GURL& url,
121 DictionaryValue* json_data,
122 bool succeeded);
109 // End response handlers 123 // End response handlers
110 124
111 // NotifyXXX is how the Core communicates with the frontend across 125 // NotifyXXX is how the Core communicates with the frontend across
112 // threads. 126 // threads.
113 void NotifyPrinterListAvailable( 127 void NotifyPrinterListAvailable(
114 const printing::PrinterList& printer_list); 128 const printing::PrinterList& printer_list);
115 void NotifyAuthenticated( 129 void NotifyAuthenticated(
116 const std::string& cloud_print_token, 130 const std::string& cloud_print_token,
117 const std::string& cloud_print_xmpp_token, 131 const std::string& cloud_print_xmpp_token,
118 const std::string& email); 132 const std::string& email);
119 void NotifyAuthenticationFailed(); 133 void NotifyAuthenticationFailed();
134 void NotifyPrintSystemUnavailable();
120 135
121 // Starts a new printer registration process. 136 // Starts a new printer registration process.
122 void StartRegistration(); 137 void StartRegistration();
123 // Ends the printer registration process. 138 // Ends the printer registration process.
124 void EndRegistration(); 139 void EndRegistration();
125 // Registers printer capabilities and defaults for the next printer in the 140 // Registers printer capabilities and defaults for the next printer in the
126 // list with the cloud print server. 141 // list with the cloud print server.
127 void RegisterNextPrinter(); 142 void RegisterNextPrinter();
128 // Retrieves the list of registered printers for this user/proxy combination 143 // Retrieves the list of registered printers for this user/proxy combination
129 // from the cloud print server. 144 // from the cloud print server.
130 void GetRegisteredPrinters(); 145 void GetRegisteredPrinters();
131 // Removes the given printer from the list. Returns false if the printer 146 // Removes the given printer from the list. Returns false if the printer
132 // did not exist in the list. 147 // did not exist in the list.
133 bool RemovePrinterFromList(const std::string& printer_name); 148 bool RemovePrinterFromList(const std::string& printer_name);
134 // Initializes a job handler object for the specified printer. The job 149 // Initializes a job handler object for the specified printer. The job
135 // handler is responsible for checking for pending print jobs for this 150 // handler is responsible for checking for pending print jobs for this
136 // printer and print them. 151 // printer and print them.
137 void InitJobHandlerForPrinter(DictionaryValue* printer_data); 152 void InitJobHandlerForPrinter(DictionaryValue* printer_data);
153 // Sends a diagnostic message to the cloud print server that the print
154 // system failed to initialize.
155 void ReportPrintSystemUnavailable(const std::string& failure_message);
138 156
139 // Callback method for GetPrinterCapsAndDefaults. 157 // Callback method for GetPrinterCapsAndDefaults.
140 void OnReceivePrinterCaps( 158 void OnReceivePrinterCaps(
141 bool succeeded, 159 bool succeeded,
142 const std::string& printer_name, 160 const std::string& printer_name,
143 const printing::PrinterCapsAndDefaults& caps_and_defaults); 161 const printing::PrinterCapsAndDefaults& caps_and_defaults);
144 162
145 void HandlePrinterNotification(const std::string& printer_id); 163 void HandlePrinterNotification(const std::string& printer_id);
146 void PollForJobs(); 164 void PollForJobs();
147 // Schedules a task to poll for jobs. Does nothing if a task is already 165 // Schedules a task to poll for jobs. Does nothing if a task is already
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); 344 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop());
327 VLOG(1) << "CP_PROXY: Starting proxy, id: " << proxy_id; 345 VLOG(1) << "CP_PROXY: Starting proxy, id: " << proxy_id;
328 346
329 print_system_ = 347 print_system_ =
330 cloud_print::PrintSystem::CreateInstance(print_system_settings_.get()); 348 cloud_print::PrintSystem::CreateInstance(print_system_settings_.get());
331 if (!print_system_.get()) { 349 if (!print_system_.get()) {
332 NOTREACHED(); 350 NOTREACHED();
333 return; // No print system available, fail initalization. 351 return; // No print system available, fail initalization.
334 } 352 }
335 353
336 print_system_->Init(); 354 cloud_print::PrintSystem::PrintSystemResult result = print_system_->Init();
337 355
338 // TODO(sanjeevr): Validate the tokens. 356 // TODO(sanjeevr): Validate the tokens.
339 auth_token_ = cloud_print_token; 357 auth_token_ = cloud_print_token;
340 358
341 const notifier::NotifierOptions kNotifierOptions; 359 if (result.succeeded()) {
342 const bool kInvalidateXmppAuthToken = false; 360 const notifier::NotifierOptions kNotifierOptions;
343 const bool kAllowInsecureXmppConnection = false; 361 const bool kInvalidateXmppAuthToken = false;
344 talk_mediator_.reset(new notifier::TalkMediatorImpl( 362 const bool kAllowInsecureXmppConnection = false;
345 new notifier::PushNotificationsThread(kNotifierOptions, 363 talk_mediator_.reset(new notifier::TalkMediatorImpl(
346 kCloudPrintPushNotificationsSource), 364 new notifier::PushNotificationsThread(
347 kInvalidateXmppAuthToken, 365 kNotifierOptions,
348 kAllowInsecureXmppConnection)); 366 kCloudPrintPushNotificationsSource),
349 push_notifications_channel_ = kCloudPrintPushNotificationsSource; 367 kInvalidateXmppAuthToken,
350 push_notifications_channel_.append("/proxy/"); 368 kAllowInsecureXmppConnection));
351 push_notifications_channel_.append(proxy_id); 369 push_notifications_channel_ = kCloudPrintPushNotificationsSource;
352 talk_mediator_->AddSubscribedServiceUrl(push_notifications_channel_); 370 push_notifications_channel_.append("/proxy/");
353 talk_mediator_->SetDelegate(this); 371 push_notifications_channel_.append(proxy_id);
354 talk_mediator_->SetAuthToken(email, cloud_print_xmpp_token, 372 talk_mediator_->AddSubscribedServiceUrl(push_notifications_channel_);
355 kSyncGaiaServiceId); 373 talk_mediator_->SetDelegate(this);
356 talk_mediator_->Login(); 374 talk_mediator_->SetAuthToken(email, cloud_print_xmpp_token,
375 kSyncGaiaServiceId);
376 talk_mediator_->Login();
357 377
358 print_server_watcher_ = print_system_->CreatePrintServerWatcher(); 378 print_server_watcher_ = print_system_->CreatePrintServerWatcher();
359 print_server_watcher_->StartWatching(this); 379 print_server_watcher_->StartWatching(this);
360 380
361 proxy_id_ = proxy_id; 381 proxy_id_ = proxy_id;
362 382
363 StartRegistration(); 383 StartRegistration();
384 } else {
385 // We could not initialize the print system. We need to notify the server.
386 ReportPrintSystemUnavailable(result.message());
387 }
364 } 388 }
365 389
366 void CloudPrintProxyBackend::Core::StartRegistration() { 390 void CloudPrintProxyBackend::Core::StartRegistration() {
367 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); 391 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop());
368 printer_list_.clear(); 392 printer_list_.clear();
369 print_system_->EnumeratePrinters(&printer_list_); 393 print_system_->EnumeratePrinters(&printer_list_);
370 // Now we need to ask the server about printers that were registered on the 394 // Now we need to ask the server about printers that were registered on the
371 // server so that we can trim this list. 395 // server so that we can trim this list.
372 GetRegisteredPrinters(); 396 GetRegisteredPrinters();
373 } 397 }
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 } else { 472 } else {
449 EndRegistration(); 473 EndRegistration();
450 } 474 }
451 } 475 }
452 476
453 void CloudPrintProxyBackend::Core::OnReceivePrinterCaps( 477 void CloudPrintProxyBackend::Core::OnReceivePrinterCaps(
454 bool succeeded, 478 bool succeeded,
455 const std::string& printer_name, 479 const std::string& printer_name,
456 const printing::PrinterCapsAndDefaults& caps_and_defaults) { 480 const printing::PrinterCapsAndDefaults& caps_and_defaults) {
457 DCHECK(next_upload_index_ < printer_list_.size()); 481 DCHECK(next_upload_index_ < printer_list_.size());
482 std::string mime_boundary;
483 CloudPrintHelpers::CreateMimeBoundaryForUpload(&mime_boundary);
484 std::string post_data;
485 GURL post_url;
458 if (succeeded) { 486 if (succeeded) {
459 const printing::PrinterBasicInfo& info = 487 const printing::PrinterBasicInfo& info =
460 printer_list_.at(next_upload_index_); 488 printer_list_.at(next_upload_index_);
461 489
462 last_uploaded_printer_name_ = info.printer_name; 490 last_uploaded_printer_name_ = info.printer_name;
463 last_uploaded_printer_info_ = caps_and_defaults; 491 last_uploaded_printer_info_ = caps_and_defaults;
464 492
465 std::string mime_boundary;
466 CloudPrintHelpers::CreateMimeBoundaryForUpload(&mime_boundary);
467 std::string post_data;
468 CloudPrintHelpers::AddMultipartValueForUpload(kProxyIdValue, proxy_id_, 493 CloudPrintHelpers::AddMultipartValueForUpload(kProxyIdValue, proxy_id_,
469 mime_boundary, 494 mime_boundary,
470 std::string(), &post_data); 495 std::string(), &post_data);
471 CloudPrintHelpers::AddMultipartValueForUpload(kPrinterNameValue, 496 CloudPrintHelpers::AddMultipartValueForUpload(kPrinterNameValue,
472 info.printer_name, 497 info.printer_name,
473 mime_boundary, 498 mime_boundary,
474 std::string(), &post_data); 499 std::string(), &post_data);
475 CloudPrintHelpers::AddMultipartValueForUpload(kPrinterDescValue, 500 CloudPrintHelpers::AddMultipartValueForUpload(kPrinterDescValue,
476 info.printer_description, 501 info.printer_description,
477 mime_boundary, 502 mime_boundary,
(...skipping 13 matching lines...) Expand all
491 CloudPrintHelpers::AddMultipartValueForUpload( 516 CloudPrintHelpers::AddMultipartValueForUpload(
492 kPrinterDefaultsValue, last_uploaded_printer_info_.printer_defaults, 517 kPrinterDefaultsValue, last_uploaded_printer_info_.printer_defaults,
493 mime_boundary, last_uploaded_printer_info_.defaults_mime_type, 518 mime_boundary, last_uploaded_printer_info_.defaults_mime_type,
494 &post_data); 519 &post_data);
495 // Send a hash of the printer capabilities to the server. We will use this 520 // Send a hash of the printer capabilities to the server. We will use this
496 // later to check if the capabilities have changed 521 // later to check if the capabilities have changed
497 CloudPrintHelpers::AddMultipartValueForUpload( 522 CloudPrintHelpers::AddMultipartValueForUpload(
498 kPrinterCapsHashValue, 523 kPrinterCapsHashValue,
499 MD5String(last_uploaded_printer_info_.printer_capabilities), 524 MD5String(last_uploaded_printer_info_.printer_capabilities),
500 mime_boundary, std::string(), &post_data); 525 mime_boundary, std::string(), &post_data);
501 // Terminate the request body 526 post_url = CloudPrintHelpers::GetUrlForPrinterRegistration(
502 post_data.append("--" + mime_boundary + "--\r\n");
503 std::string mime_type("multipart/form-data; boundary=");
504 mime_type += mime_boundary;
505 GURL register_url = CloudPrintHelpers::GetUrlForPrinterRegistration(
506 cloud_print_server_url_); 527 cloud_print_server_url_);
507 528
508 next_response_handler_ = 529 next_response_handler_ =
509 &CloudPrintProxyBackend::Core::HandleRegisterPrinterResponse; 530 &CloudPrintProxyBackend::Core::HandleRegisterPrinterResponse;
510 request_ = new CloudPrintURLFetcher;
511 request_->StartPostRequest(register_url, this, auth_token_,
512 kCloudPrintAPIMaxRetryCount, mime_type,
513 post_data);
514 } else { 531 } else {
515 LOG(ERROR) << "CP_PROXY: Failed to get printer info for: " << 532 LOG(ERROR) << "CP_PROXY: Failed to get printer info for: " <<
516 printer_name; 533 printer_name;
517 next_upload_index_++; 534 // This printer failed to register, notify the server of this failure.
518 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod(this, 535 post_url = CloudPrintHelpers::GetUrlForUserMessage(
519 &CloudPrintProxyBackend::Core::RegisterNextPrinter)); 536 cloud_print_server_url_,
537 kGetPrinterCapsFailedMessageId);
538 string16 printer_name_utf16 = UTF8ToUTF16(printer_name);
539 std::string status_message = l10n_util::GetStringFUTF8(
540 IDS_CLOUD_PRINT_REGISTER_PRINTER_FAILED,
541 printer_name_utf16);
542 CloudPrintHelpers::AddMultipartValueForUpload(kMessageTextValue,
543 status_message,
544 mime_boundary,
545 std::string(),
546 &post_data);
547 next_response_handler_ =
548 &CloudPrintProxyBackend::Core::HandleRegisterFailedStatusResponse;
520 } 549 }
550 // Terminate the request body
551 post_data.append("--" + mime_boundary + "--\r\n");
552 std::string mime_type("multipart/form-data; boundary=");
553 mime_type += mime_boundary;
554 request_ = new CloudPrintURLFetcher;
555 request_->StartPostRequest(post_url, this, auth_token_,
556 kCloudPrintAPIMaxRetryCount, mime_type,
557 post_data);
521 } 558 }
522 559
523 void CloudPrintProxyBackend::Core::HandlePrinterNotification( 560 void CloudPrintProxyBackend::Core::HandlePrinterNotification(
524 const std::string& printer_id) { 561 const std::string& printer_id) {
525 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); 562 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop());
526 VLOG(1) << "CP_PROXY: Handle printer notification, id: " << printer_id; 563 VLOG(1) << "CP_PROXY: Handle printer notification, id: " << printer_id;
527 JobHandlerMap::iterator index = job_handler_map_.find(printer_id); 564 JobHandlerMap::iterator index = job_handler_map_.find(printer_id);
528 if (index != job_handler_map_.end()) 565 if (index != job_handler_map_.end())
529 index->second->CheckForJobs(kJobFetchReasonNotified); 566 index->second->CheckForJobs(kJobFetchReasonNotified);
530 } 567 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 DCHECK(MessageLoop::current() == backend_->frontend_loop_); 625 DCHECK(MessageLoop::current() == backend_->frontend_loop_);
589 backend_->frontend_->OnAuthenticated(cloud_print_token, 626 backend_->frontend_->OnAuthenticated(cloud_print_token,
590 cloud_print_xmpp_token, email); 627 cloud_print_xmpp_token, email);
591 } 628 }
592 629
593 void CloudPrintProxyBackend::Core::NotifyAuthenticationFailed() { 630 void CloudPrintProxyBackend::Core::NotifyAuthenticationFailed() {
594 DCHECK(MessageLoop::current() == backend_->frontend_loop_); 631 DCHECK(MessageLoop::current() == backend_->frontend_loop_);
595 backend_->frontend_->OnAuthenticationFailed(); 632 backend_->frontend_->OnAuthenticationFailed();
596 } 633 }
597 634
635 void CloudPrintProxyBackend::Core::NotifyPrintSystemUnavailable() {
636 DCHECK(MessageLoop::current() == backend_->frontend_loop_);
637 backend_->frontend_->OnPrintSystemUnavailable();
638 }
639
598 CloudPrintURLFetcher::ResponseAction 640 CloudPrintURLFetcher::ResponseAction
599 CloudPrintProxyBackend::Core::HandlePrinterListResponse( 641 CloudPrintProxyBackend::Core::HandlePrinterListResponse(
600 const URLFetcher* source, 642 const URLFetcher* source,
601 const GURL& url, 643 const GURL& url,
602 DictionaryValue* json_data, 644 DictionaryValue* json_data,
603 bool succeeded) { 645 bool succeeded) {
604 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); 646 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop());
605 if (!succeeded) { 647 if (!succeeded) {
606 NOTREACHED(); 648 NOTREACHED();
607 return CloudPrintURLFetcher::RETRY_REQUEST; 649 return CloudPrintURLFetcher::RETRY_REQUEST;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 } 719 }
678 scoped_refptr<PrinterJobHandler> job_handler; 720 scoped_refptr<PrinterJobHandler> job_handler;
679 job_handler = new PrinterJobHandler(printer_info, printer_info_cloud, 721 job_handler = new PrinterJobHandler(printer_info, printer_info_cloud,
680 auth_token_, cloud_print_server_url_, 722 auth_token_, cloud_print_server_url_,
681 print_system_.get(), this); 723 print_system_.get(), this);
682 job_handler_map_[printer_info_cloud.printer_id] = job_handler; 724 job_handler_map_[printer_info_cloud.printer_id] = job_handler;
683 job_handler->Initialize(); 725 job_handler->Initialize();
684 } 726 }
685 } 727 }
686 728
729 void CloudPrintProxyBackend::Core::ReportPrintSystemUnavailable(
730 const std::string& failure_message) {
731 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop());
732 std::string mime_boundary;
733 CloudPrintHelpers::CreateMimeBoundaryForUpload(&mime_boundary);
734 GURL post_url = CloudPrintHelpers::GetUrlForUserMessage(
735 cloud_print_server_url_,
736 kPrintSystemFailedMessageId);
737 std::string post_data;
738 CloudPrintHelpers::AddMultipartValueForUpload(kMessageTextValue,
739 failure_message,
740 mime_boundary,
741 std::string(),
742 &post_data);
743 next_response_handler_ =
744 &CloudPrintProxyBackend::Core::HandlePrintSystemUnavailableResponse;
745 // Terminate the request body
Scott Byer 2011/01/20 19:09:03 nit: indentation
746 post_data.append("--" + mime_boundary + "--\r\n");
747 std::string mime_type("multipart/form-data; boundary=");
748 mime_type += mime_boundary;
749 request_ = new CloudPrintURLFetcher;
750 request_->StartPostRequest(post_url, this, auth_token_,
751 kCloudPrintAPIMaxRetryCount, mime_type,
752 post_data);
753 }
754
687 CloudPrintURLFetcher::ResponseAction 755 CloudPrintURLFetcher::ResponseAction
688 CloudPrintProxyBackend::Core::HandleRegisterPrinterResponse( 756 CloudPrintProxyBackend::Core::HandleRegisterPrinterResponse(
689 const URLFetcher* source, 757 const URLFetcher* source,
690 const GURL& url, 758 const GURL& url,
691 DictionaryValue* json_data, 759 DictionaryValue* json_data,
692 bool succeeded) { 760 bool succeeded) {
693 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); 761 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop());
694 if (succeeded) { 762 if (succeeded) {
695 ListValue* printer_list = NULL; 763 ListValue* printer_list = NULL;
696 json_data->GetList(kPrinterListValue, &printer_list); 764 json_data->GetList(kPrinterListValue, &printer_list);
697 // There should be a "printers" value in the JSON 765 // There should be a "printers" value in the JSON
698 DCHECK(printer_list); 766 DCHECK(printer_list);
699 if (printer_list) { 767 if (printer_list) {
700 DictionaryValue* printer_data = NULL; 768 DictionaryValue* printer_data = NULL;
701 if (printer_list->GetDictionary(0, &printer_data)) 769 if (printer_list->GetDictionary(0, &printer_data))
702 InitJobHandlerForPrinter(printer_data); 770 InitJobHandlerForPrinter(printer_data);
703 } 771 }
704 } 772 }
705 next_upload_index_++; 773 next_upload_index_++;
706 MessageLoop::current()->PostTask( 774 MessageLoop::current()->PostTask(
707 FROM_HERE, 775 FROM_HERE,
708 NewRunnableMethod(this, 776 NewRunnableMethod(this,
709 &CloudPrintProxyBackend::Core::RegisterNextPrinter)); 777 &CloudPrintProxyBackend::Core::RegisterNextPrinter));
710 return CloudPrintURLFetcher::STOP_PROCESSING; 778 return CloudPrintURLFetcher::STOP_PROCESSING;
711 } 779 }
712 780
781 CloudPrintURLFetcher::ResponseAction
782 CloudPrintProxyBackend::Core::HandleRegisterFailedStatusResponse(
783 const URLFetcher* source,
784 const GURL& url,
785 DictionaryValue* json_data,
786 bool succeeded) {
787 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop());
788 next_upload_index_++;
789 MessageLoop::current()->PostTask(
790 FROM_HERE,
791 NewRunnableMethod(this,
792 &CloudPrintProxyBackend::Core::RegisterNextPrinter));
793 return CloudPrintURLFetcher::STOP_PROCESSING;
794 }
795
796 CloudPrintURLFetcher::ResponseAction
797 CloudPrintProxyBackend::Core::HandlePrintSystemUnavailableResponse(
798 const URLFetcher* source,
799 const GURL& url,
800 DictionaryValue* json_data,
801 bool succeeded) {
802 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop());
803 // Let the frontend know that we do not have a print system.
804 backend_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this,
Scott Byer 2011/01/20 19:09:03 nit: indentation clearer in HandleRegisterFailedSt
805 &Core::NotifyPrintSystemUnavailable));
806 return CloudPrintURLFetcher::STOP_PROCESSING;
807 }
808
713 bool CloudPrintProxyBackend::Core::RemovePrinterFromList( 809 bool CloudPrintProxyBackend::Core::RemovePrinterFromList(
714 const std::string& printer_name) { 810 const std::string& printer_name) {
715 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); 811 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop());
716 for (printing::PrinterList::iterator index = printer_list_.begin(); 812 for (printing::PrinterList::iterator index = printer_list_.begin();
717 index != printer_list_.end(); index++) { 813 index != printer_list_.end(); index++) {
718 if (0 == base::strcasecmp(index->printer_name.c_str(), 814 if (0 == base::strcasecmp(index->printer_name.c_str(),
719 printer_name.c_str())) { 815 printer_name.c_str())) {
720 index = printer_list_.erase(index); 816 index = printer_list_.erase(index);
721 return true; 817 return true;
722 } 818 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 VLOG(1) << "CP_PROXY: Printer job handle shutdown, id " << printer_id; 875 VLOG(1) << "CP_PROXY: Printer job handle shutdown, id " << printer_id;
780 job_handler_map_.erase(printer_id); 876 job_handler_map_.erase(printer_id);
781 } 877 }
782 878
783 void CloudPrintProxyBackend::Core::OnAuthError() { 879 void CloudPrintProxyBackend::Core::OnAuthError() {
784 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); 880 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop());
785 VLOG(1) << "CP_PROXY: Auth Error"; 881 VLOG(1) << "CP_PROXY: Auth Error";
786 backend_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, 882 backend_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this,
787 &Core::NotifyAuthenticationFailed)); 883 &Core::NotifyAuthenticationFailed));
788 } 884 }
OLDNEW
« no previous file with comments | « chrome/service/cloud_print/cloud_print_proxy_backend.h ('k') | chrome/service/cloud_print/print_system.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698