Chromium Code Reviews| Index: google_apis/drive/files_list_request_runner.h |
| diff --git a/google_apis/drive/files_list_request_runner.h b/google_apis/drive/files_list_request_runner.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..fc416be9d9c067506b12b9532f2a56991f0fc90a |
| --- /dev/null |
| +++ b/google_apis/drive/files_list_request_runner.h |
| @@ -0,0 +1,71 @@ |
| +// 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 <string> |
| + |
| +#include "base/basictypes.h" |
| +#include "base/callback_forward.h" |
| +#include "base/memory/scoped_ptr.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 { |
|
Primiano Tucci (use gerrit)
2015/06/30 09:25:04
I think these should be SOMETHING_EXPORT, this bro
|
| + 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, |
| + scoped_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_ |