Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1374)

Unified Diff: chrome/browser/drive/drive_api_service.cc

Issue 1190203002: Move (most of) chrome/browser/drive into components/drive/service. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebasing... Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/drive/drive_api_service.h ('k') | chrome/browser/drive/drive_api_service_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/drive/drive_api_service.cc
diff --git a/chrome/browser/drive/drive_api_service.cc b/chrome/browser/drive/drive_api_service.cc
deleted file mode 100644
index 6a875adc47bce9e8501a40620231e736553a0cb8..0000000000000000000000000000000000000000
--- a/chrome/browser/drive/drive_api_service.cc
+++ /dev/null
@@ -1,872 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/drive/drive_api_service.h"
-
-#include <string>
-#include <vector>
-
-#include "base/bind.h"
-#include "base/strings/stringprintf.h"
-#include "chrome/browser/drive/drive_api_util.h"
-#include "google_apis/drive/auth_service.h"
-#include "google_apis/drive/base_requests.h"
-#include "google_apis/drive/drive_api_parser.h"
-#include "google_apis/drive/drive_api_requests.h"
-#include "google_apis/drive/files_list_request_runner.h"
-#include "google_apis/drive/request_sender.h"
-#include "google_apis/google_api_keys.h"
-#include "net/url_request/url_request_context_getter.h"
-
-using google_apis::AboutResourceCallback;
-using google_apis::AppList;
-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::DownloadActionCallback;
-using google_apis::EntryActionCallback;
-using google_apis::FileList;
-using google_apis::FileListCallback;
-using google_apis::FileResource;
-using google_apis::FileResourceCallback;
-using google_apis::DRIVE_OTHER_ERROR;
-using google_apis::DRIVE_PARSE_ERROR;
-using google_apis::DriveApiErrorCode;
-using google_apis::GetContentCallback;
-using google_apis::GetShareUrlCallback;
-using google_apis::HTTP_NOT_IMPLEMENTED;
-using google_apis::HTTP_SUCCESS;
-using google_apis::InitiateUploadCallback;
-using google_apis::ProgressCallback;
-using google_apis::RequestSender;
-using google_apis::FilesListRequestRunner;
-using google_apis::UploadRangeResponse;
-using google_apis::drive::AboutGetRequest;
-using google_apis::drive::AppsListRequest;
-using google_apis::drive::ChangesListRequest;
-using google_apis::drive::ChangesListNextPageRequest;
-using google_apis::drive::ChildrenDeleteRequest;
-using google_apis::drive::ChildrenInsertRequest;
-using google_apis::drive::DownloadFileRequest;
-using google_apis::drive::FilesCopyRequest;
-using google_apis::drive::FilesGetRequest;
-using google_apis::drive::FilesInsertRequest;
-using google_apis::drive::FilesPatchRequest;
-using google_apis::drive::FilesListRequest;
-using google_apis::drive::FilesListNextPageRequest;
-using google_apis::drive::FilesDeleteRequest;
-using google_apis::drive::FilesTrashRequest;
-using google_apis::drive::GetUploadStatusRequest;
-using google_apis::drive::InitiateUploadExistingFileRequest;
-using google_apis::drive::InitiateUploadNewFileRequest;
-using google_apis::drive::ResumeUploadRequest;
-using google_apis::drive::UploadRangeCallback;
-
-namespace drive {
-
-namespace {
-
-// OAuth2 scopes for Drive API.
-const char kDriveScope[] = "https://www.googleapis.com/auth/drive";
-const char kDriveAppsReadonlyScope[] =
- "https://www.googleapis.com/auth/drive.apps.readonly";
-const char kDriveAppsScope[] = "https://www.googleapis.com/auth/drive.apps";
-const char kDocsListScope[] = "https://docs.google.com/feeds/";
-
-// Mime type to create a directory.
-const char kFolderMimeType[] = "application/vnd.google-apps.folder";
-
-// Max number of file entries to be fetched in a single http request.
-//
-// The larger the number is,
-// - The total running time to fetch the whole file list will become shorter.
-// - The running time for a single request tends to become longer.
-// Since the file list fetching is a completely background task, for our side,
-// only the total time matters. However, the server seems to have a time limit
-// per single request, which disables us to set the largest value (1000).
-// TODO(kinaba): make it larger when the server gets faster.
-const int kMaxNumFilesResourcePerRequest = 300;
-const int kMaxNumFilesResourcePerRequestForSearch = 100;
-
-// For performance, we declare all fields we use.
-const char kAboutResourceFields[] =
- "kind,quotaBytesTotal,quotaBytesUsedAggregate,largestChangeId,rootFolderId";
-const char kFileResourceFields[] =
- "kind,id,title,createdDate,sharedWithMeDate,mimeType,"
- "md5Checksum,fileSize,labels/trashed,imageMediaMetadata/width,"
- "imageMediaMetadata/height,imageMediaMetadata/rotation,etag,"
- "parents(id,parentLink),alternateLink,"
- "modifiedDate,lastViewedByMeDate,shared";
-const char kFileResourceOpenWithLinksFields[] =
- "kind,id,openWithLinks/*";
-const char kFileResourceShareLinkFields[] =
- "kind,id,shareLink";
-const char kFileListFields[] =
- "kind,items(kind,id,title,createdDate,sharedWithMeDate,"
- "mimeType,md5Checksum,fileSize,labels/trashed,imageMediaMetadata/width,"
- "imageMediaMetadata/height,imageMediaMetadata/rotation,etag,"
- "parents(id,parentLink),alternateLink,"
- "modifiedDate,lastViewedByMeDate,shared),nextLink";
-const char kChangeListFields[] =
- "kind,items(file(kind,id,title,createdDate,sharedWithMeDate,"
- "mimeType,md5Checksum,fileSize,labels/trashed,imageMediaMetadata/width,"
- "imageMediaMetadata/height,imageMediaMetadata/rotation,etag,"
- "parents(id,parentLink),alternateLink,modifiedDate,"
- "lastViewedByMeDate,shared),deleted,id,fileId,modificationDate),nextLink,"
- "largestChangeId";
-
-void ExtractOpenUrlAndRun(const std::string& app_id,
- const AuthorizeAppCallback& callback,
- DriveApiErrorCode error,
- scoped_ptr<FileResource> value) {
- DCHECK(!callback.is_null());
-
- if (!value) {
- callback.Run(error, GURL());
- return;
- }
-
- const std::vector<FileResource::OpenWithLink>& open_with_links =
- value->open_with_links();
- for (size_t i = 0; i < open_with_links.size(); ++i) {
- if (open_with_links[i].app_id == app_id) {
- callback.Run(HTTP_SUCCESS, open_with_links[i].open_url);
- return;
- }
- }
-
- // Not found.
- callback.Run(DRIVE_OTHER_ERROR, GURL());
-}
-
-void ExtractShareUrlAndRun(const GetShareUrlCallback& callback,
- DriveApiErrorCode error,
- scoped_ptr<FileResource> value) {
- callback.Run(error, value ? value->share_link() : GURL());
-}
-
-// Ignores the |entry|, and runs the |callback|.
-void EntryActionCallbackAdapter(
- const EntryActionCallback& callback,
- DriveApiErrorCode error, scoped_ptr<FileResource> entry) {
- callback.Run(error);
-}
-
-// The resource ID for the root directory for Drive API is defined in the spec:
-// https://developers.google.com/drive/folder
-const char kDriveApiRootDirectoryResourceId[] = "root";
-
-} // namespace
-
-BatchRequestConfigurator::BatchRequestConfigurator(
- const base::WeakPtr<google_apis::drive::BatchUploadRequest>& batch_request,
- base::SequencedTaskRunner* task_runner,
- const google_apis::DriveApiUrlGenerator& url_generator,
- const google_apis::CancelCallback& cancel_callback)
- : batch_request_(batch_request),
- task_runner_(task_runner),
- url_generator_(url_generator),
- cancel_callback_(cancel_callback) {
-}
-
-BatchRequestConfigurator::~BatchRequestConfigurator() {
- // The batch requst has not been committed.
- if (batch_request_)
- cancel_callback_.Run();
-}
-
-google_apis::CancelCallback BatchRequestConfigurator::MultipartUploadNewFile(
- const std::string& content_type,
- int64 content_length,
- const std::string& parent_resource_id,
- const std::string& title,
- const base::FilePath& local_file_path,
- const UploadNewFileOptions& options,
- const google_apis::FileResourceCallback& callback,
- const google_apis::ProgressCallback& progress_callback) {
- DCHECK(CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- scoped_ptr<google_apis::BatchableDelegate> delegate(
- new google_apis::drive::MultipartUploadNewFileDelegate(
- task_runner_.get(), title, parent_resource_id, content_type,
- content_length, options.modified_date, options.last_viewed_by_me_date,
- local_file_path, options.properties, url_generator_, callback,
- progress_callback));
- // Batch request can be null when pre-authorization for the requst is failed
- // in request sender.
- if (batch_request_)
- batch_request_->AddRequest(delegate.release());
- else
- delegate->NotifyError(DRIVE_OTHER_ERROR);
- return cancel_callback_;
-}
-
-google_apis::CancelCallback
-BatchRequestConfigurator::MultipartUploadExistingFile(
- const std::string& content_type,
- int64 content_length,
- const std::string& resource_id,
- const base::FilePath& local_file_path,
- const UploadExistingFileOptions& options,
- const google_apis::FileResourceCallback& callback,
- const google_apis::ProgressCallback& progress_callback) {
- DCHECK(CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- scoped_ptr<google_apis::BatchableDelegate> delegate(
- new google_apis::drive::MultipartUploadExistingFileDelegate(
- task_runner_.get(), options.title, resource_id,
- options.parent_resource_id, content_type, content_length,
- options.modified_date, options.last_viewed_by_me_date,
- local_file_path, options.etag, options.properties, url_generator_,
- callback, progress_callback));
- // Batch request can be null when pre-authorization for the requst is failed
- // in request sender.
- if (batch_request_)
- batch_request_->AddRequest(delegate.release());
- else
- delegate->NotifyError(DRIVE_OTHER_ERROR);
- return cancel_callback_;
-}
-
-void BatchRequestConfigurator::Commit() {
- DCHECK(CalledOnValidThread());
- if (!batch_request_)
- return;
- batch_request_->Commit();
- batch_request_.reset();
-}
-
-DriveAPIService::DriveAPIService(
- OAuth2TokenService* oauth2_token_service,
- net::URLRequestContextGetter* url_request_context_getter,
- base::SequencedTaskRunner* blocking_task_runner,
- const GURL& base_url,
- const GURL& base_download_url,
- const std::string& custom_user_agent)
- : oauth2_token_service_(oauth2_token_service),
- url_request_context_getter_(url_request_context_getter),
- blocking_task_runner_(blocking_task_runner),
- url_generator_(base_url, base_download_url),
- custom_user_agent_(custom_user_agent) {
-}
-
-DriveAPIService::~DriveAPIService() {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (sender_.get())
- sender_->auth_service()->RemoveObserver(this);
-}
-
-void DriveAPIService::Initialize(const std::string& account_id) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- std::vector<std::string> scopes;
- scopes.push_back(kDriveScope);
- scopes.push_back(kDriveAppsReadonlyScope);
- scopes.push_back(kDriveAppsScope);
-
- // Note: The following scope is used to support GetShareUrl on Drive API v2.
- // Unfortunately, there is no support on Drive API v2, so we need to fall back
- // to GData WAPI for the GetShareUrl.
- scopes.push_back(kDocsListScope);
-
- sender_.reset(new RequestSender(
- new google_apis::AuthService(oauth2_token_service_,
- account_id,
- url_request_context_getter_.get(),
- scopes),
- url_request_context_getter_.get(),
- blocking_task_runner_.get(),
- custom_user_agent_));
- sender_->auth_service()->AddObserver(this);
-
- files_list_request_runner_.reset(
- new FilesListRequestRunner(sender_.get(), url_generator_));
-}
-
-void DriveAPIService::AddObserver(DriveServiceObserver* observer) {
- observers_.AddObserver(observer);
-}
-
-void DriveAPIService::RemoveObserver(DriveServiceObserver* observer) {
- observers_.RemoveObserver(observer);
-}
-
-bool DriveAPIService::CanSendRequest() const {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- return HasRefreshToken();
-}
-
-std::string DriveAPIService::GetRootResourceId() const {
- return kDriveApiRootDirectoryResourceId;
-}
-
-CancelCallback DriveAPIService::GetAllFileList(
- const FileListCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- FilesListRequest* request = new FilesListRequest(
- sender_.get(), url_generator_, callback);
- request->set_max_results(kMaxNumFilesResourcePerRequest);
- request->set_q("trashed = false"); // Exclude trashed files.
- request->set_fields(kFileListFields);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::GetFileListInDirectory(
- const std::string& directory_resource_id,
- const FileListCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!directory_resource_id.empty());
- DCHECK(!callback.is_null());
-
- // Because children.list method on Drive API v2 returns only the list of
- // children's references, but we need all file resource list.
- // So, here we use files.list method instead, with setting parents query.
- // After the migration from GData WAPI to Drive API v2, we should clean the
- // code up by moving the responsibility to include "parents" in the query
- // to client side.
- // We aren't interested in files in trash in this context, neither.
- return files_list_request_runner_->CreateAndStartWithSizeBackoff(
- kMaxNumFilesResourcePerRequest,
- base::StringPrintf(
- "'%s' in parents and trashed = false",
- util::EscapeQueryStringValue(directory_resource_id).c_str()),
- kFileListFields, callback);
-}
-
-CancelCallback DriveAPIService::Search(
- const std::string& search_query,
- const FileListCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!search_query.empty());
- DCHECK(!callback.is_null());
-
- return files_list_request_runner_->CreateAndStartWithSizeBackoff(
- kMaxNumFilesResourcePerRequestForSearch,
- util::TranslateQuery(search_query), kFileListFields, callback);
-}
-
-CancelCallback DriveAPIService::SearchByTitle(
- const std::string& title,
- const std::string& directory_resource_id,
- const FileListCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!title.empty());
- DCHECK(!callback.is_null());
-
- std::string query;
- base::StringAppendF(&query, "title = '%s'",
- util::EscapeQueryStringValue(title).c_str());
- if (!directory_resource_id.empty()) {
- base::StringAppendF(
- &query, " and '%s' in parents",
- util::EscapeQueryStringValue(directory_resource_id).c_str());
- }
- query += " and trashed = false";
-
- FilesListRequest* request = new FilesListRequest(
- sender_.get(), url_generator_, callback);
- request->set_max_results(kMaxNumFilesResourcePerRequest);
- request->set_q(query);
- request->set_fields(kFileListFields);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::GetChangeList(
- int64 start_changestamp,
- const ChangeListCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- ChangesListRequest* request = new ChangesListRequest(
- sender_.get(), url_generator_, callback);
- request->set_max_results(kMaxNumFilesResourcePerRequest);
- request->set_start_change_id(start_changestamp);
- request->set_fields(kChangeListFields);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::GetRemainingChangeList(
- const GURL& next_link,
- const ChangeListCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!next_link.is_empty());
- DCHECK(!callback.is_null());
-
- ChangesListNextPageRequest* request = new ChangesListNextPageRequest(
- sender_.get(), callback);
- request->set_next_link(next_link);
- request->set_fields(kChangeListFields);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::GetRemainingFileList(
- const GURL& next_link,
- const FileListCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!next_link.is_empty());
- DCHECK(!callback.is_null());
-
- FilesListNextPageRequest* request = new FilesListNextPageRequest(
- sender_.get(), callback);
- request->set_next_link(next_link);
- request->set_fields(kFileListFields);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::GetFileResource(
- const std::string& resource_id,
- const FileResourceCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- FilesGetRequest* request = new FilesGetRequest(
- sender_.get(), url_generator_, google_apis::IsGoogleChromeAPIKeyUsed(),
- callback);
- request->set_file_id(resource_id);
- request->set_fields(kFileResourceFields);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::GetShareUrl(
- const std::string& resource_id,
- const GURL& embed_origin,
- const GetShareUrlCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- if (!google_apis::IsGoogleChromeAPIKeyUsed()) {
- LOG(ERROR) << "Only the official build of Chrome OS can open share dialogs "
- << "from the file manager.";
- }
-
- FilesGetRequest* request = new FilesGetRequest(
- sender_.get(), url_generator_, google_apis::IsGoogleChromeAPIKeyUsed(),
- base::Bind(&ExtractShareUrlAndRun, callback));
- request->set_file_id(resource_id);
- request->set_fields(kFileResourceShareLinkFields);
- request->set_embed_origin(embed_origin);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::GetAboutResource(
- const AboutResourceCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- AboutGetRequest* request =
- new AboutGetRequest(sender_.get(), url_generator_, callback);
- request->set_fields(kAboutResourceFields);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::GetAppList(const AppListCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- return sender_->StartRequestWithAuthRetry(
- new AppsListRequest(sender_.get(), url_generator_,
- google_apis::IsGoogleChromeAPIKeyUsed(), callback));
-}
-
-CancelCallback DriveAPIService::DownloadFile(
- const base::FilePath& local_cache_path,
- const std::string& resource_id,
- const DownloadActionCallback& download_action_callback,
- const GetContentCallback& get_content_callback,
- const ProgressCallback& progress_callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!download_action_callback.is_null());
- // get_content_callback may be null.
-
- return sender_->StartRequestWithAuthRetry(new DownloadFileRequest(
- sender_.get(), url_generator_, resource_id, local_cache_path,
- download_action_callback, get_content_callback, progress_callback));
-}
-
-CancelCallback DriveAPIService::DeleteResource(
- const std::string& resource_id,
- const std::string& etag,
- const EntryActionCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- FilesDeleteRequest* request = new FilesDeleteRequest(
- sender_.get(), url_generator_, callback);
- request->set_file_id(resource_id);
- request->set_etag(etag);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::TrashResource(
- const std::string& resource_id,
- const EntryActionCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- FilesTrashRequest* request = new FilesTrashRequest(
- sender_.get(), url_generator_,
- base::Bind(&EntryActionCallbackAdapter, callback));
- request->set_file_id(resource_id);
- request->set_fields(kFileResourceFields);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::AddNewDirectory(
- const std::string& parent_resource_id,
- const std::string& directory_title,
- const AddNewDirectoryOptions& options,
- const FileResourceCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- FilesInsertRequest* request = new FilesInsertRequest(
- sender_.get(), url_generator_, callback);
- request->set_last_viewed_by_me_date(options.last_viewed_by_me_date);
- request->set_mime_type(kFolderMimeType);
- request->set_modified_date(options.modified_date);
- request->add_parent(parent_resource_id);
- request->set_title(directory_title);
- request->set_properties(options.properties);
- request->set_fields(kFileResourceFields);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::CopyResource(
- const std::string& resource_id,
- const std::string& parent_resource_id,
- const std::string& new_title,
- const base::Time& last_modified,
- const FileResourceCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- FilesCopyRequest* request = new FilesCopyRequest(
- sender_.get(), url_generator_, callback);
- request->set_file_id(resource_id);
- request->add_parent(parent_resource_id);
- request->set_title(new_title);
- request->set_modified_date(last_modified);
- request->set_fields(kFileResourceFields);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::UpdateResource(
- const std::string& resource_id,
- const std::string& parent_resource_id,
- const std::string& new_title,
- const base::Time& last_modified,
- const base::Time& last_viewed_by_me,
- const google_apis::drive::Properties& properties,
- const FileResourceCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- FilesPatchRequest* request = new FilesPatchRequest(
- sender_.get(), url_generator_, callback);
- request->set_file_id(resource_id);
- request->set_title(new_title);
- if (!parent_resource_id.empty())
- request->add_parent(parent_resource_id);
- if (!last_modified.is_null()) {
- // Need to set setModifiedDate to true to overwrite modifiedDate.
- request->set_set_modified_date(true);
- request->set_modified_date(last_modified);
- }
- if (!last_viewed_by_me.is_null()) {
- // Need to set updateViewedDate to false, otherwise the lastViewedByMeDate
- // will be set to the request time (not the specified time via request).
- request->set_update_viewed_date(false);
- request->set_last_viewed_by_me_date(last_viewed_by_me);
- }
- request->set_fields(kFileResourceFields);
- request->set_properties(properties);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::AddResourceToDirectory(
- const std::string& parent_resource_id,
- const std::string& resource_id,
- const EntryActionCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- ChildrenInsertRequest* request =
- new ChildrenInsertRequest(sender_.get(), url_generator_, callback);
- request->set_folder_id(parent_resource_id);
- request->set_id(resource_id);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::RemoveResourceFromDirectory(
- const std::string& parent_resource_id,
- const std::string& resource_id,
- const EntryActionCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- ChildrenDeleteRequest* request =
- new ChildrenDeleteRequest(sender_.get(), url_generator_, callback);
- request->set_child_id(resource_id);
- request->set_folder_id(parent_resource_id);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::InitiateUploadNewFile(
- const std::string& content_type,
- int64 content_length,
- const std::string& parent_resource_id,
- const std::string& title,
- const UploadNewFileOptions& options,
- const InitiateUploadCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- InitiateUploadNewFileRequest* request =
- new InitiateUploadNewFileRequest(sender_.get(),
- url_generator_,
- content_type,
- content_length,
- parent_resource_id,
- title,
- callback);
- request->set_modified_date(options.modified_date);
- request->set_last_viewed_by_me_date(options.last_viewed_by_me_date);
- request->set_properties(options.properties);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::InitiateUploadExistingFile(
- const std::string& content_type,
- int64 content_length,
- const std::string& resource_id,
- const UploadExistingFileOptions& options,
- const InitiateUploadCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- InitiateUploadExistingFileRequest* request =
- new InitiateUploadExistingFileRequest(sender_.get(),
- url_generator_,
- content_type,
- content_length,
- resource_id,
- options.etag,
- callback);
- request->set_parent_resource_id(options.parent_resource_id);
- request->set_title(options.title);
- request->set_modified_date(options.modified_date);
- request->set_last_viewed_by_me_date(options.last_viewed_by_me_date);
- request->set_properties(options.properties);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-CancelCallback DriveAPIService::ResumeUpload(
- const GURL& upload_url,
- int64 start_position,
- int64 end_position,
- int64 content_length,
- const std::string& content_type,
- const base::FilePath& local_file_path,
- const UploadRangeCallback& callback,
- const ProgressCallback& progress_callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- return sender_->StartRequestWithAuthRetry(new ResumeUploadRequest(
- sender_.get(), upload_url, start_position, end_position, content_length,
- content_type, local_file_path, callback, progress_callback));
-}
-
-CancelCallback DriveAPIService::GetUploadStatus(
- const GURL& upload_url,
- int64 content_length,
- const UploadRangeCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- return sender_->StartRequestWithAuthRetry(new GetUploadStatusRequest(
- sender_.get(), upload_url, content_length, callback));
-}
-
-CancelCallback DriveAPIService::MultipartUploadNewFile(
- const std::string& content_type,
- int64 content_length,
- const std::string& parent_resource_id,
- const std::string& title,
- const base::FilePath& local_file_path,
- const drive::UploadNewFileOptions& options,
- const FileResourceCallback& callback,
- const google_apis::ProgressCallback& progress_callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- return sender_->StartRequestWithAuthRetry(
- new google_apis::drive::SingleBatchableDelegateRequest(
- sender_.get(),
- new google_apis::drive::MultipartUploadNewFileDelegate(
- sender_->blocking_task_runner(), title, parent_resource_id,
- content_type, content_length, options.modified_date,
- options.last_viewed_by_me_date, local_file_path,
- options.properties, url_generator_, callback,
- progress_callback)));
-}
-
-CancelCallback DriveAPIService::MultipartUploadExistingFile(
- const std::string& content_type,
- int64 content_length,
- const std::string& resource_id,
- const base::FilePath& local_file_path,
- const drive::UploadExistingFileOptions& options,
- const FileResourceCallback& callback,
- const google_apis::ProgressCallback& progress_callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- return sender_->StartRequestWithAuthRetry(
- new google_apis::drive::SingleBatchableDelegateRequest(
- sender_.get(),
- new google_apis::drive::MultipartUploadExistingFileDelegate(
- sender_->blocking_task_runner(), options.title, resource_id,
- options.parent_resource_id, content_type, content_length,
- options.modified_date, options.last_viewed_by_me_date,
- local_file_path, options.etag, options.properties, url_generator_,
- callback, progress_callback)));
-}
-
-CancelCallback DriveAPIService::AuthorizeApp(
- const std::string& resource_id,
- const std::string& app_id,
- const AuthorizeAppCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- // Files.Authorize is only available for whitelisted clients like official
- // Google Chrome. In other cases, we fall back to Files.Get that returns the
- // same value as Files.Authorize without doing authorization. In that case,
- // the app can open if it was authorized by other means (from whitelisted
- // clients or drive.google.com web UI.)
- if (google_apis::IsGoogleChromeAPIKeyUsed()) {
- google_apis::drive::FilesAuthorizeRequest* request =
- new google_apis::drive::FilesAuthorizeRequest(
- sender_.get(), url_generator_,
- base::Bind(&ExtractOpenUrlAndRun, app_id, callback));
- request->set_app_id(app_id);
- request->set_file_id(resource_id);
- request->set_fields(kFileResourceOpenWithLinksFields);
- return sender_->StartRequestWithAuthRetry(request);
- } else {
- FilesGetRequest* request = new FilesGetRequest(
- sender_.get(), url_generator_, google_apis::IsGoogleChromeAPIKeyUsed(),
- base::Bind(&ExtractOpenUrlAndRun, app_id, callback));
- request->set_file_id(resource_id);
- request->set_fields(kFileResourceOpenWithLinksFields);
- return sender_->StartRequestWithAuthRetry(request);
- }
-}
-
-CancelCallback DriveAPIService::UninstallApp(
- const std::string& app_id,
- const google_apis::EntryActionCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- google_apis::drive::AppsDeleteRequest* request =
- new google_apis::drive::AppsDeleteRequest(sender_.get(), url_generator_,
- callback);
- request->set_app_id(app_id);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-google_apis::CancelCallback DriveAPIService::AddPermission(
- const std::string& resource_id,
- const std::string& email,
- google_apis::drive::PermissionRole role,
- const google_apis::EntryActionCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- google_apis::drive::PermissionsInsertRequest* request =
- new google_apis::drive::PermissionsInsertRequest(sender_.get(),
- url_generator_,
- callback);
- request->set_id(resource_id);
- request->set_role(role);
- request->set_type(google_apis::drive::PERMISSION_TYPE_USER);
- request->set_value(email);
- return sender_->StartRequestWithAuthRetry(request);
-}
-
-bool DriveAPIService::HasAccessToken() const {
- DCHECK(thread_checker_.CalledOnValidThread());
- return sender_->auth_service()->HasAccessToken();
-}
-
-void DriveAPIService::RequestAccessToken(const AuthStatusCallback& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!callback.is_null());
-
- const std::string access_token = sender_->auth_service()->access_token();
- if (!access_token.empty()) {
- callback.Run(google_apis::HTTP_NOT_MODIFIED, access_token);
- return;
- }
-
- // Retrieve the new auth token.
- sender_->auth_service()->StartAuthentication(callback);
-}
-
-bool DriveAPIService::HasRefreshToken() const {
- DCHECK(thread_checker_.CalledOnValidThread());
- return sender_->auth_service()->HasRefreshToken();
-}
-
-void DriveAPIService::ClearAccessToken() {
- DCHECK(thread_checker_.CalledOnValidThread());
- sender_->auth_service()->ClearAccessToken();
-}
-
-void DriveAPIService::ClearRefreshToken() {
- DCHECK(thread_checker_.CalledOnValidThread());
- sender_->auth_service()->ClearRefreshToken();
-}
-
-void DriveAPIService::OnOAuth2RefreshTokenChanged() {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (CanSendRequest()) {
- FOR_EACH_OBSERVER(
- DriveServiceObserver, observers_, OnReadyToSendRequests());
- } else if (!HasRefreshToken()) {
- FOR_EACH_OBSERVER(
- DriveServiceObserver, observers_, OnRefreshTokenInvalid());
- }
-}
-
-scoped_ptr<BatchRequestConfiguratorInterface>
-DriveAPIService::StartBatchRequest() {
- scoped_ptr<google_apis::drive::BatchUploadRequest> request(
- new google_apis::drive::BatchUploadRequest(sender_.get(),
- url_generator_));
- const base::WeakPtr<google_apis::drive::BatchUploadRequest> weak_ref =
- request->GetWeakPtrAsBatchUploadRequest();
- // Have sender_ manage the lifetime of the request.
- // TODO(hirono): Currently we need to pass the ownership of the request to
- // RequestSender before the request is committed because the request has a
- // reference to RequestSender and we should ensure to delete the request when
- // the sender is deleted. Resolve the circulating dependency and fix it.
- const google_apis::CancelCallback callback =
- sender_->StartRequestWithAuthRetry(request.release());
- return make_scoped_ptr<BatchRequestConfiguratorInterface>(
- new BatchRequestConfigurator(weak_ref, sender_->blocking_task_runner(),
- url_generator_, callback));
-}
-
-} // namespace drive
« no previous file with comments | « chrome/browser/drive/drive_api_service.h ('k') | chrome/browser/drive/drive_api_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698