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

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: Undo accidental test change 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
« no previous file with comments | « chrome/browser/push_messaging/push_messaging_browsertest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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());
308 307
309 if (push_registration_count_ + pending_push_registration_count_ 308 if (push_registration_count_ + pending_push_registration_count_
310 >= kMaxRegistrations) { 309 >= kMaxRegistrations) {
311 RegisterEnd(callback, 310 RegisterEnd(callback,
312 std::string(), 311 std::string(),
313 content::PUSH_REGISTRATION_STATUS_LIMIT_REACHED); 312 content::PUSH_REGISTRATION_STATUS_LIMIT_REACHED);
314 return; 313 return;
315 } 314 }
316 315
317 content::RenderFrameHost* render_frame_host = 316 content::RenderFrameHost* render_frame_host =
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 354
356 void PushMessagingServiceImpl::RegisterFromWorker( 355 void PushMessagingServiceImpl::RegisterFromWorker(
357 const GURL& requesting_origin, 356 const GURL& requesting_origin,
358 int64 service_worker_registration_id, 357 int64 service_worker_registration_id,
359 const std::string& sender_id, 358 const std::string& sender_id,
360 bool user_visible, 359 bool user_visible,
361 const content::PushMessagingService::RegisterCallback& register_callback) { 360 const content::PushMessagingService::RegisterCallback& register_callback) {
362 PushMessagingAppIdentifier app_identifier = 361 PushMessagingAppIdentifier app_identifier =
363 PushMessagingAppIdentifier::Generate(requesting_origin, 362 PushMessagingAppIdentifier::Generate(requesting_origin,
364 service_worker_registration_id); 363 service_worker_registration_id);
365 DCHECK(app_identifier.IsValid());
366 364
367 if (profile_->GetPrefs()->GetInteger( 365 if (profile_->GetPrefs()->GetInteger(
368 prefs::kPushMessagingRegistrationCount) >= kMaxRegistrations) { 366 prefs::kPushMessagingRegistrationCount) >= kMaxRegistrations) {
369 RegisterEnd(register_callback, std::string(), 367 RegisterEnd(register_callback, std::string(),
370 content::PUSH_REGISTRATION_STATUS_LIMIT_REACHED); 368 content::PUSH_REGISTRATION_STATUS_LIMIT_REACHED);
371 return; 369 return;
372 } 370 }
373 371
374 // TODO(peter): Consider |user_visible| when getting the permission status 372 // TODO(peter): Consider |user_visible| when getting the permission status
375 // for registering from a worker. 373 // for registering from a worker.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 void PushMessagingServiceImpl::DidRegister( 414 void PushMessagingServiceImpl::DidRegister(
417 const PushMessagingAppIdentifier& app_identifier, 415 const PushMessagingAppIdentifier& app_identifier,
418 const content::PushMessagingService::RegisterCallback& callback, 416 const content::PushMessagingService::RegisterCallback& callback,
419 const std::string& registration_id, 417 const std::string& registration_id,
420 gcm::GCMClient::Result result) { 418 gcm::GCMClient::Result result) {
421 content::PushRegistrationStatus status = 419 content::PushRegistrationStatus status =
422 content::PUSH_REGISTRATION_STATUS_SERVICE_ERROR; 420 content::PUSH_REGISTRATION_STATUS_SERVICE_ERROR;
423 switch (result) { 421 switch (result) {
424 case gcm::GCMClient::SUCCESS: 422 case gcm::GCMClient::SUCCESS:
425 status = content::PUSH_REGISTRATION_STATUS_SUCCESS_FROM_PUSH_SERVICE; 423 status = content::PUSH_REGISTRATION_STATUS_SUCCESS_FROM_PUSH_SERVICE;
426 app_identifier.PersistToDisk(profile_); 424 app_identifier.PersistToPrefs(profile_);
427 IncreasePushRegistrationCount(1, false /* is_pending */); 425 IncreasePushRegistrationCount(1, false /* is_pending */);
428 break; 426 break;
429 case gcm::GCMClient::INVALID_PARAMETER: 427 case gcm::GCMClient::INVALID_PARAMETER:
430 case gcm::GCMClient::GCM_DISABLED: 428 case gcm::GCMClient::GCM_DISABLED:
431 case gcm::GCMClient::ASYNC_OPERATION_PENDING: 429 case gcm::GCMClient::ASYNC_OPERATION_PENDING:
432 case gcm::GCMClient::SERVER_ERROR: 430 case gcm::GCMClient::SERVER_ERROR:
433 case gcm::GCMClient::UNKNOWN_ERROR: 431 case gcm::GCMClient::UNKNOWN_ERROR:
434 status = content::PUSH_REGISTRATION_STATUS_SERVICE_ERROR; 432 status = content::PUSH_REGISTRATION_STATUS_SERVICE_ERROR;
435 break; 433 break;
436 case gcm::GCMClient::NETWORK_ERROR: 434 case gcm::GCMClient::NETWORK_ERROR:
(...skipping 29 matching lines...) Expand all
466 464
467 // Unregister methods ---------------------------------------------------------- 465 // Unregister methods ----------------------------------------------------------
468 466
469 void PushMessagingServiceImpl::Unregister( 467 void PushMessagingServiceImpl::Unregister(
470 const GURL& requesting_origin, 468 const GURL& requesting_origin,
471 int64 service_worker_registration_id, 469 int64 service_worker_registration_id,
472 const std::string& sender_id, 470 const std::string& sender_id,
473 const content::PushMessagingService::UnregisterCallback& callback) { 471 const content::PushMessagingService::UnregisterCallback& callback) {
474 PushMessagingAppIdentifier app_identifier = PushMessagingAppIdentifier::Get( 472 PushMessagingAppIdentifier app_identifier = PushMessagingAppIdentifier::Get(
475 profile_, requesting_origin, service_worker_registration_id); 473 profile_, requesting_origin, service_worker_registration_id);
476 if (!app_identifier.IsValid()) { 474 if (app_identifier.is_null()) {
477 if (!callback.is_null()) { 475 if (!callback.is_null()) {
478 callback.Run( 476 callback.Run(
479 content::PUSH_UNREGISTRATION_STATUS_SUCCESS_WAS_NOT_REGISTERED); 477 content::PUSH_UNREGISTRATION_STATUS_SUCCESS_WAS_NOT_REGISTERED);
480 } 478 }
481 return; 479 return;
482 } 480 }
483 481
484 Unregister(app_identifier.app_id(), sender_id, callback); 482 Unregister(app_identifier.app_id(), sender_id, callback);
485 } 483 }
486 484
487 void PushMessagingServiceImpl::Unregister( 485 void PushMessagingServiceImpl::Unregister(
488 const std::string& app_id, 486 const std::string& app_id,
489 const std::string& sender_id, 487 const std::string& sender_id,
490 const content::PushMessagingService::UnregisterCallback& callback) { 488 const content::PushMessagingService::UnregisterCallback& callback) {
491 // Delete the mapping for this app_id, to guarantee that no messages get 489 // Delete the mapping for this app_id, to guarantee that no messages get
492 // delivered in future (even if unregistration fails). 490 // delivered in future (even if unregistration fails).
493 // TODO(johnme): Instead of deleting these app ids, store them elsewhere, and 491 // 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). 492 // retry unregistration if it fails due to network errors (crbug.com/465399).
495 PushMessagingAppIdentifier app_identifier = 493 PushMessagingAppIdentifier app_identifier =
496 PushMessagingAppIdentifier::Get(profile_, app_id); 494 PushMessagingAppIdentifier::Get(profile_, app_id);
497 bool was_registered = app_identifier.IsValid(); 495 bool was_registered = !app_identifier.is_null();
498 if (was_registered) 496 if (was_registered)
499 app_identifier.DeleteFromDisk(profile_); 497 app_identifier.DeleteFromPrefs(profile_);
500 498
501 const auto& unregister_callback = 499 const auto& unregister_callback =
502 base::Bind(&PushMessagingServiceImpl::DidUnregister, 500 base::Bind(&PushMessagingServiceImpl::DidUnregister,
503 weak_factory_.GetWeakPtr(), 501 weak_factory_.GetWeakPtr(),
504 was_registered, callback); 502 was_registered, callback);
505 #if defined(OS_ANDROID) 503 #if defined(OS_ANDROID)
506 // On Android the backend is different, and requires the original sender_id. 504 // On Android the backend is different, and requires the original sender_id.
507 // UnregisterBecausePermissionRevoked sometimes calls us with an empty one. 505 // UnregisterBecausePermissionRevoked sometimes calls us with an empty one.
508 if (sender_id.empty()) 506 if (sender_id.empty())
509 unregister_callback.Run(gcm::GCMClient::INVALID_PARAMETER); 507 unregister_callback.Run(gcm::GCMClient::INVALID_PARAMETER);
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 CONTENT_SETTING_ALLOW; 638 CONTENT_SETTING_ALLOW;
641 } 639 }
642 640
643 gcm::GCMDriver* PushMessagingServiceImpl::GetGCMDriver() const { 641 gcm::GCMDriver* PushMessagingServiceImpl::GetGCMDriver() const {
644 gcm::GCMProfileService* gcm_profile_service = 642 gcm::GCMProfileService* gcm_profile_service =
645 gcm::GCMProfileServiceFactory::GetForProfile(profile_); 643 gcm::GCMProfileServiceFactory::GetForProfile(profile_);
646 CHECK(gcm_profile_service); 644 CHECK(gcm_profile_service);
647 CHECK(gcm_profile_service->driver()); 645 CHECK(gcm_profile_service->driver());
648 return gcm_profile_service->driver(); 646 return gcm_profile_service->driver();
649 } 647 }
OLDNEW
« no previous file with comments | « chrome/browser/push_messaging/push_messaging_browsertest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698