| Index: extension/background.js
|
| diff --git a/extension/background.js b/extension/background.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f6edcee7c9b9fc6d1d854fb1abf1bb20db1030c8
|
| --- /dev/null
|
| +++ b/extension/background.js
|
| @@ -0,0 +1,68 @@
|
| +// 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.
|
| +
|
| +// Glue code that interacts with dwc_compiler.dart to proxy arbitrary content
|
| +// for urls.
|
| +
|
| +
|
| +var existingRuleIds = {};
|
| +var onParse = null;
|
| +
|
| +// TODO(jacobr): set the onParse property directly from Dart.
|
| +function setOnParseCallback(cb) {
|
| + onParse = cb;
|
| +}
|
| +
|
| +function proxyUrls(port, requests) {
|
| + // Unfortunately we have to create the data urls from the content script due
|
| + // to chrome security restrictions.
|
| + port.postMessage({type: 'CREATE_DATA_URLS', requests: requests});
|
| +}
|
| +
|
| +function onProxyUrls(requests) {
|
| + var rulesToAdd = [];
|
| + var ruleIdsToRemove = [];
|
| + for (var i = 0; i < requests.length; i++) {
|
| + var request = requests[i];
|
| + var url = request.url;
|
| + var redirectUrl = request.redirectUrl;
|
| + var rule = {
|
| + conditions: [
|
| + new chrome.declarativeWebRequest.RequestMatcher(
|
| + {url: {urlEquals: url}})
|
| + ],
|
| + actions: [
|
| + new chrome.declarativeWebRequest.RedirectRequest(
|
| + {redirectUrl: redirectUrl})
|
| + ]};
|
| + if (existingRuleIds[url]) {
|
| + ruleIdsToRemove.push(existingRuleIds[url]);
|
| + }
|
| + rulesToAdd.push(rule);
|
| + }
|
| +
|
| + if (ruleIdsToRemove.length > 0) {
|
| + chrome.declarativeWebRequest.onRequest.removeRules(ruleIdsToRemove);
|
| + }
|
| + chrome.declarativeWebRequest.onRequest.addRules(rulesToAdd, function(added) {
|
| + for(var i = 0; i < added.length; i++) {
|
| + var r = added[i];
|
| + existingRuleIds[r.conditions[0].url.urlEquals] = r.id;
|
| + }
|
| + // TODO(jacobr): notify caller that the proxy server is ready to use.
|
| + })
|
| +}
|
| +chrome.extension.onConnect.addListener(function(port) {
|
| + if (port.name == "parse") {
|
| + // Listen to requests from chrome tabs to parse templates.
|
| + port.onMessage.addListener(function(msg) {
|
| + onParse(port, msg.url);
|
| + });
|
| + } else if (port.name == "proxy") {
|
| + // Listen for requests to proxy urls.
|
| + port.onMessage.addListener(function(msg) {
|
| + onProxyUrls(msg.requests);
|
| + });
|
| + }
|
| +});
|
|
|