Commit 4d99b6c5 authored by Pavel Feldman's avatar Pavel Feldman Committed by Commit Bot

DevTools: accept backendNodeId and object as a node identifier in selected DOM domain methods.

Change-Id: I73a4bca08180684a447a1e41c4e268e322a8492d
Reviewed-on: https://chromium-review.googlesource.com/568714Reviewed-by: default avatarAndrey Lushnikov <lushnikov@chromium.org>
Commit-Queue: Pavel Feldman <pfeldman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#486198}
parent 2b21ab04
......@@ -33,8 +33,10 @@ Response DOMHandler::Disable() {
}
Response DOMHandler::SetFileInputFiles(
DOM::NodeId node_id,
std::unique_ptr<protocol::Array<std::string>> files) {
std::unique_ptr<protocol::Array<std::string>> files,
Maybe<DOM::NodeId> node_id,
Maybe<DOM::BackendNodeId> backend_node_id,
Maybe<String> in_object_id) {
if (host_) {
for (size_t i = 0; i < files->length(); i++) {
#if defined(OS_WIN)
......
......@@ -26,8 +26,10 @@ class DOMHandler : public DevToolsDomainHandler,
Response Disable() override;
Response SetFileInputFiles(
DOM::NodeId node_id,
std::unique_ptr<protocol::Array<std::string>> files) override;
std::unique_ptr<protocol::Array<std::string>> files,
Maybe<DOM::NodeId> node_id,
Maybe<DOM::BackendNodeId> backend_node_id,
Maybe<String> in_object_id) override;
private:
RenderFrameHostImpl* host_;
......
......@@ -13,7 +13,7 @@
"domain": "DOM",
"include": ["setFileInputFiles"],
"include_events": [],
"include_types": ["NodeId", "RGBA"]
"include_types": ["NodeId", "BackendNodeId", "RGBA"]
},
{
"domain": "Emulation",
......
......@@ -349,6 +349,27 @@ Response InspectorDOMAgent::AssertNode(int node_id, Node*& node) {
return Response::OK();
}
Response InspectorDOMAgent::AssertNode(
const protocol::Maybe<int>& node_id,
const protocol::Maybe<int>& backend_node_id,
const protocol::Maybe<String>& object_id,
Node*& node) {
if (node_id.isJust())
return AssertNode(node_id.fromJust(), node);
if (backend_node_id.isJust()) {
node = DOMNodeIds::NodeForId(backend_node_id.fromJust());
return !node ? Response::Error("No node found for given backend id")
: Response::OK();
}
if (object_id.isJust())
return NodeForRemoteObjectId(object_id.fromJust(), node);
return Response::Error(
"Either nodeId, backendNodeId or objectId must be specified");
}
Response InspectorDOMAgent::AssertElement(int node_id, Element*& element) {
Node* node = nullptr;
Response response = AssertNode(node_id, node);
......@@ -1212,12 +1233,16 @@ Response InspectorDOMAgent::markUndoableState() {
return Response::OK();
}
Response InspectorDOMAgent::focus(int node_id) {
Element* element = nullptr;
Response response = AssertElement(node_id, element);
Response InspectorDOMAgent::focus(Maybe<int> node_id,
Maybe<int> backend_node_id,
Maybe<String> object_id) {
Node* node = nullptr;
Response response = AssertNode(node_id, backend_node_id, object_id, node);
if (!response.isSuccess())
return response;
if (!node->IsElementNode())
return Response::Error("Node is not an Element");
Element* element = ToElement(node);
element->GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets();
if (!element->IsFocusable())
return Response::Error("Element is not focusable");
......@@ -1226,10 +1251,12 @@ Response InspectorDOMAgent::focus(int node_id) {
}
Response InspectorDOMAgent::setFileInputFiles(
int node_id,
std::unique_ptr<protocol::Array<String>> files) {
std::unique_ptr<protocol::Array<String>> files,
Maybe<int> node_id,
Maybe<int> backend_node_id,
Maybe<String> object_id) {
Node* node = nullptr;
Response response = AssertNode(node_id, node);
Response response = AssertNode(node_id, backend_node_id, object_id, node);
if (!response.isSuccess())
return response;
if (!isHTMLInputElement(*node) ||
......@@ -1244,10 +1271,12 @@ Response InspectorDOMAgent::setFileInputFiles(
}
Response InspectorDOMAgent::getBoxModel(
int node_id,
Maybe<int> node_id,
Maybe<int> backend_node_id,
Maybe<String> object_id,
std::unique_ptr<protocol::DOM::BoxModel>* model) {
Node* node = nullptr;
Response response = AssertNode(node_id, node);
Response response = AssertNode(node_id, backend_node_id, object_id, node);
if (!response.isSuccess())
return response;
......
......@@ -172,12 +172,18 @@ class CORE_EXPORT InspectorDOMAgent final
protocol::Response undo() override;
protocol::Response redo() override;
protocol::Response markUndoableState() override;
protocol::Response focus(int node_id) override;
protocol::Response focus(protocol::Maybe<int> node_id,
protocol::Maybe<int> backend_node_id,
protocol::Maybe<String> object_id) override;
protocol::Response setFileInputFiles(
int node_id,
std::unique_ptr<protocol::Array<String>> files) override;
std::unique_ptr<protocol::Array<String>> files,
protocol::Maybe<int> node_id,
protocol::Maybe<int> backend_node_id,
protocol::Maybe<String> object_id) override;
protocol::Response getBoxModel(
int node_id,
protocol::Maybe<int> node_id,
protocol::Maybe<int> backend_node_id,
protocol::Maybe<String> object_id,
std::unique_ptr<protocol::DOM::BoxModel>*) override;
protocol::Response getNodeForLocation(
int x,
......@@ -246,6 +252,10 @@ class CORE_EXPORT InspectorDOMAgent final
HeapVector<Member<Node>>* result);
protocol::Response AssertNode(int node_id, Node*&);
protocol::Response AssertNode(const protocol::Maybe<int>& node_id,
const protocol::Maybe<int>& backend_node_id,
const protocol::Maybe<String>& object_id,
Node*&);
protocol::Response AssertElement(int node_id, Element*&);
Document* GetDocument() const { return document_.Get(); }
......
......@@ -433,20 +433,8 @@ Response InspectorOverlayAgent::highlightNode(
Maybe<int> backend_node_id,
Maybe<String> object_id) {
Node* node = nullptr;
Response response;
if (node_id.isJust()) {
response = dom_agent_->AssertNode(node_id.fromJust(), node);
} else if (backend_node_id.isJust()) {
node = DOMNodeIds::NodeForId(backend_node_id.fromJust());
response = !node ? Response::Error("No node found for given backend id")
: Response::OK();
} else if (object_id.isJust()) {
response = dom_agent_->NodeForRemoteObjectId(object_id.fromJust(), node);
} else {
response = Response::Error(
"Either nodeId, backendNodeId or objectId must be specified");
}
Response response =
dom_agent_->AssertNode(node_id, backend_node_id, object_id, node);
if (!response.isSuccess())
return response;
......
......@@ -2699,7 +2699,9 @@
{
"name": "focus",
"parameters": [
{ "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to focus." }
{ "name": "nodeId", "$ref": "NodeId", "optional": true, "description": "Identifier of the node." },
{ "name": "backendNodeId", "$ref": "BackendNodeId", "optional": true, "description": "Identifier of the backend node." },
{ "name": "objectId", "$ref": "Runtime.RemoteObjectId", "optional": true, "description": "JavaScript object id of the node wrapper." }
],
"description": "Focuses the given element.",
"experimental": true
......@@ -2707,8 +2709,10 @@
{
"name": "setFileInputFiles",
"parameters": [
{ "name": "nodeId", "$ref": "NodeId", "description": "Id of the file input node to set files for." },
{ "name": "files", "type": "array", "items": { "type": "string" }, "description": "Array of file paths to set." }
{ "name": "files", "type": "array", "items": { "type": "string" }, "description": "Array of file paths to set." },
{ "name": "nodeId", "$ref": "NodeId", "optional": true, "description": "Identifier of the node." },
{ "name": "backendNodeId", "$ref": "BackendNodeId", "optional": true, "description": "Identifier of the backend node." },
{ "name": "objectId", "$ref": "Runtime.RemoteObjectId", "optional": true, "description": "JavaScript object id of the node wrapper." }
],
"description": "Sets files for the given file input element.",
"experimental": true
......@@ -2716,7 +2720,9 @@
{
"name": "getBoxModel",
"parameters": [
{ "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to get box model for." }
{ "name": "nodeId", "$ref": "NodeId", "optional": true, "description": "Identifier of the node." },
{ "name": "backendNodeId", "$ref": "BackendNodeId", "optional": true, "description": "Identifier of the backend node." },
{ "name": "objectId", "$ref": "Runtime.RemoteObjectId", "optional": true, "description": "JavaScript object id of the node wrapper." }
],
"returns": [
{ "name": "model", "$ref": "BoxModel", "description": "Box model for the node." }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment