From 37c40569f3c343a64e4d76b421feb9c93aaf9c56 Mon Sep 17 00:00:00 2001 From: ketmar Date: Sun, 13 May 2018 17:21:35 +0000 Subject: [PATCH] `GM_listValues()` works again FossilOrigin-Name: f991ff4c1e90e0cfcc724dfe664838f004e26e6791522d4a38a954539f32f703 --- main/modules/sbapi/sandbox.js | 10 +++++++++- main/modules/sbapi/scriptstorage.js | 15 ++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/main/modules/sbapi/sandbox.js b/main/modules/sbapi/sandbox.js index 0906759..0990e51 100644 --- a/main/modules/sbapi/sandbox.js +++ b/main/modules/sbapi/sandbox.js @@ -235,7 +235,15 @@ exports.createSandbox = function (domWin, nfo, url) { sandbox.GM_getValue = tieto(scriptStorage, "getValue"); sandbox.GM_setValue = tieto(scriptStorage, "setValue"); sandbox.GM_deleteValue = tieto(scriptStorage, "deleteValue"); - sandbox.GM_listValues = tieto(scriptStorage, "listValues"); + //sandbox.GM_listValues = tieto(scriptStorage, "listValues"); + sandbox.GM_listValues = tieto(null, function (stg, sbox) { + //scriptStorage, "listValues"); + let res = scriptStorage.listValues(); + if (res) { + res = Cu.cloneInto(res, sbox); + } + return res; + }, scriptStorage, sandbox); sandbox.GM_xmlhttpRequest = tieto(new GuerillaXmlHttpReqester(domWin, url, sandbox), "contentStartRequest"); diff --git a/main/modules/sbapi/scriptstorage.js b/main/modules/sbapi/scriptstorage.js index a288077..6fe6fa6 100644 --- a/main/modules/sbapi/scriptstorage.js +++ b/main/modules/sbapi/scriptstorage.js @@ -156,15 +156,24 @@ ScriptStorage.prototype.listValues = function () { logError("invalid number of arguments to `GM_listValues()`"); throw new Error("invalid number of arguments to `GM_listValues()`"); } + //let count = 0; + //let eprp = {length: "r"}; + //let vals = {}; let valueNames = []; let stmt = this.db.createStatement("SELECT name FROM scriptvals"); try { - while (stmt.executeStep()) valueNames.push(stmt.row.name); + while (stmt.executeStep()) { + valueNames.push(stmt.row.name); + //vals[count++] = stmt.row.name; + } } finally { stmt.reset(); } - let vals = Array.prototype.slice.call(valueNames); - vals.__exposedProps__ = {length: "r"}; + //let vals = Array.prototype.slice.call(valueNames); + //vals.__exposedProps__ = {length: "r"}; + //!vals.length = count; + //!vals.__exposedProps__ = eprp; + let vals = valueNames; return vals; }; -- 2.11.4.GIT