123 lines
4.5 KiB
JavaScript
123 lines
4.5 KiB
JavaScript
// TODO: remove this, just for debugging.
|
|
chrome.storage.onChanged.addListener(function(changes, namespace) {
|
|
updateCache(function() {});
|
|
for (key in changes) {
|
|
var storageChange = changes[key];
|
|
console.log('Storage key "%s" in namespace "%s" changed. ' +
|
|
'Old value was "%s", new value is "%s".',
|
|
key,
|
|
namespace,
|
|
storageChange.oldValue,
|
|
storageChange.newValue);
|
|
}
|
|
});
|
|
|
|
// Main control flow. Directs requests from options page/user script.
|
|
// Generally just handles requests that come in from the user action icon.
|
|
chrome.extension.onRequest.addListener(
|
|
function(request, sender, sendResponse) {
|
|
if (request.action == "blacklist") {
|
|
// The request is asking for the User-agent.
|
|
getSpoofValues(sender.tab.url, function(values) {
|
|
sendResponse(values);
|
|
});
|
|
} else if (request.action == "add_ua") {
|
|
// Add a new user-agent string to the options list.
|
|
addCustomUAOption(request.name,
|
|
request.user_agent,
|
|
request.append_to_default_ua,
|
|
request.indicator);
|
|
sendResponse({result:"success"});
|
|
} else if (request.action == "options") {
|
|
// Get all of the known user-agent options.
|
|
_getUserAgentList(function(user_agent_list) {
|
|
sendResponse({options: JSON.stringify(user_agent_list)});
|
|
});
|
|
} else if (request.action == "update") {
|
|
// Refreshes the listeners when some settings update has happened.
|
|
updateListeners();
|
|
sendResponse({});
|
|
} else if (request.action == "clear_presets") {
|
|
clearPresets();
|
|
} else if (request.action == "badge") {
|
|
// Refresh the user action badge.
|
|
updateBadge(sender.tab);
|
|
} else {
|
|
console.log("Got an invalid request:" + request.action);
|
|
sendResponse({}); // Not a valid request.
|
|
}
|
|
return false;
|
|
});
|
|
|
|
// Add listener to migrate any legacy settings.
|
|
// Will also auto-populate a couple of example user-agent strings if none exist.
|
|
chrome.runtime.onInstalled.addListener(function(details) {
|
|
if (details.reason == "update" && _isUsingLocalStorage()) {
|
|
console.log("On install: Attempting to migrate legacy items");
|
|
_moveLocalStorageToSyncStorage();
|
|
}
|
|
|
|
_getUserAgentPointerList(function(pointer_list) {
|
|
if (!pointer_list || pointer_list.length == 0) {
|
|
console.log("Didn't find any existing UAs. Attempting to populate some.");
|
|
getBaseOptionsList(true);
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
// Given a UserAgent object, will replace the "User-Agent" header in the
|
|
// map provided as requestHeaders.
|
|
function replaceHeader(user_agent, requestHeaders) {
|
|
if (!user_agent || !user_agent.ua_string)
|
|
return requestHeaders;
|
|
var newHeaders = [];
|
|
for (var i = 0; i < requestHeaders.length; i++) {
|
|
if (requestHeaders[i].name != "User-Agent") {
|
|
newHeaders.push(requestHeaders[i]);
|
|
} else {
|
|
var new_value = requestHeaders[i].value;
|
|
if (user_agent.ua_string != "")
|
|
new_value = (user_agent.append_to_default_ua ? new_value + " " + user_agent.ua_string : user_agent.ua_string);
|
|
newHeaders.push({"name" : "User-Agent",
|
|
"value" : new_value});
|
|
}
|
|
}
|
|
return newHeaders;
|
|
}
|
|
|
|
// Adds listeners that handle modifying headers on any request that comes through.
|
|
// Really only needs to be called once.
|
|
// The Listener can *not* be a callback. It *must* be blocking.
|
|
function updateListeners() {
|
|
if (!listener) {
|
|
listener = function(details) {
|
|
// We only want to modify requests that have a URL, and that have headers.
|
|
// Any others are not interesting enough to have their headers modified.
|
|
var header_map = { requestHeaders : details.requestHeaders };
|
|
if (details && details.url && details.requestHeaders && details.requestHeaders.length > 0) {
|
|
header_map = {requestHeaders : replaceHeader(getCacheSpoofValues(details.url, details.tabId), details.requestHeaders)};
|
|
}
|
|
return header_map;
|
|
};
|
|
}
|
|
chrome.webRequest.onBeforeSendHeaders.addListener(listener,
|
|
{"urls": ["http://*/*", "https://*/*"]},
|
|
["requestHeaders", "blocking"]);
|
|
}
|
|
|
|
var listener = null;
|
|
updateListeners();
|
|
_reportErrors();
|
|
|
|
// Method to make the badge update as the user changes tabs.
|
|
chrome.tabs.onActivated.addListener(function(activeInfo) {
|
|
chrome.tabs.get(activeInfo.tabId, function(tab) {
|
|
updateBadge(tab);
|
|
});
|
|
});
|
|
|
|
// Method to make the badge update as the user changes tabs.
|
|
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
|
|
updateBadge(tab);
|
|
});
|