Revision f650ee99
Added by koszko over 1 year ago
content/content.js | ||
---|---|---|
42 | 42 |
*/ |
43 | 43 |
|
44 | 44 |
#IMPORT content/repo_query_cacher.js |
45 |
#IMPORT content/haketilo_apis.js |
|
45 | 46 |
|
46 | 47 |
#FROM common/browser.js IMPORT browser |
47 | 48 |
#FROM common/misc.js IMPORT is_privileged_url |
... | ... | |
132 | 133 |
resolve_page_info(Object.assign(page_info, script_response)); |
133 | 134 |
return; |
134 | 135 |
} else { |
135 |
for (const script_contents of script_response.files) { |
|
136 |
haketilo_apis.start(); |
|
137 |
|
|
138 |
const version = browser.runtime.getManifest().version; |
|
139 |
const scripts = [ |
|
140 |
`window.haketilo_version = ${JSON.stringify(version)};`, |
|
141 |
...script_response.files |
|
142 |
]; |
|
143 |
for (const script_contents of scripts) { |
|
136 | 144 |
const html_ns = "http://www.w3.org/1999/xhtml"; |
137 | 145 |
const script = document.createElementNS(html_ns, "script"); |
138 | 146 |
|
content/haketilo_apis.js | ||
---|---|---|
1 |
/** |
|
2 |
* This file is part of Haketilo. |
|
3 |
* |
|
4 |
* Function: Expose some special functionalities to injected scripts using |
|
5 |
* CustomEvent's to communicate with them. |
|
6 |
* |
|
7 |
* Copyright (C) 2022 Wojtek Kosior |
|
8 |
* |
|
9 |
* This program is free software: you can redistribute it and/or modify |
|
10 |
* it under the terms of the GNU General Public License as published by |
|
11 |
* the Free Software Foundation, either version 3 of the License, or |
|
12 |
* (at your option) any later version. |
|
13 |
* |
|
14 |
* This program is distributed in the hope that it will be useful, |
|
15 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
16 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
17 |
* GNU General Public License for more details. |
|
18 |
* |
|
19 |
* As additional permission under GNU GPL version 3 section 7, you |
|
20 |
* may distribute forms of that code without the copy of the GNU |
|
21 |
* GPL normally required by section 4, provided you include this |
|
22 |
* license notice and, in case of non-source distribution, a URL |
|
23 |
* through which recipients can access the Corresponding Source. |
|
24 |
* If you modify file(s) with this exception, you may extend this |
|
25 |
* exception to your version of the file(s), but you are not |
|
26 |
* obligated to do so. If you do not wish to do so, delete this |
|
27 |
* exception statement from your version. |
|
28 |
* |
|
29 |
* As a special exception to the GPL, any HTML file which merely |
|
30 |
* makes function calls to this code, and for that purpose |
|
31 |
* includes it by reference shall be deemed a separate work for |
|
32 |
* copyright law purposes. If you modify this code, you may extend |
|
33 |
* this exception to your version of the code, but you are not |
|
34 |
* obligated to do so. If you do not wish to do so, delete this |
|
35 |
* exception statement from your version. |
|
36 |
* |
|
37 |
* You should have received a copy of the GNU General Public License |
|
38 |
* along with this program. If not, see <https://www.gnu.org/licenses/>. |
|
39 |
* |
|
40 |
* I, Wojtek Kosior, thereby promise not to sue for violation of this file's |
|
41 |
* license. Although I request that you do not make use of this code in a |
|
42 |
* proprietary program, I am not going to enforce this in court. |
|
43 |
*/ |
|
44 |
|
|
45 |
#FROM common/browser.js IMPORT browser |
|
46 |
|
|
47 |
function start() { |
|
48 |
} |
|
49 |
#EXPORT start |
test/haketilo_test/unit/test_content.py | ||
---|---|---|
88 | 88 |
} |
89 | 89 |
|
90 | 90 |
repo_query_cacher.start = () => data_set("cacher_started", true); |
91 |
haketilo_apis.start = () => data_set("apis_started", true); |
|
91 | 92 |
|
92 | 93 |
enforce_blocking = policy => data_set("enforcing", policy); |
93 | 94 |
|
... | ... | |
118 | 119 |
|
119 | 120 |
@pytest.mark.ext_data({'content_script': content_script}) |
120 | 121 |
@pytest.mark.usefixtures('webextension') |
121 |
@pytest.mark.parametrize('target1', ['dynamic_before'])#, 'dynamic_after'])
|
|
122 |
@pytest.mark.parametrize('target1', ['dynamic_before', 'dynamic_after']) |
|
122 | 123 |
@pytest.mark.parametrize('target2', [ |
123 | 124 |
'scripts_blocked', |
124 | 125 |
'payload_error', |
... | ... | |
144 | 145 |
assert data['bad_request_returned'] == False |
145 | 146 |
|
146 | 147 |
assert data['cacher_started'] == True |
148 |
assert data.get('apis_started', False) == (target2 == 'payload_ok') |
|
147 | 149 |
|
148 | 150 |
for obj in (data['good_request_result'], data['enforcing']): |
149 | 151 |
assert obj['allow'] == False |
... | ... | |
162 | 164 |
|
163 | 165 |
def vars_made_by_payload(driver): |
164 | 166 |
vars_values = driver.execute_script( |
165 |
'return [1, 2].map(n => window[`hak_injected_${n}`]);' |
|
166 |
) |
|
167 |
if vars_values != [None, None]: |
|
167 |
''' |
|
168 |
return [ |
|
169 |
...[1, 2].map(n => window[`hak_injected_${n}`]), |
|
170 |
window.haketilo_version |
|
171 |
]; |
|
172 |
''') |
|
173 |
if vars_values != [None, None, None]: |
|
168 | 174 |
return vars_values |
169 | 175 |
|
170 | 176 |
if target2 == 'payload_error': |
... | ... | |
174 | 180 |
} |
175 | 181 |
elif target2 == 'payload_ok': |
176 | 182 |
vars_values = WebDriverWait(driver, 10).until(vars_made_by_payload) |
177 |
assert vars_values == [1, 2] |
|
183 |
assert vars_values[:2] == [1, 2] |
|
184 |
assert type(vars_values[2]) == str |
|
178 | 185 |
|
179 | 186 |
@pytest.mark.ext_data({'content_script': content_script}) |
180 | 187 |
@pytest.mark.usefixtures('webextension') |
Also available in: Unified diff
prepare for exposing APIs to injected scripts