| // Copyright 2014 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/browser/devtools/protocol/dom_handler.h" |
| |
| #include "base/strings/utf_string_conversions.h" |
| #include "build/build_config.h" |
| #include "content/browser/child_process_security_policy_impl.h" |
| #include "content/browser/renderer_host/render_frame_host_impl.h" |
| |
| namespace content { |
| namespace protocol { |
| |
| DOMHandler::DOMHandler(bool allow_file_access) |
| : DevToolsDomainHandler(DOM::Metainfo::domainName), |
| host_(nullptr), |
| allow_file_access_(allow_file_access) {} |
| |
| DOMHandler::~DOMHandler() = default; |
| |
| void DOMHandler::Wire(UberDispatcher* dispatcher) { |
| DOM::Dispatcher::wire(dispatcher, this); |
| } |
| |
| void DOMHandler::SetRenderer(int process_host_id, |
| RenderFrameHostImpl* frame_host) { |
| host_ = frame_host; |
| } |
| |
| Response DOMHandler::Disable() { |
| return Response::Success(); |
| } |
| |
| Response DOMHandler::SetFileInputFiles( |
| std::unique_ptr<protocol::Array<std::string>> files, |
| std::optional<DOM::NodeId> node_id, |
| std::optional<DOM::BackendNodeId> backend_node_id, |
| std::optional<String> in_object_id) { |
| if (!allow_file_access_) |
| return Response::ServerError("Not allowed"); |
| if (host_) { |
| for (const std::string& file : *files) { |
| ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile( |
| host_->GetProcess()->GetDeprecatedID(), |
| base::FilePath::FromUTF8Unsafe(file)); |
| } |
| } |
| return Response::FallThrough(); |
| } |
| |
| } // namespace protocol |
| } // namespace content |