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 75