mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			308 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			308 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* 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;
 |