Skip to content

Commit

Permalink
Adapt chrome
Browse files Browse the repository at this point in the history
  • Loading branch information
sylingd committed Sep 7, 2017
1 parent e47570e commit deb2d74
Show file tree
Hide file tree
Showing 8 changed files with 1,039 additions and 135 deletions.
17 changes: 10 additions & 7 deletions build/CrxBuild.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,14 @@ private function _setOptions($options)
if (!isset($options['name'])) {
throw new Exception('name is not set');
}

if (!isset($options['only_zip'])) {
$options['only_zip'] = false;
}
$options['only_zip'] = (bool)$options['only_zip'];

$options['key_file'] = trim(@$options['key_file']);
if (!isset($options['key_file'][0])) {
if (!isset($options['key_file'][0]) && !$options['only_zip']) {
throw new Exception('key_file is not set');
}

Expand All @@ -45,21 +51,18 @@ private function _setOptions($options)
$options['output_dir'] = '.';
}
$options['output_dir'] = rtrim($options['output_dir'], '\\/') . '/';
if (!isset($options['only_zip'])) {
$options['only_zip'] = false;
}
$options['only_zip'] = (bool)$options['only_zip'];

$this->_crxName = $options['name'];
$this->options = $options;

}
public function initZip($to)
{
$this->handle = new PharData($to, null, null, PHAR::ZIP);
$this->handle = new ZipArchive;
$this->handle->open($to, ZipArchive::CREATE);
}
public function zip() {
$this->handle->compressFiles(PHAR::GZ);
$this->handle->close();
}
public function addFile($name, $as = NULL) {
if ($as === NULL) {
Expand Down
18 changes: 18 additions & 0 deletions build/build.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
define('EXTENSION_DIR', realpath(__DIR__ . '/..'));
require('config.php');
require('XpiBuild.php');
require('CrxBuild.php');
$exclude = ['.git', '.vscode', 'build', 'manifest', '.gitignore', 'README.md', 'manifest.json'];

// init file list
Expand Down Expand Up @@ -66,6 +67,23 @@
$finish = $amo->sign();
echo "Uploaded AMO version\n";

// Build crx
$crx = new CrxBuild([
'name' => 'HeaderEditor',
'output_dir' => __DIR__ . '/output/chrome',
'only_zip' => TRUE
]);
foreach ($filelist['dir'] as $v) {
$crx->addDir($v[0], $v[1]);
}
foreach ($filelist['file'] as $v) {
$crx->addFile($v[0], $v[1]);
}
$manifest = str_replace('__version__', EXT_VERSION, file_get_contents(EXTENSION_DIR . '/manifest/chrome.json'));
$crx->addString('manifest.json', $manifest);
$crx->build();
echo "Build chrome extension finished\n";

//Add update files
$fx_update = json_decode(file_get_contents('output/update.json'), 1);
if (count($fx_update['addons'][EXT_GECKO_ID]['updates']) > 2) {
Expand Down
1 change: 1 addition & 0 deletions manage.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title i18n-text="manageTitle"></title>
<link rel="stylesheet" href="third-party/bootstrap/css/bootstrap.min.css">
<script src="scripts/browser-polyfill.js"></script>
<script src="scripts/localization.js"></script>
<script src="scripts/storage.js"></script>
<style>
Expand Down
35 changes: 35 additions & 0 deletions manifest/chrome.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "__MSG_extName__",
"short_name": "__MSG_extName__",
"version": "__version__",
"description": "__MSG_description__",
"homepage_url": "http://team.firefoxcn.net",
"manifest_version": 2,
"icons": {
"128": "images/128.png"
},
"permissions": [
"tabs",
"webRequest",
"webRequestBlocking",
"storage",
"downloads",
"*://*/*",
"unlimitedStorage"
],
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';",
"background": {
"scripts": ["scripts/browser-polyfill.js", "scripts/storage.js", "scripts/background.js"]
},
"browser_action": {
"default_icon": {
"128": "images/128.png"
},
"default_title": "__MSG_extButtonTitle__"
},
"default_locale": "en",
"options_ui": {
"page": "manage.html",
"open_in_tab": true
}
}
79 changes: 39 additions & 40 deletions scripts/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,24 @@ browser.runtime.onMessage.addListener(function(request, sender, sendResponse) {
openURL(request);
break;
case "getRules":
getRules(request.type, request.options).then(sendResponse);
sendResponse(getRules(request.type, request.options));
break;
case "saveRule":
saveRule(request.type, request.content).then(sendResponse);
break;
case "deleteRule":
deleteRule(request.type, request.id).then(sendResponse);
break;
case 'updateCache':
if (request.type === 'all') {
updateCache('request');
updateCache('sendHeader');
updateCache('receiveHeader');
} else {
updateCache(request.type);
}
sendResponse();
break;
}
});

Expand All @@ -57,36 +67,31 @@ function openURL(options) {

browser.webRequest.onBeforeRequest.addListener(function(e) {
//可用:重定向,阻止加载
return new Promise(function(resolve) {
getRules('request', {"url": e.url, "enable": 1}).then((rules) => {
var redirectTo = e.url;
for (let item of rules) {
if (item.action === 'cancel') {
resolve({"cancel": true});
} else {
if (item.isFunction) {
runTryCatch(() => {
let r = item.func_body(redirectTo);
if (typeof(r) === 'string') {
redirectTo = r;
}
});
} else {
if (item.matchType === 'regexp') {
redirectTo = redirectTo.replace(new RegExp(item.pattern), item.to);
} else {
redirectTo = item.to;
}
let rules = getRules('request', {"url": e.url, "enable": 1});
let redirectTo = e.url;
for (let item of rules) {
if (item.action === 'cancel') {
return {"cancel": true};
} else {
if (item.isFunction) {
runTryCatch(() => {
let r = item.func_body(redirectTo);
if (typeof(r) === 'string') {
redirectTo = r;
}
}
}
if (redirectTo !== e.url) {
resolve({"redirectUrl": redirectTo});
});
} else {
resolve();
if (item.matchType === 'regexp') {
redirectTo = redirectTo.replace(new RegExp(item.pattern), item.to);
} else {
redirectTo = item.to;
}
}
});
});
}
}
if (redirectTo !== e.url) {
return {"redirectUrl": redirectTo};
}
}, {urls: ["<all_urls>"]}, ['blocking']);

function modifyHeaders(headers, rules) {
Expand Down Expand Up @@ -127,24 +132,18 @@ browser.webRequest.onBeforeSendHeaders.addListener(function(e) {
if (!e.requestHeaders) {
return;
}
return new Promise(function(resolve) {
getRules('sendHeader', {"url": e.url, "enable": 1}).then((rules) => {
modifyHeaders(e.requestHeaders, rules);
resolve(e);
});
});
let rules = getRules('sendHeader', {"url": e.url, "enable": 1});
modifyHeaders(e.requestHeaders, rules);
return {"requestHeaders": e.requestHeaders};
}, {urls: ["<all_urls>"]}, ['blocking', 'requestHeaders']);

browser.webRequest.onHeadersReceived.addListener(function(e) {
if (!e.responseHeaders) {
return;
}
return new Promise(function(resolve) {
getRules('receiveHeader', {"url": e.url, "enable": 1}).then((rules) => {
modifyHeaders(e.responseHeaders, rules);
resolve(e);
});
});
let rules = getRules('receiveHeader', {"url": e.url, "enable": 1});
modifyHeaders(e.responseHeaders, rules);
return {"responseHeaders": e.responseHeaders};
}, {urls: ["<all_urls>"]}, ['blocking', 'responseHeaders']);

browser.browserAction.onClicked.addListener(function () {
Expand Down
Loading

0 comments on commit deb2d74

Please sign in to comment.