Index: chrome/browser/google_apis/fake_drive_service.cc |
diff --git a/chrome/browser/google_apis/fake_drive_service.cc b/chrome/browser/google_apis/fake_drive_service.cc |
index c349337f0be0f4cbb71f423ca8f16cef794c120c..c4f7064249d36965023995f746319e9071019213 100644 |
--- a/chrome/browser/google_apis/fake_drive_service.cc |
+++ b/chrome/browser/google_apis/fake_drive_service.cc |
@@ -5,6 +5,9 @@ |
#include "chrome/browser/google_apis/fake_drive_service.h" |
#include "base/logging.h" |
+#include "base/message_loop.h" |
+#include "chrome/browser/google_apis/gdata_wapi_parser.h" |
+#include "chrome/browser/google_apis/test_util.h" |
#include "content/public/browser/browser_thread.h" |
using content::BrowserThread; |
@@ -19,6 +22,32 @@ FakeDriveService::~FakeDriveService() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
} |
+bool FakeDriveService::LoadResourceListForWapi( |
+ const std::string& relative_path) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ scoped_ptr<Value> raw_value = test_util::LoadJSONFile(relative_path); |
+ base::DictionaryValue* as_dict = NULL; |
+ base::Value* feed = NULL; |
+ base::DictionaryValue* feed_as_dict = NULL; |
+ |
+ // Extract the "feed" from the raw value and take the ownership. |
+ // Note that Remove() transfers the ownership to |feed|. |
+ if (raw_value->GetAsDictionary(&as_dict) && |
+ as_dict->Remove("feed", &feed) && |
+ feed->GetAsDictionary(&feed_as_dict)) { |
+ resource_list_value_.reset(feed_as_dict); |
+ } |
+ |
+ return resource_list_value_; |
+} |
+ |
+bool FakeDriveService::LoadAccountMetadataForWapi( |
+ const std::string& relative_path) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ account_metadata_value_ = test_util::LoadJSONFile(relative_path); |
+ return account_metadata_value_; |
+} |
+ |
void FakeDriveService::Initialize(Profile* profile) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
} |
@@ -68,6 +97,14 @@ void FakeDriveService::GetResourceList( |
const GetResourceListCallback& callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(!callback.is_null()); |
+ |
+ scoped_ptr<ResourceList> resource_list = |
+ ResourceList::CreateFrom(*resource_list_value_); |
+ MessageLoop::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(callback, |
+ HTTP_SUCCESS, |
+ base::Passed(&resource_list))); |
} |
void FakeDriveService::GetResourceEntry( |
@@ -75,12 +112,48 @@ void FakeDriveService::GetResourceEntry( |
const GetResourceEntryCallback& callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(!callback.is_null()); |
+ |
+ base::DictionaryValue* resource_list_dict = NULL; |
+ base::ListValue* entries = NULL; |
+ // Go through entries and return the one that matches |resource_id|. |
+ if (resource_list_value_->GetAsDictionary(&resource_list_dict) && |
+ resource_list_dict->GetList("entry", &entries)) { |
+ for (size_t i = 0; i < entries->GetSize(); ++i) { |
+ base::DictionaryValue* entry = NULL; |
+ base::DictionaryValue* resource_id_dict = NULL; |
+ std::string current_resource_id; |
+ if (entries->GetDictionary(i, &entry) && |
+ entry->GetDictionary("gd$resourceId", &resource_id_dict) && |
+ resource_id_dict->GetString("$t", ¤t_resource_id) && |
+ resource_id == current_resource_id) { |
+ scoped_ptr<ResourceEntry> resource_entry = |
+ ResourceEntry::CreateFrom(*entry); |
+ MessageLoop::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(callback, HTTP_SUCCESS, base::Passed(&resource_entry))); |
+ return; |
+ } |
+ } |
+ } |
+ |
+ scoped_ptr<ResourceEntry> null; |
+ MessageLoop::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null))); |
} |
void FakeDriveService::GetAccountMetadata( |
const GetAccountMetadataCallback& callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(!callback.is_null()); |
+ |
+ scoped_ptr<AccountMetadataFeed> account_metadata = |
+ AccountMetadataFeed::CreateFrom(*account_metadata_value_); |
+ MessageLoop::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(callback, |
+ HTTP_SUCCESS, |
+ base::Passed(&account_metadata))); |
} |
void FakeDriveService::GetApplicationInfo( |
@@ -94,6 +167,38 @@ void FakeDriveService::DeleteResource( |
const EntryActionCallback& callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(!callback.is_null()); |
+ |
+ base::DictionaryValue* resource_list_dict = NULL; |
+ base::ListValue* entries = NULL; |
+ // Go through entries and remove the one that matches |edit_url|. |
+ if (resource_list_value_->GetAsDictionary(&resource_list_dict) && |
+ resource_list_dict->GetList("entry", &entries)) { |
+ for (size_t i = 0; i < entries->GetSize(); ++i) { |
+ base::DictionaryValue* entry = NULL; |
+ base::ListValue* links = NULL; |
+ if (entries->GetDictionary(i, &entry) && |
+ entry->GetList("link", &links)) { |
+ for (size_t j = 0; j < links->GetSize(); ++j) { |
+ base::DictionaryValue* link = NULL; |
+ std::string rel; |
+ std::string href; |
+ if (links->GetDictionary(j, &link) && |
+ link->GetString("rel", &rel) && |
+ link->GetString("href", &href) && |
+ rel == "edit" && |
+ GURL(href) == edit_url) { |
+ entries->Remove(i, NULL); |
+ MessageLoop::current()->PostTask( |
+ FROM_HERE, base::Bind(callback, HTTP_SUCCESS)); |
+ return; |
+ } |
+ } |
+ } |
+ } |
+ } |
+ |
+ MessageLoop::current()->PostTask( |
+ FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); |
} |
void FakeDriveService::DownloadHostedDocument( |