| OLD | NEW |
| 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/services/gcm/push_messaging_service_impl.h" | 5 #include "chrome/browser/services/gcm/push_messaging_service_impl.h" |
| 6 | 6 |
| 7 #include <bitset> | 7 #include <bitset> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 | 191 |
| 192 // Drop messages whose application is is invalid. | 192 // Drop messages whose application is is invalid. |
| 193 if (!application_id.IsValid()) { | 193 if (!application_id.IsValid()) { |
| 194 DeliverMessageCallback(application_id, message, | 194 DeliverMessageCallback(application_id, message, |
| 195 content::PUSH_DELIVERY_STATUS_INVALID_MESSAGE); | 195 content::PUSH_DELIVERY_STATUS_INVALID_MESSAGE); |
| 196 return; | 196 return; |
| 197 } | 197 } |
| 198 | 198 |
| 199 // |origin| may have lost push permission. Unregister and drop this message. | 199 // |origin| may have lost push permission. Unregister and drop this message. |
| 200 if (!HasPermission(application_id.origin)) { | 200 if (!HasPermission(application_id.origin)) { |
| 201 Unregister(application_id, UnregisterCallback()); | 201 Unregister(application_id, message.sender_id, UnregisterCallback()); |
| 202 return; | 202 return; |
| 203 } | 203 } |
| 204 | 204 |
| 205 std::string data; | 205 std::string data; |
| 206 | 206 |
| 207 // TODO(peter): Message payloads are disabled pending mandatory encryption. | 207 // TODO(peter): Message payloads are disabled pending mandatory encryption. |
| 208 // https://crbug.com/449184 | 208 // https://crbug.com/449184 |
| 209 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 209 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 210 switches::kEnablePushMessagePayload)) { | 210 switches::kEnablePushMessagePayload)) { |
| 211 GCMClient::MessageData::const_iterator it = message.data.find("data"); | 211 GCMClient::MessageData::const_iterator it = message.data.find("data"); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 241 // Worker JS, even if the website's event handler failed (to prevent sites | 241 // Worker JS, even if the website's event handler failed (to prevent sites |
| 242 // deliberately failing in order to avoid having to show notifications). | 242 // deliberately failing in order to avoid having to show notifications). |
| 243 case content::PUSH_DELIVERY_STATUS_SUCCESS: | 243 case content::PUSH_DELIVERY_STATUS_SUCCESS: |
| 244 case content::PUSH_DELIVERY_STATUS_EVENT_WAITUNTIL_REJECTED: | 244 case content::PUSH_DELIVERY_STATUS_EVENT_WAITUNTIL_REJECTED: |
| 245 RequireUserVisibleUX(application_id); | 245 RequireUserVisibleUX(application_id); |
| 246 break; | 246 break; |
| 247 case content::PUSH_DELIVERY_STATUS_INVALID_MESSAGE: | 247 case content::PUSH_DELIVERY_STATUS_INVALID_MESSAGE: |
| 248 case content::PUSH_DELIVERY_STATUS_SERVICE_WORKER_ERROR: | 248 case content::PUSH_DELIVERY_STATUS_SERVICE_WORKER_ERROR: |
| 249 break; | 249 break; |
| 250 case content::PUSH_DELIVERY_STATUS_NO_SERVICE_WORKER: | 250 case content::PUSH_DELIVERY_STATUS_NO_SERVICE_WORKER: |
| 251 Unregister(application_id, UnregisterCallback()); | 251 Unregister(application_id, message.sender_id, UnregisterCallback()); |
| 252 break; | 252 break; |
| 253 } | 253 } |
| 254 } | 254 } |
| 255 | 255 |
| 256 void PushMessagingServiceImpl::RequireUserVisibleUX( | 256 void PushMessagingServiceImpl::RequireUserVisibleUX( |
| 257 const PushMessagingApplicationId& application_id) { | 257 const PushMessagingApplicationId& application_id) { |
| 258 #if defined(ENABLE_NOTIFICATIONS) | 258 #if defined(ENABLE_NOTIFICATIONS) |
| 259 // TODO(johnme): Relax this heuristic slightly. | 259 // TODO(johnme): Relax this heuristic slightly. |
| 260 PlatformNotificationServiceImpl* notification_service = | 260 PlatformNotificationServiceImpl* notification_service = |
| 261 PlatformNotificationServiceImpl::GetInstance(); | 261 PlatformNotificationServiceImpl::GetInstance(); |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 application_id.ToString(), | 573 application_id.ToString(), |
| 574 sender_ids, | 574 sender_ids, |
| 575 base::Bind(&PushMessagingServiceImpl::DidRegister, | 575 base::Bind(&PushMessagingServiceImpl::DidRegister, |
| 576 weak_factory_.GetWeakPtr(), | 576 weak_factory_.GetWeakPtr(), |
| 577 register_callback)); | 577 register_callback)); |
| 578 } | 578 } |
| 579 | 579 |
| 580 void PushMessagingServiceImpl::Unregister( | 580 void PushMessagingServiceImpl::Unregister( |
| 581 const GURL& requesting_origin, | 581 const GURL& requesting_origin, |
| 582 int64 service_worker_registration_id, | 582 int64 service_worker_registration_id, |
| 583 const std::string& sender_id, |
| 583 const content::PushMessagingService::UnregisterCallback& callback) { | 584 const content::PushMessagingService::UnregisterCallback& callback) { |
| 584 DCHECK(gcm_profile_service_->driver()); | 585 DCHECK(gcm_profile_service_->driver()); |
| 585 | 586 |
| 586 PushMessagingApplicationId application_id = PushMessagingApplicationId( | 587 PushMessagingApplicationId application_id = PushMessagingApplicationId( |
| 587 requesting_origin, service_worker_registration_id); | 588 requesting_origin, service_worker_registration_id); |
| 588 DCHECK(application_id.IsValid()); | 589 DCHECK(application_id.IsValid()); |
| 589 | 590 |
| 590 Unregister(application_id, callback); | 591 Unregister(application_id, sender_id, callback); |
| 591 } | 592 } |
| 592 | 593 |
| 593 void PushMessagingServiceImpl::Unregister( | 594 void PushMessagingServiceImpl::Unregister( |
| 594 const PushMessagingApplicationId& application_id, | 595 const PushMessagingApplicationId& application_id, |
| 596 const std::string& sender_id, |
| 595 const content::PushMessagingService::UnregisterCallback& callback) { | 597 const content::PushMessagingService::UnregisterCallback& callback) { |
| 596 DCHECK(gcm_profile_service_->driver()); | 598 DCHECK(gcm_profile_service_->driver()); |
| 597 | 599 |
| 598 gcm_profile_service_->driver()->Unregister( | 600 gcm_profile_service_->driver()->Unregister( |
| 599 application_id.ToString(), | 601 application_id.ToString(), |
| 602 std::vector<std::string>(1, sender_id), |
| 600 base::Bind(&PushMessagingServiceImpl::DidUnregister, | 603 base::Bind(&PushMessagingServiceImpl::DidUnregister, |
| 601 weak_factory_.GetWeakPtr(), callback)); | 604 weak_factory_.GetWeakPtr(), callback)); |
| 602 } | 605 } |
| 603 | 606 |
| 604 void PushMessagingServiceImpl::DidUnregister( | 607 void PushMessagingServiceImpl::DidUnregister( |
| 605 const content::PushMessagingService::UnregisterCallback& callback, | 608 const content::PushMessagingService::UnregisterCallback& callback, |
| 606 GCMClient::Result result) { | 609 GCMClient::Result result) { |
| 607 // Internal calls pass a null callback. | 610 // Internal calls pass a null callback. |
| 608 if (!callback.is_null()) { | 611 if (!callback.is_null()) { |
| 609 switch (result) { | 612 switch (result) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 635 bool PushMessagingServiceImpl::HasPermission(const GURL& origin) { | 638 bool PushMessagingServiceImpl::HasPermission(const GURL& origin) { |
| 636 gcm::PushMessagingPermissionContext* permission_context = | 639 gcm::PushMessagingPermissionContext* permission_context = |
| 637 gcm::PushMessagingPermissionContextFactory::GetForProfile(profile_); | 640 gcm::PushMessagingPermissionContextFactory::GetForProfile(profile_); |
| 638 DCHECK(permission_context); | 641 DCHECK(permission_context); |
| 639 | 642 |
| 640 return permission_context->GetPermissionStatus(origin, origin) == | 643 return permission_context->GetPermissionStatus(origin, origin) == |
| 641 CONTENT_SETTING_ALLOW; | 644 CONTENT_SETTING_ALLOW; |
| 642 } | 645 } |
| 643 | 646 |
| 644 } // namespace gcm | 647 } // namespace gcm |
| OLD | NEW |