| Index: lib/elemHideFF.js | 
| =================================================================== | 
| --- a/lib/elemHideFF.js | 
| +++ b/lib/elemHideFF.js | 
| @@ -36,37 +36,29 @@ FilterNotifier.on("elemhideupdate", () = | 
| isDirty = true; | 
| Utils.runAsync(() => { | 
| isDirty = false; | 
| port.emit("elemhideupdate") | 
| }); | 
| } | 
| }); | 
|  | 
| -let translateMap = map => map; | 
| -if (Services.vc.compare(Utils.platformVersion, "40.0") <= 0) | 
| +port.on("getUnconditionalSelectors", () => | 
| { | 
| -  translateMap = map => | 
| -  { | 
| -    // We cannot send Map objects with Gecko 40 and below, "translate" them | 
| -    // into nested arrays. This isn't very efficient but that should be ok as | 
| -    // long as only outdated Firefox versions are affected. | 
| -    let translated = []; | 
| -    for (let [key, value] of map) | 
| -    { | 
| -      if (value instanceof Map) | 
| -        translated.push([key, translateMap(value)]); | 
| -      else | 
| -        translated.push([key, value]); | 
| -    } | 
| -    return translated; | 
| -  }; | 
| -} | 
| +  return [ | 
| +    ElemHide.getUnconditionalSelectors(), | 
| +    ElemHide.getUnconditionalFilterKeys() | 
| +  ]; | 
| +}); | 
|  | 
| -port.on("getSelectors", () => translateMap(ElemHide.getSelectors())); | 
| +port.on("getSelectorsForDomain", domain => | 
| +{ | 
| +  return ElemHide.getSelectorsForDomain(domain, ElemHide.NO_UNCONDITIONAL, | 
| +    true); | 
| +}); | 
|  | 
| port.on("elemhideEnabled", ({frames, isPrivate}) => | 
| { | 
| if (!Prefs.enabled) | 
| return {enabled: false}; | 
|  | 
| let hit = Policy.isFrameWhitelisted(frames, true); | 
| if (hit) | 
| @@ -81,8 +73,37 @@ port.on("elemhideEnabled", ({frames, isP | 
| contentType, docDomain, thirdParty, location, | 
| filter: filter.text, filterType: filter.type | 
| }; | 
| } | 
| } | 
|  | 
| return {enabled: true}; | 
| }); | 
| + | 
| +port.on("registerElemHideHit", ({key, frames, isPrivate}) => | 
| +{ | 
| +  let filter = ElemHide.getFilterByKey(key); | 
| +  if (!filter) | 
| +    return null; | 
| + | 
| +  if (!isPrivate) | 
| +    FilterStorage.increaseHitCount(filter); | 
| + | 
| +  let docDomain; | 
| +  try | 
| +  { | 
| +    docDomain = Utils.unwrapURL(frames[0].location).host; | 
| +  } | 
| +  catch(e) | 
| +  { | 
| +    docDomain = null; | 
| +  } | 
| + | 
| +  return { | 
| +    contentType: "ELEMHIDE", | 
| +    docDomain, | 
| +    thirdParty: false, | 
| +    location: filter.text.replace(/^.*?#/, '#'), | 
| +    filter: filter.text, | 
| +    filterType: filter.type | 
| +  }; | 
| +}); | 
|  |