getstation / electron-chrome-extension

Implementation of Chrome extension APIs for Electron
138 stars 26 forks source link

Refactoring chrome-extension.js #43

Open alexstrat opened 5 years ago

alexstrat commented 5 years ago

chrome-extension.js is a big, but ugly, file that holds big parts of logic. If we want to make the lib more easy to work on, we should refactor this file.

chrome-extension.js expose 2 public APIs:

addExtension is responsible for:

These responsibilities could be split into several modules.

alexstrat commented 5 years ago
// responsible to provide assets (files, manifest..) of a given extension
interface ExtensionAssetsProvider {
  extensionId: string
  asycn getManifest: () => object
  // readfile('main.html') will find `main.html` in extension folder
  readFile: (relativePath) => {mimeType: string, data: Stream }
}

interface BackgroundPagesManager() {
  start(extensionId: string, extensionsAssets: ExtensionAssetsProvider): BackgroundPage,
  stop(extensionId: string)
}

interface ContentScriptsInjector() {
  addContentScriptsForExtension(extensionId: string, extensionsAssets: ExtensionAssetsProvider)
  removeContentScriptsForExtension(extensionId: string)
}
alexstrat commented 5 years ago

Moreover, in ChromeAPIHandler, I think we should abstract the use of IPC to ease the unit-tesing.

A candidate for this: https://github.com/JsCommunity/json-rpc-peer that can use streams of JSON-RPC