Home Reference Source

lib/browser/electron/index.js

const electron = require('electron');
const {BrowserWindow} = electron;
const Browser = require('../interface/browser');
const ElectronPage = require('./electron_page');

/**
* SupportEvent
*  - ready
*  - new-window
*  - closed
*/
class ElectronBrowser extends Browser {
  constructor(options){
    super();
    this._app = electron.app;
    this._app.on('window-all-closed', ()=>{ this._app.quit() });
    this._app.on('ready', (...args)=>{ this.emit(Browser.Events.Ready, ...args) });
  }
  isReady(){
    return this._app.isReady();
  }
  exit(...args){
    return this._app.exit(...args)
  }
  /**
   * @return {Promise<object>} - object is browserWindow object provided by each browser.
   */
  createBrowserWindow(windowOptions){
    return Promise.resolve(this.createBrowserWindowNotPromise(windowOptions));
  }
  createBrowserPage(window){
    return new ElectronPage(window);
  }
  /**
   * @private
   * @return {object} - BrowserWindow object provided by electron.
   */
   createBrowserWindowNotPromise(windowOptions){
    const browserWindow = new BrowserWindow(windowOptions);

    browserWindow.webContents.on('context-menu', (e, params)=>{
      browserWindow.webContents.inspectElement(params.x, params.y);
    })
    browserWindow.webContents.on('did-create-window', (newBrowserWindow, {url, frameName, disposition, options})=>{
      this.emit(Browser.Events.NewWindow, newBrowserWindow, frameName);
    })
    browserWindow.on('closed', (event)=>{
      this.emit(Browser.Events.Closed, browserWindow);
    });
    return browserWindow;
  }
}

module.exports = ElectronBrowser;