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/gcm_service.h" | 5 #include "chrome/browser/services/gcm/gcm_service.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 class GCMService::IOWorker : public GCMClient::Delegate { | 125 class GCMService::IOWorker : public GCMClient::Delegate { |
126 public: | 126 public: |
127 // Called on UI thread. | 127 // Called on UI thread. |
128 IOWorker(); | 128 IOWorker(); |
129 virtual ~IOWorker(); | 129 virtual ~IOWorker(); |
130 | 130 |
131 // Overridden from GCMClient::Delegate: | 131 // Overridden from GCMClient::Delegate: |
132 // Called on IO thread. | 132 // Called on IO thread. |
133 virtual void OnRegisterFinished(const std::string& app_id, | 133 virtual void OnRegisterFinished(const std::string& app_id, |
134 const std::string& registration_id, | 134 const std::string& registration_id, |
135 GCMClient::Result result) OVERRIDE; | 135 Result result) OVERRIDE; |
136 virtual void OnUnregisterFinished(const std::string& app_id, | 136 virtual void OnUnregisterFinished(const std::string& app_id, |
137 GCMClient::Result result) OVERRIDE; | 137 Result result) OVERRIDE; |
138 virtual void OnSendFinished(const std::string& app_id, | 138 virtual void OnSendFinished(const std::string& app_id, |
139 const std::string& message_id, | 139 const std::string& message_id, |
140 GCMClient::Result result) OVERRIDE; | 140 Result result) OVERRIDE; |
141 virtual void OnMessageReceived( | 141 virtual void OnMessageReceived( |
142 const std::string& app_id, | 142 const std::string& app_id, |
143 const GCMClient::IncomingMessage& message) OVERRIDE; | 143 const IncomingMessage& message) OVERRIDE; |
144 virtual void OnMessagesDeleted(const std::string& app_id) OVERRIDE; | 144 virtual void OnMessagesDeleted(const std::string& app_id) OVERRIDE; |
145 virtual void OnMessageSendError( | 145 virtual void OnMessageSendError( |
146 const std::string& app_id, | 146 const std::string& app_id, |
147 const GCMClient::SendErrorDetails& send_error_details) OVERRIDE; | 147 const SendErrorDetails& send_error_details) OVERRIDE; |
148 virtual void OnGCMReady() OVERRIDE; | 148 virtual void OnGCMReady() OVERRIDE; |
149 | 149 |
150 // Called on IO thread. | 150 // Called on IO thread. |
151 void Initialize(scoped_ptr<GCMClientFactory> gcm_client_factory, | 151 void Initialize(scoped_ptr<GCMClientFactory> gcm_client_factory, |
152 const base::FilePath& store_path, | 152 const base::FilePath& store_path, |
153 const std::vector<std::string>& account_ids, | 153 const std::vector<std::string>& account_ids, |
154 const scoped_refptr<net::URLRequestContextGetter>& | 154 const scoped_refptr<net::URLRequestContextGetter>& |
155 url_request_context_getter); | 155 url_request_context_getter); |
156 void Load(const base::WeakPtr<GCMService>& service); | 156 void Load(const base::WeakPtr<GCMService>& service); |
157 void Stop(); | 157 void Stop(); |
158 void CheckOut(); | 158 void CheckOut(); |
159 void Register(const std::string& app_id, | 159 void Register(const std::string& app_id, |
160 const std::vector<std::string>& sender_ids); | 160 const std::vector<std::string>& sender_ids); |
161 void Unregister(const std::string& app_id); | 161 void Unregister(const std::string& app_id); |
162 void Send(const std::string& app_id, | 162 void Send(const std::string& app_id, |
163 const std::string& receiver_id, | 163 const std::string& receiver_id, |
164 const GCMClient::OutgoingMessage& message); | 164 const OutgoingMessage& message); |
165 void GetGCMStatistics(bool clear_logs); | 165 void GetGCMStatistics(bool clear_logs); |
166 void SetGCMRecording(bool recording); | 166 void SetGCMRecording(bool recording); |
167 | 167 |
168 // For testing purpose. Can be called from UI thread. Use with care. | 168 // For testing purpose. Can be called from UI thread. Use with care. |
169 GCMClient* gcm_client_for_testing() const { return gcm_client_.get(); } | 169 GCMClient* gcm_client_for_testing() const { return gcm_client_.get(); } |
170 | 170 |
171 private: | 171 private: |
172 base::WeakPtr<GCMService> service_; | 172 base::WeakPtr<GCMService> service_; |
173 | 173 |
174 scoped_ptr<GCMClient> gcm_client_; | 174 scoped_ptr<GCMClient> gcm_client_; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 store_path, | 210 store_path, |
211 account_ids, | 211 account_ids, |
212 blocking_task_runner, | 212 blocking_task_runner, |
213 url_request_context_getter, | 213 url_request_context_getter, |
214 this); | 214 this); |
215 } | 215 } |
216 | 216 |
217 void GCMService::IOWorker::OnRegisterFinished( | 217 void GCMService::IOWorker::OnRegisterFinished( |
218 const std::string& app_id, | 218 const std::string& app_id, |
219 const std::string& registration_id, | 219 const std::string& registration_id, |
220 GCMClient::Result result) { | 220 Result result) { |
221 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 221 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
222 | 222 |
223 content::BrowserThread::PostTask(content::BrowserThread::UI, | 223 content::BrowserThread::PostTask(content::BrowserThread::UI, |
224 FROM_HERE, | 224 FROM_HERE, |
225 base::Bind(&GCMService::RegisterFinished, | 225 base::Bind(&GCMService::RegisterFinished, |
226 service_, | 226 service_, |
227 app_id, | 227 app_id, |
228 registration_id, | 228 registration_id, |
229 result)); | 229 result)); |
230 } | 230 } |
231 | 231 |
232 void GCMService::IOWorker::OnUnregisterFinished(const std::string& app_id, | 232 void GCMService::IOWorker::OnUnregisterFinished(const std::string& app_id, |
233 GCMClient::Result result) { | 233 Result result) { |
234 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 234 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
235 | 235 |
236 content::BrowserThread::PostTask( | 236 content::BrowserThread::PostTask( |
237 content::BrowserThread::UI, | 237 content::BrowserThread::UI, |
238 FROM_HERE, | 238 FROM_HERE, |
239 base::Bind(&GCMService::UnregisterFinished, service_, app_id, result)); | 239 base::Bind(&GCMService::UnregisterFinished, service_, app_id, result)); |
240 } | 240 } |
241 | 241 |
242 void GCMService::IOWorker::OnSendFinished(const std::string& app_id, | 242 void GCMService::IOWorker::OnSendFinished(const std::string& app_id, |
243 const std::string& message_id, | 243 const std::string& message_id, |
244 GCMClient::Result result) { | 244 Result result) { |
245 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 245 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
246 | 246 |
247 content::BrowserThread::PostTask(content::BrowserThread::UI, | 247 content::BrowserThread::PostTask(content::BrowserThread::UI, |
248 FROM_HERE, | 248 FROM_HERE, |
249 base::Bind(&GCMService::SendFinished, | 249 base::Bind(&GCMService::SendFinished, |
250 service_, | 250 service_, |
251 app_id, | 251 app_id, |
252 message_id, | 252 message_id, |
253 result)); | 253 result)); |
254 } | 254 } |
255 | 255 |
256 void GCMService::IOWorker::OnMessageReceived( | 256 void GCMService::IOWorker::OnMessageReceived( |
257 const std::string& app_id, | 257 const std::string& app_id, |
258 const GCMClient::IncomingMessage& message) { | 258 const IncomingMessage& message) { |
259 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 259 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
260 | 260 |
261 content::BrowserThread::PostTask(content::BrowserThread::UI, | 261 content::BrowserThread::PostTask(content::BrowserThread::UI, |
262 FROM_HERE, | 262 FROM_HERE, |
263 base::Bind(&GCMService::MessageReceived, | 263 base::Bind(&GCMService::MessageReceived, |
264 service_, | 264 service_, |
265 app_id, | 265 app_id, |
266 message)); | 266 message)); |
267 } | 267 } |
268 | 268 |
269 void GCMService::IOWorker::OnMessagesDeleted(const std::string& app_id) { | 269 void GCMService::IOWorker::OnMessagesDeleted(const std::string& app_id) { |
270 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 270 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
271 | 271 |
272 content::BrowserThread::PostTask(content::BrowserThread::UI, | 272 content::BrowserThread::PostTask(content::BrowserThread::UI, |
273 FROM_HERE, | 273 FROM_HERE, |
274 base::Bind(&GCMService::MessagesDeleted, | 274 base::Bind(&GCMService::MessagesDeleted, |
275 service_, | 275 service_, |
276 app_id)); | 276 app_id)); |
277 } | 277 } |
278 | 278 |
279 void GCMService::IOWorker::OnMessageSendError( | 279 void GCMService::IOWorker::OnMessageSendError( |
280 const std::string& app_id, | 280 const std::string& app_id, |
281 const GCMClient::SendErrorDetails& send_error_details) { | 281 const SendErrorDetails& send_error_details) { |
282 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 282 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
283 | 283 |
284 content::BrowserThread::PostTask(content::BrowserThread::UI, | 284 content::BrowserThread::PostTask(content::BrowserThread::UI, |
285 FROM_HERE, | 285 FROM_HERE, |
286 base::Bind(&GCMService::MessageSendError, | 286 base::Bind(&GCMService::MessageSendError, |
287 service_, | 287 service_, |
288 app_id, | 288 app_id, |
289 send_error_details)); | 289 send_error_details)); |
290 } | 290 } |
291 | 291 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 } | 327 } |
328 | 328 |
329 void GCMService::IOWorker::Unregister(const std::string& app_id) { | 329 void GCMService::IOWorker::Unregister(const std::string& app_id) { |
330 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 330 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
331 | 331 |
332 gcm_client_->Unregister(app_id); | 332 gcm_client_->Unregister(app_id); |
333 } | 333 } |
334 | 334 |
335 void GCMService::IOWorker::Send(const std::string& app_id, | 335 void GCMService::IOWorker::Send(const std::string& app_id, |
336 const std::string& receiver_id, | 336 const std::string& receiver_id, |
337 const GCMClient::OutgoingMessage& message) { | 337 const OutgoingMessage& message) { |
338 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 338 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
339 | 339 |
340 gcm_client_->Send(app_id, receiver_id, message); | 340 gcm_client_->Send(app_id, receiver_id, message); |
341 } | 341 } |
342 | 342 |
343 void GCMService::IOWorker::GetGCMStatistics(bool clear_logs) { | 343 void GCMService::IOWorker::GetGCMStatistics(bool clear_logs) { |
344 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 344 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
345 gcm::GCMClient::GCMStatistics stats; | 345 GCMClient::GCMStatistics stats; |
346 | 346 |
347 if (gcm_client_.get()) { | 347 if (gcm_client_.get()) { |
348 if (clear_logs) | 348 if (clear_logs) |
349 gcm_client_->ClearActivityLogs(); | 349 gcm_client_->ClearActivityLogs(); |
350 stats = gcm_client_->GetStatistics(); | 350 stats = gcm_client_->GetStatistics(); |
351 } | 351 } |
352 | 352 |
353 content::BrowserThread::PostTask( | 353 content::BrowserThread::PostTask( |
354 content::BrowserThread::UI, | 354 content::BrowserThread::UI, |
355 FROM_HERE, | 355 FROM_HERE, |
356 base::Bind(&GCMService::GetGCMStatisticsFinished, service_, stats)); | 356 base::Bind(&GCMService::GetGCMStatisticsFinished, service_, stats)); |
357 } | 357 } |
358 | 358 |
359 void GCMService::IOWorker::SetGCMRecording(bool recording) { | 359 void GCMService::IOWorker::SetGCMRecording(bool recording) { |
360 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 360 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
361 gcm::GCMClient::GCMStatistics stats; | 361 GCMClient::GCMStatistics stats; |
362 | 362 |
363 if (gcm_client_.get()) { | 363 if (gcm_client_.get()) { |
364 gcm_client_->SetRecording(recording); | 364 gcm_client_->SetRecording(recording); |
365 stats = gcm_client_->GetStatistics(); | 365 stats = gcm_client_->GetStatistics(); |
366 stats.gcm_client_created = true; | 366 stats.gcm_client_created = true; |
367 } | 367 } |
368 | 368 |
369 content::BrowserThread::PostTask( | 369 content::BrowserThread::PostTask( |
370 content::BrowserThread::UI, | 370 content::BrowserThread::UI, |
371 FROM_HERE, | 371 FROM_HERE, |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 } | 463 } |
464 | 464 |
465 void GCMService::Register(const std::string& app_id, | 465 void GCMService::Register(const std::string& app_id, |
466 const std::vector<std::string>& sender_ids, | 466 const std::vector<std::string>& sender_ids, |
467 RegisterCallback callback) { | 467 RegisterCallback callback) { |
468 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 468 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
469 DCHECK(!app_id.empty()); | 469 DCHECK(!app_id.empty()); |
470 DCHECK(!sender_ids.empty()); | 470 DCHECK(!sender_ids.empty()); |
471 DCHECK(!callback.is_null()); | 471 DCHECK(!callback.is_null()); |
472 | 472 |
473 GCMClient::Result result = EnsureAppReady(app_id); | 473 Result result = EnsureAppReady(app_id); |
474 if (result != GCMClient::SUCCESS) { | 474 if (result != RESULT_SUCCESS) { |
475 callback.Run(std::string(), result); | 475 callback.Run(std::string(), result); |
476 return; | 476 return; |
477 } | 477 } |
478 | 478 |
479 // If previous un/register operation is still in progress, bail out. | 479 // If previous un/register operation is still in progress, bail out. |
480 if (IsAsyncOperationPending(app_id)) { | 480 if (IsAsyncOperationPending(app_id)) { |
481 callback.Run(std::string(), GCMClient::ASYNC_OPERATION_PENDING); | 481 callback.Run(std::string(), RESULT_ASYNC_OPERATION_PENDING); |
482 return; | 482 return; |
483 } | 483 } |
484 | 484 |
485 register_callbacks_[app_id] = callback; | 485 register_callbacks_[app_id] = callback; |
486 | 486 |
487 // Delay the register operation until GCMClient is ready. | 487 // Delay the register operation until GCMClient is ready. |
488 if (!delayed_task_controller_->CanRunTaskWithoutDelay()) { | 488 if (!delayed_task_controller_->CanRunTaskWithoutDelay()) { |
489 delayed_task_controller_->AddTask(base::Bind(&GCMService::DoRegister, | 489 delayed_task_controller_->AddTask(base::Bind(&GCMService::DoRegister, |
490 weak_ptr_factory_.GetWeakPtr(), | 490 weak_ptr_factory_.GetWeakPtr(), |
491 app_id, | 491 app_id, |
(...skipping 26 matching lines...) Expand all Loading... |
518 app_id, | 518 app_id, |
519 normalized_sender_ids)); | 519 normalized_sender_ids)); |
520 } | 520 } |
521 | 521 |
522 void GCMService::Unregister(const std::string& app_id, | 522 void GCMService::Unregister(const std::string& app_id, |
523 UnregisterCallback callback) { | 523 UnregisterCallback callback) { |
524 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 524 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
525 DCHECK(!app_id.empty()); | 525 DCHECK(!app_id.empty()); |
526 DCHECK(!callback.is_null()); | 526 DCHECK(!callback.is_null()); |
527 | 527 |
528 GCMClient::Result result = EnsureAppReady(app_id); | 528 Result result = EnsureAppReady(app_id); |
529 if (result != GCMClient::SUCCESS) { | 529 if (result != RESULT_SUCCESS) { |
530 callback.Run(result); | 530 callback.Run(result); |
531 return; | 531 return; |
532 } | 532 } |
533 | 533 |
534 // If previous un/register operation is still in progress, bail out. | 534 // If previous un/register operation is still in progress, bail out. |
535 if (IsAsyncOperationPending(app_id)) { | 535 if (IsAsyncOperationPending(app_id)) { |
536 callback.Run(GCMClient::ASYNC_OPERATION_PENDING); | 536 callback.Run(RESULT_ASYNC_OPERATION_PENDING); |
537 return; | 537 return; |
538 } | 538 } |
539 | 539 |
540 unregister_callbacks_[app_id] = callback; | 540 unregister_callbacks_[app_id] = callback; |
541 | 541 |
542 // Delay the unregister operation until GCMClient is ready. | 542 // Delay the unregister operation until GCMClient is ready. |
543 if (!delayed_task_controller_->CanRunTaskWithoutDelay()) { | 543 if (!delayed_task_controller_->CanRunTaskWithoutDelay()) { |
544 delayed_task_controller_->AddTask(base::Bind(&GCMService::DoUnregister, | 544 delayed_task_controller_->AddTask(base::Bind(&GCMService::DoUnregister, |
545 weak_ptr_factory_.GetWeakPtr(), | 545 weak_ptr_factory_.GetWeakPtr(), |
546 app_id)); | 546 app_id)); |
(...skipping 12 matching lines...) Expand all Loading... |
559 content::BrowserThread::PostTask( | 559 content::BrowserThread::PostTask( |
560 content::BrowserThread::IO, | 560 content::BrowserThread::IO, |
561 FROM_HERE, | 561 FROM_HERE, |
562 base::Bind(&GCMService::IOWorker::Unregister, | 562 base::Bind(&GCMService::IOWorker::Unregister, |
563 base::Unretained(io_worker_.get()), | 563 base::Unretained(io_worker_.get()), |
564 app_id)); | 564 app_id)); |
565 } | 565 } |
566 | 566 |
567 void GCMService::Send(const std::string& app_id, | 567 void GCMService::Send(const std::string& app_id, |
568 const std::string& receiver_id, | 568 const std::string& receiver_id, |
569 const GCMClient::OutgoingMessage& message, | 569 const OutgoingMessage& message, |
570 SendCallback callback) { | 570 SendCallback callback) { |
571 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 571 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
572 DCHECK(!app_id.empty()); | 572 DCHECK(!app_id.empty()); |
573 DCHECK(!receiver_id.empty()); | 573 DCHECK(!receiver_id.empty()); |
574 DCHECK(!callback.is_null()); | 574 DCHECK(!callback.is_null()); |
575 | 575 |
576 GCMClient::Result result = EnsureAppReady(app_id); | 576 Result result = EnsureAppReady(app_id); |
577 if (result != GCMClient::SUCCESS) { | 577 if (result != RESULT_SUCCESS) { |
578 callback.Run(std::string(), result); | 578 callback.Run(std::string(), result); |
579 return; | 579 return; |
580 } | 580 } |
581 | 581 |
582 // If the message with send ID is still in progress, bail out. | 582 // If the message with send ID is still in progress, bail out. |
583 std::pair<std::string, std::string> key(app_id, message.id); | 583 std::pair<std::string, std::string> key(app_id, message.id); |
584 if (send_callbacks_.find(key) != send_callbacks_.end()) { | 584 if (send_callbacks_.find(key) != send_callbacks_.end()) { |
585 callback.Run(message.id, GCMClient::INVALID_PARAMETER); | 585 callback.Run(message.id, RESULT_INVALID_PARAMETER); |
586 return; | 586 return; |
587 } | 587 } |
588 | 588 |
589 send_callbacks_[key] = callback; | 589 send_callbacks_[key] = callback; |
590 | 590 |
591 // Delay the send operation until all GCMClient is ready. | 591 // Delay the send operation until all GCMClient is ready. |
592 if (!delayed_task_controller_->CanRunTaskWithoutDelay()) { | 592 if (!delayed_task_controller_->CanRunTaskWithoutDelay()) { |
593 delayed_task_controller_->AddTask(base::Bind(&GCMService::DoSend, | 593 delayed_task_controller_->AddTask(base::Bind(&GCMService::DoSend, |
594 weak_ptr_factory_.GetWeakPtr(), | 594 weak_ptr_factory_.GetWeakPtr(), |
595 app_id, | 595 app_id, |
596 receiver_id, | 596 receiver_id, |
597 message)); | 597 message)); |
598 return; | 598 return; |
599 } | 599 } |
600 | 600 |
601 DoSend(app_id, receiver_id, message); | 601 DoSend(app_id, receiver_id, message); |
602 } | 602 } |
603 | 603 |
604 void GCMService::DoSend(const std::string& app_id, | 604 void GCMService::DoSend(const std::string& app_id, |
605 const std::string& receiver_id, | 605 const std::string& receiver_id, |
606 const GCMClient::OutgoingMessage& message) { | 606 const OutgoingMessage& message) { |
607 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 607 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
608 content::BrowserThread::PostTask( | 608 content::BrowserThread::PostTask( |
609 content::BrowserThread::IO, | 609 content::BrowserThread::IO, |
610 FROM_HERE, | 610 FROM_HERE, |
611 base::Bind(&GCMService::IOWorker::Send, | 611 base::Bind(&GCMService::IOWorker::Send, |
612 base::Unretained(io_worker_.get()), | 612 base::Unretained(io_worker_.get()), |
613 app_id, | 613 app_id, |
614 receiver_id, | 614 receiver_id, |
615 message)); | 615 message)); |
616 } | 616 } |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 | 716 |
717 RemoveCachedData(); | 717 RemoveCachedData(); |
718 | 718 |
719 content::BrowserThread::PostTask( | 719 content::BrowserThread::PostTask( |
720 content::BrowserThread::IO, | 720 content::BrowserThread::IO, |
721 FROM_HERE, | 721 FROM_HERE, |
722 base::Bind(&GCMService::IOWorker::CheckOut, | 722 base::Bind(&GCMService::IOWorker::CheckOut, |
723 base::Unretained(io_worker_.get()))); | 723 base::Unretained(io_worker_.get()))); |
724 } | 724 } |
725 | 725 |
726 GCMClient::Result GCMService::EnsureAppReady(const std::string& app_id) { | 726 Result GCMService::EnsureAppReady(const std::string& app_id) { |
727 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 727 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
728 // Ensure that check-in has been done. | 728 // Ensure that check-in has been done. |
729 EnsureLoaded(); | 729 EnsureLoaded(); |
730 | 730 |
731 // If the service was not started, bail out. | 731 // If the service was not started, bail out. |
732 if (account_id_.empty()) | 732 if (account_id_.empty()) |
733 return GCMClient::NOT_SIGNED_IN; | 733 return RESULT_NOT_SIGNED_IN; |
734 | 734 |
735 return GCMClient::SUCCESS; | 735 return RESULT_SUCCESS; |
736 } | 736 } |
737 | 737 |
738 bool GCMService::IsAsyncOperationPending(const std::string& app_id) const { | 738 bool GCMService::IsAsyncOperationPending(const std::string& app_id) const { |
739 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 739 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
740 return register_callbacks_.find(app_id) != register_callbacks_.end() || | 740 return register_callbacks_.find(app_id) != register_callbacks_.end() || |
741 unregister_callbacks_.find(app_id) != unregister_callbacks_.end(); | 741 unregister_callbacks_.find(app_id) != unregister_callbacks_.end(); |
742 } | 742 } |
743 | 743 |
744 void GCMService::RegisterFinished(const std::string& app_id, | 744 void GCMService::RegisterFinished(const std::string& app_id, |
745 const std::string& registration_id, | 745 const std::string& registration_id, |
746 GCMClient::Result result) { | 746 Result result) { |
747 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 747 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
748 | 748 |
749 std::map<std::string, RegisterCallback>::iterator callback_iter = | 749 std::map<std::string, RegisterCallback>::iterator callback_iter = |
750 register_callbacks_.find(app_id); | 750 register_callbacks_.find(app_id); |
751 if (callback_iter == register_callbacks_.end()) { | 751 if (callback_iter == register_callbacks_.end()) { |
752 // The callback could have been removed when the app is uninstalled. | 752 // The callback could have been removed when the app is uninstalled. |
753 return; | 753 return; |
754 } | 754 } |
755 | 755 |
756 RegisterCallback callback = callback_iter->second; | 756 RegisterCallback callback = callback_iter->second; |
757 register_callbacks_.erase(callback_iter); | 757 register_callbacks_.erase(callback_iter); |
758 callback.Run(registration_id, result); | 758 callback.Run(registration_id, result); |
759 } | 759 } |
760 | 760 |
761 void GCMService::UnregisterFinished(const std::string& app_id, | 761 void GCMService::UnregisterFinished(const std::string& app_id, |
762 GCMClient::Result result) { | 762 Result result) { |
763 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 763 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
764 | 764 |
765 std::map<std::string, UnregisterCallback>::iterator callback_iter = | 765 std::map<std::string, UnregisterCallback>::iterator callback_iter = |
766 unregister_callbacks_.find(app_id); | 766 unregister_callbacks_.find(app_id); |
767 if (callback_iter == unregister_callbacks_.end()) | 767 if (callback_iter == unregister_callbacks_.end()) |
768 return; | 768 return; |
769 | 769 |
770 UnregisterCallback callback = callback_iter->second; | 770 UnregisterCallback callback = callback_iter->second; |
771 unregister_callbacks_.erase(callback_iter); | 771 unregister_callbacks_.erase(callback_iter); |
772 callback.Run(result); | 772 callback.Run(result); |
773 } | 773 } |
774 | 774 |
775 void GCMService::SendFinished(const std::string& app_id, | 775 void GCMService::SendFinished(const std::string& app_id, |
776 const std::string& message_id, | 776 const std::string& message_id, |
777 GCMClient::Result result) { | 777 Result result) { |
778 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 778 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
779 | 779 |
780 std::map<std::pair<std::string, std::string>, SendCallback>::iterator | 780 std::map<std::pair<std::string, std::string>, SendCallback>::iterator |
781 callback_iter = send_callbacks_.find( | 781 callback_iter = send_callbacks_.find( |
782 std::pair<std::string, std::string>(app_id, message_id)); | 782 std::pair<std::string, std::string>(app_id, message_id)); |
783 if (callback_iter == send_callbacks_.end()) { | 783 if (callback_iter == send_callbacks_.end()) { |
784 // The callback could have been removed when the app is uninstalled. | 784 // The callback could have been removed when the app is uninstalled. |
785 return; | 785 return; |
786 } | 786 } |
787 | 787 |
788 SendCallback callback = callback_iter->second; | 788 SendCallback callback = callback_iter->second; |
789 send_callbacks_.erase(callback_iter); | 789 send_callbacks_.erase(callback_iter); |
790 callback.Run(message_id, result); | 790 callback.Run(message_id, result); |
791 } | 791 } |
792 | 792 |
793 void GCMService::MessageReceived(const std::string& app_id, | 793 void GCMService::MessageReceived(const std::string& app_id, |
794 GCMClient::IncomingMessage message) { | 794 IncomingMessage message) { |
795 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 795 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
796 | 796 |
797 // Drop the event if signed out. | 797 // Drop the event if signed out. |
798 if (account_id_.empty()) | 798 if (account_id_.empty()) |
799 return; | 799 return; |
800 | 800 |
801 GetAppHandler(app_id)->OnMessage(app_id, message); | 801 GetAppHandler(app_id)->OnMessage(app_id, message); |
802 } | 802 } |
803 | 803 |
804 void GCMService::MessagesDeleted(const std::string& app_id) { | 804 void GCMService::MessagesDeleted(const std::string& app_id) { |
805 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 805 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
806 | 806 |
807 // Drop the event if signed out. | 807 // Drop the event if signed out. |
808 if (account_id_.empty()) | 808 if (account_id_.empty()) |
809 return; | 809 return; |
810 | 810 |
811 GetAppHandler(app_id)->OnMessagesDeleted(app_id); | 811 GetAppHandler(app_id)->OnMessagesDeleted(app_id); |
812 } | 812 } |
813 | 813 |
814 void GCMService::MessageSendError( | 814 void GCMService::MessageSendError( |
815 const std::string& app_id, | 815 const std::string& app_id, |
816 const GCMClient::SendErrorDetails& send_error_details) { | 816 const SendErrorDetails& send_error_details) { |
817 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 817 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
818 | 818 |
819 // Drop the event if signed out. | 819 // Drop the event if signed out. |
820 if (account_id_.empty()) | 820 if (account_id_.empty()) |
821 return; | 821 return; |
822 | 822 |
823 GetAppHandler(app_id)->OnSendError(app_id, send_error_details); | 823 GetAppHandler(app_id)->OnSendError(app_id, send_error_details); |
824 } | 824 } |
825 | 825 |
826 void GCMService::GCMClientReady() { | 826 void GCMService::GCMClientReady() { |
(...skipping 14 matching lines...) Expand all Loading... |
841 return iter == app_handlers_.end() ? &default_app_handler_ : iter->second; | 841 return iter == app_handlers_.end() ? &default_app_handler_ : iter->second; |
842 } | 842 } |
843 | 843 |
844 void GCMService::GetGCMStatisticsFinished( | 844 void GCMService::GetGCMStatisticsFinished( |
845 GCMClient::GCMStatistics stats) { | 845 GCMClient::GCMStatistics stats) { |
846 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 846 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
847 request_gcm_statistics_callback_.Run(stats); | 847 request_gcm_statistics_callback_.Run(stats); |
848 } | 848 } |
849 | 849 |
850 } // namespace gcm | 850 } // namespace gcm |
OLD | NEW |