Index: chrome/browser/push_messaging/push_messaging_service_impl.cc |
diff --git a/chrome/browser/push_messaging/push_messaging_service_impl.cc b/chrome/browser/push_messaging/push_messaging_service_impl.cc |
index fbc0c0e932ff2eed5caf85631cf94baaf31b131f..ea433fb0c2c496fbe20b6b8bc218d5b60726976a 100644 |
--- a/chrome/browser/push_messaging/push_messaging_service_impl.cc |
+++ b/chrome/browser/push_messaging/push_messaging_service_impl.cc |
@@ -628,39 +628,71 @@ void PushMessagingServiceImpl::DidSubscribeWithEncryptionInfo( |
content::PUSH_REGISTRATION_STATUS_SUCCESS_FROM_PUSH_SERVICE); |
} |
-// GetEncryptionInfo methods --------------------------------------------------- |
+// GetSubscriptionInfo methods |
+// --------------------------------------------------- |
Peter Beverloo
2017/03/20 23:50:13
nit: dito
johnme
2017/03/30 18:36:38
Done.
|
-void PushMessagingServiceImpl::GetEncryptionInfo( |
+void PushMessagingServiceImpl::GetSubscriptionInfo( |
const GURL& origin, |
int64_t service_worker_registration_id, |
const std::string& sender_id, |
- const PushMessagingService::EncryptionInfoCallback& callback) { |
+ const std::string& subscription_id, |
+ const SubscriptionInfoCallback& callback) { |
PushMessagingAppIdentifier app_identifier = |
PushMessagingAppIdentifier::FindByServiceWorker( |
profile_, origin, service_worker_registration_id); |
- DCHECK(!app_identifier.is_null()); |
+ if (app_identifier.is_null()) { |
+ callback.Run(false /* is_valid */, std::vector<uint8_t>() /* p256dh */, |
+ std::vector<uint8_t>() /* auth */); |
+ return; |
+ } |
+ |
+ const std::string& app_id = app_identifier.app_id(); |
+ base::Callback<void(bool)> validate_cb = |
+ base::Bind(&PushMessagingServiceImpl::DidValidateSubscription, |
+ weak_factory_.GetWeakPtr(), app_id, sender_id, callback); |
+ |
+ if (PushMessagingAppIdentifier::UseInstanceID(app_id)) { |
+ GetInstanceIDDriver()->GetInstanceID(app_id)->ValidateToken( |
+ NormalizeSenderInfo(sender_id), kGCMScope, subscription_id, |
+ validate_cb); |
+ } else { |
+ GetGCMDriver()->ValidateRegistration( |
+ app_id, {NormalizeSenderInfo(sender_id)}, subscription_id, validate_cb); |
+ } |
+} |
+ |
+void PushMessagingServiceImpl::DidValidateSubscription( |
+ const std::string& app_id, |
+ const std::string& sender_id, |
+ const SubscriptionInfoCallback& callback, |
+ bool is_valid) { |
+ if (!is_valid) { |
+ callback.Run(false /* is_valid */, std::vector<uint8_t>() /* p256dh */, |
+ std::vector<uint8_t>() /* auth */); |
+ return; |
+ } |
GetEncryptionInfoForAppId( |
- app_identifier.app_id(), sender_id, |
+ app_id, sender_id, |
base::Bind(&PushMessagingServiceImpl::DidGetEncryptionInfo, |
weak_factory_.GetWeakPtr(), callback)); |
} |
void PushMessagingServiceImpl::DidGetEncryptionInfo( |
- const PushMessagingService::EncryptionInfoCallback& callback, |
+ const SubscriptionInfoCallback& callback, |
const std::string& p256dh, |
const std::string& auth_secret) const { |
// I/O errors might prevent the GCM Driver from retrieving a key-pair. |
- const bool success = !p256dh.empty(); |
- |
- callback.Run(success, std::vector<uint8_t>(p256dh.begin(), p256dh.end()), |
+ bool is_valid = !p256dh.empty(); |
+ callback.Run(is_valid, std::vector<uint8_t>(p256dh.begin(), p256dh.end()), |
std::vector<uint8_t>(auth_secret.begin(), auth_secret.end())); |
} |
// Unsubscribe methods --------------------------------------------------------- |
void PushMessagingServiceImpl::Unsubscribe( |
+ content::PushUnregistrationReason reason, |
const GURL& requesting_origin, |
int64_t service_worker_registration_id, |
const std::string& sender_id, |
@@ -670,8 +702,7 @@ void PushMessagingServiceImpl::Unsubscribe( |
profile_, requesting_origin, service_worker_registration_id); |
UnsubscribeInternal( |
- content::PUSH_UNREGISTRATION_REASON_JAVASCRIPT_API, requesting_origin, |
- service_worker_registration_id, |
+ reason, requesting_origin, service_worker_registration_id, |
app_identifier.is_null() ? std::string() : app_identifier.app_id(), |
sender_id, callback); |
} |