| 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 <math.h> | 7 #include <math.h> |
| 8 | 8 |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 google_apis::CancelCallback RunResumeUploadFile( | 84 google_apis::CancelCallback RunResumeUploadFile( |
| 85 google_apis::DriveUploaderInterface* uploader, | 85 google_apis::DriveUploaderInterface* uploader, |
| 86 const ResumeUploadFileParams& params) { | 86 const ResumeUploadFileParams& params) { |
| 87 return uploader->ResumeUploadFile(params.upload_location, | 87 return uploader->ResumeUploadFile(params.upload_location, |
| 88 params.local_file_path, | 88 params.local_file_path, |
| 89 params.content_type, | 89 params.content_type, |
| 90 params.callback, | 90 params.callback, |
| 91 params.progress_callback); | 91 params.progress_callback); |
| 92 } | 92 } |
| 93 | 93 |
| 94 // Helper for CreateErrorRunCallback. |
| 95 template<typename P1> |
| 96 struct CreateErrorRunCallbackHelper { |
| 97 static void Run( |
| 98 const base::Callback<void(google_apis::GDataErrorCode, P1)>& callback, |
| 99 google_apis::GDataErrorCode error) { |
| 100 callback.Run(error, P1()); |
| 101 } |
| 102 }; |
| 103 |
| 104 template<typename P1> |
| 105 struct CreateErrorRunCallbackHelper<const P1&> { |
| 106 static void Run( |
| 107 const base::Callback<void(google_apis::GDataErrorCode, |
| 108 const P1&)>& callback, |
| 109 google_apis::GDataErrorCode error) { |
| 110 callback.Run(error, P1()); |
| 111 } |
| 112 }; |
| 113 |
| 114 // Returns a callback with the tail parameter bound to its default value. |
| 115 // In other words, returned_callback.Run(error) runs callback.Run(error, T()). |
| 116 template<typename P1> |
| 117 base::Callback<void(google_apis::GDataErrorCode)> CreateErrorRunCallback( |
| 118 const base::Callback<void(google_apis::GDataErrorCode, P1)>& callback) { |
| 119 return base::Bind(&CreateErrorRunCallbackHelper<P1>::Run, callback); |
| 120 } |
| 121 |
| 94 } // namespace | 122 } // namespace |
| 95 | 123 |
| 96 const int JobScheduler::kMaxJobCount[] = { | 124 const int JobScheduler::kMaxJobCount[] = { |
| 97 5, // METADATA_QUEUE | 125 5, // METADATA_QUEUE |
| 98 1, // FILE_QUEUE | 126 1, // FILE_QUEUE |
| 99 }; | 127 }; |
| 100 | 128 |
| 101 JobScheduler::JobEntry::JobEntry(JobType type) | 129 JobScheduler::JobEntry::JobEntry(JobType type) |
| 102 : job_info(type), | 130 : job_info(type), |
| 103 context(ClientContext(USER_INITIATED)), | 131 context(ClientContext(USER_INITIATED)), |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 void JobScheduler::RemoveObserver(JobListObserver* observer) { | 186 void JobScheduler::RemoveObserver(JobListObserver* observer) { |
| 159 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 187 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 160 observer_list_.RemoveObserver(observer); | 188 observer_list_.RemoveObserver(observer); |
| 161 } | 189 } |
| 162 | 190 |
| 163 void JobScheduler::CancelJob(JobID job_id) { | 191 void JobScheduler::CancelJob(JobID job_id) { |
| 164 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 192 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 165 | 193 |
| 166 JobEntry* job = job_map_.Lookup(job_id); | 194 JobEntry* job = job_map_.Lookup(job_id); |
| 167 if (job) { | 195 if (job) { |
| 168 // TODO(kinaba): crbug.com/251116 Support cancelling jobs not yet started. | 196 if (!job->cancel_callback.is_null()) { |
| 169 if (!job->cancel_callback.is_null()) | 197 // Non null |cancel_callback| means the corresponding HTTP request is |
| 198 // in-flight. Cancel the request by calling the callback, and wait for |
| 199 // its termination in the normal callback handling. |
| 170 job->cancel_callback.Run(); | 200 job->cancel_callback.Run(); |
| 201 } else { |
| 202 base::Callback<void(google_apis::GDataErrorCode)> callback = job->abort; |
| 203 queue_[GetJobQueueType(job->job_info.job_type)]->Remove(job_id); |
| 204 job_map_.Remove(job_id); |
| 205 callback.Run(google_apis::GDATA_CANCELLED); |
| 206 } |
| 171 } | 207 } |
| 172 } | 208 } |
| 173 | 209 |
| 174 void JobScheduler::CancelAllJobs() { | 210 void JobScheduler::CancelAllJobs() { |
| 175 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 211 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 176 | 212 |
| 177 // CancelJob may remove the entry from |job_map_|. That's OK. IDMap supports | 213 // CancelJob may remove the entry from |job_map_|. That's OK. IDMap supports |
| 178 // removable during iteration. | 214 // removable during iteration. |
| 179 for (JobIDMap::iterator iter(&job_map_); !iter.IsAtEnd(); iter.Advance()) | 215 for (JobIDMap::iterator iter(&job_map_); !iter.IsAtEnd(); iter.Advance()) |
| 180 CancelJob(iter.GetCurrentKey()); | 216 CancelJob(iter.GetCurrentKey()); |
| 181 } | 217 } |
| 182 | 218 |
| 183 void JobScheduler::GetAboutResource( | 219 void JobScheduler::GetAboutResource( |
| 184 const google_apis::GetAboutResourceCallback& callback) { | 220 const google_apis::GetAboutResourceCallback& callback) { |
| 185 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 221 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 186 DCHECK(!callback.is_null()); | 222 DCHECK(!callback.is_null()); |
| 187 | 223 |
| 188 JobEntry* new_job = CreateNewJob(TYPE_GET_ABOUT_RESOURCE); | 224 JobEntry* new_job = CreateNewJob(TYPE_GET_ABOUT_RESOURCE); |
| 189 new_job->task = base::Bind( | 225 new_job->task = base::Bind( |
| 190 &google_apis::DriveServiceInterface::GetAboutResource, | 226 &google_apis::DriveServiceInterface::GetAboutResource, |
| 191 base::Unretained(drive_service_), | 227 base::Unretained(drive_service_), |
| 192 base::Bind(&JobScheduler::OnGetAboutResourceJobDone, | 228 base::Bind(&JobScheduler::OnGetAboutResourceJobDone, |
| 193 weak_ptr_factory_.GetWeakPtr(), | 229 weak_ptr_factory_.GetWeakPtr(), |
| 194 new_job->job_info.job_id, | 230 new_job->job_info.job_id, |
| 195 callback)); | 231 callback)); |
| 232 new_job->abort = CreateErrorRunCallback(callback); |
| 196 StartJob(new_job); | 233 StartJob(new_job); |
| 197 } | 234 } |
| 198 | 235 |
| 199 void JobScheduler::GetAppList( | 236 void JobScheduler::GetAppList( |
| 200 const google_apis::GetAppListCallback& callback) { | 237 const google_apis::GetAppListCallback& callback) { |
| 201 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 238 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 202 DCHECK(!callback.is_null()); | 239 DCHECK(!callback.is_null()); |
| 203 | 240 |
| 204 JobEntry* new_job = CreateNewJob(TYPE_GET_APP_LIST); | 241 JobEntry* new_job = CreateNewJob(TYPE_GET_APP_LIST); |
| 205 new_job->task = base::Bind( | 242 new_job->task = base::Bind( |
| 206 &google_apis::DriveServiceInterface::GetAppList, | 243 &google_apis::DriveServiceInterface::GetAppList, |
| 207 base::Unretained(drive_service_), | 244 base::Unretained(drive_service_), |
| 208 base::Bind(&JobScheduler::OnGetAppListJobDone, | 245 base::Bind(&JobScheduler::OnGetAppListJobDone, |
| 209 weak_ptr_factory_.GetWeakPtr(), | 246 weak_ptr_factory_.GetWeakPtr(), |
| 210 new_job->job_info.job_id, | 247 new_job->job_info.job_id, |
| 211 callback)); | 248 callback)); |
| 249 new_job->abort = CreateErrorRunCallback(callback); |
| 212 StartJob(new_job); | 250 StartJob(new_job); |
| 213 } | 251 } |
| 214 | 252 |
| 215 void JobScheduler::GetAllResourceList( | 253 void JobScheduler::GetAllResourceList( |
| 216 const google_apis::GetResourceListCallback& callback) { | 254 const google_apis::GetResourceListCallback& callback) { |
| 217 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 255 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 218 DCHECK(!callback.is_null()); | 256 DCHECK(!callback.is_null()); |
| 219 | 257 |
| 220 JobEntry* new_job = CreateNewJob(TYPE_GET_ALL_RESOURCE_LIST); | 258 JobEntry* new_job = CreateNewJob(TYPE_GET_ALL_RESOURCE_LIST); |
| 221 new_job->task = base::Bind( | 259 new_job->task = base::Bind( |
| 222 &google_apis::DriveServiceInterface::GetAllResourceList, | 260 &google_apis::DriveServiceInterface::GetAllResourceList, |
| 223 base::Unretained(drive_service_), | 261 base::Unretained(drive_service_), |
| 224 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 262 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 225 weak_ptr_factory_.GetWeakPtr(), | 263 weak_ptr_factory_.GetWeakPtr(), |
| 226 new_job->job_info.job_id, | 264 new_job->job_info.job_id, |
| 227 callback)); | 265 callback)); |
| 266 new_job->abort = CreateErrorRunCallback(callback); |
| 228 StartJob(new_job); | 267 StartJob(new_job); |
| 229 } | 268 } |
| 230 | 269 |
| 231 void JobScheduler::GetResourceListInDirectory( | 270 void JobScheduler::GetResourceListInDirectory( |
| 232 const std::string& directory_resource_id, | 271 const std::string& directory_resource_id, |
| 233 const google_apis::GetResourceListCallback& callback) { | 272 const google_apis::GetResourceListCallback& callback) { |
| 234 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 273 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 235 DCHECK(!callback.is_null()); | 274 DCHECK(!callback.is_null()); |
| 236 | 275 |
| 237 JobEntry* new_job = CreateNewJob( | 276 JobEntry* new_job = CreateNewJob( |
| 238 TYPE_GET_RESOURCE_LIST_IN_DIRECTORY); | 277 TYPE_GET_RESOURCE_LIST_IN_DIRECTORY); |
| 239 new_job->task = base::Bind( | 278 new_job->task = base::Bind( |
| 240 &google_apis::DriveServiceInterface::GetResourceListInDirectory, | 279 &google_apis::DriveServiceInterface::GetResourceListInDirectory, |
| 241 base::Unretained(drive_service_), | 280 base::Unretained(drive_service_), |
| 242 directory_resource_id, | 281 directory_resource_id, |
| 243 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 282 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 244 weak_ptr_factory_.GetWeakPtr(), | 283 weak_ptr_factory_.GetWeakPtr(), |
| 245 new_job->job_info.job_id, | 284 new_job->job_info.job_id, |
| 246 callback)); | 285 callback)); |
| 286 new_job->abort = CreateErrorRunCallback(callback); |
| 247 StartJob(new_job); | 287 StartJob(new_job); |
| 248 } | 288 } |
| 249 | 289 |
| 250 void JobScheduler::Search( | 290 void JobScheduler::Search( |
| 251 const std::string& search_query, | 291 const std::string& search_query, |
| 252 const google_apis::GetResourceListCallback& callback) { | 292 const google_apis::GetResourceListCallback& callback) { |
| 253 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 293 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 254 DCHECK(!callback.is_null()); | 294 DCHECK(!callback.is_null()); |
| 255 | 295 |
| 256 JobEntry* new_job = CreateNewJob(TYPE_SEARCH); | 296 JobEntry* new_job = CreateNewJob(TYPE_SEARCH); |
| 257 new_job->task = base::Bind( | 297 new_job->task = base::Bind( |
| 258 &google_apis::DriveServiceInterface::Search, | 298 &google_apis::DriveServiceInterface::Search, |
| 259 base::Unretained(drive_service_), | 299 base::Unretained(drive_service_), |
| 260 search_query, | 300 search_query, |
| 261 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 301 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 262 weak_ptr_factory_.GetWeakPtr(), | 302 weak_ptr_factory_.GetWeakPtr(), |
| 263 new_job->job_info.job_id, | 303 new_job->job_info.job_id, |
| 264 callback)); | 304 callback)); |
| 305 new_job->abort = CreateErrorRunCallback(callback); |
| 265 StartJob(new_job); | 306 StartJob(new_job); |
| 266 } | 307 } |
| 267 | 308 |
| 268 void JobScheduler::GetChangeList( | 309 void JobScheduler::GetChangeList( |
| 269 int64 start_changestamp, | 310 int64 start_changestamp, |
| 270 const google_apis::GetResourceListCallback& callback) { | 311 const google_apis::GetResourceListCallback& callback) { |
| 271 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 312 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 272 DCHECK(!callback.is_null()); | 313 DCHECK(!callback.is_null()); |
| 273 | 314 |
| 274 JobEntry* new_job = CreateNewJob(TYPE_GET_CHANGE_LIST); | 315 JobEntry* new_job = CreateNewJob(TYPE_GET_CHANGE_LIST); |
| 275 new_job->task = base::Bind( | 316 new_job->task = base::Bind( |
| 276 &google_apis::DriveServiceInterface::GetChangeList, | 317 &google_apis::DriveServiceInterface::GetChangeList, |
| 277 base::Unretained(drive_service_), | 318 base::Unretained(drive_service_), |
| 278 start_changestamp, | 319 start_changestamp, |
| 279 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 320 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 280 weak_ptr_factory_.GetWeakPtr(), | 321 weak_ptr_factory_.GetWeakPtr(), |
| 281 new_job->job_info.job_id, | 322 new_job->job_info.job_id, |
| 282 callback)); | 323 callback)); |
| 324 new_job->abort = CreateErrorRunCallback(callback); |
| 283 StartJob(new_job); | 325 StartJob(new_job); |
| 284 } | 326 } |
| 285 | 327 |
| 286 void JobScheduler::ContinueGetResourceList( | 328 void JobScheduler::ContinueGetResourceList( |
| 287 const GURL& next_url, | 329 const GURL& next_url, |
| 288 const google_apis::GetResourceListCallback& callback) { | 330 const google_apis::GetResourceListCallback& callback) { |
| 289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 331 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 290 DCHECK(!callback.is_null()); | 332 DCHECK(!callback.is_null()); |
| 291 | 333 |
| 292 JobEntry* new_job = CreateNewJob(TYPE_CONTINUE_GET_RESOURCE_LIST); | 334 JobEntry* new_job = CreateNewJob(TYPE_CONTINUE_GET_RESOURCE_LIST); |
| 293 new_job->task = base::Bind( | 335 new_job->task = base::Bind( |
| 294 &google_apis::DriveServiceInterface::ContinueGetResourceList, | 336 &google_apis::DriveServiceInterface::ContinueGetResourceList, |
| 295 base::Unretained(drive_service_), | 337 base::Unretained(drive_service_), |
| 296 next_url, | 338 next_url, |
| 297 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 339 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
| 298 weak_ptr_factory_.GetWeakPtr(), | 340 weak_ptr_factory_.GetWeakPtr(), |
| 299 new_job->job_info.job_id, | 341 new_job->job_info.job_id, |
| 300 callback)); | 342 callback)); |
| 343 new_job->abort = CreateErrorRunCallback(callback); |
| 301 StartJob(new_job); | 344 StartJob(new_job); |
| 302 } | 345 } |
| 303 | 346 |
| 304 void JobScheduler::GetResourceEntry( | 347 void JobScheduler::GetResourceEntry( |
| 305 const std::string& resource_id, | 348 const std::string& resource_id, |
| 306 const ClientContext& context, | 349 const ClientContext& context, |
| 307 const google_apis::GetResourceEntryCallback& callback) { | 350 const google_apis::GetResourceEntryCallback& callback) { |
| 308 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 351 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 309 DCHECK(!callback.is_null()); | 352 DCHECK(!callback.is_null()); |
| 310 | 353 |
| 311 JobEntry* new_job = CreateNewJob(TYPE_GET_RESOURCE_ENTRY); | 354 JobEntry* new_job = CreateNewJob(TYPE_GET_RESOURCE_ENTRY); |
| 312 new_job->context = context; | 355 new_job->context = context; |
| 313 new_job->task = base::Bind( | 356 new_job->task = base::Bind( |
| 314 &google_apis::DriveServiceInterface::GetResourceEntry, | 357 &google_apis::DriveServiceInterface::GetResourceEntry, |
| 315 base::Unretained(drive_service_), | 358 base::Unretained(drive_service_), |
| 316 resource_id, | 359 resource_id, |
| 317 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 360 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
| 318 weak_ptr_factory_.GetWeakPtr(), | 361 weak_ptr_factory_.GetWeakPtr(), |
| 319 new_job->job_info.job_id, | 362 new_job->job_info.job_id, |
| 320 callback)); | 363 callback)); |
| 364 new_job->abort = CreateErrorRunCallback(callback); |
| 321 StartJob(new_job); | 365 StartJob(new_job); |
| 322 } | 366 } |
| 323 | 367 |
| 324 void JobScheduler::DeleteResource( | 368 void JobScheduler::DeleteResource( |
| 325 const std::string& resource_id, | 369 const std::string& resource_id, |
| 326 const google_apis::EntryActionCallback& callback) { | 370 const google_apis::EntryActionCallback& callback) { |
| 327 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 371 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 328 DCHECK(!callback.is_null()); | 372 DCHECK(!callback.is_null()); |
| 329 | 373 |
| 330 JobEntry* new_job = CreateNewJob(TYPE_DELETE_RESOURCE); | 374 JobEntry* new_job = CreateNewJob(TYPE_DELETE_RESOURCE); |
| 331 new_job->task = base::Bind( | 375 new_job->task = base::Bind( |
| 332 &google_apis::DriveServiceInterface::DeleteResource, | 376 &google_apis::DriveServiceInterface::DeleteResource, |
| 333 base::Unretained(drive_service_), | 377 base::Unretained(drive_service_), |
| 334 resource_id, | 378 resource_id, |
| 335 "", // etag | 379 "", // etag |
| 336 base::Bind(&JobScheduler::OnEntryActionJobDone, | 380 base::Bind(&JobScheduler::OnEntryActionJobDone, |
| 337 weak_ptr_factory_.GetWeakPtr(), | 381 weak_ptr_factory_.GetWeakPtr(), |
| 338 new_job->job_info.job_id, | 382 new_job->job_info.job_id, |
| 339 callback)); | 383 callback)); |
| 384 new_job->abort = callback; |
| 340 StartJob(new_job); | 385 StartJob(new_job); |
| 341 } | 386 } |
| 342 | 387 |
| 343 void JobScheduler::CopyResource( | 388 void JobScheduler::CopyResource( |
| 344 const std::string& resource_id, | 389 const std::string& resource_id, |
| 345 const std::string& parent_resource_id, | 390 const std::string& parent_resource_id, |
| 346 const std::string& new_name, | 391 const std::string& new_name, |
| 347 const google_apis::GetResourceEntryCallback& callback) { | 392 const google_apis::GetResourceEntryCallback& callback) { |
| 348 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 393 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 349 DCHECK(!callback.is_null()); | 394 DCHECK(!callback.is_null()); |
| 350 | 395 |
| 351 JobEntry* new_job = CreateNewJob(TYPE_COPY_RESOURCE); | 396 JobEntry* new_job = CreateNewJob(TYPE_COPY_RESOURCE); |
| 352 new_job->task = base::Bind( | 397 new_job->task = base::Bind( |
| 353 &google_apis::DriveServiceInterface::CopyResource, | 398 &google_apis::DriveServiceInterface::CopyResource, |
| 354 base::Unretained(drive_service_), | 399 base::Unretained(drive_service_), |
| 355 resource_id, | 400 resource_id, |
| 356 parent_resource_id, | 401 parent_resource_id, |
| 357 new_name, | 402 new_name, |
| 358 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 403 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
| 359 weak_ptr_factory_.GetWeakPtr(), | 404 weak_ptr_factory_.GetWeakPtr(), |
| 360 new_job->job_info.job_id, | 405 new_job->job_info.job_id, |
| 361 callback)); | 406 callback)); |
| 407 new_job->abort = CreateErrorRunCallback(callback); |
| 362 StartJob(new_job); | 408 StartJob(new_job); |
| 363 } | 409 } |
| 364 | 410 |
| 365 void JobScheduler::CopyHostedDocument( | 411 void JobScheduler::CopyHostedDocument( |
| 366 const std::string& resource_id, | 412 const std::string& resource_id, |
| 367 const std::string& new_name, | 413 const std::string& new_name, |
| 368 const google_apis::GetResourceEntryCallback& callback) { | 414 const google_apis::GetResourceEntryCallback& callback) { |
| 369 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 415 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 370 DCHECK(!callback.is_null()); | 416 DCHECK(!callback.is_null()); |
| 371 | 417 |
| 372 JobEntry* new_job = CreateNewJob(TYPE_COPY_HOSTED_DOCUMENT); | 418 JobEntry* new_job = CreateNewJob(TYPE_COPY_HOSTED_DOCUMENT); |
| 373 new_job->task = base::Bind( | 419 new_job->task = base::Bind( |
| 374 &google_apis::DriveServiceInterface::CopyHostedDocument, | 420 &google_apis::DriveServiceInterface::CopyHostedDocument, |
| 375 base::Unretained(drive_service_), | 421 base::Unretained(drive_service_), |
| 376 resource_id, | 422 resource_id, |
| 377 new_name, | 423 new_name, |
| 378 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 424 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
| 379 weak_ptr_factory_.GetWeakPtr(), | 425 weak_ptr_factory_.GetWeakPtr(), |
| 380 new_job->job_info.job_id, | 426 new_job->job_info.job_id, |
| 381 callback)); | 427 callback)); |
| 428 new_job->abort = CreateErrorRunCallback(callback); |
| 382 StartJob(new_job); | 429 StartJob(new_job); |
| 383 } | 430 } |
| 384 | 431 |
| 385 void JobScheduler::RenameResource( | 432 void JobScheduler::RenameResource( |
| 386 const std::string& resource_id, | 433 const std::string& resource_id, |
| 387 const std::string& new_name, | 434 const std::string& new_name, |
| 388 const google_apis::EntryActionCallback& callback) { | 435 const google_apis::EntryActionCallback& callback) { |
| 389 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 436 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 390 DCHECK(!callback.is_null()); | 437 DCHECK(!callback.is_null()); |
| 391 | 438 |
| 392 JobEntry* new_job = CreateNewJob(TYPE_RENAME_RESOURCE); | 439 JobEntry* new_job = CreateNewJob(TYPE_RENAME_RESOURCE); |
| 393 new_job->task = base::Bind( | 440 new_job->task = base::Bind( |
| 394 &google_apis::DriveServiceInterface::RenameResource, | 441 &google_apis::DriveServiceInterface::RenameResource, |
| 395 base::Unretained(drive_service_), | 442 base::Unretained(drive_service_), |
| 396 resource_id, | 443 resource_id, |
| 397 new_name, | 444 new_name, |
| 398 base::Bind(&JobScheduler::OnEntryActionJobDone, | 445 base::Bind(&JobScheduler::OnEntryActionJobDone, |
| 399 weak_ptr_factory_.GetWeakPtr(), | 446 weak_ptr_factory_.GetWeakPtr(), |
| 400 new_job->job_info.job_id, | 447 new_job->job_info.job_id, |
| 401 callback)); | 448 callback)); |
| 449 new_job->abort = callback; |
| 402 StartJob(new_job); | 450 StartJob(new_job); |
| 403 } | 451 } |
| 404 | 452 |
| 405 void JobScheduler::TouchResource( | 453 void JobScheduler::TouchResource( |
| 406 const std::string& resource_id, | 454 const std::string& resource_id, |
| 407 const base::Time& modified_date, | 455 const base::Time& modified_date, |
| 408 const base::Time& last_viewed_by_me_date, | 456 const base::Time& last_viewed_by_me_date, |
| 409 const google_apis::GetResourceEntryCallback& callback) { | 457 const google_apis::GetResourceEntryCallback& callback) { |
| 410 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 458 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 411 DCHECK(!callback.is_null()); | 459 DCHECK(!callback.is_null()); |
| 412 | 460 |
| 413 JobEntry* new_job = CreateNewJob(TYPE_TOUCH_RESOURCE); | 461 JobEntry* new_job = CreateNewJob(TYPE_TOUCH_RESOURCE); |
| 414 new_job->task = base::Bind( | 462 new_job->task = base::Bind( |
| 415 &google_apis::DriveServiceInterface::TouchResource, | 463 &google_apis::DriveServiceInterface::TouchResource, |
| 416 base::Unretained(drive_service_), | 464 base::Unretained(drive_service_), |
| 417 resource_id, | 465 resource_id, |
| 418 modified_date, | 466 modified_date, |
| 419 last_viewed_by_me_date, | 467 last_viewed_by_me_date, |
| 420 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 468 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
| 421 weak_ptr_factory_.GetWeakPtr(), | 469 weak_ptr_factory_.GetWeakPtr(), |
| 422 new_job->job_info.job_id, | 470 new_job->job_info.job_id, |
| 423 callback)); | 471 callback)); |
| 472 new_job->abort = CreateErrorRunCallback(callback); |
| 424 StartJob(new_job); | 473 StartJob(new_job); |
| 425 } | 474 } |
| 426 | 475 |
| 427 void JobScheduler::AddResourceToDirectory( | 476 void JobScheduler::AddResourceToDirectory( |
| 428 const std::string& parent_resource_id, | 477 const std::string& parent_resource_id, |
| 429 const std::string& resource_id, | 478 const std::string& resource_id, |
| 430 const google_apis::EntryActionCallback& callback) { | 479 const google_apis::EntryActionCallback& callback) { |
| 431 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 480 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 432 DCHECK(!callback.is_null()); | 481 DCHECK(!callback.is_null()); |
| 433 | 482 |
| 434 JobEntry* new_job = CreateNewJob(TYPE_ADD_RESOURCE_TO_DIRECTORY); | 483 JobEntry* new_job = CreateNewJob(TYPE_ADD_RESOURCE_TO_DIRECTORY); |
| 435 new_job->task = base::Bind( | 484 new_job->task = base::Bind( |
| 436 &google_apis::DriveServiceInterface::AddResourceToDirectory, | 485 &google_apis::DriveServiceInterface::AddResourceToDirectory, |
| 437 base::Unretained(drive_service_), | 486 base::Unretained(drive_service_), |
| 438 parent_resource_id, | 487 parent_resource_id, |
| 439 resource_id, | 488 resource_id, |
| 440 base::Bind(&JobScheduler::OnEntryActionJobDone, | 489 base::Bind(&JobScheduler::OnEntryActionJobDone, |
| 441 weak_ptr_factory_.GetWeakPtr(), | 490 weak_ptr_factory_.GetWeakPtr(), |
| 442 new_job->job_info.job_id, | 491 new_job->job_info.job_id, |
| 443 callback)); | 492 callback)); |
| 493 new_job->abort = callback; |
| 444 StartJob(new_job); | 494 StartJob(new_job); |
| 445 } | 495 } |
| 446 | 496 |
| 447 void JobScheduler::RemoveResourceFromDirectory( | 497 void JobScheduler::RemoveResourceFromDirectory( |
| 448 const std::string& parent_resource_id, | 498 const std::string& parent_resource_id, |
| 449 const std::string& resource_id, | 499 const std::string& resource_id, |
| 450 const google_apis::EntryActionCallback& callback) { | 500 const google_apis::EntryActionCallback& callback) { |
| 451 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 501 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 452 | 502 |
| 453 JobEntry* new_job = CreateNewJob(TYPE_REMOVE_RESOURCE_FROM_DIRECTORY); | 503 JobEntry* new_job = CreateNewJob(TYPE_REMOVE_RESOURCE_FROM_DIRECTORY); |
| 454 new_job->task = base::Bind( | 504 new_job->task = base::Bind( |
| 455 &google_apis::DriveServiceInterface::RemoveResourceFromDirectory, | 505 &google_apis::DriveServiceInterface::RemoveResourceFromDirectory, |
| 456 base::Unretained(drive_service_), | 506 base::Unretained(drive_service_), |
| 457 parent_resource_id, | 507 parent_resource_id, |
| 458 resource_id, | 508 resource_id, |
| 459 base::Bind(&JobScheduler::OnEntryActionJobDone, | 509 base::Bind(&JobScheduler::OnEntryActionJobDone, |
| 460 weak_ptr_factory_.GetWeakPtr(), | 510 weak_ptr_factory_.GetWeakPtr(), |
| 461 new_job->job_info.job_id, | 511 new_job->job_info.job_id, |
| 462 callback)); | 512 callback)); |
| 513 new_job->abort = callback; |
| 463 StartJob(new_job); | 514 StartJob(new_job); |
| 464 } | 515 } |
| 465 | 516 |
| 466 void JobScheduler::AddNewDirectory( | 517 void JobScheduler::AddNewDirectory( |
| 467 const std::string& parent_resource_id, | 518 const std::string& parent_resource_id, |
| 468 const std::string& directory_name, | 519 const std::string& directory_name, |
| 469 const google_apis::GetResourceEntryCallback& callback) { | 520 const google_apis::GetResourceEntryCallback& callback) { |
| 470 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 521 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 471 | 522 |
| 472 JobEntry* new_job = CreateNewJob(TYPE_ADD_NEW_DIRECTORY); | 523 JobEntry* new_job = CreateNewJob(TYPE_ADD_NEW_DIRECTORY); |
| 473 new_job->task = base::Bind( | 524 new_job->task = base::Bind( |
| 474 &google_apis::DriveServiceInterface::AddNewDirectory, | 525 &google_apis::DriveServiceInterface::AddNewDirectory, |
| 475 base::Unretained(drive_service_), | 526 base::Unretained(drive_service_), |
| 476 parent_resource_id, | 527 parent_resource_id, |
| 477 directory_name, | 528 directory_name, |
| 478 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 529 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
| 479 weak_ptr_factory_.GetWeakPtr(), | 530 weak_ptr_factory_.GetWeakPtr(), |
| 480 new_job->job_info.job_id, | 531 new_job->job_info.job_id, |
| 481 callback)); | 532 callback)); |
| 533 new_job->abort = CreateErrorRunCallback(callback); |
| 482 StartJob(new_job); | 534 StartJob(new_job); |
| 483 } | 535 } |
| 484 | 536 |
| 485 JobID JobScheduler::DownloadFile( | 537 JobID JobScheduler::DownloadFile( |
| 486 const base::FilePath& virtual_path, | 538 const base::FilePath& virtual_path, |
| 487 const base::FilePath& local_cache_path, | 539 const base::FilePath& local_cache_path, |
| 488 const GURL& download_url, | 540 const GURL& download_url, |
| 489 const ClientContext& context, | 541 const ClientContext& context, |
| 490 const google_apis::DownloadActionCallback& download_action_callback, | 542 const google_apis::DownloadActionCallback& download_action_callback, |
| 491 const google_apis::GetContentCallback& get_content_callback) { | 543 const google_apis::GetContentCallback& get_content_callback) { |
| 492 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 544 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 493 | 545 |
| 494 JobEntry* new_job = CreateNewJob(TYPE_DOWNLOAD_FILE); | 546 JobEntry* new_job = CreateNewJob(TYPE_DOWNLOAD_FILE); |
| 495 new_job->job_info.file_path = virtual_path; | 547 new_job->job_info.file_path = virtual_path; |
| 496 new_job->context = context; | 548 new_job->context = context; |
| 497 new_job->task = base::Bind( | 549 new_job->task = base::Bind( |
| 498 &google_apis::DriveServiceInterface::DownloadFile, | 550 &google_apis::DriveServiceInterface::DownloadFile, |
| 499 base::Unretained(drive_service_), | 551 base::Unretained(drive_service_), |
| 500 local_cache_path, | 552 local_cache_path, |
| 501 download_url, | 553 download_url, |
| 502 base::Bind(&JobScheduler::OnDownloadActionJobDone, | 554 base::Bind(&JobScheduler::OnDownloadActionJobDone, |
| 503 weak_ptr_factory_.GetWeakPtr(), | 555 weak_ptr_factory_.GetWeakPtr(), |
| 504 new_job->job_info.job_id, | 556 new_job->job_info.job_id, |
| 505 download_action_callback), | 557 download_action_callback), |
| 506 get_content_callback, | 558 get_content_callback, |
| 507 base::Bind(&JobScheduler::UpdateProgress, | 559 base::Bind(&JobScheduler::UpdateProgress, |
| 508 weak_ptr_factory_.GetWeakPtr(), | 560 weak_ptr_factory_.GetWeakPtr(), |
| 509 new_job->job_info.job_id)); | 561 new_job->job_info.job_id)); |
| 510 | 562 new_job->abort = CreateErrorRunCallback(download_action_callback); |
| 511 StartJob(new_job); | 563 StartJob(new_job); |
| 512 return new_job->job_info.job_id; | 564 return new_job->job_info.job_id; |
| 513 } | 565 } |
| 514 | 566 |
| 515 void JobScheduler::UploadNewFile( | 567 void JobScheduler::UploadNewFile( |
| 516 const std::string& parent_resource_id, | 568 const std::string& parent_resource_id, |
| 517 const base::FilePath& drive_file_path, | 569 const base::FilePath& drive_file_path, |
| 518 const base::FilePath& local_file_path, | 570 const base::FilePath& local_file_path, |
| 519 const std::string& title, | 571 const std::string& title, |
| 520 const std::string& content_type, | 572 const std::string& content_type, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 538 | 590 |
| 539 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, | 591 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, |
| 540 weak_ptr_factory_.GetWeakPtr(), | 592 weak_ptr_factory_.GetWeakPtr(), |
| 541 new_job->job_info.job_id, | 593 new_job->job_info.job_id, |
| 542 resume_params, | 594 resume_params, |
| 543 callback); | 595 callback); |
| 544 params.progress_callback = base::Bind(&JobScheduler::UpdateProgress, | 596 params.progress_callback = base::Bind(&JobScheduler::UpdateProgress, |
| 545 weak_ptr_factory_.GetWeakPtr(), | 597 weak_ptr_factory_.GetWeakPtr(), |
| 546 new_job->job_info.job_id); | 598 new_job->job_info.job_id); |
| 547 new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); | 599 new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); |
| 548 | 600 new_job->abort = CreateErrorRunCallback(callback); |
| 549 StartJob(new_job); | 601 StartJob(new_job); |
| 550 } | 602 } |
| 551 | 603 |
| 552 void JobScheduler::UploadExistingFile( | 604 void JobScheduler::UploadExistingFile( |
| 553 const std::string& resource_id, | 605 const std::string& resource_id, |
| 554 const base::FilePath& drive_file_path, | 606 const base::FilePath& drive_file_path, |
| 555 const base::FilePath& local_file_path, | 607 const base::FilePath& local_file_path, |
| 556 const std::string& content_type, | 608 const std::string& content_type, |
| 557 const std::string& etag, | 609 const std::string& etag, |
| 558 const ClientContext& context, | 610 const ClientContext& context, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 575 | 627 |
| 576 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, | 628 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, |
| 577 weak_ptr_factory_.GetWeakPtr(), | 629 weak_ptr_factory_.GetWeakPtr(), |
| 578 new_job->job_info.job_id, | 630 new_job->job_info.job_id, |
| 579 resume_params, | 631 resume_params, |
| 580 callback); | 632 callback); |
| 581 params.progress_callback = base::Bind(&JobScheduler::UpdateProgress, | 633 params.progress_callback = base::Bind(&JobScheduler::UpdateProgress, |
| 582 weak_ptr_factory_.GetWeakPtr(), | 634 weak_ptr_factory_.GetWeakPtr(), |
| 583 new_job->job_info.job_id); | 635 new_job->job_info.job_id); |
| 584 new_job->task = base::Bind(&RunUploadExistingFile, uploader_.get(), params); | 636 new_job->task = base::Bind(&RunUploadExistingFile, uploader_.get(), params); |
| 585 | 637 new_job->abort = CreateErrorRunCallback(callback); |
| 586 StartJob(new_job); | 638 StartJob(new_job); |
| 587 } | 639 } |
| 588 | 640 |
| 589 void JobScheduler::CreateFile( | 641 void JobScheduler::CreateFile( |
| 590 const std::string& parent_resource_id, | 642 const std::string& parent_resource_id, |
| 591 const base::FilePath& drive_file_path, | 643 const base::FilePath& drive_file_path, |
| 592 const std::string& title, | 644 const std::string& title, |
| 593 const std::string& content_type, | 645 const std::string& content_type, |
| 594 const ClientContext& context, | 646 const ClientContext& context, |
| 595 const google_apis::GetResourceEntryCallback& callback) { | 647 const google_apis::GetResourceEntryCallback& callback) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 612 resume_params.content_type = params.content_type; | 664 resume_params.content_type = params.content_type; |
| 613 | 665 |
| 614 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, | 666 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, |
| 615 weak_ptr_factory_.GetWeakPtr(), | 667 weak_ptr_factory_.GetWeakPtr(), |
| 616 new_job->job_info.job_id, | 668 new_job->job_info.job_id, |
| 617 resume_params, | 669 resume_params, |
| 618 callback); | 670 callback); |
| 619 params.progress_callback = google_apis::ProgressCallback(); | 671 params.progress_callback = google_apis::ProgressCallback(); |
| 620 | 672 |
| 621 new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); | 673 new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); |
| 622 | 674 new_job->abort = CreateErrorRunCallback(callback); |
| 623 StartJob(new_job); | 675 StartJob(new_job); |
| 624 } | 676 } |
| 625 | 677 |
| 626 JobScheduler::JobEntry* JobScheduler::CreateNewJob(JobType type) { | 678 JobScheduler::JobEntry* JobScheduler::CreateNewJob(JobType type) { |
| 627 JobEntry* job = new JobEntry(type); | 679 JobEntry* job = new JobEntry(type); |
| 628 job->job_info.job_id = job_map_.Add(job); // Takes the ownership of |job|. | 680 job->job_info.job_id = job_map_.Add(job); // Takes the ownership of |job|. |
| 629 return job; | 681 return job; |
| 630 } | 682 } |
| 631 | 683 |
| 632 void JobScheduler::StartJob(JobEntry* job) { | 684 void JobScheduler::StartJob(JobEntry* job) { |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 970 case FILE_QUEUE: | 1022 case FILE_QUEUE: |
| 971 return "FILE_QUEUE"; | 1023 return "FILE_QUEUE"; |
| 972 case NUM_QUEUES: | 1024 case NUM_QUEUES: |
| 973 break; // This value is just a sentinel. Should never be used. | 1025 break; // This value is just a sentinel. Should never be used. |
| 974 } | 1026 } |
| 975 NOTREACHED(); | 1027 NOTREACHED(); |
| 976 return ""; | 1028 return ""; |
| 977 } | 1029 } |
| 978 | 1030 |
| 979 } // namespace drive | 1031 } // namespace drive |
| OLD | NEW |