123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- /* 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("devtools/shared/protocol");
- const { Arg, RetVal, types } = protocol;
- let childSpecs = {};
- function createStorageSpec(options) {
- // common methods for all storage types
- let 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
- });
- }
- // Cookies store object
- types.addDictType("cookieobject", {
- uniqueKey: "string",
- name: "string",
- value: "longstring",
- path: "nullable:string",
- host: "string",
- isDomain: "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"),
- },
- 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("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"
- });
- // Generate a type definition for an object with actors for all storage types.
- types.addDictType("storelist", Object.keys(childSpecs).reduce((obj, type) => {
- obj[type] = type;
- return obj;
- }, {}));
- exports.childSpecs = childSpecs;
- exports.storageSpec = protocol.generateActorSpec({
- typeName: "storage",
- /**
- * List of event notifications that the server can send to the client.
- *
- * - stores-update : When any store object in any storage type changes.
- * - stores-cleared : When all the store objects are removed.
- * - stores-reloaded : When all stores are reloaded. This generally mean that
- * we should refetch everything again.
- */
- events: {
- "stores-update": {
- type: "storesUpdate",
- data: Arg(0, "storeUpdateObject")
- },
- "stores-cleared": {
- type: "storesCleared",
- data: Arg(0, "json")
- },
- "stores-reloaded": {
- type: "storesReloaded",
- data: Arg(0, "json")
- }
- },
- methods: {
- listStores: {
- request: {},
- response: RetVal("storelist")
- },
- }
- });
|