blob: 2157b770bd0983519ffb9e6e3c6509e79131b15a [file] [log] [blame]
<import src="/sky/framework/xmlhttprequest.sky" as="XMLHttpRequest" />
<script>
function Page(delegate) {
this.delegate_ = delegate;
}
Page.prototype.enable = function() {
};
Page.prototype.canScreencast = function() {
return {
result: false
};
};
Page.prototype.canEmulate = function() {
return {
result: false
};
};
Page.prototype.getResourceContent = function(params, messageId) {
var request = new XMLHttpRequest;
request.onload = function() {
var message = {
'content' : request.responseText,
};
this.delegate_.sendResponse(messageId, message);
}.bind(this);
request.open("GET", params.url);
request.send();
return this.delegate_.ASYNC_RESPONSE;
};
// FIXME: ES6 has Array.from which theoretically does this.
function arrayFromIterator(iterator) {
var a = [];
for (var e of iterator)
a.push(e);
return a;
}
// FIXME: NodeList will soon inherit from array.
function forEachInNodeList(array, callback, scope) {
for (var i = 0; i < array.length; i++) {
callback.call(scope, array[i]);
}
};
function addResource(map, url, type, mimeType) {
// Be sure to string the url object since has(new Object)
// will always return false.
var absoluteURL = String(new URL(url, document.URL));
if (map.has(absoluteURL))
return;
map.set(absoluteURL, {
'url': String(absoluteURL),
'type': type,
'mimeType': mimeType,
})
}
function resourcesMapForSubtree(root_doc) {
var map = new Map;
var roots = [root_doc];
while (roots.length) {
var root = roots.pop();
var elements = root.querySelectorAll('*');
forEachInNodeList(elements, function(element) {
if (element.tagName == "import") {
// FIXME: It's no longer possible to walk into an import. :(
// roots.push(element.import);
addResource(map, element.getAttribute('src'), 'Document', 'text/html');
} else if (element.tagName == "img") {
// FIXME: Can't determine the type of an image from the DOM.
addResource(map, element.getAttribute('src'), 'Image', 'image/unknown');
}
if (element.shadowRoot) {
roots.push(element.shadowRoot);
}
});
}
return map;
}
Page.prototype.getResourceTree = function() {
// Unclear if this is all needed, but if we don't return something here
// the inspector hits an exception in WebInspector.ResourceTreeModel.
return {
"frameTree": {
"frame": {
"id": "1",
"loaderId": "1",
"url": String(document.URL),
"mimeType": "text/html",
"securityOrigin": String(document.URL),
},
"resources": arrayFromIterator(resourcesMapForSubtree(document).values()),
}
};
};
module.exports = Page;
</script>