summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-29 22:32:51 +0000
committerhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-29 22:32:51 +0000
commitb9c0bae4d6f9518a0641ffa7f5e650057016cf10 (patch)
treea0150bcd93ba3ed75e036bcffd359740f33b544b
parentd5166d1ba7e08b440ae3150e65e8cce198a404e3 (diff)
downloadchromium_src-b9c0bae4d6f9518a0641ffa7f5e650057016cf10.zip
chromium_src-b9c0bae4d6f9518a0641ffa7f5e650057016cf10.tar.gz
chromium_src-b9c0bae4d6f9518a0641ffa7f5e650057016cf10.tar.bz2
drive: Change DriveServiceInterface::GetChangeList's callback type to ChangeListCallback
Move ConvertChangeListToResourceList() call to the callers' side. Replace ChangeList::set_items() with mutable_items() to efficiently handle data received from the server. BUG=231125 TEST=unit_tests Review URL: https://codereview.chromium.org/309463002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@273626 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/drive/job_scheduler.cc21
-rw-r--r--chrome/browser/chromeos/drive/job_scheduler.h7
-rw-r--r--chrome/browser/drive/drive_api_service.cc42
-rw-r--r--chrome/browser/drive/drive_api_service.h4
-rw-r--r--chrome/browser/drive/drive_service_interface.h14
-rw-r--r--chrome/browser/drive/dummy_drive_service.cc5
-rw-r--r--chrome/browser/drive/dummy_drive_service.h4
-rw-r--r--chrome/browser/drive/fake_drive_service.cc89
-rw-r--r--chrome/browser/drive/fake_drive_service.h6
-rw-r--r--chrome/browser/drive/fake_drive_service_unittest.cc107
-rw-r--r--chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc4
-rw-r--r--chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.h4
-rw-r--r--chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.cc4
-rw-r--r--chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.h4
-rw-r--r--chrome/browser/sync_file_system/drive_backend/list_changes_task.cc39
-rw-r--r--chrome/browser/sync_file_system/drive_backend/list_changes_task.h4
-rw-r--r--chrome/browser/sync_file_system/drive_backend_v1/api_util.cc20
-rw-r--r--chrome/browser/sync_file_system/drive_backend_v1/api_util.h4
-rw-r--r--google_apis/drive/drive_api_parser.h8
19 files changed, 201 insertions, 189 deletions
diff --git a/chrome/browser/chromeos/drive/job_scheduler.cc b/chrome/browser/chromeos/drive/job_scheduler.cc
index 615178e..9ad7886 100644
--- a/chrome/browser/chromeos/drive/job_scheduler.cc
+++ b/chrome/browser/chromeos/drive/job_scheduler.cc
@@ -10,6 +10,7 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "chrome/browser/chromeos/drive/file_system_util.h"
+#include "chrome/browser/drive/drive_api_util.h"
#include "chrome/browser/drive/event_logger.h"
#include "chrome/common/pref_names.h"
#include "content/public/browser/browser_thread.h"
@@ -334,7 +335,7 @@ void JobScheduler::GetChangeList(
&DriveServiceInterface::GetChangeList,
base::Unretained(drive_service_),
start_changestamp,
- base::Bind(&JobScheduler::OnGetResourceListJobDone,
+ base::Bind(&JobScheduler::OnGetChangeListJobDone,
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
@@ -353,7 +354,7 @@ void JobScheduler::GetRemainingChangeList(
&DriveServiceInterface::GetRemainingChangeList,
base::Unretained(drive_service_),
next_link,
- base::Bind(&JobScheduler::OnGetResourceListJobDone,
+ base::Bind(&JobScheduler::OnGetChangeListJobDone,
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
@@ -898,6 +899,22 @@ bool JobScheduler::OnJobDone(JobID job_id, google_apis::GDataErrorCode error) {
return !should_retry;
}
+void JobScheduler::OnGetChangeListJobDone(
+ JobID job_id,
+ const google_apis::GetResourceListCallback& 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>());
+
+ }
+}
+
void JobScheduler::OnGetResourceListJobDone(
JobID job_id,
const google_apis::GetResourceListCallback& callback,
diff --git a/chrome/browser/chromeos/drive/job_scheduler.h b/chrome/browser/chromeos/drive/job_scheduler.h
index 1078287..e1d0ff6 100644
--- a/chrome/browser/chromeos/drive/job_scheduler.h
+++ b/chrome/browser/chromeos/drive/job_scheduler.h
@@ -275,6 +275,13 @@ class JobScheduler
// Retries the job if needed and returns false. Otherwise returns true.
bool OnJobDone(JobID job_id, google_apis::GDataErrorCode error);
+ // Callback for job finishing with a ChangeListCallback.
+ void OnGetChangeListJobDone(
+ JobID job_id,
+ const google_apis::GetResourceListCallback& callback,
+ google_apis::GDataErrorCode error,
+ scoped_ptr<google_apis::ChangeList> change_list);
+
// Callback for job finishing with a GetResourceListCallback.
void OnGetResourceListJobDone(
JobID job_id,
diff --git a/chrome/browser/drive/drive_api_service.cc b/chrome/browser/drive/drive_api_service.cc
index 017dc1a..4df202d 100644
--- a/chrome/browser/drive/drive_api_service.cc
+++ b/chrome/browser/drive/drive_api_service.cc
@@ -31,6 +31,7 @@ using google_apis::AuthStatusCallback;
using google_apis::AuthorizeAppCallback;
using google_apis::CancelCallback;
using google_apis::ChangeList;
+using google_apis::ChangeListCallback;
using google_apis::DownloadActionCallback;
using google_apis::EntryActionCallback;
using google_apis::FileList;
@@ -185,35 +186,6 @@ void ConvertFileListToResourceListOnBlockingPoolAndRun(
base::Bind(&DidConvertToResourceListOnBlockingPool, callback));
}
-// Thin adapter of ConvertChangeListToResourceList.
-scoped_ptr<ResourceList> ConvertChangeListToResourceList(
- scoped_ptr<ChangeList> change_list) {
- return util::ConvertChangeListToResourceList(*change_list);
-}
-
-// Converts the FileList value to ResourceList on blocking pool and runs
-// |callback| on the UI thread.
-void ConvertChangeListToResourceListOnBlockingPoolAndRun(
- scoped_refptr<base::TaskRunner> blocking_task_runner,
- const GetResourceListCallback& callback,
- GDataErrorCode error,
- scoped_ptr<ChangeList> value) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DCHECK(!callback.is_null());
-
- if (!value) {
- callback.Run(error, scoped_ptr<ResourceList>());
- return;
- }
-
- // Convert the value on blocking pool.
- base::PostTaskAndReplyWithResult(
- blocking_task_runner.get(),
- FROM_HERE,
- base::Bind(&ConvertChangeListToResourceList, base::Passed(&value)),
- base::Bind(&DidConvertToResourceListOnBlockingPool, callback));
-}
-
// Converts the FileResource value to ResourceEntry for upload range request,
// and runs |callback| on the UI thread.
void ConvertFileResourceToResourceEntryForUploadRangeAndRun(
@@ -435,14 +407,12 @@ CancelCallback DriveAPIService::SearchByTitle(
CancelCallback DriveAPIService::GetChangeList(
int64 start_changestamp,
- const GetResourceListCallback& callback) {
+ const ChangeListCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
ChangesListRequest* request = new ChangesListRequest(
- sender_.get(), url_generator_,
- base::Bind(&ConvertChangeListToResourceListOnBlockingPoolAndRun,
- blocking_task_runner_, callback));
+ sender_.get(), url_generator_, callback);
request->set_max_results(kMaxNumFilesResourcePerRequest);
request->set_start_change_id(start_changestamp);
request->set_fields(kChangeListFields);
@@ -451,15 +421,13 @@ CancelCallback DriveAPIService::GetChangeList(
CancelCallback DriveAPIService::GetRemainingChangeList(
const GURL& next_link,
- const GetResourceListCallback& callback) {
+ const ChangeListCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!next_link.is_empty());
DCHECK(!callback.is_null());
ChangesListNextPageRequest* request = new ChangesListNextPageRequest(
- sender_.get(),
- base::Bind(&ConvertChangeListToResourceListOnBlockingPoolAndRun,
- blocking_task_runner_, callback));
+ sender_.get(), callback);
request->set_next_link(next_link);
request->set_fields(kChangeListFields);
return sender_->StartRequestWithRetry(request);
diff --git a/chrome/browser/drive/drive_api_service.h b/chrome/browser/drive/drive_api_service.h
index a43fe05..cc4c49a 100644
--- a/chrome/browser/drive/drive_api_service.h
+++ b/chrome/browser/drive/drive_api_service.h
@@ -88,10 +88,10 @@ class DriveAPIService : public DriveServiceInterface,
const google_apis::GetResourceListCallback& callback) OVERRIDE;
virtual google_apis::CancelCallback GetChangeList(
int64 start_changestamp,
- const google_apis::GetResourceListCallback& callback) OVERRIDE;
+ const google_apis::ChangeListCallback& callback) OVERRIDE;
virtual google_apis::CancelCallback GetRemainingChangeList(
const GURL& next_link,
- const google_apis::GetResourceListCallback& callback) OVERRIDE;
+ const google_apis::ChangeListCallback& callback) OVERRIDE;
virtual google_apis::CancelCallback GetRemainingFileList(
const GURL& next_link,
const google_apis::GetResourceListCallback& callback) OVERRIDE;
diff --git a/chrome/browser/drive/drive_service_interface.h b/chrome/browser/drive/drive_service_interface.h
index 1b393d6..ae46e6b 100644
--- a/chrome/browser/drive/drive_service_interface.h
+++ b/chrome/browser/drive/drive_service_interface.h
@@ -198,9 +198,9 @@ class DriveServiceInterface {
// |callback| must not be null.
virtual google_apis::CancelCallback GetChangeList(
int64 start_changestamp,
- const google_apis::GetResourceListCallback& callback) = 0;
+ const google_apis::ChangeListCallback& callback) = 0;
- // The result of GetChangeList() and GetAllResourceList() may be paged.
+ // The result of GetChangeList() may be paged.
// In such a case, a next link to fetch remaining result is returned.
// The page token can be used for this method. |callback| will be called upon
// completion.
@@ -208,12 +208,12 @@ class DriveServiceInterface {
// |next_link| must not be empty. |callback| must not be null.
virtual google_apis::CancelCallback GetRemainingChangeList(
const GURL& next_link,
- const google_apis::GetResourceListCallback& callback) = 0;
+ const google_apis::ChangeListCallback& callback) = 0;
- // The result of GetResourceListInDirectory(), Search() and SearchByTitle()
- // may be paged. In such a case, a next link to fetch remaining result is
- // returned. The page token can be used for this method. |callback| will be
- // called upon completion.
+ // The result of GetAllResourceList(), GetResourceListInDirectory(), Search()
+ // and SearchByTitle() may be paged. In such a case, a next link to fetch
+ // remaining result is returned. The page token can be used for this method.
+ // |callback| will be called upon completion.
//
// |next_link| must not be empty. |callback| must not be null.
virtual google_apis::CancelCallback GetRemainingFileList(
diff --git a/chrome/browser/drive/dummy_drive_service.cc b/chrome/browser/drive/dummy_drive_service.cc
index 1528c15..0094ddf 100644
--- a/chrome/browser/drive/dummy_drive_service.cc
+++ b/chrome/browser/drive/dummy_drive_service.cc
@@ -12,6 +12,7 @@ using google_apis::AppListCallback;
using google_apis::AuthStatusCallback;
using google_apis::AuthorizeAppCallback;
using google_apis::CancelCallback;
+using google_apis::ChangeListCallback;
using google_apis::DownloadActionCallback;
using google_apis::EntryActionCallback;
using google_apis::GetContentCallback;
@@ -74,11 +75,11 @@ CancelCallback DummyDriveService::SearchByTitle(
CancelCallback DummyDriveService::GetChangeList(
int64 start_changestamp,
- const GetResourceListCallback& callback) { return CancelCallback(); }
+ const ChangeListCallback& callback) { return CancelCallback(); }
CancelCallback DummyDriveService::GetRemainingChangeList(
const GURL& next_link,
- const GetResourceListCallback& callback) { return CancelCallback(); }
+ const ChangeListCallback& callback) { return CancelCallback(); }
CancelCallback DummyDriveService::GetRemainingFileList(
const GURL& next_link,
diff --git a/chrome/browser/drive/dummy_drive_service.h b/chrome/browser/drive/dummy_drive_service.h
index ce6ee94..9882cdda 100644
--- a/chrome/browser/drive/dummy_drive_service.h
+++ b/chrome/browser/drive/dummy_drive_service.h
@@ -44,10 +44,10 @@ class DummyDriveService : public DriveServiceInterface {
const google_apis::GetResourceListCallback& callback) OVERRIDE;
virtual google_apis::CancelCallback GetChangeList(
int64 start_changestamp,
- const google_apis::GetResourceListCallback& callback) OVERRIDE;
+ const google_apis::ChangeListCallback& callback) OVERRIDE;
virtual google_apis::CancelCallback GetRemainingChangeList(
const GURL& next_link,
- const google_apis::GetResourceListCallback& callback) OVERRIDE;
+ const google_apis::ChangeListCallback& callback) OVERRIDE;
virtual google_apis::CancelCallback GetRemainingFileList(
const GURL& next_link,
const google_apis::GetResourceListCallback& callback) OVERRIDE;
diff --git a/chrome/browser/drive/fake_drive_service.cc b/chrome/browser/drive/fake_drive_service.cc
index 971b7c4..2c87fe6 100644
--- a/chrome/browser/drive/fake_drive_service.cc
+++ b/chrome/browser/drive/fake_drive_service.cc
@@ -33,6 +33,8 @@ using google_apis::AppListCallback;
using google_apis::AuthStatusCallback;
using google_apis::AuthorizeAppCallback;
using google_apis::CancelCallback;
+using google_apis::ChangeList;
+using google_apis::ChangeListCallback;
using google_apis::ChangeResource;
using google_apis::DownloadActionCallback;
using google_apis::EntryActionCallback;
@@ -70,7 +72,7 @@ namespace {
// - Phrases quoted by double/single quotes
// - AND search for multiple words/phrases segmented by space
// - Limited attribute search. Only "title:" is supported.
-bool EntryMatchWithQuery(const ResourceEntry& entry,
+bool EntryMatchWithQuery(const ChangeResource& entry,
const std::string& query) {
base::StringTokenizer tokenizer(query, " ");
tokenizer.set_quote_chars("\"'");
@@ -94,7 +96,8 @@ bool EntryMatchWithQuery(const ResourceEntry& entry,
if (!key.empty() && key != "title")
return false;
// Search query in the title.
- if (entry.title().find(value) == std::string::npos)
+ if (!entry.file() ||
+ entry.file()->title().find(value) == std::string::npos)
return false;
}
return true;
@@ -120,6 +123,14 @@ void EntryActionCallbackAdapter(
callback.Run(error);
}
+void GetResourceListCallbackAdapter(const GetResourceListCallback& callback,
+ GDataErrorCode error,
+ scoped_ptr<ChangeList> change_list) {
+ callback.Run(error, change_list ?
+ util::ConvertChangeListToResourceList(*change_list) :
+ scoped_ptr<ResourceList>());
+}
+
} // namespace
struct FakeDriveService::EntryInfo {
@@ -275,7 +286,8 @@ CancelCallback FakeDriveService::GetAllResourceList(
0, // start offset
default_max_results_,
&resource_list_load_count_,
- callback);
+ base::Bind(&GetResourceListCallbackAdapter,
+ callback));
return CancelCallback();
}
@@ -292,7 +304,8 @@ CancelCallback FakeDriveService::GetResourceListInDirectory(
0, // start offset
default_max_results_,
&directory_load_count_,
- callback);
+ base::Bind(&GetResourceListCallbackAdapter,
+ callback));
return CancelCallback();
}
@@ -309,7 +322,8 @@ CancelCallback FakeDriveService::Search(
0, // start offset
default_max_results_,
NULL,
- callback);
+ base::Bind(&GetResourceListCallbackAdapter,
+ callback));
return CancelCallback();
}
@@ -329,13 +343,14 @@ CancelCallback FakeDriveService::SearchByTitle(
0, // start offset
default_max_results_,
NULL,
- callback);
+ base::Bind(&GetResourceListCallbackAdapter,
+ callback));
return CancelCallback();
}
CancelCallback FakeDriveService::GetChangeList(
int64 start_changestamp,
- const GetResourceListCallback& callback) {
+ const ChangeListCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
@@ -351,7 +366,7 @@ CancelCallback FakeDriveService::GetChangeList(
CancelCallback FakeDriveService::GetRemainingChangeList(
const GURL& next_link,
- const GetResourceListCallback& callback) {
+ const ChangeListCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!next_link.is_empty());
DCHECK(!callback.is_null());
@@ -404,7 +419,8 @@ CancelCallback FakeDriveService::GetRemainingFileList(
DCHECK(!next_link.is_empty());
DCHECK(!callback.is_null());
- return GetRemainingChangeList(next_link, callback);
+ return GetRemainingChangeList(
+ next_link, base::Bind(&GetResourceListCallbackAdapter, callback));
}
CancelCallback FakeDriveService::GetResourceEntry(
@@ -1376,24 +1392,23 @@ void FakeDriveService::GetResourceListInternal(
int start_offset,
int max_results,
int* load_counter,
- const GetResourceListCallback& callback) {
+ const ChangeListCallback& callback) {
if (offline_) {
base::MessageLoop::current()->PostTask(
FROM_HERE,
base::Bind(callback,
GDATA_NO_CONNECTION,
- base::Passed(scoped_ptr<ResourceList>())));
+ base::Passed(scoped_ptr<ChangeList>())));
return;
}
// Filter out entries per parameters like |directory_resource_id| and
// |search_query|.
- ScopedVector<ResourceEntry> entries;
+ ScopedVector<ChangeResource> entries;
int num_entries_matched = 0;
for (EntryInfoMap::iterator it = entries_.begin(); it != entries_.end();
++it) {
- scoped_ptr<ResourceEntry> entry =
- util::ConvertChangeResourceToResourceEntry(it->second->change_resource);
+ const ChangeResource& entry = it->second->change_resource;
bool should_exclude = false;
// If |directory_resource_id| is set, exclude the entry if it's not in
@@ -1401,13 +1416,9 @@ void FakeDriveService::GetResourceListInternal(
if (!directory_resource_id.empty()) {
// Get the parent resource ID of the entry.
std::string parent_resource_id;
- const google_apis::Link* parent_link =
- entry->GetLinkByType(Link::LINK_PARENT);
- if (parent_link) {
- parent_resource_id =
- net::UnescapeURLComponent(parent_link->href().ExtractFileName(),
- net::UnescapeRule::URL_SPECIAL_CHARS);
- }
+ if (entry.file() && !entry.file()->parents().empty())
+ parent_resource_id = entry.file()->parents()[0].file_id();
+
if (directory_resource_id != parent_resource_id)
should_exclude = true;
}
@@ -1415,7 +1426,7 @@ void FakeDriveService::GetResourceListInternal(
// If |search_query| is set, exclude the entry if it does not contain the
// search query in the title.
if (!should_exclude && !search_query.empty() &&
- !EntryMatchWithQuery(*entry, search_query)) {
+ !EntryMatchWithQuery(entry, search_query)) {
should_exclude = true;
}
@@ -1423,12 +1434,14 @@ void FakeDriveService::GetResourceListInternal(
// changestamp is older than |largest_changestamp|.
// See https://developers.google.com/google-apps/documents-list/
// #retrieving_all_changes_since_a_given_changestamp
- if (start_changestamp > 0 && entry->changestamp() < start_changestamp)
+ if (start_changestamp > 0 && entry.change_id() < start_changestamp)
should_exclude = true;
// If the caller requests other list than change list by specifying
// zero-|start_changestamp|, exclude deleted entry from the result.
- if (!start_changestamp && entry->deleted())
+ const bool deleted = entry.is_deleted() ||
+ (entry.file() && entry.file()->labels().is_trashed());
+ if (!start_changestamp && deleted)
should_exclude = true;
// The entry matched the criteria for inclusion.
@@ -1441,14 +1454,23 @@ void FakeDriveService::GetResourceListInternal(
if (start_offset > 0 && num_entries_matched <= start_offset)
should_exclude = true;
- if (!should_exclude)
- entries.push_back(entry.release());
+ if (!should_exclude) {
+ scoped_ptr<ChangeResource> entry_copied(new ChangeResource);
+ entry_copied->set_change_id(entry.change_id());
+ entry_copied->set_file_id(entry.file_id());
+ entry_copied->set_deleted(entry.is_deleted());
+ if (entry.file()) {
+ entry_copied->set_file(
+ make_scoped_ptr(new FileResource(*entry.file())));
+ }
+ entry_copied->set_modification_date(entry.modification_date());
+ entries.push_back(entry_copied.release());
+ }
}
- scoped_ptr<ResourceList> resource_list(new ResourceList);
+ scoped_ptr<ChangeList> change_list(new ChangeList);
if (start_changestamp > 0 && start_offset == 0) {
- resource_list->set_largest_changestamp(
- about_resource_->largest_change_id());
+ change_list->set_largest_change_id(about_resource_->largest_change_id());
}
// If |max_results| is set, trim the entries if the number exceeded the max
@@ -1477,18 +1499,15 @@ void FakeDriveService::GetResourceListInternal(
next_url, "parent", directory_resource_id);
}
- Link* link = new Link;
- link->set_type(Link::LINK_NEXT);
- link->set_href(next_url);
- resource_list->mutable_links()->push_back(link);
+ change_list->set_next_link(next_url);
}
- resource_list->set_entries(entries.Pass());
+ *change_list->mutable_items() = entries.Pass();
if (load_counter)
*load_counter += 1;
base::MessageLoop::current()->PostTask(
FROM_HERE,
- base::Bind(callback, HTTP_SUCCESS, base::Passed(&resource_list)));
+ base::Bind(callback, HTTP_SUCCESS, base::Passed(&change_list)));
}
GURL FakeDriveService::GetNewUploadSessionUrl() {
diff --git a/chrome/browser/drive/fake_drive_service.h b/chrome/browser/drive/fake_drive_service.h
index 738c621..eb0d8ec 100644
--- a/chrome/browser/drive/fake_drive_service.h
+++ b/chrome/browser/drive/fake_drive_service.h
@@ -130,10 +130,10 @@ class FakeDriveService : public DriveServiceInterface {
const google_apis::GetResourceListCallback& callback) OVERRIDE;
virtual google_apis::CancelCallback GetChangeList(
int64 start_changestamp,
- const google_apis::GetResourceListCallback& callback) OVERRIDE;
+ const google_apis::ChangeListCallback& callback) OVERRIDE;
virtual google_apis::CancelCallback GetRemainingChangeList(
const GURL& next_link,
- const google_apis::GetResourceListCallback& callback) OVERRIDE;
+ const google_apis::ChangeListCallback& callback) OVERRIDE;
virtual google_apis::CancelCallback GetRemainingFileList(
const GURL& next_link,
const google_apis::GetResourceListCallback& callback) OVERRIDE;
@@ -311,7 +311,7 @@ class FakeDriveService : public DriveServiceInterface {
int start_offset,
int max_results,
int* load_counter,
- const google_apis::GetResourceListCallback& callback);
+ const google_apis::ChangeListCallback& callback);
// Returns new upload session URL.
GURL GetNewUploadSessionUrl();
diff --git a/chrome/browser/drive/fake_drive_service_unittest.cc b/chrome/browser/drive/fake_drive_service_unittest.cc
index e592323..9e050c7 100644
--- a/chrome/browser/drive/fake_drive_service_unittest.cc
+++ b/chrome/browser/drive/fake_drive_service_unittest.cc
@@ -24,6 +24,8 @@
using google_apis::AboutResource;
using google_apis::AppList;
+using google_apis::ChangeList;
+using google_apis::ChangeResource;
using google_apis::GDATA_NO_CONNECTION;
using google_apis::GDATA_OTHER_ERROR;
using google_apis::GDataErrorCode;
@@ -374,19 +376,19 @@ TEST_F(FakeDriveServiceTest, GetChangeList_NoNewEntries) {
ASSERT_TRUE(test_util::SetUpTestEntries(&fake_service_));
GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<ResourceList> resource_list;
+ scoped_ptr<ChangeList> change_list;
fake_service_.GetChangeList(
fake_service_.about_resource().largest_change_id() + 1,
- test_util::CreateCopyResultCallback(&error, &resource_list));
+ test_util::CreateCopyResultCallback(&error, &change_list));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(HTTP_SUCCESS, error);
- ASSERT_TRUE(resource_list);
+ ASSERT_TRUE(change_list);
EXPECT_EQ(fake_service_.about_resource().largest_change_id(),
- resource_list->largest_changestamp());
+ change_list->largest_change_id());
// This should be empty as the latest changestamp was passed to
// GetResourceList(), hence there should be no new entries.
- EXPECT_EQ(0U, resource_list->entries().size());
+ EXPECT_EQ(0U, change_list->items().size());
// It's considered loaded even if the result is empty.
EXPECT_EQ(1, fake_service_.change_list_load_count());
}
@@ -402,19 +404,20 @@ TEST_F(FakeDriveServiceTest, GetChangeList_WithNewEntry) {
// Get the resource list newer than old_largest_change_id.
GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<ResourceList> resource_list;
+ scoped_ptr<ChangeList> change_list;
fake_service_.GetChangeList(
old_largest_change_id + 1,
- test_util::CreateCopyResultCallback(&error, &resource_list));
+ test_util::CreateCopyResultCallback(&error, &change_list));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(HTTP_SUCCESS, error);
- ASSERT_TRUE(resource_list);
+ ASSERT_TRUE(change_list);
EXPECT_EQ(fake_service_.about_resource().largest_change_id(),
- resource_list->largest_changestamp());
+ change_list->largest_change_id());
// The result should only contain the newly created directory.
- ASSERT_EQ(1U, resource_list->entries().size());
- EXPECT_EQ("new directory", resource_list->entries()[0]->title());
+ ASSERT_EQ(1U, change_list->items().size());
+ ASSERT_TRUE(change_list->items()[0]->file());
+ EXPECT_EQ("new directory", change_list->items()[0]->file()->title());
EXPECT_EQ(1, fake_service_.change_list_load_count());
}
@@ -423,14 +426,14 @@ TEST_F(FakeDriveServiceTest, GetChangeList_Offline) {
fake_service_.set_offline(true);
GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<ResourceList> resource_list;
+ scoped_ptr<ChangeList> change_list;
fake_service_.GetChangeList(
654321, // start_changestamp
- test_util::CreateCopyResultCallback(&error, &resource_list));
+ test_util::CreateCopyResultCallback(&error, &change_list));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(GDATA_NO_CONNECTION, error);
- EXPECT_FALSE(resource_list);
+ EXPECT_FALSE(change_list);
}
TEST_F(FakeDriveServiceTest, GetChangeList_DeletedEntry) {
@@ -449,22 +452,22 @@ TEST_F(FakeDriveServiceTest, GetChangeList_DeletedEntry) {
// Get the resource list newer than old_largest_change_id.
error = GDATA_OTHER_ERROR;
- scoped_ptr<ResourceList> resource_list;
+ scoped_ptr<ChangeList> change_list;
fake_service_.GetChangeList(
old_largest_change_id + 1,
- test_util::CreateCopyResultCallback(&error, &resource_list));
+ test_util::CreateCopyResultCallback(&error, &change_list));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(HTTP_SUCCESS, error);
- ASSERT_TRUE(resource_list);
+ ASSERT_TRUE(change_list);
EXPECT_EQ(fake_service_.about_resource().largest_change_id(),
- resource_list->largest_changestamp());
+ change_list->largest_change_id());
// The result should only contain the deleted file.
- ASSERT_EQ(1U, resource_list->entries().size());
- const ResourceEntry& entry = *resource_list->entries()[0];
- EXPECT_EQ("file:2_file_resource_id", entry.resource_id());
- EXPECT_TRUE(entry.title().empty());
- EXPECT_TRUE(entry.deleted());
+ ASSERT_EQ(1U, change_list->items().size());
+ const ChangeResource& item = *change_list->items()[0];
+ EXPECT_EQ("file:2_file_resource_id", item.file_id());
+ EXPECT_FALSE(item.file());
+ EXPECT_TRUE(item.is_deleted());
EXPECT_EQ(1, fake_service_.change_list_load_count());
}
@@ -483,25 +486,26 @@ TEST_F(FakeDriveServiceTest, GetChangeList_TrashedEntry) {
// Get the resource list newer than old_largest_change_id.
error = GDATA_OTHER_ERROR;
- scoped_ptr<ResourceList> resource_list;
+ scoped_ptr<ChangeList> change_list;
fake_service_.GetChangeList(
old_largest_change_id + 1,
- test_util::CreateCopyResultCallback(&error, &resource_list));
+ test_util::CreateCopyResultCallback(&error, &change_list));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(HTTP_SUCCESS, error);
- ASSERT_TRUE(resource_list);
+ ASSERT_TRUE(change_list);
EXPECT_EQ(fake_service_.about_resource().largest_change_id(),
- resource_list->largest_changestamp());
+ change_list->largest_change_id());
// The result should only contain the trashed file.
- ASSERT_EQ(1U, resource_list->entries().size());
- const ResourceEntry& entry = *resource_list->entries()[0];
- EXPECT_EQ("file:2_file_resource_id", entry.resource_id());
- EXPECT_TRUE(entry.deleted());
+ ASSERT_EQ(1U, change_list->items().size());
+ const ChangeResource& item = *change_list->items()[0];
+ EXPECT_EQ("file:2_file_resource_id", item.file_id());
+ ASSERT_TRUE(item.file());
+ EXPECT_TRUE(item.file()->labels().is_trashed());
EXPECT_EQ(1, fake_service_.change_list_load_count());
}
-TEST_F(FakeDriveServiceTest, GetRemainingChangeList_GetAllResourceList) {
+TEST_F(FakeDriveServiceTest, GetRemainingFileList_GetAllResourceList) {
ASSERT_TRUE(test_util::SetUpTestEntries(&fake_service_));
fake_service_.set_default_max_results(6);
@@ -528,7 +532,7 @@ TEST_F(FakeDriveServiceTest, GetRemainingChangeList_GetAllResourceList) {
error = GDATA_OTHER_ERROR;
resource_list.reset();
- fake_service_.GetRemainingChangeList(
+ fake_service_.GetRemainingFileList(
next_url,
test_util::CreateCopyResultCallback(&error, &resource_list));
base::RunLoop().RunUntilIdle();
@@ -546,7 +550,7 @@ TEST_F(FakeDriveServiceTest, GetRemainingChangeList_GetAllResourceList) {
error = GDATA_OTHER_ERROR;
resource_list.reset();
- fake_service_.GetRemainingChangeList(
+ fake_service_.GetRemainingFileList(
next_url,
test_util::CreateCopyResultCallback(&error, &resource_list));
base::RunLoop().RunUntilIdle();
@@ -669,56 +673,51 @@ TEST_F(FakeDriveServiceTest, GetRemainingChangeList_GetChangeList) {
}
GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<ResourceList> resource_list;
+ scoped_ptr<ChangeList> change_list;
fake_service_.GetChangeList(
old_largest_change_id + 1, // start_changestamp
- test_util::CreateCopyResultCallback(&error, &resource_list));
+ test_util::CreateCopyResultCallback(&error, &change_list));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(HTTP_SUCCESS, error);
- ASSERT_TRUE(resource_list);
+ ASSERT_TRUE(change_list);
// Do some sanity check.
// The number of results is 5 entries. Thus, it should split into three
// chunks: 2, 2 and then 1.
- EXPECT_EQ(2U, resource_list->entries().size());
+ EXPECT_EQ(2U, change_list->items().size());
EXPECT_EQ(1, fake_service_.change_list_load_count());
// Second page loading.
- const google_apis::Link* next_link =
- resource_list->GetLinkByType(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 = GDATA_OTHER_ERROR;
- resource_list.reset();
+ change_list.reset();
fake_service_.GetRemainingChangeList(
next_url,
- test_util::CreateCopyResultCallback(&error, &resource_list));
+ test_util::CreateCopyResultCallback(&error, &change_list));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(HTTP_SUCCESS, error);
- ASSERT_TRUE(resource_list);
+ ASSERT_TRUE(change_list);
- EXPECT_EQ(2U, resource_list->entries().size());
+ EXPECT_EQ(2U, change_list->items().size());
EXPECT_EQ(1, fake_service_.change_list_load_count());
// Third page loading.
- next_link = resource_list->GetLinkByType(Link::LINK_NEXT);
- ASSERT_TRUE(next_link);
- next_url = GURL(next_link->href());
+ next_url = change_list->next_link();
error = GDATA_OTHER_ERROR;
- resource_list.reset();
+ change_list.reset();
fake_service_.GetRemainingChangeList(
next_url,
- test_util::CreateCopyResultCallback(&error, &resource_list));
+ test_util::CreateCopyResultCallback(&error, &change_list));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(HTTP_SUCCESS, error);
- ASSERT_TRUE(resource_list);
+ ASSERT_TRUE(change_list);
- EXPECT_EQ(1U, resource_list->entries().size());
+ EXPECT_EQ(1U, change_list->items().size());
EXPECT_EQ(1, fake_service_.change_list_load_count());
}
diff --git a/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc b/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc
index 0afa45c..39ce2d4 100644
--- a/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc
+++ b/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc
@@ -111,7 +111,7 @@ google_apis::CancelCallback DriveServiceOnWorker::GetAboutResource(
google_apis::CancelCallback DriveServiceOnWorker::GetChangeList(
int64 start_changestamp,
- const google_apis::GetResourceListCallback& callback) {
+ const google_apis::ChangeListCallback& callback) {
ui_task_runner_->PostTask(
FROM_HERE,
base::Bind(&DriveServiceWrapper::GetChangeList,
@@ -127,7 +127,7 @@ google_apis::CancelCallback DriveServiceOnWorker::GetChangeList(
google_apis::CancelCallback DriveServiceOnWorker::GetRemainingChangeList(
const GURL& next_link,
- const google_apis::GetResourceListCallback& callback) {
+ const google_apis::ChangeListCallback& callback) {
ui_task_runner_->PostTask(
FROM_HERE,
base::Bind(&DriveServiceWrapper::GetRemainingChangeList,
diff --git a/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.h b/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.h
index 82f988a..66b8a9e 100644
--- a/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.h
+++ b/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.h
@@ -54,11 +54,11 @@ class DriveServiceOnWorker : public drive::DriveServiceInterface {
virtual google_apis::CancelCallback GetChangeList(
int64 start_changestamp,
- const google_apis::GetResourceListCallback& callback) OVERRIDE;
+ const google_apis::ChangeListCallback& callback) OVERRIDE;
virtual google_apis::CancelCallback GetRemainingChangeList(
const GURL& next_link,
- const google_apis::GetResourceListCallback& callback) OVERRIDE;
+ const google_apis::ChangeListCallback& callback) OVERRIDE;
virtual std::string GetRootResourceId() const OVERRIDE;
diff --git a/chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.cc b/chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.cc
index d0facd0..24f4476 100644
--- a/chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.cc
+++ b/chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.cc
@@ -58,13 +58,13 @@ void DriveServiceWrapper::GetAboutResource(
void DriveServiceWrapper::GetChangeList(
int64 start_changestamp,
- const google_apis::GetResourceListCallback& callback) {
+ const google_apis::ChangeListCallback& callback) {
drive_service_->GetChangeList(start_changestamp, callback);
}
void DriveServiceWrapper::GetRemainingChangeList(
const GURL& next_link,
- const google_apis::GetResourceListCallback& callback) {
+ const google_apis::ChangeListCallback& callback) {
drive_service_->GetRemainingChangeList(next_link, callback);
}
diff --git a/chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.h b/chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.h
index 75b27cb..1c2efde 100644
--- a/chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.h
+++ b/chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.h
@@ -42,11 +42,11 @@ class DriveServiceWrapper : public base::SupportsWeakPtr<DriveServiceWrapper> {
void GetChangeList(
int64 start_changestamp,
- const google_apis::GetResourceListCallback& callback);
+ const google_apis::ChangeListCallback& callback);
void GetRemainingChangeList(
const GURL& next_link,
- const google_apis::GetResourceListCallback& callback);
+ const google_apis::ChangeListCallback& callback);
void GetRemainingFileList(
const GURL& next_link,
diff --git a/chrome/browser/sync_file_system/drive_backend/list_changes_task.cc b/chrome/browser/sync_file_system/drive_backend/list_changes_task.cc
index 0b97960..3197a1c 100644
--- a/chrome/browser/sync_file_system/drive_backend/list_changes_task.cc
+++ b/chrome/browser/sync_file_system/drive_backend/list_changes_task.cc
@@ -7,7 +7,6 @@
#include "base/bind.h"
#include "base/format_macros.h"
#include "base/location.h"
-#include "chrome/browser/drive/drive_api_util.h"
#include "chrome/browser/drive/drive_service_interface.h"
#include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h"
#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
@@ -23,22 +22,6 @@
namespace sync_file_system {
namespace drive_backend {
-namespace {
-
-scoped_ptr<google_apis::ChangeResource> ConvertResourceEntryToChangeResource(
- const google_apis::ResourceEntry& entry) {
- scoped_ptr<google_apis::ChangeResource> out(new google_apis::ChangeResource);
- out->set_file_id(entry.resource_id());
- if (!entry.deleted())
- out->set_file(drive::util::ConvertResourceEntryToFileResource(entry));
- out->set_change_id(entry.changestamp());
- out->set_deleted(entry.deleted());
-
- return out.Pass();
-}
-
-} // namespace
-
ListChangesTask::ListChangesTask(SyncEngineContext* sync_context)
: sync_context_(sync_context),
weak_ptr_factory_(this) {
@@ -76,7 +59,7 @@ void ListChangesTask::StartListing(scoped_ptr<SyncTaskToken> token) {
void ListChangesTask::DidListChanges(
scoped_ptr<SyncTaskToken> token,
google_apis::GDataErrorCode error,
- scoped_ptr<google_apis::ResourceList> resource_list) {
+ scoped_ptr<google_apis::ChangeList> change_list) {
SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error);
if (status != SYNC_STATUS_OK) {
util::Log(logging::LOG_VERBOSE, FROM_HERE,
@@ -86,7 +69,7 @@ void ListChangesTask::DidListChanges(
return;
}
- if (!resource_list) {
+ if (!change_list) {
NOTREACHED();
util::Log(logging::LOG_VERBOSE, FROM_HERE,
"[Changes] Got invalid change list.");
@@ -95,16 +78,16 @@ void ListChangesTask::DidListChanges(
return;
}
- change_list_.reserve(change_list_.size() + resource_list->entries().size());
- for (size_t i = 0; i < resource_list->entries().size(); ++i) {
- change_list_.push_back(ConvertResourceEntryToChangeResource(
- *resource_list->entries()[i]).release());
- }
+ std::vector<google_apis::ChangeResource*> changes;
+ change_list->mutable_items()->release(&changes);
+
+ change_list_.reserve(change_list_.size() + changes.size());
+ for (size_t i = 0; i < changes.size(); ++i)
+ change_list_.push_back(changes[i]);
- GURL next_feed;
- if (resource_list->GetNextFeedURL(&next_feed)) {
+ if (!change_list->next_link().is_empty()) {
drive_service()->GetRemainingChangeList(
- next_feed,
+ change_list->next_link(),
base::Bind(
&ListChangesTask::DidListChanges,
weak_ptr_factory_.GetWeakPtr(),
@@ -126,7 +109,7 @@ void ListChangesTask::DidListChanges(
blocking_factor.Pass(),
base::Bind(&ListChangesTask::CheckInChangeList,
weak_ptr_factory_.GetWeakPtr(),
- resource_list->largest_changestamp()));
+ change_list->largest_change_id()));
}
void ListChangesTask::CheckInChangeList(int64 largest_change_id,
diff --git a/chrome/browser/sync_file_system/drive_backend/list_changes_task.h b/chrome/browser/sync_file_system/drive_backend/list_changes_task.h
index 272e788..c594ba3 100644
--- a/chrome/browser/sync_file_system/drive_backend/list_changes_task.h
+++ b/chrome/browser/sync_file_system/drive_backend/list_changes_task.h
@@ -16,8 +16,8 @@ class DriveServiceInterface;
}
namespace google_apis {
+class ChangeList;
class ChangeResource;
-class ResourceList;
}
namespace sync_file_system {
@@ -37,7 +37,7 @@ class ListChangesTask : public SyncTask {
void StartListing(scoped_ptr<SyncTaskToken> token);
void DidListChanges(scoped_ptr<SyncTaskToken> token,
google_apis::GDataErrorCode error,
- scoped_ptr<google_apis::ResourceList> resource_list);
+ scoped_ptr<google_apis::ChangeList> change_list);
void CheckInChangeList(int64 largest_change_id,
scoped_ptr<SyncTaskToken> token);
diff --git a/chrome/browser/sync_file_system/drive_backend_v1/api_util.cc b/chrome/browser/sync_file_system/drive_backend_v1/api_util.cc
index 2ec9791..62c579f 100644
--- a/chrome/browser/sync_file_system/drive_backend_v1/api_util.cc
+++ b/chrome/browser/sync_file_system/drive_backend_v1/api_util.cc
@@ -480,7 +480,7 @@ void APIUtil::ListChanges(int64 start_changestamp,
drive_service_->GetChangeList(
start_changestamp,
- base::Bind(&APIUtil::DidGetResourceList, AsWeakPtr(), callback));
+ base::Bind(&APIUtil::DidGetChangeList, AsWeakPtr(), callback));
}
void APIUtil::ContinueListing(const GURL& next_link,
@@ -675,6 +675,24 @@ void APIUtil::OnConnectionTypeChanged(
CancelAllUploads(google_apis::GDATA_NO_CONNECTION);
}
+void APIUtil::DidGetChangeList(
+ const ResourceListCallback& callback,
+ google_apis::GDataErrorCode error,
+ scoped_ptr<google_apis::ChangeList> change_list) {
+ DCHECK(CalledOnValidThread());
+
+ if (error != google_apis::HTTP_SUCCESS) {
+ DVLOG(2) << "Error on listing changes: " << error;
+ callback.Run(error, scoped_ptr<google_apis::ResourceList>());
+ return;
+ }
+
+ DVLOG(2) << "Got change list";
+ DCHECK(change_list);
+ callback.Run(error,
+ drive::util::ConvertChangeListToResourceList(*change_list));
+}
+
void APIUtil::DidGetResourceList(
const ResourceListCallback& callback,
google_apis::GDataErrorCode error,
diff --git a/chrome/browser/sync_file_system/drive_backend_v1/api_util.h b/chrome/browser/sync_file_system/drive_backend_v1/api_util.h
index 42180ed..200d852 100644
--- a/chrome/browser/sync_file_system/drive_backend_v1/api_util.h
+++ b/chrome/browser/sync_file_system/drive_backend_v1/api_util.h
@@ -158,6 +158,10 @@ class APIUtil : public APIUtilInterface,
const std::string& sync_root_resource_id,
google_apis::GDataErrorCode error);
+ void DidGetChangeList(const ResourceListCallback& callback,
+ google_apis::GDataErrorCode error,
+ scoped_ptr<google_apis::ChangeList> change_list);
+
void DidGetResourceList(const ResourceListCallback& callback,
google_apis::GDataErrorCode error,
scoped_ptr<google_apis::ResourceList> resource_list);
diff --git a/google_apis/drive/drive_api_parser.h b/google_apis/drive/drive_api_parser.h
index 2700dbc..babb4cd 100644
--- a/google_apis/drive/drive_api_parser.h
+++ b/google_apis/drive/drive_api_parser.h
@@ -601,13 +601,11 @@ class FileList {
// Returns a set of files in this list.
const ScopedVector<FileResource>& items() const { return items_; }
+ ScopedVector<FileResource>* mutable_items() { return &items_; }
void set_next_link(const GURL& next_link) {
next_link_ = next_link;
}
- void set_items(ScopedVector<FileResource> items) {
- items_ = items.Pass();
- }
private:
friend class DriveAPIParserTest;
@@ -715,6 +713,7 @@ class ChangeList {
// Returns a set of changes in this list.
const ScopedVector<ChangeResource>& items() const { return items_; }
+ ScopedVector<ChangeResource>* mutable_items() { return &items_; }
void set_next_link(const GURL& next_link) {
next_link_ = next_link;
@@ -722,9 +721,6 @@ class ChangeList {
void set_largest_change_id(int64 largest_change_id) {
largest_change_id_ = largest_change_id;
}
- void set_items(ScopedVector<ChangeResource> items) {
- items_ = items.Pass();
- }
private:
friend class DriveAPIParserTest;