Bug 1333682 - Don't register form autofill autocomplete if it's already registered. r=MattN draft
authorRay Lin <ralin@mozilla.com>
Wed, 25 Jan 2017 15:35:44 +0800
changeset 467108 749d6da5413719cf69aaa1e7e84e2598185a5dba
parent 467107 e6ec7eccfaa58ba6da78985355f9d34a15016794
child 543618 cb045868475d1361376fe9c3e8d162441a0beb68
push id43103
push userbmo:ralin@mozilla.com
push dateFri, 27 Jan 2017 04:53:15 +0000
reviewersMattN
bugs1333682
milestone54.0a1
Bug 1333682 - Don't register form autofill autocomplete if it's already registered. r=MattN MozReview-Commit-ID: 3x7jGaXLfnF
browser/extensions/formautofill/content/FormAutofillContent.js
--- a/browser/extensions/formautofill/content/FormAutofillContent.js
+++ b/browser/extensions/formautofill/content/FormAutofillContent.js
@@ -175,32 +175,38 @@ AutocompleteFactory.prototype = {
   register(targetConstructor) {
     let proto = targetConstructor.prototype;
     this._classID = proto.classID;
 
     let factory = XPCOMUtils._getFactory(targetConstructor);
     this._factory = factory;
 
     let registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
-    registrar.registerFactory(proto.classID, proto.classDescription,
-                              proto.contractID, factory);
+    if (proto.classID && !registrar.isCIDRegistered(proto.classID)) {
+      registrar.registerFactory(proto.classID, proto.classDescription,
+                                proto.contractID, factory);
+    }
 
-    if (proto.classID2) {
+    if (proto.classID2 && !registrar.isCIDRegistered(proto.classID2)) {
       this._classID2 = proto.classID2;
       registrar.registerFactory(proto.classID2, proto.classDescription,
                                 proto.contractID2, factory);
     }
   },
 
   unregister() {
     let registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
-    registrar.unregisterFactory(this._classID, this._factory);
-    if (this._classID2) {
+    if (this._classID && registrar.isCIDRegistered(this._classID)) {
+      registrar.unregisterFactory(this._classID, this._factory);
+    }
+
+    if (this._classID2 && registrar.isCIDRegistered(this._classID2)) {
       registrar.unregisterFactory(this._classID2, this._factory);
     }
+
     this._factory = null;
   },
 };
 
 
 /**
  * @constructor
  *