/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict" ;
const protocol = require(
"resource://devtools/shared/protocol.js");
const { Arg, RetVal, types } = protocol;
const childSpecs = {};
function createStorageSpec(options) {
// common methods for all storage types
const methods = {
getStoreObjects: {
request: {
host: Arg(0),
names: Arg(1,
"nullable:array:string" ),
options: Arg(2,
"nullable:json" ),
},
response: RetVal(options.storeObjectType),
},
getFields: {
request: {
subType: Arg(0,
"nullable:string" ),
},
response: {
value: RetVal(
"json" ),
},
},
};
// extra methods specific for storage type
Object.assign(methods, options.methods);
childSpecs[options.typeName] = protocol.generateActorSpec({
typeName: options.typeName,
methods,
events: {
"single-store-update" : {
type:
"storesUpdate" ,
data: Arg(0,
"storeUpdateObject" ),
},
"single-store-cleared" : {
type:
"storesCleared" ,
data: Arg(0,
"json" ),
},
},
});
}
// Cookies store object
types.addDictType(
"cookieobject" , {
uniqueKey:
"string" ,
name:
"string" ,
value:
"longstring" ,
path:
"nullable:string" ,
host:
"string" ,
hostOnly:
"boolean" ,
isSecure:
"boolean" ,
isHttpOnly:
"boolean" ,
creationTime:
"number" ,
lastAccessed:
"number" ,
expires:
"number" ,
});
// Array of cookie store objects
types.addDictType(
"cookiestoreobject" , {
total:
"number" ,
offset:
"number" ,
data:
"array:nullable:cookieobject" ,
});
// Common methods for edit/remove
const editRemoveMethods = {
getFields: {
request: {},
response: {
value: RetVal(
"json" ),
},
},
editItem: {
request: {
data: Arg(0,
"json" ),
},
response: {},
},
removeItem: {
request: {
host: Arg(0,
"string" ),
name: Arg(1,
"string" ),
},
response: {},
},
};
// Cookies actor spec
createStorageSpec({
typeName:
"cookies" ,
storeObjectType:
"cookiestoreobject" ,
methods: Object.assign(
{},
editRemoveMethods,
{
addItem: {
request: {
guid: Arg(0,
"string" ),
host: Arg(1,
"nullable:string" ),
},
response: {},
},
},
{
removeAll: {
request: {
host: Arg(0,
"string" ),
domain: Arg(1,
"nullable:string" ),
},
response: {},
},
},
{
removeAllSessionCookies: {
request: {
host: Arg(0,
"string" ),
domain: Arg(1,
"nullable:string" ),
},
response: {},
},
}
),
});
// Local Storage / Session Storage store object
types.addDictType(
"storageobject" , {
name:
"string" ,
value:
"longstring" ,
});
// Common methods for local/session storage
const storageMethods = Object.assign(
{},
editRemoveMethods,
{
addItem: {
request: {
guid: Arg(0,
"string" ),
host: Arg(1,
"nullable:string" ),
},
response: {},
},
},
{
removeAll: {
request: {
host: Arg(0,
"string" ),
},
response: {},
},
}
);
// Array of Local Storage / Session Storage store objects
types.addDictType(
"storagestoreobject" , {
total:
"number" ,
offset:
"number" ,
data:
"array:nullable:storageobject" ,
});
createStorageSpec({
typeName:
"localStorage" ,
storeObjectType:
"storagestoreobject" ,
methods: storageMethods,
});
createStorageSpec({
typeName:
"sessionStorage" ,
storeObjectType:
"storagestoreobject" ,
methods: storageMethods,
});
types.addDictType(
"extensionobject" , {
name:
"nullable:string" ,
value:
"nullable:longstring" ,
area:
"string" ,
isValueEditable:
"boolean" ,
});
types.addDictType(
"extensionstoreobject" , {
total:
"number" ,
offset:
"number" ,
data:
"array:nullable:extensionobject" ,
});
createStorageSpec({
typeName:
"extensionStorage" ,
storeObjectType:
"extensionstoreobject" ,
// Same as storageMethods except for addItem
methods: Object.assign({}, editRemoveMethods, {
removeAll: {
request: {
host: Arg(0,
"string" ),
},
response: {},
},
}),
});
types.addDictType(
"cacheobject" , {
url:
"string" ,
status:
"string" ,
});
// Array of Cache store objects
types.addDictType(
"cachestoreobject" , {
total:
"number" ,
offset:
"number" ,
data:
"array:nullable:cacheobject" ,
});
// Cache storage spec
createStorageSpec({
typeName:
"Cache" ,
storeObjectType:
"cachestoreobject" ,
methods: {
removeAll: {
request: {
host: Arg(0,
"string" ),
name: Arg(1,
"string" ),
},
response: {},
},
removeItem: {
request: {
host: Arg(0,
"string" ),
name: Arg(1,
"string" ),
},
response: {},
},
},
});
// Indexed DB store object
// This is a union on idb object, db metadata object and object store metadata
// object
types.addDictType(
"idbobject" , {
uniqueKey:
"string" ,
name:
"nullable:string" ,
db:
"nullable:string" ,
objectStore:
"nullable:string" ,
origin:
"nullable:string" ,
version:
"nullable:number" ,
storage:
"nullable:string" ,
objectStores:
"nullable:number" ,
keyPath:
"nullable:string" ,
autoIncrement:
"nullable:boolean" ,
indexes:
"nullable:string" ,
value:
"nullable:longstring" ,
});
// Array of Indexed DB store objects
types.addDictType(
"idbstoreobject" , {
total:
"number" ,
offset:
"number" ,
data:
"array:nullable:idbobject" ,
});
// Result of Indexed DB delete operation: can block or throw error
types.addDictType(
"idbdeleteresult" , {
blocked:
"nullable:boolean" ,
error:
"nullable:string" ,
});
createStorageSpec({
typeName:
"indexedDB" ,
storeObjectType:
"idbstoreobject" ,
methods: {
removeDatabase: {
request: {
host: Arg(0,
"string" ),
name: Arg(1,
"string" ),
},
response: RetVal(
"idbdeleteresult" ),
},
removeAll: {
request: {
host: Arg(0,
"string" ),
name: Arg(1,
"string" ),
},
response: {},
},
removeItem: {
request: {
host: Arg(0,
"string" ),
name: Arg(1,
"string" ),
},
response: {},
},
},
});
// Update notification object
types.addDictType(
"storeUpdateObject" , {
changed:
"nullable:json" ,
deleted:
"nullable:json" ,
added:
"nullable:json" ,
});
exports.childSpecs = childSpecs;
Messung V0.5 C=94 H=100 G=96
¤ Dauer der Verarbeitung: 0.18 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland