• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
IdentityMintRequestQueue()12 IdentityMintRequestQueue::IdentityMintRequestQueue() {
13 }
14 
~IdentityMintRequestQueue()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 
RequestStart(IdentityMintRequestQueue::MintType type,const ExtensionTokenKey & key,IdentityMintRequestQueue::Request * request)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 
RequestComplete(IdentityMintRequestQueue::MintType type,const ExtensionTokenKey & key,IdentityMintRequestQueue::Request * request)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 
RequestCancel(const ExtensionTokenKey & key,IdentityMintRequestQueue::Request * request)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 
empty(IdentityMintRequestQueue::MintType type,const ExtensionTokenKey & key)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&
GetRequestQueueMap(IdentityMintRequestQueue::MintType type)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
75