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

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

Issue 1131303002: Cleanup PushMessagingAppIdentifier (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@app_identifier
Patch Set: Created 5 years, 7 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/bind.h" 10 #include "base/bind.h"
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 DCHECK(push_registration_count_ >= 0); 138 DCHECK(push_registration_count_ >= 0);
139 profile_->GetPrefs()->SetInteger(prefs::kPushMessagingRegistrationCount, 139 profile_->GetPrefs()->SetInteger(prefs::kPushMessagingRegistrationCount,
140 push_registration_count_); 140 push_registration_count_);
141 } 141 }
142 if (push_registration_count_ + pending_push_registration_count_ == 0) { 142 if (push_registration_count_ + pending_push_registration_count_ == 0) {
143 GetGCMDriver()->RemoveAppHandler(kPushMessagingAppIdentifierPrefix); 143 GetGCMDriver()->RemoveAppHandler(kPushMessagingAppIdentifierPrefix);
144 } 144 }
145 } 145 }
146 146
147 bool PushMessagingServiceImpl::CanHandle(const std::string& app_id) const { 147 bool PushMessagingServiceImpl::CanHandle(const std::string& app_id) const {
148 return PushMessagingAppIdentifier::Get(profile_, app_id).IsValid(); 148 return !PushMessagingAppIdentifier::Get(profile_, app_id).is_null();
149 } 149 }
150 150
151 void PushMessagingServiceImpl::ShutdownHandler() { 151 void PushMessagingServiceImpl::ShutdownHandler() {
152 // Shutdown() should come before and it removes us from the list of app 152 // Shutdown() should come before and it removes us from the list of app
153 // handlers of gcm::GCMDriver so this shouldn't ever been called. 153 // handlers of gcm::GCMDriver so this shouldn't ever been called.
154 NOTREACHED(); 154 NOTREACHED();
155 } 155 }
156 156
157 // OnMessage methods ----------------------------------------------------------- 157 // OnMessage methods -----------------------------------------------------------
158 158
159 void PushMessagingServiceImpl::OnMessage( 159 void PushMessagingServiceImpl::OnMessage(
160 const std::string& app_id, 160 const std::string& app_id,
161 const gcm::GCMClient::IncomingMessage& message) { 161 const gcm::GCMClient::IncomingMessage& message) {
162 base::Closure message_handled_closure = 162 base::Closure message_handled_closure =
163 message_callback_for_testing_.is_null() ? base::Bind(&base::DoNothing) 163 message_callback_for_testing_.is_null() ? base::Bind(&base::DoNothing)
164 : message_callback_for_testing_; 164 : message_callback_for_testing_;
165 PushMessagingAppIdentifier app_identifier = 165 PushMessagingAppIdentifier app_identifier =
166 PushMessagingAppIdentifier::Get(profile_, app_id); 166 PushMessagingAppIdentifier::Get(profile_, app_id);
167 // Drop message and unregister if app_id was unknown (maybe recently deleted). 167 // Drop message and unregister if app_id was unknown (maybe recently deleted).
168 if (!app_identifier.IsValid()) { 168 if (app_identifier.is_null()) {
169 DeliverMessageCallback(app_id, GURL::EmptyGURL(), -1, message, 169 DeliverMessageCallback(app_id, GURL::EmptyGURL(), -1, message,
170 message_handled_closure, 170 message_handled_closure,
171 content::PUSH_DELIVERY_STATUS_UNKNOWN_APP_ID); 171 content::PUSH_DELIVERY_STATUS_UNKNOWN_APP_ID);
172 return; 172 return;
173 } 173 }
174 // Drop message and unregister if |origin| has lost push permission. 174 // Drop message and unregister if |origin| has lost push permission.
175 if (!HasPermission(app_identifier.origin())) { 175 if (!HasPermission(app_identifier.origin())) {
176 DeliverMessageCallback(app_id, app_identifier.origin(), 176 DeliverMessageCallback(app_id, app_identifier.origin(),
177 app_identifier.service_worker_registration_id(), 177 app_identifier.service_worker_registration_id(),
178 message, message_handled_closure, 178 message, message_handled_closure,
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 const GURL& requesting_origin, 297 const GURL& requesting_origin,
298 int64 service_worker_registration_id, 298 int64 service_worker_registration_id,
299 const std::string& sender_id, 299 const std::string& sender_id,
300 int renderer_id, 300 int renderer_id,
301 int render_frame_id, 301 int render_frame_id,
302 bool user_visible, 302 bool user_visible,
303 const content::PushMessagingService::RegisterCallback& callback) { 303 const content::PushMessagingService::RegisterCallback& callback) {
304 PushMessagingAppIdentifier app_identifier = 304 PushMessagingAppIdentifier app_identifier =
305 PushMessagingAppIdentifier::Generate(requesting_origin, 305 PushMessagingAppIdentifier::Generate(requesting_origin,
306 service_worker_registration_id); 306 service_worker_registration_id);
307 DCHECK(app_identifier.IsValid()); 307 app_identifier.DCheckValid();
Peter Beverloo 2015/05/11 16:54:08 Remove this line, PushMessagingAppIdentifier::Gene
johnme 2015/05/12 13:21:50 Done.
308 308
309 if (push_registration_count_ + pending_push_registration_count_ 309 if (push_registration_count_ + pending_push_registration_count_
310 >= kMaxRegistrations) { 310 >= kMaxRegistrations) {
311 RegisterEnd(callback, 311 RegisterEnd(callback,
312 std::string(), 312 std::string(),
313 content::PUSH_REGISTRATION_STATUS_LIMIT_REACHED); 313 content::PUSH_REGISTRATION_STATUS_LIMIT_REACHED);
314 return; 314 return;
315 } 315 }
316 316
317 content::RenderFrameHost* render_frame_host = 317 content::RenderFrameHost* render_frame_host =
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 355
356 void PushMessagingServiceImpl::RegisterFromWorker( 356 void PushMessagingServiceImpl::RegisterFromWorker(
357 const GURL& requesting_origin, 357 const GURL& requesting_origin,
358 int64 service_worker_registration_id, 358 int64 service_worker_registration_id,
359 const std::string& sender_id, 359 const std::string& sender_id,
360 bool user_visible, 360 bool user_visible,
361 const content::PushMessagingService::RegisterCallback& register_callback) { 361 const content::PushMessagingService::RegisterCallback& register_callback) {
362 PushMessagingAppIdentifier app_identifier = 362 PushMessagingAppIdentifier app_identifier =
363 PushMessagingAppIdentifier::Generate(requesting_origin, 363 PushMessagingAppIdentifier::Generate(requesting_origin,
364 service_worker_registration_id); 364 service_worker_registration_id);
365 DCHECK(app_identifier.IsValid()); 365 app_identifier.DCheckValid();
Peter Beverloo 2015/05/11 16:54:08 dito
johnme 2015/05/12 13:21:50 Done.
366 366
367 if (profile_->GetPrefs()->GetInteger( 367 if (profile_->GetPrefs()->GetInteger(
368 prefs::kPushMessagingRegistrationCount) >= kMaxRegistrations) { 368 prefs::kPushMessagingRegistrationCount) >= kMaxRegistrations) {
369 RegisterEnd(register_callback, std::string(), 369 RegisterEnd(register_callback, std::string(),
370 content::PUSH_REGISTRATION_STATUS_LIMIT_REACHED); 370 content::PUSH_REGISTRATION_STATUS_LIMIT_REACHED);
371 return; 371 return;
372 } 372 }
373 373
374 // TODO(peter): Consider |user_visible| when getting the permission status 374 // TODO(peter): Consider |user_visible| when getting the permission status
375 // for registering from a worker. 375 // for registering from a worker.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 void PushMessagingServiceImpl::DidRegister( 416 void PushMessagingServiceImpl::DidRegister(
417 const PushMessagingAppIdentifier& app_identifier, 417 const PushMessagingAppIdentifier& app_identifier,
418 const content::PushMessagingService::RegisterCallback& callback, 418 const content::PushMessagingService::RegisterCallback& callback,
419 const std::string& registration_id, 419 const std::string& registration_id,
420 gcm::GCMClient::Result result) { 420 gcm::GCMClient::Result result) {
421 content::PushRegistrationStatus status = 421 content::PushRegistrationStatus status =
422 content::PUSH_REGISTRATION_STATUS_SERVICE_ERROR; 422 content::PUSH_REGISTRATION_STATUS_SERVICE_ERROR;
423 switch (result) { 423 switch (result) {
424 case gcm::GCMClient::SUCCESS: 424 case gcm::GCMClient::SUCCESS:
425 status = content::PUSH_REGISTRATION_STATUS_SUCCESS_FROM_PUSH_SERVICE; 425 status = content::PUSH_REGISTRATION_STATUS_SUCCESS_FROM_PUSH_SERVICE;
426 app_identifier.PersistToDisk(profile_); 426 app_identifier.PersistToPrefs(profile_);
427 IncreasePushRegistrationCount(1, false /* is_pending */); 427 IncreasePushRegistrationCount(1, false /* is_pending */);
428 break; 428 break;
429 case gcm::GCMClient::INVALID_PARAMETER: 429 case gcm::GCMClient::INVALID_PARAMETER:
430 case gcm::GCMClient::GCM_DISABLED: 430 case gcm::GCMClient::GCM_DISABLED:
431 case gcm::GCMClient::ASYNC_OPERATION_PENDING: 431 case gcm::GCMClient::ASYNC_OPERATION_PENDING:
432 case gcm::GCMClient::SERVER_ERROR: 432 case gcm::GCMClient::SERVER_ERROR:
433 case gcm::GCMClient::UNKNOWN_ERROR: 433 case gcm::GCMClient::UNKNOWN_ERROR:
434 status = content::PUSH_REGISTRATION_STATUS_SERVICE_ERROR; 434 status = content::PUSH_REGISTRATION_STATUS_SERVICE_ERROR;
435 break; 435 break;
436 case gcm::GCMClient::NETWORK_ERROR: 436 case gcm::GCMClient::NETWORK_ERROR:
(...skipping 29 matching lines...) Expand all
466 466
467 // Unregister methods ---------------------------------------------------------- 467 // Unregister methods ----------------------------------------------------------
468 468
469 void PushMessagingServiceImpl::Unregister( 469 void PushMessagingServiceImpl::Unregister(
470 const GURL& requesting_origin, 470 const GURL& requesting_origin,
471 int64 service_worker_registration_id, 471 int64 service_worker_registration_id,
472 const std::string& sender_id, 472 const std::string& sender_id,
473 const content::PushMessagingService::UnregisterCallback& callback) { 473 const content::PushMessagingService::UnregisterCallback& callback) {
474 PushMessagingAppIdentifier app_identifier = PushMessagingAppIdentifier::Get( 474 PushMessagingAppIdentifier app_identifier = PushMessagingAppIdentifier::Get(
475 profile_, requesting_origin, service_worker_registration_id); 475 profile_, requesting_origin, service_worker_registration_id);
476 if (!app_identifier.IsValid()) { 476 if (app_identifier.is_null()) {
477 if (!callback.is_null()) { 477 if (!callback.is_null()) {
478 callback.Run( 478 callback.Run(
479 content::PUSH_UNREGISTRATION_STATUS_SUCCESS_WAS_NOT_REGISTERED); 479 content::PUSH_UNREGISTRATION_STATUS_SUCCESS_WAS_NOT_REGISTERED);
480 } 480 }
481 return; 481 return;
482 } 482 }
483 483
484 Unregister(app_identifier.app_id(), sender_id, callback); 484 Unregister(app_identifier.app_id(), sender_id, callback);
485 } 485 }
486 486
487 void PushMessagingServiceImpl::Unregister( 487 void PushMessagingServiceImpl::Unregister(
488 const std::string& app_id, 488 const std::string& app_id,
489 const std::string& sender_id, 489 const std::string& sender_id,
490 const content::PushMessagingService::UnregisterCallback& callback) { 490 const content::PushMessagingService::UnregisterCallback& callback) {
491 // Delete the mapping for this app_id, to guarantee that no messages get 491 // Delete the mapping for this app_id, to guarantee that no messages get
492 // delivered in future (even if unregistration fails). 492 // delivered in future (even if unregistration fails).
493 // TODO(johnme): Instead of deleting these app ids, store them elsewhere, and 493 // TODO(johnme): Instead of deleting these app ids, store them elsewhere, and
494 // retry unregistration if it fails due to network errors (crbug.com/465399). 494 // retry unregistration if it fails due to network errors (crbug.com/465399).
495 PushMessagingAppIdentifier app_identifier = 495 PushMessagingAppIdentifier app_identifier =
496 PushMessagingAppIdentifier::Get(profile_, app_id); 496 PushMessagingAppIdentifier::Get(profile_, app_id);
497 bool was_registered = app_identifier.IsValid(); 497 bool was_registered = !app_identifier.is_null();
498 if (was_registered) 498 if (was_registered)
499 app_identifier.DeleteFromDisk(profile_); 499 app_identifier.DeleteFromPrefs(profile_);
500 500
501 const auto& unregister_callback = 501 const auto& unregister_callback =
502 base::Bind(&PushMessagingServiceImpl::DidUnregister, 502 base::Bind(&PushMessagingServiceImpl::DidUnregister,
503 weak_factory_.GetWeakPtr(), 503 weak_factory_.GetWeakPtr(),
504 was_registered, callback); 504 was_registered, callback);
505 #if defined(OS_ANDROID) 505 #if defined(OS_ANDROID)
506 // On Android the backend is different, and requires the original sender_id. 506 // On Android the backend is different, and requires the original sender_id.
507 // UnregisterBecausePermissionRevoked sometimes calls us with an empty one. 507 // UnregisterBecausePermissionRevoked sometimes calls us with an empty one.
508 if (sender_id.empty()) 508 if (sender_id.empty())
509 unregister_callback.Run(gcm::GCMClient::INVALID_PARAMETER); 509 unregister_callback.Run(gcm::GCMClient::INVALID_PARAMETER);
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 CONTENT_SETTING_ALLOW; 640 CONTENT_SETTING_ALLOW;
641 } 641 }
642 642
643 gcm::GCMDriver* PushMessagingServiceImpl::GetGCMDriver() const { 643 gcm::GCMDriver* PushMessagingServiceImpl::GetGCMDriver() const {
644 gcm::GCMProfileService* gcm_profile_service = 644 gcm::GCMProfileService* gcm_profile_service =
645 gcm::GCMProfileServiceFactory::GetForProfile(profile_); 645 gcm::GCMProfileServiceFactory::GetForProfile(profile_);
646 CHECK(gcm_profile_service); 646 CHECK(gcm_profile_service);
647 CHECK(gcm_profile_service->driver()); 647 CHECK(gcm_profile_service->driver());
648 return gcm_profile_service->driver(); 648 return gcm_profile_service->driver();
649 } 649 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698