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

Unified Diff: chrome/browser/ui/webui/chromeos/drive_internals_ui.cc

Issue 10825062: gdata: Add Cache Contents section to chrome:drive-internals (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/chromeos/drive_internals.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/chromeos/drive_internals_ui.cc
diff --git a/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc b/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc
index 343c0a6885dadee23f7d76d034874006f806c158..a2eb7357ddffd9dba8cab37d204fbc5dec706903 100644
--- a/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc
@@ -141,7 +141,8 @@ std::string FormatEntry(const FilePath& path,
class DriveInternalsWebUIHandler : public content::WebUIMessageHandler {
public:
DriveInternalsWebUIHandler()
- : weak_ptr_factory_(this) {
+ : num_pending_reads_(0),
+ weak_ptr_factory_(this) {
}
virtual ~DriveInternalsWebUIHandler() {
@@ -166,6 +167,17 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler {
bool hide_hosted_documents,
scoped_ptr<gdata::GDataEntryProtoVector> entries);
+ // Called when GetResourceIdsOfAllFilesOnUIThread() is complete.
+ void OnGetResourceIdsOfAllFiles(
+ const std::vector<std::string>& resource_ids);
+
+ // Called when GetCacheEntryOnUIThread() is complete.
+ void OnGetCacheEntry(const std::string& resource_id,
+ bool success,
+ const gdata::GDataCacheEntry& cache_entry);
+
+ // The number of pending ReadDirectoryByPath() calls.
+ int num_pending_reads_;
base::WeakPtrFactory<DriveInternalsWebUIHandler> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(DriveInternalsWebUIHandler);
};
@@ -225,6 +237,7 @@ void DriveInternalsWebUIHandler::OnGetGCacheContents(
// Start rendering the file system tree as text.
const FilePath root_path = FilePath(gdata::kGDataRootDirectory);
+ ++num_pending_reads_;
system_service->file_system()->ReadDirectoryByPath(
root_path,
base::Bind(&DriveInternalsWebUIHandler::OnReadDirectoryByPath,
@@ -237,32 +250,77 @@ void DriveInternalsWebUIHandler::OnReadDirectoryByPath(
gdata::GDataFileError error,
bool hide_hosted_documents,
scoped_ptr<gdata::GDataEntryProtoVector> entries) {
- if (error != gdata::GDATA_FILE_OK)
- return;
- DCHECK(entries.get());
-
- std::string file_system_as_text;
- for (size_t i = 0; i < entries->size(); ++i) {
- const gdata::GDataEntryProto& entry = (*entries)[i];
- const FilePath current_path = parent_path.Append(
- FilePath::FromUTF8Unsafe(entry.base_name()));
-
- file_system_as_text.append(FormatEntry(current_path, entry) + "\n");
-
- if (entry.file_info().is_directory()) {
- GetSystemService()->file_system()->ReadDirectoryByPath(
- current_path,
- base::Bind(&DriveInternalsWebUIHandler::OnReadDirectoryByPath,
- weak_ptr_factory_.GetWeakPtr(),
- current_path));
+ --num_pending_reads_;
+ if (error == gdata::GDATA_FILE_OK) {
+ DCHECK(entries.get());
+
+ std::string file_system_as_text;
+ for (size_t i = 0; i < entries->size(); ++i) {
+ const gdata::GDataEntryProto& entry = (*entries)[i];
+ const FilePath current_path = parent_path.Append(
+ FilePath::FromUTF8Unsafe(entry.base_name()));
+
+ file_system_as_text.append(FormatEntry(current_path, entry) + "\n");
+
+ if (entry.file_info().is_directory()) {
+ ++num_pending_reads_;
+ GetSystemService()->file_system()->ReadDirectoryByPath(
+ current_path,
+ base::Bind(&DriveInternalsWebUIHandler::OnReadDirectoryByPath,
+ weak_ptr_factory_.GetWeakPtr(),
+ current_path));
+ }
}
+
+ // There may be pending ReadDirectoryByPath() calls, but we can update
+ // the page with what we have now. This results in progressive
+ // updates, which is good for a large file system.
+ const base::StringValue value(file_system_as_text);
+ web_ui()->CallJavascriptFunction("updateFileSystemContents", value);
+ }
+
+ // Start updating the cache contents section once all directories are
+ // processed.
+ if (num_pending_reads_ == 0) {
+ GetSystemService()->cache()->GetResourceIdsOfAllFilesOnUIThread(
+ base::Bind(&DriveInternalsWebUIHandler::OnGetResourceIdsOfAllFiles,
+ weak_ptr_factory_.GetWeakPtr()));
+ }
+}
+
+void DriveInternalsWebUIHandler::OnGetResourceIdsOfAllFiles(
+ const std::vector<std::string>& resource_ids) {
+ for (size_t i = 0; i < resource_ids.size(); ++i) {
+ const std::string& resource_id = resource_ids[i];
+ GetSystemService()->cache()->GetCacheEntryOnUIThread(
+ resource_id,
+ "", // Don't check MD5.
+ base::Bind(&DriveInternalsWebUIHandler::OnGetCacheEntry,
+ weak_ptr_factory_.GetWeakPtr(),
+ resource_id));
+ }
+}
+
+void DriveInternalsWebUIHandler::OnGetCacheEntry(
+ const std::string& resource_id,
+ bool success,
+ const gdata::GDataCacheEntry& cache_entry) {
+ if (!success) {
+ LOG(ERROR) << "Failed to get cache entry: " << resource_id;
+ return;
}
- // There may be pending ReadDirectoryByPath() calls, but we can update
- // the page with what we have now. This results in progressive
- // updates, which is good for a large file system.
- const base::StringValue value(file_system_as_text);
- web_ui()->CallJavascriptFunction("updateFileSystemContents", value);
+ // Convert |cache_entry| into a dictionary.
+ base::DictionaryValue value;
+ value.SetString("resource_id", resource_id);
+ value.SetString("md5", cache_entry.md5());
+ value.SetBoolean("is_present", cache_entry.is_present());
+ value.SetBoolean("is_pinned", cache_entry.is_pinned());
+ value.SetBoolean("is_dirty", cache_entry.is_dirty());
+ value.SetBoolean("is_mounted", cache_entry.is_mounted());
+ value.SetBoolean("is_persistent", cache_entry.is_persistent());
+
+ web_ui()->CallJavascriptFunction("updateCacheContents", value);
}
} // namespace
« no previous file with comments | « chrome/browser/resources/chromeos/drive_internals.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698