Skip to content

Commit deb2d74

Browse files
committed
Adapt chrome
1 parent e47570e commit deb2d74

File tree

8 files changed

+1039
-135
lines changed

8 files changed

+1039
-135
lines changed

build/CrxBuild.php

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,14 @@ private function _setOptions($options)
3535
if (!isset($options['name'])) {
3636
throw new Exception('name is not set');
3737
}
38+
39+
if (!isset($options['only_zip'])) {
40+
$options['only_zip'] = false;
41+
}
42+
$options['only_zip'] = (bool)$options['only_zip'];
43+
3844
$options['key_file'] = trim(@$options['key_file']);
39-
if (!isset($options['key_file'][0])) {
45+
if (!isset($options['key_file'][0]) && !$options['only_zip']) {
4046
throw new Exception('key_file is not set');
4147
}
4248

@@ -45,21 +51,18 @@ private function _setOptions($options)
4551
$options['output_dir'] = '.';
4652
}
4753
$options['output_dir'] = rtrim($options['output_dir'], '\\/') . '/';
48-
if (!isset($options['only_zip'])) {
49-
$options['only_zip'] = false;
50-
}
51-
$options['only_zip'] = (bool)$options['only_zip'];
5254

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

5658
}
5759
public function initZip($to)
5860
{
59-
$this->handle = new PharData($to, null, null, PHAR::ZIP);
61+
$this->handle = new ZipArchive;
62+
$this->handle->open($to, ZipArchive::CREATE);
6063
}
6164
public function zip() {
62-
$this->handle->compressFiles(PHAR::GZ);
65+
$this->handle->close();
6366
}
6467
public function addFile($name, $as = NULL) {
6568
if ($as === NULL) {

build/build.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
define('EXTENSION_DIR', realpath(__DIR__ . '/..'));
33
require('config.php');
44
require('XpiBuild.php');
5+
require('CrxBuild.php');
56
$exclude = ['.git', '.vscode', 'build', 'manifest', '.gitignore', 'README.md', 'manifest.json'];
67

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

70+
// Build crx
71+
$crx = new CrxBuild([
72+
'name' => 'HeaderEditor',
73+
'output_dir' => __DIR__ . '/output/chrome',
74+
'only_zip' => TRUE
75+
]);
76+
foreach ($filelist['dir'] as $v) {
77+
$crx->addDir($v[0], $v[1]);
78+
}
79+
foreach ($filelist['file'] as $v) {
80+
$crx->addFile($v[0], $v[1]);
81+
}
82+
$manifest = str_replace('__version__', EXT_VERSION, file_get_contents(EXTENSION_DIR . '/manifest/chrome.json'));
83+
$crx->addString('manifest.json', $manifest);
84+
$crx->build();
85+
echo "Build chrome extension finished\n";
86+
6987
//Add update files
7088
$fx_update = json_decode(file_get_contents('output/update.json'), 1);
7189
if (count($fx_update['addons'][EXT_GECKO_ID]['updates']) > 2) {

manage.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
44
<title i18n-text="manageTitle"></title>
55
<link rel="stylesheet" href="third-party/bootstrap/css/bootstrap.min.css">
6+
<script src="scripts/browser-polyfill.js"></script>
67
<script src="scripts/localization.js"></script>
78
<script src="scripts/storage.js"></script>
89
<style>

manifest/chrome.json

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"name": "__MSG_extName__",
3+
"short_name": "__MSG_extName__",
4+
"version": "__version__",
5+
"description": "__MSG_description__",
6+
"homepage_url": "http://team.firefoxcn.net",
7+
"manifest_version": 2,
8+
"icons": {
9+
"128": "images/128.png"
10+
},
11+
"permissions": [
12+
"tabs",
13+
"webRequest",
14+
"webRequestBlocking",
15+
"storage",
16+
"downloads",
17+
"*://*/*",
18+
"unlimitedStorage"
19+
],
20+
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';",
21+
"background": {
22+
"scripts": ["scripts/browser-polyfill.js", "scripts/storage.js", "scripts/background.js"]
23+
},
24+
"browser_action": {
25+
"default_icon": {
26+
"128": "images/128.png"
27+
},
28+
"default_title": "__MSG_extButtonTitle__"
29+
},
30+
"default_locale": "en",
31+
"options_ui": {
32+
"page": "manage.html",
33+
"open_in_tab": true
34+
}
35+
}

scripts/background.js

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,24 @@ browser.runtime.onMessage.addListener(function(request, sender, sendResponse) {
2323
openURL(request);
2424
break;
2525
case "getRules":
26-
getRules(request.type, request.options).then(sendResponse);
26+
sendResponse(getRules(request.type, request.options));
2727
break;
2828
case "saveRule":
2929
saveRule(request.type, request.content).then(sendResponse);
3030
break;
3131
case "deleteRule":
3232
deleteRule(request.type, request.id).then(sendResponse);
3333
break;
34+
case 'updateCache':
35+
if (request.type === 'all') {
36+
updateCache('request');
37+
updateCache('sendHeader');
38+
updateCache('receiveHeader');
39+
} else {
40+
updateCache(request.type);
41+
}
42+
sendResponse();
43+
break;
3444
}
3545
});
3646

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

5868
browser.webRequest.onBeforeRequest.addListener(function(e) {
5969
//可用:重定向,阻止加载
60-
return new Promise(function(resolve) {
61-
getRules('request', {"url": e.url, "enable": 1}).then((rules) => {
62-
var redirectTo = e.url;
63-
for (let item of rules) {
64-
if (item.action === 'cancel') {
65-
resolve({"cancel": true});
66-
} else {
67-
if (item.isFunction) {
68-
runTryCatch(() => {
69-
let r = item.func_body(redirectTo);
70-
if (typeof(r) === 'string') {
71-
redirectTo = r;
72-
}
73-
});
74-
} else {
75-
if (item.matchType === 'regexp') {
76-
redirectTo = redirectTo.replace(new RegExp(item.pattern), item.to);
77-
} else {
78-
redirectTo = item.to;
79-
}
70+
let rules = getRules('request', {"url": e.url, "enable": 1});
71+
let redirectTo = e.url;
72+
for (let item of rules) {
73+
if (item.action === 'cancel') {
74+
return {"cancel": true};
75+
} else {
76+
if (item.isFunction) {
77+
runTryCatch(() => {
78+
let r = item.func_body(redirectTo);
79+
if (typeof(r) === 'string') {
80+
redirectTo = r;
8081
}
81-
}
82-
}
83-
if (redirectTo !== e.url) {
84-
resolve({"redirectUrl": redirectTo});
82+
});
8583
} else {
86-
resolve();
84+
if (item.matchType === 'regexp') {
85+
redirectTo = redirectTo.replace(new RegExp(item.pattern), item.to);
86+
} else {
87+
redirectTo = item.to;
88+
}
8789
}
88-
});
89-
});
90+
}
91+
}
92+
if (redirectTo !== e.url) {
93+
return {"redirectUrl": redirectTo};
94+
}
9095
}, {urls: ["<all_urls>"]}, ['blocking']);
9196

9297
function modifyHeaders(headers, rules) {
@@ -127,24 +132,18 @@ browser.webRequest.onBeforeSendHeaders.addListener(function(e) {
127132
if (!e.requestHeaders) {
128133
return;
129134
}
130-
return new Promise(function(resolve) {
131-
getRules('sendHeader', {"url": e.url, "enable": 1}).then((rules) => {
132-
modifyHeaders(e.requestHeaders, rules);
133-
resolve(e);
134-
});
135-
});
135+
let rules = getRules('sendHeader', {"url": e.url, "enable": 1});
136+
modifyHeaders(e.requestHeaders, rules);
137+
return {"requestHeaders": e.requestHeaders};
136138
}, {urls: ["<all_urls>"]}, ['blocking', 'requestHeaders']);
137139

138140
browser.webRequest.onHeadersReceived.addListener(function(e) {
139141
if (!e.responseHeaders) {
140142
return;
141143
}
142-
return new Promise(function(resolve) {
143-
getRules('receiveHeader', {"url": e.url, "enable": 1}).then((rules) => {
144-
modifyHeaders(e.responseHeaders, rules);
145-
resolve(e);
146-
});
147-
});
144+
let rules = getRules('receiveHeader', {"url": e.url, "enable": 1});
145+
modifyHeaders(e.responseHeaders, rules);
146+
return {"responseHeaders": e.responseHeaders};
148147
}, {urls: ["<all_urls>"]}, ['blocking', 'responseHeaders']);
149148

150149
browser.browserAction.onClicked.addListener(function () {

0 commit comments

Comments
 (0)