blob: 5df83fd13d637a7d09f6b56df9f4cc86a11a4034 [file] [log] [blame]
// Copyright 2016 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 COMPONENTS_OFFLINE_PAGES_BACKGROUND_REQUEST_QUEUE_H_
#define COMPONENTS_OFFLINE_PAGES_BACKGROUND_REQUEST_QUEUE_H_
#include <stdint.h>
#include <memory>
#include <vector>
#include "base/callback.h"
#include "base/macros.h"
namespace offline_pages {
class RequestQueueStore;
class SavePageRequest;
// Class responsible for managing save page requests.
class RequestQueue {
public:
enum class GetRequestsResult {
kSuccess,
kStoreFailure,
};
enum class AddRequestResult {
kSuccess,
kStoreFailure,
kRequestQuotaHit, // Cannot add a request with this namespace, as it has
// reached a quota of active requests.
};
enum class UpdateRequestResult {
kSuccess,
kStoreFailure,
kRequestDoesNotExist, // Failed to delete the request because it does not
// exist.
};
// Callback used for |GetRequests|.
typedef base::Callback<void(GetRequestsResult,
const std::vector<SavePageRequest>&)>
GetRequestsCallback;
// Callback used for |AddRequest|.
typedef base::Callback<void(AddRequestResult, const SavePageRequest& request)>
AddRequestCallback;
// Callback used by |UdpateRequest| and |RemoveRequest|.
typedef base::Callback<void(UpdateRequestResult)> UpdateRequestCallback;
explicit RequestQueue(std::unique_ptr<RequestQueueStore> store);
~RequestQueue();
// Gets all of the active requests from the store. Calling this method may
// schedule purging of the request queue.
void GetRequests(const GetRequestsCallback& callback);
// Adds |request| to the request queue. Result is returned through |callback|.
// In case adding the request violates policy, the result will fail with
// appropriate result. Callback will also return a copy of a request with all
// fields set.
void AddRequest(const SavePageRequest& request,
const AddRequestCallback& callback);
// Updates a request in the request queue if a request with matching ID
// exists. Does nothing otherwise. Result is returned through |callback|.
void UpdateRequest(const SavePageRequest& request,
const UpdateRequestCallback& callback);
// Removes the request matching the |request_id|. Result is returned through
// |callback|.
void RemoveRequest(int64_t request_id, const UpdateRequestCallback& callback);
private:
// Callback used by |PurgeRequests|.
typedef base::Callback<void(UpdateRequestResult,
int /* removed requests count */)>
PurgeRequestsCallback;
// Purges the queue, removing the requests that are no longer relevant, e.g.
// expired request. Result is returned through |callback| carries the number
// of removed requests.
void PurgeRequests(const PurgeRequestsCallback& callback);
std::unique_ptr<RequestQueueStore> store_;
DISALLOW_COPY_AND_ASSIGN(RequestQueue);
};
} // namespace offline_pages
#endif // COMPONENTS_OFFLINE_PAGES_BACKGROUND_REQUEST_QUEUE_H_