Index: lib/adblockplus_compat.js |
=================================================================== |
--- a/lib/adblockplus_compat.js |
+++ b/lib/adblockplus_compat.js |
@@ -88,17 +88,17 @@ var XPCOMUtils = |
// |
require.scopes.info = |
{ |
get addonID() |
{ |
return chrome.i18n.getMessage("@@extension_id"); |
}, |
- addonVersion: "2.0.3", // Hardcoded for now |
+ addonVersion: "2.1", // Hardcoded for now |
addonRoot: "", |
get addonName() |
{ |
return chrome.i18n.getMessage("name"); |
}, |
application: "chrome" |
}; |
@@ -356,27 +356,67 @@ require.scopes.utils = |
{ |
// We cannot calculate MD5 checksums yet :-( |
return null; |
}, |
makeURI: function(url) |
{ |
return Services.io.newURI(url); |
}, |
+ |
checkLocalePrefixMatch: function(prefixes) |
{ |
if (!prefixes) |
return null; |
var list = prefixes.split(","); |
for (var i = 0; i < list.length; i++) |
if (new RegExp("^" + list[i] + "\\b").test(this.appLocale)) |
return list[i]; |
return null; |
+ }, |
+ |
+ chooseFilterSubscription: function(subscriptions) |
+ { |
+ var selectedItem = null; |
+ var selectedPrefix = null; |
+ var matchCount = 0; |
+ for (var i = 0; i < subscriptions.length; i++) |
+ { |
+ var subscription = subscriptions[i]; |
+ if (!selectedItem) |
+ selectedItem = subscription; |
+ |
+ var prefix = require("utils").Utils.checkLocalePrefixMatch(subscription.getAttribute("prefixes")); |
+ if (prefix) |
+ { |
+ if (!selectedPrefix || selectedPrefix.length < prefix.length) |
+ { |
+ selectedItem = subscription; |
+ selectedPrefix = prefix; |
+ matchCount = 1; |
+ } |
+ else if (selectedPrefix && selectedPrefix.length == prefix.length) |
+ { |
+ matchCount++; |
+ |
+ // If multiple items have a matching prefix of the same length: |
+ // Select one of the items randomly, probability should be the same |
+ // for all items. So we replace the previous match here with |
+ // probability 1/N (N being the number of matches). |
+ if (Math.random() * matchCount < 1) |
+ { |
+ selectedItem = subscription; |
+ selectedPrefix = prefix; |
+ } |
+ } |
+ } |
+ } |
+ return selectedItem; |
} |
} |
}; |
// |
// ElemHideHitRegistration dummy implementation |
// |