OLD | NEW |
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_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 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 | 75 |
76 // CloudPrintAuth::Client implementation. | 76 // CloudPrintAuth::Client implementation. |
77 virtual void OnAuthenticationComplete( | 77 virtual void OnAuthenticationComplete( |
78 const std::string& access_token, | 78 const std::string& access_token, |
79 const std::string& robot_oauth_refresh_token, | 79 const std::string& robot_oauth_refresh_token, |
80 const std::string& robot_email, | 80 const std::string& robot_email, |
81 const std::string& user_email); | 81 const std::string& user_email); |
82 virtual void OnInvalidCredentials(); | 82 virtual void OnInvalidCredentials(); |
83 | 83 |
84 // CloudPrintConnector::Client implementation. | 84 // CloudPrintConnector::Client implementation. |
85 virtual void OnPrintersAvailable(const printing::PrinterList& printers); | |
86 virtual void OnAuthFailed(); | 85 virtual void OnAuthFailed(); |
87 | 86 |
88 // notifier::TalkMediator::Delegate implementation. | 87 // notifier::TalkMediator::Delegate implementation. |
89 virtual void OnNotificationStateChange( | 88 virtual void OnNotificationStateChange( |
90 bool notifications_enabled); | 89 bool notifications_enabled); |
91 virtual void OnIncomingNotification( | 90 virtual void OnIncomingNotification( |
92 const notifier::Notification& notification); | 91 const notifier::Notification& notification); |
93 virtual void OnOutgoingNotification(); | 92 virtual void OnOutgoingNotification(); |
94 | 93 |
95 private: | 94 private: |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 } | 231 } |
233 | 232 |
234 void CloudPrintProxyBackend::Shutdown() { | 233 void CloudPrintProxyBackend::Shutdown() { |
235 core_thread_.message_loop()->PostTask(FROM_HERE, | 234 core_thread_.message_loop()->PostTask(FROM_HERE, |
236 NewRunnableMethod(core_.get(), | 235 NewRunnableMethod(core_.get(), |
237 &CloudPrintProxyBackend::Core::DoShutdown)); | 236 &CloudPrintProxyBackend::Core::DoShutdown)); |
238 core_thread_.Stop(); | 237 core_thread_.Stop(); |
239 core_ = NULL; // Releases reference to core_. | 238 core_ = NULL; // Releases reference to core_. |
240 } | 239 } |
241 | 240 |
242 void CloudPrintProxyBackend::RegisterPrinters( | |
243 const printing::PrinterList& printer_list) { | |
244 core_thread_.message_loop()->PostTask(FROM_HERE, | |
245 NewRunnableMethod( | |
246 core_.get(), | |
247 &CloudPrintProxyBackend::Core::DoRegisterSelectedPrinters, | |
248 printer_list)); | |
249 } | |
250 | |
251 CloudPrintProxyBackend::Core::Core( | 241 CloudPrintProxyBackend::Core::Core( |
252 CloudPrintProxyBackend* backend, | 242 CloudPrintProxyBackend* backend, |
253 const std::string& proxy_id, | 243 const std::string& proxy_id, |
254 const GURL& cloud_print_server_url, | 244 const GURL& cloud_print_server_url, |
255 const DictionaryValue* print_system_settings, | 245 const DictionaryValue* print_system_settings, |
256 const gaia::OAuthClientInfo& oauth_client_info, | 246 const gaia::OAuthClientInfo& oauth_client_info, |
257 bool enable_job_poll) | 247 bool enable_job_poll) |
258 : backend_(backend), | 248 : backend_(backend), |
259 cloud_print_server_url_(cloud_print_server_url), | 249 cloud_print_server_url_(cloud_print_server_url), |
260 proxy_id_(proxy_id), | 250 proxy_id_(proxy_id), |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 } | 334 } |
345 } | 335 } |
346 | 336 |
347 void CloudPrintProxyBackend::Core::OnInvalidCredentials() { | 337 void CloudPrintProxyBackend::Core::OnInvalidCredentials() { |
348 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 338 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
349 VLOG(1) << "CP_CONNECTOR: Auth Error"; | 339 VLOG(1) << "CP_CONNECTOR: Auth Error"; |
350 backend_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, | 340 backend_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, |
351 &Core::NotifyAuthenticationFailed)); | 341 &Core::NotifyAuthenticationFailed)); |
352 } | 342 } |
353 | 343 |
354 void CloudPrintProxyBackend::Core::OnPrintersAvailable( | |
355 const printing::PrinterList& printers) { | |
356 // Let the frontend know that we have a list of printers available. | |
357 backend_->frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, | |
358 &Core::NotifyPrinterListAvailable, printers)); | |
359 } | |
360 | |
361 void CloudPrintProxyBackend::Core::OnAuthFailed() { | 344 void CloudPrintProxyBackend::Core::OnAuthFailed() { |
362 VLOG(1) << "CP_CONNECTOR: Authentication failed in connector."; | 345 VLOG(1) << "CP_CONNECTOR: Authentication failed in connector."; |
363 // Let's stop connecter and refresh token. We'll restart connecter once | 346 // Let's stop connecter and refresh token. We'll restart connecter once |
364 // new token available. | 347 // new token available. |
365 if (connector_->IsRunning()) | 348 if (connector_->IsRunning()) |
366 connector_->Stop(); | 349 connector_->Stop(); |
367 | 350 |
368 // Refresh Auth token. | 351 // Refresh Auth token. |
369 auth_->RefreshAccessToken(); | 352 auth_->RefreshAccessToken(); |
370 } | 353 } |
(...skipping 28 matching lines...) Expand all Loading... |
399 | 382 |
400 // Important to delete the TalkMediator on this thread. | 383 // Important to delete the TalkMediator on this thread. |
401 if (talk_mediator_.get()) | 384 if (talk_mediator_.get()) |
402 talk_mediator_->Logout(); | 385 talk_mediator_->Logout(); |
403 talk_mediator_.reset(); | 386 talk_mediator_.reset(); |
404 notifications_enabled_ = false; | 387 notifications_enabled_ = false; |
405 notifications_enabled_since_ = base::TimeTicks(); | 388 notifications_enabled_since_ = base::TimeTicks(); |
406 token_store_.reset(); | 389 token_store_.reset(); |
407 } | 390 } |
408 | 391 |
409 void CloudPrintProxyBackend::Core::DoRegisterSelectedPrinters( | |
410 const printing::PrinterList& printer_list) { | |
411 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | |
412 connector_->RegisterPrinters(printer_list); | |
413 } | |
414 | |
415 void CloudPrintProxyBackend::Core::HandlePrinterNotification( | 392 void CloudPrintProxyBackend::Core::HandlePrinterNotification( |
416 const std::string& printer_id) { | 393 const std::string& printer_id) { |
417 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 394 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
418 VLOG(1) << "CP_CONNECTOR: Handle printer notification, id: " << printer_id; | 395 VLOG(1) << "CP_CONNECTOR: Handle printer notification, id: " << printer_id; |
419 connector_->CheckForJobs(kJobFetchReasonNotified, printer_id); | 396 connector_->CheckForJobs(kJobFetchReasonNotified, printer_id); |
420 } | 397 } |
421 | 398 |
422 void CloudPrintProxyBackend::Core::PollForJobs() { | 399 void CloudPrintProxyBackend::Core::PollForJobs() { |
423 VLOG(1) << "CP_CONNECTOR: Polling for jobs."; | 400 VLOG(1) << "CP_CONNECTOR: Polling for jobs."; |
424 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 401 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
(...skipping 19 matching lines...) Expand all Loading... |
444 } | 421 } |
445 } | 422 } |
446 | 423 |
447 CloudPrintTokenStore* CloudPrintProxyBackend::Core::GetTokenStore() { | 424 CloudPrintTokenStore* CloudPrintProxyBackend::Core::GetTokenStore() { |
448 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 425 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
449 if (!token_store_.get()) | 426 if (!token_store_.get()) |
450 token_store_.reset(new CloudPrintTokenStore); | 427 token_store_.reset(new CloudPrintTokenStore); |
451 return token_store_.get(); | 428 return token_store_.get(); |
452 } | 429 } |
453 | 430 |
454 void CloudPrintProxyBackend::Core::NotifyPrinterListAvailable( | |
455 const printing::PrinterList& printer_list) { | |
456 DCHECK(MessageLoop::current() == backend_->frontend_loop_); | |
457 backend_->frontend_->OnPrinterListAvailable(printer_list); | |
458 } | |
459 | |
460 void CloudPrintProxyBackend::Core::NotifyAuthenticated( | 431 void CloudPrintProxyBackend::Core::NotifyAuthenticated( |
461 const std::string& robot_oauth_refresh_token, | 432 const std::string& robot_oauth_refresh_token, |
462 const std::string& robot_email, | 433 const std::string& robot_email, |
463 const std::string& user_email) { | 434 const std::string& user_email) { |
464 DCHECK(MessageLoop::current() == backend_->frontend_loop_); | 435 DCHECK(MessageLoop::current() == backend_->frontend_loop_); |
465 backend_->frontend_->OnAuthenticated(robot_oauth_refresh_token, | 436 backend_->frontend_->OnAuthenticated(robot_oauth_refresh_token, |
466 robot_email, | 437 robot_email, |
467 user_email); | 438 user_email); |
468 } | 439 } |
469 | 440 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
505 void CloudPrintProxyBackend::Core::OnIncomingNotification( | 476 void CloudPrintProxyBackend::Core::OnIncomingNotification( |
506 const notifier::Notification& notification) { | 477 const notifier::Notification& notification) { |
507 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 478 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
508 VLOG(1) << "CP_CONNECTOR: Incoming notification."; | 479 VLOG(1) << "CP_CONNECTOR: Incoming notification."; |
509 if (0 == base::strcasecmp(kCloudPrintPushNotificationsSource, | 480 if (0 == base::strcasecmp(kCloudPrintPushNotificationsSource, |
510 notification.channel.c_str())) | 481 notification.channel.c_str())) |
511 HandlePrinterNotification(notification.data); | 482 HandlePrinterNotification(notification.data); |
512 } | 483 } |
513 | 484 |
514 void CloudPrintProxyBackend::Core::OnOutgoingNotification() {} | 485 void CloudPrintProxyBackend::Core::OnOutgoingNotification() {} |
OLD | NEW |