| Index: adblockplus/issue-2510.patch | 
| =================================================================== | 
| new file mode 100644 | 
| --- /dev/null | 
| +++ b/adblockplus/issue-2510.patch | 
| @@ -0,0 +1,154 @@ | 
| +# HG changeset patch | 
| +# User Felix Dahlke <felix@adblockplus.org> | 
| +# Date 1431547667 -7200 | 
| +#      Wed May 13 22:07:47 2015 +0200 | 
| +# Node ID 7e0cd0610aecdfe47450a26ae6e13c81fcb60d81 | 
| +# Parent  ae1c968784024553c3a2eaf4c446757798be7e13 | 
| +Issue 2510 - Support Adblock Browser | 
| + | 
| +diff -r ae1c96878402 -r 7e0cd0610aec chrome.manifest | 
| +--- a/chrome.manifest	Tue May 12 23:01:08 2015 +0200 | 
| ++++ b/chrome.manifest	Wed May 13 22:07:47 2015 +0200 | 
| +@@ -3,4 +3,4 @@ | 
| + locale    adblockplus {{LOCALE}} chrome/locale/{{LOCALE}}/ | 
| + | 
| + # fennec settings | 
| +-override chrome://adblockplus/content/ui/settings.xul chrome://adblockplus/content/ui/fennecSettings.xul application={a23983c0-fd0e-11dc-95ff-0800200c9a66} application={aa3c5121-dab2-40e2-81ca-7ea25febc110} | 
| ++override chrome://adblockplus/content/ui/settings.xul chrome://adblockplus/content/ui/fennecSettings.xul application={a23983c0-fd0e-11dc-95ff-0800200c9a66} application={aa3c5121-dab2-40e2-81ca-7ea25febc110} application={55aba3ac-94d3-41a8-9e25-5c21fe874539} | 
| +diff -r ae1c96878402 -r 7e0cd0610aec dependencies | 
| +--- a/dependencies	Tue May 12 23:01:08 2015 +0200 | 
| ++++ b/dependencies	Wed May 13 22:07:47 2015 +0200 | 
| +@@ -1,4 +1,4 @@ | 
| + _root = hg:https://hg.adblockplus.org/ git:https://github.com/adblockplus/ | 
| + _self = buildtools/ensure_dependencies.py | 
| +-buildtools = buildtools hg:97e2e12af6e8 git:ef69bbc | 
| ++buildtools = buildtools hg:f9f01a4c16af git: | 
| + adblockplusui = adblockplusui hg:75a50600e10a git:7ebacdc | 
| +diff -r ae1c96878402 -r 7e0cd0610aec ensure_dependencies.py | 
| +--- a/ensure_dependencies.py	Tue May 12 23:01:08 2015 +0200 | 
| ++++ b/ensure_dependencies.py	Wed May 13 22:07:47 2015 +0200 | 
| +@@ -34,6 +34,10 @@ | 
| +   buildtools = buildtools hg:016d16f7137b git:f3f8692f82e5 | 
| + """ | 
| + | 
| ++SKIP_DEPENDENCY_UPDATES = os.environ.get( | 
| ++  "SKIP_DEPENDENCY_UPDATES", "" | 
| ++).lower() not in ("", "0", "false") | 
| ++ | 
| + class Mercurial(): | 
| +   def istype(self, repodir): | 
| +     return os.path.exists(os.path.join(repodir, ".hg")) | 
| +@@ -97,7 +101,20 @@ | 
| +     return subprocess.check_output(command, cwd=repo).strip() | 
| + | 
| +   def pull(self, repo): | 
| ++    # Fetch tracked branches, new tags and the list of available remote branches | 
| +     subprocess.check_call(["git", "fetch", "--quiet", "--all", "--tags"], cwd=repo) | 
| ++    # Next we need to ensure all remote branches are tracked | 
| ++    newly_tracked = False | 
| ++    remotes = subprocess.check_output(["git", "branch", "--remotes"], cwd=repo) | 
| ++    for match in re.finditer(r"^\s*(origin/(\S+))$", remotes, re.M): | 
| ++      remote, local = match.groups() | 
| ++      with open(os.devnull, "wb") as devnull: | 
| ++        if subprocess.call(["git", "branch", "--track", local, remote], | 
| ++                           cwd=repo, stdout=devnull, stderr=devnull) == 0: | 
| ++          newly_tracked = True | 
| ++    # Finally fetch any newly tracked remote branches | 
| ++    if newly_tracked: | 
| ++      subprocess.check_call(["git", "fetch", "--quiet", "origin"], cwd=repo) | 
| + | 
| +   def update(self, repo, rev): | 
| +     subprocess.check_call(["git", "checkout", "--quiet", rev], cwd=repo) | 
| +@@ -167,7 +184,7 @@ | 
| + | 
| + def safe_join(path, subpath): | 
| +   # This has been inspired by Flask's safe_join() function | 
| +-  forbidden = set([os.sep, os.altsep]) - set([posixpath.sep, None]) | 
| ++  forbidden = {os.sep, os.altsep} - {posixpath.sep, None} | 
| +   if any(sep in subpath for sep in forbidden): | 
| +     raise Exception("Illegal directory separator in dependency path %s" % subpath) | 
| + | 
| +@@ -188,6 +205,11 @@ | 
| +   if os.path.exists(target): | 
| +     return | 
| + | 
| ++  if SKIP_DEPENDENCY_UPDATES: | 
| ++    logging.warning("SKIP_DEPENDENCY_UPDATES environment variable set, " | 
| ++                    "%s not cloned", target) | 
| ++    return | 
| ++ | 
| +   parenttype = get_repo_type(parentrepo) | 
| +   type = None | 
| +   for key in roots: | 
| +@@ -227,15 +249,21 @@ | 
| +     return | 
| + | 
| +   resolved_revision = repo_types[type].get_revision_id(target, revision) | 
| +-  if not resolved_revision: | 
| +-    logging.info("Revision %s is unknown, downloading remote changes" % revision) | 
| +-    repo_types[type].pull(target) | 
| +-    resolved_revision = repo_types[type].get_revision_id(target, revision) | 
| ++  current_revision = repo_types[type].get_revision_id(target) | 
| ++ | 
| ++  if resolved_revision != current_revision: | 
| ++    if SKIP_DEPENDENCY_UPDATES: | 
| ++      logging.warning("SKIP_DEPENDENCY_UPDATES environment variable set, " | 
| ++                      "%s not checked out to %s", target, revision) | 
| ++      return | 
| ++ | 
| +     if not resolved_revision: | 
| +-      raise Exception("Failed to resolve revision %s" % revision) | 
| ++      logging.info("Revision %s is unknown, downloading remote changes" % revision) | 
| ++      repo_types[type].pull(target) | 
| ++      resolved_revision = repo_types[type].get_revision_id(target, revision) | 
| ++      if not resolved_revision: | 
| ++        raise Exception("Failed to resolve revision %s" % revision) | 
| + | 
| +-  current_revision = repo_types[type].get_revision_id(target) | 
| +-  if resolved_revision != current_revision: | 
| +     logging.info("Updating repository %s to revision %s" % (target, resolved_revision)) | 
| +     repo_types[type].update(target, resolved_revision) | 
| + | 
| +@@ -247,6 +275,7 @@ | 
| +     return | 
| +   if level >= 10: | 
| +     logging.warning("Too much subrepository nesting, ignoring %s" % repo) | 
| ++    return | 
| + | 
| +   if overrideroots is not None: | 
| +     config["_root"] = overrideroots | 
| +diff -r ae1c96878402 -r 7e0cd0610aec lib/appSupport.js | 
| +--- a/lib/appSupport.js	Tue May 12 23:01:08 2015 +0200 | 
| ++++ b/lib/appSupport.js	Wed May 13 22:07:47 2015 +0200 | 
| +@@ -690,6 +690,7 @@ | 
| +   } | 
| + | 
| +   case "fennec2": | 
| ++  case "adblockbrowser": | 
| +   { | 
| +     exports.isKnownWindow = (window) => window.document.documentElement.id == "main-window"; | 
| + | 
| +diff -r ae1c96878402 -r 7e0cd0610aec lib/objectTabs.js | 
| +--- a/lib/objectTabs.js	Tue May 12 23:01:08 2015 +0200 | 
| ++++ b/lib/objectTabs.js	Wed May 13 22:07:47 2015 +0200 | 
| +@@ -178,7 +178,8 @@ | 
| +   { | 
| +     // Object tabs aren't usable in Fennec | 
| +     let {application} = require("info"); | 
| +-    if (application == "fennec" || application == "fennec2") | 
| ++    if (application == "fennec" || application == "fennec2" || | 
| ++        application == "adblockbrowser") | 
| +       return; | 
| + | 
| +     let {Prefs} = require("prefs"); | 
| +diff -r ae1c96878402 -r 7e0cd0610aec metadata.gecko | 
| +--- a/metadata.gecko	Tue May 12 23:01:08 2015 +0200 | 
| ++++ b/metadata.gecko	Wed May 13 22:07:47 2015 +0200 | 
| +@@ -34,6 +34,7 @@ | 
| + thunderbird=29.0/39.0 | 
| + seamonkey=2.26/2.36 | 
| + toolkit=29.0/39.0 | 
| ++adblockbrowser=1.0/1.0 | 
| + | 
| + [mapping] | 
| + chrome/content/ui/firstRun.html = adblockplusui/firstRun.html | 
|  |