Index: content/browser/devtools/render_view_devtools_agent_host.cc |
diff --git a/content/browser/devtools/render_view_devtools_agent_host.cc b/content/browser/devtools/render_view_devtools_agent_host.cc |
index 76b69135379022ca243f96d64d160e946ed69d9a..8084e100390f3d2ac33623e47d352192d831fae9 100644 |
--- a/content/browser/devtools/render_view_devtools_agent_host.cc |
+++ b/content/browser/devtools/render_view_devtools_agent_host.cc |
@@ -7,6 +7,7 @@ |
#include "base/base64.h" |
#include "base/basictypes.h" |
#include "base/lazy_instance.h" |
+#include "base/values.h" |
#include "content/browser/child_process_security_policy_impl.h" |
#include "content/browser/devtools/devtools_manager_impl.h" |
#include "content/browser/devtools/render_view_devtools_agent_host.h" |
@@ -147,6 +148,26 @@ RenderViewHost* RenderViewDevToolsAgentHost::GetRenderViewHost() { |
return render_view_host_; |
} |
+void RenderViewDevToolsAgentHost::DispatchOnInspectorBackend( |
+ const std::string& message) { |
+ std::string error; |
+ scoped_ptr<DevToolsProtocol::Command> command( |
+ DevToolsProtocol::ParseCommand(message, &error)); |
+ if (!command) { |
+ OnDispatchOnInspectorFrontend(error); |
+ return; |
+ } |
+ |
+ scoped_ptr<DevToolsProtocol::Response> early_response; |
+ if (command->method() == "DOM.setFileInputFiles") |
pfeldman
2013/02/12 15:03:27
I think we could reuse DomainHandler from DevTools
|
+ early_response = GrantSetFileInputFilesPermissions(*command); |
+ |
+ if (early_response) |
+ OnDispatchOnInspectorFrontend(early_response->Serialize()); |
+ else |
+ DevToolsAgentHostImpl::DispatchOnInspectorBackend(message); |
+} |
+ |
void RenderViewDevToolsAgentHost::SendMessageToAgent(IPC::Message* msg) { |
msg->set_routing_id(render_view_host_->GetRoutingID()); |
render_view_host_->Send(msg); |
@@ -353,4 +374,26 @@ bool RenderViewDevToolsAgentHost::HandleJavaScriptDialog(bool accept) { |
return false; |
} |
+scoped_ptr<DevToolsProtocol::Response> |
+RenderViewDevToolsAgentHost::GrantSetFileInputFilesPermissions( |
+ const DevToolsProtocol::Command& command) { |
+ const base::ListValue* file_list; |
+ if (!command.params()->GetList("files", &file_list)) { |
+ return command.ErrorResponse( |
+ DevToolsProtocol::kErrorInvalidParams, |
+ "Missing or invalid 'files' parameter"); |
+ } |
+ for (size_t i = 0; i < file_list->GetSize(); ++i) { |
+ base::FilePath::StringType file; |
+ if (!file_list->GetString(i, &file)) { |
+ return command.ErrorResponse( |
+ DevToolsProtocol::kErrorInvalidParams, |
+ "'files' must be a list of strings"); |
+ } |
+ ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile( |
+ render_view_host_->GetProcess()->GetID(), base::FilePath(file)); |
+ } |
+ return scoped_ptr<DevToolsProtocol::Response>(); |
+} |
+ |
} // namespace content |