// Copyright 2015 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 GOOGLE_APIS_DRIVE_FILES_LIST_REQUEST_RUNNER_H_
#define GOOGLE_APIS_DRIVE_FILES_LIST_REQUEST_RUNNER_H_

#include <memory>
#include <string>

#include "base/callback_forward.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "google_apis/drive/drive_api_requests.h"
#include "google_apis/drive/drive_api_url_generator.h"
#include "google_apis/drive/drive_common_callbacks.h"

namespace google_apis {

class RequestSender;

// Runs file list requests (the FileListRequest class) with a backoff retry
// logic in case of the DRIVE_RESPONSE_TOO_LARGE error code.
class FilesListRequestRunner {
 public:
  FilesListRequestRunner(
      RequestSender* request_sender,
      const google_apis::DriveApiUrlGenerator& url_generator);

  // Creates a FilesListRequest instance and starts the request with a backoff
  // retry in case of DRIVE_RESPONSE_TOO_LARGE error code.
  CancelCallback CreateAndStartWithSizeBackoff(
      int max_results,
      const std::string& q,
      const std::string& fields,
      const FileListCallback& callback);

  ~FilesListRequestRunner();

  void SetRequestCompletedCallbackForTesting(const base::Closure& callback);

 private:
  // Called when the cancelling callback returned by
  // CreateAndStartWithSizeBackoff is invoked. Once called cancels the current
  // request.
  void OnCancel(CancelCallback* cancel_callback);

  // Called when a single request is completed with either a success or an
  // error. In case of DRIVE_RESPONSE_TOO_LARGE it will retry the request with
  // half of the requests.
  void OnCompleted(int max_results,
                   const std::string& q,
                   const std::string& fields,
                   const FileListCallback& callback,
                   CancelCallback* cancel_callback,
                   DriveApiErrorCode error,
                   std::unique_ptr<FileList> entry);

  RequestSender* request_sender_;                          // Not owned.
  const google_apis::DriveApiUrlGenerator url_generator_;  // Not owned.
  base::Closure request_completed_callback_for_testing_;

  // Note: This should remain the last member so it'll be destroyed and
  // invalidate its weak pointers before any other members are destroyed.
  base::WeakPtrFactory<FilesListRequestRunner> weak_ptr_factory_;
  DISALLOW_COPY_AND_ASSIGN(FilesListRequestRunner);
};

}  // namespace google_apis

#endif  // GOOGLE_APIS_DRIVE_FILES_LIST_REQUEST_RUNNER_H_
