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

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

Issue 8600007: base::Bind: Convert chrome/service/cloud_print. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase and review fixes. Created 9 years, 1 month 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_connector.h" 5 #include "chrome/service/cloud_print/cloud_print_connector.h"
6 6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
7 #include "base/md5.h" 9 #include "base/md5.h"
8 #include "base/rand_util.h" 10 #include "base/rand_util.h"
9 #include "base/string_number_conversions.h" 11 #include "base/string_number_conversions.h"
10 #include "base/string_split.h" 12 #include "base/string_split.h"
11 #include "base/stringprintf.h" 13 #include "base/stringprintf.h"
12 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
13 #include "base/values.h" 15 #include "base/values.h"
14 #include "chrome/service/cloud_print/cloud_print_consts.h" 16 #include "chrome/service/cloud_print/cloud_print_consts.h"
15 #include "chrome/service/cloud_print/cloud_print_helpers.h" 17 #include "chrome/service/cloud_print/cloud_print_helpers.h"
16 #include "grit/generated_resources.h" 18 #include "grit/generated_resources.h"
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 task.type = PENDING_PRINTER_REGISTER; 375 task.type = PENDING_PRINTER_REGISTER;
374 task.printer_info = info; 376 task.printer_info = info;
375 AddPendingTask(task); 377 AddPendingTask(task);
376 } 378 }
377 379
378 void CloudPrintConnector::AddPendingTask(const PendingTask& task) { 380 void CloudPrintConnector::AddPendingTask(const PendingTask& task) {
379 pending_tasks_.push_back(task); 381 pending_tasks_.push_back(task);
380 // If this is the only pending task, we need to start the process. 382 // If this is the only pending task, we need to start the process.
381 if (pending_tasks_.size() == 1) { 383 if (pending_tasks_.size() == 1) {
382 MessageLoop::current()->PostTask( 384 MessageLoop::current()->PostTask(
383 FROM_HERE, NewRunnableMethod( 385 FROM_HERE, base::Bind(&CloudPrintConnector::ProcessPendingTask, this));
384 this, &CloudPrintConnector::ProcessPendingTask));
385 } 386 }
386 } 387 }
387 388
388 void CloudPrintConnector::ProcessPendingTask() { 389 void CloudPrintConnector::ProcessPendingTask() {
389 if (!IsRunning()) 390 if (!IsRunning())
390 return; // Orphant call. 391 return; // Orphant call.
391 if (pending_tasks_.size() == 0) 392 if (pending_tasks_.size() == 0)
392 return; // No peding tasks. 393 return; // No peding tasks.
393 394
394 PendingTask task = pending_tasks_.front(); 395 PendingTask task = pending_tasks_.front();
(...skipping 26 matching lines...) Expand all
421 const printing::PrinterBasicInfo& info) { 422 const printing::PrinterBasicInfo& info) {
422 for (JobHandlerMap::iterator it = job_handler_map_.begin(); 423 for (JobHandlerMap::iterator it = job_handler_map_.begin();
423 it != job_handler_map_.end(); ++it) { 424 it != job_handler_map_.end(); ++it) {
424 if (IsSamePrinter(it->second->GetPrinterName(), info.printer_name)) { 425 if (IsSamePrinter(it->second->GetPrinterName(), info.printer_name)) {
425 // Printer already registered, continue to the next task. 426 // Printer already registered, continue to the next task.
426 ContinuePendingTaskProcessing(); 427 ContinuePendingTaskProcessing();
427 return; 428 return;
428 } 429 }
429 } 430 }
430 431
431 cloud_print::PrintSystem::PrinterCapsAndDefaultsCallback* callback = 432 // Asynchronously fetch the printer caps and defaults. The story will
432 NewCallback(this, &CloudPrintConnector::OnReceivePrinterCaps);
433 // Asnchronously fetch the printer caps and defaults. The story will
434 // continue in OnReceivePrinterCaps. 433 // continue in OnReceivePrinterCaps.
435 print_system_->GetPrinterCapsAndDefaults( 434 print_system_->GetPrinterCapsAndDefaults(
436 info.printer_name.c_str(), callback); 435 info.printer_name.c_str(),
436 base::Bind(&CloudPrintConnector::OnReceivePrinterCaps,
437 base::Unretained(this)));
437 } 438 }
438 439
439 void CloudPrintConnector::OnPrinterDelete(const std::string& printer_id) { 440 void CloudPrintConnector::OnPrinterDelete(const std::string& printer_id) {
440 // Remove corresponding printer job handler. 441 // Remove corresponding printer job handler.
441 JobHandlerMap::iterator it = job_handler_map_.find(printer_id); 442 JobHandlerMap::iterator it = job_handler_map_.find(printer_id);
442 if (it != job_handler_map_.end()) { 443 if (it != job_handler_map_.end()) {
443 it->second->Shutdown(); 444 it->second->Shutdown();
444 job_handler_map_.erase(it); 445 job_handler_map_.erase(it);
445 } 446 }
446 447
447 // TODO(gene): We probably should not try indefinitely here. Just once or 448 // TODO(gene): We probably should not try indefinitely here. Just once or
448 // twice should be enough. 449 // twice should be enough.
449 // Bug: http://code.google.com/p/chromium/issues/detail?id=101850 450 // Bug: http://code.google.com/p/chromium/issues/detail?id=101850
450 GURL url = CloudPrintHelpers::GetUrlForPrinterDelete(cloud_print_server_url_, 451 GURL url = CloudPrintHelpers::GetUrlForPrinterDelete(cloud_print_server_url_,
451 printer_id); 452 printer_id);
452 StartGetRequest(url, 453 StartGetRequest(url,
453 kCloudPrintAPIMaxRetryCount, 454 kCloudPrintAPIMaxRetryCount,
454 &CloudPrintConnector::HandlePrinterDeleteResponse); 455 &CloudPrintConnector::HandlePrinterDeleteResponse);
455 } 456 }
456 457
457 void CloudPrintConnector::ContinuePendingTaskProcessing() { 458 void CloudPrintConnector::ContinuePendingTaskProcessing() {
458 if (pending_tasks_.size() == 0) 459 if (pending_tasks_.size() == 0)
459 return; // No peding tasks. 460 return; // No pending tasks.
460 461
461 // Delete current task and repost if we have more task avaialble. 462 // Delete current task and repost if we have more task available.
462 pending_tasks_.pop_front(); 463 pending_tasks_.pop_front();
463 if (pending_tasks_.size() != 0) { 464 if (pending_tasks_.size() != 0) {
464 MessageLoop::current()->PostTask( 465 MessageLoop::current()->PostTask(
465 FROM_HERE, NewRunnableMethod( 466 FROM_HERE, base::Bind(&CloudPrintConnector::ProcessPendingTask, this));
466 this, &CloudPrintConnector::ProcessPendingTask));
467 } 467 }
468 } 468 }
469 469
470 void CloudPrintConnector::OnReceivePrinterCaps( 470 void CloudPrintConnector::OnReceivePrinterCaps(
471 bool succeeded, 471 bool succeeded,
472 const std::string& printer_name, 472 const std::string& printer_name,
473 const printing::PrinterCapsAndDefaults& caps_and_defaults) { 473 const printing::PrinterCapsAndDefaults& caps_and_defaults) {
474 if (!IsRunning()) 474 if (!IsRunning())
475 return; // Orphant call. 475 return; // Orphant call.
476 DCHECK(pending_tasks_.size() > 0 && 476 DCHECK(pending_tasks_.size() > 0 &&
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 mime_type, 543 mime_type,
544 post_data, 544 post_data,
545 &CloudPrintConnector::HandleRegisterPrinterResponse); 545 &CloudPrintConnector::HandleRegisterPrinterResponse);
546 } 546 }
547 547
548 bool CloudPrintConnector::IsSamePrinter(const std::string& name1, 548 bool CloudPrintConnector::IsSamePrinter(const std::string& name1,
549 const std::string& name2) const { 549 const std::string& name2) const {
550 return (0 == base::strcasecmp(name1.c_str(), name2.c_str())); 550 return (0 == base::strcasecmp(name1.c_str(), name2.c_str()));
551 } 551 }
552 552
OLDNEW
« no previous file with comments | « chrome/service/cloud_print/cloud_print_auth.cc ('k') | chrome/service/cloud_print/print_system.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698