blob: d241376296b9971f649331fe251ca7262e5cebfb [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
function matches(rule, item) {
if (rule.matcher == 'js')
return eval(rule.match_param);
if (rule.matcher == 'hostname') {
var link = document.createElement('a');
link.href = item.url.toLowerCase();
var host = (rule.match_param.indexOf(':') < 0) ? link.hostname : link.host;
return (host.indexOf(rule.match_param.toLowerCase()) ==
(host.length - rule.match_param.length));
}
if (rule.matcher == 'default')
return item.filename == rule.match_param;
if (rule.matcher == 'url-regex')
return (new RegExp(rule.match_param)).test(item.url);
if (rule.matcher == 'default-regex')
return (new RegExp(rule.match_param)).test(item.filename);
return false;
}
chrome.downloads.onDeterminingFilename.addListener(function(item, __suggest) {
function suggest(filename, conflictAction) {
__suggest({filename: filename,
conflictAction: conflictAction,
conflict_action: conflictAction});
// conflict_action was renamed to conflictAction in
// http://src.chromium.org/viewvc/chrome?view=rev&revision=214133
// which was first picked up in branch 1580.
}
var rules = localStorage.rules;
try {
rules = JSON.parse(rules);
} catch (e) {
localStorage.rules = JSON.stringify([]);
}
for (var index = 0; index < rules.length; ++index) {
var rule = rules[index];
if (rule.enabled && matches(rule, item)) {
if (rule.action == 'overwrite') {
suggest(item.filename, 'overwrite');
} else if (rule.action == 'prompt') {
suggest(item.filename, 'prompt');
} else if (rule.action == 'js') {
eval(rule.action_js);
}
break;
}
}
});