mirror of
https://github.com/ManchildProductions/UXP-Fixed.git
synced 2026-07-21 03:48:43 +00:00
Bug 1302989: Make storage inspector work with file:// when # is in the URL
Issue #31
This commit is contained in:
@@ -129,7 +129,11 @@ StorageActors.defaults = function (typeName, observationTopic) {
|
||||
get hosts() {
|
||||
let hosts = new Set();
|
||||
for (let {location} of this.storageActor.windows) {
|
||||
hosts.add(this.getHostName(location));
|
||||
let host = this.getHostName(location);
|
||||
|
||||
if (host) {
|
||||
hosts.add(host);
|
||||
}
|
||||
}
|
||||
return hosts;
|
||||
},
|
||||
@@ -143,13 +147,35 @@ StorageActors.defaults = function (typeName, observationTopic) {
|
||||
},
|
||||
|
||||
/**
|
||||
* Converts the window.location object into host.
|
||||
* Converts the window.location object into a URL (e.g. http://domain.com).
|
||||
*/
|
||||
getHostName(location) {
|
||||
if (location.protocol === "chrome:") {
|
||||
return location.href;
|
||||
if (!location) {
|
||||
// Debugging a legacy Firefox extension... no hostname available and no
|
||||
// storage possible.
|
||||
return null;
|
||||
}
|
||||
|
||||
switch (location.protocol) {
|
||||
case "data:":
|
||||
// data: URLs do not support storage of any type.
|
||||
return null;
|
||||
case "about:":
|
||||
// Fallthrough.
|
||||
case "chrome:":
|
||||
// Fallthrough.
|
||||
case "file:":
|
||||
return location.protocol + location.pathname;
|
||||
case "resource:":
|
||||
return location.origin + location.pathname;
|
||||
case "moz-extension:":
|
||||
return location.origin;
|
||||
case "javascript:":
|
||||
return location.href;
|
||||
default:
|
||||
// http: or unknown protocol.
|
||||
return `${location.protocol}//${location.host}`;
|
||||
}
|
||||
return location.hostname || location.href;
|
||||
},
|
||||
|
||||
initialize(storageActor) {
|
||||
@@ -202,7 +228,7 @@ StorageActors.defaults = function (typeName, observationTopic) {
|
||||
*/
|
||||
onWindowReady: Task.async(function* (window) {
|
||||
let host = this.getHostName(window.location);
|
||||
if (!this.hostVsStores.has(host)) {
|
||||
if (host && !this.hostVsStores.has(host)) {
|
||||
yield this.populateStoresForHost(host, window);
|
||||
let data = {};
|
||||
data[host] = this.getNamesForHost(host);
|
||||
@@ -223,7 +249,7 @@ StorageActors.defaults = function (typeName, observationTopic) {
|
||||
return;
|
||||
}
|
||||
let host = this.getHostName(window.location);
|
||||
if (!this.hosts.has(host)) {
|
||||
if (host && !this.hosts.has(host)) {
|
||||
this.hostVsStores.delete(host);
|
||||
let data = {};
|
||||
data[host] = [];
|
||||
@@ -467,6 +493,9 @@ StorageActors.createActor({
|
||||
if (cookie.host == null) {
|
||||
return host == null;
|
||||
}
|
||||
|
||||
host = trimHttpHttps(host);
|
||||
|
||||
if (cookie.host.startsWith(".")) {
|
||||
return ("." + host).endsWith(cookie.host);
|
||||
}
|
||||
@@ -732,6 +761,8 @@ var cookieHelpers = {
|
||||
host = "";
|
||||
}
|
||||
|
||||
host = trimHttpHttps(host);
|
||||
|
||||
let cookies = Services.cookies.getCookiesFromHost(host, originAttributes);
|
||||
let store = [];
|
||||
|
||||
@@ -866,6 +897,8 @@ var cookieHelpers = {
|
||||
opts.path = split[2];
|
||||
}
|
||||
|
||||
host = trimHttpHttps(host);
|
||||
|
||||
function hostMatches(cookieHost, matchHost) {
|
||||
if (cookieHost == null) {
|
||||
return matchHost == null;
|
||||
@@ -1089,16 +1122,6 @@ function getObjectForLocalOrSessionStorage(type) {
|
||||
}));
|
||||
},
|
||||
|
||||
getHostName(location) {
|
||||
if (!location.host) {
|
||||
return location.href;
|
||||
}
|
||||
if (location.protocol === "chrome:") {
|
||||
return location.href;
|
||||
}
|
||||
return location.protocol + "//" + location.host;
|
||||
},
|
||||
|
||||
populateStoresForHost(host, window) {
|
||||
try {
|
||||
this.hostVsStores.set(host, window[type]);
|
||||
@@ -1110,7 +1133,10 @@ function getObjectForLocalOrSessionStorage(type) {
|
||||
populateStoresForHosts() {
|
||||
this.hostVsStores = new Map();
|
||||
for (let window of this.windows) {
|
||||
this.populateStoresForHost(this.getHostName(window.location), window);
|
||||
let host = this.getHostName(window.location);
|
||||
if (host) {
|
||||
this.populateStoresForHost(host, window);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1315,16 +1341,6 @@ StorageActors.createActor({
|
||||
];
|
||||
}),
|
||||
|
||||
getHostName(location) {
|
||||
if (!location.host) {
|
||||
return location.href;
|
||||
}
|
||||
if (location.protocol === "chrome:") {
|
||||
return location.href;
|
||||
}
|
||||
return location.protocol + "//" + location.host;
|
||||
},
|
||||
|
||||
populateStoresForHost: Task.async(function* (host) {
|
||||
let storeMap = new Map();
|
||||
let caches = yield this.getCachesForHost(host);
|
||||
@@ -1596,16 +1612,6 @@ StorageActors.createActor({
|
||||
this.removeDBRecord(host, principal, db, store, id);
|
||||
}),
|
||||
|
||||
getHostName(location) {
|
||||
if (!location.host) {
|
||||
return location.href;
|
||||
}
|
||||
if (location.protocol === "chrome:") {
|
||||
return location.href;
|
||||
}
|
||||
return location.protocol + "//" + location.host;
|
||||
},
|
||||
|
||||
/**
|
||||
* This method is overriden and left blank as for indexedDB, this operation
|
||||
* cannot be performed synchronously. Thus, the preListStores method exists to
|
||||
@@ -2443,6 +2449,19 @@ exports.setupParentProcessForIndexedDB = function ({ mm, prefix }) {
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* General helpers
|
||||
*/
|
||||
function trimHttpHttps(url) {
|
||||
if (url.startsWith("http://")) {
|
||||
return url.substr(7);
|
||||
}
|
||||
if (url.startsWith("https://")) {
|
||||
return url.substr(8);
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
/**
|
||||
* The main Storage Actor.
|
||||
*/
|
||||
|
||||
@@ -11,7 +11,7 @@ const {StorageFront} = require("devtools/shared/fronts/storage");
|
||||
Services.scriptloader.loadSubScript("chrome://mochitests/content/browser/devtools/server/tests/browser/storage-helpers.js", this);
|
||||
|
||||
const TESTDATA = {
|
||||
"test1.example.org": [
|
||||
"http://test1.example.org": [
|
||||
{
|
||||
name: "name",
|
||||
value: "value1",
|
||||
|
||||
@@ -9,8 +9,8 @@ Services.scriptloader.loadSubScript("chrome://mochitests/content/browser/devtool
|
||||
|
||||
const beforeReload = {
|
||||
cookies: {
|
||||
"test1.example.org": ["c1", "cs2", "c3", "uc1"],
|
||||
"sectest1.example.org": ["uc1", "cs2"]
|
||||
"http://test1.example.org": ["c1", "cs2", "c3", "uc1"],
|
||||
"http://sectest1.example.org": ["uc1", "cs2"]
|
||||
},
|
||||
localStorage: {
|
||||
"http://test1.example.org": ["ls1", "ls2"],
|
||||
@@ -99,7 +99,12 @@ function testAddIframe(front) {
|
||||
"https://sectest1.example.org": ["iframe-s-ss1"]
|
||||
},
|
||||
cookies: {
|
||||
"sectest1.example.org": [
|
||||
"https://sectest1.example.org": [
|
||||
getCookieId("cs2", ".example.org", "/"),
|
||||
getCookieId("sc1", "sectest1.example.org",
|
||||
"/browser/devtools/server/tests/browser/")
|
||||
],
|
||||
"http://sectest1.example.org": [
|
||||
getCookieId("sc1", "sectest1.example.org",
|
||||
"/browser/devtools/server/tests/browser/")
|
||||
]
|
||||
|
||||
@@ -9,7 +9,7 @@ Services.scriptloader.loadSubScript("chrome://mochitests/content/browser/devtool
|
||||
|
||||
const storeMap = {
|
||||
cookies: {
|
||||
"test1.example.org": [
|
||||
"http://test1.example.org": [
|
||||
{
|
||||
name: "c1",
|
||||
value: "foobar",
|
||||
@@ -38,7 +38,29 @@ const storeMap = {
|
||||
isSecure: true,
|
||||
}
|
||||
],
|
||||
"sectest1.example.org": [
|
||||
|
||||
"http://sectest1.example.org": [
|
||||
{
|
||||
name: "cs2",
|
||||
value: "sessionCookie",
|
||||
path: "/",
|
||||
host: ".example.org",
|
||||
expires: 0,
|
||||
isDomain: true,
|
||||
isSecure: false,
|
||||
},
|
||||
{
|
||||
name: "sc1",
|
||||
value: "foobar",
|
||||
path: "/browser/devtools/server/tests/browser/",
|
||||
host: "sectest1.example.org",
|
||||
expires: 0,
|
||||
isDomain: false,
|
||||
isSecure: false,
|
||||
}
|
||||
],
|
||||
|
||||
"https://sectest1.example.org": [
|
||||
{
|
||||
name: "uc1",
|
||||
value: "foobar",
|
||||
@@ -328,7 +350,7 @@ function* testStores(data) {
|
||||
}
|
||||
|
||||
function testCookies(cookiesActor) {
|
||||
is(Object.keys(cookiesActor.hosts).length, 2,
|
||||
is(Object.keys(cookiesActor.hosts).length, 3,
|
||||
"Correct number of host entries for cookies");
|
||||
return testCookiesObjects(0, cookiesActor.hosts, cookiesActor);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
const {StorageFront} = require("devtools/shared/fronts/storage");
|
||||
const beforeReload = {
|
||||
cookies: ["test1.example.org", "sectest1.example.org"],
|
||||
cookies: ["http://test1.example.org", "https://sectest1.example.org"],
|
||||
localStorage: ["http://test1.example.org", "http://sectest1.example.org"],
|
||||
sessionStorage: ["http://test1.example.org", "http://sectest1.example.org"],
|
||||
};
|
||||
@@ -27,7 +27,7 @@ const TESTS = [
|
||||
expected: {
|
||||
added: {
|
||||
cookies: {
|
||||
"test1.example.org": [
|
||||
"http://test1.example.org": [
|
||||
getCookieId("c1", "test1.example.org",
|
||||
"/browser/devtools/server/tests/browser/"),
|
||||
getCookieId("c2", "test1.example.org",
|
||||
@@ -53,7 +53,7 @@ const TESTS = [
|
||||
expected: {
|
||||
changed: {
|
||||
cookies: {
|
||||
"test1.example.org": [
|
||||
"http://test1.example.org": [
|
||||
getCookieId("c1", "test1.example.org",
|
||||
"/browser/devtools/server/tests/browser/"),
|
||||
]
|
||||
@@ -82,7 +82,7 @@ const TESTS = [
|
||||
expected: {
|
||||
deleted: {
|
||||
cookies: {
|
||||
"test1.example.org": [
|
||||
"http://test1.example.org": [
|
||||
getCookieId("c2", "test1.example.org",
|
||||
"/browser/devtools/server/tests/browser/"),
|
||||
]
|
||||
@@ -123,7 +123,7 @@ const TESTS = [
|
||||
expected: {
|
||||
added: {
|
||||
cookies: {
|
||||
"test1.example.org": [
|
||||
"http://test1.example.org": [
|
||||
getCookieId("c3", "test1.example.org",
|
||||
"/browser/devtools/server/tests/browser/"),
|
||||
]
|
||||
@@ -139,7 +139,7 @@ const TESTS = [
|
||||
},
|
||||
deleted: {
|
||||
cookies: {
|
||||
"test1.example.org": [
|
||||
"http://test1.example.org": [
|
||||
getCookieId("c1", "test1.example.org",
|
||||
"/browser/devtools/server/tests/browser/"),
|
||||
]
|
||||
@@ -175,7 +175,7 @@ const TESTS = [
|
||||
expected: {
|
||||
deleted: {
|
||||
cookies: {
|
||||
"test1.example.org": [
|
||||
"http://test1.example.org": [
|
||||
getCookieId("c3", "test1.example.org",
|
||||
"/browser/devtools/server/tests/browser/"),
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user