Bug 1287229 - port.disconnect should not throw draft
authorRob Wu <rob@robwu.nl>
Fri, 15 Jul 2016 22:46:42 -0700
changeset 389289 fce121684dde12741808b6bde52c5f89cc2c50bb
parent 386302 214884d507ee369c1cf14edb26527c4f9a97bf48
child 525710 446f29123f08f52b523d190b1f4b4f5fd7e6d699
push id23358
push userbmo:rob@robwu.nl
push dateMon, 18 Jul 2016 23:21:54 +0000
bugs1287229
milestone50.0a1
Bug 1287229 - port.disconnect should not throw MozReview-Commit-ID: 7d8Zmb4OAd0
toolkit/components/extensions/ExtensionUtils.jsm
toolkit/components/extensions/test/mochitest/test_ext_runtime_disconnect.html
--- a/toolkit/components/extensions/ExtensionUtils.jsm
+++ b/toolkit/components/extensions/ExtensionUtils.jsm
@@ -1041,17 +1041,19 @@ Port.prototype = {
       }
 
       this.handleDisconnection();
     }
   },
 
   disconnect() {
     if (this.disconnected) {
-      throw new this.context.contentWindow.Error("Attempt to disconnect() a disconnected port");
+      // disconnect() may be called without side effects even after the port is
+      // closed - https://developer.chrome.com/extensions/runtime#type-Port
+      return;
     }
     this.handleDisconnection();
     this.messageManager.sendAsyncMessage(this.disconnectName);
   },
 
   close() {
     this.disconnect();
   },
--- a/toolkit/components/extensions/test/mochitest/test_ext_runtime_disconnect.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_runtime_disconnect.html
@@ -12,16 +12,19 @@
 
 <script type="text/javascript">
 "use strict";
 
 function backgroundScript() {
   browser.runtime.onConnect.addListener(port => {
     browser.test.assertEq(port.name, "ernie", "port name correct");
     port.onDisconnect.addListener(() => {
+      // Closing an already-disconnected port is a no-op.
+      port.disconnect();
+      port.disconnect();
       browser.test.sendMessage("disconnected");
     });
     browser.test.sendMessage("connected");
   });
 }
 
 function contentScript() {
   browser.runtime.connect({name: "ernie"});