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_ |