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/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/bind.h" | 10 #include "base/bind.h" |
11 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/logging.h" | 13 #include "base/logging.h" |
14 #include "base/metrics/field_trial.h" | 14 #include "base/metrics/field_trial.h" |
15 #include "base/metrics/histogram.h" | 15 #include "base/metrics/histogram.h" |
16 #include "base/prefs/pref_service.h" | 16 #include "base/prefs/pref_service.h" |
| 17 #include "build/build_config.h" |
17 #include "chrome/browser/browser_process.h" | 18 #include "chrome/browser/browser_process.h" |
18 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 19 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
19 #include "chrome/browser/permissions/permission_manager.h" | 20 #include "chrome/browser/permissions/permission_manager.h" |
20 #include "chrome/browser/profiles/profile.h" | 21 #include "chrome/browser/profiles/profile.h" |
21 #include "chrome/browser/push_messaging/push_messaging_app_identifier.h" | 22 #include "chrome/browser/push_messaging/push_messaging_app_identifier.h" |
22 #include "chrome/browser/push_messaging/push_messaging_constants.h" | 23 #include "chrome/browser/push_messaging/push_messaging_constants.h" |
23 #include "chrome/browser/push_messaging/push_messaging_service_factory.h" | 24 #include "chrome/browser/push_messaging/push_messaging_service_factory.h" |
24 #include "chrome/browser/push_messaging/push_messaging_service_observer.h" | 25 #include "chrome/browser/push_messaging/push_messaging_service_observer.h" |
25 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h" | 26 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h" |
26 #include "chrome/browser/ui/chrome_pages.h" | 27 #include "chrome/browser/ui/chrome_pages.h" |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 if (!message_dispatched_callback_for_testing_.is_null()) { | 234 if (!message_dispatched_callback_for_testing_.is_null()) { |
234 message_dispatched_callback_for_testing_.Run( | 235 message_dispatched_callback_for_testing_.Run( |
235 app_id, app_identifier.origin(), | 236 app_id, app_identifier.origin(), |
236 app_identifier.service_worker_registration_id(), data); | 237 app_identifier.service_worker_registration_id(), data); |
237 } | 238 } |
238 } | 239 } |
239 | 240 |
240 void PushMessagingServiceImpl::DeliverMessageCallback( | 241 void PushMessagingServiceImpl::DeliverMessageCallback( |
241 const std::string& app_id, | 242 const std::string& app_id, |
242 const GURL& requesting_origin, | 243 const GURL& requesting_origin, |
243 int64 service_worker_registration_id, | 244 int64_t service_worker_registration_id, |
244 const gcm::IncomingMessage& message, | 245 const gcm::IncomingMessage& message, |
245 const base::Closure& message_handled_closure, | 246 const base::Closure& message_handled_closure, |
246 content::PushDeliveryStatus status) { | 247 content::PushDeliveryStatus status) { |
247 DCHECK_GE(in_flight_message_deliveries_.count(app_id), 1u); | 248 DCHECK_GE(in_flight_message_deliveries_.count(app_id), 1u); |
248 | 249 |
249 // TODO(mvanouwerkerk): Use ScopedClosureRunner for this. | 250 // TODO(mvanouwerkerk): Use ScopedClosureRunner for this. |
250 base::Closure completion_closure = | 251 base::Closure completion_closure = |
251 base::Bind(&PushMessagingServiceImpl::DidHandleMessage, | 252 base::Bind(&PushMessagingServiceImpl::DidHandleMessage, |
252 weak_factory_.GetWeakPtr(), app_id, message_handled_closure); | 253 weak_factory_.GetWeakPtr(), app_id, message_handled_closure); |
253 | 254 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 // GetPushEndpoint method ------------------------------------------------------ | 334 // GetPushEndpoint method ------------------------------------------------------ |
334 | 335 |
335 GURL PushMessagingServiceImpl::GetPushEndpoint() { | 336 GURL PushMessagingServiceImpl::GetPushEndpoint() { |
336 return GURL(std::string(kPushMessagingEndpoint)); | 337 return GURL(std::string(kPushMessagingEndpoint)); |
337 } | 338 } |
338 | 339 |
339 // Subscribe and GetPermissionStatus methods ----------------------------------- | 340 // Subscribe and GetPermissionStatus methods ----------------------------------- |
340 | 341 |
341 void PushMessagingServiceImpl::SubscribeFromDocument( | 342 void PushMessagingServiceImpl::SubscribeFromDocument( |
342 const GURL& requesting_origin, | 343 const GURL& requesting_origin, |
343 int64 service_worker_registration_id, | 344 int64_t service_worker_registration_id, |
344 const std::string& sender_id, | 345 const std::string& sender_id, |
345 int renderer_id, | 346 int renderer_id, |
346 int render_frame_id, | 347 int render_frame_id, |
347 bool user_visible, | 348 bool user_visible, |
348 const content::PushMessagingService::RegisterCallback& callback) { | 349 const content::PushMessagingService::RegisterCallback& callback) { |
349 PushMessagingAppIdentifier app_identifier = | 350 PushMessagingAppIdentifier app_identifier = |
350 PushMessagingAppIdentifier::Generate(requesting_origin, | 351 PushMessagingAppIdentifier::Generate(requesting_origin, |
351 service_worker_registration_id); | 352 service_worker_registration_id); |
352 | 353 |
353 if (push_subscription_count_ + pending_push_subscription_count_ >= | 354 if (push_subscription_count_ + pending_push_subscription_count_ >= |
(...skipping 23 matching lines...) Expand all Loading... |
377 profile_->GetPermissionManager()->RequestPermission( | 378 profile_->GetPermissionManager()->RequestPermission( |
378 content::PermissionType::PUSH_MESSAGING, web_contents->GetMainFrame(), | 379 content::PermissionType::PUSH_MESSAGING, web_contents->GetMainFrame(), |
379 requesting_origin, true /* user_gesture */, | 380 requesting_origin, true /* user_gesture */, |
380 base::Bind(&PushMessagingServiceImpl::DidRequestPermission, | 381 base::Bind(&PushMessagingServiceImpl::DidRequestPermission, |
381 weak_factory_.GetWeakPtr(), app_identifier, sender_id, | 382 weak_factory_.GetWeakPtr(), app_identifier, sender_id, |
382 callback)); | 383 callback)); |
383 } | 384 } |
384 | 385 |
385 void PushMessagingServiceImpl::SubscribeFromWorker( | 386 void PushMessagingServiceImpl::SubscribeFromWorker( |
386 const GURL& requesting_origin, | 387 const GURL& requesting_origin, |
387 int64 service_worker_registration_id, | 388 int64_t service_worker_registration_id, |
388 const std::string& sender_id, | 389 const std::string& sender_id, |
389 bool user_visible, | 390 bool user_visible, |
390 const content::PushMessagingService::RegisterCallback& register_callback) { | 391 const content::PushMessagingService::RegisterCallback& register_callback) { |
391 PushMessagingAppIdentifier app_identifier = | 392 PushMessagingAppIdentifier app_identifier = |
392 PushMessagingAppIdentifier::Generate(requesting_origin, | 393 PushMessagingAppIdentifier::Generate(requesting_origin, |
393 service_worker_registration_id); | 394 service_worker_registration_id); |
394 | 395 |
395 if (push_subscription_count_ + pending_push_subscription_count_ >= | 396 if (push_subscription_count_ + pending_push_subscription_count_ >= |
396 kMaxRegistrations) { | 397 kMaxRegistrations) { |
397 SubscribeEndWithError(register_callback, | 398 SubscribeEndWithError(register_callback, |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
570 const bool success = !!p256dh.size(); | 571 const bool success = !!p256dh.size(); |
571 | 572 |
572 callback.Run(success, std::vector<uint8_t>(p256dh.begin(), p256dh.end()), | 573 callback.Run(success, std::vector<uint8_t>(p256dh.begin(), p256dh.end()), |
573 std::vector<uint8_t>(auth_secret.begin(), auth_secret.end())); | 574 std::vector<uint8_t>(auth_secret.begin(), auth_secret.end())); |
574 } | 575 } |
575 | 576 |
576 // Unsubscribe methods --------------------------------------------------------- | 577 // Unsubscribe methods --------------------------------------------------------- |
577 | 578 |
578 void PushMessagingServiceImpl::Unsubscribe( | 579 void PushMessagingServiceImpl::Unsubscribe( |
579 const GURL& requesting_origin, | 580 const GURL& requesting_origin, |
580 int64 service_worker_registration_id, | 581 int64_t service_worker_registration_id, |
581 const std::string& sender_id, | 582 const std::string& sender_id, |
582 const content::PushMessagingService::UnregisterCallback& callback) { | 583 const content::PushMessagingService::UnregisterCallback& callback) { |
583 PushMessagingAppIdentifier app_identifier = | 584 PushMessagingAppIdentifier app_identifier = |
584 PushMessagingAppIdentifier::FindByServiceWorker( | 585 PushMessagingAppIdentifier::FindByServiceWorker( |
585 profile_, requesting_origin, service_worker_registration_id); | 586 profile_, requesting_origin, service_worker_registration_id); |
586 if (app_identifier.is_null()) { | 587 if (app_identifier.is_null()) { |
587 if (!callback.is_null()) { | 588 if (!callback.is_null()) { |
588 callback.Run( | 589 callback.Run( |
589 content::PUSH_UNREGISTRATION_STATUS_SUCCESS_WAS_NOT_REGISTERED); | 590 content::PUSH_UNREGISTRATION_STATUS_SUCCESS_WAS_NOT_REGISTERED); |
590 } | 591 } |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
771 switches::kEnableExperimentalWebPlatformFeatures); | 772 switches::kEnableExperimentalWebPlatformFeatures); |
772 } | 773 } |
773 | 774 |
774 gcm::GCMDriver* PushMessagingServiceImpl::GetGCMDriver() const { | 775 gcm::GCMDriver* PushMessagingServiceImpl::GetGCMDriver() const { |
775 gcm::GCMProfileService* gcm_profile_service = | 776 gcm::GCMProfileService* gcm_profile_service = |
776 gcm::GCMProfileServiceFactory::GetForProfile(profile_); | 777 gcm::GCMProfileServiceFactory::GetForProfile(profile_); |
777 CHECK(gcm_profile_service); | 778 CHECK(gcm_profile_service); |
778 CHECK(gcm_profile_service->driver()); | 779 CHECK(gcm_profile_service->driver()); |
779 return gcm_profile_service->driver(); | 780 return gcm_profile_service->driver(); |
780 } | 781 } |
OLD | NEW |