Commit ee08a183 authored by Pavel Feldman's avatar Pavel Feldman Committed by Commit Bot

DevTools: introduce Page.getFrameTree that would be public and can be used...

DevTools: introduce Page.getFrameTree that would be public and can be used instead of getResourceTree.

Change-Id: I451842c1e0feb3c35c1ad0ed588733a855b21954
Reviewed-on: https://chromium-review.googlesource.com/744978Reviewed-by: default avatarJoel Einbinder <einbinder@chromium.org>
Commit-Queue: Pavel Feldman <pfeldman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#512905}
parent 59e3a98e
Tests Page.getFrameTree protocol method.
frame: undefined
frame: a
frame: b
frame: d
(async function(testRunner) {
var {page, session, dp} = await testRunner.startBlank('Tests Page.getFrameTree protocol method.');
await dp.Page.enable();
dp.Page.onFrameNavigated(async result => {
var name = result.params.frame.name;
if (name !== 'd')
return;
var frameTreeResponse = await dp.Page.getFrameTree();
printFrameTree('', frameTreeResponse.result.frameTree);
testRunner.completeTest();
});
page.loadHTML(
`<iframe name='a' src='about:blank'></iframe>
<iframe name='b' src='data:text/html,%3Ciframe%20name=%22d%22%20src=%22about:blank%22%3E%3C/iframe%3E'></iframe>`);
function printFrameTree(indent, frameTree) {
testRunner.log(`${indent}frame: ${frameTree.frame.name}`);
if (frameTree.childFrames)
frameTree.childFrames.forEach(printFrameTree.bind(null, `${indent} `));
}
})
......@@ -570,6 +570,12 @@ static HeapVector<Member<Resource>> CachedResourcesForFrame(LocalFrame* frame,
Response InspectorPageAgent::getResourceTree(
std::unique_ptr<protocol::Page::FrameResourceTree>* object) {
*object = BuildObjectForResourceTree(inspected_frames_->Root());
return Response::OK();
}
Response InspectorPageAgent::getFrameTree(
std::unique_ptr<protocol::Page::FrameTree>* object) {
*object = BuildObjectForFrameTree(inspected_frames_->Root());
return Response::OK();
}
......@@ -870,8 +876,28 @@ std::unique_ptr<protocol::Page::Frame> InspectorPageAgent::BuildObjectForFrame(
return frame_object;
}
std::unique_ptr<protocol::Page::FrameResourceTree>
std::unique_ptr<protocol::Page::FrameTree>
InspectorPageAgent::BuildObjectForFrameTree(LocalFrame* frame) {
std::unique_ptr<protocol::Page::FrameTree> result =
protocol::Page::FrameTree::create()
.setFrame(BuildObjectForFrame(frame))
.build();
std::unique_ptr<protocol::Array<protocol::Page::FrameTree>> children_array;
for (Frame* child = frame->Tree().FirstChild(); child;
child = child->Tree().NextSibling()) {
if (!child->IsLocalFrame())
continue;
if (!children_array)
children_array = protocol::Array<protocol::Page::FrameTree>::create();
children_array->addItem(BuildObjectForFrameTree(ToLocalFrame(child)));
}
result->setChildFrames(std::move(children_array));
return result;
}
std::unique_ptr<protocol::Page::FrameResourceTree>
InspectorPageAgent::BuildObjectForResourceTree(LocalFrame* frame) {
std::unique_ptr<protocol::Page::Frame> frame_object =
BuildObjectForFrame(frame);
std::unique_ptr<protocol::Array<protocol::Page::FrameResource>> subresources =
......@@ -924,7 +950,7 @@ InspectorPageAgent::BuildObjectForFrameTree(LocalFrame* frame) {
if (!children_array)
children_array =
protocol::Array<protocol::Page::FrameResourceTree>::create();
children_array->addItem(BuildObjectForFrameTree(ToLocalFrame(child)));
children_array->addItem(BuildObjectForResourceTree(ToLocalFrame(child)));
}
result->setChildFrames(std::move(children_array));
return result;
......
......@@ -128,6 +128,8 @@ class CORE_EXPORT InspectorPageAgent final
protocol::Response setAdBlockingEnabled(bool) override;
protocol::Response getResourceTree(
std::unique_ptr<protocol::Page::FrameResourceTree>* frame_tree) override;
protocol::Response getFrameTree(
std::unique_ptr<protocol::Page::FrameTree>*) override;
void getResourceContent(const String& frame_id,
const String& url,
std::unique_ptr<GetResourceContentCallback>) override;
......@@ -216,7 +218,9 @@ class CORE_EXPORT InspectorPageAgent final
void PageLayoutInvalidated(bool resized);
std::unique_ptr<protocol::Page::Frame> BuildObjectForFrame(LocalFrame*);
std::unique_ptr<protocol::Page::FrameResourceTree> BuildObjectForFrameTree(
std::unique_ptr<protocol::Page::FrameTree> BuildObjectForFrameTree(
LocalFrame*);
std::unique_ptr<protocol::Page::FrameResourceTree> BuildObjectForResourceTree(
LocalFrame*);
Member<InspectedFrames> inspected_frames_;
v8_inspector::V8InspectorSession* v8_session_;
......
......@@ -166,6 +166,15 @@
],
"experimental": true
},
{
"id": "FrameTree",
"type": "object",
"description": "Information about the Frame hierarchy.",
"properties": [
{ "name": "frame", "$ref": "Frame", "description": "Frame information for this tree item." },
{ "name": "childFrames", "type": "array", "optional": true, "items": { "$ref": "FrameTree" }, "description": "Child frames." }
]
},
{
"id": "ScriptIdentifier",
"type": "string",
......@@ -408,6 +417,13 @@
],
"experimental": true
},
{
"name": "getFrameTree",
"description": "Returns present frame tree structure.",
"returns": [
{ "name": "frameTree", "$ref": "FrameTree", "description": "Present frame tree structure." }
]
},
{
"name": "getResourceContent",
"description": "Returns content of the given resource.",
......
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