identity_mint_queue.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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.
4
5#include "chrome/browser/extensions/api/identity/identity_mint_queue.h"
6
7#include "base/logging.h"
8#include "base/stl_util.h"
9
10namespace extensions {
11
12IdentityMintRequestQueue::IdentityMintRequestQueue() {
13}
14
15IdentityMintRequestQueue::~IdentityMintRequestQueue() {
16  for (RequestQueueMap::const_iterator
17           it = interactive_request_queue_map_.begin();
18       it != interactive_request_queue_map_.end();
19       ++it) {
20    DCHECK_EQ(it->second.size(), 0lu);
21  }
22  for (RequestQueueMap::const_iterator
23           it = noninteractive_request_queue_map_.begin();
24       it != noninteractive_request_queue_map_.end();
25       ++it) {
26    DCHECK_EQ(it->second.size(), 0lu);
27  }
28}
29
30void 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);
40}
41
42void 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);
51}
52
53bool IdentityMintRequestQueue::empty(IdentityMintRequestQueue::MintType type,
54                                     const ExtensionTokenKey& key) {
55  RequestQueueMap& request_queue_map = GetRequestQueueMap(type);
56  return !ContainsKey(request_queue_map, key) ||
57      (request_queue_map.find(key))->second.empty();
58}
59
60IdentityMintRequestQueue::RequestQueueMap&
61IdentityMintRequestQueue::GetRequestQueueMap(
62    IdentityMintRequestQueue::MintType type) {
63  return (type == MINT_TYPE_INTERACTIVE) ? interactive_request_queue_map_
64                                         : noninteractive_request_queue_map_;
65}
66
67}  // namespace extensions
68