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/google_apis/drive_api_service.h" | 5 #include "chrome/browser/google_apis/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" |
11 #include "base/message_loop_proxy.h" | 11 #include "base/message_loop_proxy.h" |
12 #include "base/string_util.h" | 12 #include "base/string_util.h" |
13 #include "base/stringprintf.h" | 13 #include "base/stringprintf.h" |
14 #include "base/task_runner_util.h" | 14 #include "base/task_runner_util.h" |
15 #include "base/threading/sequenced_worker_pool.h" | 15 #include "base/threading/sequenced_worker_pool.h" |
16 #include "base/values.h" | 16 #include "base/values.h" |
17 #include "chrome/browser/google_apis/auth_service.h" | 17 #include "chrome/browser/google_apis/auth_service.h" |
18 #include "chrome/browser/google_apis/drive_api_operations.h" | 18 #include "chrome/browser/google_apis/drive_api_operations.h" |
19 #include "chrome/browser/google_apis/drive_api_parser.h" | 19 #include "chrome/browser/google_apis/drive_api_parser.h" |
| 20 #include "chrome/browser/google_apis/drive_api_util.h" |
20 #include "chrome/browser/google_apis/gdata_wapi_operations.h" | 21 #include "chrome/browser/google_apis/gdata_wapi_operations.h" |
21 #include "chrome/browser/google_apis/gdata_wapi_parser.h" | 22 #include "chrome/browser/google_apis/gdata_wapi_parser.h" |
22 #include "chrome/browser/google_apis/operation_runner.h" | 23 #include "chrome/browser/google_apis/operation_runner.h" |
23 #include "chrome/browser/google_apis/time_util.h" | 24 #include "chrome/browser/google_apis/time_util.h" |
24 #include "chrome/browser/profiles/profile.h" | 25 #include "chrome/browser/profiles/profile.h" |
25 #include "content/public/browser/browser_thread.h" | 26 #include "content/public/browser/browser_thread.h" |
26 | 27 |
27 using content::BrowserThread; | 28 using content::BrowserThread; |
28 | 29 |
29 namespace google_apis { | 30 namespace google_apis { |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 callback.Run(UploadRangeResponse(GDATA_PARSE_ERROR, | 195 callback.Run(UploadRangeResponse(GDATA_PARSE_ERROR, |
195 response.start_position_received, | 196 response.start_position_received, |
196 response.end_position_received), | 197 response.end_position_received), |
197 scoped_ptr<ResourceEntry>()); | 198 scoped_ptr<ResourceEntry>()); |
198 return; | 199 return; |
199 } | 200 } |
200 | 201 |
201 callback.Run(response, entry.Pass()); | 202 callback.Run(response, entry.Pass()); |
202 } | 203 } |
203 | 204 |
204 // It is necessary to escape ' to \' in the query's string value. | |
205 // See also: https://developers.google.com/drive/search-parameters | |
206 std::string EscapeQueryStringValue(const std::string& str) { | |
207 std::string result; | |
208 ReplaceChars(str, "'", "\\'", &result); | |
209 return result; | |
210 } | |
211 | |
212 // The resource ID for the root directory for Drive API is defined in the spec: | 205 // The resource ID for the root directory for Drive API is defined in the spec: |
213 // https://developers.google.com/drive/folder | 206 // https://developers.google.com/drive/folder |
214 const char kDriveApiRootDirectoryResourceId[] = "root"; | 207 const char kDriveApiRootDirectoryResourceId[] = "root"; |
215 | 208 |
216 } // namespace | 209 } // namespace |
217 | 210 |
218 DriveAPIService::DriveAPIService( | 211 DriveAPIService::DriveAPIService( |
219 net::URLRequestContextGetter* url_request_context_getter, | 212 net::URLRequestContextGetter* url_request_context_getter, |
220 const GURL& base_url, | 213 const GURL& base_url, |
221 const GURL& wapi_base_url, | 214 const GURL& wapi_base_url, |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 // code up by moving the resposibility to include "parents" in the query | 313 // code up by moving the resposibility to include "parents" in the query |
321 // to client side. | 314 // to client side. |
322 // We aren't interested in files in trash in this context, neither. | 315 // We aren't interested in files in trash in this context, neither. |
323 runner_->StartOperationWithRetry( | 316 runner_->StartOperationWithRetry( |
324 new GetFilelistOperation( | 317 new GetFilelistOperation( |
325 operation_registry(), | 318 operation_registry(), |
326 url_request_context_getter_, | 319 url_request_context_getter_, |
327 url_generator_, | 320 url_generator_, |
328 base::StringPrintf( | 321 base::StringPrintf( |
329 "'%s' in parents and trashed = false", | 322 "'%s' in parents and trashed = false", |
330 EscapeQueryStringValue(directory_resource_id).c_str()), | 323 drive::util::EscapeQueryStringValue( |
| 324 directory_resource_id).c_str()), |
331 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); | 325 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); |
332 } | 326 } |
333 | 327 |
334 void DriveAPIService::Search(const std::string& search_query, | 328 void DriveAPIService::Search(const std::string& search_query, |
335 const GetResourceListCallback& callback) { | 329 const GetResourceListCallback& callback) { |
336 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 330 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
337 DCHECK(!search_query.empty()); | 331 DCHECK(!search_query.empty()); |
338 DCHECK(!callback.is_null()); | 332 DCHECK(!callback.is_null()); |
339 | 333 |
340 runner_->StartOperationWithRetry( | 334 runner_->StartOperationWithRetry( |
(...skipping 15 matching lines...) Expand all Loading... |
356 DCHECK(!callback.is_null()); | 350 DCHECK(!callback.is_null()); |
357 | 351 |
358 runner_->StartOperationWithRetry( | 352 runner_->StartOperationWithRetry( |
359 new GetFilelistOperation( | 353 new GetFilelistOperation( |
360 operation_registry(), | 354 operation_registry(), |
361 url_request_context_getter_, | 355 url_request_context_getter_, |
362 url_generator_, | 356 url_generator_, |
363 base::StringPrintf( | 357 base::StringPrintf( |
364 "%s and '%s' in parents and trashed = false", | 358 "%s and '%s' in parents and trashed = false", |
365 search_query.c_str(), | 359 search_query.c_str(), |
366 EscapeQueryStringValue(directory_resource_id).c_str()), | 360 drive::util::EscapeQueryStringValue( |
| 361 directory_resource_id).c_str()), |
367 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); | 362 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); |
368 } | 363 } |
369 | 364 |
370 void DriveAPIService::GetChangeList(int64 start_changestamp, | 365 void DriveAPIService::GetChangeList(int64 start_changestamp, |
371 const GetResourceListCallback& callback) { | 366 const GetResourceListCallback& callback) { |
372 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 367 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
373 DCHECK(!callback.is_null()); | 368 DCHECK(!callback.is_null()); |
374 | 369 |
375 runner_->StartOperationWithRetry( | 370 runner_->StartOperationWithRetry( |
376 new GetChangelistOperation( | 371 new GetChangelistOperation( |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
718 } | 713 } |
719 | 714 |
720 void DriveAPIService::OnProgressUpdate( | 715 void DriveAPIService::OnProgressUpdate( |
721 const OperationProgressStatusList& list) { | 716 const OperationProgressStatusList& list) { |
722 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 717 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
723 FOR_EACH_OBSERVER( | 718 FOR_EACH_OBSERVER( |
724 DriveServiceObserver, observers_, OnProgressUpdate(list)); | 719 DriveServiceObserver, observers_, OnProgressUpdate(list)); |
725 } | 720 } |
726 | 721 |
727 } // namespace google_apis | 722 } // namespace google_apis |
OLD | NEW |