| 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/chromeos/drive/job_scheduler.h" | 5 #include "chrome/browser/chromeos/drive/job_scheduler.h" |
| 6 | 6 |
| 7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
| 8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "base/rand_util.h" | 9 #include "base/rand_util.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
| 12 #include "chrome/browser/chromeos/drive/file_system_util.h" | 12 #include "chrome/browser/chromeos/drive/file_system_util.h" |
| 13 #include "chrome/browser/chromeos/drive/logging.h" | 13 #include "chrome/browser/chromeos/drive/logging.h" |
| 14 #include "chrome/browser/google_apis/drive_api_parser.h" | 14 #include "chrome/browser/google_apis/drive_api_parser.h" |
| 15 #include "chrome/browser/google_apis/task_util.h" | |
| 16 #include "chrome/common/pref_names.h" | 15 #include "chrome/common/pref_names.h" |
| 17 #include "content/public/browser/browser_thread.h" | 16 #include "content/public/browser/browser_thread.h" |
| 18 | 17 |
| 19 using content::BrowserThread; | 18 using content::BrowserThread; |
| 20 | 19 |
| 21 namespace drive { | 20 namespace drive { |
| 22 | 21 |
| 23 namespace { | 22 namespace { |
| 24 | 23 |
| 25 // All jobs are retried at maximum of kMaxRetryCount when they fail due to | 24 // All jobs are retried at maximum of kMaxRetryCount when they fail due to |
| 26 // throttling or server error. The delay before retrying a job is shared among | 25 // throttling or server error. The delay before retrying a job is shared among |
| 27 // jobs. It doubles in length on each failure, upto 2^kMaxThrottleCount seconds. | 26 // jobs. It doubles in length on each failure, upto 2^kMaxThrottleCount seconds. |
| 28 // | 27 // |
| 29 // According to the API documentation, kMaxRetryCount should be the same as | 28 // According to the API documentation, kMaxRetryCount should be the same as |
| 30 // kMaxThrottleCount (https://developers.google.com/drive/handle-errors). | 29 // kMaxThrottleCount (https://developers.google.com/drive/handle-errors). |
| 31 // But currently multiplied by 2 to ensure upload related jobs retried for a | 30 // But currently multiplied by 2 to ensure upload related jobs retried for a |
| 32 // sufficient number of times. crbug.com/269918 | 31 // sufficient number of times. crbug.com/269918 |
| 33 const int kMaxThrottleCount = 4; | 32 const int kMaxThrottleCount = 4; |
| 34 const int kMaxRetryCount = 2 * kMaxThrottleCount; | 33 const int kMaxRetryCount = 2 * kMaxThrottleCount; |
| 35 | 34 |
| 35 // GetDefaultValue returns a value constructed by the default constructor. |
| 36 template<typename T> struct DefaultValueCreator { |
| 37 static T GetDefaultValue() { return T(); } |
| 38 }; |
| 39 template<typename T> struct DefaultValueCreator<const T&> { |
| 40 static T GetDefaultValue() { return T(); } |
| 41 }; |
| 42 |
| 43 // Helper of CreateErrorRunCallback implementation. |
| 44 // Provides: |
| 45 // - ResultType; the type of the Callback which should be returned by |
| 46 // CreateErrorRunCallback. |
| 47 // - Run(): a static function which takes the original |callback| and |error|, |
| 48 // and runs the |callback|.Run() with the error code and default values |
| 49 // for remaining arguments. |
| 50 template<typename CallbackType> struct CreateErrorRunCallbackHelper; |
| 51 |
| 52 // CreateErrorRunCallback with two arguments. |
| 53 template<typename P1> |
| 54 struct CreateErrorRunCallbackHelper<void(google_apis::GDataErrorCode, P1)> { |
| 55 static void Run( |
| 56 const base::Callback<void(google_apis::GDataErrorCode, P1)>& callback, |
| 57 google_apis::GDataErrorCode error) { |
| 58 callback.Run(error, DefaultValueCreator<P1>::GetDefaultValue()); |
| 59 } |
| 60 }; |
| 61 |
| 62 // Returns a callback with the tail parameter bound to its default value. |
| 63 // In other words, returned_callback.Run(error) runs callback.Run(error, T()). |
| 64 template<typename CallbackType> |
| 65 base::Callback<void(google_apis::GDataErrorCode)> |
| 66 CreateErrorRunCallback(const base::Callback<CallbackType>& callback) { |
| 67 return base::Bind(&CreateErrorRunCallbackHelper<CallbackType>::Run, callback); |
| 68 } |
| 69 |
| 36 // Parameter struct for RunUploadNewFile. | 70 // Parameter struct for RunUploadNewFile. |
| 37 struct UploadNewFileParams { | 71 struct UploadNewFileParams { |
| 38 std::string parent_resource_id; | 72 std::string parent_resource_id; |
| 39 base::FilePath local_file_path; | 73 base::FilePath local_file_path; |
| 40 std::string title; | 74 std::string title; |
| 41 std::string content_type; | 75 std::string content_type; |
| 42 UploadCompletionCallback callback; | 76 UploadCompletionCallback callback; |
| 43 google_apis::ProgressCallback progress_callback; | 77 google_apis::ProgressCallback progress_callback; |
| 44 }; | 78 }; |
| 45 | 79 |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 DCHECK(!callback.is_null()); | 235 DCHECK(!callback.is_null()); |
| 202 | 236 |
| 203 JobEntry* new_job = CreateNewJob(TYPE_GET_ABOUT_RESOURCE); | 237 JobEntry* new_job = CreateNewJob(TYPE_GET_ABOUT_RESOURCE); |
| 204 new_job->task = base::Bind( | 238 new_job->task = base::Bind( |
| 205 &DriveServiceInterface::GetAboutResource, | 239 &DriveServiceInterface::GetAboutResource, |
| 206 base::Unretained(drive_service_), | 240 base::Unretained(drive_service_), |
| 207 base::Bind(&JobScheduler::OnGetAboutResourceJobDone, | 241 base::Bind(&JobScheduler::OnGetAboutResourceJobDone, |
| 208 weak_ptr_factory_.GetWeakPtr(), | 242 weak_ptr_factory_.GetWeakPtr(), |
| 209 new_job->job_info.job_id, | 243 new_job->job_info.job_id, |
| 210 callback)); | 244 callback)); |
| 211 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 245 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 212 StartJob(new_job); | 246 StartJob(new_job); |
| 213 } | 247 } |
| 214 | 248 |
| 215 void JobScheduler::GetAppList(const google_apis::AppListCallback& callback) { | 249 void JobScheduler::GetAppList(const google_apis::AppListCallback& callback) { |
| 216 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 250 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 217 DCHECK(!callback.is_null()); | 251 DCHECK(!callback.is_null()); |
| 218 | 252 |
| 219 JobEntry* new_job = CreateNewJob(TYPE_GET_APP_LIST); | 253 JobEntry* new_job = CreateNewJob(TYPE_GET_APP_LIST); |
| 220 new_job->task = base::Bind( | 254 new_job->task = base::Bind( |
| 221 &DriveServiceInterface::GetAppList, | 255 &DriveServiceInterface::GetAppList, |
| 222 base::Unretained(drive_service_), | 256 base::Unretained(drive_service_), |
| 223 base::Bind(&JobScheduler::OnGetAppListJobDone, | 257 base::Bind(&JobScheduler::OnGetAppListJobDone, |
| 224 weak_ptr_factory_.GetWeakPtr(), | 258 weak_ptr_factory_.GetWeakPtr(), |
| 225 new_job->job_info.job_id, | 259 new_job->job_info.job_id, |
| 226 callback)); | 260 callback)); |
| 227 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 261 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 228 StartJob(new_job); | 262 StartJob(new_job); |
| 229 } | 263 } |
| 230 | 264 |
| 231 void JobScheduler::GetAllResourceList( | 265 void JobScheduler::GetAllResourceList( |
| 232 const google_apis::GetResourceListCallback& callback) { | 266 const google_apis::GetResourceListCallback& callback) { |
| 233 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 267 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 234 DCHECK(!callback.is_null()); | 268 DCHECK(!callback.is_null()); |
| 235 | 269 |
| 236 JobEntry* new_job = CreateNewJob(TYPE_GET_ALL_RESOURCE_LIST); | 270 JobEntry* new_job = CreateNewJob(TYPE_GET_ALL_RESOURCE_LIST); |
| 237 new_job->task = base::Bind( | 271 new_job->task = base::Bind( |
| 238 &DriveServiceInterface::GetAllResourceList, | 272 &DriveServiceInterface::GetAllResourceList, |
| 239 base::Unretained(drive_service_), | 273 base::Unretained(drive_service_), |
| 240 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 274 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 241 weak_ptr_factory_.GetWeakPtr(), | 275 weak_ptr_factory_.GetWeakPtr(), |
| 242 new_job->job_info.job_id, | 276 new_job->job_info.job_id, |
| 243 callback)); | 277 callback)); |
| 244 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 278 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 245 StartJob(new_job); | 279 StartJob(new_job); |
| 246 } | 280 } |
| 247 | 281 |
| 248 void JobScheduler::GetResourceListInDirectory( | 282 void JobScheduler::GetResourceListInDirectory( |
| 249 const std::string& directory_resource_id, | 283 const std::string& directory_resource_id, |
| 250 const google_apis::GetResourceListCallback& callback) { | 284 const google_apis::GetResourceListCallback& callback) { |
| 251 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 285 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 252 DCHECK(!callback.is_null()); | 286 DCHECK(!callback.is_null()); |
| 253 | 287 |
| 254 JobEntry* new_job = CreateNewJob( | 288 JobEntry* new_job = CreateNewJob( |
| 255 TYPE_GET_RESOURCE_LIST_IN_DIRECTORY); | 289 TYPE_GET_RESOURCE_LIST_IN_DIRECTORY); |
| 256 new_job->task = base::Bind( | 290 new_job->task = base::Bind( |
| 257 &DriveServiceInterface::GetResourceListInDirectory, | 291 &DriveServiceInterface::GetResourceListInDirectory, |
| 258 base::Unretained(drive_service_), | 292 base::Unretained(drive_service_), |
| 259 directory_resource_id, | 293 directory_resource_id, |
| 260 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 294 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 261 weak_ptr_factory_.GetWeakPtr(), | 295 weak_ptr_factory_.GetWeakPtr(), |
| 262 new_job->job_info.job_id, | 296 new_job->job_info.job_id, |
| 263 callback)); | 297 callback)); |
| 264 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 298 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 265 StartJob(new_job); | 299 StartJob(new_job); |
| 266 } | 300 } |
| 267 | 301 |
| 268 void JobScheduler::Search( | 302 void JobScheduler::Search( |
| 269 const std::string& search_query, | 303 const std::string& search_query, |
| 270 const google_apis::GetResourceListCallback& callback) { | 304 const google_apis::GetResourceListCallback& callback) { |
| 271 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 305 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 272 DCHECK(!callback.is_null()); | 306 DCHECK(!callback.is_null()); |
| 273 | 307 |
| 274 JobEntry* new_job = CreateNewJob(TYPE_SEARCH); | 308 JobEntry* new_job = CreateNewJob(TYPE_SEARCH); |
| 275 new_job->task = base::Bind( | 309 new_job->task = base::Bind( |
| 276 &DriveServiceInterface::Search, | 310 &DriveServiceInterface::Search, |
| 277 base::Unretained(drive_service_), | 311 base::Unretained(drive_service_), |
| 278 search_query, | 312 search_query, |
| 279 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 313 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 280 weak_ptr_factory_.GetWeakPtr(), | 314 weak_ptr_factory_.GetWeakPtr(), |
| 281 new_job->job_info.job_id, | 315 new_job->job_info.job_id, |
| 282 callback)); | 316 callback)); |
| 283 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 317 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 284 StartJob(new_job); | 318 StartJob(new_job); |
| 285 } | 319 } |
| 286 | 320 |
| 287 void JobScheduler::GetChangeList( | 321 void JobScheduler::GetChangeList( |
| 288 int64 start_changestamp, | 322 int64 start_changestamp, |
| 289 const google_apis::GetResourceListCallback& callback) { | 323 const google_apis::GetResourceListCallback& callback) { |
| 290 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 324 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 291 DCHECK(!callback.is_null()); | 325 DCHECK(!callback.is_null()); |
| 292 | 326 |
| 293 JobEntry* new_job = CreateNewJob(TYPE_GET_CHANGE_LIST); | 327 JobEntry* new_job = CreateNewJob(TYPE_GET_CHANGE_LIST); |
| 294 new_job->task = base::Bind( | 328 new_job->task = base::Bind( |
| 295 &DriveServiceInterface::GetChangeList, | 329 &DriveServiceInterface::GetChangeList, |
| 296 base::Unretained(drive_service_), | 330 base::Unretained(drive_service_), |
| 297 start_changestamp, | 331 start_changestamp, |
| 298 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 332 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 299 weak_ptr_factory_.GetWeakPtr(), | 333 weak_ptr_factory_.GetWeakPtr(), |
| 300 new_job->job_info.job_id, | 334 new_job->job_info.job_id, |
| 301 callback)); | 335 callback)); |
| 302 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 336 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 303 StartJob(new_job); | 337 StartJob(new_job); |
| 304 } | 338 } |
| 305 | 339 |
| 306 void JobScheduler::GetRemainingChangeList( | 340 void JobScheduler::GetRemainingChangeList( |
| 307 const GURL& next_link, | 341 const GURL& next_link, |
| 308 const google_apis::GetResourceListCallback& callback) { | 342 const google_apis::GetResourceListCallback& callback) { |
| 309 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 343 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 310 DCHECK(!callback.is_null()); | 344 DCHECK(!callback.is_null()); |
| 311 | 345 |
| 312 JobEntry* new_job = CreateNewJob(TYPE_GET_REMAINING_CHANGE_LIST); | 346 JobEntry* new_job = CreateNewJob(TYPE_GET_REMAINING_CHANGE_LIST); |
| 313 new_job->task = base::Bind( | 347 new_job->task = base::Bind( |
| 314 &DriveServiceInterface::GetRemainingChangeList, | 348 &DriveServiceInterface::GetRemainingChangeList, |
| 315 base::Unretained(drive_service_), | 349 base::Unretained(drive_service_), |
| 316 next_link, | 350 next_link, |
| 317 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 351 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 318 weak_ptr_factory_.GetWeakPtr(), | 352 weak_ptr_factory_.GetWeakPtr(), |
| 319 new_job->job_info.job_id, | 353 new_job->job_info.job_id, |
| 320 callback)); | 354 callback)); |
| 321 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 355 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 322 StartJob(new_job); | 356 StartJob(new_job); |
| 323 } | 357 } |
| 324 | 358 |
| 325 void JobScheduler::GetRemainingFileList( | 359 void JobScheduler::GetRemainingFileList( |
| 326 const GURL& next_link, | 360 const GURL& next_link, |
| 327 const google_apis::GetResourceListCallback& callback) { | 361 const google_apis::GetResourceListCallback& callback) { |
| 328 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 362 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 329 DCHECK(!callback.is_null()); | 363 DCHECK(!callback.is_null()); |
| 330 | 364 |
| 331 JobEntry* new_job = CreateNewJob(TYPE_GET_REMAINING_FILE_LIST); | 365 JobEntry* new_job = CreateNewJob(TYPE_GET_REMAINING_FILE_LIST); |
| 332 new_job->task = base::Bind( | 366 new_job->task = base::Bind( |
| 333 &DriveServiceInterface::GetRemainingFileList, | 367 &DriveServiceInterface::GetRemainingFileList, |
| 334 base::Unretained(drive_service_), | 368 base::Unretained(drive_service_), |
| 335 next_link, | 369 next_link, |
| 336 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 370 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 337 weak_ptr_factory_.GetWeakPtr(), | 371 weak_ptr_factory_.GetWeakPtr(), |
| 338 new_job->job_info.job_id, | 372 new_job->job_info.job_id, |
| 339 callback)); | 373 callback)); |
| 340 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 374 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 341 StartJob(new_job); | 375 StartJob(new_job); |
| 342 } | 376 } |
| 343 | 377 |
| 344 void JobScheduler::GetResourceEntry( | 378 void JobScheduler::GetResourceEntry( |
| 345 const std::string& resource_id, | 379 const std::string& resource_id, |
| 346 const ClientContext& context, | 380 const ClientContext& context, |
| 347 const google_apis::GetResourceEntryCallback& callback) { | 381 const google_apis::GetResourceEntryCallback& callback) { |
| 348 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 382 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 349 DCHECK(!callback.is_null()); | 383 DCHECK(!callback.is_null()); |
| 350 | 384 |
| 351 JobEntry* new_job = CreateNewJob(TYPE_GET_RESOURCE_ENTRY); | 385 JobEntry* new_job = CreateNewJob(TYPE_GET_RESOURCE_ENTRY); |
| 352 new_job->context = context; | 386 new_job->context = context; |
| 353 new_job->task = base::Bind( | 387 new_job->task = base::Bind( |
| 354 &DriveServiceInterface::GetResourceEntry, | 388 &DriveServiceInterface::GetResourceEntry, |
| 355 base::Unretained(drive_service_), | 389 base::Unretained(drive_service_), |
| 356 resource_id, | 390 resource_id, |
| 357 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 391 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
| 358 weak_ptr_factory_.GetWeakPtr(), | 392 weak_ptr_factory_.GetWeakPtr(), |
| 359 new_job->job_info.job_id, | 393 new_job->job_info.job_id, |
| 360 callback)); | 394 callback)); |
| 361 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 395 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 362 StartJob(new_job); | 396 StartJob(new_job); |
| 363 } | 397 } |
| 364 | 398 |
| 365 void JobScheduler::GetShareUrl( | 399 void JobScheduler::GetShareUrl( |
| 366 const std::string& resource_id, | 400 const std::string& resource_id, |
| 367 const GURL& embed_origin, | 401 const GURL& embed_origin, |
| 368 const ClientContext& context, | 402 const ClientContext& context, |
| 369 const google_apis::GetShareUrlCallback& callback) { | 403 const google_apis::GetShareUrlCallback& callback) { |
| 370 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 404 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 371 DCHECK(!callback.is_null()); | 405 DCHECK(!callback.is_null()); |
| 372 | 406 |
| 373 JobEntry* new_job = CreateNewJob(TYPE_GET_SHARE_URL); | 407 JobEntry* new_job = CreateNewJob(TYPE_GET_SHARE_URL); |
| 374 new_job->context = context; | 408 new_job->context = context; |
| 375 new_job->task = base::Bind( | 409 new_job->task = base::Bind( |
| 376 &DriveServiceInterface::GetShareUrl, | 410 &DriveServiceInterface::GetShareUrl, |
| 377 base::Unretained(drive_service_), | 411 base::Unretained(drive_service_), |
| 378 resource_id, | 412 resource_id, |
| 379 embed_origin, | 413 embed_origin, |
| 380 base::Bind(&JobScheduler::OnGetShareUrlJobDone, | 414 base::Bind(&JobScheduler::OnGetShareUrlJobDone, |
| 381 weak_ptr_factory_.GetWeakPtr(), | 415 weak_ptr_factory_.GetWeakPtr(), |
| 382 new_job->job_info.job_id, | 416 new_job->job_info.job_id, |
| 383 callback)); | 417 callback)); |
| 384 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 418 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 385 StartJob(new_job); | 419 StartJob(new_job); |
| 386 } | 420 } |
| 387 | 421 |
| 388 void JobScheduler::DeleteResource( | 422 void JobScheduler::DeleteResource( |
| 389 const std::string& resource_id, | 423 const std::string& resource_id, |
| 390 const ClientContext& context, | 424 const ClientContext& context, |
| 391 const google_apis::EntryActionCallback& callback) { | 425 const google_apis::EntryActionCallback& callback) { |
| 392 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 426 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 393 DCHECK(!callback.is_null()); | 427 DCHECK(!callback.is_null()); |
| 394 | 428 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 421 &DriveServiceInterface::CopyResource, | 455 &DriveServiceInterface::CopyResource, |
| 422 base::Unretained(drive_service_), | 456 base::Unretained(drive_service_), |
| 423 resource_id, | 457 resource_id, |
| 424 parent_resource_id, | 458 parent_resource_id, |
| 425 new_title, | 459 new_title, |
| 426 last_modified, | 460 last_modified, |
| 427 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 461 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
| 428 weak_ptr_factory_.GetWeakPtr(), | 462 weak_ptr_factory_.GetWeakPtr(), |
| 429 new_job->job_info.job_id, | 463 new_job->job_info.job_id, |
| 430 callback)); | 464 callback)); |
| 431 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 465 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 432 StartJob(new_job); | 466 StartJob(new_job); |
| 433 } | 467 } |
| 434 | 468 |
| 435 void JobScheduler::CopyHostedDocument( | 469 void JobScheduler::CopyHostedDocument( |
| 436 const std::string& resource_id, | 470 const std::string& resource_id, |
| 437 const std::string& new_title, | 471 const std::string& new_title, |
| 438 const google_apis::GetResourceEntryCallback& callback) { | 472 const google_apis::GetResourceEntryCallback& callback) { |
| 439 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 473 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 440 DCHECK(!callback.is_null()); | 474 DCHECK(!callback.is_null()); |
| 441 | 475 |
| 442 JobEntry* new_job = CreateNewJob(TYPE_COPY_HOSTED_DOCUMENT); | 476 JobEntry* new_job = CreateNewJob(TYPE_COPY_HOSTED_DOCUMENT); |
| 443 new_job->task = base::Bind( | 477 new_job->task = base::Bind( |
| 444 &DriveServiceInterface::CopyHostedDocument, | 478 &DriveServiceInterface::CopyHostedDocument, |
| 445 base::Unretained(drive_service_), | 479 base::Unretained(drive_service_), |
| 446 resource_id, | 480 resource_id, |
| 447 new_title, | 481 new_title, |
| 448 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 482 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
| 449 weak_ptr_factory_.GetWeakPtr(), | 483 weak_ptr_factory_.GetWeakPtr(), |
| 450 new_job->job_info.job_id, | 484 new_job->job_info.job_id, |
| 451 callback)); | 485 callback)); |
| 452 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 486 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 453 StartJob(new_job); | 487 StartJob(new_job); |
| 454 } | 488 } |
| 455 | 489 |
| 456 void JobScheduler::MoveResource( | 490 void JobScheduler::MoveResource( |
| 457 const std::string& resource_id, | 491 const std::string& resource_id, |
| 458 const std::string& parent_resource_id, | 492 const std::string& parent_resource_id, |
| 459 const std::string& new_title, | 493 const std::string& new_title, |
| 460 const base::Time& last_modified, | 494 const base::Time& last_modified, |
| 461 const google_apis::GetResourceEntryCallback& callback) { | 495 const google_apis::GetResourceEntryCallback& callback) { |
| 462 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 496 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 463 DCHECK(!callback.is_null()); | 497 DCHECK(!callback.is_null()); |
| 464 | 498 |
| 465 JobEntry* new_job = CreateNewJob(TYPE_MOVE_RESOURCE); | 499 JobEntry* new_job = CreateNewJob(TYPE_MOVE_RESOURCE); |
| 466 new_job->task = base::Bind( | 500 new_job->task = base::Bind( |
| 467 &DriveServiceInterface::MoveResource, | 501 &DriveServiceInterface::MoveResource, |
| 468 base::Unretained(drive_service_), | 502 base::Unretained(drive_service_), |
| 469 resource_id, | 503 resource_id, |
| 470 parent_resource_id, | 504 parent_resource_id, |
| 471 new_title, | 505 new_title, |
| 472 last_modified, | 506 last_modified, |
| 473 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 507 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
| 474 weak_ptr_factory_.GetWeakPtr(), | 508 weak_ptr_factory_.GetWeakPtr(), |
| 475 new_job->job_info.job_id, | 509 new_job->job_info.job_id, |
| 476 callback)); | 510 callback)); |
| 477 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 511 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 478 StartJob(new_job); | 512 StartJob(new_job); |
| 479 } | 513 } |
| 480 | 514 |
| 481 void JobScheduler::RenameResource( | 515 void JobScheduler::RenameResource( |
| 482 const std::string& resource_id, | 516 const std::string& resource_id, |
| 483 const std::string& new_title, | 517 const std::string& new_title, |
| 484 const google_apis::EntryActionCallback& callback) { | 518 const google_apis::EntryActionCallback& callback) { |
| 485 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 519 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 486 DCHECK(!callback.is_null()); | 520 DCHECK(!callback.is_null()); |
| 487 | 521 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 511 new_job->task = base::Bind( | 545 new_job->task = base::Bind( |
| 512 &DriveServiceInterface::TouchResource, | 546 &DriveServiceInterface::TouchResource, |
| 513 base::Unretained(drive_service_), | 547 base::Unretained(drive_service_), |
| 514 resource_id, | 548 resource_id, |
| 515 modified_date, | 549 modified_date, |
| 516 last_viewed_by_me_date, | 550 last_viewed_by_me_date, |
| 517 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 551 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
| 518 weak_ptr_factory_.GetWeakPtr(), | 552 weak_ptr_factory_.GetWeakPtr(), |
| 519 new_job->job_info.job_id, | 553 new_job->job_info.job_id, |
| 520 callback)); | 554 callback)); |
| 521 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 555 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 522 StartJob(new_job); | 556 StartJob(new_job); |
| 523 } | 557 } |
| 524 | 558 |
| 525 void JobScheduler::AddResourceToDirectory( | 559 void JobScheduler::AddResourceToDirectory( |
| 526 const std::string& parent_resource_id, | 560 const std::string& parent_resource_id, |
| 527 const std::string& resource_id, | 561 const std::string& resource_id, |
| 528 const google_apis::EntryActionCallback& callback) { | 562 const google_apis::EntryActionCallback& callback) { |
| 529 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 563 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 530 DCHECK(!callback.is_null()); | 564 DCHECK(!callback.is_null()); |
| 531 | 565 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 JobEntry* new_job = CreateNewJob(TYPE_ADD_NEW_DIRECTORY); | 608 JobEntry* new_job = CreateNewJob(TYPE_ADD_NEW_DIRECTORY); |
| 575 new_job->task = base::Bind( | 609 new_job->task = base::Bind( |
| 576 &DriveServiceInterface::AddNewDirectory, | 610 &DriveServiceInterface::AddNewDirectory, |
| 577 base::Unretained(drive_service_), | 611 base::Unretained(drive_service_), |
| 578 parent_resource_id, | 612 parent_resource_id, |
| 579 directory_title, | 613 directory_title, |
| 580 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 614 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
| 581 weak_ptr_factory_.GetWeakPtr(), | 615 weak_ptr_factory_.GetWeakPtr(), |
| 582 new_job->job_info.job_id, | 616 new_job->job_info.job_id, |
| 583 callback)); | 617 callback)); |
| 584 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 618 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 585 StartJob(new_job); | 619 StartJob(new_job); |
| 586 } | 620 } |
| 587 | 621 |
| 588 JobID JobScheduler::DownloadFile( | 622 JobID JobScheduler::DownloadFile( |
| 589 const base::FilePath& virtual_path, | 623 const base::FilePath& virtual_path, |
| 590 int64 expected_file_size, | 624 int64 expected_file_size, |
| 591 const base::FilePath& local_cache_path, | 625 const base::FilePath& local_cache_path, |
| 592 const std::string& resource_id, | 626 const std::string& resource_id, |
| 593 const ClientContext& context, | 627 const ClientContext& context, |
| 594 const google_apis::DownloadActionCallback& download_action_callback, | 628 const google_apis::DownloadActionCallback& download_action_callback, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 605 local_cache_path, | 639 local_cache_path, |
| 606 resource_id, | 640 resource_id, |
| 607 base::Bind(&JobScheduler::OnDownloadActionJobDone, | 641 base::Bind(&JobScheduler::OnDownloadActionJobDone, |
| 608 weak_ptr_factory_.GetWeakPtr(), | 642 weak_ptr_factory_.GetWeakPtr(), |
| 609 new_job->job_info.job_id, | 643 new_job->job_info.job_id, |
| 610 download_action_callback), | 644 download_action_callback), |
| 611 get_content_callback, | 645 get_content_callback, |
| 612 base::Bind(&JobScheduler::UpdateProgress, | 646 base::Bind(&JobScheduler::UpdateProgress, |
| 613 weak_ptr_factory_.GetWeakPtr(), | 647 weak_ptr_factory_.GetWeakPtr(), |
| 614 new_job->job_info.job_id)); | 648 new_job->job_info.job_id)); |
| 615 new_job->abort_callback = | 649 new_job->abort_callback = CreateErrorRunCallback(download_action_callback); |
| 616 google_apis::CreateErrorRunCallback(download_action_callback); | |
| 617 StartJob(new_job); | 650 StartJob(new_job); |
| 618 return new_job->job_info.job_id; | 651 return new_job->job_info.job_id; |
| 619 } | 652 } |
| 620 | 653 |
| 621 void JobScheduler::UploadNewFile( | 654 void JobScheduler::UploadNewFile( |
| 622 const std::string& parent_resource_id, | 655 const std::string& parent_resource_id, |
| 623 const base::FilePath& drive_file_path, | 656 const base::FilePath& drive_file_path, |
| 624 const base::FilePath& local_file_path, | 657 const base::FilePath& local_file_path, |
| 625 const std::string& title, | 658 const std::string& title, |
| 626 const std::string& content_type, | 659 const std::string& content_type, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 644 | 677 |
| 645 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, | 678 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, |
| 646 weak_ptr_factory_.GetWeakPtr(), | 679 weak_ptr_factory_.GetWeakPtr(), |
| 647 new_job->job_info.job_id, | 680 new_job->job_info.job_id, |
| 648 resume_params, | 681 resume_params, |
| 649 callback); | 682 callback); |
| 650 params.progress_callback = base::Bind(&JobScheduler::UpdateProgress, | 683 params.progress_callback = base::Bind(&JobScheduler::UpdateProgress, |
| 651 weak_ptr_factory_.GetWeakPtr(), | 684 weak_ptr_factory_.GetWeakPtr(), |
| 652 new_job->job_info.job_id); | 685 new_job->job_info.job_id); |
| 653 new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); | 686 new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); |
| 654 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 687 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 655 StartJob(new_job); | 688 StartJob(new_job); |
| 656 } | 689 } |
| 657 | 690 |
| 658 void JobScheduler::UploadExistingFile( | 691 void JobScheduler::UploadExistingFile( |
| 659 const std::string& resource_id, | 692 const std::string& resource_id, |
| 660 const base::FilePath& drive_file_path, | 693 const base::FilePath& drive_file_path, |
| 661 const base::FilePath& local_file_path, | 694 const base::FilePath& local_file_path, |
| 662 const std::string& content_type, | 695 const std::string& content_type, |
| 663 const std::string& etag, | 696 const std::string& etag, |
| 664 const ClientContext& context, | 697 const ClientContext& context, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 681 | 714 |
| 682 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, | 715 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, |
| 683 weak_ptr_factory_.GetWeakPtr(), | 716 weak_ptr_factory_.GetWeakPtr(), |
| 684 new_job->job_info.job_id, | 717 new_job->job_info.job_id, |
| 685 resume_params, | 718 resume_params, |
| 686 callback); | 719 callback); |
| 687 params.progress_callback = base::Bind(&JobScheduler::UpdateProgress, | 720 params.progress_callback = base::Bind(&JobScheduler::UpdateProgress, |
| 688 weak_ptr_factory_.GetWeakPtr(), | 721 weak_ptr_factory_.GetWeakPtr(), |
| 689 new_job->job_info.job_id); | 722 new_job->job_info.job_id); |
| 690 new_job->task = base::Bind(&RunUploadExistingFile, uploader_.get(), params); | 723 new_job->task = base::Bind(&RunUploadExistingFile, uploader_.get(), params); |
| 691 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 724 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 692 StartJob(new_job); | 725 StartJob(new_job); |
| 693 } | 726 } |
| 694 | 727 |
| 695 void JobScheduler::CreateFile( | 728 void JobScheduler::CreateFile( |
| 696 const std::string& parent_resource_id, | 729 const std::string& parent_resource_id, |
| 697 const base::FilePath& drive_file_path, | 730 const base::FilePath& drive_file_path, |
| 698 const std::string& title, | 731 const std::string& title, |
| 699 const std::string& content_type, | 732 const std::string& content_type, |
| 700 const ClientContext& context, | 733 const ClientContext& context, |
| 701 const google_apis::GetResourceEntryCallback& callback) { | 734 const google_apis::GetResourceEntryCallback& callback) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 718 resume_params.content_type = params.content_type; | 751 resume_params.content_type = params.content_type; |
| 719 | 752 |
| 720 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, | 753 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, |
| 721 weak_ptr_factory_.GetWeakPtr(), | 754 weak_ptr_factory_.GetWeakPtr(), |
| 722 new_job->job_info.job_id, | 755 new_job->job_info.job_id, |
| 723 resume_params, | 756 resume_params, |
| 724 callback); | 757 callback); |
| 725 params.progress_callback = google_apis::ProgressCallback(); | 758 params.progress_callback = google_apis::ProgressCallback(); |
| 726 | 759 |
| 727 new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); | 760 new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); |
| 728 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 761 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 729 StartJob(new_job); | 762 StartJob(new_job); |
| 730 } | 763 } |
| 731 | 764 |
| 732 void JobScheduler::GetResourceListInDirectoryByWapi( | 765 void JobScheduler::GetResourceListInDirectoryByWapi( |
| 733 const std::string& directory_resource_id, | 766 const std::string& directory_resource_id, |
| 734 const google_apis::GetResourceListCallback& callback) { | 767 const google_apis::GetResourceListCallback& callback) { |
| 735 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 768 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 736 DCHECK(!callback.is_null()); | 769 DCHECK(!callback.is_null()); |
| 737 | 770 |
| 738 JobEntry* new_job = CreateNewJob( | 771 JobEntry* new_job = CreateNewJob( |
| 739 TYPE_GET_RESOURCE_LIST_IN_DIRECTORY_BY_WAPI); | 772 TYPE_GET_RESOURCE_LIST_IN_DIRECTORY_BY_WAPI); |
| 740 new_job->task = base::Bind( | 773 new_job->task = base::Bind( |
| 741 &DriveServiceInterface::GetResourceListInDirectoryByWapi, | 774 &DriveServiceInterface::GetResourceListInDirectoryByWapi, |
| 742 base::Unretained(drive_service_), | 775 base::Unretained(drive_service_), |
| 743 directory_resource_id, | 776 directory_resource_id, |
| 744 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 777 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 745 weak_ptr_factory_.GetWeakPtr(), | 778 weak_ptr_factory_.GetWeakPtr(), |
| 746 new_job->job_info.job_id, | 779 new_job->job_info.job_id, |
| 747 callback)); | 780 callback)); |
| 748 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 781 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 749 StartJob(new_job); | 782 StartJob(new_job); |
| 750 } | 783 } |
| 751 | 784 |
| 752 void JobScheduler::GetRemainingResourceList( | 785 void JobScheduler::GetRemainingResourceList( |
| 753 const GURL& next_link, | 786 const GURL& next_link, |
| 754 const google_apis::GetResourceListCallback& callback) { | 787 const google_apis::GetResourceListCallback& callback) { |
| 755 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 788 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 756 DCHECK(!callback.is_null()); | 789 DCHECK(!callback.is_null()); |
| 757 | 790 |
| 758 JobEntry* new_job = CreateNewJob(TYPE_GET_REMAINING_RESOURCE_LIST); | 791 JobEntry* new_job = CreateNewJob(TYPE_GET_REMAINING_RESOURCE_LIST); |
| 759 new_job->task = base::Bind( | 792 new_job->task = base::Bind( |
| 760 &DriveServiceInterface::GetRemainingResourceList, | 793 &DriveServiceInterface::GetRemainingResourceList, |
| 761 base::Unretained(drive_service_), | 794 base::Unretained(drive_service_), |
| 762 next_link, | 795 next_link, |
| 763 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 796 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 764 weak_ptr_factory_.GetWeakPtr(), | 797 weak_ptr_factory_.GetWeakPtr(), |
| 765 new_job->job_info.job_id, | 798 new_job->job_info.job_id, |
| 766 callback)); | 799 callback)); |
| 767 new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); | 800 new_job->abort_callback = CreateErrorRunCallback(callback); |
| 768 StartJob(new_job); | 801 StartJob(new_job); |
| 769 } | 802 } |
| 770 | 803 |
| 771 JobScheduler::JobEntry* JobScheduler::CreateNewJob(JobType type) { | 804 JobScheduler::JobEntry* JobScheduler::CreateNewJob(JobType type) { |
| 772 JobEntry* job = new JobEntry(type); | 805 JobEntry* job = new JobEntry(type); |
| 773 job->job_info.job_id = job_map_.Add(job); // Takes the ownership of |job|. | 806 job->job_info.job_id = job_map_.Add(job); // Takes the ownership of |job|. |
| 774 return job; | 807 return job; |
| 775 } | 808 } |
| 776 | 809 |
| 777 void JobScheduler::StartJob(JobEntry* job) { | 810 void JobScheduler::StartJob(JobEntry* job) { |
| (...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1199 case FILE_QUEUE: | 1232 case FILE_QUEUE: |
| 1200 return "FILE_QUEUE"; | 1233 return "FILE_QUEUE"; |
| 1201 case NUM_QUEUES: | 1234 case NUM_QUEUES: |
| 1202 break; // This value is just a sentinel. Should never be used. | 1235 break; // This value is just a sentinel. Should never be used. |
| 1203 } | 1236 } |
| 1204 NOTREACHED(); | 1237 NOTREACHED(); |
| 1205 return ""; | 1238 return ""; |
| 1206 } | 1239 } |
| 1207 | 1240 |
| 1208 } // namespace drive | 1241 } // namespace drive |
| OLD | NEW |