Commit 7e123266 authored by Lei Zhang's avatar Lei Zhang Committed by Commit Bot

Simplify AccessTokenService class in print preview.

Use a single map with a struct to keep track of incoming requests,
instead of two separate maps.

Change-Id: If5dbb806de2b42f95bbe2697512beaedd39c80df
Reviewed-on: https://chromium-review.googlesource.com/703493Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#506931}
parent dce2ff72
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include <ctype.h> #include <ctype.h>
#include <stddef.h> #include <stddef.h>
#include <map>
#include <memory> #include <memory>
#include <string> #include <string>
#include <utility> #include <utility>
...@@ -16,6 +15,7 @@ ...@@ -16,6 +15,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/bind_helpers.h" #include "base/bind_helpers.h"
#include "base/command_line.h" #include "base/command_line.h"
#include "base/containers/flat_map.h"
#include "base/i18n/number_formatting.h" #include "base/i18n/number_formatting.h"
#include "base/json/json_reader.h" #include "base/json/json_reader.h"
#include "base/lazy_instance.h" #include "base/lazy_instance.h"
...@@ -316,10 +316,12 @@ class PrintPreviewHandler::AccessTokenService ...@@ -316,10 +316,12 @@ class PrintPreviewHandler::AccessTokenService
} }
void RequestToken(const std::string& type, const std::string& callback_id) { void RequestToken(const std::string& type, const std::string& callback_id) {
if (requests_.find(type) != requests_.end()) if (requests_.find(type) != requests_.end()) {
return; // Should never happen, see cloud_print_interface.js NOTREACHED(); // Should never happen, see cloud_print_interface.js
return;
}
OAuth2TokenService* service = NULL; OAuth2TokenService* service = nullptr;
std::string account_id; std::string account_id;
if (type == "profile") { if (type == "profile") {
Profile* profile = Profile::FromWebUI(handler_->web_ui()); Profile* profile = Profile::FromWebUI(handler_->web_ui());
...@@ -340,17 +342,17 @@ class PrintPreviewHandler::AccessTokenService ...@@ -340,17 +342,17 @@ class PrintPreviewHandler::AccessTokenService
#endif #endif
} }
if (service) { if (!service) {
OAuth2TokenService::ScopeSet oauth_scopes;
oauth_scopes.insert(cloud_devices::kCloudPrintAuthScope);
std::unique_ptr<OAuth2TokenService::Request> request(
service->StartRequest(account_id, oauth_scopes, this));
requests_[type] = std::move(request);
callbacks_[type] = callback_id;
} else {
// Unknown type. // Unknown type.
handler_->SendAccessToken(callback_id, std::string()); handler_->SendAccessToken(callback_id, std::string());
return;
} }
OAuth2TokenService::ScopeSet oauth_scopes;
oauth_scopes.insert(cloud_devices::kCloudPrintAuthScope);
requests_[type].request =
service->StartRequest(account_id, oauth_scopes, this);
requests_[type].callback_id = callback_id;
} }
void OnGetTokenSuccess(const OAuth2TokenService::Request* request, void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
...@@ -367,23 +369,25 @@ class PrintPreviewHandler::AccessTokenService ...@@ -367,23 +369,25 @@ class PrintPreviewHandler::AccessTokenService
private: private:
void OnServiceResponse(const OAuth2TokenService::Request* request, void OnServiceResponse(const OAuth2TokenService::Request* request,
const std::string& access_token) { const std::string& access_token) {
for (Requests::iterator i = requests_.begin(); i != requests_.end(); ++i) { for (auto it = requests_.begin(); it != requests_.end(); ++it) {
if (i->second.get() == request) { auto& entry = it->second;
handler_->SendAccessToken(callbacks_[i->first], access_token); if (entry.request.get() == request) {
requests_.erase(i); handler_->SendAccessToken(entry.callback_id, access_token);
callbacks_.erase(i->first); requests_.erase(it);
return; return;
} }
} }
NOTREACHED(); NOTREACHED();
} }
using Requests = struct Request {
std::map<std::string, std::unique_ptr<OAuth2TokenService::Request>>; std::unique_ptr<OAuth2TokenService::Request> request;
Requests requests_; std::string callback_id;
using Callbacks = std::map<std::string, std::string>; };
Callbacks callbacks_; // Maps types to Requests.
PrintPreviewHandler* handler_; base::flat_map<std::string, Request> requests_;
PrintPreviewHandler* const handler_;
DISALLOW_COPY_AND_ASSIGN(AccessTokenService); DISALLOW_COPY_AND_ASSIGN(AccessTokenService);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment