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 "chrome/browser/services/gcm/gcm_profile_service.h" | 5 #include "chrome/browser/services/gcm/gcm_profile_service.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/base64.h" | 10 #include "base/base64.h" |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 // Called on IO thread. | 260 // Called on IO thread. |
261 void Initialize(scoped_ptr<GCMClientFactory> gcm_client_factory, | 261 void Initialize(scoped_ptr<GCMClientFactory> gcm_client_factory, |
262 const base::FilePath& store_path, | 262 const base::FilePath& store_path, |
263 const std::vector<std::string>& account_ids, | 263 const std::vector<std::string>& account_ids, |
264 const scoped_refptr<net::URLRequestContextGetter>& | 264 const scoped_refptr<net::URLRequestContextGetter>& |
265 url_request_context_getter); | 265 url_request_context_getter); |
266 void Reset(); | 266 void Reset(); |
267 void Load(const base::WeakPtr<GCMProfileService>& service); | 267 void Load(const base::WeakPtr<GCMProfileService>& service); |
268 void CheckOut(); | 268 void CheckOut(); |
269 void Register(const std::string& app_id, | 269 void Register(const std::string& app_id, |
270 const std::vector<std::string>& sender_ids, | 270 const std::vector<std::string>& sender_ids); |
271 const std::string& cert); | |
272 void Unregister(const std::string& app_id); | 271 void Unregister(const std::string& app_id); |
273 void Send(const std::string& app_id, | 272 void Send(const std::string& app_id, |
274 const std::string& receiver_id, | 273 const std::string& receiver_id, |
275 const GCMClient::OutgoingMessage& message); | 274 const GCMClient::OutgoingMessage& message); |
276 | 275 |
277 // For testing purpose. Can be called from UI thread. Use with care. | 276 // For testing purpose. Can be called from UI thread. Use with care. |
278 GCMClient* gcm_client_for_testing() const { return gcm_client_.get(); } | 277 GCMClient* gcm_client_for_testing() const { return gcm_client_.get(); } |
279 | 278 |
280 private: | 279 private: |
281 friend class base::RefCountedThreadSafe<IOWorker>; | 280 friend class base::RefCountedThreadSafe<IOWorker>; |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 429 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
431 | 430 |
432 gcm_client_->CheckOut(); | 431 gcm_client_->CheckOut(); |
433 | 432 |
434 // Note that we still need to keep GCMClient instance alive since the profile | 433 // Note that we still need to keep GCMClient instance alive since the profile |
435 // might be signed in again. | 434 // might be signed in again. |
436 } | 435 } |
437 | 436 |
438 void GCMProfileService::IOWorker::Register( | 437 void GCMProfileService::IOWorker::Register( |
439 const std::string& app_id, | 438 const std::string& app_id, |
440 const std::vector<std::string>& sender_ids, | 439 const std::vector<std::string>& sender_ids) { |
441 const std::string& cert) { | |
442 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 440 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
443 | 441 |
444 gcm_client_->Register(app_id, cert, sender_ids); | 442 gcm_client_->Register(app_id, sender_ids); |
445 } | 443 } |
446 | 444 |
447 void GCMProfileService::IOWorker::Unregister(const std::string& app_id) { | 445 void GCMProfileService::IOWorker::Unregister(const std::string& app_id) { |
448 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 446 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
449 | 447 |
450 gcm_client_->Unregister(app_id); | 448 gcm_client_->Unregister(app_id); |
451 } | 449 } |
452 | 450 |
453 void GCMProfileService::IOWorker::Send( | 451 void GCMProfileService::IOWorker::Send( |
454 const std::string& app_id, | 452 const std::string& app_id, |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
554 url_request_context_getter)); | 552 url_request_context_getter)); |
555 | 553 |
556 // Load from the GCM store and initiate the GCM check-in if the rollout signal | 554 // Load from the GCM store and initiate the GCM check-in if the rollout signal |
557 // indicates yes. | 555 // indicates yes. |
558 if (GetGCMEnabledState(profile_) == ALWAYS_ENABLED) | 556 if (GetGCMEnabledState(profile_) == ALWAYS_ENABLED) |
559 EnsureLoaded(); | 557 EnsureLoaded(); |
560 } | 558 } |
561 | 559 |
562 void GCMProfileService::Register(const std::string& app_id, | 560 void GCMProfileService::Register(const std::string& app_id, |
563 const std::vector<std::string>& sender_ids, | 561 const std::vector<std::string>& sender_ids, |
564 const std::string& cert, | |
565 RegisterCallback callback) { | 562 RegisterCallback callback) { |
566 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 563 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
567 DCHECK(!app_id.empty() && !sender_ids.empty() && !callback.is_null()); | 564 DCHECK(!app_id.empty() && !sender_ids.empty() && !callback.is_null()); |
568 | 565 |
569 // Ensure that check-in has been done. | 566 // Ensure that check-in has been done. |
570 EnsureLoaded(); | 567 EnsureLoaded(); |
571 | 568 |
572 // If the profile was not signed in, bail out. | 569 // If the profile was not signed in, bail out. |
573 if (username_.empty()) { | 570 if (username_.empty()) { |
574 callback.Run(std::string(), GCMClient::NOT_SIGNED_IN); | 571 callback.Run(std::string(), GCMClient::NOT_SIGNED_IN); |
(...skipping 10 matching lines...) Expand all Loading... |
585 | 582 |
586 EnsureAppReady(app_id); | 583 EnsureAppReady(app_id); |
587 | 584 |
588 // Delay the register operation until GCMClient is ready. | 585 // Delay the register operation until GCMClient is ready. |
589 if (!delayed_task_controller_->CanRunTaskWithoutDelay(app_id)) { | 586 if (!delayed_task_controller_->CanRunTaskWithoutDelay(app_id)) { |
590 delayed_task_controller_->AddTask( | 587 delayed_task_controller_->AddTask( |
591 app_id, | 588 app_id, |
592 base::Bind(&GCMProfileService::DoRegister, | 589 base::Bind(&GCMProfileService::DoRegister, |
593 weak_ptr_factory_.GetWeakPtr(), | 590 weak_ptr_factory_.GetWeakPtr(), |
594 app_id, | 591 app_id, |
595 sender_ids, | 592 sender_ids)); |
596 cert)); | |
597 return; | 593 return; |
598 } | 594 } |
599 | 595 |
600 DoRegister(app_id, sender_ids, cert); | 596 DoRegister(app_id, sender_ids); |
601 } | 597 } |
602 | 598 |
603 void GCMProfileService::DoRegister(const std::string& app_id, | 599 void GCMProfileService::DoRegister(const std::string& app_id, |
604 const std::vector<std::string>& sender_ids, | 600 const std::vector<std::string>& sender_ids) { |
605 const std::string& cert) { | |
606 std::map<std::string, RegisterCallback>::iterator callback_iter = | 601 std::map<std::string, RegisterCallback>::iterator callback_iter = |
607 register_callbacks_.find(app_id); | 602 register_callbacks_.find(app_id); |
608 if (callback_iter == register_callbacks_.end()) { | 603 if (callback_iter == register_callbacks_.end()) { |
609 // The callback could have been removed when the app is uninstalled. | 604 // The callback could have been removed when the app is uninstalled. |
610 return; | 605 return; |
611 } | 606 } |
612 | 607 |
613 // Normalize the sender IDs by making them sorted. | 608 // Normalize the sender IDs by making them sorted. |
614 std::vector<std::string> normalized_sender_ids = sender_ids; | 609 std::vector<std::string> normalized_sender_ids = sender_ids; |
615 std::sort(normalized_sender_ids.begin(), normalized_sender_ids.end()); | 610 std::sort(normalized_sender_ids.begin(), normalized_sender_ids.end()); |
(...skipping 20 matching lines...) Expand all Loading... |
636 // Save the IDs of all registered apps such that we know what to remove from | 631 // Save the IDs of all registered apps such that we know what to remove from |
637 // the the app's state store when the profile is signed out. | 632 // the the app's state store when the profile is signed out. |
638 WriteRegisteredAppIDs(); | 633 WriteRegisteredAppIDs(); |
639 | 634 |
640 content::BrowserThread::PostTask( | 635 content::BrowserThread::PostTask( |
641 content::BrowserThread::IO, | 636 content::BrowserThread::IO, |
642 FROM_HERE, | 637 FROM_HERE, |
643 base::Bind(&GCMProfileService::IOWorker::Register, | 638 base::Bind(&GCMProfileService::IOWorker::Register, |
644 io_worker_, | 639 io_worker_, |
645 app_id, | 640 app_id, |
646 normalized_sender_ids, | 641 normalized_sender_ids)); |
647 cert)); | |
648 } | 642 } |
649 | 643 |
650 void GCMProfileService::Send(const std::string& app_id, | 644 void GCMProfileService::Send(const std::string& app_id, |
651 const std::string& receiver_id, | 645 const std::string& receiver_id, |
652 const GCMClient::OutgoingMessage& message, | 646 const GCMClient::OutgoingMessage& message, |
653 SendCallback callback) { | 647 SendCallback callback) { |
654 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 648 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
655 DCHECK(!app_id.empty() && !receiver_id.empty() && !callback.is_null()); | 649 DCHECK(!app_id.empty() && !receiver_id.empty() && !callback.is_null()); |
656 | 650 |
657 // Ensure that check-in has been done. | 651 // Ensure that check-in has been done. |
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1069 | 1063 |
1070 return true; | 1064 return true; |
1071 } | 1065 } |
1072 | 1066 |
1073 // static | 1067 // static |
1074 const char* GCMProfileService::GetPersistentRegisterKeyForTesting() { | 1068 const char* GCMProfileService::GetPersistentRegisterKeyForTesting() { |
1075 return kRegistrationKey; | 1069 return kRegistrationKey; |
1076 } | 1070 } |
1077 | 1071 |
1078 } // namespace gcm | 1072 } // namespace gcm |
OLD | NEW |