Home | History | Annotate | Download | only in identity
      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