Make WebContents inherit NavigationController
authorCheng Zhao <zcbenz@gmail.com>
Tue, 2 Aug 2016 11:55:56 +0000 (20:55 +0900)
committerCheng Zhao <zcbenz@gmail.com>
Tue, 2 Aug 2016 11:55:56 +0000 (20:55 +0900)
lib/browser/api/web-contents.js

index c255cd0..eba951b 100644 (file)
@@ -82,7 +82,8 @@ const defaultPrintingSetting = {
 const binding = process.atomBinding('web_contents')
 const {WebContents} = binding
 
-Object.setPrototypeOf(WebContents.prototype, EventEmitter.prototype)
+Object.setPrototypeOf(NavigationController.prototype, EventEmitter.prototype)
+Object.setPrototypeOf(WebContents.prototype, NavigationController.prototype)
 
 // WebContents::send(channel, args..)
 // WebContents::sendToAll(channel, args..)
@@ -196,21 +197,13 @@ WebContents.prototype.printToPDF = function (options, callback) {
 
 // Add JavaScript wrappers for WebContents class.
 WebContents.prototype._init = function () {
+  // The navigation controller.
+  NavigationController.call(this, this)
+
   // Every remote callback from renderer process would add a listenter to the
   // render-view-deleted event, so ignore the listenters warning.
   this.setMaxListeners(0)
 
-  // The navigation controller.
-  const controller = new NavigationController(this)
-  for (const name in NavigationController.prototype) {
-    const method = NavigationController.prototype[name]
-    if (method instanceof Function) {
-      this[name] = function () {
-        return method.apply(controller, arguments)
-      }
-    }
-  }
-
   // Dispatch IPC messages to the ipc module.
   this.on('ipc-message', function (event, [channel, ...args]) {
     ipcMain.emit(channel, event, ...args)