Index: chrome/browser/devtools/devtools_window.cc |
diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc |
index 8c9fbe1dc719d1ce6b91dac0c92b4945af8fd7ef..19594574e26c155b362ee613067628307efcb5a4 100644 |
--- a/chrome/browser/devtools/devtools_window.cc |
+++ b/chrome/browser/devtools/devtools_window.cc |
@@ -46,6 +46,7 @@ |
#include "content/public/browser/web_contents.h" |
#include "content/public/browser/web_contents_view.h" |
#include "content/public/common/bindings_policy.h" |
+#include "content/public/common/content_client.h" |
#include "content/public/common/page_transition_types.h" |
#include "grit/generated_resources.h" |
@@ -96,6 +97,8 @@ void DevToolsWindow::RegisterUserPrefs(PrefServiceSyncable* prefs) { |
PrefServiceSyncable::UNSYNCABLE_PREF); |
prefs->RegisterDictionaryPref(prefs::kDevToolsEditedFiles, |
PrefServiceSyncable::UNSYNCABLE_PREF); |
+ prefs->RegisterDictionaryPref(prefs::kDevToolsFilesystemPaths, |
+ PrefServiceSyncable::UNSYNCABLE_PREF); |
} |
// static |
@@ -215,7 +218,7 @@ DevToolsWindow::DevToolsWindow(WebContents* web_contents, |
height_(-1) { |
frontend_host_ = DevToolsClientHost::CreateDevToolsFrontendHost(web_contents, |
this); |
- file_helper_.reset(new DevToolsFileHelper(profile)); |
+ file_helper_.reset(new DevToolsFileHelper(web_contents, profile)); |
g_instances.Get().push_back(this); |
// Wipe out page icon so that the default application icon is used. |
@@ -507,13 +510,19 @@ WebContents* DevToolsWindow::OpenURLFromTab(WebContents* source, |
} |
void DevToolsWindow::CallClientFunction(const std::string& function_name, |
- const Value* arg) { |
- std::string json; |
- if (arg) |
- base::JSONWriter::Write(arg, &json); |
- |
- string16 javascript = |
- ASCIIToUTF16(function_name + "(" + json + ");"); |
+ const Value* arg1, |
+ const Value* arg2) { |
+ std::string params; |
+ if (arg1) { |
+ std::string json; |
+ base::JSONWriter::Write(arg1, &json); |
+ params.append(json); |
+ if (arg2) { |
+ base::JSONWriter::Write(arg2, &json); |
+ params.append(", " + json); |
+ } |
+ } |
+ string16 javascript = ASCIIToUTF16(function_name + "(" + params + ");"); |
web_contents_->GetRenderViewHost()-> |
ExecuteJavascriptInWebFrame(string16(), javascript); |
} |
@@ -826,6 +835,39 @@ void DevToolsWindow::AppendToFile(const std::string& url, |
url)); |
} |
+namespace { |
+ |
+DictionaryValue* CreateFilesystemValue( |
+ DevToolsFileHelper::Filesystem filesystem) { |
+ DictionaryValue* filesystem_value = new DictionaryValue(); |
+ filesystem_value->SetString("filesystemId", filesystem.filesystem_id); |
+ filesystem_value->SetString("registeredName", filesystem.registered_name); |
+ filesystem_value->SetString("filesystemPath", filesystem.filesystem_path); |
+ return filesystem_value; |
+} |
+ |
+} // namespace |
+ |
+void DevToolsWindow::RequestFilesystems() { |
+ CHECK(content::GetContentClient()->HasWebUIScheme(web_contents_->GetURL())); |
+ file_helper_->RequestFilesystems( |
+ Bind(&DevToolsWindow::FilesystemsLoaded, weak_factory_.GetWeakPtr())); |
+} |
+ |
+void DevToolsWindow::AddFilesystem() { |
+ CHECK(content::GetContentClient()->HasWebUIScheme(web_contents_->GetURL())); |
+ file_helper_->AddFilesystem( |
+ Bind(&DevToolsWindow::FilesystemAdded, weak_factory_.GetWeakPtr())); |
+} |
+ |
+void DevToolsWindow::RemoveFilesystem(const std::string& filesystem_path) { |
+ CHECK(content::GetContentClient()->HasWebUIScheme(web_contents_->GetURL())); |
+ file_helper_->RemoveFilesystem(filesystem_path); |
+ StringValue filesystem_path_value(filesystem_path); |
+ CallClientFunction("InspectorFrontendAPI.filesystemRemoved", |
+ &filesystem_path_value); |
+} |
+ |
void DevToolsWindow::FileSavedAs(const std::string& url) { |
StringValue url_value(url); |
CallClientFunction("InspectorFrontendAPI.savedURL", &url_value); |
@@ -836,6 +878,30 @@ void DevToolsWindow::AppendedTo(const std::string& url) { |
CallClientFunction("InspectorFrontendAPI.appendedToURL", &url_value); |
} |
+void DevToolsWindow::FilesystemsLoaded( |
+ const std::vector<DevToolsFileHelper::Filesystem>& filesystems) { |
+ ListValue filesystems_value; |
+ for (size_t i = 0; i < filesystems.size(); ++i) { |
+ filesystems_value.Append(CreateFilesystemValue(filesystems[i])); |
+ } |
+ CallClientFunction("InspectorFrontendAPI.filesystemsLoaded", |
+ &filesystems_value); |
+} |
+ |
+void DevToolsWindow::FilesystemAdded( |
+ std::string error_string, |
+ const DevToolsFileHelper::Filesystem& filesystem) { |
+ StringValue error_string_value(error_string); |
+ DictionaryValue* filesystem_value = NULL; |
+ if (!filesystem.filesystem_path.empty()) |
+ filesystem_value = CreateFilesystemValue(filesystem); |
+ CallClientFunction("InspectorFrontendAPI.filesystemAdded", |
+ &error_string_value, |
+ filesystem_value); |
+ if (filesystem_value) |
+ delete filesystem_value; |
+} |
+ |
content::JavaScriptDialogCreator* DevToolsWindow::GetJavaScriptDialogCreator() { |
if (inspected_web_contents_ && inspected_web_contents_->GetDelegate()) { |
return inspected_web_contents_->GetDelegate()-> |