OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/sync_file_system/drive_backend/metadata_database.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <stack> | 8 #include <stack> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 1583 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1594 while (!stack.empty()) { | 1594 while (!stack.empty()) { |
1595 int64_t tracker_id = stack.back(); | 1595 int64_t tracker_id = stack.back(); |
1596 stack.pop_back(); | 1596 stack.pop_back(); |
1597 AppendContents(index_->GetFileTrackerIDsByParent(tracker_id), &stack); | 1597 AppendContents(index_->GetFileTrackerIDsByParent(tracker_id), &stack); |
1598 | 1598 |
1599 FileTracker tracker; | 1599 FileTracker tracker; |
1600 if (!index_->GetFileTracker(tracker_id, &tracker)) { | 1600 if (!index_->GetFileTracker(tracker_id, &tracker)) { |
1601 NOTREACHED(); | 1601 NOTREACHED(); |
1602 continue; | 1602 continue; |
1603 } | 1603 } |
1604 base::DictionaryValue* file = new base::DictionaryValue; | 1604 std::unique_ptr<base::DictionaryValue> file(new base::DictionaryValue); |
1605 | 1605 |
1606 base::FilePath path = BuildDisplayPathForTracker(tracker); | 1606 base::FilePath path = BuildDisplayPathForTracker(tracker); |
1607 file->SetString("path", path.AsUTF8Unsafe()); | 1607 file->SetString("path", path.AsUTF8Unsafe()); |
1608 if (tracker.has_synced_details()) { | 1608 if (tracker.has_synced_details()) { |
1609 file->SetString("title", tracker.synced_details().title()); | 1609 file->SetString("title", tracker.synced_details().title()); |
1610 file->SetString("type", | 1610 file->SetString("type", |
1611 FileKindToString(tracker.synced_details().file_kind())); | 1611 FileKindToString(tracker.synced_details().file_kind())); |
1612 } | 1612 } |
1613 | 1613 |
1614 base::DictionaryValue* details = new base::DictionaryValue; | 1614 base::DictionaryValue* details = new base::DictionaryValue; |
1615 details->SetString("file_id", tracker.file_id()); | 1615 details->SetString("file_id", tracker.file_id()); |
1616 if (tracker.has_synced_details() && | 1616 if (tracker.has_synced_details() && |
1617 tracker.synced_details().file_kind() == FILE_KIND_FILE) | 1617 tracker.synced_details().file_kind() == FILE_KIND_FILE) |
1618 details->SetString("md5", tracker.synced_details().md5()); | 1618 details->SetString("md5", tracker.synced_details().md5()); |
1619 details->SetString("active", tracker.active() ? "true" : "false"); | 1619 details->SetString("active", tracker.active() ? "true" : "false"); |
1620 details->SetString("dirty", tracker.dirty() ? "true" : "false"); | 1620 details->SetString("dirty", tracker.dirty() ? "true" : "false"); |
1621 | 1621 |
1622 file->Set("details", details); | 1622 file->Set("details", details); |
1623 | 1623 |
1624 files->Append(file); | 1624 files->Append(std::move(file)); |
1625 } | 1625 } |
1626 | 1626 |
1627 return files; | 1627 return files; |
1628 } | 1628 } |
1629 | 1629 |
1630 std::unique_ptr<base::ListValue> MetadataDatabase::DumpDatabase() { | 1630 std::unique_ptr<base::ListValue> MetadataDatabase::DumpDatabase() { |
1631 std::unique_ptr<base::ListValue> list(new base::ListValue); | 1631 std::unique_ptr<base::ListValue> list(new base::ListValue); |
1632 list->Append(DumpTrackers()); | 1632 list->Append(DumpTrackers()); |
1633 list->Append(DumpMetadata()); | 1633 list->Append(DumpMetadata()); |
1634 return list; | 1634 return list; |
1635 } | 1635 } |
1636 | 1636 |
1637 bool MetadataDatabase::HasNewerFileMetadata(const std::string& file_id, | 1637 bool MetadataDatabase::HasNewerFileMetadata(const std::string& file_id, |
1638 int64_t change_id) { | 1638 int64_t change_id) { |
1639 FileMetadata metadata; | 1639 FileMetadata metadata; |
1640 if (!index_->GetFileMetadata(file_id, &metadata)) | 1640 if (!index_->GetFileMetadata(file_id, &metadata)) |
1641 return false; | 1641 return false; |
1642 DCHECK(metadata.has_details()); | 1642 DCHECK(metadata.has_details()); |
1643 return metadata.details().change_id() >= change_id; | 1643 return metadata.details().change_id() >= change_id; |
1644 } | 1644 } |
1645 | 1645 |
1646 std::unique_ptr<base::ListValue> MetadataDatabase::DumpTrackers() { | 1646 std::unique_ptr<base::ListValue> MetadataDatabase::DumpTrackers() { |
1647 std::unique_ptr<base::ListValue> trackers(new base::ListValue); | 1647 std::unique_ptr<base::ListValue> trackers(new base::ListValue); |
1648 | 1648 |
1649 // Append the first element for metadata. | 1649 // Append the first element for metadata. |
1650 base::DictionaryValue* metadata = new base::DictionaryValue; | 1650 std::unique_ptr<base::DictionaryValue> metadata(new base::DictionaryValue); |
1651 const char *trackerKeys[] = { | 1651 const char *trackerKeys[] = { |
1652 "tracker_id", "path", "file_id", "tracker_kind", "app_id", | 1652 "tracker_id", "path", "file_id", "tracker_kind", "app_id", |
1653 "active", "dirty", "folder_listing", "demoted", | 1653 "active", "dirty", "folder_listing", "demoted", |
1654 "title", "kind", "md5", "etag", "missing", "change_id", | 1654 "title", "kind", "md5", "etag", "missing", "change_id", |
1655 }; | 1655 }; |
1656 std::vector<std::string> key_strings( | 1656 std::vector<std::string> key_strings( |
1657 trackerKeys, trackerKeys + arraysize(trackerKeys)); | 1657 trackerKeys, trackerKeys + arraysize(trackerKeys)); |
1658 base::ListValue* keys = new base::ListValue; | 1658 base::ListValue* keys = new base::ListValue; |
1659 keys->AppendStrings(key_strings); | 1659 keys->AppendStrings(key_strings); |
1660 metadata->SetString("title", "Trackers"); | 1660 metadata->SetString("title", "Trackers"); |
1661 metadata->Set("keys", keys); | 1661 metadata->Set("keys", keys); |
1662 trackers->Append(metadata); | 1662 trackers->Append(std::move(metadata)); |
1663 | 1663 |
1664 // Append tracker data. | 1664 // Append tracker data. |
1665 std::vector<int64_t> tracker_ids(index_->GetAllTrackerIDs()); | 1665 std::vector<int64_t> tracker_ids(index_->GetAllTrackerIDs()); |
1666 for (std::vector<int64_t>::const_iterator itr = tracker_ids.begin(); | 1666 for (std::vector<int64_t>::const_iterator itr = tracker_ids.begin(); |
1667 itr != tracker_ids.end(); ++itr) { | 1667 itr != tracker_ids.end(); ++itr) { |
1668 const int64_t tracker_id = *itr; | 1668 const int64_t tracker_id = *itr; |
1669 FileTracker tracker; | 1669 FileTracker tracker; |
1670 if (!index_->GetFileTracker(tracker_id, &tracker)) { | 1670 if (!index_->GetFileTracker(tracker_id, &tracker)) { |
1671 NOTREACHED(); | 1671 NOTREACHED(); |
1672 continue; | 1672 continue; |
1673 } | 1673 } |
1674 | 1674 |
1675 base::DictionaryValue* dict = new base::DictionaryValue; | 1675 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue); |
1676 base::FilePath path = BuildDisplayPathForTracker(tracker); | 1676 base::FilePath path = BuildDisplayPathForTracker(tracker); |
1677 dict->SetString("tracker_id", base::Int64ToString(tracker_id)); | 1677 dict->SetString("tracker_id", base::Int64ToString(tracker_id)); |
1678 dict->SetString("path", path.AsUTF8Unsafe()); | 1678 dict->SetString("path", path.AsUTF8Unsafe()); |
1679 dict->SetString("file_id", tracker.file_id()); | 1679 dict->SetString("file_id", tracker.file_id()); |
1680 TrackerKind tracker_kind = tracker.tracker_kind(); | 1680 TrackerKind tracker_kind = tracker.tracker_kind(); |
1681 dict->SetString( | 1681 dict->SetString( |
1682 "tracker_kind", | 1682 "tracker_kind", |
1683 tracker_kind == TRACKER_KIND_APP_ROOT ? "AppRoot" : | 1683 tracker_kind == TRACKER_KIND_APP_ROOT ? "AppRoot" : |
1684 tracker_kind == TRACKER_KIND_DISABLED_APP_ROOT ? "Disabled App" : | 1684 tracker_kind == TRACKER_KIND_DISABLED_APP_ROOT ? "Disabled App" : |
1685 tracker.tracker_id() == GetSyncRootTrackerID() ? "SyncRoot" : | 1685 tracker.tracker_id() == GetSyncRootTrackerID() ? "SyncRoot" : |
1686 "Regular"); | 1686 "Regular"); |
1687 dict->SetString("app_id", tracker.app_id()); | 1687 dict->SetString("app_id", tracker.app_id()); |
1688 dict->SetString("active", tracker.active() ? "true" : "false"); | 1688 dict->SetString("active", tracker.active() ? "true" : "false"); |
1689 dict->SetString("dirty", tracker.dirty() ? "true" : "false"); | 1689 dict->SetString("dirty", tracker.dirty() ? "true" : "false"); |
1690 dict->SetString("folder_listing", | 1690 dict->SetString("folder_listing", |
1691 tracker.needs_folder_listing() ? "needed" : "no"); | 1691 tracker.needs_folder_listing() ? "needed" : "no"); |
1692 | 1692 |
1693 bool is_demoted = index_->IsDemotedDirtyTracker(tracker.tracker_id()); | 1693 bool is_demoted = index_->IsDemotedDirtyTracker(tracker.tracker_id()); |
1694 dict->SetString("demoted", is_demoted ? "true" : "false"); | 1694 dict->SetString("demoted", is_demoted ? "true" : "false"); |
1695 if (tracker.has_synced_details()) { | 1695 if (tracker.has_synced_details()) { |
1696 const FileDetails& details = tracker.synced_details(); | 1696 const FileDetails& details = tracker.synced_details(); |
1697 dict->SetString("title", details.title()); | 1697 dict->SetString("title", details.title()); |
1698 dict->SetString("kind", FileKindToString(details.file_kind())); | 1698 dict->SetString("kind", FileKindToString(details.file_kind())); |
1699 dict->SetString("md5", details.md5()); | 1699 dict->SetString("md5", details.md5()); |
1700 dict->SetString("etag", details.etag()); | 1700 dict->SetString("etag", details.etag()); |
1701 dict->SetString("missing", details.missing() ? "true" : "false"); | 1701 dict->SetString("missing", details.missing() ? "true" : "false"); |
1702 dict->SetString("change_id", base::Int64ToString(details.change_id())); | 1702 dict->SetString("change_id", base::Int64ToString(details.change_id())); |
1703 } | 1703 } |
1704 trackers->Append(dict); | 1704 trackers->Append(std::move(dict)); |
1705 } | 1705 } |
1706 return trackers; | 1706 return trackers; |
1707 } | 1707 } |
1708 | 1708 |
1709 std::unique_ptr<base::ListValue> MetadataDatabase::DumpMetadata() { | 1709 std::unique_ptr<base::ListValue> MetadataDatabase::DumpMetadata() { |
1710 std::unique_ptr<base::ListValue> files(new base::ListValue); | 1710 std::unique_ptr<base::ListValue> files(new base::ListValue); |
1711 | 1711 |
1712 // Append the first element for metadata. | 1712 // Append the first element for metadata. |
1713 base::DictionaryValue* metadata = new base::DictionaryValue; | 1713 std::unique_ptr<base::DictionaryValue> metadata(new base::DictionaryValue); |
1714 const char *fileKeys[] = { | 1714 const char *fileKeys[] = { |
1715 "file_id", "title", "type", "md5", "etag", "missing", | 1715 "file_id", "title", "type", "md5", "etag", "missing", |
1716 "change_id", "parents" | 1716 "change_id", "parents" |
1717 }; | 1717 }; |
1718 std::vector<std::string> key_strings( | 1718 std::vector<std::string> key_strings( |
1719 fileKeys, fileKeys + arraysize(fileKeys)); | 1719 fileKeys, fileKeys + arraysize(fileKeys)); |
1720 base::ListValue* keys = new base::ListValue; | 1720 base::ListValue* keys = new base::ListValue; |
1721 keys->AppendStrings(key_strings); | 1721 keys->AppendStrings(key_strings); |
1722 metadata->SetString("title", "Metadata"); | 1722 metadata->SetString("title", "Metadata"); |
1723 metadata->Set("keys", keys); | 1723 metadata->Set("keys", keys); |
1724 files->Append(metadata); | 1724 files->Append(std::move(metadata)); |
1725 | 1725 |
1726 // Append metadata data. | 1726 // Append metadata data. |
1727 std::vector<std::string> metadata_ids(index_->GetAllMetadataIDs()); | 1727 std::vector<std::string> metadata_ids(index_->GetAllMetadataIDs()); |
1728 for (std::vector<std::string>::const_iterator itr = metadata_ids.begin(); | 1728 for (std::vector<std::string>::const_iterator itr = metadata_ids.begin(); |
1729 itr != metadata_ids.end(); ++itr) { | 1729 itr != metadata_ids.end(); ++itr) { |
1730 const std::string& file_id = *itr; | 1730 const std::string& file_id = *itr; |
1731 FileMetadata file; | 1731 FileMetadata file; |
1732 if (!index_->GetFileMetadata(file_id, &file)) { | 1732 if (!index_->GetFileMetadata(file_id, &file)) { |
1733 NOTREACHED(); | 1733 NOTREACHED(); |
1734 continue; | 1734 continue; |
1735 } | 1735 } |
1736 | 1736 |
1737 base::DictionaryValue* dict = new base::DictionaryValue; | 1737 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue); |
1738 dict->SetString("file_id", file_id); | 1738 dict->SetString("file_id", file_id); |
1739 if (file.has_details()) { | 1739 if (file.has_details()) { |
1740 const FileDetails& details = file.details(); | 1740 const FileDetails& details = file.details(); |
1741 dict->SetString("title", details.title()); | 1741 dict->SetString("title", details.title()); |
1742 dict->SetString("type", FileKindToString(details.file_kind())); | 1742 dict->SetString("type", FileKindToString(details.file_kind())); |
1743 dict->SetString("md5", details.md5()); | 1743 dict->SetString("md5", details.md5()); |
1744 dict->SetString("etag", details.etag()); | 1744 dict->SetString("etag", details.etag()); |
1745 dict->SetString("missing", details.missing() ? "true" : "false"); | 1745 dict->SetString("missing", details.missing() ? "true" : "false"); |
1746 dict->SetString("change_id", base::Int64ToString(details.change_id())); | 1746 dict->SetString("change_id", base::Int64ToString(details.change_id())); |
1747 | 1747 |
1748 std::vector<std::string> parents; | 1748 std::vector<std::string> parents; |
1749 for (int i = 0; i < details.parent_folder_ids_size(); ++i) | 1749 for (int i = 0; i < details.parent_folder_ids_size(); ++i) |
1750 parents.push_back(details.parent_folder_ids(i)); | 1750 parents.push_back(details.parent_folder_ids(i)); |
1751 dict->SetString("parents", base::JoinString(parents, ",")); | 1751 dict->SetString("parents", base::JoinString(parents, ",")); |
1752 } | 1752 } |
1753 files->Append(dict); | 1753 files->Append(std::move(dict)); |
1754 } | 1754 } |
1755 return files; | 1755 return files; |
1756 } | 1756 } |
1757 | 1757 |
1758 void MetadataDatabase::AttachSyncRoot( | 1758 void MetadataDatabase::AttachSyncRoot( |
1759 const google_apis::FileResource& sync_root_folder) { | 1759 const google_apis::FileResource& sync_root_folder) { |
1760 std::unique_ptr<FileMetadata> sync_root_metadata = | 1760 std::unique_ptr<FileMetadata> sync_root_metadata = |
1761 CreateFileMetadataFromFileResource(GetLargestKnownChangeID(), | 1761 CreateFileMetadataFromFileResource(GetLargestKnownChangeID(), |
1762 sync_root_folder); | 1762 sync_root_folder); |
1763 std::unique_ptr<FileTracker> sync_root_tracker = | 1763 std::unique_ptr<FileTracker> sync_root_tracker = |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1804 return false; | 1804 return false; |
1805 | 1805 |
1806 if (!parents.empty()) | 1806 if (!parents.empty()) |
1807 return false; | 1807 return false; |
1808 | 1808 |
1809 return true; | 1809 return true; |
1810 } | 1810 } |
1811 | 1811 |
1812 } // namespace drive_backend | 1812 } // namespace drive_backend |
1813 } // namespace sync_file_system | 1813 } // namespace sync_file_system |
OLD | NEW |