diff options
author | hidehiko@chromium.org <hidehiko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-03 07:18:32 +0000 |
---|---|---|
committer | hidehiko@chromium.org <hidehiko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-03 07:18:32 +0000 |
commit | c5b57ffea583f91c6dd63b2d9ab43af6c15682b1 (patch) | |
tree | 874282d6ae3f3172b47d33c149bd0f29fb777cfb | |
parent | 9a8a642158e0cd7ff53fbab9f62f7eb8535cf04f (diff) | |
download | chromium_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.cc | 20 | ||||
-rw-r--r-- | chrome/browser/google_apis/drive_api_requests.cc | 40 | ||||
-rw-r--r-- | chrome/browser/google_apis/drive_api_requests.h | 50 | ||||
-rw-r--r-- | chrome/browser/google_apis/drive_api_requests_unittest.cc | 54 |
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( |