Home Reference Source

lib/page/window.js

const EventEmitter = require('events');
const path = require('path');
const {config} = require('../utils/config');
const Page = require('./page');
const pageWalker = require('../page_walker');

class Window extends EventEmitter {
  constructor(id, browser, browserWindow, options = {}){
    super();
    this.id = id;

    let configCloned = config.clone();
    configCloned.merge({ [config.browser]: options });

    let windowSetupAfterReady = ()=>{
      pageWalker.browser.createBrowserWindow(configCloned[config.browser])
      .then((createdBrowserWindow)=>{
        this._browserWindow = createdBrowserWindow;
        this.emit('readyForPage');
      });
    };

    // if browserWindow has been ready
    if(browserWindow){
      this._browserWindow = browserWindow;
      this.emit('readyForPage');
      return;
    }

    // if Browser has been ready
    if(browser && browser.isReady()){
      windowSetupAfterReady();
    }else{
      browser.on('ready', windowSetupAfterReady);
    }
  }
  /**
   * @return {object} BrowserWindow Object(Provided by Each Browser)
   * @see Browser#createWindow
   */
  get browserWindow(){ return this._browserWindow }
  /**
   * close this BrowserWindow();
   */
  close(){
    // Each browserWindow object must have close() method.
    this._browserWindow.close();
  }
  /**
   * @private
   */
  isReadyForPage(){ return !!this._browserWindow }
  /**
   * get Page object in this window.
   * @return {Page}
   */
  get page(){
    if(!this._page){
      this._page = new Page(pageWalker.browser.createBrowserPage(this));
    }
    return this._page;
  }
}

module.exports = Window;