| 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/file_system_proxy.h" | 5 #include "chrome/browser/chromeos/drive/file_system_proxy.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 if (!ValidateUrl(file_url, &file_path)) { | 186 if (!ValidateUrl(file_url, &file_path)) { |
| 187 MessageLoopProxy::current()->PostTask( | 187 MessageLoopProxy::current()->PostTask( |
| 188 FROM_HERE, | 188 FROM_HERE, |
| 189 base::Bind(callback, | 189 base::Bind(callback, |
| 190 base::PLATFORM_FILE_ERROR_NOT_FOUND, | 190 base::PLATFORM_FILE_ERROR_NOT_FOUND, |
| 191 base::PlatformFileInfo(), | 191 base::PlatformFileInfo(), |
| 192 base::FilePath())); | 192 base::FilePath())); |
| 193 return; | 193 return; |
| 194 } | 194 } |
| 195 | 195 |
| 196 CallDriveFileSystemMethodOnUIThread( | 196 CallFileSystemMethodOnUIThread( |
| 197 base::Bind(&DriveFileSystemInterface::GetEntryInfoByPath, | 197 base::Bind(&DriveFileSystemInterface::GetEntryInfoByPath, |
| 198 base::Unretained(file_system_), | 198 base::Unretained(file_system_), |
| 199 file_path, | 199 file_path, |
| 200 google_apis::CreateRelayCallback( | 200 google_apis::CreateRelayCallback( |
| 201 base::Bind(&FileSystemProxy::OnGetMetadata, | 201 base::Bind(&FileSystemProxy::OnGetMetadata, |
| 202 this, | 202 this, |
| 203 file_path, | 203 file_path, |
| 204 callback)))); | 204 callback)))); |
| 205 } | 205 } |
| 206 | 206 |
| 207 void FileSystemProxy::Copy( | 207 void FileSystemProxy::Copy( |
| 208 const FileSystemURL& src_file_url, | 208 const FileSystemURL& src_file_url, |
| 209 const FileSystemURL& dest_file_url, | 209 const FileSystemURL& dest_file_url, |
| 210 const FileSystemOperation::StatusCallback& callback) { | 210 const FileSystemOperation::StatusCallback& callback) { |
| 211 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 211 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 212 | 212 |
| 213 base::FilePath src_file_path, dest_file_path; | 213 base::FilePath src_file_path, dest_file_path; |
| 214 if (!ValidateUrl(src_file_url, &src_file_path) || | 214 if (!ValidateUrl(src_file_url, &src_file_path) || |
| 215 !ValidateUrl(dest_file_url, &dest_file_path)) { | 215 !ValidateUrl(dest_file_url, &dest_file_path)) { |
| 216 MessageLoopProxy::current()->PostTask( | 216 MessageLoopProxy::current()->PostTask( |
| 217 FROM_HERE, | 217 FROM_HERE, |
| 218 base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND)); | 218 base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND)); |
| 219 return; | 219 return; |
| 220 } | 220 } |
| 221 | 221 |
| 222 CallDriveFileSystemMethodOnUIThread( | 222 CallFileSystemMethodOnUIThread( |
| 223 base::Bind(&DriveFileSystemInterface::Copy, | 223 base::Bind(&DriveFileSystemInterface::Copy, |
| 224 base::Unretained(file_system_), | 224 base::Unretained(file_system_), |
| 225 src_file_path, | 225 src_file_path, |
| 226 dest_file_path, | 226 dest_file_path, |
| 227 google_apis::CreateRelayCallback( | 227 google_apis::CreateRelayCallback( |
| 228 base::Bind(&FileSystemProxy::OnStatusCallback, | 228 base::Bind(&FileSystemProxy::OnStatusCallback, |
| 229 this, | 229 this, |
| 230 callback)))); | 230 callback)))); |
| 231 } | 231 } |
| 232 | 232 |
| 233 void FileSystemProxy::Move( | 233 void FileSystemProxy::Move( |
| 234 const FileSystemURL& src_file_url, | 234 const FileSystemURL& src_file_url, |
| 235 const FileSystemURL& dest_file_url, | 235 const FileSystemURL& dest_file_url, |
| 236 const FileSystemOperation::StatusCallback& callback) { | 236 const FileSystemOperation::StatusCallback& callback) { |
| 237 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 237 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 238 | 238 |
| 239 base::FilePath src_file_path, dest_file_path; | 239 base::FilePath src_file_path, dest_file_path; |
| 240 if (!ValidateUrl(src_file_url, &src_file_path) || | 240 if (!ValidateUrl(src_file_url, &src_file_path) || |
| 241 !ValidateUrl(dest_file_url, &dest_file_path)) { | 241 !ValidateUrl(dest_file_url, &dest_file_path)) { |
| 242 MessageLoopProxy::current()->PostTask( | 242 MessageLoopProxy::current()->PostTask( |
| 243 FROM_HERE, | 243 FROM_HERE, |
| 244 base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND)); | 244 base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND)); |
| 245 return; | 245 return; |
| 246 } | 246 } |
| 247 | 247 |
| 248 CallDriveFileSystemMethodOnUIThread( | 248 CallFileSystemMethodOnUIThread( |
| 249 base::Bind(&DriveFileSystemInterface::Move, | 249 base::Bind(&DriveFileSystemInterface::Move, |
| 250 base::Unretained(file_system_), | 250 base::Unretained(file_system_), |
| 251 src_file_path, | 251 src_file_path, |
| 252 dest_file_path, | 252 dest_file_path, |
| 253 google_apis::CreateRelayCallback( | 253 google_apis::CreateRelayCallback( |
| 254 base::Bind(&FileSystemProxy::OnStatusCallback, | 254 base::Bind(&FileSystemProxy::OnStatusCallback, |
| 255 this, | 255 this, |
| 256 callback)))); | 256 callback)))); |
| 257 } | 257 } |
| 258 | 258 |
| 259 void FileSystemProxy::ReadDirectory( | 259 void FileSystemProxy::ReadDirectory( |
| 260 const FileSystemURL& file_url, | 260 const FileSystemURL& file_url, |
| 261 const FileSystemOperation::ReadDirectoryCallback& callback) { | 261 const FileSystemOperation::ReadDirectoryCallback& callback) { |
| 262 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 262 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 263 | 263 |
| 264 base::FilePath file_path; | 264 base::FilePath file_path; |
| 265 if (!ValidateUrl(file_url, &file_path)) { | 265 if (!ValidateUrl(file_url, &file_path)) { |
| 266 base::MessageLoopProxy::current()->PostTask( | 266 base::MessageLoopProxy::current()->PostTask( |
| 267 FROM_HERE, | 267 FROM_HERE, |
| 268 base::Bind(callback, | 268 base::Bind(callback, |
| 269 base::PLATFORM_FILE_ERROR_NOT_FOUND, | 269 base::PLATFORM_FILE_ERROR_NOT_FOUND, |
| 270 std::vector<base::FileUtilProxy::Entry>(), | 270 std::vector<base::FileUtilProxy::Entry>(), |
| 271 false)); | 271 false)); |
| 272 return; | 272 return; |
| 273 } | 273 } |
| 274 | 274 |
| 275 CallDriveFileSystemMethodOnUIThread( | 275 CallFileSystemMethodOnUIThread( |
| 276 base::Bind(&DriveFileSystemInterface::ReadDirectoryByPath, | 276 base::Bind(&DriveFileSystemInterface::ReadDirectoryByPath, |
| 277 base::Unretained(file_system_), | 277 base::Unretained(file_system_), |
| 278 file_path, | 278 file_path, |
| 279 google_apis::CreateRelayCallback( | 279 google_apis::CreateRelayCallback( |
| 280 base::Bind(&FileSystemProxy::OnReadDirectory, | 280 base::Bind(&FileSystemProxy::OnReadDirectory, |
| 281 this, | 281 this, |
| 282 callback)))); | 282 callback)))); |
| 283 } | 283 } |
| 284 | 284 |
| 285 void FileSystemProxy::Remove( | 285 void FileSystemProxy::Remove( |
| 286 const FileSystemURL& file_url, | 286 const FileSystemURL& file_url, |
| 287 bool recursive, | 287 bool recursive, |
| 288 const FileSystemOperation::StatusCallback& callback) { | 288 const FileSystemOperation::StatusCallback& callback) { |
| 289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 290 | 290 |
| 291 base::FilePath file_path; | 291 base::FilePath file_path; |
| 292 if (!ValidateUrl(file_url, &file_path)) { | 292 if (!ValidateUrl(file_url, &file_path)) { |
| 293 MessageLoopProxy::current()->PostTask( | 293 MessageLoopProxy::current()->PostTask( |
| 294 FROM_HERE, | 294 FROM_HERE, |
| 295 base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND)); | 295 base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND)); |
| 296 return; | 296 return; |
| 297 } | 297 } |
| 298 | 298 |
| 299 CallDriveFileSystemMethodOnUIThread( | 299 CallFileSystemMethodOnUIThread( |
| 300 base::Bind(&DriveFileSystemInterface::Remove, | 300 base::Bind(&DriveFileSystemInterface::Remove, |
| 301 base::Unretained(file_system_), | 301 base::Unretained(file_system_), |
| 302 file_path, | 302 file_path, |
| 303 recursive, | 303 recursive, |
| 304 google_apis::CreateRelayCallback( | 304 google_apis::CreateRelayCallback( |
| 305 base::Bind(&FileSystemProxy::OnStatusCallback, | 305 base::Bind(&FileSystemProxy::OnStatusCallback, |
| 306 this, | 306 this, |
| 307 callback)))); | 307 callback)))); |
| 308 } | 308 } |
| 309 | 309 |
| 310 void FileSystemProxy::CreateDirectory( | 310 void FileSystemProxy::CreateDirectory( |
| 311 const FileSystemURL& file_url, | 311 const FileSystemURL& file_url, |
| 312 bool exclusive, | 312 bool exclusive, |
| 313 bool recursive, | 313 bool recursive, |
| 314 const FileSystemOperation::StatusCallback& callback) { | 314 const FileSystemOperation::StatusCallback& callback) { |
| 315 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 315 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 316 | 316 |
| 317 base::FilePath file_path; | 317 base::FilePath file_path; |
| 318 if (!ValidateUrl(file_url, &file_path)) { | 318 if (!ValidateUrl(file_url, &file_path)) { |
| 319 MessageLoopProxy::current()->PostTask( | 319 MessageLoopProxy::current()->PostTask( |
| 320 FROM_HERE, | 320 FROM_HERE, |
| 321 base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND)); | 321 base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND)); |
| 322 return; | 322 return; |
| 323 } | 323 } |
| 324 | 324 |
| 325 CallDriveFileSystemMethodOnUIThread( | 325 CallFileSystemMethodOnUIThread( |
| 326 base::Bind(&DriveFileSystemInterface::CreateDirectory, | 326 base::Bind(&DriveFileSystemInterface::CreateDirectory, |
| 327 base::Unretained(file_system_), | 327 base::Unretained(file_system_), |
| 328 file_path, | 328 file_path, |
| 329 exclusive, | 329 exclusive, |
| 330 recursive, | 330 recursive, |
| 331 google_apis::CreateRelayCallback( | 331 google_apis::CreateRelayCallback( |
| 332 base::Bind(&FileSystemProxy::OnStatusCallback, | 332 base::Bind(&FileSystemProxy::OnStatusCallback, |
| 333 this, | 333 this, |
| 334 callback)))); | 334 callback)))); |
| 335 } | 335 } |
| 336 | 336 |
| 337 void FileSystemProxy::CreateFile( | 337 void FileSystemProxy::CreateFile( |
| 338 const FileSystemURL& file_url, | 338 const FileSystemURL& file_url, |
| 339 bool exclusive, | 339 bool exclusive, |
| 340 const FileSystemOperation::StatusCallback& callback) { | 340 const FileSystemOperation::StatusCallback& callback) { |
| 341 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 341 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 342 | 342 |
| 343 base::FilePath file_path; | 343 base::FilePath file_path; |
| 344 if (!ValidateUrl(file_url, &file_path)) { | 344 if (!ValidateUrl(file_url, &file_path)) { |
| 345 MessageLoopProxy::current()->PostTask( | 345 MessageLoopProxy::current()->PostTask( |
| 346 FROM_HERE, | 346 FROM_HERE, |
| 347 base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND)); | 347 base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND)); |
| 348 return; | 348 return; |
| 349 } | 349 } |
| 350 | 350 |
| 351 CallDriveFileSystemMethodOnUIThread( | 351 CallFileSystemMethodOnUIThread( |
| 352 base::Bind(&DriveFileSystemInterface::CreateFile, | 352 base::Bind(&DriveFileSystemInterface::CreateFile, |
| 353 base::Unretained(file_system_), | 353 base::Unretained(file_system_), |
| 354 file_path, | 354 file_path, |
| 355 exclusive, | 355 exclusive, |
| 356 google_apis::CreateRelayCallback( | 356 google_apis::CreateRelayCallback( |
| 357 base::Bind(&FileSystemProxy::OnStatusCallback, | 357 base::Bind(&FileSystemProxy::OnStatusCallback, |
| 358 this, | 358 this, |
| 359 callback)))); | 359 callback)))); |
| 360 } | 360 } |
| 361 | 361 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 376 if (!ValidateUrl(file_url, &file_path)) { | 376 if (!ValidateUrl(file_url, &file_path)) { |
| 377 MessageLoopProxy::current()->PostTask( | 377 MessageLoopProxy::current()->PostTask( |
| 378 FROM_HERE, | 378 FROM_HERE, |
| 379 base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND)); | 379 base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND)); |
| 380 return; | 380 return; |
| 381 } | 381 } |
| 382 | 382 |
| 383 // TODO(kinaba): http://crbug.com/132780. | 383 // TODO(kinaba): http://crbug.com/132780. |
| 384 // Optimize the cases for small |length|, at least for |length| == 0. | 384 // Optimize the cases for small |length|, at least for |length| == 0. |
| 385 // CreateWritableSnapshotFile downloads the whole content unnecessarily. | 385 // CreateWritableSnapshotFile downloads the whole content unnecessarily. |
| 386 CallDriveFileSystemMethodOnUIThread( | 386 CallFileSystemMethodOnUIThread( |
| 387 base::Bind(&DriveFileSystemInterface::OpenFile, | 387 base::Bind(&DriveFileSystemInterface::OpenFile, |
| 388 base::Unretained(file_system_), | 388 base::Unretained(file_system_), |
| 389 file_path, | 389 file_path, |
| 390 google_apis::CreateRelayCallback( | 390 google_apis::CreateRelayCallback( |
| 391 base::Bind(&FileSystemProxy::OnFileOpenedForTruncate, | 391 base::Bind(&FileSystemProxy::OnFileOpenedForTruncate, |
| 392 this, | 392 this, |
| 393 file_path, | 393 file_path, |
| 394 length, | 394 length, |
| 395 callback)))); | 395 callback)))); |
| 396 } | 396 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 // if it really exists open it as truncated. | 445 // if it really exists open it as truncated. |
| 446 file_flags &= ~base::PLATFORM_FILE_CREATE; | 446 file_flags &= ~base::PLATFORM_FILE_CREATE; |
| 447 file_flags &= ~base::PLATFORM_FILE_CREATE_ALWAYS; | 447 file_flags &= ~base::PLATFORM_FILE_CREATE_ALWAYS; |
| 448 file_flags |= base::PLATFORM_FILE_OPEN_TRUNCATED; | 448 file_flags |= base::PLATFORM_FILE_OPEN_TRUNCATED; |
| 449 } else { | 449 } else { |
| 450 callback.Run(create_result, base::kInvalidPlatformFileValue, peer_handle); | 450 callback.Run(create_result, base::kInvalidPlatformFileValue, peer_handle); |
| 451 return; | 451 return; |
| 452 } | 452 } |
| 453 | 453 |
| 454 // Open created (or existing) file for writing. | 454 // Open created (or existing) file for writing. |
| 455 CallDriveFileSystemMethodOnUIThread( | 455 CallFileSystemMethodOnUIThread( |
| 456 base::Bind(&DriveFileSystemInterface::OpenFile, | 456 base::Bind(&DriveFileSystemInterface::OpenFile, |
| 457 base::Unretained(file_system_), | 457 base::Unretained(file_system_), |
| 458 file_path, | 458 file_path, |
| 459 google_apis::CreateRelayCallback( | 459 google_apis::CreateRelayCallback( |
| 460 base::Bind(&FileSystemProxy::OnOpenFileForWriting, | 460 base::Bind(&FileSystemProxy::OnOpenFileForWriting, |
| 461 this, | 461 this, |
| 462 file_flags, | 462 file_flags, |
| 463 peer_handle, | 463 peer_handle, |
| 464 callback)))); | 464 callback)))); |
| 465 } | 465 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 492 } | 492 } |
| 493 | 493 |
| 494 void FileSystemProxy::DidTruncate( | 494 void FileSystemProxy::DidTruncate( |
| 495 const base::FilePath& virtual_path, | 495 const base::FilePath& virtual_path, |
| 496 const FileSystemOperation::StatusCallback& callback, | 496 const FileSystemOperation::StatusCallback& callback, |
| 497 base::PlatformFileError truncate_result) { | 497 base::PlatformFileError truncate_result) { |
| 498 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 498 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 499 | 499 |
| 500 // Truncation finished. We must close the file no matter |truncate_result| | 500 // Truncation finished. We must close the file no matter |truncate_result| |
| 501 // indicates an error or not. | 501 // indicates an error or not. |
| 502 CallDriveFileSystemMethodOnUIThread( | 502 CallFileSystemMethodOnUIThread( |
| 503 base::Bind(&DriveFileSystemInterface::CloseFile, | 503 base::Bind(&DriveFileSystemInterface::CloseFile, |
| 504 base::Unretained(file_system_), | 504 base::Unretained(file_system_), |
| 505 virtual_path, | 505 virtual_path, |
| 506 google_apis::CreateRelayCallback( | 506 google_apis::CreateRelayCallback( |
| 507 base::Bind(&DidCloseFileForTruncate, | 507 base::Bind(&DidCloseFileForTruncate, |
| 508 callback, | 508 callback, |
| 509 truncate_result)))); | 509 truncate_result)))); |
| 510 } | 510 } |
| 511 | 511 |
| 512 void FileSystemProxy::OpenFile( | 512 void FileSystemProxy::OpenFile( |
| (...skipping 28 matching lines...) Expand all Loading... |
| 541 } | 541 } |
| 542 | 542 |
| 543 if ((file_flags & base::PLATFORM_FILE_OPEN) || | 543 if ((file_flags & base::PLATFORM_FILE_OPEN) || |
| 544 (file_flags & base::PLATFORM_FILE_OPEN_ALWAYS) || | 544 (file_flags & base::PLATFORM_FILE_OPEN_ALWAYS) || |
| 545 (file_flags & base::PLATFORM_FILE_OPEN_TRUNCATED)) { | 545 (file_flags & base::PLATFORM_FILE_OPEN_TRUNCATED)) { |
| 546 if ((file_flags & base::PLATFORM_FILE_OPEN_TRUNCATED) || | 546 if ((file_flags & base::PLATFORM_FILE_OPEN_TRUNCATED) || |
| 547 (file_flags & base::PLATFORM_FILE_OPEN_ALWAYS) || | 547 (file_flags & base::PLATFORM_FILE_OPEN_ALWAYS) || |
| 548 (file_flags & base::PLATFORM_FILE_WRITE) || | 548 (file_flags & base::PLATFORM_FILE_WRITE) || |
| 549 (file_flags & base::PLATFORM_FILE_EXCLUSIVE_WRITE)) { | 549 (file_flags & base::PLATFORM_FILE_EXCLUSIVE_WRITE)) { |
| 550 // Open existing file for writing. | 550 // Open existing file for writing. |
| 551 CallDriveFileSystemMethodOnUIThread( | 551 CallFileSystemMethodOnUIThread( |
| 552 base::Bind(&DriveFileSystemInterface::OpenFile, | 552 base::Bind(&DriveFileSystemInterface::OpenFile, |
| 553 base::Unretained(file_system_), | 553 base::Unretained(file_system_), |
| 554 file_path, | 554 file_path, |
| 555 google_apis::CreateRelayCallback( | 555 google_apis::CreateRelayCallback( |
| 556 base::Bind(&FileSystemProxy::OnOpenFileForWriting, | 556 base::Bind(&FileSystemProxy::OnOpenFileForWriting, |
| 557 this, | 557 this, |
| 558 file_flags, | 558 file_flags, |
| 559 peer_handle, | 559 peer_handle, |
| 560 callback)))); | 560 callback)))); |
| 561 } else { | 561 } else { |
| 562 // Read-only file open. | 562 // Read-only file open. |
| 563 CallDriveFileSystemMethodOnUIThread( | 563 CallFileSystemMethodOnUIThread( |
| 564 base::Bind(&DriveFileSystemInterface::GetFileByPath, | 564 base::Bind(&DriveFileSystemInterface::GetFileByPath, |
| 565 base::Unretained(file_system_), | 565 base::Unretained(file_system_), |
| 566 file_path, | 566 file_path, |
| 567 google_apis::CreateRelayCallback( | 567 google_apis::CreateRelayCallback( |
| 568 base::Bind(&OnGetFileByPathForOpen, | 568 base::Bind(&OnGetFileByPathForOpen, |
| 569 callback, | 569 callback, |
| 570 file_flags, | 570 file_flags, |
| 571 peer_handle)))); | 571 peer_handle)))); |
| 572 } | 572 } |
| 573 } else if ((file_flags & base::PLATFORM_FILE_CREATE) || | 573 } else if ((file_flags & base::PLATFORM_FILE_CREATE) || |
| 574 (file_flags & base::PLATFORM_FILE_CREATE_ALWAYS)) { | 574 (file_flags & base::PLATFORM_FILE_CREATE_ALWAYS)) { |
| 575 // Open existing file for writing. | 575 // Open existing file for writing. |
| 576 CallDriveFileSystemMethodOnUIThread( | 576 CallFileSystemMethodOnUIThread( |
| 577 base::Bind(&DriveFileSystemInterface::CreateFile, | 577 base::Bind(&DriveFileSystemInterface::CreateFile, |
| 578 base::Unretained(file_system_), | 578 base::Unretained(file_system_), |
| 579 file_path, | 579 file_path, |
| 580 file_flags & base::PLATFORM_FILE_EXCLUSIVE_WRITE, | 580 file_flags & base::PLATFORM_FILE_EXCLUSIVE_WRITE, |
| 581 google_apis::CreateRelayCallback( | 581 google_apis::CreateRelayCallback( |
| 582 base::Bind(&FileSystemProxy::OnCreateFileForOpen, | 582 base::Bind(&FileSystemProxy::OnCreateFileForOpen, |
| 583 this, | 583 this, |
| 584 file_path, | 584 file_path, |
| 585 file_flags, | 585 file_flags, |
| 586 peer_handle, | 586 peer_handle, |
| 587 callback)))); | 587 callback)))); |
| 588 } else { | 588 } else { |
| 589 NOTREACHED() << "Unhandled file flags combination " << file_flags; | 589 NOTREACHED() << "Unhandled file flags combination " << file_flags; |
| 590 MessageLoopProxy::current()->PostTask( | 590 MessageLoopProxy::current()->PostTask( |
| 591 FROM_HERE, | 591 FROM_HERE, |
| 592 base::Bind(callback, | 592 base::Bind(callback, |
| 593 base::PLATFORM_FILE_ERROR_FAILED, | 593 base::PLATFORM_FILE_ERROR_FAILED, |
| 594 base::kInvalidPlatformFileValue, | 594 base::kInvalidPlatformFileValue, |
| 595 peer_handle)); | 595 peer_handle)); |
| 596 } | 596 } |
| 597 } | 597 } |
| 598 | 598 |
| 599 void FileSystemProxy::NotifyCloseFile(const FileSystemURL& url) { | 599 void FileSystemProxy::NotifyCloseFile(const FileSystemURL& url) { |
| 600 base::FilePath file_path; | 600 base::FilePath file_path; |
| 601 if (!ValidateUrl(url, &file_path)) | 601 if (!ValidateUrl(url, &file_path)) |
| 602 return; | 602 return; |
| 603 | 603 |
| 604 CallDriveFileSystemMethodOnUIThread( | 604 CallFileSystemMethodOnUIThread( |
| 605 base::Bind(&DriveFileSystemInterface::CloseFile, | 605 base::Bind(&DriveFileSystemInterface::CloseFile, |
| 606 base::Unretained(file_system_), | 606 base::Unretained(file_system_), |
| 607 file_path, | 607 file_path, |
| 608 google_apis::CreateRelayCallback( | 608 google_apis::CreateRelayCallback( |
| 609 base::Bind(&EmitDebugLogForCloseFile, | 609 base::Bind(&EmitDebugLogForCloseFile, |
| 610 file_path)))); | 610 file_path)))); |
| 611 } | 611 } |
| 612 | 612 |
| 613 void FileSystemProxy::TouchFile( | 613 void FileSystemProxy::TouchFile( |
| 614 const fileapi::FileSystemURL& url, | 614 const fileapi::FileSystemURL& url, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 634 MessageLoopProxy::current()->PostTask( | 634 MessageLoopProxy::current()->PostTask( |
| 635 FROM_HERE, | 635 FROM_HERE, |
| 636 base::Bind(callback, | 636 base::Bind(callback, |
| 637 base::PLATFORM_FILE_ERROR_NOT_FOUND, | 637 base::PLATFORM_FILE_ERROR_NOT_FOUND, |
| 638 base::PlatformFileInfo(), | 638 base::PlatformFileInfo(), |
| 639 base::FilePath(), | 639 base::FilePath(), |
| 640 scoped_refptr<ShareableFileReference>(NULL))); | 640 scoped_refptr<ShareableFileReference>(NULL))); |
| 641 return; | 641 return; |
| 642 } | 642 } |
| 643 | 643 |
| 644 CallDriveFileSystemMethodOnUIThread( | 644 CallFileSystemMethodOnUIThread( |
| 645 base::Bind(&DriveFileSystemInterface::GetEntryInfoByPath, | 645 base::Bind(&DriveFileSystemInterface::GetEntryInfoByPath, |
| 646 base::Unretained(file_system_), | 646 base::Unretained(file_system_), |
| 647 file_path, | 647 file_path, |
| 648 google_apis::CreateRelayCallback( | 648 google_apis::CreateRelayCallback( |
| 649 base::Bind(&FileSystemProxy::OnGetEntryInfoByPath, | 649 base::Bind(&FileSystemProxy::OnGetEntryInfoByPath, |
| 650 this, | 650 this, |
| 651 file_path, | 651 file_path, |
| 652 callback)))); | 652 callback)))); |
| 653 } | 653 } |
| 654 | 654 |
| 655 void FileSystemProxy::OnGetEntryInfoByPath( | 655 void FileSystemProxy::OnGetEntryInfoByPath( |
| 656 const base::FilePath& entry_path, | 656 const base::FilePath& entry_path, |
| 657 const FileSystemOperation::SnapshotFileCallback& callback, | 657 const FileSystemOperation::SnapshotFileCallback& callback, |
| 658 FileError error, | 658 FileError error, |
| 659 scoped_ptr<DriveEntryProto> entry_proto) { | 659 scoped_ptr<DriveEntryProto> entry_proto) { |
| 660 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 660 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 661 | 661 |
| 662 if (error != FILE_ERROR_OK || !entry_proto.get()) { | 662 if (error != FILE_ERROR_OK || !entry_proto.get()) { |
| 663 callback.Run(base::PLATFORM_FILE_ERROR_NOT_FOUND, | 663 callback.Run(base::PLATFORM_FILE_ERROR_NOT_FOUND, |
| 664 base::PlatformFileInfo(), | 664 base::PlatformFileInfo(), |
| 665 base::FilePath(), | 665 base::FilePath(), |
| 666 scoped_refptr<ShareableFileReference>(NULL)); | 666 scoped_refptr<ShareableFileReference>(NULL)); |
| 667 return; | 667 return; |
| 668 } | 668 } |
| 669 | 669 |
| 670 base::PlatformFileInfo file_info; | 670 base::PlatformFileInfo file_info; |
| 671 util::ConvertProtoToPlatformFileInfo(entry_proto->file_info(), &file_info); | 671 util::ConvertProtoToPlatformFileInfo(entry_proto->file_info(), &file_info); |
| 672 | 672 |
| 673 CallDriveFileSystemMethodOnUIThread( | 673 CallFileSystemMethodOnUIThread( |
| 674 base::Bind(&DriveFileSystemInterface::GetFileByPath, | 674 base::Bind(&DriveFileSystemInterface::GetFileByPath, |
| 675 base::Unretained(file_system_), | 675 base::Unretained(file_system_), |
| 676 entry_path, | 676 entry_path, |
| 677 google_apis::CreateRelayCallback( | 677 google_apis::CreateRelayCallback( |
| 678 base::Bind(&CallSnapshotFileCallback, | 678 base::Bind(&CallSnapshotFileCallback, |
| 679 callback, | 679 callback, |
| 680 file_info)))); | 680 file_info)))); |
| 681 } | 681 } |
| 682 | 682 |
| 683 void FileSystemProxy::CreateWritableSnapshotFile( | 683 void FileSystemProxy::CreateWritableSnapshotFile( |
| 684 const FileSystemURL& file_url, | 684 const FileSystemURL& file_url, |
| 685 const fileapi::WritableSnapshotFile& callback) { | 685 const fileapi::WritableSnapshotFile& callback) { |
| 686 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 686 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 687 | 687 |
| 688 base::FilePath file_path; | 688 base::FilePath file_path; |
| 689 if (!ValidateUrl(file_url, &file_path)) { | 689 if (!ValidateUrl(file_url, &file_path)) { |
| 690 MessageLoopProxy::current()->PostTask( | 690 MessageLoopProxy::current()->PostTask( |
| 691 FROM_HERE, | 691 FROM_HERE, |
| 692 base::Bind(callback, | 692 base::Bind(callback, |
| 693 base::PLATFORM_FILE_ERROR_NOT_FOUND, | 693 base::PLATFORM_FILE_ERROR_NOT_FOUND, |
| 694 base::FilePath(), | 694 base::FilePath(), |
| 695 scoped_refptr<ShareableFileReference>(NULL))); | 695 scoped_refptr<ShareableFileReference>(NULL))); |
| 696 return; | 696 return; |
| 697 } | 697 } |
| 698 | 698 |
| 699 CallDriveFileSystemMethodOnUIThread( | 699 CallFileSystemMethodOnUIThread( |
| 700 base::Bind(&DriveFileSystemInterface::OpenFile, | 700 base::Bind(&DriveFileSystemInterface::OpenFile, |
| 701 base::Unretained(file_system_), | 701 base::Unretained(file_system_), |
| 702 file_path, | 702 file_path, |
| 703 google_apis::CreateRelayCallback( | 703 google_apis::CreateRelayCallback( |
| 704 base::Bind( | 704 base::Bind( |
| 705 &FileSystemProxy::OnCreateWritableSnapshotFile, | 705 &FileSystemProxy::OnCreateWritableSnapshotFile, |
| 706 this, | 706 this, |
| 707 file_path, | 707 file_path, |
| 708 callback)))); | 708 callback)))); |
| 709 } | 709 } |
| 710 | 710 |
| 711 FileSystemProxy::~FileSystemProxy() { | 711 FileSystemProxy::~FileSystemProxy() { |
| 712 // Should be deleted from the CrosMountPointProvider on UI thread. | 712 // Should be deleted from the CrosMountPointProvider on UI thread. |
| 713 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 713 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 714 } | 714 } |
| 715 | 715 |
| 716 // static. | 716 // static. |
| 717 bool FileSystemProxy::ValidateUrl( | 717 bool FileSystemProxy::ValidateUrl( |
| 718 const FileSystemURL& url, base::FilePath* file_path) { | 718 const FileSystemURL& url, base::FilePath* file_path) { |
| 719 *file_path = util::ExtractDrivePathFromFileSystemUrl(url); | 719 *file_path = util::ExtractDrivePathFromFileSystemUrl(url); |
| 720 return !file_path->empty(); | 720 return !file_path->empty(); |
| 721 } | 721 } |
| 722 | 722 |
| 723 void FileSystemProxy::CallDriveFileSystemMethodOnUIThread( | 723 void FileSystemProxy::CallFileSystemMethodOnUIThread( |
| 724 const base::Closure& method_call) { | 724 const base::Closure& method_call) { |
| 725 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 725 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 726 BrowserThread::PostTask( | 726 BrowserThread::PostTask( |
| 727 BrowserThread::UI, | 727 BrowserThread::UI, |
| 728 FROM_HERE, | 728 FROM_HERE, |
| 729 base::Bind( | 729 base::Bind( |
| 730 &FileSystemProxy::CallDriveFileSystemMethodOnUIThreadInternal, | 730 &FileSystemProxy::CallFileSystemMethodOnUIThreadInternal, |
| 731 this, | 731 this, |
| 732 method_call)); | 732 method_call)); |
| 733 } | 733 } |
| 734 | 734 |
| 735 void FileSystemProxy::CallDriveFileSystemMethodOnUIThreadInternal( | 735 void FileSystemProxy::CallFileSystemMethodOnUIThreadInternal( |
| 736 const base::Closure& method_call) { | 736 const base::Closure& method_call) { |
| 737 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 737 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 738 // If |file_system_| is NULL, it means the file system has already shut down. | 738 // If |file_system_| is NULL, it means the file system has already shut down. |
| 739 if (file_system_) | 739 if (file_system_) |
| 740 method_call.Run(); | 740 method_call.Run(); |
| 741 } | 741 } |
| 742 | 742 |
| 743 void FileSystemProxy::OnStatusCallback( | 743 void FileSystemProxy::OnStatusCallback( |
| 744 const fileapi::FileSystemOperation::StatusCallback& callback, | 744 const fileapi::FileSystemOperation::StatusCallback& callback, |
| 745 FileError error) { | 745 FileError error) { |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 819 } | 819 } |
| 820 | 820 |
| 821 callback.Run(FileErrorToPlatformError(result), local_path, file_ref); | 821 callback.Run(FileErrorToPlatformError(result), local_path, file_ref); |
| 822 } | 822 } |
| 823 | 823 |
| 824 void FileSystemProxy::CloseWritableSnapshotFile( | 824 void FileSystemProxy::CloseWritableSnapshotFile( |
| 825 const base::FilePath& virtual_path, | 825 const base::FilePath& virtual_path, |
| 826 const base::FilePath& local_path) { | 826 const base::FilePath& local_path) { |
| 827 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 827 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 828 | 828 |
| 829 CallDriveFileSystemMethodOnUIThread( | 829 CallFileSystemMethodOnUIThread( |
| 830 base::Bind(&DriveFileSystemInterface::CloseFile, | 830 base::Bind(&DriveFileSystemInterface::CloseFile, |
| 831 base::Unretained(file_system_), | 831 base::Unretained(file_system_), |
| 832 virtual_path, | 832 virtual_path, |
| 833 google_apis::CreateRelayCallback( | 833 google_apis::CreateRelayCallback( |
| 834 base::Bind(&EmitDebugLogForCloseFile, | 834 base::Bind(&EmitDebugLogForCloseFile, |
| 835 virtual_path)))); | 835 virtual_path)))); |
| 836 } | 836 } |
| 837 | 837 |
| 838 } // namespace drive | 838 } // namespace drive |
| OLD | NEW |