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/message_loop_proxy.h" | 11 #include "base/message_loop/message_loop_proxy.h" |
12 #include "base/stringprintf.h" | 12 #include "base/stringprintf.h" |
13 #include "base/task_runner_util.h" | 13 #include "base/task_runner_util.h" |
14 #include "base/threading/sequenced_worker_pool.h" | 14 #include "base/threading/sequenced_worker_pool.h" |
15 #include "base/values.h" | 15 #include "base/values.h" |
16 #include "chrome/browser/google_apis/auth_service.h" | 16 #include "chrome/browser/google_apis/auth_service.h" |
17 #include "chrome/browser/google_apis/drive_api_operations.h" | 17 #include "chrome/browser/google_apis/drive_api_operations.h" |
18 #include "chrome/browser/google_apis/drive_api_parser.h" | 18 #include "chrome/browser/google_apis/drive_api_parser.h" |
19 #include "chrome/browser/google_apis/drive_api_util.h" | 19 #include "chrome/browser/google_apis/drive_api_util.h" |
20 #include "chrome/browser/google_apis/gdata_wapi_parser.h" | 20 #include "chrome/browser/google_apis/gdata_wapi_parser.h" |
21 #include "chrome/browser/google_apis/operation_runner.h" | 21 #include "chrome/browser/google_apis/request_sender.h" |
22 #include "chrome/browser/google_apis/time_util.h" | 22 #include "chrome/browser/google_apis/time_util.h" |
23 #include "chrome/browser/profiles/profile.h" | 23 #include "chrome/browser/profiles/profile.h" |
24 #include "content/public/browser/browser_thread.h" | 24 #include "content/public/browser/browser_thread.h" |
25 | 25 |
26 using content::BrowserThread; | 26 using content::BrowserThread; |
27 | 27 |
28 namespace google_apis { | 28 namespace google_apis { |
29 | 29 |
30 namespace { | 30 namespace { |
31 | 31 |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 const char kDriveApiRootDirectoryResourceId[] = "root"; | 218 const char kDriveApiRootDirectoryResourceId[] = "root"; |
219 | 219 |
220 } // namespace | 220 } // namespace |
221 | 221 |
222 DriveAPIService::DriveAPIService( | 222 DriveAPIService::DriveAPIService( |
223 net::URLRequestContextGetter* url_request_context_getter, | 223 net::URLRequestContextGetter* url_request_context_getter, |
224 const GURL& base_url, | 224 const GURL& base_url, |
225 const std::string& custom_user_agent) | 225 const std::string& custom_user_agent) |
226 : url_request_context_getter_(url_request_context_getter), | 226 : url_request_context_getter_(url_request_context_getter), |
227 profile_(NULL), | 227 profile_(NULL), |
228 runner_(NULL), | 228 sender_(NULL), |
229 url_generator_(base_url), | 229 url_generator_(base_url), |
230 custom_user_agent_(custom_user_agent) { | 230 custom_user_agent_(custom_user_agent) { |
231 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 231 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
232 } | 232 } |
233 | 233 |
234 DriveAPIService::~DriveAPIService() { | 234 DriveAPIService::~DriveAPIService() { |
235 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 235 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
236 if (runner_.get()) | 236 if (sender_.get()) |
237 runner_->auth_service()->RemoveObserver(this); | 237 sender_->auth_service()->RemoveObserver(this); |
238 } | 238 } |
239 | 239 |
240 void DriveAPIService::Initialize(Profile* profile) { | 240 void DriveAPIService::Initialize(Profile* profile) { |
241 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 241 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
242 profile_ = profile; | 242 profile_ = profile; |
243 | 243 |
244 std::vector<std::string> scopes; | 244 std::vector<std::string> scopes; |
245 scopes.push_back(kDriveScope); | 245 scopes.push_back(kDriveScope); |
246 scopes.push_back(kDriveAppsReadonlyScope); | 246 scopes.push_back(kDriveAppsReadonlyScope); |
247 runner_.reset(new OperationRunner(profile, | 247 sender_.reset(new RequestSender(profile, |
248 url_request_context_getter_, | 248 url_request_context_getter_, |
249 scopes, | 249 scopes, |
250 custom_user_agent_)); | 250 custom_user_agent_)); |
251 runner_->Initialize(); | 251 sender_->Initialize(); |
252 | 252 |
253 runner_->auth_service()->AddObserver(this); | 253 sender_->auth_service()->AddObserver(this); |
254 } | 254 } |
255 | 255 |
256 void DriveAPIService::AddObserver(DriveServiceObserver* observer) { | 256 void DriveAPIService::AddObserver(DriveServiceObserver* observer) { |
257 observers_.AddObserver(observer); | 257 observers_.AddObserver(observer); |
258 } | 258 } |
259 | 259 |
260 void DriveAPIService::RemoveObserver(DriveServiceObserver* observer) { | 260 void DriveAPIService::RemoveObserver(DriveServiceObserver* observer) { |
261 observers_.RemoveObserver(observer); | 261 observers_.RemoveObserver(observer); |
262 } | 262 } |
263 | 263 |
264 bool DriveAPIService::CanStartOperation() const { | 264 bool DriveAPIService::CanStartOperation() const { |
265 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 265 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
266 | 266 |
267 return HasRefreshToken(); | 267 return HasRefreshToken(); |
268 } | 268 } |
269 | 269 |
270 void DriveAPIService::CancelAll() { | 270 void DriveAPIService::CancelAll() { |
271 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 271 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
272 runner_->CancelAll(); | 272 sender_->CancelAll(); |
273 } | 273 } |
274 | 274 |
275 bool DriveAPIService::CancelForFilePath(const base::FilePath& file_path) { | 275 bool DriveAPIService::CancelForFilePath(const base::FilePath& file_path) { |
276 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 276 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
277 return runner_->operation_registry()->CancelForFilePath(file_path); | 277 return sender_->operation_registry()->CancelForFilePath(file_path); |
278 } | 278 } |
279 | 279 |
280 std::string DriveAPIService::CanonicalizeResourceId( | 280 std::string DriveAPIService::CanonicalizeResourceId( |
281 const std::string& resource_id) const { | 281 const std::string& resource_id) const { |
282 return drive::util::CanonicalizeResourceId(resource_id); | 282 return drive::util::CanonicalizeResourceId(resource_id); |
283 } | 283 } |
284 | 284 |
285 std::string DriveAPIService::GetRootResourceId() const { | 285 std::string DriveAPIService::GetRootResourceId() const { |
286 return kDriveApiRootDirectoryResourceId; | 286 return kDriveApiRootDirectoryResourceId; |
287 } | 287 } |
288 | 288 |
289 void DriveAPIService::GetAllResourceList( | 289 void DriveAPIService::GetAllResourceList( |
290 const GetResourceListCallback& callback) { | 290 const GetResourceListCallback& callback) { |
291 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 291 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
292 DCHECK(!callback.is_null()); | 292 DCHECK(!callback.is_null()); |
293 | 293 |
294 // The simplest way to fetch the all resources list looks files.list method, | 294 // The simplest way to fetch the all resources list looks files.list method, |
295 // but it seems impossible to know the returned list's changestamp. | 295 // but it seems impossible to know the returned list's changestamp. |
296 // Thus, instead, we use changes.list method with includeDeleted=false here. | 296 // Thus, instead, we use changes.list method with includeDeleted=false here. |
297 // The returned list should contain only resources currently existing. | 297 // The returned list should contain only resources currently existing. |
298 runner_->StartOperationWithRetry( | 298 sender_->StartRequestWithRetry( |
299 new GetChangelistOperation( | 299 new GetChangelistOperation( |
300 runner_.get(), | 300 sender_.get(), |
301 url_request_context_getter_, | 301 url_request_context_getter_, |
302 url_generator_, | 302 url_generator_, |
303 false, // include deleted | 303 false, // include deleted |
304 0, | 304 0, |
305 kMaxNumFilesResourcePerRequest, | 305 kMaxNumFilesResourcePerRequest, |
306 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); | 306 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); |
307 } | 307 } |
308 | 308 |
309 void DriveAPIService::GetResourceListInDirectory( | 309 void DriveAPIService::GetResourceListInDirectory( |
310 const std::string& directory_resource_id, | 310 const std::string& directory_resource_id, |
311 const GetResourceListCallback& callback) { | 311 const GetResourceListCallback& callback) { |
312 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 312 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
313 DCHECK(!directory_resource_id.empty()); | 313 DCHECK(!directory_resource_id.empty()); |
314 DCHECK(!callback.is_null()); | 314 DCHECK(!callback.is_null()); |
315 | 315 |
316 // Because children.list method on Drive API v2 returns only the list of | 316 // Because children.list method on Drive API v2 returns only the list of |
317 // children's references, but we need all file resource list. | 317 // children's references, but we need all file resource list. |
318 // So, here we use files.list method instead, with setting parents query. | 318 // So, here we use files.list method instead, with setting parents query. |
319 // After the migration from GData WAPI to Drive API v2, we should clean the | 319 // After the migration from GData WAPI to Drive API v2, we should clean the |
320 // code up by moving the resposibility to include "parents" in the query | 320 // code up by moving the resposibility to include "parents" in the query |
321 // to client side. | 321 // to client side. |
322 // We aren't interested in files in trash in this context, neither. | 322 // We aren't interested in files in trash in this context, neither. |
323 runner_->StartOperationWithRetry( | 323 sender_->StartRequestWithRetry( |
324 new GetFilelistOperation( | 324 new GetFilelistOperation( |
325 runner_.get(), | 325 sender_.get(), |
326 url_request_context_getter_, | 326 url_request_context_getter_, |
327 url_generator_, | 327 url_generator_, |
328 base::StringPrintf( | 328 base::StringPrintf( |
329 "'%s' in parents and trashed = false", | 329 "'%s' in parents and trashed = false", |
330 drive::util::EscapeQueryStringValue( | 330 drive::util::EscapeQueryStringValue( |
331 directory_resource_id).c_str()), | 331 directory_resource_id).c_str()), |
332 kMaxNumFilesResourcePerRequest, | 332 kMaxNumFilesResourcePerRequest, |
333 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); | 333 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); |
334 } | 334 } |
335 | 335 |
336 void DriveAPIService::Search(const std::string& search_query, | 336 void DriveAPIService::Search(const std::string& search_query, |
337 const GetResourceListCallback& callback) { | 337 const GetResourceListCallback& callback) { |
338 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 338 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
339 DCHECK(!search_query.empty()); | 339 DCHECK(!search_query.empty()); |
340 DCHECK(!callback.is_null()); | 340 DCHECK(!callback.is_null()); |
341 | 341 |
342 runner_->StartOperationWithRetry( | 342 sender_->StartRequestWithRetry( |
343 new GetFilelistOperation( | 343 new GetFilelistOperation( |
344 runner_.get(), | 344 sender_.get(), |
345 url_request_context_getter_, | 345 url_request_context_getter_, |
346 url_generator_, | 346 url_generator_, |
347 drive::util::TranslateQuery(search_query), | 347 drive::util::TranslateQuery(search_query), |
348 kMaxNumFilesResourcePerRequestForSearch, | 348 kMaxNumFilesResourcePerRequestForSearch, |
349 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); | 349 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); |
350 } | 350 } |
351 | 351 |
352 void DriveAPIService::SearchByTitle( | 352 void DriveAPIService::SearchByTitle( |
353 const std::string& title, | 353 const std::string& title, |
354 const std::string& directory_resource_id, | 354 const std::string& directory_resource_id, |
355 const GetResourceListCallback& callback) { | 355 const GetResourceListCallback& callback) { |
356 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 356 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
357 DCHECK(!title.empty()); | 357 DCHECK(!title.empty()); |
358 DCHECK(!callback.is_null()); | 358 DCHECK(!callback.is_null()); |
359 | 359 |
360 std::string query; | 360 std::string query; |
361 base::StringAppendF(&query, "title = '%s'", | 361 base::StringAppendF(&query, "title = '%s'", |
362 drive::util::EscapeQueryStringValue(title).c_str()); | 362 drive::util::EscapeQueryStringValue(title).c_str()); |
363 if (!directory_resource_id.empty()) { | 363 if (!directory_resource_id.empty()) { |
364 base::StringAppendF( | 364 base::StringAppendF( |
365 &query, " and '%s' in parents", | 365 &query, " and '%s' in parents", |
366 drive::util::EscapeQueryStringValue(directory_resource_id).c_str()); | 366 drive::util::EscapeQueryStringValue(directory_resource_id).c_str()); |
367 } | 367 } |
368 query += " and trashed = false"; | 368 query += " and trashed = false"; |
369 | 369 |
370 runner_->StartOperationWithRetry( | 370 sender_->StartRequestWithRetry( |
371 new GetFilelistOperation( | 371 new GetFilelistOperation( |
372 runner_.get(), | 372 sender_.get(), |
373 url_request_context_getter_, | 373 url_request_context_getter_, |
374 url_generator_, | 374 url_generator_, |
375 query, | 375 query, |
376 kMaxNumFilesResourcePerRequest, | 376 kMaxNumFilesResourcePerRequest, |
377 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); | 377 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); |
378 } | 378 } |
379 | 379 |
380 void DriveAPIService::GetChangeList(int64 start_changestamp, | 380 void DriveAPIService::GetChangeList(int64 start_changestamp, |
381 const GetResourceListCallback& callback) { | 381 const GetResourceListCallback& callback) { |
382 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 382 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
383 DCHECK(!callback.is_null()); | 383 DCHECK(!callback.is_null()); |
384 | 384 |
385 runner_->StartOperationWithRetry( | 385 sender_->StartRequestWithRetry( |
386 new GetChangelistOperation( | 386 new GetChangelistOperation( |
387 runner_.get(), | 387 sender_.get(), |
388 url_request_context_getter_, | 388 url_request_context_getter_, |
389 url_generator_, | 389 url_generator_, |
390 true, // include deleted | 390 true, // include deleted |
391 start_changestamp, | 391 start_changestamp, |
392 kMaxNumFilesResourcePerRequest, | 392 kMaxNumFilesResourcePerRequest, |
393 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); | 393 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); |
394 } | 394 } |
395 | 395 |
396 void DriveAPIService::ContinueGetResourceList( | 396 void DriveAPIService::ContinueGetResourceList( |
397 const GURL& override_url, | 397 const GURL& override_url, |
398 const GetResourceListCallback& callback) { | 398 const GetResourceListCallback& callback) { |
399 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 399 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
400 DCHECK(!callback.is_null()); | 400 DCHECK(!callback.is_null()); |
401 | 401 |
402 runner_->StartOperationWithRetry( | 402 sender_->StartRequestWithRetry( |
403 new drive::ContinueGetFileListOperation( | 403 new drive::ContinueGetFileListOperation( |
404 runner_.get(), | 404 sender_.get(), |
405 url_request_context_getter_, | 405 url_request_context_getter_, |
406 override_url, | 406 override_url, |
407 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); | 407 base::Bind(&ParseResourceListOnBlockingPoolAndRun, callback))); |
408 } | 408 } |
409 | 409 |
410 void DriveAPIService::GetResourceEntry( | 410 void DriveAPIService::GetResourceEntry( |
411 const std::string& resource_id, | 411 const std::string& resource_id, |
412 const GetResourceEntryCallback& callback) { | 412 const GetResourceEntryCallback& callback) { |
413 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 413 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
414 DCHECK(!callback.is_null()); | 414 DCHECK(!callback.is_null()); |
415 | 415 |
416 runner_->StartOperationWithRetry(new GetFileOperation( | 416 sender_->StartRequestWithRetry(new GetFileOperation( |
417 runner_.get(), | 417 sender_.get(), |
418 url_request_context_getter_, | 418 url_request_context_getter_, |
419 url_generator_, | 419 url_generator_, |
420 resource_id, | 420 resource_id, |
421 base::Bind(&ParseResourceEntryAndRun, callback))); | 421 base::Bind(&ParseResourceEntryAndRun, callback))); |
422 } | 422 } |
423 | 423 |
424 void DriveAPIService::GetAboutResource( | 424 void DriveAPIService::GetAboutResource( |
425 const GetAboutResourceCallback& callback) { | 425 const GetAboutResourceCallback& callback) { |
426 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 426 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
427 DCHECK(!callback.is_null()); | 427 DCHECK(!callback.is_null()); |
428 | 428 |
429 runner_->StartOperationWithRetry( | 429 sender_->StartRequestWithRetry( |
430 new GetAboutOperation( | 430 new GetAboutOperation( |
431 runner_.get(), | 431 sender_.get(), |
432 url_request_context_getter_, | 432 url_request_context_getter_, |
433 url_generator_, | 433 url_generator_, |
434 callback)); | 434 callback)); |
435 } | 435 } |
436 | 436 |
437 void DriveAPIService::GetAppList(const GetAppListCallback& callback) { | 437 void DriveAPIService::GetAppList(const GetAppListCallback& callback) { |
438 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 438 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
439 DCHECK(!callback.is_null()); | 439 DCHECK(!callback.is_null()); |
440 | 440 |
441 runner_->StartOperationWithRetry(new GetApplistOperation( | 441 sender_->StartRequestWithRetry(new GetApplistOperation( |
442 runner_.get(), | 442 sender_.get(), |
443 url_request_context_getter_, | 443 url_request_context_getter_, |
444 url_generator_, | 444 url_generator_, |
445 base::Bind(&ParseAppListAndRun, callback))); | 445 base::Bind(&ParseAppListAndRun, callback))); |
446 } | 446 } |
447 | 447 |
448 void DriveAPIService::DownloadFile( | 448 void DriveAPIService::DownloadFile( |
449 const base::FilePath& virtual_path, | 449 const base::FilePath& virtual_path, |
450 const base::FilePath& local_cache_path, | 450 const base::FilePath& local_cache_path, |
451 const GURL& download_url, | 451 const GURL& download_url, |
452 const DownloadActionCallback& download_action_callback, | 452 const DownloadActionCallback& download_action_callback, |
453 const GetContentCallback& get_content_callback, | 453 const GetContentCallback& get_content_callback, |
454 const ProgressCallback& progress_callback) { | 454 const ProgressCallback& progress_callback) { |
455 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 455 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
456 DCHECK(!download_action_callback.is_null()); | 456 DCHECK(!download_action_callback.is_null()); |
457 // get_content_callback may be null. | 457 // get_content_callback may be null. |
458 | 458 |
459 runner_->StartOperationWithRetry( | 459 sender_->StartRequestWithRetry( |
460 new DownloadFileRequest(runner_.get(), | 460 new DownloadFileRequest(sender_.get(), |
461 url_request_context_getter_, | 461 url_request_context_getter_, |
462 download_action_callback, | 462 download_action_callback, |
463 get_content_callback, | 463 get_content_callback, |
464 progress_callback, | 464 progress_callback, |
465 download_url, | 465 download_url, |
466 virtual_path, | 466 virtual_path, |
467 local_cache_path)); | 467 local_cache_path)); |
468 } | 468 } |
469 | 469 |
470 void DriveAPIService::DeleteResource( | 470 void DriveAPIService::DeleteResource( |
471 const std::string& resource_id, | 471 const std::string& resource_id, |
472 const std::string& etag, | 472 const std::string& etag, |
473 const EntryActionCallback& callback) { | 473 const EntryActionCallback& callback) { |
474 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 474 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
475 DCHECK(!callback.is_null()); | 475 DCHECK(!callback.is_null()); |
476 | 476 |
477 runner_->StartOperationWithRetry(new drive::TrashResourceOperation( | 477 sender_->StartRequestWithRetry(new drive::TrashResourceOperation( |
478 runner_.get(), | 478 sender_.get(), |
479 url_request_context_getter_, | 479 url_request_context_getter_, |
480 url_generator_, | 480 url_generator_, |
481 resource_id, | 481 resource_id, |
482 callback)); | 482 callback)); |
483 } | 483 } |
484 | 484 |
485 void DriveAPIService::AddNewDirectory( | 485 void DriveAPIService::AddNewDirectory( |
486 const std::string& parent_resource_id, | 486 const std::string& parent_resource_id, |
487 const std::string& directory_name, | 487 const std::string& directory_name, |
488 const GetResourceEntryCallback& callback) { | 488 const GetResourceEntryCallback& callback) { |
489 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 489 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
490 DCHECK(!callback.is_null()); | 490 DCHECK(!callback.is_null()); |
491 | 491 |
492 runner_->StartOperationWithRetry( | 492 sender_->StartRequestWithRetry( |
493 new drive::CreateDirectoryOperation( | 493 new drive::CreateDirectoryOperation( |
494 runner_.get(), | 494 sender_.get(), |
495 url_request_context_getter_, | 495 url_request_context_getter_, |
496 url_generator_, | 496 url_generator_, |
497 parent_resource_id, | 497 parent_resource_id, |
498 directory_name, | 498 directory_name, |
499 base::Bind(&ParseResourceEntryAndRun, callback))); | 499 base::Bind(&ParseResourceEntryAndRun, callback))); |
500 } | 500 } |
501 | 501 |
502 void DriveAPIService::CopyResource( | 502 void DriveAPIService::CopyResource( |
503 const std::string& resource_id, | 503 const std::string& resource_id, |
504 const std::string& parent_resource_id, | 504 const std::string& parent_resource_id, |
505 const std::string& new_name, | 505 const std::string& new_name, |
506 const GetResourceEntryCallback& callback) { | 506 const GetResourceEntryCallback& callback) { |
507 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 507 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
508 DCHECK(!callback.is_null()); | 508 DCHECK(!callback.is_null()); |
509 | 509 |
510 runner_->StartOperationWithRetry( | 510 sender_->StartRequestWithRetry( |
511 new drive::CopyResourceOperation( | 511 new drive::CopyResourceOperation( |
512 runner_.get(), | 512 sender_.get(), |
513 url_request_context_getter_, | 513 url_request_context_getter_, |
514 url_generator_, | 514 url_generator_, |
515 resource_id, | 515 resource_id, |
516 parent_resource_id, | 516 parent_resource_id, |
517 new_name, | 517 new_name, |
518 base::Bind(&ParseResourceEntryAndRun, callback))); | 518 base::Bind(&ParseResourceEntryAndRun, callback))); |
519 } | 519 } |
520 | 520 |
521 void DriveAPIService::CopyHostedDocument( | 521 void DriveAPIService::CopyHostedDocument( |
522 const std::string& resource_id, | 522 const std::string& resource_id, |
523 const std::string& new_name, | 523 const std::string& new_name, |
524 const GetResourceEntryCallback& callback) { | 524 const GetResourceEntryCallback& callback) { |
525 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 525 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
526 DCHECK(!callback.is_null()); | 526 DCHECK(!callback.is_null()); |
527 | 527 |
528 runner_->StartOperationWithRetry( | 528 sender_->StartRequestWithRetry( |
529 new drive::CopyResourceOperation( | 529 new drive::CopyResourceOperation( |
530 runner_.get(), | 530 sender_.get(), |
531 url_request_context_getter_, | 531 url_request_context_getter_, |
532 url_generator_, | 532 url_generator_, |
533 resource_id, | 533 resource_id, |
534 std::string(), // parent_resource_id. | 534 std::string(), // parent_resource_id. |
535 new_name, | 535 new_name, |
536 base::Bind(&ParseResourceEntryAndRun, callback))); | 536 base::Bind(&ParseResourceEntryAndRun, callback))); |
537 } | 537 } |
538 | 538 |
539 void DriveAPIService::RenameResource( | 539 void DriveAPIService::RenameResource( |
540 const std::string& resource_id, | 540 const std::string& resource_id, |
541 const std::string& new_name, | 541 const std::string& new_name, |
542 const EntryActionCallback& callback) { | 542 const EntryActionCallback& callback) { |
543 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 543 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
544 DCHECK(!callback.is_null()); | 544 DCHECK(!callback.is_null()); |
545 | 545 |
546 runner_->StartOperationWithRetry( | 546 sender_->StartRequestWithRetry( |
547 new drive::RenameResourceOperation( | 547 new drive::RenameResourceOperation( |
548 runner_.get(), | 548 sender_.get(), |
549 url_request_context_getter_, | 549 url_request_context_getter_, |
550 url_generator_, | 550 url_generator_, |
551 resource_id, | 551 resource_id, |
552 new_name, | 552 new_name, |
553 callback)); | 553 callback)); |
554 } | 554 } |
555 | 555 |
556 void DriveAPIService::TouchResource( | 556 void DriveAPIService::TouchResource( |
557 const std::string& resource_id, | 557 const std::string& resource_id, |
558 const base::Time& modified_date, | 558 const base::Time& modified_date, |
559 const base::Time& last_viewed_by_me_date, | 559 const base::Time& last_viewed_by_me_date, |
560 const GetResourceEntryCallback& callback) { | 560 const GetResourceEntryCallback& callback) { |
561 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 561 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
562 DCHECK(!modified_date.is_null()); | 562 DCHECK(!modified_date.is_null()); |
563 DCHECK(!last_viewed_by_me_date.is_null()); | 563 DCHECK(!last_viewed_by_me_date.is_null()); |
564 DCHECK(!callback.is_null()); | 564 DCHECK(!callback.is_null()); |
565 | 565 |
566 runner_->StartOperationWithRetry( | 566 sender_->StartRequestWithRetry( |
567 new drive::TouchResourceOperation( | 567 new drive::TouchResourceOperation( |
568 runner_.get(), | 568 sender_.get(), |
569 url_request_context_getter_, | 569 url_request_context_getter_, |
570 url_generator_, | 570 url_generator_, |
571 resource_id, | 571 resource_id, |
572 modified_date, | 572 modified_date, |
573 last_viewed_by_me_date, | 573 last_viewed_by_me_date, |
574 base::Bind(&ParseResourceEntryAndRun, callback))); | 574 base::Bind(&ParseResourceEntryAndRun, callback))); |
575 } | 575 } |
576 | 576 |
577 void DriveAPIService::AddResourceToDirectory( | 577 void DriveAPIService::AddResourceToDirectory( |
578 const std::string& parent_resource_id, | 578 const std::string& parent_resource_id, |
579 const std::string& resource_id, | 579 const std::string& resource_id, |
580 const EntryActionCallback& callback) { | 580 const EntryActionCallback& callback) { |
581 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 581 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
582 DCHECK(!callback.is_null()); | 582 DCHECK(!callback.is_null()); |
583 | 583 |
584 runner_->StartOperationWithRetry( | 584 sender_->StartRequestWithRetry( |
585 new drive::InsertResourceOperation( | 585 new drive::InsertResourceOperation( |
586 runner_.get(), | 586 sender_.get(), |
587 url_request_context_getter_, | 587 url_request_context_getter_, |
588 url_generator_, | 588 url_generator_, |
589 parent_resource_id, | 589 parent_resource_id, |
590 resource_id, | 590 resource_id, |
591 callback)); | 591 callback)); |
592 } | 592 } |
593 | 593 |
594 void DriveAPIService::RemoveResourceFromDirectory( | 594 void DriveAPIService::RemoveResourceFromDirectory( |
595 const std::string& parent_resource_id, | 595 const std::string& parent_resource_id, |
596 const std::string& resource_id, | 596 const std::string& resource_id, |
597 const EntryActionCallback& callback) { | 597 const EntryActionCallback& callback) { |
598 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 598 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
599 DCHECK(!callback.is_null()); | 599 DCHECK(!callback.is_null()); |
600 | 600 |
601 runner_->StartOperationWithRetry( | 601 sender_->StartRequestWithRetry( |
602 new drive::DeleteResourceOperation( | 602 new drive::DeleteResourceOperation( |
603 runner_.get(), | 603 sender_.get(), |
604 url_request_context_getter_, | 604 url_request_context_getter_, |
605 url_generator_, | 605 url_generator_, |
606 parent_resource_id, | 606 parent_resource_id, |
607 resource_id, | 607 resource_id, |
608 callback)); | 608 callback)); |
609 } | 609 } |
610 | 610 |
611 void DriveAPIService::InitiateUploadNewFile( | 611 void DriveAPIService::InitiateUploadNewFile( |
612 const base::FilePath& drive_file_path, | 612 const base::FilePath& drive_file_path, |
613 const std::string& content_type, | 613 const std::string& content_type, |
614 int64 content_length, | 614 int64 content_length, |
615 const std::string& parent_resource_id, | 615 const std::string& parent_resource_id, |
616 const std::string& title, | 616 const std::string& title, |
617 const InitiateUploadCallback& callback) { | 617 const InitiateUploadCallback& callback) { |
618 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 618 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
619 DCHECK(!callback.is_null()); | 619 DCHECK(!callback.is_null()); |
620 | 620 |
621 runner_->StartOperationWithRetry( | 621 sender_->StartRequestWithRetry( |
622 new drive::InitiateUploadNewFileOperation( | 622 new drive::InitiateUploadNewFileOperation( |
623 runner_.get(), | 623 sender_.get(), |
624 url_request_context_getter_, | 624 url_request_context_getter_, |
625 url_generator_, | 625 url_generator_, |
626 drive_file_path, | 626 drive_file_path, |
627 content_type, | 627 content_type, |
628 content_length, | 628 content_length, |
629 parent_resource_id, | 629 parent_resource_id, |
630 title, | 630 title, |
631 callback)); | 631 callback)); |
632 } | 632 } |
633 | 633 |
634 void DriveAPIService::InitiateUploadExistingFile( | 634 void DriveAPIService::InitiateUploadExistingFile( |
635 const base::FilePath& drive_file_path, | 635 const base::FilePath& drive_file_path, |
636 const std::string& content_type, | 636 const std::string& content_type, |
637 int64 content_length, | 637 int64 content_length, |
638 const std::string& resource_id, | 638 const std::string& resource_id, |
639 const std::string& etag, | 639 const std::string& etag, |
640 const InitiateUploadCallback& callback) { | 640 const InitiateUploadCallback& callback) { |
641 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 641 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
642 DCHECK(!callback.is_null()); | 642 DCHECK(!callback.is_null()); |
643 | 643 |
644 runner_->StartOperationWithRetry( | 644 sender_->StartRequestWithRetry( |
645 new drive::InitiateUploadExistingFileOperation( | 645 new drive::InitiateUploadExistingFileOperation( |
646 runner_.get(), | 646 sender_.get(), |
647 url_request_context_getter_, | 647 url_request_context_getter_, |
648 url_generator_, | 648 url_generator_, |
649 drive_file_path, | 649 drive_file_path, |
650 content_type, | 650 content_type, |
651 content_length, | 651 content_length, |
652 resource_id, | 652 resource_id, |
653 etag, | 653 etag, |
654 callback)); | 654 callback)); |
655 } | 655 } |
656 | 656 |
657 void DriveAPIService::ResumeUpload( | 657 void DriveAPIService::ResumeUpload( |
658 const base::FilePath& drive_file_path, | 658 const base::FilePath& drive_file_path, |
659 const GURL& upload_url, | 659 const GURL& upload_url, |
660 int64 start_position, | 660 int64 start_position, |
661 int64 end_position, | 661 int64 end_position, |
662 int64 content_length, | 662 int64 content_length, |
663 const std::string& content_type, | 663 const std::string& content_type, |
664 const base::FilePath& local_file_path, | 664 const base::FilePath& local_file_path, |
665 const UploadRangeCallback& callback, | 665 const UploadRangeCallback& callback, |
666 const ProgressCallback& progress_callback) { | 666 const ProgressCallback& progress_callback) { |
667 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 667 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
668 DCHECK(!callback.is_null()); | 668 DCHECK(!callback.is_null()); |
669 | 669 |
670 runner_->StartOperationWithRetry( | 670 sender_->StartRequestWithRetry( |
671 new drive::ResumeUploadOperation( | 671 new drive::ResumeUploadOperation( |
672 runner_.get(), | 672 sender_.get(), |
673 url_request_context_getter_, | 673 url_request_context_getter_, |
674 drive_file_path, | 674 drive_file_path, |
675 upload_url, | 675 upload_url, |
676 start_position, | 676 start_position, |
677 end_position, | 677 end_position, |
678 content_length, | 678 content_length, |
679 content_type, | 679 content_type, |
680 local_file_path, | 680 local_file_path, |
681 base::Bind(&ParseResourceEntryForUploadRangeAndRun, callback), | 681 base::Bind(&ParseResourceEntryForUploadRangeAndRun, callback), |
682 progress_callback)); | 682 progress_callback)); |
683 } | 683 } |
684 | 684 |
685 void DriveAPIService::GetUploadStatus( | 685 void DriveAPIService::GetUploadStatus( |
686 const base::FilePath& drive_file_path, | 686 const base::FilePath& drive_file_path, |
687 const GURL& upload_url, | 687 const GURL& upload_url, |
688 int64 content_length, | 688 int64 content_length, |
689 const UploadRangeCallback& callback) { | 689 const UploadRangeCallback& callback) { |
690 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 690 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
691 DCHECK(!callback.is_null()); | 691 DCHECK(!callback.is_null()); |
692 | 692 |
693 runner_->StartOperationWithRetry(new drive::GetUploadStatusOperation( | 693 sender_->StartRequestWithRetry(new drive::GetUploadStatusOperation( |
694 runner_.get(), | 694 sender_.get(), |
695 url_request_context_getter_, | 695 url_request_context_getter_, |
696 drive_file_path, | 696 drive_file_path, |
697 upload_url, | 697 upload_url, |
698 content_length, | 698 content_length, |
699 base::Bind(&ParseResourceEntryForUploadRangeAndRun, callback))); | 699 base::Bind(&ParseResourceEntryForUploadRangeAndRun, callback))); |
700 } | 700 } |
701 | 701 |
702 void DriveAPIService::AuthorizeApp( | 702 void DriveAPIService::AuthorizeApp( |
703 const std::string& resource_id, | 703 const std::string& resource_id, |
704 const std::string& app_id, | 704 const std::string& app_id, |
705 const AuthorizeAppCallback& callback) { | 705 const AuthorizeAppCallback& callback) { |
706 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 706 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
707 DCHECK(!callback.is_null()); | 707 DCHECK(!callback.is_null()); |
708 | 708 |
709 runner_->StartOperationWithRetry(new GetFileOperation( | 709 sender_->StartRequestWithRetry(new GetFileOperation( |
710 runner_.get(), | 710 sender_.get(), |
711 url_request_context_getter_, | 711 url_request_context_getter_, |
712 url_generator_, | 712 url_generator_, |
713 resource_id, | 713 resource_id, |
714 base::Bind(&ExtractOpenUrlAndRun, app_id, callback))); | 714 base::Bind(&ExtractOpenUrlAndRun, app_id, callback))); |
715 } | 715 } |
716 | 716 |
717 bool DriveAPIService::HasAccessToken() const { | 717 bool DriveAPIService::HasAccessToken() const { |
718 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 718 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
719 | 719 |
720 return runner_->auth_service()->HasAccessToken(); | 720 return sender_->auth_service()->HasAccessToken(); |
721 } | 721 } |
722 | 722 |
723 bool DriveAPIService::HasRefreshToken() const { | 723 bool DriveAPIService::HasRefreshToken() const { |
724 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 724 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
725 | 725 |
726 return runner_->auth_service()->HasRefreshToken(); | 726 return sender_->auth_service()->HasRefreshToken(); |
727 } | 727 } |
728 | 728 |
729 void DriveAPIService::ClearAccessToken() { | 729 void DriveAPIService::ClearAccessToken() { |
730 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 730 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
731 return runner_->auth_service()->ClearAccessToken(); | 731 return sender_->auth_service()->ClearAccessToken(); |
732 } | 732 } |
733 | 733 |
734 void DriveAPIService::ClearRefreshToken() { | 734 void DriveAPIService::ClearRefreshToken() { |
735 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 735 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
736 return runner_->auth_service()->ClearRefreshToken(); | 736 return sender_->auth_service()->ClearRefreshToken(); |
737 } | 737 } |
738 | 738 |
739 void DriveAPIService::OnOAuth2RefreshTokenChanged() { | 739 void DriveAPIService::OnOAuth2RefreshTokenChanged() { |
740 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 740 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
741 if (CanStartOperation()) { | 741 if (CanStartOperation()) { |
742 FOR_EACH_OBSERVER( | 742 FOR_EACH_OBSERVER( |
743 DriveServiceObserver, observers_, OnReadyToPerformOperations()); | 743 DriveServiceObserver, observers_, OnReadyToPerformOperations()); |
744 } else if (!HasRefreshToken()) { | 744 } else if (!HasRefreshToken()) { |
745 FOR_EACH_OBSERVER( | 745 FOR_EACH_OBSERVER( |
746 DriveServiceObserver, observers_, OnRefreshTokenInvalid()); | 746 DriveServiceObserver, observers_, OnRefreshTokenInvalid()); |
747 } | 747 } |
748 } | 748 } |
749 | 749 |
750 } // namespace google_apis | 750 } // namespace google_apis |
OLD | NEW |