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

Side by Side Diff: chrome/browser/push_messaging/push_messaging_service_impl.cc

Issue 2697793004: Push API: Validate storage before returning cached subscriptions (Closed)
Patch Set: Fix include Created 3 years, 8 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/push_messaging/push_messaging_service_impl.h" 5 #include "chrome/browser/push_messaging/push_messaging_service_impl.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/barrier_closure.h" 9 #include "base/barrier_closure.h"
10 #include "base/base64url.h" 10 #include "base/base64url.h"
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 app_identifier.PersistToPrefs(profile_); 625 app_identifier.PersistToPrefs(profile_);
626 626
627 IncreasePushSubscriptionCount(1, false /* is_pending */); 627 IncreasePushSubscriptionCount(1, false /* is_pending */);
628 628
629 SubscribeEnd(callback, subscription_id, 629 SubscribeEnd(callback, subscription_id,
630 std::vector<uint8_t>(p256dh.begin(), p256dh.end()), 630 std::vector<uint8_t>(p256dh.begin(), p256dh.end()),
631 std::vector<uint8_t>(auth_secret.begin(), auth_secret.end()), 631 std::vector<uint8_t>(auth_secret.begin(), auth_secret.end()),
632 content::PUSH_REGISTRATION_STATUS_SUCCESS_FROM_PUSH_SERVICE); 632 content::PUSH_REGISTRATION_STATUS_SUCCESS_FROM_PUSH_SERVICE);
633 } 633 }
634 634
635 // GetEncryptionInfo methods --------------------------------------------------- 635 // GetSubscriptionInfo methods -------------------------------------------------
636 636
637 void PushMessagingServiceImpl::GetEncryptionInfo( 637 void PushMessagingServiceImpl::GetSubscriptionInfo(
638 const GURL& origin, 638 const GURL& origin,
639 int64_t service_worker_registration_id, 639 int64_t service_worker_registration_id,
640 const std::string& sender_id, 640 const std::string& sender_id,
641 const PushMessagingService::EncryptionInfoCallback& callback) { 641 const std::string& subscription_id,
642 const SubscriptionInfoCallback& callback) {
642 PushMessagingAppIdentifier app_identifier = 643 PushMessagingAppIdentifier app_identifier =
643 PushMessagingAppIdentifier::FindByServiceWorker( 644 PushMessagingAppIdentifier::FindByServiceWorker(
644 profile_, origin, service_worker_registration_id); 645 profile_, origin, service_worker_registration_id);
645 646
646 DCHECK(!app_identifier.is_null()); 647 if (app_identifier.is_null()) {
648 callback.Run(false /* is_valid */, std::vector<uint8_t>() /* p256dh */,
649 std::vector<uint8_t>() /* auth */);
650 return;
651 }
652
653 const std::string& app_id = app_identifier.app_id();
654 base::Callback<void(bool)> validate_cb =
655 base::Bind(&PushMessagingServiceImpl::DidValidateSubscription,
656 weak_factory_.GetWeakPtr(), app_id, sender_id, callback);
657
658 if (PushMessagingAppIdentifier::UseInstanceID(app_id)) {
659 GetInstanceIDDriver()->GetInstanceID(app_id)->ValidateToken(
660 NormalizeSenderInfo(sender_id), kGCMScope, subscription_id,
661 validate_cb);
662 } else {
663 GetGCMDriver()->ValidateRegistration(
664 app_id, {NormalizeSenderInfo(sender_id)}, subscription_id, validate_cb);
665 }
666 }
667
668 void PushMessagingServiceImpl::DidValidateSubscription(
669 const std::string& app_id,
670 const std::string& sender_id,
671 const SubscriptionInfoCallback& callback,
672 bool is_valid) {
673 if (!is_valid) {
674 callback.Run(false /* is_valid */, std::vector<uint8_t>() /* p256dh */,
675 std::vector<uint8_t>() /* auth */);
676 return;
677 }
647 678
648 GetEncryptionInfoForAppId( 679 GetEncryptionInfoForAppId(
649 app_identifier.app_id(), sender_id, 680 app_id, sender_id,
650 base::Bind(&PushMessagingServiceImpl::DidGetEncryptionInfo, 681 base::Bind(&PushMessagingServiceImpl::DidGetEncryptionInfo,
651 weak_factory_.GetWeakPtr(), callback)); 682 weak_factory_.GetWeakPtr(), callback));
652 } 683 }
653 684
654 void PushMessagingServiceImpl::DidGetEncryptionInfo( 685 void PushMessagingServiceImpl::DidGetEncryptionInfo(
655 const PushMessagingService::EncryptionInfoCallback& callback, 686 const SubscriptionInfoCallback& callback,
656 const std::string& p256dh, 687 const std::string& p256dh,
657 const std::string& auth_secret) const { 688 const std::string& auth_secret) const {
658 // I/O errors might prevent the GCM Driver from retrieving a key-pair. 689 // I/O errors might prevent the GCM Driver from retrieving a key-pair.
659 const bool success = !p256dh.empty(); 690 bool is_valid = !p256dh.empty();
660 691 callback.Run(is_valid, std::vector<uint8_t>(p256dh.begin(), p256dh.end()),
661 callback.Run(success, std::vector<uint8_t>(p256dh.begin(), p256dh.end()),
662 std::vector<uint8_t>(auth_secret.begin(), auth_secret.end())); 692 std::vector<uint8_t>(auth_secret.begin(), auth_secret.end()));
663 } 693 }
664 694
665 // Unsubscribe methods --------------------------------------------------------- 695 // Unsubscribe methods ---------------------------------------------------------
666 696
667 void PushMessagingServiceImpl::Unsubscribe( 697 void PushMessagingServiceImpl::Unsubscribe(
698 content::PushUnregistrationReason reason,
668 const GURL& requesting_origin, 699 const GURL& requesting_origin,
669 int64_t service_worker_registration_id, 700 int64_t service_worker_registration_id,
670 const std::string& sender_id, 701 const std::string& sender_id,
671 const UnregisterCallback& callback) { 702 const UnregisterCallback& callback) {
672 PushMessagingAppIdentifier app_identifier = 703 PushMessagingAppIdentifier app_identifier =
673 PushMessagingAppIdentifier::FindByServiceWorker( 704 PushMessagingAppIdentifier::FindByServiceWorker(
674 profile_, requesting_origin, service_worker_registration_id); 705 profile_, requesting_origin, service_worker_registration_id);
675 706
676 UnsubscribeInternal( 707 UnsubscribeInternal(
677 content::PUSH_UNREGISTRATION_REASON_JAVASCRIPT_API, requesting_origin, 708 reason, requesting_origin, service_worker_registration_id,
678 service_worker_registration_id,
679 app_identifier.is_null() ? std::string() : app_identifier.app_id(), 709 app_identifier.is_null() ? std::string() : app_identifier.app_id(),
680 sender_id, callback); 710 sender_id, callback);
681 } 711 }
682 712
683 void PushMessagingServiceImpl::UnsubscribeInternal( 713 void PushMessagingServiceImpl::UnsubscribeInternal(
684 content::PushUnregistrationReason reason, 714 content::PushUnregistrationReason reason,
685 const GURL& origin, 715 const GURL& origin,
686 int64_t service_worker_registration_id, 716 int64_t service_worker_registration_id,
687 const std::string& app_id, 717 const std::string& app_id,
688 const std::string& sender_id, 718 const std::string& sender_id,
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 } 1019 }
990 1020
991 instance_id::InstanceIDDriver* PushMessagingServiceImpl::GetInstanceIDDriver() 1021 instance_id::InstanceIDDriver* PushMessagingServiceImpl::GetInstanceIDDriver()
992 const { 1022 const {
993 instance_id::InstanceIDProfileService* instance_id_profile_service = 1023 instance_id::InstanceIDProfileService* instance_id_profile_service =
994 instance_id::InstanceIDProfileServiceFactory::GetForProfile(profile_); 1024 instance_id::InstanceIDProfileServiceFactory::GetForProfile(profile_);
995 CHECK(instance_id_profile_service); 1025 CHECK(instance_id_profile_service);
996 CHECK(instance_id_profile_service->driver()); 1026 CHECK(instance_id_profile_service->driver());
997 return instance_id_profile_service->driver(); 1027 return instance_id_profile_service->driver();
998 } 1028 }
OLDNEW
« no previous file with comments | « chrome/browser/push_messaging/push_messaging_service_impl.h ('k') | chrome/test/data/push_messaging/push_test.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698