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

Side by Side Diff: components/gcm_driver/gcm_driver_desktop.cc

Issue 2473813002: Notify GCMAppHandlers when the store is reset, so they clear cached IDs (Closed)
Patch Set: Update Cryptauth comment Created 4 years, 1 month 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 "components/gcm_driver/gcm_driver_desktop.h" 5 #include "components/gcm_driver/gcm_driver_desktop.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 void OnMessageSendError( 59 void OnMessageSendError(
60 const std::string& app_id, 60 const std::string& app_id,
61 const GCMClient::SendErrorDetails& send_error_details) override; 61 const GCMClient::SendErrorDetails& send_error_details) override;
62 void OnSendAcknowledged(const std::string& app_id, 62 void OnSendAcknowledged(const std::string& app_id,
63 const std::string& message_id) override; 63 const std::string& message_id) override;
64 void OnGCMReady(const std::vector<AccountMapping>& account_mappings, 64 void OnGCMReady(const std::vector<AccountMapping>& account_mappings,
65 const base::Time& last_token_fetch_time) override; 65 const base::Time& last_token_fetch_time) override;
66 void OnActivityRecorded() override; 66 void OnActivityRecorded() override;
67 void OnConnected(const net::IPEndPoint& ip_endpoint) override; 67 void OnConnected(const net::IPEndPoint& ip_endpoint) override;
68 void OnDisconnected() override; 68 void OnDisconnected() override;
69 void OnStoreReset() override;
69 70
70 // Called on IO thread. 71 // Called on IO thread.
71 void Initialize( 72 void Initialize(
72 std::unique_ptr<GCMClientFactory> gcm_client_factory, 73 std::unique_ptr<GCMClientFactory> gcm_client_factory,
73 const GCMClient::ChromeBuildInfo& chrome_build_info, 74 const GCMClient::ChromeBuildInfo& chrome_build_info,
74 const base::FilePath& store_path, 75 const base::FilePath& store_path,
75 const scoped_refptr<net::URLRequestContextGetter>& request_context, 76 const scoped_refptr<net::URLRequestContextGetter>& request_context,
76 const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner); 77 const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner);
77 void Start(GCMClient::StartMode start_mode, 78 void Start(GCMClient::StartMode start_mode,
78 const base::WeakPtr<GCMDriverDesktop>& service); 79 const base::WeakPtr<GCMDriverDesktop>& service);
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 base::Bind(&GCMDriverDesktop::OnConnected, 297 base::Bind(&GCMDriverDesktop::OnConnected,
297 service_, 298 service_,
298 ip_endpoint)); 299 ip_endpoint));
299 } 300 }
300 301
301 void GCMDriverDesktop::IOWorker::OnDisconnected() { 302 void GCMDriverDesktop::IOWorker::OnDisconnected() {
302 ui_thread_->PostTask(FROM_HERE, 303 ui_thread_->PostTask(FROM_HERE,
303 base::Bind(&GCMDriverDesktop::OnDisconnected, service_)); 304 base::Bind(&GCMDriverDesktop::OnDisconnected, service_));
304 } 305 }
305 306
307 void GCMDriverDesktop::IOWorker::OnStoreReset() {
308 ui_thread_->PostTask(FROM_HERE,
309 base::Bind(&GCMDriverDesktop::OnStoreReset, service_));
310 }
311
306 void GCMDriverDesktop::IOWorker::Start( 312 void GCMDriverDesktop::IOWorker::Start(
307 GCMClient::StartMode start_mode, 313 GCMClient::StartMode start_mode,
308 const base::WeakPtr<GCMDriverDesktop>& service) { 314 const base::WeakPtr<GCMDriverDesktop>& service) {
309 DCHECK(io_thread_->RunsTasksOnCurrentThread()); 315 DCHECK(io_thread_->RunsTasksOnCurrentThread());
310 316
311 service_ = service; 317 service_ = service;
312 gcm_client_->Start(start_mode); 318 gcm_client_->Start(start_mode);
313 } 319 }
314 320
315 void GCMDriverDesktop::IOWorker::Stop() { 321 void GCMDriverDesktop::IOWorker::Stop() {
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after
1293 connected_ = false; 1299 connected_ = false;
1294 1300
1295 // Drop the event if the service has been stopped. 1301 // Drop the event if the service has been stopped.
1296 if (!gcm_started_) 1302 if (!gcm_started_)
1297 return; 1303 return;
1298 1304
1299 for (GCMConnectionObserver& observer : connection_observer_list_) 1305 for (GCMConnectionObserver& observer : connection_observer_list_)
1300 observer.OnDisconnected(); 1306 observer.OnDisconnected();
1301 } 1307 }
1302 1308
1309 void GCMDriverDesktop::OnStoreReset() {
1310 // Defensive copy in case OnStoreReset calls Add/RemoveAppHandler.
1311 std::vector<GCMAppHandler*> app_handler_values;
1312 for (const auto& key_value : app_handlers())
1313 app_handler_values.push_back(key_value.second);
1314 for (GCMAppHandler* app_handler : app_handler_values) {
1315 app_handler->OnStoreReset();
1316 // app_handler might now have been deleted.
1317 }
1318 }
1319
1303 void GCMDriverDesktop::GetGCMStatisticsFinished( 1320 void GCMDriverDesktop::GetGCMStatisticsFinished(
1304 const GCMClient::GCMStatistics& stats) { 1321 const GCMClient::GCMStatistics& stats) {
1305 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); 1322 DCHECK(ui_thread_->RunsTasksOnCurrentThread());
1306 1323
1307 // request_gcm_statistics_callback_ could be null when an activity, i.e. 1324 // request_gcm_statistics_callback_ could be null when an activity, i.e.
1308 // network activity, is triggered while gcm-intenals page is not open. 1325 // network activity, is triggered while gcm-intenals page is not open.
1309 if (!request_gcm_statistics_callback_.is_null()) 1326 if (!request_gcm_statistics_callback_.is_null())
1310 request_gcm_statistics_callback_.Run(stats); 1327 request_gcm_statistics_callback_.Run(stats);
1311 } 1328 }
1312 1329
1313 bool GCMDriverDesktop::TokenTupleComparer::operator()( 1330 bool GCMDriverDesktop::TokenTupleComparer::operator()(
1314 const TokenTuple& a, const TokenTuple& b) const { 1331 const TokenTuple& a, const TokenTuple& b) const {
1315 if (std::get<0>(a) < std::get<0>(b)) 1332 if (std::get<0>(a) < std::get<0>(b))
1316 return true; 1333 return true;
1317 if (std::get<0>(a) > std::get<0>(b)) 1334 if (std::get<0>(a) > std::get<0>(b))
1318 return false; 1335 return false;
1319 1336
1320 if (std::get<1>(a) < std::get<1>(b)) 1337 if (std::get<1>(a) < std::get<1>(b))
1321 return true; 1338 return true;
1322 if (std::get<1>(a) > std::get<1>(b)) 1339 if (std::get<1>(a) > std::get<1>(b))
1323 return false; 1340 return false;
1324 1341
1325 return std::get<2>(a) < std::get<2>(b); 1342 return std::get<2>(a) < std::get<2>(b);
1326 } 1343 }
1327 1344
1328 } // namespace gcm 1345 } // namespace gcm
OLDNEW
« no previous file with comments | « components/gcm_driver/gcm_driver_desktop.h ('k') | components/invalidation/impl/gcm_invalidation_bridge.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698