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() { ...@@ -33,8 +33,10 @@ Response DOMHandler::Disable() {
} }
Response DOMHandler::SetFileInputFiles( 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_) { if (host_) {
for (size_t i = 0; i < files->length(); i++) { for (size_t i = 0; i < files->length(); i++) {
#if defined(OS_WIN) #if defined(OS_WIN)
......
...@@ -26,8 +26,10 @@ class DOMHandler : public DevToolsDomainHandler, ...@@ -26,8 +26,10 @@ class DOMHandler : public DevToolsDomainHandler,
Response Disable() override; Response Disable() override;
Response SetFileInputFiles( Response SetFileInputFiles(
DOM::NodeId node_id, std::unique_ptr<protocol::Array<std::string>> files,
std::unique_ptr<protocol::Array<std::string>> files) override; Maybe<DOM::NodeId> node_id,
Maybe<DOM::BackendNodeId> backend_node_id,
Maybe<String> in_object_id) override;
private: private:
RenderFrameHostImpl* host_; RenderFrameHostImpl* host_;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
"domain": "DOM", "domain": "DOM",
"include": ["setFileInputFiles"], "include": ["setFileInputFiles"],
"include_events": [], "include_events": [],
"include_types": ["NodeId", "RGBA"] "include_types": ["NodeId", "BackendNodeId", "RGBA"]
}, },
{ {
"domain": "Emulation", "domain": "Emulation",
......
...@@ -349,6 +349,27 @@ Response InspectorDOMAgent::AssertNode(int node_id, Node*& node) { ...@@ -349,6 +349,27 @@ Response InspectorDOMAgent::AssertNode(int node_id, Node*& node) {
return Response::OK(); 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) { Response InspectorDOMAgent::AssertElement(int node_id, Element*& element) {
Node* node = nullptr; Node* node = nullptr;
Response response = AssertNode(node_id, node); Response response = AssertNode(node_id, node);
...@@ -1212,12 +1233,16 @@ Response InspectorDOMAgent::markUndoableState() { ...@@ -1212,12 +1233,16 @@ Response InspectorDOMAgent::markUndoableState() {
return Response::OK(); return Response::OK();
} }
Response InspectorDOMAgent::focus(int node_id) { Response InspectorDOMAgent::focus(Maybe<int> node_id,
Element* element = nullptr; Maybe<int> backend_node_id,
Response response = AssertElement(node_id, element); Maybe<String> object_id) {
Node* node = nullptr;
Response response = AssertNode(node_id, backend_node_id, object_id, node);
if (!response.isSuccess()) if (!response.isSuccess())
return response; return response;
if (!node->IsElementNode())
return Response::Error("Node is not an Element");
Element* element = ToElement(node);
element->GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets(); element->GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets();
if (!element->IsFocusable()) if (!element->IsFocusable())
return Response::Error("Element is not focusable"); return Response::Error("Element is not focusable");
...@@ -1226,10 +1251,12 @@ Response InspectorDOMAgent::focus(int node_id) { ...@@ -1226,10 +1251,12 @@ Response InspectorDOMAgent::focus(int node_id) {
} }
Response InspectorDOMAgent::setFileInputFiles( 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; Node* node = nullptr;
Response response = AssertNode(node_id, node); Response response = AssertNode(node_id, backend_node_id, object_id, node);
if (!response.isSuccess()) if (!response.isSuccess())
return response; return response;
if (!isHTMLInputElement(*node) || if (!isHTMLInputElement(*node) ||
...@@ -1244,10 +1271,12 @@ Response InspectorDOMAgent::setFileInputFiles( ...@@ -1244,10 +1271,12 @@ Response InspectorDOMAgent::setFileInputFiles(
} }
Response InspectorDOMAgent::getBoxModel( 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) { std::unique_ptr<protocol::DOM::BoxModel>* model) {
Node* node = nullptr; Node* node = nullptr;
Response response = AssertNode(node_id, node); Response response = AssertNode(node_id, backend_node_id, object_id, node);
if (!response.isSuccess()) if (!response.isSuccess())
return response; return response;
......
...@@ -172,12 +172,18 @@ class CORE_EXPORT InspectorDOMAgent final ...@@ -172,12 +172,18 @@ class CORE_EXPORT InspectorDOMAgent final
protocol::Response undo() override; protocol::Response undo() override;
protocol::Response redo() override; protocol::Response redo() override;
protocol::Response markUndoableState() 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( protocol::Response setFileInputFiles(
int node_id, std::unique_ptr<protocol::Array<String>> files,
std::unique_ptr<protocol::Array<String>> files) override; protocol::Maybe<int> node_id,
protocol::Maybe<int> backend_node_id,
protocol::Maybe<String> object_id) override;
protocol::Response getBoxModel( 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; std::unique_ptr<protocol::DOM::BoxModel>*) override;
protocol::Response getNodeForLocation( protocol::Response getNodeForLocation(
int x, int x,
...@@ -246,6 +252,10 @@ class CORE_EXPORT InspectorDOMAgent final ...@@ -246,6 +252,10 @@ class CORE_EXPORT InspectorDOMAgent final
HeapVector<Member<Node>>* result); HeapVector<Member<Node>>* result);
protocol::Response AssertNode(int node_id, Node*&); 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*&); protocol::Response AssertElement(int node_id, Element*&);
Document* GetDocument() const { return document_.Get(); } Document* GetDocument() const { return document_.Get(); }
......
...@@ -433,20 +433,8 @@ Response InspectorOverlayAgent::highlightNode( ...@@ -433,20 +433,8 @@ Response InspectorOverlayAgent::highlightNode(
Maybe<int> backend_node_id, Maybe<int> backend_node_id,
Maybe<String> object_id) { Maybe<String> object_id) {
Node* node = nullptr; Node* node = nullptr;
Response response; Response response =
if (node_id.isJust()) { dom_agent_->AssertNode(node_id, backend_node_id, object_id, node);
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");
}
if (!response.isSuccess()) if (!response.isSuccess())
return response; return response;
......
...@@ -2699,7 +2699,9 @@ ...@@ -2699,7 +2699,9 @@
{ {
"name": "focus", "name": "focus",
"parameters": [ "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.", "description": "Focuses the given element.",
"experimental": true "experimental": true
...@@ -2707,8 +2709,10 @@ ...@@ -2707,8 +2709,10 @@
{ {
"name": "setFileInputFiles", "name": "setFileInputFiles",
"parameters": [ "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.", "description": "Sets files for the given file input element.",
"experimental": true "experimental": true
...@@ -2716,7 +2720,9 @@ ...@@ -2716,7 +2720,9 @@
{ {
"name": "getBoxModel", "name": "getBoxModel",
"parameters": [ "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": [ "returns": [
{ "name": "model", "$ref": "BoxModel", "description": "Box model for the node." } { "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