drive: Stop returning ResourceList from JobScheduler

BUG=231125
TEST=git cl try

Review URL: https://codereview.chromium.org/318873003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@275410 0039d316-1c4b-4281-b951-d872f2087c98
parent bd92cc08
......@@ -19,7 +19,6 @@
#include "chrome/browser/drive/event_logger.h"
#include "content/public/browser/browser_thread.h"
#include "google_apis/drive/drive_api_parser.h"
#include "google_apis/drive/gdata_wapi_parser.h"
#include "url/gurl.h"
using content::BrowserThread;
......@@ -57,16 +56,15 @@ class FullFeedFetcher : public ChangeListLoader::FeedFetcher {
start_time_ = base::TimeTicks::Now();
// This is full resource list fetch.
scheduler_->GetAllResourceList(
scheduler_->GetAllFileList(
base::Bind(&FullFeedFetcher::OnFileListFetched,
weak_ptr_factory_.GetWeakPtr(), callback));
}
private:
void OnFileListFetched(
const FeedFetcherCallback& callback,
void OnFileListFetched(const FeedFetcherCallback& callback,
google_apis::GDataErrorCode status,
scoped_ptr<google_apis::ResourceList> resource_list) {
scoped_ptr<google_apis::FileList> file_list) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
......@@ -76,14 +74,13 @@ class FullFeedFetcher : public ChangeListLoader::FeedFetcher {
return;
}
DCHECK(resource_list);
change_lists_.push_back(new ChangeList(*resource_list));
DCHECK(file_list);
change_lists_.push_back(new ChangeList(*file_list));
GURL next_url;
if (resource_list->GetNextFeedURL(&next_url) && !next_url.is_empty()) {
if (!file_list->next_link().is_empty()) {
// There is the remaining result so fetch it.
scheduler_->GetRemainingFileList(
next_url,
file_list->next_link(),
base::Bind(&FullFeedFetcher::OnFileListFetched,
weak_ptr_factory_.GetWeakPtr(), callback));
return;
......@@ -128,10 +125,9 @@ class DeltaFeedFetcher : public ChangeListLoader::FeedFetcher {
}
private:
void OnChangeListFetched(
const FeedFetcherCallback& callback,
void OnChangeListFetched(const FeedFetcherCallback& callback,
google_apis::GDataErrorCode status,
scoped_ptr<google_apis::ResourceList> resource_list) {
scoped_ptr<google_apis::ChangeList> change_list) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
......@@ -141,14 +137,13 @@ class DeltaFeedFetcher : public ChangeListLoader::FeedFetcher {
return;
}
DCHECK(resource_list);
change_lists_.push_back(new ChangeList(*resource_list));
DCHECK(change_list);
change_lists_.push_back(new ChangeList(*change_list));
GURL next_url;
if (resource_list->GetNextFeedURL(&next_url) && !next_url.is_empty()) {
if (!change_list->next_link().is_empty()) {
// There is the remaining result so fetch it.
scheduler_->GetRemainingChangeList(
next_url,
change_list->next_link(),
base::Bind(&DeltaFeedFetcher::OnChangeListFetched,
weak_ptr_factory_.GetWeakPtr(), callback));
return;
......
......@@ -10,6 +10,7 @@
#include "chrome/browser/chromeos/drive/file_system_util.h"
#include "chrome/browser/chromeos/drive/resource_entry_conversion.h"
#include "chrome/browser/chromeos/drive/resource_metadata.h"
#include "chrome/browser/drive/drive_api_util.h"
#include "google_apis/drive/drive_api_parser.h"
#include "google_apis/drive/gdata_wapi_parser.h"
......@@ -72,15 +73,35 @@ std::string DirectoryFetchInfo::ToString() const {
ChangeList::ChangeList() {}
ChangeList::ChangeList(const google_apis::ResourceList& resource_list)
: largest_changestamp_(resource_list.largest_changestamp()) {
resource_list.GetNextFeedURL(&next_url_);
ChangeList::ChangeList(const google_apis::ChangeList& change_list)
: next_url_(change_list.next_link()),
largest_changestamp_(change_list.largest_change_id()) {
const ScopedVector<google_apis::ChangeResource>& items = change_list.items();
entries_.resize(items.size());
parent_resource_ids_.resize(items.size());
size_t entries_index = 0;
for (size_t i = 0; i < items.size(); ++i) {
if (ConvertToResourceEntry(
*util::ConvertChangeResourceToResourceEntry(*items[i]),
&entries_[entries_index],
&parent_resource_ids_[entries_index])) {
++entries_index;
}
}
entries_.resize(entries_index);
parent_resource_ids_.resize(entries_index);
}
entries_.resize(resource_list.entries().size());
parent_resource_ids_.resize(resource_list.entries().size());
ChangeList::ChangeList(const google_apis::FileList& file_list)
: next_url_(file_list.next_link()),
largest_changestamp_(0) {
const ScopedVector<google_apis::FileResource>& items = file_list.items();
entries_.resize(items.size());
parent_resource_ids_.resize(items.size());
size_t entries_index = 0;
for (size_t i = 0; i < resource_list.entries().size(); ++i) {
if (ConvertToResourceEntry(*resource_list.entries()[i],
for (size_t i = 0; i < items.size(); ++i) {
if (ConvertToResourceEntry(
*util::ConvertFileResourceToResourceEntry(*items[i]),
&entries_[entries_index],
&parent_resource_ids_[entries_index])) {
++entries_index;
......
......@@ -17,7 +17,8 @@
namespace google_apis {
class AboutResource;
class ResourceList;
class ChangeList;
class FileList;
} // google_apis
namespace drive {
......@@ -67,7 +68,8 @@ class DirectoryFetchInfo {
class ChangeList {
public:
ChangeList(); // For tests.
explicit ChangeList(const google_apis::ResourceList& resource_list);
explicit ChangeList(const google_apis::ChangeList& change_list);
explicit ChangeList(const google_apis::FileList& file_list);
~ChangeList();
const std::vector<ResourceEntry>& entries() const { return entries_; }
......
......@@ -18,7 +18,6 @@
#include "chrome/browser/drive/event_logger.h"
#include "content/public/browser/browser_thread.h"
#include "google_apis/drive/drive_api_parser.h"
#include "google_apis/drive/gdata_wapi_parser.h"
#include "url/gurl.h"
using content::BrowserThread;
......@@ -114,17 +113,16 @@ class DirectoryLoader::FeedFetcher {
// Remember the time stamp for usage stats.
start_time_ = base::TimeTicks::Now();
loader_->scheduler_->GetResourceListInDirectory(
loader_->scheduler_->GetFileListInDirectory(
directory_fetch_info_.resource_id(),
base::Bind(&FeedFetcher::OnResourceListFetched,
base::Bind(&FeedFetcher::OnFileListFetched,
weak_ptr_factory_.GetWeakPtr(), callback));
}
private:
void OnResourceListFetched(
const FileOperationCallback& callback,
void OnFileListFetched(const FileOperationCallback& callback,
google_apis::GDataErrorCode status,
scoped_ptr<google_apis::ResourceList> resource_list) {
scoped_ptr<google_apis::FileList> file_list) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
......@@ -134,11 +132,9 @@ class DirectoryLoader::FeedFetcher {
return;
}
DCHECK(resource_list);
scoped_ptr<ChangeList> change_list(new ChangeList(*resource_list));
GURL next_url;
resource_list->GetNextFeedURL(&next_url);
DCHECK(file_list);
scoped_ptr<ChangeList> change_list(new ChangeList(*file_list));
GURL next_url = file_list->next_link();
ResourceEntryVector* entries = new ResourceEntryVector;
loader_->loader_controller_->ScheduleRun(base::Bind(
......@@ -177,7 +173,7 @@ class DirectoryLoader::FeedFetcher {
// There is the remaining result so fetch it.
loader_->scheduler_->GetRemainingFileList(
next_url,
base::Bind(&FeedFetcher::OnResourceListFetched,
base::Bind(&FeedFetcher::OnFileListFetched,
weak_ptr_factory_.GetWeakPtr(), callback));
return;
}
......
......@@ -16,7 +16,9 @@
#include "chrome/browser/chromeos/drive/job_scheduler.h"
#include "chrome/browser/chromeos/drive/resource_entry_conversion.h"
#include "chrome/browser/chromeos/drive/resource_metadata.h"
#include "chrome/browser/drive/drive_api_util.h"
#include "content/public/browser/browser_thread.h"
#include "google_apis/drive/drive_api_parser.h"
#include "google_apis/drive/gdata_wapi_parser.h"
#include "url/gurl.h"
......@@ -26,24 +28,23 @@ namespace drive {
namespace file_system {
namespace {
// Computes the path of each item in |resource_list| returned from the server
// Computes the path of each item in |file_list| returned from the server
// and stores to |result|, by using |resource_metadata|. If the metadata is not
// up-to-date and did not contain an item, adds the item to "drive/other" for
// temporally assigning a path.
FileError ResolveSearchResultOnBlockingPool(
internal::ResourceMetadata* resource_metadata,
scoped_ptr<google_apis::ResourceList> resource_list,
scoped_ptr<google_apis::FileList> file_list,
std::vector<SearchResultInfo>* result) {
DCHECK(resource_metadata);
DCHECK(result);
const ScopedVector<google_apis::ResourceEntry>& entries =
resource_list->entries();
const ScopedVector<google_apis::FileResource>& entries = file_list->items();
result->reserve(entries.size());
for (size_t i = 0; i < entries.size(); ++i) {
std::string local_id;
FileError error = resource_metadata->GetIdByResourceId(
entries[i]->resource_id(), &local_id);
entries[i]->file_id(), &local_id);
ResourceEntry entry;
if (error == FILE_ERROR_OK)
......@@ -51,7 +52,9 @@ FileError ResolveSearchResultOnBlockingPool(
if (error == FILE_ERROR_NOT_FOUND) {
std::string original_parent_id;
if (!ConvertToResourceEntry(*entries[i], &entry, &original_parent_id))
if (!ConvertToResourceEntry(
*util::ConvertFileResourceToResourceEntry(*entries[i]),
&entry, &original_parent_id))
continue; // Skip non-file entries.
// The result is absent in local resource metadata. This can happen if
......@@ -104,21 +107,21 @@ void SearchOperation::Search(const std::string& search_query,
// This is first request for the |search_query|.
scheduler_->Search(
search_query,
base::Bind(&SearchOperation::SearchAfterGetResourceList,
base::Bind(&SearchOperation::SearchAfterGetFileList,
weak_ptr_factory_.GetWeakPtr(), callback));
} else {
// There is the remaining result so fetch it.
scheduler_->GetRemainingFileList(
next_link,
base::Bind(&SearchOperation::SearchAfterGetResourceList,
base::Bind(&SearchOperation::SearchAfterGetFileList,
weak_ptr_factory_.GetWeakPtr(), callback));
}
}
void SearchOperation::SearchAfterGetResourceList(
void SearchOperation::SearchAfterGetFileList(
const SearchCallback& callback,
google_apis::GDataErrorCode gdata_error,
scoped_ptr<google_apis::ResourceList> resource_list) {
scoped_ptr<google_apis::FileList> file_list) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
......@@ -128,14 +131,13 @@ void SearchOperation::SearchAfterGetResourceList(
return;
}
DCHECK(resource_list);
DCHECK(file_list);
GURL next_url;
resource_list->GetNextFeedURL(&next_url);
GURL next_url = file_list->next_link();
scoped_ptr<std::vector<SearchResultInfo> > result(
new std::vector<SearchResultInfo>);
if (resource_list->entries().empty()) {
if (file_list->items().empty()) {
// Short cut. If the resource entry is empty, we don't need to refresh
// the resource metadata.
callback.Run(FILE_ERROR_OK, next_url, result.Pass());
......@@ -153,7 +155,7 @@ void SearchOperation::SearchAfterGetResourceList(
FROM_HERE,
base::Bind(&ResolveSearchResultOnBlockingPool,
metadata_,
base::Passed(&resource_list),
base::Passed(&file_list),
result_ptr),
base::Bind(&SearchOperation::SearchAfterResolveSearchResult,
weak_ptr_factory_.GetWeakPtr(),
......
......@@ -18,8 +18,7 @@ class SequencedTaskRunner;
} // namespace base
namespace google_apis {
class ResourceEntry;
class ResourceList;
class FileList;
} // namespace google_apis
namespace drive {
......@@ -54,11 +53,11 @@ class SearchOperation {
const SearchCallback& callback);
private:
// Part of Search(), called after the ResourceList is fetched from the server.
void SearchAfterGetResourceList(
// Part of Search(), called after the FileList is fetched from the server.
void SearchAfterGetFileList(
const SearchCallback& callback,
google_apis::GDataErrorCode gdata_error,
scoped_ptr<google_apis::ResourceList> resource_list);
scoped_ptr<google_apis::FileList> file_list);
// Part of Search(), called after |result| is filled on the blocking pool.
void SearchAfterResolveSearchResult(
......
......@@ -269,8 +269,8 @@ void JobScheduler::GetAppList(const google_apis::AppListCallback& callback) {
StartJob(new_job);
}
void JobScheduler::GetAllResourceList(
const google_apis::GetResourceListCallback& callback) {
void JobScheduler::GetAllFileList(
const google_apis::FileListCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
......@@ -286,9 +286,9 @@ void JobScheduler::GetAllResourceList(
StartJob(new_job);
}
void JobScheduler::GetResourceListInDirectory(
void JobScheduler::GetFileListInDirectory(
const std::string& directory_resource_id,
const google_apis::GetResourceListCallback& callback) {
const google_apis::FileListCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
......@@ -306,9 +306,8 @@ void JobScheduler::GetResourceListInDirectory(
StartJob(new_job);
}
void JobScheduler::Search(
const std::string& search_query,
const google_apis::GetResourceListCallback& callback) {
void JobScheduler::Search(const std::string& search_query,
const google_apis::FileListCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
......@@ -327,7 +326,7 @@ void JobScheduler::Search(
void JobScheduler::GetChangeList(
int64 start_changestamp,
const google_apis::GetResourceListCallback& callback) {
const google_apis::ChangeListCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
......@@ -346,7 +345,7 @@ void JobScheduler::GetChangeList(
void JobScheduler::GetRemainingChangeList(
const GURL& next_link,
const google_apis::GetResourceListCallback& callback) {
const google_apis::ChangeListCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
......@@ -365,7 +364,7 @@ void JobScheduler::GetRemainingChangeList(
void JobScheduler::GetRemainingFileList(
const GURL& next_link,
const google_apis::GetResourceListCallback& callback) {
const google_apis::FileListCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
......@@ -902,33 +901,26 @@ bool JobScheduler::OnJobDone(JobID job_id, google_apis::GDataErrorCode error) {
void JobScheduler::OnGetFileListJobDone(
JobID job_id,
const google_apis::GetResourceListCallback& callback,
const google_apis::FileListCallback& callback,
google_apis::GDataErrorCode error,
scoped_ptr<google_apis::FileList> file_list) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
if (OnJobDone(job_id, error)) {
callback.Run(error, file_list ?
util::ConvertFileListToResourceList(*file_list) :
scoped_ptr<google_apis::ResourceList>());
}
if (OnJobDone(job_id, error))
callback.Run(error, file_list.Pass());
}
void JobScheduler::OnGetChangeListJobDone(
JobID job_id,
const google_apis::GetResourceListCallback& callback,
const google_apis::ChangeListCallback& callback,
google_apis::GDataErrorCode error,
scoped_ptr<google_apis::ChangeList> change_list) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
if (OnJobDone(job_id, error)) {
callback.Run(error, change_list ?
util::ConvertChangeListToResourceList(*change_list) :
scoped_ptr<google_apis::ResourceList>());
}
if (OnJobDone(job_id, error))
callback.Run(error, change_list.Pass());
}
void JobScheduler::OnGetFileResourceJobDone(
......
......@@ -83,37 +83,34 @@ class JobScheduler
// |callback| must not be null.
void GetAboutResource(const google_apis::AboutResourceCallback& callback);
// Adds a GetAllResourceList operation to the queue.
// Adds a GetAllFileList operation to the queue.
// |callback| must not be null.
void GetAllResourceList(const google_apis::GetResourceListCallback& callback);
void GetAllFileList(const google_apis::FileListCallback& callback);
// Adds a GetResourceListInDirectory operation to the queue.
// Adds a GetFileListInDirectory operation to the queue.
// |callback| must not be null.
void GetResourceListInDirectory(
const std::string& directory_resource_id,
const google_apis::GetResourceListCallback& callback);
void GetFileListInDirectory(const std::string& directory_resource_id,
const google_apis::FileListCallback& callback);
// Adds a Search operation to the queue.
// |callback| must not be null.
void Search(const std::string& search_query,
const google_apis::GetResourceListCallback& callback);
const google_apis::FileListCallback& callback);
// Adds a GetChangeList operation to the queue.
// |callback| must not be null.
void GetChangeList(int64 start_changestamp,
const google_apis::GetResourceListCallback& callback);
const google_apis::ChangeListCallback& callback);
// Adds GetRemainingChangeList operation to the queue.
// |callback| must not be null.
void GetRemainingChangeList(
const GURL& next_link,
const google_apis::GetResourceListCallback& callback);
void GetRemainingChangeList(const GURL& next_link,
const google_apis::ChangeListCallback& callback);
// Adds GetRemainingFileList operation to the queue.
// |callback| must not be null.
void GetRemainingFileList(
const GURL& next_link,
const google_apis::GetResourceListCallback& callback);
void GetRemainingFileList(const GURL& next_link,
const google_apis::FileListCallback& callback);
// Adds a GetResourceEntry operation to the queue.
void GetResourceEntry(const std::string& resource_id,
......@@ -278,14 +275,14 @@ class JobScheduler
// Callback for job finishing with a FileListCallback.
void OnGetFileListJobDone(
JobID job_id,
const google_apis::GetResourceListCallback& callback,
const google_apis::FileListCallback& callback,
google_apis::GDataErrorCode error,
scoped_ptr<google_apis::FileList> file_list);
// Callback for job finishing with a ChangeListCallback.
void OnGetChangeListJobDone(
JobID job_id,
const google_apis::GetResourceListCallback& callback,
const google_apis::ChangeListCallback& callback,
google_apis::GDataErrorCode error,
scoped_ptr<google_apis::ChangeList> change_list);
......
......@@ -217,51 +217,48 @@ TEST_F(JobSchedulerTest, GetAppList) {
ASSERT_TRUE(app_list);
}
TEST_F(JobSchedulerTest, GetAllResourceList) {
TEST_F(JobSchedulerTest, GetAllFileList) {
ConnectToWifi();
google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
scoped_ptr<google_apis::ResourceList> resource_list;
scoped_ptr<google_apis::FileList> file_list;
scheduler_->GetAllResourceList(
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
scheduler_->GetAllFileList(
google_apis::test_util::CreateCopyResultCallback(&error, &file_list));
base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
ASSERT_TRUE(file_list);
}
TEST_F(JobSchedulerTest, GetResourceListInDirectory) {
TEST_F(JobSchedulerTest, GetFileListInDirectory) {
ConnectToWifi();
google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
scoped_ptr<google_apis::ResourceList> resource_list;
scoped_ptr<google_apis::FileList> file_list;
scheduler_->GetResourceListInDirectory(
scheduler_->GetFileListInDirectory(
fake_drive_service_->GetRootResourceId(),
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
google_apis::test_util::CreateCopyResultCallback(&error, &file_list));
base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
ASSERT_TRUE(file_list);
}
TEST_F(JobSchedulerTest, Search) {
ConnectToWifi();
google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
scoped_ptr<google_apis::ResourceList> resource_list;
scoped_ptr<google_apis::FileList> file_list;
scheduler_->Search(
"File", // search query
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
google_apis::test_util::CreateCopyResultCallback(&error, &file_list));
base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
ASSERT_TRUE(file_list);
}
TEST_F(JobSchedulerTest, GetChangeList) {
......@@ -286,15 +283,14 @@ TEST_F(JobSchedulerTest, GetChangeList) {
}
error = google_apis::GDATA_OTHER_ERROR;
scoped_ptr<google_apis::ResourceList> resource_list;
scoped_ptr<google_apis::ChangeList> change_list;
scheduler_->GetChangeList(
old_largest_change_id + 1,
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
google_apis::test_util::CreateCopyResultCallback(&error, &change_list));
base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
ASSERT_TRUE(change_list);
}
TEST_F(JobSchedulerTest, GetRemainingChangeList) {
......@@ -302,33 +298,29 @@ TEST_F(JobSchedulerTest, GetRemainingChangeList) {
fake_drive_service_->set_default_max_results(2);
google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
scoped_ptr<google_apis::ResourceList> resource_list;
scoped_ptr<google_apis::ChangeList> change_list;
scheduler_->GetAllResourceList(
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
scheduler_->GetChangeList(
0,
google_apis::test_util::CreateCopyResultCallback(&error, &change_list));
base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
ASSERT_TRUE(change_list);
const google_apis::Link* next_link =
resource_list->GetLinkByType(google_apis::Link::LINK_NEXT);
ASSERT_TRUE(next_link);
// Keep the next url before releasing the |resource_list|.
GURL next_url(next_link->href());
// Keep the next url before releasing the |change_list|.
GURL next_url(change_list->next_link());
error = google_apis::GDATA_OTHER_ERROR;
resource_list.reset();
change_list.reset();
scheduler_->GetRemainingChangeList(
next_url,
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
google_apis::test_util::CreateCopyResultCallback(&error, &change_list));
base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
ASSERT_TRUE(change_list);
}
TEST_F(JobSchedulerTest, GetRemainingFileList) {
......@@ -336,34 +328,29 @@ TEST_F(JobSchedulerTest, GetRemainingFileList) {
fake_drive_service_->set_default_max_results(2);
google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
scoped_ptr<google_apis::ResourceList> resource_list;
scoped_ptr<google_apis::FileList> file_list;
scheduler_->GetResourceListInDirectory(
scheduler_->GetFileListInDirectory(
fake_drive_service_->GetRootResourceId(),
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
google_apis::test_util::CreateCopyResultCallback(&error, &file_list));
base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
ASSERT_TRUE(file_list);
const google_apis::Link* next_link =
resource_list->GetLinkByType(google_apis::Link::LINK_NEXT);
ASSERT_TRUE(next_link);
// Keep the next url before releasing the |resource_list|.
GURL next_url(next_link->href());
// Keep the next url before releasing the |file_list|.
GURL next_url(file_list->next_link());
error = google_apis::GDATA_OTHER_ERROR;
resource_list.reset();
file_list.reset();
scheduler_->GetRemainingFileList(
next_url,
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
google_apis::test_util::CreateCopyResultCallback(&error, &file_list));
base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
ASSERT_TRUE(file_list);
}
TEST_F(JobSchedulerTest, GetResourceEntry) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment