| Index: common.js | 
| diff --git a/common.js b/common.js | 
| index 8168515dcf6071d559f96ce9d0371fb34199ce8c..4c46d7a5b203b76aa37c568d6ad7375966733486 100644 | 
| --- a/common.js | 
| +++ b/common.js | 
| @@ -15,142 +15,140 @@ | 
| * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 
| */ | 
|  | 
| +/* globals Components */ | 
| + | 
| "use strict"; | 
|  | 
| -(function(global) | 
| +function E(id) | 
| { | 
| -  global.E = function E(id) | 
| -  { | 
| -    return document.getElementById(id); | 
| -  } | 
| +  return document.getElementById(id); | 
| +} | 
|  | 
| -  global.getDocLink = function(link, callback) | 
| +function getDocLink(link, callback) | 
| +{ | 
| +  ext.backgroundPage.sendMessage({ | 
| +    type: "app.get", | 
| +    what: "doclink", | 
| +    link | 
| +  }, callback); | 
| +} | 
| + | 
| +function checkShareResource(url, callback) | 
| +{ | 
| +  ext.backgroundPage.sendMessage({ | 
| +    type: "filters.blocked", | 
| +    url, | 
| +    requestType: "SCRIPT", | 
| +    docDomain: "adblockplus.org", | 
| +    thirdParty: true | 
| +  }, callback); | 
| +} | 
| + | 
| +function openSharePopup(url) | 
| +{ | 
| +  let glassPane = E("glass-pane"); | 
| +  if (!glassPane) | 
| { | 
| -    ext.backgroundPage.sendMessage({ | 
| -      type: "app.get", | 
| -      what: "doclink", | 
| -      link: link | 
| -    }, callback); | 
| +    glassPane = document.createElement("div"); | 
| +    glassPane.setAttribute("id", "glass-pane"); | 
| +    document.body.appendChild(glassPane); | 
| } | 
|  | 
| -  global.checkShareResource = function(url, callback) | 
| +  let iframe = E("share-popup"); | 
| +  if (!iframe) | 
| { | 
| -    ext.backgroundPage.sendMessage( | 
| -    { | 
| -      type: "filters.blocked", | 
| -      url: url, | 
| -      requestType: "SCRIPT", | 
| -      docDomain: "adblockplus.org", | 
| -      thirdParty: true | 
| -    }, callback); | 
| +    iframe = document.createElement("iframe"); | 
| +    iframe.setAttribute("id", "share-popup"); | 
| +    iframe.setAttribute("scrolling", "no"); | 
| +    glassPane.appendChild(iframe); | 
| } | 
|  | 
| -  global.openSharePopup = function(url) | 
| +  // Firefox 38+ no longer allows messaging using postMessage so we need | 
| +  // to have a fake top level frame to avoid problems with scripts that try to | 
| +  // communicate with the first-run page | 
| +  let isGecko = ("Components" in window); | 
| +  if (isGecko) | 
| { | 
| -    var glassPane = E("glass-pane"); | 
| -    if (!glassPane) | 
| -    { | 
| -      glassPane = document.createElement("div"); | 
| -      glassPane.setAttribute("id", "glass-pane"); | 
| -      document.body.appendChild(glassPane); | 
| -    } | 
| - | 
| -    var iframe = E("share-popup"); | 
| -    if (!iframe) | 
| +    try | 
| { | 
| -      iframe = document.createElement("iframe"); | 
| -      iframe.setAttribute("id", "share-popup"); | 
| -      iframe.setAttribute("scrolling", "no"); | 
| -      glassPane.appendChild(iframe); | 
| -    } | 
| +      let Ci = Components.interfaces; | 
| +      let docShell = iframe.contentWindow | 
| +        .QueryInterface(Ci.nsIInterfaceRequestor) | 
| +        .getInterface(Ci.nsIDocShell); | 
|  | 
| -    // Firefox 38+ no longer allows messaging using postMessage so we need | 
| -    // to have a fake top level frame to avoid problems with scripts that try to | 
| -    // communicate with the first-run page | 
| -    var isGecko = ("Components" in window); | 
| -    if (isGecko) | 
| -    { | 
| -      try | 
| +      if (typeof docShell.frameType != "undefined") | 
| { | 
| -        var Ci = Components.interfaces; | 
| -        var docShell = iframe.contentWindow | 
| -          .QueryInterface(Ci.nsIInterfaceRequestor) | 
| -          .getInterface(Ci.nsIDocShell); | 
| - | 
| -        if (typeof docShell.frameType != "undefined") | 
| -        { | 
| -          // Gecko 47+ | 
| -          docShell.frameType = docShell.FRAME_TYPE_BROWSER; | 
| -        } | 
| -        else | 
| -        { | 
| -          // Legacy branch | 
| -          docShell.setIsBrowserInsideApp(Ci.nsIScriptSecurityManager.UNKNOWN_APP_ID); | 
| -        } | 
| +        // Gecko 47+ | 
| +        docShell.frameType = docShell.FRAME_TYPE_BROWSER; | 
| } | 
| -      catch(ex) | 
| +      else | 
| { | 
| -        console.error(ex); | 
| +        // Legacy branch | 
| +        docShell.setIsBrowserInsideApp( | 
| +          Ci.nsIScriptSecurityManager.UNKNOWN_APP_ID | 
| +        ); | 
| } | 
| } | 
| - | 
| -    var popupMessageReceived = false; | 
| -    function resizePopup(width, height) | 
| +    catch (ex) | 
| { | 
| -      iframe.width = width; | 
| -      iframe.height = height; | 
| -      iframe.style.marginTop = -height / 2 + "px"; | 
| -      iframe.style.marginLeft = -width / 2 + "px"; | 
| -      popupMessageReceived = true; | 
| -      window.removeEventListener("message", popupMessageListener); | 
| +      console.error(ex); | 
| } | 
| +  } | 
| + | 
| +  let popupMessageReceived = false; | 
| +  function resizePopup(width, height) | 
| +  { | 
| +    iframe.width = width; | 
| +    iframe.height = height; | 
| +    iframe.style.marginTop = -height / 2 + "px"; | 
| +    iframe.style.marginLeft = -width / 2 + "px"; | 
| +    popupMessageReceived = true; | 
| +    window.removeEventListener("message", popupMessageListener); | 
| +  } | 
| + | 
| +  let popupMessageListener = function(event) | 
| +  { | 
| +    if (!/[./]adblockplus\.org$/.test(event.origin) || | 
| +        !("width" in event.data) || !("height" in event.data)) | 
| +      return; | 
|  | 
| -    var popupMessageListener = function(event) | 
| +    resizePopup(event.data.width, event.data.height); | 
| +  }; | 
| +  // Firefox requires last parameter to be true to be triggered by | 
| +  // unprivileged pages | 
| +  window.addEventListener("message", popupMessageListener, false, true); | 
| + | 
| +  let popupLoadListener = function() | 
| +  { | 
| +    if (!popupMessageReceived && isGecko) | 
| { | 
| -      if (!/[.\/]adblockplus\.org$/.test(event.origin) | 
| -        || !("width" in event.data) | 
| -        || !("height" in event.data)) | 
| -        return; | 
| - | 
| -      resizePopup(event.data.width, event.data.height); | 
| -    }; | 
| -    // Firefox requires last parameter to be true to be triggered by | 
| -    // unprivileged pages | 
| -    window.addEventListener("message", popupMessageListener, false, true); | 
| - | 
| -    var popupLoadListener = function() | 
| +      let rootElement = iframe.contentDocument.documentElement; | 
| +      let {width, height} = rootElement.dataset; | 
| +      if (width && height) | 
| +        resizePopup(width, height); | 
| +    } | 
| + | 
| +    if (popupMessageReceived) | 
| { | 
| -      if (!popupMessageReceived && isGecko) | 
| -      { | 
| -        var rootElement = iframe.contentDocument.documentElement; | 
| -        var width = rootElement.dataset.width; | 
| -        var height = rootElement.dataset.height; | 
| -        if (width && height) | 
| -          resizePopup(width, height); | 
| -      } | 
| +      iframe.className = "visible"; | 
|  | 
| -      if (popupMessageReceived) | 
| +      let popupCloseListener = function() | 
| { | 
| -        iframe.className = "visible"; | 
| - | 
| -        var popupCloseListener = function() | 
| -        { | 
| -          iframe.className = glassPane.className = ""; | 
| -          document.removeEventListener("click", popupCloseListener); | 
| -        }; | 
| -        document.addEventListener("click", popupCloseListener, false); | 
| -      } | 
| -      else | 
| -      { | 
| -        glassPane.className = ""; | 
| -        window.removeEventListener("message", popupMessageListener); | 
| -      } | 
| +        iframe.className = glassPane.className = ""; | 
| +        document.removeEventListener("click", popupCloseListener); | 
| +      }; | 
| +      document.addEventListener("click", popupCloseListener, false); | 
| +    } | 
| +    else | 
| +    { | 
| +      glassPane.className = ""; | 
| +      window.removeEventListener("message", popupMessageListener); | 
| +    } | 
|  | 
| -      iframe.removeEventListener("load", popupLoadListener); | 
| -    }; | 
| -    iframe.addEventListener("load", popupLoadListener, false); | 
| +    iframe.removeEventListener("load", popupLoadListener); | 
| +  }; | 
| +  iframe.addEventListener("load", popupLoadListener, false); | 
|  | 
| -    iframe.src = url; | 
| -    glassPane.className = "visible"; | 
| -  } | 
| -})(this); | 
| +  iframe.src = url; | 
| +  glassPane.className = "visible"; | 
| +} | 
|  |