| Index: chrome/browser/extensions/updater/request_queue.h
|
| diff --git a/chrome/browser/extensions/updater/request_queue.h b/chrome/browser/extensions/updater/request_queue.h
|
| deleted file mode 100644
|
| index c14788169505b63d35581564b109fa47b443f26f..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/extensions/updater/request_queue.h
|
| +++ /dev/null
|
| @@ -1,147 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef CHROME_BROWSER_EXTENSIONS_UPDATER_REQUEST_QUEUE_H_
|
| -#define CHROME_BROWSER_EXTENSIONS_UPDATER_REQUEST_QUEUE_H_
|
| -
|
| -#include <deque>
|
| -#include <utility>
|
| -
|
| -#include "base/callback.h"
|
| -#include "base/memory/linked_ptr.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/time/time.h"
|
| -#include "base/timer/timer.h"
|
| -#include "net/base/backoff_entry.h"
|
| -
|
| -namespace extensions {
|
| -
|
| -// This class keeps track of a queue of requests, and contains the logic to
|
| -// retry requests with some backoff policy. Each request has a
|
| -// net::BackoffEntry instance associated with it.
|
| -//
|
| -// The general flow when using this class would be something like this:
|
| -// - requests are queued up by calling ScheduleRequest.
|
| -// - when a request is ready to be executed, RequestQueue removes the
|
| -// request from the queue, assigns it as active request, and calls
|
| -// the callback that was passed to the constructor.
|
| -// - (optionally) when a request has completed unsuccessfully call
|
| -// RetryRequest to put the request back in the queue, using the
|
| -// backoff policy and minimum backoff delay to determine when to
|
| -// next schedule this request.
|
| -// - call reset_active_request() to indicate that the active request has
|
| -// been dealt with.
|
| -// - call StartNextRequest to schedule the next pending request (if any).
|
| -template<typename T>
|
| -class RequestQueue {
|
| - public:
|
| - class iterator;
|
| -
|
| - RequestQueue(const net::BackoffEntry::Policy* backoff_policy,
|
| - const base::Closure& start_request_callback);
|
| - ~RequestQueue();
|
| -
|
| - // Returns the request that is currently being processed.
|
| - T* active_request();
|
| -
|
| - // Returns the number of times the current request has been retried already.
|
| - int active_request_failure_count();
|
| -
|
| - // Signals RequestQueue that processing of the current request has completed.
|
| - scoped_ptr<T> reset_active_request();
|
| -
|
| - // Add the given request to the queue, and starts the next request if no
|
| - // request is currently being processed.
|
| - void ScheduleRequest(scoped_ptr<T> request);
|
| -
|
| - bool empty() const;
|
| - size_t size() const;
|
| -
|
| - // Returns the earliest release time of all requests currently in the queue.
|
| - base::TimeTicks NextReleaseTime() const;
|
| -
|
| - // Starts the next request, if no request is currently active. This will
|
| - // synchronously call the start_request_callback if the release time of the
|
| - // earliest available request is in the past, otherwise it will call that
|
| - // callback asynchronously after enough time has passed.
|
| - void StartNextRequest();
|
| -
|
| - // Tell RequestQueue to put the current request back in the queue, after
|
| - // applying the backoff policy to determine when to next try this request.
|
| - // If the policy results in a backoff delay smaller than |min_backoff_delay|,
|
| - // that delay is used instead.
|
| - void RetryRequest(const base::TimeDelta& min_backoff_delay);
|
| -
|
| - iterator begin();
|
| - iterator end();
|
| -
|
| - // Change the backoff policy used by the queue.
|
| - void set_backoff_policy(const net::BackoffEntry::Policy* backoff_policy);
|
| -
|
| - private:
|
| - struct Request {
|
| - Request(net::BackoffEntry* backoff_entry, T* request)
|
| - : backoff_entry(backoff_entry), request(request) {}
|
| - linked_ptr<net::BackoffEntry> backoff_entry;
|
| - linked_ptr<T> request;
|
| - };
|
| -
|
| - // Compares the release time of two pending requests.
|
| - static bool CompareRequests(const Request& a,
|
| - const Request& b);
|
| -
|
| - // Pushes a request with a given backoff entry onto the queue.
|
| - void PushImpl(scoped_ptr<T> request,
|
| - scoped_ptr<net::BackoffEntry> backoff_entry);
|
| -
|
| - // The backoff policy used to determine backoff delays.
|
| - const net::BackoffEntry::Policy* backoff_policy_;
|
| -
|
| - // Callback to call when a new request has become the active request.
|
| - base::Closure start_request_callback_;
|
| -
|
| - // Priority queue of pending requests. Not using std::priority_queue since
|
| - // the code needs to be able to iterate over all pending requests.
|
| - std::deque<Request> pending_requests_;
|
| -
|
| - // Active request and its associated backoff entry.
|
| - scoped_ptr<T> active_request_;
|
| - scoped_ptr<net::BackoffEntry> active_backoff_entry_;
|
| -
|
| - // Timer to schedule calls to StartNextRequest, if the first pending request
|
| - // hasn't passed its release time yet.
|
| - base::Timer timer_;
|
| -};
|
| -
|
| -// Iterator class that wraps a std::deque<> iterator, only giving access to the
|
| -// actual request part of each item.
|
| -template<typename T>
|
| -class RequestQueue<T>::iterator {
|
| - public:
|
| - iterator() {}
|
| -
|
| - T* operator*() { return it_->request.get(); }
|
| - T* operator->() { return it_->request.get(); }
|
| - iterator& operator++() {
|
| - ++it_;
|
| - return *this;
|
| - }
|
| - bool operator!=(const iterator& b) const {
|
| - return it_ != b.it_;
|
| - }
|
| -
|
| - private:
|
| - friend class RequestQueue<T>;
|
| - typedef std::deque<typename RequestQueue<T>::Request> Container;
|
| -
|
| - explicit iterator(const typename Container::iterator& it)
|
| - : it_(it) {}
|
| -
|
| - typename Container::iterator it_;
|
| -};
|
| -
|
| -
|
| -} // namespace extensions
|
| -
|
| -#endif // CHROME_BROWSER_EXTENSIONS_UPDATER_REQUEST_QUEUE_H_
|
|
|