| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/drive/drive_api_service.h" | 5 #include "chrome/browser/drive/drive_api_service.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 using google_apis::drive::UploadRangeCallback; | 71 using google_apis::drive::UploadRangeCallback; |
| 72 | 72 |
| 73 namespace drive { | 73 namespace drive { |
| 74 | 74 |
| 75 namespace { | 75 namespace { |
| 76 | 76 |
| 77 // OAuth2 scopes for Drive API. | 77 // OAuth2 scopes for Drive API. |
| 78 const char kDriveScope[] = "https://www.googleapis.com/auth/drive"; | 78 const char kDriveScope[] = "https://www.googleapis.com/auth/drive"; |
| 79 const char kDriveAppsReadonlyScope[] = | 79 const char kDriveAppsReadonlyScope[] = |
| 80 "https://www.googleapis.com/auth/drive.apps.readonly"; | 80 "https://www.googleapis.com/auth/drive.apps.readonly"; |
| 81 const char kDriveAppsScope[] = "https://www.googleapis.com/auth/drive.apps"; |
| 82 const char kDocsListScope[] = "https://docs.google.com/feeds/"; |
| 81 | 83 |
| 82 // Mime type to create a directory. | 84 // Mime type to create a directory. |
| 83 const char kFolderMimeType[] = "application/vnd.google-apps.folder"; | 85 const char kFolderMimeType[] = "application/vnd.google-apps.folder"; |
| 84 | 86 |
| 85 // Max number of file entries to be fetched in a single http request. | 87 // Max number of file entries to be fetched in a single http request. |
| 86 // | 88 // |
| 87 // The larger the number is, | 89 // The larger the number is, |
| 88 // - The total running time to fetch the whole file list will become shorter. | 90 // - The total running time to fetch the whole file list will become shorter. |
| 89 // - The running time for a single request tends to become longer. | 91 // - The running time for a single request tends to become longer. |
| 90 // Since the file list fetching is a completely background task, for our side, | 92 // Since the file list fetching is a completely background task, for our side, |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 if (sender_.get()) | 191 if (sender_.get()) |
| 190 sender_->auth_service()->RemoveObserver(this); | 192 sender_->auth_service()->RemoveObserver(this); |
| 191 } | 193 } |
| 192 | 194 |
| 193 void DriveAPIService::Initialize(const std::string& account_id) { | 195 void DriveAPIService::Initialize(const std::string& account_id) { |
| 194 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 196 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 195 | 197 |
| 196 std::vector<std::string> scopes; | 198 std::vector<std::string> scopes; |
| 197 scopes.push_back(kDriveScope); | 199 scopes.push_back(kDriveScope); |
| 198 scopes.push_back(kDriveAppsReadonlyScope); | 200 scopes.push_back(kDriveAppsReadonlyScope); |
| 199 scopes.push_back(util::kDriveAppsScope); | 201 scopes.push_back(kDriveAppsScope); |
| 200 | 202 |
| 201 // GData WAPI token for GetShareUrl(). | 203 // Note: The following scope is used to support GetShareUrl on Drive API v2. |
| 202 scopes.push_back(util::kDocsListScope); | 204 // Unfortunately, there is no support on Drive API v2, so we need to fall back |
| 205 // to GData WAPI for the GetShareUrl. |
| 206 scopes.push_back(kDocsListScope); |
| 203 | 207 |
| 204 sender_.reset(new RequestSender( | 208 sender_.reset(new RequestSender( |
| 205 new google_apis::AuthService(oauth2_token_service_, | 209 new google_apis::AuthService(oauth2_token_service_, |
| 206 account_id, | 210 account_id, |
| 207 url_request_context_getter_.get(), | 211 url_request_context_getter_.get(), |
| 208 scopes), | 212 scopes), |
| 209 url_request_context_getter_.get(), | 213 url_request_context_getter_.get(), |
| 210 blocking_task_runner_.get(), | 214 blocking_task_runner_.get(), |
| 211 custom_user_agent_)); | 215 custom_user_agent_)); |
| 212 sender_->auth_service()->AddObserver(this); | 216 sender_->auth_service()->AddObserver(this); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 // So, here we use files.list method instead, with setting parents query. | 259 // So, here we use files.list method instead, with setting parents query. |
| 256 // After the migration from GData WAPI to Drive API v2, we should clean the | 260 // After the migration from GData WAPI to Drive API v2, we should clean the |
| 257 // code up by moving the responsibility to include "parents" in the query | 261 // code up by moving the responsibility to include "parents" in the query |
| 258 // to client side. | 262 // to client side. |
| 259 // We aren't interested in files in trash in this context, neither. | 263 // We aren't interested in files in trash in this context, neither. |
| 260 FilesListRequest* request = new FilesListRequest( | 264 FilesListRequest* request = new FilesListRequest( |
| 261 sender_.get(), url_generator_, callback); | 265 sender_.get(), url_generator_, callback); |
| 262 request->set_max_results(kMaxNumFilesResourcePerRequest); | 266 request->set_max_results(kMaxNumFilesResourcePerRequest); |
| 263 request->set_q(base::StringPrintf( | 267 request->set_q(base::StringPrintf( |
| 264 "'%s' in parents and trashed = false", | 268 "'%s' in parents and trashed = false", |
| 265 drive::util::EscapeQueryStringValue(directory_resource_id).c_str())); | 269 util::EscapeQueryStringValue(directory_resource_id).c_str())); |
| 266 request->set_fields(kFileListFields); | 270 request->set_fields(kFileListFields); |
| 267 return sender_->StartRequestWithRetry(request); | 271 return sender_->StartRequestWithRetry(request); |
| 268 } | 272 } |
| 269 | 273 |
| 270 CancelCallback DriveAPIService::Search( | 274 CancelCallback DriveAPIService::Search( |
| 271 const std::string& search_query, | 275 const std::string& search_query, |
| 272 const FileListCallback& callback) { | 276 const FileListCallback& callback) { |
| 273 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 277 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 274 DCHECK(!search_query.empty()); | 278 DCHECK(!search_query.empty()); |
| 275 DCHECK(!callback.is_null()); | 279 DCHECK(!callback.is_null()); |
| 276 | 280 |
| 277 FilesListRequest* request = new FilesListRequest( | 281 FilesListRequest* request = new FilesListRequest( |
| 278 sender_.get(), url_generator_, callback); | 282 sender_.get(), url_generator_, callback); |
| 279 request->set_max_results(kMaxNumFilesResourcePerRequestForSearch); | 283 request->set_max_results(kMaxNumFilesResourcePerRequestForSearch); |
| 280 request->set_q(drive::util::TranslateQuery(search_query)); | 284 request->set_q(util::TranslateQuery(search_query)); |
| 281 request->set_fields(kFileListFields); | 285 request->set_fields(kFileListFields); |
| 282 return sender_->StartRequestWithRetry(request); | 286 return sender_->StartRequestWithRetry(request); |
| 283 } | 287 } |
| 284 | 288 |
| 285 CancelCallback DriveAPIService::SearchByTitle( | 289 CancelCallback DriveAPIService::SearchByTitle( |
| 286 const std::string& title, | 290 const std::string& title, |
| 287 const std::string& directory_resource_id, | 291 const std::string& directory_resource_id, |
| 288 const FileListCallback& callback) { | 292 const FileListCallback& callback) { |
| 289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 293 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 290 DCHECK(!title.empty()); | 294 DCHECK(!title.empty()); |
| 291 DCHECK(!callback.is_null()); | 295 DCHECK(!callback.is_null()); |
| 292 | 296 |
| 293 std::string query; | 297 std::string query; |
| 294 base::StringAppendF(&query, "title = '%s'", | 298 base::StringAppendF(&query, "title = '%s'", |
| 295 drive::util::EscapeQueryStringValue(title).c_str()); | 299 util::EscapeQueryStringValue(title).c_str()); |
| 296 if (!directory_resource_id.empty()) { | 300 if (!directory_resource_id.empty()) { |
| 297 base::StringAppendF( | 301 base::StringAppendF( |
| 298 &query, " and '%s' in parents", | 302 &query, " and '%s' in parents", |
| 299 drive::util::EscapeQueryStringValue(directory_resource_id).c_str()); | 303 util::EscapeQueryStringValue(directory_resource_id).c_str()); |
| 300 } | 304 } |
| 301 query += " and trashed = false"; | 305 query += " and trashed = false"; |
| 302 | 306 |
| 303 FilesListRequest* request = new FilesListRequest( | 307 FilesListRequest* request = new FilesListRequest( |
| 304 sender_.get(), url_generator_, callback); | 308 sender_.get(), url_generator_, callback); |
| 305 request->set_max_results(kMaxNumFilesResourcePerRequest); | 309 request->set_max_results(kMaxNumFilesResourcePerRequest); |
| 306 request->set_q(query); | 310 request->set_q(query); |
| 307 request->set_fields(kFileListFields); | 311 request->set_fields(kFileListFields); |
| 308 return sender_->StartRequestWithRetry(request); | 312 return sender_->StartRequestWithRetry(request); |
| 309 } | 313 } |
| (...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 753 if (CanSendRequest()) { | 757 if (CanSendRequest()) { |
| 754 FOR_EACH_OBSERVER( | 758 FOR_EACH_OBSERVER( |
| 755 DriveServiceObserver, observers_, OnReadyToSendRequests()); | 759 DriveServiceObserver, observers_, OnReadyToSendRequests()); |
| 756 } else if (!HasRefreshToken()) { | 760 } else if (!HasRefreshToken()) { |
| 757 FOR_EACH_OBSERVER( | 761 FOR_EACH_OBSERVER( |
| 758 DriveServiceObserver, observers_, OnRefreshTokenInvalid()); | 762 DriveServiceObserver, observers_, OnRefreshTokenInvalid()); |
| 759 } | 763 } |
| 760 } | 764 } |
| 761 | 765 |
| 762 } // namespace drive | 766 } // namespace drive |
| OLD | NEW |