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

Side by Side Diff: components/copresence/rpc/rpc_handler.cc

Issue 613043002: Switching to C++11 range-based for loops (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 "components/copresence/rpc/rpc_handler.h" 5 #include "components/copresence/rpc/rpc_handler.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 152
153 RpcHandler::RpcHandler(CopresenceDelegate* delegate) 153 RpcHandler::RpcHandler(CopresenceDelegate* delegate)
154 : delegate_(delegate), 154 : delegate_(delegate),
155 invalid_audio_token_cache_( 155 invalid_audio_token_cache_(
156 base::TimeDelta::FromMilliseconds(kInvalidTokenExpiryTimeMs), 156 base::TimeDelta::FromMilliseconds(kInvalidTokenExpiryTimeMs),
157 kMaxInvalidTokens), 157 kMaxInvalidTokens),
158 server_post_callback_(base::Bind(&RpcHandler::SendHttpPost, 158 server_post_callback_(base::Bind(&RpcHandler::SendHttpPost,
159 base::Unretained(this))) {} 159 base::Unretained(this))) {}
160 160
161 RpcHandler::~RpcHandler() { 161 RpcHandler::~RpcHandler() {
162 for (std::set<HttpPost*>::iterator post = pending_posts_.begin(); 162 for (HttpPost* post : pending_posts_) {
163 post != pending_posts_.end(); ++post) { 163 delete post;
164 delete *post;
165 } 164 }
166 165
167 if (delegate_ && delegate_->GetWhispernetClient()) { 166 if (delegate_ && delegate_->GetWhispernetClient()) {
168 delegate_->GetWhispernetClient()->RegisterTokensCallback( 167 delegate_->GetWhispernetClient()->RegisterTokensCallback(
169 WhispernetClient::TokensCallback()); 168 WhispernetClient::TokensCallback());
170 } 169 }
171 } 170 }
172 171
173 void RpcHandler::Initialize(const SuccessCallback& init_done_callback) { 172 void RpcHandler::Initialize(const SuccessCallback& init_done_callback) {
174 scoped_ptr<RegisterDeviceRequest> request(new RegisterDeviceRequest); 173 scoped_ptr<RegisterDeviceRequest> request(new RegisterDeviceRequest);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 // On destruction, this request will be cancelled. 217 // On destruction, this request will be cancelled.
219 base::Bind(&RpcHandler::ReportResponseHandler, 218 base::Bind(&RpcHandler::ReportResponseHandler,
220 base::Unretained(this), 219 base::Unretained(this),
221 status_callback)); 220 status_callback));
222 } 221 }
223 222
224 void RpcHandler::ReportTokens(const std::vector<AudioToken>& tokens) { 223 void RpcHandler::ReportTokens(const std::vector<AudioToken>& tokens) {
225 DCHECK(!tokens.empty()); 224 DCHECK(!tokens.empty());
226 225
227 scoped_ptr<ReportRequest> request(new ReportRequest); 226 scoped_ptr<ReportRequest> request(new ReportRequest);
228 for (size_t i = 0; i < tokens.size(); ++i) { 227 for (const AudioToken& token : tokens) {
229 if (invalid_audio_token_cache_.HasKey(ToUrlSafe(tokens[i].token))) 228 if (invalid_audio_token_cache_.HasKey(ToUrlSafe(token.token)))
230 continue; 229 continue;
231 DVLOG(3) << "Sending token " << tokens[i].token << " to server."; 230 DVLOG(3) << "Sending token " << token.token << " to server.";
232 AddTokenToRequest(request.get(), tokens[i]); 231 AddTokenToRequest(request.get(), token);
233 } 232 }
234 SendReportRequest(request.Pass()); 233 SendReportRequest(request.Pass());
235 } 234 }
236 235
237 void RpcHandler::ConnectToWhispernet() { 236 void RpcHandler::ConnectToWhispernet() {
238 WhispernetClient* whispernet_client = delegate_->GetWhispernetClient(); 237 WhispernetClient* whispernet_client = delegate_->GetWhispernetClient();
239 238
240 // |directive_handler_| will be destructed with us, so unretained is safe. 239 // |directive_handler_| will be destructed with us, so unretained is safe.
241 directive_handler_.reset(new DirectiveHandler); 240 directive_handler_.reset(new DirectiveHandler);
242 directive_handler_->Initialize( 241 directive_handler_->Initialize(
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 status_callback.Run(FAIL); 307 status_callback.Run(FAIL);
309 return; 308 return;
310 } 309 }
311 310
312 if (ReportErrorLogged(response)) { 311 if (ReportErrorLogged(response)) {
313 if (!status_callback.is_null()) 312 if (!status_callback.is_null())
314 status_callback.Run(FAIL); 313 status_callback.Run(FAIL);
315 return; 314 return;
316 } 315 }
317 316
318 const RepeatedPtrField<MessageResult>& message_results = 317 for (const MessageResult& result :
319 response.manage_messages_response().published_message_result(); 318 response.manage_messages_response().published_message_result()) {
320 for (int i = 0; i < message_results.size(); ++i) { 319 DVLOG(2) << "Published message with id " << result.published_message_id();
321 DVLOG(2) << "Published message with id "
322 << message_results.Get(i).published_message_id();
323 } 320 }
324 321
325 const RepeatedPtrField<SubscriptionResult>& subscription_results = 322 for (const SubscriptionResult& result :
326 response.manage_subscriptions_response().subscription_result(); 323 response.manage_subscriptions_response().subscription_result()) {
327 for (int i = 0; i < subscription_results.size(); ++i) { 324 DVLOG(2) << "Created subscription with id " << result.subscription_id();
328 DVLOG(2) << "Created subscription with id "
329 << subscription_results.Get(i).subscription_id();
330 } 325 }
331 326
332 if (response.has_update_signals_response()) { 327 if (response.has_update_signals_response()) {
333 const UpdateSignalsResponse& update_response = 328 const UpdateSignalsResponse& update_response =
334 response.update_signals_response(); 329 response.update_signals_response();
335 DispatchMessages(update_response.message()); 330 DispatchMessages(update_response.message());
336 331
337 if (directive_handler_.get()) { 332 if (directive_handler_.get()) {
338 for (int i = 0; i < update_response.directive_size(); ++i) 333 for (const Directive& directive : update_response.directive())
339 directive_handler_->AddDirective(update_response.directive(i)); 334 directive_handler_->AddDirective(directive);
340 } else { 335 } else {
341 DVLOG(1) << "No directive handler."; 336 DVLOG(1) << "No directive handler.";
342 } 337 }
343 338
344 const RepeatedPtrField<Token>& tokens = update_response.token(); 339 for (const Token& token : update_response.token()) {
345 for (int i = 0; i < tokens.size(); ++i) { 340 switch (token.status()) {
346 switch (tokens.Get(i).status()) {
347 case VALID: 341 case VALID:
348 // TODO(rkc/ckehoe): Store the token in a |valid_token_cache_| with a 342 // TODO(rkc/ckehoe): Store the token in a |valid_token_cache_| with a
349 // short TTL (like 10s) and send it up with every report request. 343 // short TTL (like 10s) and send it up with every report request.
350 // Then we'll still get messages while we're waiting to hear it again. 344 // Then we'll still get messages while we're waiting to hear it again.
351 VLOG(1) << "Got valid token " << tokens.Get(i).id(); 345 VLOG(1) << "Got valid token " << token.id();
352 break; 346 break;
353 case INVALID: 347 case INVALID:
354 DVLOG(3) << "Discarding invalid token " << tokens.Get(i).id(); 348 DVLOG(3) << "Discarding invalid token " << token.id();
355 invalid_audio_token_cache_.Add(tokens.Get(i).id(), true); 349 invalid_audio_token_cache_.Add(token.id(), true);
356 break; 350 break;
357 default: 351 default:
358 DVLOG(2) << "Token " << tokens.Get(i).id() << " has status code " 352 DVLOG(2) << "Token " << token.id() << " has status code "
359 << tokens.Get(i).status(); 353 << token.status();
360 } 354 }
361 } 355 }
362 } 356 }
363 357
364 // TODO(ckehoe): Return a more detailed status response. 358 // TODO(ckehoe): Return a more detailed status response.
365 if (!status_callback.is_null()) 359 if (!status_callback.is_null())
366 status_callback.Run(SUCCESS); 360 status_callback.Run(SUCCESS);
367 } 361 }
368 362
369 void RpcHandler::ProcessRemovedOperations(const ReportRequest& request) { 363 void RpcHandler::ProcessRemovedOperations(const ReportRequest& request) {
370 // Remove unpublishes. 364 // Remove unpublishes.
371 if (request.has_manage_messages_request()) { 365 if (request.has_manage_messages_request()) {
372 const RepeatedPtrField<std::string>& unpublishes = 366 for (const std::string& unpublish :
373 request.manage_messages_request().id_to_unpublish(); 367 request.manage_messages_request().id_to_unpublish()) {
374 for (int i = 0; i < unpublishes.size(); ++i) 368 directive_handler_->RemoveDirectives(unpublish);
375 directive_handler_->RemoveDirectives(unpublishes.Get(i)); 369 }
376 } 370 }
377 371
378 // Remove unsubscribes. 372 // Remove unsubscribes.
379 if (request.has_manage_subscriptions_request()) { 373 if (request.has_manage_subscriptions_request()) {
380 const RepeatedPtrField<std::string>& unsubscribes = 374 for (const std::string& unsubscribe :
381 request.manage_subscriptions_request().id_to_unsubscribe(); 375 request.manage_subscriptions_request().id_to_unsubscribe()) {
382 for (int i = 0; i < unsubscribes.size(); ++i) 376 directive_handler_->RemoveDirectives(unsubscribe);
383 directive_handler_->RemoveDirectives(unsubscribes.Get(i)); 377 }
384 } 378 }
385 } 379 }
386 380
387 void RpcHandler::AddPlayingTokens(ReportRequest* request) { 381 void RpcHandler::AddPlayingTokens(ReportRequest* request) {
388 if (!directive_handler_) 382 if (!directive_handler_)
389 return; 383 return;
390 384
391 const std::string& audible_token = directive_handler_->CurrentAudibleToken(); 385 const std::string& audible_token = directive_handler_->CurrentAudibleToken();
392 const std::string& inaudible_token = 386 const std::string& inaudible_token =
393 directive_handler_->CurrentInaudibleToken(); 387 directive_handler_->CurrentInaudibleToken();
394 388
395 if (!audible_token.empty()) 389 if (!audible_token.empty())
396 AddTokenToRequest(request, AudioToken(audible_token, true)); 390 AddTokenToRequest(request, AudioToken(audible_token, true));
397 if (!inaudible_token.empty()) 391 if (!inaudible_token.empty())
398 AddTokenToRequest(request, AudioToken(inaudible_token, false)); 392 AddTokenToRequest(request, AudioToken(inaudible_token, false));
399 } 393 }
400 394
401 void RpcHandler::DispatchMessages( 395 void RpcHandler::DispatchMessages(
402 const RepeatedPtrField<SubscribedMessage>& messages) { 396 const RepeatedPtrField<SubscribedMessage>& messages) {
403 if (messages.size() == 0) 397 if (messages.size() == 0)
404 return; 398 return;
405 399
406 // Index the messages by subscription id. 400 // Index the messages by subscription id.
407 std::map<std::string, std::vector<Message>> messages_by_subscription; 401 std::map<std::string, std::vector<Message>> messages_by_subscription;
408 DVLOG(3) << "Dispatching " << messages.size() << " messages"; 402 DVLOG(3) << "Dispatching " << messages.size() << " messages";
409 for (int m = 0; m < messages.size(); ++m) { 403 for (const SubscribedMessage& message : messages) {
410 const RepeatedPtrField<std::string>& subscription_ids = 404 for (const std::string& subscription_id : message.subscription_id()) {
411 messages.Get(m).subscription_id(); 405 messages_by_subscription[subscription_id].push_back(
412 for (int s = 0; s < subscription_ids.size(); ++s) { 406 message.published_message());
413 messages_by_subscription[subscription_ids.Get(s)].push_back(
414 messages.Get(m).published_message());
415 } 407 }
416 } 408 }
417 409
418 // Send the messages for each subscription. 410 // Send the messages for each subscription.
419 for (std::map<std::string, std::vector<Message>>::const_iterator 411 for (const std::pair<std::string, std::vector<Message>>& map_entry :
rkc 2014/10/01 03:48:32 const auto&
Charlie 2014/10/06 19:09:56 At first I thought this was useful documentation.
420 subscription = messages_by_subscription.begin(); 412 messages_by_subscription) {
421 subscription != messages_by_subscription.end();
422 ++subscription) {
423 // TODO(ckehoe): Once we have the app ID from the server, we need to pass 413 // TODO(ckehoe): Once we have the app ID from the server, we need to pass
424 // it in here and get rid of the app id registry from the main API class. 414 // it in here and get rid of the app id registry from the main API class.
425 delegate_->HandleMessages("", subscription->first, subscription->second); 415 const std::string& subscription = map_entry.first;
416 const std::vector<Message>& messages = map_entry.second;
417 delegate_->HandleMessages("", subscription, messages);
426 } 418 }
427 } 419 }
428 420
429 RequestHeader* RpcHandler::CreateRequestHeader( 421 RequestHeader* RpcHandler::CreateRequestHeader(
430 const std::string& client_name) const { 422 const std::string& client_name) const {
431 RequestHeader* header = new RequestHeader; 423 RequestHeader* header = new RequestHeader;
432 424
433 header->set_allocated_framework_version(CreateVersion( 425 header->set_allocated_framework_version(CreateVersion(
434 "Chrome", delegate_->GetPlatformVersionString())); 426 "Chrome", delegate_->GetPlatformVersionString()));
435 if (!client_name.empty()) { 427 if (!client_name.empty()) {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 bool audible, 481 bool audible,
490 const WhispernetClient::SamplesCallback& samples_callback) { 482 const WhispernetClient::SamplesCallback& samples_callback) {
491 WhispernetClient* whispernet_client = delegate_->GetWhispernetClient(); 483 WhispernetClient* whispernet_client = delegate_->GetWhispernetClient();
492 if (whispernet_client) { 484 if (whispernet_client) {
493 whispernet_client->RegisterSamplesCallback(samples_callback); 485 whispernet_client->RegisterSamplesCallback(samples_callback);
494 whispernet_client->EncodeToken(token, audible); 486 whispernet_client->EncodeToken(token, audible);
495 } 487 }
496 } 488 }
497 489
498 } // namespace copresence 490 } // namespace copresence
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698