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

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

Issue 10821051: gdata: Add File System 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 d667a36cb5924ac062a16e3a3c91815f76ad5ad0..c04562ea3433f258a47fcab41423d63bec9609d9 100644
--- a/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc
@@ -6,10 +6,14 @@
#include "base/bind.h"
#include "base/file_util.h"
+#include "base/format_macros.h"
+#include "base/stringprintf.h"
#include "base/memory/weak_ptr.h"
+#include "chrome/browser/chromeos/gdata/gdata.pb.h"
#include "chrome/browser/chromeos/gdata/gdata_auth_service.h"
#include "chrome/browser/chromeos/gdata/gdata_cache.h"
#include "chrome/browser/chromeos/gdata/gdata_documents_service.h"
+#include "chrome/browser/chromeos/gdata/gdata_file_system_interface.h"
#include "chrome/browser/chromeos/gdata/gdata_system_service.h"
#include "chrome/browser/chromeos/gdata/gdata_util.h"
#include "chrome/browser/profiles/profile.h"
@@ -96,11 +100,15 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler {
weak_ptr_factory_.GetWeakPtr()));
}
+ // Returns a GDataSystemService.
+ gdata::GDataSystemService* GetSystemService() {
+ Profile* profile = Profile::FromWebUI(web_ui());
+ return gdata::GDataSystemServiceFactory::GetForProfile(profile);
+ }
+
// Called when the page is first loaded.
void OnPageLoaded(const base::ListValue* args) {
- Profile* profile = Profile::FromWebUI(web_ui());
- gdata::GDataSystemService* system_service =
- gdata::GDataSystemServiceFactory::GetForProfile(profile);
+ gdata::GDataSystemService* system_service = GetSystemService();
// |system_service| may be NULL in the guest/incognito mode.
if (!system_service)
return;
@@ -118,6 +126,7 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler {
web_ui()->CallJavascriptFunction("UpdateAuthStatus", auth_status);
// Start updating the GCache contents section.
+ Profile* profile = Profile::FromWebUI(web_ui());
const FilePath root_path =
gdata::GDataCache::GetCacheRootPath(profile);
base::ListValue* gcache_contents = new ListValue;
@@ -133,8 +142,111 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler {
void OnGetGCacheContents(base::ListValue* gcache_contents) {
DCHECK(gcache_contents);
web_ui()->CallJavascriptFunction("UpdateGCacheContents", *gcache_contents);
+
+ // Start updating the file system tree section, if we have access token.
+ gdata::GDataSystemService* system_service = GetSystemService();
+ if (!system_service->docs_service()->HasAccessToken())
+ return;
+
+ // Start rendering the file system tree as text.
+ const FilePath root_path = FilePath(gdata::kGDataRootDirectory);
+ system_service->file_system()->ReadDirectoryByPath(
+ root_path,
+ base::Bind(&DriveInternalsWebUIHandler::OnReadDirectoryByPath,
+ weak_ptr_factory_.GetWeakPtr(),
+ root_path));
+ }
+
+ // Called when ReadDirectoryByPath() is complete.
+ void OnReadDirectoryByPath(
achuithb 2012/07/26 23:00:23 I think it's more readable to split the definition
satorux1 2012/07/27 16:13:44 Done.
+ const FilePath& parent_path,
+ gdata::GDataFileError error,
+ bool hide_hosted_documents,
+ scoped_ptr<gdata::GDataEntryProtoVector> entries) {
+ if (error != gdata::GDATA_FILE_OK)
+ return;
+
+ DCHECK(entries.get());
+ 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));
+ }
+ }
+
+ // 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);
+ }
+
+ // Formats |entry| into text.
+ std::string FormatEntry(const FilePath& path,
satorux1 2012/07/27 16:13:44 moved this out of the class.
+ const gdata::GDataEntryProto& entry) {
+ using base::StringAppendF;
+ using gdata::util::FormatTimeAsString;
+
+ std::string out;
+ StringAppendF(&out, "%s\n", path.AsUTF8Unsafe().c_str());
+ StringAppendF(&out, " title: %s\n", entry.title().c_str());
+ StringAppendF(&out, " resource_id: %s\n", entry.resource_id().c_str());
+ StringAppendF(&out, " edit_url: %s\n", entry.edit_url().c_str());
+ StringAppendF(&out, " content_url: %s\n", entry.content_url().c_str());
+ StringAppendF(&out, " parent_resource_id: %s\n",
+ entry.parent_resource_id().c_str());
+ StringAppendF(&out, " upload_url: %s\n", entry.upload_url().c_str());
+
+ const gdata::PlatformFileInfoProto& file_info = entry.file_info();
+ StringAppendF(&out, " file_info\n");
+ StringAppendF(&out, " size: %"PRId64"\n", file_info.size());
+ StringAppendF(&out, " is_directory: %d\n", file_info.is_directory());
+ StringAppendF(&out, " is_symbolic_link: %d\n",
+ file_info.is_symbolic_link());
+
+ const base::Time last_modified = base::Time::FromInternalValue(
+ file_info.last_modified());
+ const base::Time last_accessed = base::Time::FromInternalValue(
+ file_info.last_accessed());
+ const base::Time creation_time = base::Time::FromInternalValue(
+ file_info.creation_time());
+ StringAppendF(&out, " last_modified: %s\n",
+ FormatTimeAsString(last_modified).c_str());
+ StringAppendF(&out, " last_accessed: %s\n",
+ FormatTimeAsString(last_accessed).c_str());
+ StringAppendF(&out, " creation_time: %s\n",
+ FormatTimeAsString(creation_time).c_str());
+
+ if (entry.has_file_specific_info()) {
+ const gdata::GDataFileSpecificInfo& file_specific_info =
+ entry.file_specific_info();
+ StringAppendF(&out, " thumbnail_url: %s\n",
+ file_specific_info.thumbnail_url().c_str());
+ StringAppendF(&out, " alternate_url: %s\n",
+ file_specific_info.alternate_url().c_str());
+ StringAppendF(&out, " content_mime_type: %s\n",
+ file_specific_info.content_mime_type().c_str());
+ StringAppendF(&out, " file_md5: %s\n",
+ file_specific_info.file_md5().c_str());
+ StringAppendF(&out, " document_extension: %s\n",
+ file_specific_info.document_extension().c_str());
+ StringAppendF(&out, " is_hosted_document: %d\n",
+ file_specific_info.is_hosted_document());
+ }
+
+ return out;
}
+ std::string file_system_as_text_;
satorux1 2012/07/27 16:13:44 removed this. instead of sending the entire file
base::WeakPtrFactory<DriveInternalsWebUIHandler> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(DriveInternalsWebUIHandler);
};
« 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