| 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/drive_resource_metadata.h" | 5 #include "chrome/browser/chromeos/drive/drive_resource_metadata.h" |
| 6 | 6 |
| 7 #include <leveldb/db.h> | 7 #include <leveldb/db.h> |
| 8 #include <stack> | 8 #include <stack> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 // Reject incompatible input. | 381 // Reject incompatible input. |
| 382 if (entry->proto().file_info().is_directory() != | 382 if (entry->proto().file_info().is_directory() != |
| 383 entry_proto.file_info().is_directory()) { | 383 entry_proto.file_info().is_directory()) { |
| 384 PostGetEntryInfoWithFilePathCallbackError( | 384 PostGetEntryInfoWithFilePathCallbackError( |
| 385 callback, DRIVE_FILE_ERROR_INVALID_OPERATION); | 385 callback, DRIVE_FILE_ERROR_INVALID_OPERATION); |
| 386 return; | 386 return; |
| 387 } | 387 } |
| 388 | 388 |
| 389 // Update data. | 389 // Update data. |
| 390 if (entry != root_.get()) { | 390 if (entry != root_.get()) { |
| 391 DriveDirectory* old_parent = GetParent(entry->parent_resource_id()); | 391 DriveDirectory* old_parent = GetDirectory(entry->parent_resource_id()); |
| 392 DriveDirectory* new_parent = GetParent(entry_proto.parent_resource_id()); | 392 DriveDirectory* new_parent = GetDirectory(entry_proto.parent_resource_id()); |
| 393 | 393 |
| 394 if (!old_parent || !new_parent) { | 394 if (!old_parent || !new_parent) { |
| 395 PostGetEntryInfoWithFilePathCallbackError( | 395 PostGetEntryInfoWithFilePathCallbackError( |
| 396 callback, DRIVE_FILE_ERROR_NOT_FOUND); | 396 callback, DRIVE_FILE_ERROR_NOT_FOUND); |
| 397 return; | 397 return; |
| 398 } | 398 } |
| 399 | 399 |
| 400 // Remove from the old parent and add to the new parent. | 400 // Remove from the old parent and add to the new parent. |
| 401 old_parent->RemoveChild(entry); | 401 old_parent->RemoveChild(entry); |
| 402 entry->FromProto(entry_proto); | 402 entry->FromProto(entry_proto); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 454 base::MessageLoopProxy::current()->PostTask( | 454 base::MessageLoopProxy::current()->PostTask( |
| 455 FROM_HERE, | 455 FROM_HERE, |
| 456 base::Bind(callback, DRIVE_FILE_OK, GetFilePath(directory->proto()))); | 456 base::Bind(callback, DRIVE_FILE_OK, GetFilePath(directory->proto()))); |
| 457 } | 457 } |
| 458 | 458 |
| 459 void DriveResourceMetadata::AddEntry(const DriveEntryProto& entry_proto, | 459 void DriveResourceMetadata::AddEntry(const DriveEntryProto& entry_proto, |
| 460 const FileMoveCallback& callback) { | 460 const FileMoveCallback& callback) { |
| 461 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 461 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 462 DCHECK(!callback.is_null()); | 462 DCHECK(!callback.is_null()); |
| 463 | 463 |
| 464 DriveDirectory* parent = GetParent(entry_proto.parent_resource_id()); | 464 DriveDirectory* parent = GetDirectory(entry_proto.parent_resource_id()); |
| 465 if (!parent) { | 465 if (!parent) { |
| 466 PostFileMoveCallbackError(callback, DRIVE_FILE_ERROR_NOT_FOUND); | 466 PostFileMoveCallbackError(callback, DRIVE_FILE_ERROR_NOT_FOUND); |
| 467 return; | 467 return; |
| 468 } | 468 } |
| 469 | 469 |
| 470 scoped_ptr<DriveEntry> new_entry = CreateDriveEntryFromProto(entry_proto); | 470 scoped_ptr<DriveEntry> new_entry = CreateDriveEntryFromProto(entry_proto); |
| 471 if (!new_entry.get()) { | 471 if (!new_entry.get()) { |
| 472 PostFileMoveCallbackError(callback, DRIVE_FILE_ERROR_FAILED); | 472 PostFileMoveCallbackError(callback, DRIVE_FILE_ERROR_FAILED); |
| 473 return; | 473 return; |
| 474 } | 474 } |
| 475 | 475 |
| 476 DriveEntry* added_entry = new_entry.release(); | 476 DriveEntry* added_entry = new_entry.release(); |
| 477 parent->AddEntry(added_entry); // Transfers ownership. | 477 parent->AddEntry(added_entry); // Transfers ownership. |
| 478 DVLOG(1) << "AddEntry " << GetFilePath(added_entry->proto()).value(); | 478 DVLOG(1) << "AddEntry " << GetFilePath(added_entry->proto()).value(); |
| 479 base::MessageLoopProxy::current()->PostTask( | 479 base::MessageLoopProxy::current()->PostTask( |
| 480 FROM_HERE, | 480 FROM_HERE, |
| 481 base::Bind(callback, DRIVE_FILE_OK, GetFilePath(added_entry->proto()))); | 481 base::Bind(callback, DRIVE_FILE_OK, GetFilePath(added_entry->proto()))); |
| 482 } | 482 } |
| 483 | 483 |
| 484 DriveDirectory* DriveResourceMetadata::GetParent( | 484 DriveDirectory* DriveResourceMetadata::GetDirectory( |
| 485 const std::string& parent_resource_id) { | 485 const std::string& resource_id) { |
| 486 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 486 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 487 DCHECK(!resource_id.empty()); |
| 487 | 488 |
| 488 if (parent_resource_id.empty()) | 489 DriveEntry* entry = GetEntryByResourceId(resource_id); |
| 489 return root_.get(); | |
| 490 | |
| 491 DriveEntry* entry = GetEntryByResourceId(parent_resource_id); | |
| 492 return entry ? entry->AsDriveDirectory() : NULL; | 490 return entry ? entry->AsDriveDirectory() : NULL; |
| 493 } | 491 } |
| 494 | 492 |
| 495 base::FilePath DriveResourceMetadata::GetFilePath( | 493 base::FilePath DriveResourceMetadata::GetFilePath( |
| 496 const DriveEntryProto& entry) { | 494 const DriveEntryProto& entry) { |
| 497 base::FilePath path; | 495 base::FilePath path; |
| 498 DriveEntry* parent = entry.parent_resource_id().empty() ? NULL : | 496 DriveEntry* parent = entry.parent_resource_id().empty() ? NULL : |
| 499 GetEntryByResourceId(entry.parent_resource_id()); | 497 GetEntryByResourceId(entry.parent_resource_id()); |
| 500 if (parent) | 498 if (parent) |
| 501 path = GetFilePath(parent->proto()); | 499 path = GetFilePath(parent->proto()); |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 639 DCHECK(result.get()); | 637 DCHECK(result.get()); |
| 640 | 638 |
| 641 result->second.path = second_path; | 639 result->second.path = second_path; |
| 642 result->second.error = error; | 640 result->second.error = error; |
| 643 result->second.proto = entry_proto.Pass(); | 641 result->second.proto = entry_proto.Pass(); |
| 644 | 642 |
| 645 callback.Run(result.Pass()); | 643 callback.Run(result.Pass()); |
| 646 } | 644 } |
| 647 | 645 |
| 648 } // namespace drive | 646 } // namespace drive |
| OLD | NEW |