Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: chrome/browser/chromeos/drive/job_scheduler.cc

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

Powered by Google App Engine
This is Rietveld 408576698