| Index: content/browser/push_messaging/push_messaging_message_filter.cc
|
| diff --git a/content/browser/push_messaging/push_messaging_message_filter.cc b/content/browser/push_messaging/push_messaging_message_filter.cc
|
| index 107b06f337a52e97d5832841472045dc1bd46ddf..be04b9966bdaaf516a6227f7548cc22086850cf7 100644
|
| --- a/content/browser/push_messaging/push_messaging_message_filter.cc
|
| +++ b/content/browser/push_messaging/push_messaging_message_filter.cc
|
| @@ -275,7 +275,7 @@ void PushMessagingMessageFilter::OnSubscribeFromDocument(
|
|
|
| service_worker_context_->StoreRegistrationUserData(
|
| service_worker_registration_id, data.requesting_origin,
|
| - kPushSenderIdServiceWorkerKey, options.sender_info,
|
| + {{kPushSenderIdServiceWorkerKey, options.sender_info}},
|
| base::Bind(&PushMessagingMessageFilter::DidPersistSenderInfo,
|
| weak_factory_io_to_io_.GetWeakPtr(), data, options));
|
| }
|
| @@ -302,7 +302,7 @@ void PushMessagingMessageFilter::OnSubscribeFromWorker(
|
| if (!options.sender_info.empty()) {
|
| service_worker_context_->StoreRegistrationUserData(
|
| service_worker_registration_id, data.requesting_origin,
|
| - kPushSenderIdServiceWorkerKey, options.sender_info,
|
| + {{kPushSenderIdServiceWorkerKey, options.sender_info}},
|
| base::Bind(&PushMessagingMessageFilter::DidPersistSenderInfo,
|
| weak_factory_io_to_io_.GetWeakPtr(), data, options));
|
| } else {
|
| @@ -328,7 +328,8 @@ void PushMessagingMessageFilter::CheckForExistingRegistration(
|
| const PushSubscriptionOptions& options) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| service_worker_context_->GetRegistrationUserData(
|
| - data.service_worker_registration_id, kPushRegistrationIdServiceWorkerKey,
|
| + data.service_worker_registration_id,
|
| + {kPushRegistrationIdServiceWorkerKey},
|
| base::Bind(&PushMessagingMessageFilter::DidCheckForExistingRegistration,
|
| weak_factory_io_to_io_.GetWeakPtr(), data, options));
|
| }
|
| @@ -336,13 +337,14 @@ void PushMessagingMessageFilter::CheckForExistingRegistration(
|
| void PushMessagingMessageFilter::DidCheckForExistingRegistration(
|
| const RegisterData& data,
|
| const PushSubscriptionOptions& options,
|
| - const std::string& push_registration_id,
|
| + const std::vector<std::string>& push_registration_id,
|
| ServiceWorkerStatusCode service_worker_status) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| if (service_worker_status == SERVICE_WORKER_OK) {
|
| + DCHECK_EQ(1u, push_registration_id.size());
|
| auto callback = base::Bind(
|
| &PushMessagingMessageFilter::DidGetEncryptionKeys,
|
| - weak_factory_io_to_io_.GetWeakPtr(), data, push_registration_id);
|
| + weak_factory_io_to_io_.GetWeakPtr(), data, push_registration_id[0]);
|
|
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| @@ -363,7 +365,7 @@ void PushMessagingMessageFilter::DidCheckForExistingRegistration(
|
| options.sender_info));
|
| } else {
|
| service_worker_context_->GetRegistrationUserData(
|
| - data.service_worker_registration_id, kPushSenderIdServiceWorkerKey,
|
| + data.service_worker_registration_id, {kPushSenderIdServiceWorkerKey},
|
| base::Bind(&PushMessagingMessageFilter::DidGetSenderIdFromStorage,
|
| weak_factory_io_to_io_.GetWeakPtr(), data));
|
| }
|
| @@ -388,17 +390,18 @@ void PushMessagingMessageFilter::DidGetEncryptionKeys(
|
|
|
| void PushMessagingMessageFilter::DidGetSenderIdFromStorage(
|
| const RegisterData& data,
|
| - const std::string& sender_id,
|
| + const std::vector<std::string>& sender_id,
|
| ServiceWorkerStatusCode service_worker_status) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| if (service_worker_status != SERVICE_WORKER_OK) {
|
| SendSubscriptionError(data, PUSH_REGISTRATION_STATUS_NO_SENDER_ID);
|
| return;
|
| }
|
| + DCHECK_EQ(1u, sender_id.size());
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| base::Bind(&Core::RegisterOnUI, base::Unretained(ui_core_.get()), data,
|
| - sender_id));
|
| + sender_id[0]));
|
| }
|
|
|
| void PushMessagingMessageFilter::Core::RegisterOnUI(
|
| @@ -506,7 +509,7 @@ void PushMessagingMessageFilter::PersistRegistrationOnIO(
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| service_worker_context_->StoreRegistrationUserData(
|
| data.service_worker_registration_id, data.requesting_origin,
|
| - kPushRegistrationIdServiceWorkerKey, push_registration_id,
|
| + {{kPushRegistrationIdServiceWorkerKey, push_registration_id}},
|
| base::Bind(&PushMessagingMessageFilter::DidPersistRegistrationOnIO,
|
| weak_factory_io_to_io_.GetWeakPtr(), data,
|
| push_registration_id, p256dh, auth));
|
| @@ -588,53 +591,34 @@ void PushMessagingMessageFilter::OnUnsubscribe(
|
| }
|
|
|
| service_worker_context_->GetRegistrationUserData(
|
| - service_worker_registration_id, kPushRegistrationIdServiceWorkerKey,
|
| - base::Bind(&PushMessagingMessageFilter::
|
| - UnsubscribeHavingGottenPushSubscriptionId,
|
| + service_worker_registration_id,
|
| + {kPushRegistrationIdServiceWorkerKey, kPushSenderIdServiceWorkerKey},
|
| + base::Bind(&PushMessagingMessageFilter::UnsubscribeHavingGottenIds,
|
| weak_factory_io_to_io_.GetWeakPtr(), request_id,
|
| service_worker_registration_id,
|
| service_worker_registration->pattern().GetOrigin()));
|
| }
|
|
|
| -void PushMessagingMessageFilter::UnsubscribeHavingGottenPushSubscriptionId(
|
| +void PushMessagingMessageFilter::UnsubscribeHavingGottenIds(
|
| int request_id,
|
| int64_t service_worker_registration_id,
|
| const GURL& requesting_origin,
|
| - const std::string& push_subscription_id, // Unused, we just want the status
|
| + const std::vector<std::string>& push_subscription_and_sender_ids,
|
| ServiceWorkerStatusCode service_worker_status) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
|
|
| - if (service_worker_status == SERVICE_WORKER_OK) {
|
| - service_worker_context_->GetRegistrationUserData(
|
| - service_worker_registration_id, kPushSenderIdServiceWorkerKey,
|
| - base::Bind(&PushMessagingMessageFilter::UnsubscribeHavingGottenSenderId,
|
| - weak_factory_io_to_io_.GetWeakPtr(), request_id,
|
| - service_worker_registration_id, requesting_origin));
|
| - } else {
|
| - // Errors are handled the same, whether we were trying to get the
|
| - // push_subscription_id or the sender_id.
|
| - UnsubscribeHavingGottenSenderId(
|
| - request_id, service_worker_registration_id, requesting_origin,
|
| - std::string() /* sender_id */, service_worker_status);
|
| - }
|
| -}
|
| -
|
| -void PushMessagingMessageFilter::UnsubscribeHavingGottenSenderId(
|
| - int request_id,
|
| - int64_t service_worker_registration_id,
|
| - const GURL& requesting_origin,
|
| - const std::string& sender_id,
|
| - ServiceWorkerStatusCode service_worker_status) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| + // Note that the subscription ID (push_subscription_and_sender_ids[0]) is
|
| + // unused - we just needed to check if the database contained one.
|
|
|
| switch (service_worker_status) {
|
| case SERVICE_WORKER_OK:
|
| + DCHECK_EQ(2u, push_subscription_and_sender_ids.size());
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| base::Bind(&Core::UnregisterFromService,
|
| base::Unretained(ui_core_.get()), request_id,
|
| service_worker_registration_id, requesting_origin,
|
| - sender_id));
|
| + push_subscription_and_sender_ids[1]));
|
| break;
|
| case SERVICE_WORKER_ERROR_NOT_FOUND:
|
| // We did not find a registration, stop here and notify the renderer that
|
| @@ -728,7 +712,7 @@ void PushMessagingMessageFilter::ClearRegistrationData(
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
|
|
| service_worker_context_->ClearRegistrationUserData(
|
| - service_worker_registration_id, kPushRegistrationIdServiceWorkerKey,
|
| + service_worker_registration_id, {kPushRegistrationIdServiceWorkerKey},
|
| base::Bind(&PushMessagingMessageFilter::DidClearRegistrationData,
|
| weak_factory_io_to_io_.GetWeakPtr(), request_id,
|
| unregistration_status));
|
| @@ -788,7 +772,7 @@ void PushMessagingMessageFilter::OnGetSubscription(
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| // TODO(johnme): Validate arguments?
|
| service_worker_context_->GetRegistrationUserData(
|
| - service_worker_registration_id, kPushRegistrationIdServiceWorkerKey,
|
| + service_worker_registration_id, {kPushRegistrationIdServiceWorkerKey},
|
| base::Bind(&PushMessagingMessageFilter::DidGetSubscription,
|
| weak_factory_io_to_io_.GetWeakPtr(), request_id,
|
| service_worker_registration_id));
|
| @@ -797,7 +781,7 @@ void PushMessagingMessageFilter::OnGetSubscription(
|
| void PushMessagingMessageFilter::DidGetSubscription(
|
| int request_id,
|
| int64_t service_worker_registration_id,
|
| - const std::string& push_subscription_id,
|
| + const std::vector<std::string>& push_subscription_id,
|
| ServiceWorkerStatusCode service_worker_status) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| PushGetRegistrationStatus get_status =
|
| @@ -818,8 +802,9 @@ void PushMessagingMessageFilter::DidGetSubscription(
|
| service_worker_registration_id);
|
|
|
| const GURL origin = registration->pattern().GetOrigin();
|
| + DCHECK_EQ(1u, push_subscription_id.size());
|
| const GURL endpoint =
|
| - CreatePushEndpoint(push_endpoint_base_, push_subscription_id);
|
| + CreatePushEndpoint(push_endpoint_base_, push_subscription_id[0]);
|
|
|
| auto callback =
|
| base::Bind(&PushMessagingMessageFilter::DidGetSubscriptionKeys,
|
|
|