Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / identity / identity_mint_queue.cc
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
10 namespace extensions {
11
12 IdentityMintRequestQueue::IdentityMintRequestQueue() {
13 }
14
15 IdentityMintRequestQueue::~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
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);
40 }
41
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);
51 }
52
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);
58 }
59
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();
65 }
66
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_;
72 }
73
74 }  // namespace extensions