/**
* @override
* @param {string} url
* @param {string} content
* @param {boolean} forceSaveAs
* 例如: memory-> profiles ->heap snapshots 中的每一项的save会调用这里
*/
save(url, content, forceSaveAs) {
console.log('host File: snapshot save', url, content);
let buffer = this._urlsBeingSaved.get(url);
if (!buffer) {
buffer = [];
this._urlsBeingSaved.set(url, buffer);
}
buffer.push(content);
this.events.dispatchEventToListeners(InspectorFrontendHostAPI.Events.SavedURL, {url, fileSystemPath: url});
}
/**
* @override
* @param {string} url
* @param {string} content
* 将Heap-20190323T153902.heapsnapshot(blobId) 形式的路径 和内容放到buffer中
*/
append(url, content) {
console.log('host File: snapshot append', url, content);
const buffer = this._urlsBeingSaved.get(url);
buffer.push(content);
this.events.dispatchEventToListeners(InspectorFrontendHostAPI.Events.AppendedToURL, url);
}
/**
* @override
* @param {string} url
*/
close(url) {
console.log('host File: close ')
const buffer = this._urlsBeingSaved.get(url);
this._urlsBeingSaved.delete(url);
const fileName = url ? url.trimURL().removeURLFragment() : '';
const link = createElement('a');
link.download = fileName;
const blob = new Blob([buffer.join('')], {type: 'text/plain'});
document.body.appendChild(link)
link.href = URL.createObjectURL(blob); // 这里生成的链接会一直存在直到关闭标签
}