1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/extensions/api/identity/identity_mint_queue.h"
7 #include "base/logging.h"
8 #include "base/stl_util.h"
10 namespace extensions {
12 IdentityMintRequestQueue::IdentityMintRequestQueue() {
15 IdentityMintRequestQueue::~IdentityMintRequestQueue() {
16 for (RequestQueueMap::const_iterator
17 it = interactive_request_queue_map_.begin();
18 it != interactive_request_queue_map_.end();
20 DCHECK_EQ(it->second.size(), 0lu);
22 for (RequestQueueMap::const_iterator
23 it = noninteractive_request_queue_map_.begin();
24 it != noninteractive_request_queue_map_.end();
26 DCHECK_EQ(it->second.size(), 0lu);
30 void IdentityMintRequestQueue::RequestStart(
31 IdentityMintRequestQueue::MintType type,
32 const ExtensionTokenKey& key,
33 IdentityMintRequestQueue::Request* request) {
34 RequestQueue& request_queue = GetRequestQueueMap(type)[key];
35 request_queue.push_back(request);
36 // If this is the first request, start it now. RequestComplete will start
37 // all other requests.
38 if (request_queue.size() == 1)
39 request_queue.front()->StartMintToken(type);
42 void IdentityMintRequestQueue::RequestComplete(
43 IdentityMintRequestQueue::MintType type,
44 const ExtensionTokenKey& key,
45 IdentityMintRequestQueue::Request* request) {
46 RequestQueue& request_queue = GetRequestQueueMap(type)[key];
47 CHECK_EQ(request_queue.front(), request);
48 request_queue.pop_front();
49 if (request_queue.size() > 0)
50 request_queue.front()->StartMintToken(type);
53 void IdentityMintRequestQueue::RequestCancel(
54 const ExtensionTokenKey& key,
55 IdentityMintRequestQueue::Request* request) {
56 GetRequestQueueMap(MINT_TYPE_INTERACTIVE)[key].remove(request);
57 GetRequestQueueMap(MINT_TYPE_NONINTERACTIVE)[key].remove(request);
60 bool IdentityMintRequestQueue::empty(IdentityMintRequestQueue::MintType type,
61 const ExtensionTokenKey& key) {
62 RequestQueueMap& request_queue_map = GetRequestQueueMap(type);
63 return !ContainsKey(request_queue_map, key) ||
64 (request_queue_map.find(key))->second.empty();
67 IdentityMintRequestQueue::RequestQueueMap&
68 IdentityMintRequestQueue::GetRequestQueueMap(
69 IdentityMintRequestQueue::MintType type) {
70 return (type == MINT_TYPE_INTERACTIVE) ? interactive_request_queue_map_
71 : noninteractive_request_queue_map_;
74 } // namespace extensions