summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhidehiko@chromium.org <hidehiko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-03 07:18:32 +0000
committerhidehiko@chromium.org <hidehiko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-03 07:18:32 +0000
commitc5b57ffea583f91c6dd63b2d9ab43af6c15682b1 (patch)
tree874282d6ae3f3172b47d33c149bd0f29fb777cfb
parent9a8a642158e0cd7ff53fbab9f62f7eb8535cf04f (diff)
downloadchromium_src-c5b57ffea583f91c6dd63b2d9ab43af6c15682b1.zip
chromium_src-c5b57ffea583f91c6dd63b2d9ab43af6c15682b1.tar.gz
chromium_src-c5b57ffea583f91c6dd63b2d9ab43af6c15682b1.tar.bz2
Implement FilesListNextPageRequest and ChangesListNextPageRequest.
This CL introduces two new request classes to fetch "next page" of "Files: list" and "Changes: list" methods. BUG=275233, 277253 TEST=Ran unit_tests Review URL: https://chromiumcodereview.appspot.com/23869002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@220907 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/drive/drive_api_service.cc20
-rw-r--r--chrome/browser/google_apis/drive_api_requests.cc40
-rw-r--r--chrome/browser/google_apis/drive_api_requests.h50
-rw-r--r--chrome/browser/google_apis/drive_api_requests_unittest.cc54
4 files changed, 158 insertions, 6 deletions
diff --git a/chrome/browser/drive/drive_api_service.cc b/chrome/browser/drive/drive_api_service.cc
index 85bf2ae..1af63a4 100644
--- a/chrome/browser/drive/drive_api_service.cc
+++ b/chrome/browser/drive/drive_api_service.cc
@@ -55,6 +55,7 @@ using google_apis::UploadRangeResponse;
using google_apis::drive::AboutGetRequest;
using google_apis::drive::AppsListRequest;
using google_apis::drive::ChangesListRequest;
+using google_apis::drive::ChangesListNextPageRequest;
using google_apis::drive::ChildrenDeleteRequest;
using google_apis::drive::ChildrenInsertRequest;
using google_apis::drive::ContinueGetFileListRequest;
@@ -64,6 +65,7 @@ using google_apis::drive::FilesGetRequest;
using google_apis::drive::FilesInsertRequest;
using google_apis::drive::FilesPatchRequest;
using google_apis::drive::FilesListRequest;
+using google_apis::drive::FilesListNextPageRequest;
using google_apis::drive::FilesTrashRequest;
using google_apis::drive::GetUploadStatusRequest;
using google_apis::drive::InitiateUploadExistingFileRequest;
@@ -499,9 +501,12 @@ CancelCallback DriveAPIService::GetRemainingChangeList(
DCHECK(!page_token.empty());
DCHECK(!callback.is_null());
- // Currently page_token is a URL.
- // TODO(hidehiko): Use actual page token.
- return ContinueGetResourceList(GURL(page_token), callback);
+ ChangesListNextPageRequest* request = new ChangesListNextPageRequest(
+ sender_.get(),
+ base::Bind(&ConvertChangeListToResourceListOnBlockingPoolAndRun,
+ blocking_task_runner_, callback));
+ request->set_next_link(GURL(page_token));
+ return sender_->StartRequestWithRetry(request);
}
CancelCallback DriveAPIService::GetRemainingFileList(
@@ -511,9 +516,12 @@ CancelCallback DriveAPIService::GetRemainingFileList(
DCHECK(!page_token.empty());
DCHECK(!callback.is_null());
- // Currently page_token is a URL.
- // TODO(hidehiko): Use actual page token.
- return ContinueGetResourceList(GURL(page_token), callback);
+ FilesListNextPageRequest* request = new FilesListNextPageRequest(
+ sender_.get(),
+ base::Bind(&ConvertFileListToResourceListOnBlockingPoolAndRun,
+ blocking_task_runner_, callback));
+ request->set_next_link(GURL(page_token));
+ return sender_->StartRequestWithRetry(request);
}
CancelCallback DriveAPIService::GetResourceEntry(
diff --git a/chrome/browser/google_apis/drive_api_requests.cc b/chrome/browser/google_apis/drive_api_requests.cc
index f69251b..fb1db85 100644
--- a/chrome/browser/google_apis/drive_api_requests.cc
+++ b/chrome/browser/google_apis/drive_api_requests.cc
@@ -326,6 +326,26 @@ GURL FilesListRequest::GetURL() const {
return url_generator_.GetFilesListUrl(max_results_, page_token_, q_);
}
+//======================== FilesListNextPageRequest =========================
+
+FilesListNextPageRequest::FilesListNextPageRequest(
+ RequestSender* sender,
+ const FileListCallback& callback)
+ : GetDataRequest(
+ sender,
+ base::Bind(&ParseJsonOnBlockingPoolAndRun<FileList>,
+ make_scoped_refptr(sender->blocking_task_runner()),
+ callback)) {
+ DCHECK(!callback.is_null());
+}
+
+FilesListNextPageRequest::~FilesListNextPageRequest() {
+}
+
+GURL FilesListNextPageRequest::GetURL() const {
+ return next_link_;
+}
+
//============================ FilesTrashRequest =============================
FilesTrashRequest::FilesTrashRequest(
@@ -391,6 +411,26 @@ GURL ChangesListRequest::GetURL() const {
include_deleted_, max_results_, page_token_, start_change_id_);
}
+//======================== ChangesListNextPageRequest =========================
+
+ChangesListNextPageRequest::ChangesListNextPageRequest(
+ RequestSender* sender,
+ const ChangeListCallback& callback)
+ : GetDataRequest(
+ sender,
+ base::Bind(&ParseJsonOnBlockingPoolAndRun<ChangeList>,
+ make_scoped_refptr(sender->blocking_task_runner()),
+ callback)) {
+ DCHECK(!callback.is_null());
+}
+
+ChangesListNextPageRequest::~ChangesListNextPageRequest() {
+}
+
+GURL ChangesListNextPageRequest::GetURL() const {
+ return next_link_;
+}
+
//============================== AppsListRequest ===========================
AppsListRequest::AppsListRequest(
diff --git a/chrome/browser/google_apis/drive_api_requests.h b/chrome/browser/google_apis/drive_api_requests.h
index c220653..26fa376 100644
--- a/chrome/browser/google_apis/drive_api_requests.h
+++ b/chrome/browser/google_apis/drive_api_requests.h
@@ -258,6 +258,31 @@ class FilesListRequest : public GetDataRequest {
DISALLOW_COPY_AND_ASSIGN(FilesListRequest);
};
+//========================= FilesListNextPageRequest ==========================
+
+// There are two ways to obtain next pages of "Files: list" result (if paged).
+// 1) Set pageToken and all params used for the initial request.
+// 2) Use URL in the nextLink field in the previous response.
+// This class implements 2)'s request.
+class FilesListNextPageRequest : public GetDataRequest {
+ public:
+ FilesListNextPageRequest(RequestSender* sender,
+ const FileListCallback& callback);
+ virtual ~FilesListNextPageRequest();
+
+ const GURL& next_link() const { return next_link_; }
+ void set_next_link(const GURL& next_link) { next_link_ = next_link; }
+
+ protected:
+ // Overridden from GetDataRequest.
+ virtual GURL GetURL() const OVERRIDE;
+
+ private:
+ GURL next_link_;
+
+ DISALLOW_COPY_AND_ASSIGN(FilesListNextPageRequest);
+};
+
//=========================== TrashResourceRequest ===========================
// This class performs the request for trashing a resource.
@@ -357,6 +382,31 @@ class ChangesListRequest : public GetDataRequest {
DISALLOW_COPY_AND_ASSIGN(ChangesListRequest);
};
+//======================== ChangesListNextPageRequest =========================
+
+// There are two ways to obtain next pages of "Changes: list" result (if paged).
+// 1) Set pageToken and all params used for the initial request.
+// 2) Use URL in the nextLink field in the previous response.
+// This class implements 2)'s request.
+class ChangesListNextPageRequest : public GetDataRequest {
+ public:
+ ChangesListNextPageRequest(RequestSender* sender,
+ const ChangeListCallback& callback);
+ virtual ~ChangesListNextPageRequest();
+
+ const GURL& next_link() const { return next_link_; }
+ void set_next_link(const GURL& next_link) { next_link_ = next_link; }
+
+ protected:
+ // Overridden from GetDataRequest.
+ virtual GURL GetURL() const OVERRIDE;
+
+ private:
+ GURL next_link_;
+
+ DISALLOW_COPY_AND_ASSIGN(ChangesListNextPageRequest);
+};
+
//============================= AppsListRequest ============================
// This class performs the request for fetching AppList.
diff --git a/chrome/browser/google_apis/drive_api_requests_unittest.cc b/chrome/browser/google_apis/drive_api_requests_unittest.cc
index 575246c..e39859e 100644
--- a/chrome/browser/google_apis/drive_api_requests_unittest.cc
+++ b/chrome/browser/google_apis/drive_api_requests_unittest.cc
@@ -555,6 +555,33 @@ TEST_F(DriveApiRequestsTest, ChangesListRequest) {
EXPECT_TRUE(result);
}
+TEST_F(DriveApiRequestsTest, ChangesListNextPageRequest) {
+ // Set an expected data file containing valid result.
+ expected_data_file_path_ = test_util::GetTestFilePath(
+ "drive/changelist.json");
+
+ GDataErrorCode error = GDATA_OTHER_ERROR;
+ scoped_ptr<ChangeList> result;
+
+ {
+ base::RunLoop run_loop;
+ drive::ChangesListNextPageRequest* request =
+ new drive::ChangesListNextPageRequest(
+ request_sender_.get(),
+ test_util::CreateQuitCallback(
+ &run_loop,
+ test_util::CreateCopyResultCallback(&error, &result)));
+ request->set_next_link(test_server_.GetURL("/continue/get/change/list"));
+ request_sender_->StartRequestWithRetry(request);
+ run_loop.Run();
+ }
+
+ EXPECT_EQ(HTTP_SUCCESS, error);
+ EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
+ EXPECT_EQ("/continue/get/change/list", http_request_.relative_url);
+ EXPECT_TRUE(result);
+}
+
TEST_F(DriveApiRequestsTest, FilesCopyRequest) {
// Set an expected data file containing the dummy file entry data.
// It'd be returned if we copy a file.
@@ -654,6 +681,33 @@ TEST_F(DriveApiRequestsTest, FilesListRequest) {
EXPECT_TRUE(result);
}
+TEST_F(DriveApiRequestsTest, FilesListNextPageRequest) {
+ // Set an expected data file containing valid result.
+ expected_data_file_path_ = test_util::GetTestFilePath(
+ "drive/filelist.json");
+
+ GDataErrorCode error = GDATA_OTHER_ERROR;
+ scoped_ptr<FileList> result;
+
+ {
+ base::RunLoop run_loop;
+ drive::FilesListNextPageRequest* request =
+ new drive::FilesListNextPageRequest(
+ request_sender_.get(),
+ test_util::CreateQuitCallback(
+ &run_loop,
+ test_util::CreateCopyResultCallback(&error, &result)));
+ request->set_next_link(test_server_.GetURL("/continue/get/file/list"));
+ request_sender_->StartRequestWithRetry(request);
+ run_loop.Run();
+ }
+
+ EXPECT_EQ(HTTP_SUCCESS, error);
+ EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
+ EXPECT_EQ("/continue/get/file/list", http_request_.relative_url);
+ EXPECT_TRUE(result);
+}
+
TEST_F(DriveApiRequestsTest, ContinueGetFileListRequest) {
// Set an expected data file containing valid result.
expected_data_file_path_ = test_util::GetTestFilePath(