Bug 1160487 - Enable eslint rules for Loop: semi-colon related. r=Standard8
authorMartin Tomes <tomesm@gmail.com>
Wed, 06 May 2015 12:23:21 +0100
changeset 242564 e4a44e44985826b53c02f72d9227122ba6bba925
parent 242563 21d5d2c6152c75e51885334316d8f744c52abefa
child 242565 b0573ebe7b3a299df64ec36f6e4962b826f1e1de
push id28700
push userryanvm@gmail.com
push dateWed, 06 May 2015 20:21:46 +0000
treeherdermozilla-central@4f52ab64d1fb [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersStandard8
bugs1160487
milestone40.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1160487 - Enable eslint rules for Loop: semi-colon related. r=Standard8
browser/components/loop/.eslintrc
browser/components/loop/content/shared/js/utils.js
browser/components/loop/content/shared/js/websocket.js
browser/components/loop/modules/CardDavImporter.jsm
browser/components/loop/modules/GoogleImporter.jsm
browser/components/loop/modules/LoopCalls.jsm
browser/components/loop/modules/LoopContacts.jsm
browser/components/loop/modules/LoopRooms.jsm
browser/components/loop/modules/MozLoopPushHandler.jsm
browser/components/loop/modules/MozLoopService.jsm
browser/components/loop/standalone/content/js/multiplexGum.js
browser/components/loop/standalone/content/js/standaloneMetricsStore.js
browser/components/loop/standalone/content/js/standaloneRoomViews.js
browser/components/loop/standalone/content/js/standaloneRoomViews.jsx
browser/components/loop/test/desktop-local/roomViews_test.js
browser/components/loop/test/mochitest/browser_CardDavImporter.js
browser/components/loop/test/mochitest/browser_LoopContacts.js
browser/components/loop/test/mochitest/browser_mozLoop_sharingListeners.js
browser/components/loop/test/shared/otSdkDriver_test.js
browser/components/loop/test/standalone/standaloneMetricsStore_test.js
browser/components/loop/test/standalone/standaloneRoomViews_test.js
browser/components/loop/test/standalone/standalone_client_test.js
browser/components/loop/test/xpcshell/head.js
browser/components/loop/test/xpcshell/test_loopapi_hawk_request.js
browser/components/loop/test/xpcshell/test_looppush_initialize.js
browser/components/loop/test/xpcshell/test_loopservice_restart.js
--- a/browser/components/loop/.eslintrc
+++ b/browser/components/loop/.eslintrc
@@ -44,33 +44,30 @@
     "global-strict": 0,           // Leave as zero (this will be unsupported in eslint 1.0.0)
     "key-spacing": 0,             // TODO: Remove (use default)
     "new-cap": 0,                 // TODO: Remove (use default)
     "no-catch-shadow": 0,         // TODO: Remove (use default)
     "no-console": 0,              // Leave as 0. We use console logging in content code.
     "no-empty": 0,                // TODO: Remove (use default)
     "no-extra-bind": 0,           // Leave as 0
     "no-extra-boolean-cast": 0,   // TODO: Remove (use default)
-    "no-extra-semi": 0,           // TODO: Remove (use default)
     "no-multi-spaces": 0,         // TBD.
     "no-new": 0,                  // TODO: Remove (use default)
     "no-redeclare": 0,            // TODO: Remove (use default)
     "no-return-assign": 0,        // TODO: Remove (use default)
     "no-shadow": 0,               // TODO: Remove (use default)
     "no-spaced-func": 0,          // TODO: Remove (use default)
     "no-trailing-spaces": 0,      // TODO: Remove (use default)
     "no-undef": 0,                // TODO: Remove (use default)
     "no-underscore-dangle": 0,    // Leave as 0. Commonly used for private variables.
     "no-unused-expressions": 0,   // TODO: Remove (use default)
     "no-unused-vars": 0,          // TODO: Remove (use default)
     "no-use-before-define": 0,    // TODO: Remove (use default)
     "no-wrap-func": 0,            // TODO: Remove (use default)
     "quotes": 0,                  // [2, "double", "avoid-escape"],
-    "semi": 0,                    // TODO: Remove (use default)
-    "semi-spacing": 0,            // TODO: Remove (use default)
     "space-infix-ops": 0,         // TODO: Remove (use default)
     "space-return-throw-case": 0, // TODO: Remove (use default)
     "strict": 0,                  // [2, "function"],
     "yoda": 0,                    // [2, "never"],
     // eslint-plugin-react rules. These are documented at
     // <https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules>
     "react/jsx-quotes": [2, "double", "avoid-escape"],
     "react/jsx-no-undef": 2,
--- a/browser/components/loop/content/shared/js/utils.js
+++ b/browser/components/loop/content/shared/js/utils.js
@@ -13,17 +13,17 @@ var inChrome = typeof Components != "und
 
   var mozL10n;
   if (inChrome) {
     this.EXPORTED_SYMBOLS = ["utils"];
     mozL10n = { get: function() {
       throw new Error("mozL10n.get not availabled from chrome!");
     }};
   } else {
-    mozL10n = document.mozL10n || navigator.mozL10n
+    mozL10n = document.mozL10n || navigator.mozL10n;
   }
 
   /**
    * Call types used for determining if a call is audio/video or audio-only.
    */
   var CALL_TYPES = {
     AUDIO_VIDEO: "audio-video",
     AUDIO_ONLY: "audio"
--- a/browser/components/loop/content/shared/js/websocket.js
+++ b/browser/components/loop/content/shared/js/websocket.js
@@ -41,17 +41,17 @@ loop.CallConnectionWebSocket = (function
     this._lastServerState = "init";
 
     // Set loop.debug.sdk to true in the browser, or standalone:
     // localStorage.setItem("debug.websocket", true);
     this._debugWebSocket =
       loop.shared.utils.getBoolPreference("debug.websocket");
 
     _.extend(this, Backbone.Events);
-  };
+  }
 
   CallConnectionWebSocket.prototype = {
     /**
      * Start the connection to the websocket.
      *
      * @return {Promise} A promise that resolves when the websocket
      *                   server connection is open and "hello"s have been
      *                   exchanged. It is rejected if there is a failure in
--- a/browser/components/loop/modules/CardDavImporter.jsm
+++ b/browser/components/loop/modules/CardDavImporter.jsm
@@ -301,17 +301,17 @@ this.CardDavImporter.prototype = {
           }
 
           if (name === "NICKNAME") {
             value = value.replace(/\\;/g, ";");
             // We don't store nickname in contact because it's not
             // a supported field. We're saving it off here in case we
             // need to use it if the fullname is blank.
             nickname = value;
-          };
+          }
 
           if (name === "ADR") {
             value = value.replace(/\\;/g, "\r");
             value = value.replace(/;/g, "\n");
             value = value.replace(/\r/g, ";");
             let pobox, extra, street, locality, region, code, country;
             let values = value.split(/\n/);
             if (values.length >= 7) {
@@ -450,14 +450,14 @@ this.CardDavImporter.prototype = {
           resolve(req);
         } else {
           reject(new Error(req.status + " " + req.statusText));
         }
       };
 
       req.onerror = function(error) {
         reject(error);
-      }
+      };
 
       req.send(body);
     });
   }
 };
--- a/browser/components/loop/modules/GoogleImporter.jsm
+++ b/browser/components/loop/modules/GoogleImporter.jsm
@@ -320,17 +320,17 @@ this.GoogleImporter.prototype = {
           resolve(doc);
         } else {
           reject(new Error(request.status + " " + request.statusText));
         }
       };
 
       request.onerror = function(error) {
         reject(error);
-      }
+      };
 
       request.send();
     });
   },
 
   /**
    * Fetches all the contacts in a users' address book.
    *
@@ -509,17 +509,17 @@ this.GoogleImporter.prototype = {
 
     let orgNodes = entry.getElementsByTagNameNS(kNS_GD, "organization");
     if (orgNodes.length) {
       contact.org = [];
       contact.jobTitle = [];
       for (let [,orgNode] of Iterator(orgNodes)) {
         let orgElement = orgNode.getElementsByTagNameNS(kNS_GD, "orgName")[0];
         let titleElement = orgNode.getElementsByTagNameNS(kNS_GD, "orgTitle")[0];
-        contact.org.push(orgElement ? orgElement.textContent : "")
+        contact.org.push(orgElement ? orgElement.textContent : "");
         contact.jobTitle.push(titleElement ? titleElement.textContent : "");
       }
     }
 
     contact.category = ["google"];
 
     // Basic sanity checking: make sure the name field isn't empty
     if (!("name" in contact) || contact.name[0].length == 0) {
--- a/browser/components/loop/modules/LoopCalls.jsm
+++ b/browser/components/loop/modules/LoopCalls.jsm
@@ -48,18 +48,19 @@ CallProgressSocket.prototype = {
    * Sends a hello message to the server.
    *
    * @param {function} Callback used after a successful handshake
    *                   over the progressUrl.
    * @param {function} Callback used if an error is encountered
    */
   connect: function(onSuccess, onError) {
     this._onSuccess = onSuccess;
-    this._onError = onError ||
-      (reason => {MozLoopService.log.warn("LoopCalls::callProgessSocket - ", reason);});
+    this._onError = onError || (reason => {
+      MozLoopService.log.warn("LoopCalls::callProgessSocket - ", reason);
+    });
 
     if (!onSuccess) {
       this._onError("missing onSuccess argument");
       return;
     }
 
     if (Services.io.offline) {
       this._onError("IO offline");
@@ -232,17 +233,17 @@ let LoopCallsInternal = {
    * @param {Object} version - LoopPushService notification version
    *
    * @returns {Promise}
    *
    */
 
   _getCalls: function(sessionType, version) {
     return MozLoopService.hawkRequest(sessionType, "/calls?version=" + version, "GET").then(
-      response => {this._processCalls(response, sessionType);}
+      response => { this._processCalls(response, sessionType); }
     );
   },
 
   /**
    * Process the calls array returned from a GET/calls?version request.
    * Only one active call is permitted at this time.
    *
    * @param {Object} response - response payload from GET
@@ -304,17 +305,17 @@ let LoopCallsInternal = {
           if (contact.blocked) {
             // Blocked! Send a busy signal back to the caller.
             this._returnBusy(callData);
             return;
           }
         }
 
         openChat();
-      })
+      });
     } else {
       openChat();
     }
   },
 
   /**
    * Starts a direct call to the contact addresses.
    *
@@ -392,17 +393,17 @@ let LoopCallsInternal = {
       callData.progressURL,
       callData.callId,
       callData.websocketToken);
     if (this.mocks.webSocket) {
       callProgress._websocket = this.mocks.webSocket;
     }
     // This instance of CallProgressSocket should stay alive until the underlying
     // websocket is closed since it is passed to the websocket as the nsIWebSocketListener.
-    callProgress.connect(() => {callProgress.sendBusy();});
+    callProgress.connect(() => { callProgress.sendBusy(); });
   }
 };
 Object.freeze(LoopCallsInternal);
 
 /**
  * Public API
  */
 this.LoopCalls = {
--- a/browser/components/loop/modules/LoopContacts.jsm
+++ b/browser/components/loop/modules/LoopContacts.jsm
@@ -283,17 +283,17 @@ const batch = function(operation, data, 
     });
   }, err => {
     if (err) {
       callback(err, processed);
       return;
     }
     callback(null, processed);
   });
-}
+};
 
 /**
  * Extend a `target` object with the properties defined in `source`.
  *
  * @param {Object} target The target object to receive properties defined in `source`
  * @param {Object} source The source object to copy properties from
  */
 const extend = function(target, source) {
--- a/browser/components/loop/modules/LoopRooms.jsm
+++ b/browser/components/loop/modules/LoopRooms.jsm
@@ -15,17 +15,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 XPCOMUtils.defineLazyGetter(this, "eventEmitter", function() {
   const {EventEmitter} = Cu.import("resource://gre/modules/devtools/event-emitter.js", {});
   return new EventEmitter();
 });
 XPCOMUtils.defineLazyGetter(this, "gLoopBundle", function() {
   return Services.strings.createBundle('chrome://browser/locale/loop/loop.properties');
 });
 XPCOMUtils.defineLazyModuleGetter(this, "loopUtils",
-  "resource:///modules/loop/utils.js", "utils")
+  "resource:///modules/loop/utils.js", "utils");
 XPCOMUtils.defineLazyModuleGetter(this, "loopCrypto",
   "resource:///modules/loop/crypto.js", "LoopCrypto");
 
 
 this.EXPORTED_SYMBOLS = ["LoopRooms", "roomsPushNotification"];
 
 // The maximum number of clients that we support currently.
 const CLIENT_MAX_SIZE = 2;
@@ -336,17 +336,17 @@ let LoopRoomsInternal = {
         let roomData = yield this.promiseDecryptRoomData(room);
 
         this.saveAndNotifyUpdate(roomData, isUpdate);
       } catch (error) {
         MozLoopService.log.error("Failed to decrypt room data: " + error);
         // Do what we can to save the room data.
         room.decryptedContext = {};
         this.saveAndNotifyUpdate(room, isUpdate);
-      };
+      }
     }
   }),
 
   /**
    * Fetch a list of rooms that the currently registered user is a member of.
    *
    * @param {String}   [version] If set, we will fetch a list of changed rooms since
    *                             `version`. Optional.
--- a/browser/components/loop/modules/MozLoopPushHandler.jsm
+++ b/browser/components/loop/modules/MozLoopPushHandler.jsm
@@ -5,17 +5,17 @@
 "use strict";
 
 const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Timer.jsm");
 
-const {MozLoopService} = Cu.import("resource:///modules/loop/MozLoopService.jsm", {});
+const { MozLoopService } = Cu.import("resource:///modules/loop/MozLoopService.jsm", {});
 const consoleLog = MozLoopService.log;
 
 this.EXPORTED_SYMBOLS = ["MozLoopPushHandler"];
 
 const CONNECTION_STATE_CLOSED = 0;
 const CONNECTION_STATE_CONNECTING = 1;
 const CONNECTION_STATE_OPEN = 2;
 
@@ -291,17 +291,17 @@ function PingMonitor(pingFunc, onTimeout
 
 PingMonitor.prototype = {
   /**
    * Function to restart the ping timeout and cancel any current timeout operation.
    */
   restart: function () {
     consoleLog.info("PushHandler: ping timeout restart");
     this.stop();
-    this._pingTimerID = setTimeout(() => {this._pingSend()}, this._pingInterval);
+    this._pingTimerID = setTimeout(() => { this._pingSend(); }, this._pingInterval);
   },
 
   /**
    * Function to stop the PingMonitor.
    */
   stop: function() {
     if (this._pingTimerID){
       clearTimeout(this._pingTimerID);
@@ -498,17 +498,17 @@ let MozLoopPushHandler = {
       return;
     }
 
     this.channels.set(channelID, {onRegistered: onRegistered,
                                   onNotification: onNotification});
     this._channelsToRegister.push(channelID);
     this._registerChannels();
   },
-  
+
   /**
    * Un-register a notification channel.
    *
    * @param {String} channelID Notification channel ID.
    */
   unregister: function(channelID) {
     consoleLog.info("MozLoopPushHandler: un-register channel ", channelID);
     if (!this.channels.has(channelID)) {
@@ -766,24 +766,24 @@ let MozLoopPushHandler = {
     this._pushSocket = new PushSocket(this._mockWebSocket);
 
     let performOpen = () => {
       consoleLog.info("PushHandler: attempt to open websocket to PushServer: ", this.pushServerUri);
       this._pushSocket.connect(this.pushServerUri,
                                (aMsg) => this._onMsg(aMsg),
                                () => this._onStart(),
                                (aCode, aReason) => this._onClose(aCode, aReason));
-    }
+    };
 
     let pushServerURLFetchError = () => {
       consoleLog.warn("PushHandler: Could not retrieve push server URL from Loop server, will retry");
       this._pushSocket = undefined;
       this._retryManager.retry(() => this._openSocket());
       return;
-    }
+    };
 
     try {
       this.pushServerUri = Services.prefs.getCharPref("loop.debug.pushserver");
     }
     catch (e) {}
 
     if (!this.pushServerUri) {
       // Get push server to use from the Loop server
@@ -866,9 +866,9 @@ let MozLoopPushHandler = {
    * @param {string} channelID - identification token to use in registration for this channel.
    */
   _sendRegistration: function(channelID) {
     if (channelID) {
       this._pushSocket.send({messageType: "register",
                              channelID: channelID});
     }
   },
-}
+};
--- a/browser/components/loop/modules/MozLoopService.jsm
+++ b/browser/components/loop/modules/MozLoopService.jsm
@@ -59,17 +59,17 @@ this.EXPORTED_SYMBOLS = ["MozLoopService
   "TWO_WAY_MEDIA_CONN_LENGTH", "SHARING_STATE_CHANGE"];
 
 XPCOMUtils.defineLazyModuleGetter(this, "injectLoopAPI",
   "resource:///modules/loop/MozLoopAPI.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "convertToRTCStatsReport",
   "resource://gre/modules/media/RTCStatsReport.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "loopUtils",
-  "resource:///modules/loop/utils.js", "utils")
+  "resource:///modules/loop/utils.js", "utils");
 XPCOMUtils.defineLazyModuleGetter(this, "loopCrypto",
   "resource:///modules/loop/crypto.js", "LoopCrypto");
 
 XPCOMUtils.defineLazyModuleGetter(this, "Chat", "resource:///modules/Chat.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "CommonUtils",
                                   "resource://services-common/utils.js");
 
@@ -165,22 +165,22 @@ let MozLoopServiceInternal = {
   /**
    * The current deferreds for the registration processes. This is set if in progress
    * or the registration was successful. This is null if a registration attempt was
    * unsuccessful.
    */
   deferredRegistrations: new Map(),
 
   get pushHandler() {
-    return this.mocks.pushHandler || MozLoopPushHandler
+    return this.mocks.pushHandler || MozLoopPushHandler;
   },
 
   // The uri of the Loop server.
   get loopServerUri() {
-    return Services.prefs.getCharPref("loop.server")
+    return Services.prefs.getCharPref("loop.server");
   },
 
   /**
    * The initial delay for push registration. This ensures we don't start
    * kicking off straight after browser startup, just a few seconds later.
    */
   get initialRegistrationDelayMilliseconds() {
     try {
@@ -360,17 +360,17 @@ let MozLoopServiceInternal = {
     return new Promise((resolve, reject) => {
       let onRegistered = (error, pushURL, channelID) => {
         log.debug("createNotificationChannel onRegistered:", error, pushURL, channelID);
         if (error) {
           reject(Error(error));
         } else {
           resolve(this.registerWithLoopServer(sessionType, serviceType, pushURL));
         }
-      }
+      };
 
       this.pushHandler.register(channelID, onRegistered, onNotification);
     });
   },
 
   /**
    * Starts registration of Loop with the PushServer and the LoopServer.
    * Successful PushServer registration will automatically trigger the registration
@@ -438,30 +438,30 @@ let MozLoopServiceInternal = {
     if (!pushURL || !sessionType || !serviceType) {
       return Promise.reject(new Error("Invalid or missing parameters for registerWithLoopServer"));
     }
 
     let pushURLs = this.pushURLs.get(sessionType);
 
     // Create a blank URL record set if none exists for this sessionType.
     if (!pushURLs) {
-      pushURLs = {calls: undefined, rooms: undefined};
+      pushURLs = { calls: undefined, rooms: undefined };
       this.pushURLs.set(sessionType, pushURLs);
     }
 
     if (pushURLs[serviceType] == pushURL) {
       return Promise.resolve(pushURL);
     }
 
     let newURLs = {calls: pushURLs.calls,
                    rooms: pushURLs.rooms};
     newURLs[serviceType] = pushURL;
 
     return this.hawkRequestInternal(sessionType, "/registration", "POST",
-                                    {simplePushURLs: newURLs}).then(
+                                    { simplePushURLs: newURLs }).then(
       (response) => {
         // If this failed we got an invalid token.
         if (!this.storeSessionToken(sessionType, response.headers)) {
           throw new Error("session-token-wrong-size");
         }
 
         // Record the new push URL
         pushURLs[serviceType] = pushURL;
@@ -528,17 +528,17 @@ let MozLoopServiceInternal = {
             // Authorization failed, invalid token. This is fine since it may mean we already logged out.
             log.debug("already unregistered - invalid token", sessionType);
             return "already unregistered, sessionType = " + sessionType;
           }
 
           log.error("Failed to unregister with the loop server. Error: ", error);
           throw error;
         });
-    }
+    };
 
     return Promise.all([unregister(sessionType, callsPushURL), unregister(sessionType, roomsPushURL)]);
   },
 
   /**
    * Performs a hawk based request to the loop server - there is no pre-registration
    * for this request, if this is required, use hawkRequest.
    *
@@ -579,17 +579,17 @@ let MozLoopServiceInternal = {
       // mutating the values of the object passed in.
       let newPayloadObj = {};
       for (let property of Object.getOwnPropertyNames(payloadObj)) {
         if (typeof payloadObj[property] == "string") {
           newPayloadObj[property] = CommonUtils.encodeUTF8(payloadObj[property]);
         } else {
           newPayloadObj[property] = payloadObj[property];
         }
-      };
+      }
       payloadObj = newPayloadObj;
     }
 
     let handle401Error = (error) => {
       if (sessionType === LOOP_SESSION_TYPE.FXA) {
         return MozLoopService.logOutFromFxA().then(() => {
           // Set a user-visible error after logOutFromFxA clears existing ones.
           this.setError("login", error);
@@ -799,17 +799,17 @@ let MozLoopServiceInternal = {
         // Send job to worker to do log sanitation, transcoding and saving to
         // disk for pickup by telemetry on next startup, which then uploads it.
 
         let worker = new ChromeWorker("MozLoopWorker.js");
         worker.onmessage = function(e) {
           log.info(e.data.ok ?
             "Successfully staged loop report for telemetry upload." :
             ("Failed to stage loop report. Error: " + e.data.fail));
-        }
+        };
         worker.postMessage(job);
       });
     }, pc.id);
   },
 
   getChatWindowID: function(conversationWindowData) {
     // Try getting a window ID that can (re-)identify this conversation, or resort
     // to a globally unique one as a last resort.
@@ -937,17 +937,17 @@ let MozLoopServiceInternal = {
       }
       let prefType = Services.prefs.getPrefType(this.getSessionTokenPrefName(SESSION_TYPE));
       if (prefType == Services.prefs.PREF_INVALID) {
         throw new Error("No FxA hawk token returned and we don't have one saved");
       }
 
       return JSON.parse(response.body);
     },
-    error => {this._hawkRequestError(error);});
+    error => { this._hawkRequestError(error); });
   },
 
   /**
    * Get the OAuth client constructed with Loop OAauth parameters.
    *
    * @return {Promise}
    */
   promiseFxAOAuthClient: Task.async(function* () {
@@ -1020,17 +1020,17 @@ let MozLoopServiceInternal = {
 
     let payload = {
       code: code,
       state: state,
     };
     return this.hawkRequestInternal(LOOP_SESSION_TYPE.FXA, "/fxa-oauth/token", "POST", payload).then(response => {
       return JSON.parse(response.body);
     },
-    error => {this._hawkRequestError(error);});
+    error => { this._hawkRequestError(error); });
   },
 
   /**
    * Called once gFxAOAuthClient fires onComplete.
    *
    * @param {Deferred} deferred used to resolve the gFxAOAuthClientPromise
    * @param {Object} result (with code and state)
    */
@@ -1684,17 +1684,17 @@ this.MozLoopService = {
    * @returns {Promise}
    *        Returns a promise that resolves to the response of the API call,
    *        or is rejected with an error.  If the server response can be parsed
    *        as JSON and contains an 'error' property, the promise will be
    *        rejected with this JSON-parsed response.
    */
   hawkRequest: function(sessionType, path, method, payloadObj) {
     return MozLoopServiceInternal.hawkRequest(sessionType, path, method, payloadObj).catch(
-      error => {MozLoopServiceInternal._hawkRequestError(error);});
+      error => { MozLoopServiceInternal._hawkRequestError(error); });
   },
 
   /**
    * Returns the window data for a specific conversation window id.
    *
    * This data will be relevant to the type of window, e.g. rooms or calls.
    * See LoopRooms or LoopCalls for more information.
    *
--- a/browser/components/loop/standalone/content/js/multiplexGum.js
+++ b/browser/components/loop/standalone/content/js/multiplexGum.js
@@ -53,17 +53,17 @@ loop.standaloneMedia = (function() {
         // Operate on a copy of the array in case any of the callbacks
         // calls reset, which would cause an infinite-recursion.
         this.userMedia.successCallbacks = [];
         this.userMedia.errorCallbacks = [];
         callbacks.forEach(function(cb) {
           if (typeof cb == "function") {
             cb(param);
           }
-        })
+        });
       }
       function handleSuccess(localStream) {
         this.userMedia.pending = false;
         this.userMedia.localStream = localStream;
         this.userMedia.error = null;
         handleResult.call(this, this.userMedia.successCallbacks.slice(0), localStream);
       }
 
@@ -129,17 +129,17 @@ loop.standaloneMedia = (function() {
     }
   };
 
   var singletonMultiplexGum = new _MultiplexGum();
   function myGetUserMedia() {
     // This function is needed to pull in the instance
     // of the singleton for tests to overwrite the used instance.
     singletonMultiplexGum.getPermsAndCacheMedia.apply(singletonMultiplexGum, arguments);
-  };
+  }
   patchSymbolIfExtant("navigator", "mozGetUserMedia", myGetUserMedia);
   patchSymbolIfExtant("navigator", "webkitGetUserMedia", myGetUserMedia);
   patchSymbolIfExtant("navigator", "getUserMedia", myGetUserMedia);
   patchSymbolIfExtant("TBPlugin", "getUserMedia", myGetUserMedia);
 
   return {
     multiplexGum: singletonMultiplexGum,
     _MultiplexGum: _MultiplexGum,
--- a/browser/components/loop/standalone/content/js/standaloneMetricsStore.js
+++ b/browser/components/loop/standalone/content/js/standaloneMetricsStore.js
@@ -31,17 +31,17 @@ loop.store.StandaloneMetricsStore = (fun
     audioMute: "audio mute",
     button: "button click",
     download: "download button click",
     faceMute: "face mute",
     link: "link click",
     pageLoad: "page load messages",
     success: "success",
     support: "support link click"
-  }
+  };
 
   var StandaloneMetricsStore = loop.store.createStore({
     actions: [
       "gotMediaPermission",
       "joinRoom",
       "leaveRoom",
       "mediaConnected",
       "recordClick"
@@ -127,17 +127,17 @@ loop.store.StandaloneMetricsStore = (fun
         "Leave conversation");
     },
 
     /**
      * Handles notification that two-way media has been achieved.
      */
     mediaConnected: function() {
       this._storeEvent(METRICS_GA_CATEGORY.general, METRICS_GA_ACTIONS.success,
-        "Media connected")
+        "Media connected");
     },
 
     /**
      * Handles recording link clicks.
      *
      * @param {sharedActions.RecordClick} actionData The data associated with
      *                                               the link.
      */
--- a/browser/components/loop/standalone/content/js/standaloneRoomViews.js
+++ b/browser/components/loop/standalone/content/js/standaloneRoomViews.js
@@ -210,17 +210,17 @@ loop.standaloneRoomViews = (function(moz
     },
 
     recordClick: function(event) {
       // Check for valid href, as this is clicking on the paragraph -
       // so the user may be clicking on the text rather than the link.
       if (event.target && event.target.href) {
         this.props.dispatcher.dispatch(new sharedActions.RecordClick({
           linkInfo: event.target.href
-        }))
+        }));
       }
     },
 
     render: function() {
       return (
         React.createElement("footer", null, 
           React.createElement("p", {dangerouslySetInnerHTML: {__html: this._getContent()}, 
              onClick: this.recordClick}), 
@@ -283,17 +283,17 @@ loop.standaloneRoomViews = (function(moz
       roomContextUrls: React.PropTypes.array,
       roomName: React.PropTypes.string,
       roomInfoFailure: React.PropTypes.string
     },
 
     getInitialState: function() {
       return {
         failureLogged: false
-      }
+      };
     },
 
     _logFailure: function(message) {
       if (!this.state.failureLogged) {
         console.error(mozL10n.get(message));
         this.state.failureLogged = true;
       }
     },
--- a/browser/components/loop/standalone/content/js/standaloneRoomViews.jsx
+++ b/browser/components/loop/standalone/content/js/standaloneRoomViews.jsx
@@ -210,17 +210,17 @@ loop.standaloneRoomViews = (function(moz
     },
 
     recordClick: function(event) {
       // Check for valid href, as this is clicking on the paragraph -
       // so the user may be clicking on the text rather than the link.
       if (event.target && event.target.href) {
         this.props.dispatcher.dispatch(new sharedActions.RecordClick({
           linkInfo: event.target.href
-        }))
+        }));
       }
     },
 
     render: function() {
       return (
         <footer>
           <p dangerouslySetInnerHTML={{__html: this._getContent()}}
              onClick={this.recordClick}></p>
@@ -283,17 +283,17 @@ loop.standaloneRoomViews = (function(moz
       roomContextUrls: React.PropTypes.array,
       roomName: React.PropTypes.string,
       roomInfoFailure: React.PropTypes.string
     },
 
     getInitialState: function() {
       return {
         failureLogged: false
-      }
+      };
     },
 
     _logFailure: function(message) {
       if (!this.state.failureLogged) {
         console.error(mozL10n.get(message));
         this.state.failureLogged = true;
       }
     },
--- a/browser/components/loop/test/desktop-local/roomViews_test.js
+++ b/browser/components/loop/test/desktop-local/roomViews_test.js
@@ -675,11 +675,11 @@ describe("loop.roomViews", function () {
         view = mountTestComponent({
           roomData: { roomContextUrls: [fakeContextURL] }
         });
 
         var closeBtn = view.getDOMNode().querySelector(".room-context-btn-close");
         React.addons.TestUtils.Simulate.click(closeBtn);
         expect(view.getDOMNode()).to.eql(null);
       });
-    })
+    });
   });
 });
--- a/browser/components/loop/test/mochitest/browser_CardDavImporter.js
+++ b/browser/components/loop/test/mochitest/browser_CardDavImporter.js
@@ -4,17 +4,17 @@
 "use strict";
 
 const {CardDavImporter} = Cu.import("resource:///modules/loop/CardDavImporter.jsm", {});
 
 const kAuth = {
   "method": "basic",
   "user": "username",
   "password": "p455w0rd"
-}
+};
 
 
 // "pid" for "provider ID"
 let vcards = [
     "VERSION:3.0\n" +
     "N:Smith;John;;;\n" +
     "FN:John Smith\n" +
     "EMAIL;TYPE=work:john.smith@example.com\n" +
@@ -161,17 +161,17 @@ const monkeyPatchImporter = function(imp
         default:
           reject(new Error("404 Not Found"));
           return;
       }
       resolve({"responseXML": responseXML});
     });
   }.bind(importer);
   return importer;
-}
+};
 
 add_task(function* test_CardDavImport() {
   let importer = monkeyPatchImporter(new CardDavImporter());
   yield new Promise ((resolve, reject) => {
     info("Initiating import");
     importer.startImport({
         "host": "example.com",
         "auth": kAuth.method,
@@ -318,9 +318,9 @@ add_task(function* test_CardDavImport() 
 
   error = yield new Promise ((resolve, reject) => {
     info("Initiating import");
     importer.startImport({
         "host": "example.com",
       }, (err, result) => { err ? resolve(err) : reject(new Error("Should have failed")); }, mockDb);
   });
   Assert.equal(error.message, "No authentication specified", "Missing parameters should generate error");
-})
+});
--- a/browser/components/loop/test/mochitest/browser_LoopContacts.js
+++ b/browser/components/loop/test/mochitest/browser_LoopContacts.js
@@ -101,17 +101,17 @@ const promiseLoadContacts = function() {
 };
 
 // Get a copy of a contact without private properties.
 const normalizeContact = function(contact) {
   let result = {};
   // Get a copy of contact without private properties.
   for (let prop of Object.getOwnPropertyNames(contact)) {
     if (!prop.startsWith("_")) {
-      result[prop] = contact[prop]
+      result[prop] = contact[prop];
     }
   }
   return result;
 };
 
 const compareContacts = function(contact1, contact2) {
   Assert.ok("_guid" in contact1, "First contact should have an ID.");
   Assert.deepEqual(normalizeContact(contact1), normalizeContact(contact2));
@@ -184,17 +184,17 @@ add_task(function* () {
 
   yield new Promise((resolve, reject) => {
     LoopContacts.removeAll(function(err) {
       Assert.ok(!err, "There shouldn't be an error");
       LoopContacts.getAll(function(err, found) {
         Assert.ok(!err, "There shouldn't be an error");
         Assert.equal(found.length, 0, "There shouldn't be any contacts left");
         resolve();
-      })
+      });
     });
   });
 });
 
 // Test retrieving a contact.
 add_task(function* () {
   let contacts = yield promiseLoadContacts();
 
--- a/browser/components/loop/test/mochitest/browser_mozLoop_sharingListeners.js
+++ b/browser/components/loop/test/mochitest/browser_mozLoop_sharingListeners.js
@@ -28,17 +28,17 @@ let handlers = [
   }
 ];
 
 function promiseWindowIdReceivedOnAdd(handler) {
   return new Promise(resolve => {
     handler.resolve = resolve;
     gMozLoopAPI.addBrowserSharingListener(handler.listener);
   });
-};
+}
 
 let createdTabs = [];
 
 function promiseWindowIdReceivedNewTab(handlers = []) {
   let promiseHandlers = [];
 
   handlers.forEach(handler => {
     promiseHandlers.push(new Promise(resolve => {
@@ -47,17 +47,17 @@ function promiseWindowIdReceivedNewTab(h
   });
 
   let createdTab = gBrowser.selectedTab = gBrowser.addTab();
   createdTabs.push(createdTab);
 
   promiseHandlers.push(promiseTabLoadEvent(createdTab, "about:mozilla"));
 
   return Promise.all(promiseHandlers);
-};
+}
 
 function promiseRemoveTab(tab) {
   return new Promise(resolve => {
     gBrowser.tabContainer.addEventListener("TabClose", function onTabClose() {
       gBrowser.tabContainer.removeEventListener("TabClose", onTabClose);
       resolve();
     });
     gBrowser.removeTab(tab);
@@ -165,17 +165,17 @@ add_task(function* test_infoBar() {
 
     let button = bar.querySelector(".notification-button");
     Assert.ok(button, "There should be a button present");
     Assert.strictEqual(button.type, "menu-button", "We're expecting a menu-button");
     Assert.strictEqual(button.getAttribute("anchor"), "dropmarker",
       "The popup should be opening anchored to the dropmarker");
     Assert.strictEqual(button.getElementsByTagNameNS(kNSXUL, "menupopup").length, 1,
       "There should be a popup attached to the button");
-  }
+  };
 
   testBarProps();
 
   // When we switch tabs, the infobar should move along with it. We use `selectedIndex`
   // here, because that's the setter that triggers the 'select' event. This event
   // is what LoopUI listens to and moves the infobar.
   gBrowser.selectedIndex = Array.indexOf(gBrowser.tabs, createdTabs[0]);
 
--- a/browser/components/loop/test/shared/otSdkDriver_test.js
+++ b/browser/components/loop/test/shared/otSdkDriver_test.js
@@ -14,19 +14,19 @@ describe("loop.OTSdkDriver", function ()
   var sandbox;
   var dispatcher, driver, mozLoop, publisher, sdk, session, sessionData;
   var fakeLocalElement, fakeRemoteElement, fakeScreenElement;
   var publisherConfig, fakeEvent;
 
   beforeEach(function() {
     sandbox = sinon.sandbox.create();
 
-    fakeLocalElement = {fake: 1};
-    fakeRemoteElement = {fake: 2};
-    fakeScreenElement = {fake: 3};
+    fakeLocalElement = { fake: 1 };
+    fakeRemoteElement = { fake: 2 };
+    fakeScreenElement = { fake: 3 };
     fakeEvent = {
       preventDefault: sinon.stub()
     };
     publisherConfig = {
       fake: "config"
     };
     sessionData = {
       apiKey: "1234567890",
@@ -93,47 +93,47 @@ describe("loop.OTSdkDriver", function ()
 
   afterEach(function() {
     sandbox.restore();
   });
 
   describe("Constructor", function() {
     it("should throw an error if the dispatcher is missing", function() {
       expect(function() {
-        new loop.OTSdkDriver({sdk: sdk});
+        new loop.OTSdkDriver({ sdk: sdk });
       }).to.Throw(/dispatcher/);
     });
 
     it("should throw an error if the sdk is missing", function() {
       expect(function() {
         new loop.OTSdkDriver({dispatcher: dispatcher});
       }).to.Throw(/sdk/);
     });
   });
 
   describe("#setupStreamElements", function() {
     it("should call initPublisher", function() {
       driver.setupStreamElements(new sharedActions.SetupStreamElements({
-        getLocalElementFunc: function() {return fakeLocalElement;},
-        getRemoteElementFunc: function() {return fakeRemoteElement;},
+        getLocalElementFunc: function() { return fakeLocalElement; },
+        getRemoteElementFunc: function() { return fakeRemoteElement; },
         publisherConfig: publisherConfig
       }));
 
       sinon.assert.calledOnce(sdk.initPublisher);
       sinon.assert.calledWith(sdk.initPublisher, fakeLocalElement, publisherConfig);
     });
   });
 
   describe("#retryPublishWithoutVideo", function() {
     beforeEach(function() {
       sdk.initPublisher.returns(publisher);
 
       driver.setupStreamElements(new sharedActions.SetupStreamElements({
-        getLocalElementFunc: function() {return fakeLocalElement;},
-        getRemoteElementFunc: function() {return fakeRemoteElement;},
+        getLocalElementFunc: function() { return fakeLocalElement; },
+        getRemoteElementFunc: function() { return fakeRemoteElement; },
         publisherConfig: publisherConfig
       }));
     });
 
     it("should make MediaStreamTrack.getSources return without a video source", function(done) {
       driver.retryPublishWithoutVideo();
 
       window.MediaStreamTrack.getSources(function(sources) {
@@ -153,18 +153,18 @@ describe("loop.OTSdkDriver", function ()
     });
   });
 
   describe("#setMute", function() {
     beforeEach(function() {
       sdk.initPublisher.returns(publisher);
 
       driver.setupStreamElements(new sharedActions.SetupStreamElements({
-        getLocalElementFunc: function() {return fakeLocalElement;},
-        getRemoteElementFunc: function() {return fakeRemoteElement;},
+        getLocalElementFunc: function() { return fakeLocalElement; },
+        getRemoteElementFunc: function() { return fakeRemoteElement; },
         publisherConfig: publisherConfig
       }));
     });
 
     it("should publishAudio with the correct enabled value", function() {
       driver.setMute(new sharedActions.SetMute({
         type: "audio",
         enabled: false
@@ -599,19 +599,19 @@ describe("loop.OTSdkDriver", function ()
     });
   });
 
   describe("Events (general media)", function() {
     beforeEach(function() {
       driver.connectSession(sessionData);
 
       driver.setupStreamElements(new sharedActions.SetupStreamElements({
-        getLocalElementFunc: function() {return fakeLocalElement;},
-        getScreenShareElementFunc: function() {return fakeScreenElement;},
-        getRemoteElementFunc: function() {return fakeRemoteElement;},
+        getLocalElementFunc: function() {return fakeLocalElement; },
+        getScreenShareElementFunc: function() {return fakeScreenElement; },
+        getRemoteElementFunc: function() {return fakeRemoteElement; },
         publisherConfig: publisherConfig
       }));
     });
 
     describe("connectionDestroyed", function() {
       it("should dispatch a remotePeerDisconnected action if the client" +
         "disconnected", function() {
           session.trigger("connectionDestroyed", {
@@ -727,17 +727,17 @@ describe("loop.OTSdkDriver", function ()
         fakeStream = {
           hasVideo: true,
           videoType: "camera",
           videoDimensions: {width: 1, height: 2}
         };
       });
 
       it("should dispatch a VideoDimensionsChanged action", function() {
-        publisher.trigger("streamCreated", {stream: fakeStream});
+        publisher.trigger("streamCreated", { stream: fakeStream });
 
         sinon.assert.called(dispatcher.dispatch);
         sinon.assert.calledWithExactly(dispatcher.dispatch,
           new sharedActions.VideoDimensionsChanged({
             isLocal: true,
             videoType: "camera",
             dimensions: {width: 1, height: 2}
           }));
@@ -768,103 +768,103 @@ describe("loop.OTSdkDriver", function ()
         fakeStream = {
           hasVideo: true,
           videoType: "camera",
           videoDimensions: {width: 1, height: 2}
         };
       });
 
       it("should dispatch a VideoDimensionsChanged action", function() {
-        session.trigger("streamCreated", {stream: fakeStream});
+        session.trigger("streamCreated", { stream: fakeStream });
 
         sinon.assert.called(dispatcher.dispatch);
         sinon.assert.calledWithExactly(dispatcher.dispatch,
           new sharedActions.VideoDimensionsChanged({
             isLocal: false,
             videoType: "camera",
-            dimensions: {width: 1, height: 2}
+            dimensions: { width: 1, height: 2 }
           }));
       });
 
       it("should dispatch a ConnectionStatus action", function() {
         driver._metrics.connections = 1;
 
-        session.trigger("streamCreated", {stream: fakeStream});
+        session.trigger("streamCreated", { stream: fakeStream });
 
         sinon.assert.called(dispatcher.dispatch);
         sinon.assert.calledWithExactly(dispatcher.dispatch,
           new sharedActions.ConnectionStatus({
             event: "Session.streamCreated",
             state: "receiving",
             connections: 1,
             recvStreams: 1,
             sendStreams: 0
           }));
       });
 
       it("should subscribe to a camera stream", function() {
-        session.trigger("streamCreated", {stream: fakeStream});
+        session.trigger("streamCreated", { stream: fakeStream });
 
         sinon.assert.calledOnce(session.subscribe);
         sinon.assert.calledWithExactly(session.subscribe,
           fakeStream, fakeRemoteElement, publisherConfig);
       });
 
       it("should subscribe to a screen sharing stream", function() {
         fakeStream.videoType = "screen";
 
-        session.trigger("streamCreated", {stream: fakeStream});
+        session.trigger("streamCreated", { stream: fakeStream });
 
         sinon.assert.calledOnce(session.subscribe);
         sinon.assert.calledWithExactly(session.subscribe,
           fakeStream, fakeScreenElement, publisherConfig);
       });
 
       it("should dispatch a mediaConnected action if both streams are up", function() {
         driver._publishedLocalStream = true;
 
-        session.trigger("streamCreated", {stream: fakeStream});
+        session.trigger("streamCreated", { stream: fakeStream });
 
         // Called twice due to the VideoDimensionsChanged above.
         sinon.assert.called(dispatcher.dispatch);
         sinon.assert.calledWithMatch(dispatcher.dispatch,
           new sharedActions.MediaConnected({}));
       });
 
       it("should store the start time when both streams are up and" +
       " driver._sendTwoWayMediaTelemetry is true", function() {
         driver._sendTwoWayMediaTelemetry = true;
         driver._publishedLocalStream = true;
         var startTime = 1;
         sandbox.stub(performance, "now").returns(startTime);
 
-        session.trigger("streamCreated", {stream: fakeStream});
+        session.trigger("streamCreated", { stream: fakeStream });
 
         expect(driver._getTwoWayMediaStartTime()).to.eql(startTime);
       });
 
       it("should not store the start time when both streams are up and" +
          " driver._isDesktop is false", function() {
-        driver._isDesktop = false ;
+        driver._isDesktop = false;
         driver._publishedLocalStream = true;
         var startTime = 73;
         sandbox.stub(performance, "now").returns(startTime);
 
-        session.trigger("streamCreated", {stream: fakeStream});
+        session.trigger("streamCreated", { stream: fakeStream });
 
         expect(driver._getTwoWayMediaStartTime()).to.not.eql(startTime);
       });
 
 
       it("should not dispatch a mediaConnected action for screen sharing streams",
         function() {
           driver._publishedLocalStream = true;
           fakeStream.videoType = "screen";
 
-          session.trigger("streamCreated", {stream: fakeStream});
+          session.trigger("streamCreated", { stream: fakeStream });
 
           sinon.assert.neverCalledWithMatch(dispatcher.dispatch,
             sinon.match.hasOwn("name", "mediaConnected"));
         });
 
       it("should not dispatch a ReceivingScreenShare action for camera streams",
         function() {
           session.trigger("streamCreated", {stream: fakeStream});
@@ -872,22 +872,22 @@ describe("loop.OTSdkDriver", function ()
           sinon.assert.neverCalledWithMatch(dispatcher.dispatch,
             new sharedActions.ReceivingScreenShare({receiving: true}));
         });
 
       it("should dispatch a ReceivingScreenShare action for screen sharing streams",
         function() {
           fakeStream.videoType = "screen";
 
-          session.trigger("streamCreated", {stream: fakeStream});
+          session.trigger("streamCreated", { stream: fakeStream });
 
           // Called twice due to the VideoDimensionsChanged above.
           sinon.assert.called(dispatcher.dispatch);
           sinon.assert.calledWithExactly(dispatcher.dispatch,
-            new sharedActions.ReceivingScreenShare({receiving: true}));
+            new sharedActions.ReceivingScreenShare({ receiving: true }));
         });
     });
 
     describe("streamDestroyed (publisher/local)", function() {
       it("should dispatch a ConnectionStatus action", function() {
         driver._metrics.sendStreams = 1;
         driver._metrics.recvStreams = 1;
         driver._metrics.connections = 2;
@@ -911,17 +911,17 @@ describe("loop.OTSdkDriver", function ()
 
       beforeEach(function() {
         fakeStream = {
           videoType: "screen"
         };
       });
 
       it("should dispatch a ReceivingScreenShare action", function() {
-        session.trigger("streamDestroyed", {stream: fakeStream});
+        session.trigger("streamDestroyed", { stream: fakeStream });
 
         sinon.assert.called(dispatcher.dispatch);
         sinon.assert.calledWithExactly(dispatcher.dispatch,
           new sharedActions.ReceivingScreenShare({
             receiving: false
           }));
       });
 
@@ -941,17 +941,17 @@ describe("loop.OTSdkDriver", function ()
             recvStreams: 0,
             sendStreams: 1
           }));
       });
 
       it("should not dispatch an action if the videoType is camera", function() {
         fakeStream.videoType = "camera";
 
-        session.trigger("streamDestroyed", {stream: fakeStream});
+        session.trigger("streamDestroyed", { stream: fakeStream });
 
         sinon.assert.neverCalledWithMatch(dispatcher.dispatch,
           sinon.match.hasOwn("name", "receivingScreenShare"));
       });
     });
 
     describe("streamPropertyChanged", function() {
       var fakeStream = {
@@ -996,75 +996,75 @@ describe("loop.OTSdkDriver", function ()
         session.connection = {
           id: "localUser"
         };
       });
 
       it("should dispatch a RemotePeerConnected action if this is for a remote user",
         function() {
           session.trigger("connectionCreated", {
-            connection: {id: "remoteUser"}
+            connection: { id: "remoteUser" }
           });
 
           sinon.assert.called(dispatcher.dispatch);
           sinon.assert.calledWithExactly(dispatcher.dispatch,
             new sharedActions.RemotePeerConnected());
         });
 
       it("should store the connection details for a remote user", function() {
         session.trigger("connectionCreated", {
-          connection: {id: "remoteUser"}
+          connection: { id: "remoteUser" }
         });
 
         expect(driver.connections).to.include.keys("remoteUser");
       });
 
       it("should dispatch a ConnectionStatus action for a remote user", function() {
         driver._metrics.connections = 1;
         driver._metrics.sendStreams = 1;
 
         session.trigger("connectionCreated", {
-          connection: {id: "remoteUser"}
+          connection: { id: "remoteUser" }
         });
 
         sinon.assert.called(dispatcher.dispatch);
         sinon.assert.calledWithExactly(dispatcher.dispatch,
           new sharedActions.ConnectionStatus({
           event: "Session.connectionCreated",
           state: "sending",
           connections: 2,
           recvStreams: 0,
           sendStreams: 1
         }));
       });
 
       it("should not dispatch an RemotePeerConnected action if this is for a local user",
         function() {
           session.trigger("connectionCreated", {
-            connection: {id: "localUser"}
+            connection: { id: "localUser" }
           });
 
           sinon.assert.neverCalledWithMatch(dispatcher.dispatch,
             sinon.match.hasOwn("name", "remotePeerConnected"));
         });
 
       it("should not store the connection details for a local user", function() {
         session.trigger("connectionCreated", {
-          connection: {id: "localUser"}
+          connection: { id: "localUser" }
         });
 
         expect(driver.connections).to.not.include.keys("localUser");
       });
 
       it("should dispatch a ConnectionStatus action for a remote user", function() {
         driver._metrics.connections = 0;
         driver._metrics.sendStreams = 0;
 
         session.trigger("connectionCreated", {
-          connection: {id: "localUser"}
+          connection: { id: "localUser" }
         });
 
         sinon.assert.called(dispatcher.dispatch);
         sinon.assert.calledWithExactly(dispatcher.dispatch,
           new sharedActions.ConnectionStatus({
             event: "Session.connectionCreated",
             state: "waiting",
             connections: 1,
--- a/browser/components/loop/test/standalone/standaloneMetricsStore_test.js
+++ b/browser/components/loop/test/standalone/standaloneMetricsStore_test.js
@@ -87,17 +87,17 @@ describe("loop.store.StandaloneMetricsSt
       store.recordClick(new sharedActions.RecordClick({
         linkInfo: "fake"
       }));
 
       sinon.assert.calledOnce(window.ga);
       sinon.assert.calledWithExactly(window.ga,
         "send", "event", METRICS_GA_CATEGORY.general, METRICS_GA_ACTIONS.linkClick,
         "fake");
-    })
+    });
   });
 
   describe("Store Change Handlers", function() {
     it("should log an event on room full", function() {
       fakeActiveRoomStore.setStoreState({roomState: ROOM_STATES.FULL});
 
       sinon.assert.calledOnce(window.ga);
       sinon.assert.calledWithExactly(window.ga,
--- a/browser/components/loop/test/standalone/standaloneRoomViews_test.js
+++ b/browser/components/loop/test/standalone/standaloneRoomViews_test.js
@@ -244,17 +244,17 @@ describe("loop.standaloneRoomViews", fun
         var view = mountTestComponent();
 
         activeRoomStore.setStoreState({roomState: ROOM_STATES.GATHER});
 
         expect(view._videoDimensionsCache).eql({
           local: {},
           remote: {}
         });
-      })
+      });
     });
 
     describe("#publishStream", function() {
       var view;
 
       beforeEach(function() {
         view = mountTestComponent();
         view.setState({
--- a/browser/components/loop/test/standalone/standalone_client_test.js
+++ b/browser/components/loop/test/standalone/standalone_client_test.js
@@ -89,17 +89,17 @@ describe("loop.StandaloneClient", functi
           client.requestCallUrlInfo("fakeCallUrlToken", sandbox.stub());
           requests[0].respond(404, {"Content-Type": "application/json"},
                               error);
 
           sinon.assert.calledOnce(console.error);
           sinon.assert.calledWithExactly(console.error, "Server error",
                                         "HTTP 404 Not Found", serverResponse);
         });
-      })
+     });
     });
 
 
 
     describe("requestCallInfo", function() {
       var client, fakeServerErrorDescription;
 
       beforeEach(function() {
--- a/browser/components/loop/test/xpcshell/head.js
+++ b/browser/components/loop/test/xpcshell/head.js
@@ -130,17 +130,17 @@ let mockPushHandler = {
   }
 };
 
 /**
  * Mock nsIWebSocketChannel for tests. This mocks the WebSocketChannel, and
  * enables us to check parameters and return messages similar to the push
  * server.
  */
-function MockWebSocketChannel() {};
+function MockWebSocketChannel() {}
 
 MockWebSocketChannel.prototype = {
   QueryInterface: XPCOMUtils.generateQI(Ci.nsIWebSocketChannel),
 
   initRegStatus: 0,
 
   defaultMsgHandler: function(msg) {
     // Treat as a ping
--- a/browser/components/loop/test/xpcshell/test_loopapi_hawk_request.js
+++ b/browser/components/loop/test/xpcshell/test_loopapi_hawk_request.js
@@ -28,17 +28,17 @@ add_task(function* hawk_session_scope_co
 function generateSessionTypeVerificationStub(desiredSessionType) {
 
   function hawkRequestStub(sessionType, path, method, payloadObj, callback) {
     return new Promise(function (resolve, reject) {
       Assert.equal(desiredSessionType, sessionType);
 
       resolve();
     });
-  };
+  }
 
   return hawkRequestStub;
 }
 
 const origHawkRequest = MozLoopService.hawkRequest;
 do_register_cleanup(function() {
   MozLoopService.hawkRequest = origHawkRequest;
 });
--- a/browser/components/loop/test/xpcshell/test_looppush_initialize.js
+++ b/browser/components/loop/test/xpcshell/test_looppush_initialize.js
@@ -125,20 +125,20 @@ add_test(function test_reconnect_no_regi
 });
 
 add_test(function test_ping_websocket() {
   let pingReceived = false,
       socketClosed = false;
   mockWebSocket.defaultMsgHandler = (msg) => {
     pingReceived = true;
     // Do not send a ping response.
-  }
+  };
   mockWebSocket.close = () => {
     socketClosed = true;
-  }
+  };
 
   MozLoopPushHandler.shutdown();
   MozLoopPushHandler.initialize({mockWebSocket: mockWebSocket});
   MozLoopPushHandler.register(
     "test-chan",
     function(err, url) {
       Assert.equal(err, null, "err should be null to indicate success");
       waitForCondition(() => pingReceived).then(() => {
@@ -215,9 +215,9 @@ function run_test() {
     Services.prefs.clearUserPref("services.push.serverULR");
     Services.prefs.clearUserPref("loop.retry_delay.start");
     Services.prefs.clearUserPref("loop.retry_delay.limit");
     Services.prefs.clearUserPref("loop.ping.interval");
     Services.prefs.clearUserPref("loop.ping.timeout");
   });
 
   run_next_test();
-};
+}
--- a/browser/components/loop/test/xpcshell/test_loopservice_restart.js
+++ b/browser/components/loop/test/xpcshell/test_loopservice_restart.js
@@ -115,9 +115,9 @@ function run_test() {
     MozLoopServiceInternal.mocks.pushHandler = undefined;
     Services.prefs.clearUserPref(LOOP_INITIAL_DELAY_PREF);
     Services.prefs.clearUserPref(LOOP_FXA_TOKEN_PREF);
     Services.prefs.clearUserPref(LOOP_FXA_PROFILE_PREF);
     Services.prefs.clearUserPref(LOOP_CREATED_ROOM_PREF);
   });
 
   run_next_test();
-};
+}