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 |