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

Unified Diff: chrome/browser/sync_file_system/drive_backend/metadata_database.cc

Issue 107743002: Add 'Dump Database' tab to syncfs-internals (only for v2 for now) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync_file_system/drive_backend/metadata_database.cc
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
index cec2549101b7e05820c2f34d6ef99c57d2171fed..05fee1a17a30ef9851a97147a9f7bc16f54883b8 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
@@ -756,6 +756,23 @@ bool MetadataDatabase::BuildPathForTracker(int64 tracker_id,
return true;
}
+base::FilePath MetadataDatabase::BuildDisplayPathForTracker(
+ const FileTracker& tracker) const {
+ base::FilePath path;
+ if (tracker.active()) {
+ BuildPathForTracker(tracker.tracker_id(), &path);
+ return path;
+ }
+ BuildPathForTracker(tracker.parent_tracker_id(), &path);
+ if (tracker.has_synced_details()) {
+ path = path.Append(
+ base::FilePath::FromUTF8Unsafe(tracker.synced_details().title()));
+ } else {
+ path = path.Append(FILE_PATH_LITERAL("<unknown>"));
+ }
+ return path;
+}
+
bool MetadataDatabase::FindNearestActiveAncestor(
const std::string& app_id,
const base::FilePath& full_path,
@@ -1747,18 +1764,7 @@ scoped_ptr<base::ListValue> MetadataDatabase::DumpFiles(
FileTracker* tracker = tracker_by_id_[tracker_id];
base::DictionaryValue* file = new DictionaryValue;
- base::FilePath path;
- if (tracker->active()) {
- BuildPathForTracker(tracker->tracker_id(), &path);
- } else {
- BuildPathForTracker(tracker->parent_tracker_id(), &path);
- if (tracker->has_synced_details()) {
- path = path.Append(
- base::FilePath::FromUTF8Unsafe(tracker->synced_details().title()));
- } else {
- path = path.Append(FILE_PATH_LITERAL("unknown"));
- }
- }
+ base::FilePath path = BuildDisplayPathForTracker(*tracker);
file->SetString("path", path.AsUTF8Unsafe());
if (tracker->has_synced_details()) {
file->SetString("title", tracker->synced_details().title());
@@ -1782,6 +1788,13 @@ scoped_ptr<base::ListValue> MetadataDatabase::DumpFiles(
return files.Pass();
}
+scoped_ptr<base::ListValue> MetadataDatabase::DumpDatabase() {
+ scoped_ptr<base::ListValue> list(new base::ListValue);
+ list->Append(DumpTrackers().release());
+ list->Append(DumpMetadata().release());
+ return list.Pass();
+}
+
bool MetadataDatabase::HasNewerFileMetadata(const std::string& file_id,
int64 change_id) {
FileByID::const_iterator found = file_by_id_.find(file_id);
@@ -1791,5 +1804,103 @@ bool MetadataDatabase::HasNewerFileMetadata(const std::string& file_id,
return found->second->details().change_id() >= change_id;
}
+scoped_ptr<base::ListValue> MetadataDatabase::DumpTrackers() {
+ scoped_ptr<base::ListValue> trackers(new base::ListValue);
+
+ // Append the first element for metadata.
+ base::DictionaryValue* metadata = new DictionaryValue;
+ const char *trackerKeys[] = {
+ "tracker_id", "path", "file_id", "tracker_kind",
+ "active", "dirty", "folder_listing",
+ "title", "kind", "md5", "etag", "missing", "change_id",
+ };
+ std::vector<std::string> key_strings(
+ trackerKeys, trackerKeys + ARRAYSIZE_UNSAFE(trackerKeys));
+ base::ListValue* keys = new ListValue;
+ keys->AppendStrings(key_strings);
+ metadata->SetString("title", "Trackers");
+ metadata->Set("keys", keys);
+ trackers->Append(metadata);
+
+ // Appends tracker data.
+ for (TrackerByID::const_iterator itr = tracker_by_id_.begin();
+ itr != tracker_by_id_.end(); ++itr) {
+ const FileTracker& tracker = *itr->second;
+ base::DictionaryValue* dict = new DictionaryValue;
+ base::FilePath path = BuildDisplayPathForTracker(tracker);
+ dict->SetString("tracker_id", base::Int64ToString(tracker.tracker_id()));
+ dict->SetString("path", path.AsUTF8Unsafe());
+ dict->SetString("file_id", tracker.file_id());
+ TrackerKind tracker_kind = tracker.tracker_kind();
+ dict->SetString(
+ "tracker_kind",
+ tracker_kind == TRACKER_KIND_APP_ROOT ? "AppRoot" :
+ tracker_kind == TRACKER_KIND_DISABLED_APP_ROOT ? "Disabled App" :
+ tracker.tracker_id() == GetSyncRootTrackerID() ? "SyncRoot" :
+ "regular");
tzik 2013/12/06 07:05:52 s/regular/Regular/?
kinuko 2013/12/06 07:26:23 Done.
+ dict->SetString("active", tracker.active() ? "true" : "false");
+ dict->SetString("dirty", tracker.dirty() ? "true" : "false");
+ dict->SetString("folder_listing",
+ tracker.needs_folder_listing() ? "needed" : "no");
+ if (tracker.has_synced_details()) {
+ const FileDetails& details = tracker.synced_details();
+ dict->SetString("title", details.title());
+ dict->SetString("kind", FileKindToString(details.file_kind()));
+ dict->SetString("md5", details.md5());
+ dict->SetString("etag", details.etag());
+ dict->SetString("missing", details.missing() ? "true" : "false");
+ dict->SetString("change_id", base::Int64ToString(details.change_id()));
+ }
+ trackers->Append(dict);
+ }
+ return trackers.Pass();
+}
+
+scoped_ptr<base::ListValue> MetadataDatabase::DumpMetadata() {
+ scoped_ptr<base::ListValue> files(new base::ListValue);
+
+ // Append the first element for metadata.
+ base::DictionaryValue* metadata = new DictionaryValue;
+ const char *fileKeys[] = {
+ "file_id", "title", "type", "md5", "etag", "missing",
+ "change_id", "parents"
+ };
+ std::vector<std::string> key_strings(
+ fileKeys, fileKeys + ARRAYSIZE_UNSAFE(fileKeys));
+ base::ListValue* keys = new ListValue;
+ keys->AppendStrings(key_strings);
+ metadata->SetString("title", "Metadata");
+ metadata->Set("keys", keys);
+ files->Append(metadata);
+
+ // Appends tracker data.
+ for (FileByID::const_iterator itr = file_by_id_.begin();
+ itr != file_by_id_.end(); ++itr) {
+ const FileMetadata& file = *itr->second;
+
+ base::DictionaryValue* dict = new DictionaryValue;
+ dict->SetString("file_id", file.file_id());
+ if (file.has_details()) {
+ const FileDetails& details = file.details();
+ dict->SetString("title", details.title());
+ dict->SetString("type", FileKindToString(details.file_kind()));
+ dict->SetString("md5", details.md5());
+ dict->SetString("etag", details.etag());
+ dict->SetString("missing", details.missing() ? "true" : "false");
+ dict->SetString("change_id", base::Int64ToString(details.change_id()));
+
+ std::string parents;
+ parents.reserve(details.parent_folder_ids_size() * 32);
+ for (int i = 0; i < details.parent_folder_ids_size(); ++i) {
+ parents.append(details.parent_folder_ids(i));
+ parents.append(",");
+ }
+ dict->SetString("parents", parents);
+ }
+ files->Append(dict);
+ }
+ return files.Pass();
+}
+
} // namespace drive_backend
} // namespace sync_file_system

Powered by Google App Engine
This is Rietveld 408576698