gdata_wapi_service.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/drive/gdata_wapi_service.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/drive/drive_api_util.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/google_apis/auth_service.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/google_apis/drive_api_parser.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/google_apis/gdata_errorcode.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/google_apis/gdata_wapi_parser.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/google_apis/gdata_wapi_requests.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/google_apis/gdata_wapi_url_generator.h" 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/google_apis/request_sender.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::AboutResource; 26424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using google_apis::AboutResourceCallback; 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::AccountMetadata; 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::AddResourceToDirectoryRequest; 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::AppList; 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using google_apis::AppListCallback; 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using google_apis::AuthService; 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochusing google_apis::AuthStatusCallback; 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::AuthorizeAppCallback; 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::AuthorizeAppRequest; 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::CancelCallback; 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::CopyHostedDocumentRequest; 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::CreateDirectoryRequest; 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::DeleteResourceRequest; 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::DownloadActionCallback; 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::DownloadFileRequest; 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::EntryActionCallback; 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::GDATA_PARSE_ERROR; 43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using google_apis::GDataErrorCode; 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::GetAccountMetadataRequest; 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::GetContentCallback; 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::GetResourceEntryCallback; 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::GetResourceEntryRequest; 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::GetResourceListCallback; 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::GetResourceListRequest; 50bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochusing google_apis::GetShareUrlCallback; 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::GetUploadStatusRequest; 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::HTTP_NOT_IMPLEMENTED; 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::InitiateUploadCallback; 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::InitiateUploadExistingFileRequest; 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::InitiateUploadNewFileRequest; 56bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochusing google_apis::Link; 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::ProgressCallback; 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::RemoveResourceFromDirectoryRequest; 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::RenameResourceRequest; 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::RequestSender; 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::ResourceEntry; 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::ResumeUploadRequest; 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::SearchByTitleRequest; 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing google_apis::UploadRangeCallback; 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace drive { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OAuth2 scopes for the documents API. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSpreadsheetsScope[] = "https://spreadsheets.google.com/feeds/"; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kUserContentScope[] = "https://docs.googleusercontent.com/"; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Parses the JSON value to ResourceEntry runs |callback|. 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParseResourceEntryAndRun(const GetResourceEntryCallback& callback, 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GDataErrorCode error, 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> value) { 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!value) { 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback.Run(error, scoped_ptr<ResourceEntry>()); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Parsing ResourceEntry is cheap enough to do on UI thread. 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ResourceEntry> entry = 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) google_apis::ResourceEntry::ExtractAndParse(*value); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!entry) { 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback.Run(GDATA_PARSE_ERROR, scoped_ptr<ResourceEntry>()); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback.Run(error, entry.Pass()); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 96d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ConvertAboutResourceAndRun( 97424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const AboutResourceCallback& callback, 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GDataErrorCode error, 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<AccountMetadata> account_metadata) { 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<AboutResource> about_resource; 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (account_metadata) { 105d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) about_resource = util::ConvertAccountMetadataToAboutResource( 10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *account_metadata, util::kWapiRootDirectoryResourceId); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback.Run(error, about_resource.Pass()); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ConvertAppListAndRun( 113424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const AppListCallback& callback, 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GDataErrorCode error, 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<AccountMetadata> account_metadata) { 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<AppList> app_list; 120d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (account_metadata) 121d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) app_list = util::ConvertAccountMetadataToAppList(*account_metadata); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback.Run(error, app_list.Pass()); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 126d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Returns the argument string. 127d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)std::string Identity(const std::string& resource_id) { return resource_id; } 128d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GDataWapiService::GDataWapiService( 132558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch OAuth2TokenService* oauth2_token_service, 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestContextGetter* url_request_context_getter, 134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::TaskRunner* blocking_task_runner, 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& base_url, 136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const GURL& base_download_url, 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& custom_user_agent) 138558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch : oauth2_token_service_(oauth2_token_service), 139558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch url_request_context_getter_(url_request_context_getter), 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch blocking_task_runner_(blocking_task_runner), 141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_(base_url, base_download_url), 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) custom_user_agent_(custom_user_agent) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GDataWapiService::~GDataWapiService() { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (sender_.get()) 149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) sender_->auth_service()->RemoveObserver(this); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void GDataWapiService::Initialize(const std::string& account_id) { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> scopes; 156a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) scopes.push_back(util::kDocsListScope); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scopes.push_back(kSpreadsheetsScope); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scopes.push_back(kUserContentScope); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drive App scope is required for even WAPI v3 apps access. 160a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) scopes.push_back(util::kDriveAppsScope); 1619ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch sender_.reset(new RequestSender( 16268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) new AuthService(oauth2_token_service_, 16368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) account_id, 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) url_request_context_getter_.get(), 16568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scopes), 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) url_request_context_getter_.get(), 1679ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch blocking_task_runner_.get(), 1689ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch custom_user_agent_)); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 170868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) sender_->auth_service()->AddObserver(this); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GDataWapiService::AddObserver(DriveServiceObserver* observer) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observers_.AddObserver(observer); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GDataWapiService::RemoveObserver(DriveServiceObserver* observer) { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observers_.RemoveObserver(observer); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 181868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)bool GDataWapiService::CanSendRequest() const { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return HasRefreshToken(); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 187d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)ResourceIdCanonicalizer GDataWapiService::GetResourceIdCanonicalizer() const { 188d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return base::Bind(&Identity); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)std::string GDataWapiService::GetRootResourceId() const { 19258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return util::kWapiRootDirectoryResourceId; 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Because GData WAPI support is expected to be gone somehow soon by migration 196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// to the Drive API v2, so we'll reuse GetResourceListRequest to implement 197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// following methods, instead of cleaning the request class. 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::GetAllResourceList( 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetResourceListCallback& callback) { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!callback.is_null()); 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 205868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new GetResourceListRequest(sender_.get(), 206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL(), // No override url 208eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0, // start changestamp 209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string(), // empty search query 210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string(), // no directory resource id 211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback)); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::GetResourceListInDirectory( 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& directory_resource_id, 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetResourceListCallback& callback) { 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!directory_resource_id.empty()); 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!callback.is_null()); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new GetResourceListRequest(sender_.get(), 223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL(), // No override url 225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0, // start changestamp 226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string(), // empty search query 227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch directory_resource_id, 228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback)); 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::Search( 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& search_query, 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GetResourceListCallback& callback) { 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!search_query.empty()); 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!callback.is_null()); 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new GetResourceListRequest(sender_.get(), 240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL(), // No override url 242eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0, // start changestamp 243eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch search_query, 244eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string(), // no directory resource id 245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback)); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::SearchByTitle( 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& title, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& directory_resource_id, 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetResourceListCallback& callback) { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!title.empty()); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new SearchByTitleRequest(sender_.get(), 258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch title, 260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch directory_resource_id, 261eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback)); 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::GetChangeList( 2657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int64 start_changestamp, 2667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GetResourceListCallback& callback) { 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!callback.is_null()); 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new GetResourceListRequest(sender_.get(), 272eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL(), // No override url 274eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch start_changestamp, 275eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string(), // empty search query 276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string(), // no directory resource id 277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback)); 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 280424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CancelCallback GDataWapiService::GetRemainingChangeList( 28158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const GURL& next_link, 282424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const GetResourceListCallback& callback) { 283424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 28458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(!next_link.is_empty()); 285424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DCHECK(!callback.is_null()); 286424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 28758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return GetRemainingResourceList(next_link, callback); 288424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 289424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 290424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CancelCallback GDataWapiService::GetRemainingFileList( 29158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const GURL& next_link, 292424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const GetResourceListCallback& callback) { 293424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 29458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(!next_link.is_empty()); 295424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DCHECK(!callback.is_null()); 296424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 29758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return GetRemainingResourceList(next_link, callback); 298424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 299424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 3007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::GetResourceEntry( 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& resource_id, 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetResourceEntryCallback& callback) { 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new GetResourceEntryRequest(sender_.get(), 308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 309eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch resource_id, 310bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch GURL(), 311eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(&ParseResourceEntryAndRun, 312eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback))); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochCancelCallback GDataWapiService::GetShareUrl( 316bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch const std::string& resource_id, 317bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch const GURL& embed_origin, 318bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch const GetShareUrlCallback& callback) { 319bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 320bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch DCHECK(!callback.is_null()); 321bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 322bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return sender_->StartRequestWithRetry( 323bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch new GetResourceEntryRequest(sender_.get(), 324bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch url_generator_, 325bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch resource_id, 326bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch embed_origin, 327a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Bind(&util::ParseShareUrlAndRun, 328bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch callback))); 329bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 330bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 3317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::GetAboutResource( 332424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const AboutResourceCallback& callback) { 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 337868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new GetAccountMetadataRequest( 338868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) sender_.get(), 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url_generator_, 340d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::Bind(&ConvertAboutResourceAndRun, callback), 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false)); // Exclude installed apps. 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 344424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CancelCallback GDataWapiService::GetAppList(const AppListCallback& callback) { 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 349eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new GetAccountMetadataRequest(sender_.get(), 350eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 351d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::Bind(&ConvertAppListAndRun, callback), 352eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch true)); // Include installed apps. 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::DownloadFile( 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& local_cache_path, 357eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& resource_id, 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DownloadActionCallback& download_action_callback, 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetContentCallback& get_content_callback, 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ProgressCallback& progress_callback) { 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!download_action_callback.is_null()); 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // get_content_callback and progress_callback may be null. 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 366868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new DownloadFileRequest(sender_.get(), 367eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 368868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) download_action_callback, 369868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) get_content_callback, 370868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) progress_callback, 371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch resource_id, 372868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) local_cache_path)); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::DeleteResource( 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& resource_id, 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& etag, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const EntryActionCallback& callback) { 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 383868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new DeleteResourceRequest(sender_.get(), 384eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 385eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback, 386eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch resource_id, 387eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch etag)); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::AddNewDirectory( 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& parent_resource_id, 3927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& directory_title, 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetResourceEntryCallback& callback) { 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 398868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new CreateDirectoryRequest(sender_.get(), 399eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 400eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(&ParseResourceEntryAndRun, 401eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback), 402eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch parent_resource_id, 4037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch directory_title)); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::CopyResource( 40790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string& resource_id, 40890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string& parent_resource_id, 4097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& new_title, 41068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const base::Time& last_modified, 41190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const GetResourceEntryCallback& callback) { 41290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 41390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(!callback.is_null()); 41490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 41590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // GData WAPI doesn't support "copy" of regular files. 41690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // This method should never be called if GData WAPI is enabled. 41790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Instead, client code should download the file (if needed) and upload it. 41890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NOTREACHED(); 4197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return CancelCallback(); 42090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 42190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::CopyHostedDocument( 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& resource_id, 4247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& new_title, 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetResourceEntryCallback& callback) { 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 430eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new CopyHostedDocumentRequest(sender_.get(), 431eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 432eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(&ParseResourceEntryAndRun, 433eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback), 434eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch resource_id, 4357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new_title)); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)CancelCallback GDataWapiService::MoveResource( 4393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& resource_id, 4403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& parent_resource_id, 4413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& new_title, 44268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const base::Time& last_modified, 4433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const google_apis::GetResourceEntryCallback& callback) { 4443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 4453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DCHECK(!callback.is_null()); 4463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 4473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // GData WAPI doesn't support to "move" resources. 4483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // This method should never be called if GData WAPI is enabled. 4493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Instead, client code should rename the file, add new parent, and then 4503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // remove the old parent. 4513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) NOTREACHED(); 4523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return CancelCallback(); 4533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 4543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 4557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::RenameResource( 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& resource_id, 4577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& new_title, 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const EntryActionCallback& callback) { 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 463868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new RenameResourceRequest(sender_.get(), 464eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 465eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback, 466eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch resource_id, 4677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new_title)); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::TouchResource( 47190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string& resource_id, 47290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const base::Time& modified_date, 47390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const base::Time& last_viewed_by_me_date, 47490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const GetResourceEntryCallback& callback) { 47590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 47690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(!modified_date.is_null()); 47790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(!last_viewed_by_me_date.is_null()); 47890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(!callback.is_null()); 47990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 48090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Unfortunately, there is no way to support this method on GData WAPI. 48190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // So, this should always return an error. 48290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->PostTask( 48390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FROM_HERE, 48490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Bind(callback, HTTP_NOT_IMPLEMENTED, 48590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Passed(scoped_ptr<ResourceEntry>()))); 4867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return base::Bind(&base::DoNothing); 48790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 48890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::AddResourceToDirectory( 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& parent_resource_id, 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& resource_id, 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const EntryActionCallback& callback) { 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 497868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new AddResourceToDirectoryRequest(sender_.get(), 498eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 499eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback, 500eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch parent_resource_id, 501eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch resource_id)); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::RemoveResourceFromDirectory( 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& parent_resource_id, 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& resource_id, 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const EntryActionCallback& callback) { 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 512868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new RemoveResourceFromDirectoryRequest(sender_.get(), 513eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 514eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback, 515eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch parent_resource_id, 516eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch resource_id)); 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::InitiateUploadNewFile( 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& content_type, 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 content_length, 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& parent_resource_id, 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& title, 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const InitiateUploadCallback& callback) { 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!parent_resource_id.empty()); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 530868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new InitiateUploadNewFileRequest(sender_.get(), 531eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 532eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback, 533eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content_type, 534eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content_length, 535eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch parent_resource_id, 536eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch title)); 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::InitiateUploadExistingFile( 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& content_type, 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 content_length, 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& resource_id, 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& etag, 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const InitiateUploadCallback& callback) { 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!resource_id.empty()); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 550868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new InitiateUploadExistingFileRequest(sender_.get(), 551eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 552eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback, 553eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content_type, 554eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content_length, 555eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch resource_id, 556eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch etag)); 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::ResumeUpload( 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& upload_url, 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 start_position, 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 end_position, 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 content_length, 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& content_type, 565a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const base::FilePath& local_file_path, 566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const UploadRangeCallback& callback, 567c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ProgressCallback& progress_callback) { 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 572868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new ResumeUploadRequest(sender_.get(), 573eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback, 574eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch progress_callback, 575eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch upload_url, 576eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch start_position, 577eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch end_position, 578eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content_length, 579eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content_type, 580eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch local_file_path)); 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::GetUploadStatus( 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& upload_url, 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 content_length, 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const UploadRangeCallback& callback) { 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 591868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new GetUploadStatusRequest(sender_.get(), 592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback, 593eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch upload_url, 594eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content_length)); 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CancelCallback GDataWapiService::AuthorizeApp( 5987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& resource_id, 5997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& app_id, 6007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const AuthorizeAppCallback& callback) { 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!callback.is_null()); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return sender_->StartRequestWithRetry( 605eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new AuthorizeAppRequest(sender_.get(), 606eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_generator_, 607eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback, 608eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch resource_id, 609eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch app_id)); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 61258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)CancelCallback GDataWapiService::GetResourceListInDirectoryByWapi( 61358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::string& directory_resource_id, 61458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const google_apis::GetResourceListCallback& callback) { 61558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return GetResourceListInDirectory(directory_resource_id, callback); 61658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 61758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 61858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)CancelCallback GDataWapiService::GetRemainingResourceList( 61958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const GURL& next_link, 62058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const google_apis::GetResourceListCallback& callback) { 62158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 62258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(!next_link.is_empty()); 62358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(!callback.is_null()); 62458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 62558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return sender_->StartRequestWithRetry( 62658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) new GetResourceListRequest(sender_.get(), 62758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) url_generator_, 62858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) next_link, 62958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 0, // start changestamp 63058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string(), // empty search query 63158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string(), // no directory resource id 63258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) callback)); 63358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 63458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GDataWapiService::HasAccessToken() const { 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 638868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return sender_->auth_service()->HasAccessToken(); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid GDataWapiService::RequestAccessToken(const AuthStatusCallback& callback) { 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 6437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(!callback.is_null()); 6447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string access_token = sender_->auth_service()->access_token(); 6467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!access_token.empty()) { 6477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch callback.Run(google_apis::HTTP_NOT_MODIFIED, access_token); 6487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 6497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Retrieve the new auth token. 6527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch sender_->auth_service()->StartAuthentication(callback); 6537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 6547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool GDataWapiService::HasRefreshToken() const { 6567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 657868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return sender_->auth_service()->HasRefreshToken(); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GDataWapiService::ClearAccessToken() { 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 6627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch sender_->auth_service()->ClearAccessToken(); 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GDataWapiService::ClearRefreshToken() { 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 6677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch sender_->auth_service()->ClearRefreshToken(); 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GDataWapiService::OnOAuth2RefreshTokenChanged() { 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 672868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (CanSendRequest()) { 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER( 674868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DriveServiceObserver, observers_, OnReadyToSendRequests()); 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (!HasRefreshToken()) { 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FOR_EACH_OBSERVER( 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DriveServiceObserver, observers_, OnRefreshTokenInvalid()); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 681eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace drive 682