aboutsummaryrefslogtreecommitdiffstats
path: root/extension
diff options
context:
space:
mode:
authorOmar Rizwan <omar.rizwan@gmail.com>2019-02-25 23:08:52 -0800
committerOmar Rizwan <omar.rizwan@gmail.com>2019-02-25 23:08:52 -0800
commit74c794d75c7205123c4dc37e7a997507b61be98b (patch)
tree184dc9d586576873873cbe91e448a5012a30fbaf /extension
parent9f235eb438752b4618616ea5d19a5d7a7225c647 (diff)
extension: Can read (some) resources in tree/ now!
Also clean up some dead code.
Diffstat (limited to 'extension')
-rw-r--r--extension/background.js67
1 files changed, 42 insertions, 25 deletions
diff --git a/extension/background.js b/extension/background.js
index a0e0294..e75618d 100644
--- a/extension/background.js
+++ b/extension/background.js
@@ -30,29 +30,19 @@ function queryTabs() {
return new Promise((resolve, reject) => chrome.tabs.query({}, resolve));
}
-function sendDebuggerCommand(tab, method, commandParams) {
- return new Promise(resolve => chrome.debugger.sendCommand({tabId: id}, method, commandParams, resolve));
+function sendDebuggerCommand(tabId, method, commandParams) {
+ return new Promise((resolve, reject) =>
+ chrome.debugger.sendCommand({tabId}, method, commandParams, result => {
+ console.log(method, result);
+ if (result) {
+ resolve(result);
+ } else {
+ reject(chrome.runtime.lastError);
+ }
+ })
+ );
}
-const fhManager = (function() {
- const handles = {};
- let nextFh = 0;
- return {
- allocate(obj) { // -> fh
- const fh = nextFh++;
- handles[fh] = obj;
- return fh;
- },
- ref(fh) {
- if (!handles[fh]) throw new UnixError(unix.EIO);
- return handles[fh];
- },
- free(fh) {
- delete handles[fh];
- }
- };
-})();
-
// tabs/by-id/ID/title
// tabs/by-id/ID/url
// tabs/by-id/ID/console
@@ -68,6 +58,9 @@ function pathComponent(path, i) {
const components = path.split('/');
return components[i >= 0 ? i : components.length + i];
}
+function sanitize(s) {
+ return s.replace(/[^A-Za-z0-9_\-\.]/gm, '_');
+}
const debugged = {};
@@ -103,7 +96,7 @@ const router = {
async opendir(path) {
const tabId = parseInt(pathComponent(path, -2));
if (!debugged[tabId]) {
- await new Promise(resolve => chrome.debugger.attach({tabId}, "1.2", resolve));
+ await new Promise(resolve => chrome.debugger.attach({tabId}, "1.3", resolve));
debugged[tabId] = 0;
}
debugged[tabId] += 1;
@@ -112,12 +105,35 @@ const router = {
async readdir(path) {
const tabId = parseInt(pathComponent(path, -2));
if (!debugged[tabId]) throw new UnixError(unix.EIO);
- const result = await new Promise(resolve => chrome.debugger.sendCommand({tabId}, "Page.getResourceTree", {}, resolve));
- const frameTree = result.frameTree;
- return frameTree.resources.map(r => String(r.contentSize));
+
+ const {frameTree} = await sendDebuggerCommand(tabId, "Page.getResourceTree", {});
+ return frameTree.resources.map(r => sanitize(String(r.url).slice(0, 200)));
},
async releasedir(path) {
return 0;
+ },
+
+ "*": {
+ async read(path, fh, size, offset) {
+ const tabId = parseInt(pathComponent(path, -3));
+ const suffix = pathComponent(path, -1);
+
+ if (!debugged[tabId]) throw new UnixError(unix.EIO);
+
+ await sendDebuggerCommand(tabId, "Page.enable", {});
+
+ const {frameTree} = await sendDebuggerCommand(tabId, "Page.getResourceTree", {});
+ for (let resource of frameTree.resources) {
+ const resourceSuffix = sanitize(String(resource.url).slice(0, 200));
+ if (resourceSuffix === suffix) {
+ const {content} = await sendDebuggerCommand(tabId, "Page.getResourceContent", {
+ frameId: frameTree.frame.id,
+ url: resource.url
+ });
+ return content.substr(offset, size);
+ }
+ }
+ }
}
}
}
@@ -239,6 +255,7 @@ async function onmessage(event) {
response = { op: 'releasedir' };
}
} catch (e) {
+ console.error(e);
response = {
op: req.op,
error: e instanceof UnixError ? e.error : unix.EIO