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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/resources/chromeos/drive_internals.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/ui/webui/chromeos/drive_internals_ui.h" 5 #include "chrome/browser/ui/webui/chromeos/drive_internals_ui.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/format_macros.h"
10 #include "base/stringprintf.h"
9 #include "base/memory/weak_ptr.h" 11 #include "base/memory/weak_ptr.h"
12 #include "chrome/browser/chromeos/gdata/gdata.pb.h"
10 #include "chrome/browser/chromeos/gdata/gdata_auth_service.h" 13 #include "chrome/browser/chromeos/gdata/gdata_auth_service.h"
11 #include "chrome/browser/chromeos/gdata/gdata_cache.h" 14 #include "chrome/browser/chromeos/gdata/gdata_cache.h"
12 #include "chrome/browser/chromeos/gdata/gdata_documents_service.h" 15 #include "chrome/browser/chromeos/gdata/gdata_documents_service.h"
16 #include "chrome/browser/chromeos/gdata/gdata_file_system_interface.h"
13 #include "chrome/browser/chromeos/gdata/gdata_system_service.h" 17 #include "chrome/browser/chromeos/gdata/gdata_system_service.h"
14 #include "chrome/browser/chromeos/gdata/gdata_util.h" 18 #include "chrome/browser/chromeos/gdata/gdata_util.h"
15 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/ui/webui/chrome_web_ui_data_source.h" 20 #include "chrome/browser/ui/webui/chrome_web_ui_data_source.h"
17 #include "chrome/common/url_constants.h" 21 #include "chrome/common/url_constants.h"
18 #include "content/public/browser/browser_thread.h" 22 #include "content/public/browser/browser_thread.h"
19 #include "content/public/browser/web_ui.h" 23 #include "content/public/browser/web_ui.h"
20 #include "content/public/browser/web_ui_message_handler.h" 24 #include "content/public/browser/web_ui_message_handler.h"
21 #include "grit/browser_resources.h" 25 #include "grit/browser_resources.h"
22 26
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 93
90 private: 94 private:
91 // WebUIMessageHandler override. 95 // WebUIMessageHandler override.
92 virtual void RegisterMessages() OVERRIDE { 96 virtual void RegisterMessages() OVERRIDE {
93 web_ui()->RegisterMessageCallback( 97 web_ui()->RegisterMessageCallback(
94 "pageLoaded", 98 "pageLoaded",
95 base::Bind(&DriveInternalsWebUIHandler::OnPageLoaded, 99 base::Bind(&DriveInternalsWebUIHandler::OnPageLoaded,
96 weak_ptr_factory_.GetWeakPtr())); 100 weak_ptr_factory_.GetWeakPtr()));
97 } 101 }
98 102
103 // Returns a GDataSystemService.
104 gdata::GDataSystemService* GetSystemService() {
105 Profile* profile = Profile::FromWebUI(web_ui());
106 return gdata::GDataSystemServiceFactory::GetForProfile(profile);
107 }
108
99 // Called when the page is first loaded. 109 // Called when the page is first loaded.
100 void OnPageLoaded(const base::ListValue* args) { 110 void OnPageLoaded(const base::ListValue* args) {
101 Profile* profile = Profile::FromWebUI(web_ui()); 111 gdata::GDataSystemService* system_service = GetSystemService();
102 gdata::GDataSystemService* system_service =
103 gdata::GDataSystemServiceFactory::GetForProfile(profile);
104 // |system_service| may be NULL in the guest/incognito mode. 112 // |system_service| may be NULL in the guest/incognito mode.
105 if (!system_service) 113 if (!system_service)
106 return; 114 return;
107 115
108 gdata::DocumentsServiceInterface* documents_service = 116 gdata::DocumentsServiceInterface* documents_service =
109 system_service->docs_service(); 117 system_service->docs_service();
110 DCHECK(documents_service); 118 DCHECK(documents_service);
111 119
112 // Update the auth status section. 120 // Update the auth status section.
113 base::DictionaryValue auth_status; 121 base::DictionaryValue auth_status;
114 auth_status.SetBoolean("has-refresh-token", 122 auth_status.SetBoolean("has-refresh-token",
115 documents_service->HasRefreshToken()); 123 documents_service->HasRefreshToken());
116 auth_status.SetBoolean("has-access-token", 124 auth_status.SetBoolean("has-access-token",
117 documents_service->HasAccessToken()); 125 documents_service->HasAccessToken());
118 web_ui()->CallJavascriptFunction("UpdateAuthStatus", auth_status); 126 web_ui()->CallJavascriptFunction("UpdateAuthStatus", auth_status);
119 127
120 // Start updating the GCache contents section. 128 // Start updating the GCache contents section.
129 Profile* profile = Profile::FromWebUI(web_ui());
121 const FilePath root_path = 130 const FilePath root_path =
122 gdata::GDataCache::GetCacheRootPath(profile); 131 gdata::GDataCache::GetCacheRootPath(profile);
123 base::ListValue* gcache_contents = new ListValue; 132 base::ListValue* gcache_contents = new ListValue;
124 content::BrowserThread::PostBlockingPoolTaskAndReply( 133 content::BrowserThread::PostBlockingPoolTaskAndReply(
125 FROM_HERE, 134 FROM_HERE,
126 base::Bind(&GetGCacheContents, root_path, gcache_contents), 135 base::Bind(&GetGCacheContents, root_path, gcache_contents),
127 base::Bind(&DriveInternalsWebUIHandler::OnGetGCacheContents, 136 base::Bind(&DriveInternalsWebUIHandler::OnGetGCacheContents,
128 weak_ptr_factory_.GetWeakPtr(), 137 weak_ptr_factory_.GetWeakPtr(),
129 base::Owned(gcache_contents))); 138 base::Owned(gcache_contents)));
130 } 139 }
131 140
132 // Called when GetGCacheContents() is complete. 141 // Called when GetGCacheContents() is complete.
133 void OnGetGCacheContents(base::ListValue* gcache_contents) { 142 void OnGetGCacheContents(base::ListValue* gcache_contents) {
134 DCHECK(gcache_contents); 143 DCHECK(gcache_contents);
135 web_ui()->CallJavascriptFunction("UpdateGCacheContents", *gcache_contents); 144 web_ui()->CallJavascriptFunction("UpdateGCacheContents", *gcache_contents);
145
146 // Start updating the file system tree section, if we have access token.
147 gdata::GDataSystemService* system_service = GetSystemService();
148 if (!system_service->docs_service()->HasAccessToken())
149 return;
150
151 // Start rendering the file system tree as text.
152 const FilePath root_path = FilePath(gdata::kGDataRootDirectory);
153 system_service->file_system()->ReadDirectoryByPath(
154 root_path,
155 base::Bind(&DriveInternalsWebUIHandler::OnReadDirectoryByPath,
156 weak_ptr_factory_.GetWeakPtr(),
157 root_path));
136 } 158 }
137 159
160 // Called when ReadDirectoryByPath() is complete.
161 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.
162 const FilePath& parent_path,
163 gdata::GDataFileError error,
164 bool hide_hosted_documents,
165 scoped_ptr<gdata::GDataEntryProtoVector> entries) {
166 if (error != gdata::GDATA_FILE_OK)
167 return;
168
169 DCHECK(entries.get());
170 for (size_t i = 0; i < entries->size(); ++i) {
171 const gdata::GDataEntryProto& entry = (*entries)[i];
172 const FilePath current_path = parent_path.Append(
173 FilePath::FromUTF8Unsafe(entry.base_name()));
174
175 file_system_as_text_.append(FormatEntry(current_path, entry) + "\n");
176
177 if (entry.file_info().is_directory()) {
178 GetSystemService()->file_system()->ReadDirectoryByPath(
179 current_path,
180 base::Bind(&DriveInternalsWebUIHandler::OnReadDirectoryByPath,
181 weak_ptr_factory_.GetWeakPtr(),
182 current_path));
183 }
184 }
185
186 // There may be pending ReadDirectoryByPath() calls, but we can update
187 // the page with what we have now. This results in progressive
188 // updates, which is good for a large file system.
189 const base::StringValue value(file_system_as_text_);
190 web_ui()->CallJavascriptFunction("UpdateFileSystemContents", value);
191 }
192
193 // Formats |entry| into text.
194 std::string FormatEntry(const FilePath& path,
satorux1 2012/07/27 16:13:44 moved this out of the class.
195 const gdata::GDataEntryProto& entry) {
196 using base::StringAppendF;
197 using gdata::util::FormatTimeAsString;
198
199 std::string out;
200 StringAppendF(&out, "%s\n", path.AsUTF8Unsafe().c_str());
201 StringAppendF(&out, " title: %s\n", entry.title().c_str());
202 StringAppendF(&out, " resource_id: %s\n", entry.resource_id().c_str());
203 StringAppendF(&out, " edit_url: %s\n", entry.edit_url().c_str());
204 StringAppendF(&out, " content_url: %s\n", entry.content_url().c_str());
205 StringAppendF(&out, " parent_resource_id: %s\n",
206 entry.parent_resource_id().c_str());
207 StringAppendF(&out, " upload_url: %s\n", entry.upload_url().c_str());
208
209 const gdata::PlatformFileInfoProto& file_info = entry.file_info();
210 StringAppendF(&out, " file_info\n");
211 StringAppendF(&out, " size: %"PRId64"\n", file_info.size());
212 StringAppendF(&out, " is_directory: %d\n", file_info.is_directory());
213 StringAppendF(&out, " is_symbolic_link: %d\n",
214 file_info.is_symbolic_link());
215
216 const base::Time last_modified = base::Time::FromInternalValue(
217 file_info.last_modified());
218 const base::Time last_accessed = base::Time::FromInternalValue(
219 file_info.last_accessed());
220 const base::Time creation_time = base::Time::FromInternalValue(
221 file_info.creation_time());
222 StringAppendF(&out, " last_modified: %s\n",
223 FormatTimeAsString(last_modified).c_str());
224 StringAppendF(&out, " last_accessed: %s\n",
225 FormatTimeAsString(last_accessed).c_str());
226 StringAppendF(&out, " creation_time: %s\n",
227 FormatTimeAsString(creation_time).c_str());
228
229 if (entry.has_file_specific_info()) {
230 const gdata::GDataFileSpecificInfo& file_specific_info =
231 entry.file_specific_info();
232 StringAppendF(&out, " thumbnail_url: %s\n",
233 file_specific_info.thumbnail_url().c_str());
234 StringAppendF(&out, " alternate_url: %s\n",
235 file_specific_info.alternate_url().c_str());
236 StringAppendF(&out, " content_mime_type: %s\n",
237 file_specific_info.content_mime_type().c_str());
238 StringAppendF(&out, " file_md5: %s\n",
239 file_specific_info.file_md5().c_str());
240 StringAppendF(&out, " document_extension: %s\n",
241 file_specific_info.document_extension().c_str());
242 StringAppendF(&out, " is_hosted_document: %d\n",
243 file_specific_info.is_hosted_document());
244 }
245
246 return out;
247 }
248
249 std::string file_system_as_text_;
satorux1 2012/07/27 16:13:44 removed this. instead of sending the entire file
138 base::WeakPtrFactory<DriveInternalsWebUIHandler> weak_ptr_factory_; 250 base::WeakPtrFactory<DriveInternalsWebUIHandler> weak_ptr_factory_;
139 DISALLOW_COPY_AND_ASSIGN(DriveInternalsWebUIHandler); 251 DISALLOW_COPY_AND_ASSIGN(DriveInternalsWebUIHandler);
140 }; 252 };
141 253
142 } // namespace 254 } // namespace
143 255
144 DriveInternalsUI::DriveInternalsUI(content::WebUI* web_ui) 256 DriveInternalsUI::DriveInternalsUI(content::WebUI* web_ui)
145 : WebUIController(web_ui) { 257 : WebUIController(web_ui) {
146 web_ui->AddMessageHandler(new DriveInternalsWebUIHandler()); 258 web_ui->AddMessageHandler(new DriveInternalsWebUIHandler());
147 259
148 ChromeWebUIDataSource* source = 260 ChromeWebUIDataSource* source =
149 new ChromeWebUIDataSource(chrome::kChromeUIDriveInternalsHost); 261 new ChromeWebUIDataSource(chrome::kChromeUIDriveInternalsHost);
150 source->add_resource_path("drive_internals.css", IDR_DRIVE_INTERNALS_CSS); 262 source->add_resource_path("drive_internals.css", IDR_DRIVE_INTERNALS_CSS);
151 source->add_resource_path("drive_internals.js", IDR_DRIVE_INTERNALS_JS); 263 source->add_resource_path("drive_internals.js", IDR_DRIVE_INTERNALS_JS);
152 source->set_default_resource(IDR_DRIVE_INTERNALS_HTML); 264 source->set_default_resource(IDR_DRIVE_INTERNALS_HTML);
153 265
154 Profile* profile = Profile::FromWebUI(web_ui); 266 Profile* profile = Profile::FromWebUI(web_ui);
155 ChromeURLDataManager::AddDataSource(profile, source); 267 ChromeURLDataManager::AddDataSource(profile, source);
156 } 268 }
157 269
158 } // namespace chromeos 270 } // namespace chromeos
OLDNEW
« 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