1
0
mirror of https://github.com/kkapsner/CanvasBlocker synced 2024-05-29 09:28:06 +02:00

Compare commits

...

1052 Commits

Author SHA1 Message Date
kkapsner
4f366ed86c
New translations 2024-04-17 00:35:54 +02:00
kkapsner
00e60074c3 Don't throw target.apply is not a function
For #705
2024-04-17 00:34:19 +02:00
kkapsner
3eedc7b7dc Only check for prototype loops when there is a prototype
For #705
2024-04-17 00:07:16 +02:00
kkapsner
bebcec2139 Version 1.11 2024-04-16 14:53:11 +02:00
kkapsner
5181a55071 change "Site specific" to "Site-specific" 2024-04-10 16:06:56 +02:00
kkapsner
a8e192fa9b change "non persistent" to "nonpersistent"
For #696
2024-04-09 14:04:51 +02:00
kkapsner
0f3141ee12
New translations
For #696
2024-04-09 14:03:06 +02:00
kkapsner
e9ce4668fe
New translations 2024-04-09 14:01:35 +02:00
kkapsner
acce01bfeb Mark default value in drop downs settings
For #696
2024-04-08 00:15:55 +02:00
kkapsner
d159769997 Added :changed tag
For #696
2024-04-08 00:12:46 +02:00
kkapsner
56401048d1 Added tag search 2024-04-08 00:09:37 +02:00
kkapsner
54c625cd26 Fix function tampering detection via prototype
For #619 and #685
2024-04-08 00:05:50 +02:00
kkapsner
7bb3f00b45 Update releaseNotes.txt 2024-04-08 00:04:53 +02:00
kkapsner
b8c6115603 Not using proxy for toString broke google
For #698, #699, #700, #701
2024-04-07 23:59:49 +02:00
kkapsner
dacc578e12 Alpha versions must not break with patches 2024-04-07 02:36:20 +02:00
kkapsner
825fa42141 Fix isPointInPath and isPointInStroke
Fixes #696
2024-04-07 01:53:01 +02:00
kkapsner
40a8012ab0 Version 1.10.1 2024-04-04 23:30:20 +02:00
kkapsner
ec95cbe11b Bump min version to 100
to avoid warnings in the upload process
2024-03-30 17:27:30 +01:00
kkapsner
36b54f3ab5 Update navigator test to include storage.quota 2024-03-30 13:58:09 +01:00
kkapsner
87790c9731 Remove facebook.com from the convenience preset
Fixes #563
2024-03-30 13:54:47 +01:00
kkapsner
200f6b31f3 Do not use proxy for Function.prototype.toString
Fixes #685
2024-03-29 16:37:07 +01:00
kkapsner
1d8bf95926 Added protection for navigator.storage.estimate()
Fixes #681
2024-03-28 16:53:01 +01:00
kkapsner
c6cf48c489 Display version
Fixes #687
2024-03-28 14:43:53 +01:00
kkapsner
9a3745b366 Whitelist also data URL blocking
Fixes #665
2024-03-28 14:40:08 +01:00
kkapsner
a18e3ba37d Disable cache when reloading in the browser action 2024-03-28 14:26:20 +01:00
kkapsner
645d0ac550 dictionary update 2024-03-28 14:23:31 +01:00
kkapsner
809c1270c5
New translations 2024-03-28 14:21:13 +01:00
kkapsner
a99a0615d0 Update dev dependencies 2024-03-28 14:20:01 +01:00
kkapsner
bc13a5e2a2 Fix typos 2024-03-28 14:18:37 +01:00
kkapsner
8176ac83dc
New translations
* New Spanish translations
* New German translations
* New Portuguese translations
* New Russian translations
* New Portuguese (Brazilian) translations
2024-03-28 14:07:25 +01:00
kkapsner
4a2079bf47 Add alpha version to updates.json during build 2024-02-17 00:07:11 +01:00
kkapsner
7229133c8d Update build tool for manifest version v3 2024-02-17 00:02:10 +01:00
kkapsner
8bdedfcb3d Update package-lock.json 2024-02-16 23:48:34 +01:00
kkapsner
ae40caed09 Update package-lock.json 2023-07-19 01:22:11 +02:00
kkapsner
053ae6725e remove crowdin.yml from build 2023-05-30 19:04:40 +02:00
kkapsner
2a6c564ed8 Remove usage of deprecated browser.extension.getURL 2023-05-30 19:04:02 +02:00
kkapsner
8a84dd09f3
New translations
Lithuanian
2023-05-30 13:50:52 +02:00
kkapsner
df039b0f3c Do not use UTC for alpha version 2023-05-30 13:48:25 +02:00
kkapsner
fc5cce23ea Increase bottom padding of options page 2023-05-30 13:42:30 +02:00
kkapsner
e9f5f710e6 Replace window.open with browser.tabs.create
Fixes #661
2023-05-30 00:20:54 +02:00
kkapsner
5df98e0cf5 Settings export page did not show whole content in Firefox for Android 2023-05-30 00:11:43 +02:00
kkapsner
6ea89b6318 Improve isMobile
Fixes #658
2023-05-29 21:41:42 +02:00
kkapsner
02dfa8bd1b browser.windows.onRemoved not available on Fenix
Fix #654
2023-05-29 21:39:02 +02:00
kkapsner
8dcfac442f Added eBay and facebook.com to the convenience preset
Fixes #563
2023-05-29 14:48:56 +02:00
kkapsner
27d8d61da6 Update release notes
For #656
2023-05-29 14:44:36 +02:00
kkapsner
fb1311a842 Added showPresetsOnInstallation
Fixes #656
2023-05-29 14:05:03 +02:00
kkapsner
114b109340 Enable multiple alpha versions per day 2023-04-19 14:48:47 +02:00
kkapsner
4ce2f98b10 Fix alpha version 2023-04-19 14:48:23 +02:00
kkapsner
2c5b00a55d Always protect about:blank
Fixes #652
2023-04-19 14:34:37 +02:00
kkapsner
d6916b013e Version 1.10 2023-04-19 14:24:41 +02:00
kkapsner
3b92824d0f Update web-ext to 7.6.1 2023-04-15 20:00:07 +02:00
kkapsner
d3558f0bd7 Update release notes
was missing change for screen API
2023-04-15 16:17:59 +02:00
kkapsner
d55921ba92 Added known issue to release notes 2023-04-15 16:07:34 +02:00
kkapsner
1ca13299ec New alpha version 2023-04-15 16:07:15 +02:00
kkapsner
53ce86a21f Update release notes 2023-04-07 17:42:16 +02:00
kkapsner
269574ae17 Respect RFP in offscreenToBlobCallback
Fixes #644
2023-04-07 17:35:57 +02:00
kkapsner
3b08fdaf9b Improve github issue template 2023-04-07 10:01:29 +02:00
kkapsner
e0e6926a74 Use correct tab in browserAction (private browsing)
Fixes #649
2023-04-07 09:22:03 +02:00
kkapsner
2ac1ec277d Fix typos with firefoxVersionRV 2023-03-25 11:36:01 +01:00
kkapsner
8e463a6164 Update web-ext to 7.6.0 2023-03-22 13:04:33 +01:00
kkapsner
2cefed00a7 Fix alpha building tool 2023-03-22 13:04:09 +01:00
kkapsner
7cd4b2e9fa Updated browser presets 2023-03-18 14:45:32 +01:00
kkapsner
8d3f489d11 Added {real Firefox version - rv} to Firefox navigator preset
Fixes #641
2023-03-18 14:44:44 +01:00
kkapsner
34bc1730a1 Added dhl.de to the convenience preset
Fixes #532
2023-03-14 20:08:14 +01:00
kkapsner
f900c25900
New translations
* New Italian translations
* New Korean translations
2023-03-14 16:50:19 +01:00
kkapsner
6b172a0a4c Update manifest.json for new manifest version 2023-03-14 16:49:37 +01:00
kkapsner
46eb608f4e Update package-lock.json 2023-03-14 16:43:20 +01:00
kkapsner
b46341de90 Update web-ext 2022-09-04 15:19:03 +02:00
kkapsner
91b7dcbb11 Update readme regarding built-in fingerprinting protection
Fixes #628
2022-09-04 15:15:50 +02:00
kkapsner
582a962d8d
New translations 2022-08-28 17:47:48 +02:00
kkapsner
d9c14d7eed Use public bounce for data-URL test
Fixes #615
2022-05-04 13:30:47 +02:00
kkapsner
4bd0c0c96c Added support for wildcards (*) in domains
Fixes #613
2022-04-26 17:08:28 +02:00
kkapsner
cfb09075eb Fetch errors in URL regular expressions creation #2
Fixes #602
2022-04-24 20:50:06 +02:00
kkapsner
4443d0a117 Improve issue template 2022-04-24 20:47:58 +02:00
kkapsner
bb71b10c58
Fixed typo in other languages 2022-04-22 10:12:17 +02:00
kkapsner
4d4cda678c Fix typo 2022-04-22 10:08:03 +02:00
kkapsner
6c6012edf4
Update descriptions in all languages
For #591 and #607
2022-04-21 21:24:00 +02:00
kkapsner
05f8f936e9 Update description of the rngs
Fixes #591
2022-04-21 21:11:44 +02:00
kkapsner
1a199a5049 Updated description of webGL vendor and renderer
Fixes #607
2022-04-21 17:18:27 +02:00
kkapsner
e5cba569ba Fix npm audit 2022-04-15 13:54:27 +02:00
kkapsner
fd09e3d5cf Use inner of top window for all outer computations
For #598
2022-04-04 18:10:16 +02:00
kkapsner
6aab7f68ea
New translations
* Czech
* Chinese Simplified
* Portuguese, Brazilian
* French
* Spanish
2022-03-30 16:48:33 +02:00
kkapsner
a92373f412 Update web-ext 2022-03-30 16:46:28 +02:00
kkapsner
b4cb52df15 Fix eslint warning 2022-03-17 23:05:46 +01:00
kkapsner
d100932236 Allow clicks in url change input
Fixes #600
2022-03-17 22:44:52 +01:00
CommanderRoot
bfa355b58d
Replace deprecated String.prototype.substr() 2022-02-21 19:46:02 +01:00
kkapsner
dc593daba8 Update eslint and web-ext 2022-02-20 23:31:23 +01:00
kkapsner
029933964f Version 1.9 2022-02-18 19:45:27 +01:00
kkapsner
ffd659c7bb Update release notes 2022-02-17 17:39:35 +01:00
kkapsner
f788cd4263
New translations 2022-02-17 17:19:05 +01:00
kkapsner
1bd87e6953 Added <option1|option2|...> syntax to webGL
Fixes #493
2022-02-15 19:53:58 +01:00
kkapsner
fb231a070b Added {random vendor} and {random renderer}
For #493
2022-02-14 17:37:54 +01:00
kkapsner
740b360485 Linting 2022-02-13 14:57:36 +01:00
kkapsner
3621fef625 Fix slight code problems in svg-test 2022-02-13 14:54:48 +01:00
kkapsner
3d603b84d4 Added notice when dom.webAudio.enabled is set to false
Fixes #592
2022-01-30 17:50:59 +01:00
kkapsner
d4fc7027eb Fetch errors in URL regular expressions creation
Fixes #581
2022-01-30 13:11:44 +01:00
kkapsner
4c364a9a72
New translations 2022-01-30 11:16:54 +01:00
kkapsner
863140c1ca Added anchors to FAQ 2022-01-30 11:00:00 +01:00
kkapsner
640bd36b86 Added SVG protection
Fixes #589 and fixes #590
2022-01-30 10:59:41 +01:00
kkapsner
734e76180f Added test for SVG
For #589 and #590
2022-01-30 10:05:52 +01:00
kkapsner
78183f9efc Version 1.8 2021-11-07 16:20:39 +01:00
kkapsner
f043acf41c Release preparation 2021-11-07 11:09:53 +01:00
kkapsner
892e4d2c34
New translations 2021-11-01 13:57:01 +01:00
kkapsner
d97864436d update release notes 2021-11-01 13:54:59 +01:00
kkapsner
7f154c6cc6 Do not use browser.extension.getURL 2021-11-01 13:18:38 +01:00
kkapsner
6f5cfc1080
New Italian translations 2021-09-09 17:42:29 +02:00
kkapsner
cca81c4006 Do not add CSP headers to 304 requests
Fixes #577
2021-09-09 17:40:18 +02:00
kkapsner
2f6ca07bba Added 304 test
For #577
2021-09-08 23:09:08 +02:00
kkapsner
8e4a881288 Close browserAction when a new page is opened
Fixes #576
2021-08-17 19:01:44 +02:00
kkapsner
709093fa4d Update web-ext 2021-07-04 09:28:57 +02:00
kkapsner
b9d5eb3d27 Version 1.7 2021-06-21 23:28:36 +02:00
kkapsner
e8ee1f8e9c Verion 1.6.1
Fixes #564
2021-06-21 22:01:09 +02:00
kkapsner
4ac02003de wrapped original funtion may gets destroyed before usage
For #564
2021-06-21 20:41:33 +02:00
kkapsner
cf0243d487 Version 1.7 2021-06-20 14:42:13 +02:00
spodermenpls
34f9dfa4fd
Status Icon revision
For #535
2021-06-14 22:25:22 +02:00
kkapsner
bce494e744 Improve whitelist button
For #535
2021-06-13 21:08:28 +02:00
kkapsner
87646a152a New alpha version 2021-06-12 01:04:47 +02:00
kkapsner
de14490574
New translations 2021-06-12 01:03:47 +02:00
kkapsner
13203a905d arrayFake did not correctly compute if values were faked
Fixes #531
2021-06-12 00:58:37 +02:00
kkapsner
277bef1227 Clean up white spaces 2021-06-12 00:50:05 +02:00
kkapsner
015350c385 Add reload button to browser action
For #535
2021-06-12 00:49:10 +02:00
kkapsner
cdfe72fada Use dedicated icons for the whitelist toggle
For #535
2021-06-12 00:04:17 +02:00
kkapsner
57bf81ec3a Cleanup icons 2021-06-12 00:03:22 +02:00
kkapsner
43ea01c178 Add whitelist type selection
Fixes #538
2021-06-08 23:42:19 +02:00
kkapsner
3722263a6f Documentation 2021-06-08 15:40:15 +02:00
kkapsner
020a9c5b9a Whitelisted block mode should be "allowEverything" 2021-06-08 15:31:37 +02:00
kkapsner
698fc02e66
New French translations 2021-06-08 13:25:58 +02:00
kkapsner
7ae6e14d0d
New translations 2021-06-07 21:33:31 +02:00
kkapsner
539ddf5e46 Update web-ext to 6.1.0 2021-06-07 21:30:26 +02:00
kkapsner
70a941f5aa Added FAQ for url specific settings
Fixes #550
2021-06-07 21:04:59 +02:00
kkapsner
51e76bafce New alpha version 2021-06-06 15:01:32 +02:00
kkapsner
8dddff85cc Cleanup 2021-06-06 14:43:46 +02:00
kkapsner
0d581403c1 toBlob is not a constructor 2021-05-26 08:19:43 +02:00
kkapsner
0930928df3 detectionTest: check function code also in an iFrame 2021-05-26 08:19:43 +02:00
kkapsner
a7d02efd09 Fix toString for proxies 2021-05-26 08:19:43 +02:00
kkapsner
aa3f9d878d detectionTest: made addTest asynchronous 2021-05-26 08:19:43 +02:00
kkapsner
211d6710f6 First proxy attempt 2021-05-26 08:19:43 +02:00
kkapsner
42b19a4ba5 Added status button in browser action to see and set the whitelist status
Fixes #535
2021-05-25 16:44:20 +02:00
kkapsner
16bef43945 Update npm modules for dev 2021-05-08 21:22:23 +02:00
kkapsner
b614b84b5f Set random supply if settings were preloaded
Fixes #544
2021-05-04 22:52:37 +02:00
kkapsner
bde9d3c012 Added FAQ for PayPal problem
Fixes #532
2021-03-12 13:43:51 +01:00
kkapsner
32af464c05 Improved whitelist inspection
Fixes #501
2021-03-06 22:52:52 +01:00
kkapsner
1e1f343f28 New alpha version 2021-03-06 13:56:11 +01:00
kkapsner
7cd4ecec44
New translations 2021-03-06 11:18:59 +01:00
kkapsner
4f5b9b5f78 Linting 2021-03-06 11:17:04 +01:00
kkapsner
be55cbf983 Added paypal.com to the convenience preset
For #532
2021-03-06 11:16:20 +01:00
kkapsner
872e633025 Convenience preset did not work properly 2021-03-06 11:10:18 +01:00
kkapsner
ee87773ce2 Limit periodical rnd clearing
Periodical persistent rnd clearing does not clear in active tabs.

Fixes #518
2021-02-21 11:49:29 +01:00
kkapsner
28dd7f6819
New translations 2021-01-26 21:56:37 +01:00
kkapsner
a5558b4144 Add button to reload extension if update pending
For #522
2021-01-26 21:45:15 +01:00
kkapsner
8e5986817e Update improvements
For #522
2021-01-26 13:47:11 +01:00
kkapsner
e48710eee9 Fix message canvasBlocker-unload
For #522
2021-01-26 13:34:51 +01:00
kkapsner
1b04da40c2 Update web-ext 2021-01-18 21:50:14 +01:00
kkapsner
afd426da58 Version 1.6 2021-01-18 21:42:12 +01:00
kkapsner
0d160143c1 Update release notes 2021-01-18 21:11:14 +01:00
kkapsner
b94de2b641
New translations
* new French translations
* new Italian translations
2021-01-18 20:37:47 +01:00
kkapsner
945c2716c9 Improved input faking performance further
fixes #517
2021-01-13 20:06:03 +01:00
kkapsner
1f1d7052a1 Fix bug in webGl parameter faking
Fixes #508
2021-01-03 22:23:46 +01:00
kkapsner
e2c5dfc06e added {disabled} to UNMASKED_VENDOR_WEBGL and UNMASKED_RENDERER_WEBGL
to disabled the WEBGL_debug_renderer_info extension

Fixes #508
2021-01-03 21:11:17 +01:00
kkapsner
b4a744660b Improved performance for protected canvas part "input"
Fixes #517
2021-01-03 17:36:40 +01:00
kkapsner
fcbc622cef Revert iframe protection upon window unload
Fixes #519
2021-01-03 17:32:57 +01:00
kkapsner
f4d09e43ac added {empty}, {false} and {undefined} to webGL preference parameters
(i.e. VENDOR, RENDERER, UNMASKED_VENDOR_WEBGL and
UNMASKED_RENDERER_WEBGL)

For #508
2021-01-02 11:05:52 +01:00
kkapsner
ae526e4710
Polish translation 2020-12-12 11:08:40 +01:00
kkapsner
822218a00c Update packages 2020-12-12 11:04:05 +01:00
kkapsner
4e6f76ab75 New translations messages.json (Polish) 2020-11-25 15:39:33 +01:00
kkapsner
543365cd64 New translations messages.json (Polish) 2020-11-25 15:29:45 +01:00
kkapsner
1125d6f1a8 Minimal styling on test pages
For #106
2020-11-21 13:58:32 +01:00
kkapsner
7178b409c3 Version 1.5 2020-11-21 13:28:40 +01:00
kkapsner
b7e1b50166 New translations messages.json (Polish) 2020-11-14 00:28:31 +01:00
kkapsner
184b6bb47c New translations messages.json (Polish) 2020-11-14 00:20:04 +01:00
kkapsner
586bc97d38 New translations messages.json (Polish) 2020-11-12 23:58:58 +01:00
kkapsner
8f13588e61 New translations messages.json (Polish) 2020-11-12 23:45:23 +01:00
kkapsner
8c852e96c9 New translations messages.json (Polish) 2020-11-10 19:19:55 +01:00
kkapsner
23f2bf8b23 New translations messages.json (Polish) 2020-11-10 18:50:30 +01:00
kkapsner
83394afc90 Update release notes 2020-11-09 08:33:04 +01:00
kkapsner
0f61318c27 Style index pages 2020-11-09 08:27:45 +01:00
kkapsner
716e6aa6a9
New Crowdin updates (#492)
* New translations messages.json (Chinese Traditional)

* New translations messages.json (German)

* New translations messages.json (Portuguese)

* New translations messages.json (Portuguese)

* New translations messages.json (Portuguese)

* New translations messages.json (Portuguese)

* New translations messages.json (Portuguese)

* New translations messages.json (Portuguese)

* New translations messages.json (Portuguese)

* New translations messages.json (Portuguese)

* New translations messages.json (Italian)

* New translations messages.json (Portuguese)

* New translations messages.json (Portuguese)
2020-11-02 13:54:43 +01:00
kkapsner
701eb979ed Updated DOMRect protection 2020-11-02 13:49:42 +01:00
kkapsner
d5417cf807 Improved exportFunctionWithName
To reduce the need of double exports.
2020-11-02 13:11:50 +01:00
kkapsner
c16068ca85 domRectTest: update SVG tests 2020-11-02 13:07:40 +01:00
kkapsner
ef69e1dcb5 domRectTest: added IntersectionObserverEntry tests 2020-11-02 13:07:19 +01:00
kkapsner
902d31b643 Update npm packages 2020-11-02 12:01:18 +01:00
kkapsner
0a290b3521 Fix stuck Fenix
Fixes #503
2020-11-02 11:54:43 +01:00
kkapsner
e65ac94dda Added getImageData raw display test. 2020-10-26 14:17:34 +01:00
kkapsner
71c9baec0a domRectTest: added getBOXQuads test 2020-10-14 16:33:26 +02:00
kkapsner
ff98b9b9af domRectTest: added svg tests 2020-10-14 16:33:26 +02:00
kkapsner
3eea8fe7c4 domRectTest: hide detail data 2020-10-14 16:33:26 +02:00
litetex
3ab6366994
Options: Using by default json as prefered file type for loading settings (#500) 2020-10-14 16:29:36 +02:00
kkapsner
cd852a0c8b New translations messages.json (Portuguese) 2020-10-14 16:27:39 +02:00
kkapsner
864c2454e1 New translations messages.json (Portuguese) 2020-10-14 16:12:51 +02:00
kkapsner
8d7637e65b New translations messages.json (Italian) 2020-10-13 09:34:20 +02:00
kkapsner
393020630c New translations messages.json (Portuguese) 2020-10-12 12:23:21 +02:00
kkapsner
9779d14276 New translations messages.json (Portuguese) 2020-10-12 12:14:41 +02:00
kkapsner
5ab00a5584 New translations messages.json (Portuguese) 2020-10-12 12:05:12 +02:00
kkapsner
6a31bb3791 New translations messages.json (Portuguese) 2020-10-12 11:46:05 +02:00
kkapsner
beb3a969f3 New translations messages.json (Portuguese) 2020-10-12 11:33:45 +02:00
kkapsner
5964146e22 New translations messages.json (Portuguese) 2020-10-12 11:28:23 +02:00
kkapsner
679265a82f New translations messages.json (Portuguese) 2020-10-03 13:28:14 +02:00
kkapsner
d761411339 New translations messages.json (Portuguese) 2020-10-03 13:18:11 +02:00
kkapsner
1b3709bce5 New translations messages.json (German) 2020-07-27 12:53:50 +02:00
kkapsner
00e94f9ae4 Updated dev dependencies 2020-07-19 11:22:52 +02:00
kkapsner
c6bb9766f9 New translations messages.json (Chinese Traditional) 2020-07-15 16:42:09 +02:00
kkapsner
b9c9516b14
New trnaslations
* Chinese Traditional
* French
* Spanish
2020-07-07 13:17:13 +02:00
kkapsner
cb7a98d751 Updated devDependencies package.json
To remove vulnerabilities
2020-06-27 11:49:43 +02:00
kkapsner
21a950565f Fix alpha value in canvasAPI.js 2020-06-27 11:45:23 +02:00
kkapsner
d8b5ba0744 iframe test: added nested iframes test 2020-06-19 00:07:14 +02:00
kkapsner
ce1925d95f iframe test: better timing dependencies 2020-06-19 00:06:56 +02:00
kkapsner
2c1756ff07 Avoid useless URL specific setting in whitelist inspection
Fixes #483
2020-06-17 16:18:56 +02:00
kkapsner
c6e4027a7f
Added zh-TW
Fixes #479
2020-06-10 14:56:04 +02:00
kkapsner
5ac5c8cc66 Fix crowdin.yml 2020-06-10 14:46:48 +02:00
kkapsner
46bf7e04f4 Set exceptions to two letter code 2020-06-10 14:42:35 +02:00
kkapsner
10b2ef8e70 Version 1.4 2020-06-07 13:10:18 +02:00
kkapsner
ac2e074fdd Updated release notes 2020-06-07 11:32:29 +02:00
kkapsner
d9adcb4c3d
New Portuguese Brazilian translation 2020-06-03 20:03:01 +02:00
kkapsner
5b1c4bf6cc
New Crowdin translations
* New translations (Spanish)
* New translations (Italian)
* New translations (Polish)
* New translations (Russian)
* New translations (Chinese Simplified)
* New translations (Portuguese, Brazilian)
* New translations (Norwegian Bokmal)
2020-06-02 15:30:24 +02:00
kkapsner
8cf58ebe3b Updated updates.json 2020-06-01 14:42:38 +02:00
kkapsner
2e91f85d8f Added offscreen canvas protection
Fixes #467
2020-06-01 14:25:47 +02:00
kkapsner
2c141277e8 Set proper name for faked getContext 2020-06-01 14:03:32 +02:00
kkapsner
3e3dbf2698 Added noDraw parameter to webGL test. 2020-06-01 13:53:05 +02:00
kkapsner
0225f94890 Added FAQ for hidden settings 2020-05-31 13:59:28 +02:00
kkapsner
253d3f68b1 Added canvas cache to isPointInPath and isPointInStroke 2020-05-24 23:39:44 +02:00
kkapsner
da5a9f4509 webGL: added image hash tests 2020-05-21 00:11:25 +02:00
kkapsner
a79c4ec8c5 Added test for blob, offscreen canvas and offscreen canvas in workers 2020-05-19 10:48:08 +02:00
kkapsner
7c2a4edde0 Remove unnecessary CSS. 2020-05-19 10:10:38 +02:00
kkapsner
51b740632a Updated link to DOMRect test 2020-05-19 09:54:40 +02:00
kkapsner
9a7dd3c189 DOMRect test: added test without iframe 2020-05-18 13:22:33 +02:00
kkapsner
4fa91ef3ae Fix refresh bug in audio test 2020-05-01 01:11:21 +02:00
kkapsner
64adb49b81 Additional audio tests 2020-05-01 01:06:50 +02:00
kkapsner
49f3c166a2 Navigator test: added nested worker and worker from blob
Fixes #458
2020-04-15 00:25:24 +02:00
kkapsner
308d7c4005 Navigator test: added worker test
Fixes #458
2020-04-13 10:10:44 +02:00
kkapsner
87fa607d28
New Italian translations 2020-04-10 14:28:22 +02:00
kkapsner
aae0fa2f8b
New French translations 2020-04-05 15:04:41 +02:00
kkapsner
d834b7a14b Updated npm packages 2020-04-05 14:35:50 +02:00
TotalCaesar659
e2d18a143d
Update URL to HTTPS 2020-04-05 14:30:11 +02:00
kkapsner
8ee413a951
New translations 2020-03-22 16:36:14 +01:00
kkapsner
1fb7f7991b Added link to FAQ
For #106
2020-03-22 16:33:22 +01:00
kkapsner
7cfc43194a Text corrections/improvements. 2020-03-22 14:25:15 +01:00
kkapsner
e7cef53bac textMetricsTest: added exception text for FF 68
Fixes #453
2020-03-18 14:06:34 +01:00
kkapsner
a9c89ff20c Version 1.3 2020-03-17 22:41:55 +01:00
kkapsner
d9d2038f0c
New Russian translations 2020-03-17 22:16:19 +01:00
kkapsner
f2b55fe7a2 Add missing APIs to ignoredAPIs 2020-03-17 20:04:28 +01:00
kkapsner
dd6fbc6c1f textMetricsTest: insert canvas in DOM 2020-03-15 13:43:41 +01:00
kkapsner
736aeb371d
New translations 2020-03-14 13:16:52 +01:00
kkapsner
ec128796e3 Added TextMetrics protection
Fixes #448
2020-03-14 12:54:23 +01:00
kkapsner
692b4616e2 Switch from .local to .localhost to simplify https setup 2020-03-14 11:05:02 +01:00
kkapsner
895f1a6f66 Avoid mixed content in test 2020-03-12 23:01:42 +01:00
kkapsner
73e5f5737b Added warning if some features of a API are disabled 2020-03-06 12:06:40 +01:00
kkapsner
d449e5f0c3 Added FAQ for reCAPTCHA
For #398
2020-02-27 17:30:58 +01:00
kkapsner
9614786406 New beta version 2020-02-25 08:44:01 +01:00
kkapsner
0f1aa1cc32 Always open options page in new tab
Fixes #434 and effects #445
2020-02-24 23:33:02 +01:00
kkapsner
13b061c395 Removed unnecessary activeTab permission 2020-02-23 16:43:17 +01:00
kkapsner
00f69b73ab
New Russian translations 2020-02-23 16:42:16 +01:00
kkapsner
1cfdcdb120 Added FAQs
For #106
2020-02-16 19:57:11 +01:00
kkapsner
73694ab129
Added Norwegian 2020-02-15 14:52:55 +01:00
kkapsner
59d78c8e68 New translations
New Italian and Chinese translations.
2020-02-09 23:49:42 +01:00
kkapsner
84e40b5eb4 Some code improvements
Fixes #439
2020-02-01 22:00:39 +01:00
kkapsner
ada2845213 Add task for alpha build 2020-02-01 22:00:13 +01:00
kkapsner
9e92e4baf2 Version 1.2 2020-01-29 10:42:52 +01:00
kkapsner
f65d73f125
New Italian translations 2020-01-29 10:41:43 +01:00
kkapsner
f03eb4a67a Clean up release notes 2020-01-28 23:17:23 +01:00
kkapsner
f674ee3328 Added custom build tool
Fixes #435
2020-01-28 23:16:40 +01:00
kkapsner
f358951022 New alpha 2020-01-26 01:51:37 +01:00
kkapsner
6fbb9339a1 Remove duplicated code 2020-01-26 01:11:18 +01:00
kkapsner
64b60c834a Importing settings file with an very old storage version did not work at all 2020-01-26 00:51:18 +01:00
kkapsner
350c7b65d4 Fix code loading order 2020-01-26 00:24:12 +01:00
kkapsner
3d881d3c7d Fix group filtering in revertProperties 2020-01-25 10:04:54 +01:00
kkapsner
8bfaf63a99
Translation update 2020-01-25 01:11:04 +01:00
kkapsner
cc8ca147b0 Added container specific navigator settings 2020-01-25 01:03:05 +01:00
kkapsner
01b63b356c Added parameters to parseTranslation 2020-01-25 00:42:16 +01:00
kkapsner
b48ad91dfe Release notes update 2020-01-25 00:38:39 +01:00
kkapsner
282fcb12de
Translation update 2020-01-24 15:49:28 +01:00
kkapsner
6c22788096 Cleanup CanvasBlocker
once Firefox supports browser.runtime.onSuspend
2020-01-23 15:36:32 +01:00
kkapsner
9353f71455 Added notice for privacy.resistFingerprinting
Fixes #427
2020-01-23 15:23:56 +01:00
kkapsner
1556ee45c2 Update release notes 2020-01-23 13:58:14 +01:00
kkapsner
f3f6df229f Undo interception in top windows
Fixes #431
2020-01-23 13:56:14 +01:00
kkapsner
e2efb727b9 Always specify correct function names 2020-01-22 13:38:24 +01:00
kkapsner
29e61ada25 Added window.open test
For #431
2020-01-21 22:45:28 +01:00
kkapsner
d547917b43 Fix dependency order
For #429
2020-01-19 17:01:14 +01:00
kkapsner
363940014d Protect exportFunction with defineAs
For #429
2020-01-19 01:27:26 +01:00
kkapsner
16f88a5daa Version 1.1 2020-01-19 00:42:15 +01:00
kkapsner
5de24ad430
New Russian translations 2020-01-18 10:02:21 +01:00
kkapsner
38e56aff31
New Russian translations 2020-01-14 13:41:40 +01:00
kkapsner
b0becc0af0 Hashes change upon reload is dependent on settings
Fixes #425
2020-01-12 13:47:17 +01:00
kkapsner
417b234a26
New Crowdin translations (#423)
* New translations messages.json (Chinese Simplified)

* New translations messages.json (French)

* New translations messages.json (Italian)

* New translations messages.json (Russian)

* New translations messages.json (Spanish)

* New translations messages.json (Chinese Simplified)

* New translations messages.json (Chinese Simplified)

* New translations messages.json (Chinese Simplified)

* New translations messages.json (Chinese Simplified)
2020-01-11 01:34:39 +01:00
kkapsner
3334fa64c1 New translations messages.json (German) 2020-01-06 21:16:17 +01:00
kkapsner
accdb3cec1 Formatting locales files 2020-01-06 21:09:13 +01:00
kkapsner
e50e9deca4 Added testAPI and canvasAPI 2020-01-06 15:15:04 +01:00
kkapsner
4337ccbf33 Send origin to server. 2020-01-06 15:07:58 +01:00
kkapsner
ade99bbb8a await also works with normal return values. 2020-01-06 15:05:37 +01:00
kkapsner
e1e313cb96 Added test for appendChild 2020-01-06 14:56:49 +01:00
kkapsner
16fb042335 Fixed origin display in blobIframe 2020-01-06 14:55:11 +01:00
kkapsner
4020ba1ebd Added link to translation issue 2020-01-06 14:53:49 +01:00
kkapsner
6312914ba3 Update Crowdin configuration file 2020-01-06 11:51:07 +01:00
kkapsner
9628497277 Better sentences I should make 2020-01-03 10:14:01 +01:00
kkapsner
db3cb3be44 Typos 2020-01-02 12:54:00 +01:00
kkapsner
0e8938ba6e Updated web-ext 2020-01-02 12:03:00 +01:00
kkapsner
d09340e84f Fix fields hosted on braintree when window API is protected
Fixes #417
2020-01-02 11:41:13 +01:00
kkapsner
b361733c73 Importing settings file with an older storage version did not work properly 2020-01-01 16:04:44 +01:00
kkapsner
85c88ad3d8 window.name protection was detectable 2020-01-01 00:30:16 +01:00
kkapsner
ccabfc2a6f 1.0RC3 2019-12-30 00:24:20 +01:00
kkapsner
cc3127b0a4 Updated release notes 2019-12-29 23:44:21 +01:00
kkapsner
4601dd25af Allow cross origin arguments and remove apply(..., Array.from)
Fixes #415
2019-12-29 23:40:39 +01:00
kkapsner
8506757c62 Code cleanup: improve modifiedCanvasAPI 2019-12-29 11:46:47 +01:00
kkapsner
e3182b562b Code cleanup: improve webgl.js 2019-12-29 00:45:20 +01:00
kkapsner
abdb95b815 Code cleanup: reduce block nesting 2019-12-29 00:18:05 +01:00
kkapsner
10413a89c3 Switch to asych/await where useful 2019-12-28 23:23:55 +01:00
kkapsner
372ee755f7 Added iframeAPI script for tests 2019-12-24 00:54:17 +01:00
kkapsner
3dc39e11a5 eslint cleanup 2019-12-24 00:32:50 +01:00
kkapsner
627ee6d21e Improved navigator test 2019-12-21 23:47:07 +01:00
kkapsner
09286644d8 Update release notes 2019-12-18 00:11:09 +01:00
kkapsner
26e0d21b23 Grammar 2019-12-17 08:09:16 +01:00
kkapsner
993e72d6c8 Add reCAPTCHA preset
Fixes #398
2019-12-16 19:31:18 +01:00
kkapsner
ce27426ad4 Update to eslint 6.7.2 2019-12-16 19:28:05 +01:00
kkapsner
0d0e3e30ec test updates 2019-12-16 19:27:28 +01:00
kkapsner
717e1d3e3a It's time to face it
... actually we are way beyond 1.0
2019-12-15 00:08:07 +01:00
kkapsner
a9ed208505 Added CSP test 2019-12-14 21:22:18 +01:00
kkapsner
ddcaf5a2a9 Updated min version to match ESR 2019-12-14 15:08:19 +01:00
kkapsner
6fb7622fec Always use exportFunctionWithName 2019-12-13 17:34:14 +01:00
kkapsner
af1dfe755c Simplified code structure 2019-12-12 23:44:02 +01:00
kkapsner
0d331d91a6 Fixed output in checkPropertyDescriptor() 2019-12-12 23:27:21 +01:00
kkapsner
15c537cd1f Fixed statement order to catch api changes 2019-12-12 17:44:14 +01:00
kkapsner
3ab687f45b Improved settings loading test
to include force loading detection check.
2019-12-12 00:10:46 +01:00
kkapsner
3668f48247 Adjusted codebeat settings 2019-12-12 00:10:08 +01:00
kkapsner
14a4d1cdc2 Get rid of eval. 2019-12-12 00:09:53 +01:00
kkapsner
32f9ea7447 Remove code duplications and cleanup 2019-12-10 15:07:22 +01:00
kkapsner
8e414becf0 Proper screen api whitelisting 2019-12-09 00:31:08 +01:00
kkapsner
bf757a5431 Added mail.google.com to the convenience preset
Fixes #413
2019-12-06 23:45:28 +01:00
kkapsner
762367a87b Added window.open protection 2019-12-02 22:57:11 +01:00
kkapsner
a181780020 Last adjustments to screen protection
Fixes #220
2019-12-02 19:17:54 +01:00
kkapsner
b7ba5c2050 Added default values for mobile 2019-12-02 19:16:32 +01:00
kkapsner
5020e0b070 Resetting the settings had undesired side effects 2019-12-02 19:13:38 +01:00
kkapsner
c62ddcc33f Typo 2019-12-01 23:33:17 +01:00
kkapsner
59ad6fc7d6 navigator.oscpu and navigator.buildID are undefined in non Gecko browsers
Fixes #411
2019-12-01 01:27:29 +01:00
kkapsner
1aff68d802 Added linting for consistent-return 2019-12-01 01:25:39 +01:00
kkapsner
635cdf8061 Initialized npm 2019-11-30 15:34:42 +01:00
kkapsner
16fc49eee3 Added missing texts 2019-11-30 14:38:53 +01:00
kkapsner
afd9aea767 Correct name for .codebeatsettings 2019-11-30 13:22:41 +01:00
kkapsner
17349dcb05 Linting of .tools and test 2019-11-30 02:05:37 +01:00
kkapsner
aef6bd3d59 Big linting 2019-11-28 01:26:35 +01:00
kkapsner
b5e6d049ce Spelling settings 2019-11-28 01:13:40 +01:00
kkapsner
83a8234b24 userAgent feature could not be disabled 2019-11-25 22:10:31 +01:00
kkapsner
d4ce6c4b4b Updated screen sizes. 2019-11-22 08:23:45 +01:00
kkapsner
cded4d369a Removed write rights for codebeat 2019-11-21 11:34:42 +01:00
kkapsner
d930de1883 Updated description 2019-11-21 11:10:38 +01:00
kkapsner
a555f3cd64 Grammar 2019-11-12 23:18:17 +01:00
kkapsner
d42a4d2372 Added screnn protection
First draft for #220
2019-11-11 23:00:39 +01:00
kkapsner
cc776b48de Improved storage of protected API features 2019-11-11 15:30:11 +01:00
kkapsner
1430b89d55 settings sanitation: added missing APIs 2019-11-08 08:44:20 +01:00
kkapsner
320dc02941 Fix export background color
Background color of the textarea in the settings export was not readable
in the dark theme when the value was invalid
2019-11-08 08:42:02 +01:00
kkapsner
5d6c2d9a47 Added ability to use objectGetters on faked functions. 2019-11-07 17:38:54 +01:00
kkapsner
73657852d3 Added screen size test 2019-11-06 14:29:53 +01:00
kkapsner
ee254b3b93 Updated descriptions
Made clear that the built in fingerprinting protection of Firefox is
fine to use.
2019-10-24 17:29:05 +02:00
kkapsner
f010c7c8fa Version 0.5.15 2019-09-24 13:11:47 +02:00
kkapsner
aa7a4e1d06 Added protection for getParameter (webGL)
Fixes #329
2019-09-19 00:47:52 +02:00
kkapsner
64d4aa3f73 Enhanced webGL test page
For #329
2019-09-19 00:41:20 +02:00
kkapsner
506f062c07 Revert to correct values when whitelisted
Fixes #397
2019-09-13 00:49:34 +02:00
kkapsner
f3d1ca80f5 Remove iframe protection from whitelisted pages
Fixes #397
2019-09-11 23:57:00 +02:00
kkapsner
069165e8d6 Added viewport meta
For #387
2019-09-11 23:49:50 +02:00
kkapsner
5a355284f3 Reevaluated logging message levels
Fixes #394
2019-09-05 01:07:05 +02:00
kkapsner
14b4bd8ac6 Improved test pages
For #390
2019-09-04 00:30:20 +02:00
kkapsner
acc171041d Improved option pages on mobile
Fixes #387
2019-08-21 14:33:29 +02:00
kkapsner
a95fae3de8 Future proof: getters my be values in other browsers
Example: window.opener is a value property in Chrome.
2019-08-16 17:34:16 +02:00
kkapsner
d666d68812 Version 0.5.13 2019-07-24 22:58:08 +02:00
kkapsner
d7d0555036 Typo 2019-07-18 20:42:56 +02:00
kkapsner
61c0a185b5 Added description for preset opening setting 2019-07-18 19:52:35 +02:00
kkapsner
209937c9bc Version 0.5.13 RC1 2019-07-17 17:19:28 +02:00
kkapsner
74f2ad7328 Setting rearrangements 2019-07-17 13:09:16 +02:00
kkapsner
adbab50952 presets: text improvements 2019-07-17 13:08:49 +02:00
kkapsner
43b2fa8b51 Added setting presets
Fixes #376
2019-07-16 18:25:30 +02:00
kkapsner
4d7b9b981c Only show "Clear container" if they are available 2019-07-16 13:40:08 +02:00
kkapsner
3861b29848 Linting 2019-07-16 13:36:54 +02:00
kkapsner
7574ee1126 Added tab icon to all option pages 2019-07-16 13:35:30 +02:00
kkapsner
6fb0f946af Display of url specific settings did not work properly
For #271
2019-07-14 10:53:23 +02:00
kkapsner
ca6d421153 Fixed chinese localization file 2019-07-07 20:59:39 +02:00
kkapsner
3452c9b58c Added thank to KrasnayaPloshchad 2019-07-07 20:58:20 +02:00
kkapsner
a269f1701f
Merge pull request #380 from KrasnayaPloshchad/patch-1
Update massages for zh_CN locale
2019-07-07 20:56:15 +02:00
Krasnaya Ploshchad’
2d86005df2
Update massages for zh_CN locale
Lots of messages were translated.
2019-07-07 14:08:40 +00:00
kkapsner
85320924fa Version 0.5.13 2019-07-06 12:51:51 +02:00
kkapsner
bd6b85784f Updated release notes 2019-07-06 11:52:58 +02:00
kkapsner
40be0ad6f5 options: moved "Settings" to "General" group
For #353
2019-07-03 13:44:38 +02:00
kkapsner
e698a6372b options: made tabs taller
Fixes #353
2019-06-30 12:50:12 +02:00
kkapsner
6083eb051f Added tabs in options page
For #353
2019-06-29 16:55:26 +02:00
kkapsner
7037804b6f Enabled whitelisting of local files
Fixes #373
2019-06-25 23:22:55 +02:00
kkapsner
7cd89dec99 Detect when browser.contextualIdentities.onRemoved is not supported
For #372
2019-06-25 08:21:34 +02:00
kkapsner
9ccaabd46a Version 0.5.12 2019-06-23 20:46:35 +02:00
kkapsner
6d0ed9e15d Fixed RC URL 2019-06-20 19:39:47 +02:00
kkapsner
3d55de69be 0.5.11 RC1 2019-06-20 10:33:38 +02:00
kkapsner
ea15fabad9 Race condition causes persistent rnd separation between containers to lea
Fixes #369
2019-06-14 10:51:26 +02:00
kkapsner
03524fd789 Added tool to clear persistent rng for a specific container
Fixes #368
2019-06-14 10:45:34 +02:00
kkapsner
895c7a36d7 Clear persistent rng data if a container is deleted
For #368
2019-06-14 10:36:49 +02:00
kkapsner
1737344480 document.write and document.writeln protection broke pages
Fixes #365
2019-06-11 23:09:13 +02:00
kkapsner
27ddc8a683 Options: made sections collapsible
For #353
2019-06-11 13:54:15 +02:00
kkapsner
e510f78f87 Added auto update for beta versions
Fixes #361
2019-06-09 13:11:16 +02:00
kkapsner
7eb88dab38 Fix page action display window height
For #271
2019-06-08 13:43:18 +02:00
kkapsner
c3d4a1901c Improved protection of (i)frame properties
Fixes #364
2019-06-04 08:42:31 +02:00
kkapsner
ef1c45efab Added web-ext linter 2019-05-31 17:28:51 +02:00
kkapsner
4071ebda6f Version 0.5.11 2019-05-31 17:18:16 +02:00
kkapsner
d687bc9756 Confirm messages were broken in Firefox 67
For #271
2019-05-31 01:10:13 +02:00
kkapsner
27999484c2 Server-site navigator protection did not respect whitelisting
Should fix #362
2019-05-30 12:43:47 +02:00
kkapsner
579b778062 MutationObserver failed in some instances
Fixes #354
2019-05-29 20:48:56 +02:00
kkapsner
46ba7c666b Added bitcoin cash address 2019-05-29 20:17:18 +02:00
kkapsner
34f8050fb7 Adjusted protection for document.write and document.writeln
Fixes #356
2019-05-29 14:22:52 +02:00
kkapsner
1e8553dd01 Back to version 0.5.10 2019-05-29 14:19:53 +02:00
kkapsner
621106ffbf Persistent rng is no longer shared between containers
(different cookieStoreId)

Fixes #350
2019-05-29 00:37:33 +02:00
kkapsner
97e08d874a Not connected iframe threw error with persistent rng 2019-05-29 00:26:35 +02:00
kkapsner
308592e785 Protection for document.write and document.wirteln broke in Firefox 69
Fixes #357
2019-05-29 00:20:27 +02:00
kkapsner
b7d888dee1 Added date and time to the settings export file
Fixes #352
2019-05-28 23:59:43 +02:00
kkapsner
036c7cdbd0 innerHTML setter broke pages -> 0.5.9.1 2019-05-28 23:34:27 +02:00
kkapsner
ec3b7a9a26 Added link to ghacksuserjs test site collection 2019-05-26 19:44:29 +02:00
kkapsner
ba0bc7459a Changed min version to 57 2019-05-26 19:40:58 +02:00
kkapsner
bcadf8faf2 Version 0.5.10 2019-05-26 19:39:17 +02:00
kkapsner
224cf4d645 Typo 2019-05-25 19:14:45 +02:00
kkapsner
09fba790e1 Added better description for iFrame test
For #321
2019-05-25 12:35:09 +02:00
kkapsner
b4dbd71d11 SOP detection did not work all the time
Fixes #351
2019-05-24 21:46:34 +02:00
kkapsner
be2f4d8904
Merge pull request #347 from micrococo/master
Spanish translation update
2019-05-24 18:52:52 +02:00
kkapsner
fb0ff7ac02 Add iFrame test. 2019-05-24 18:31:11 +02:00
kkapsner
c8c311a82f Protect reopened documents. 2019-05-24 18:30:57 +02:00
kkapsner
b6e5384945 Linting 2019-05-24 18:29:45 +02:00
kkapsner
f72f8f67ae Test audio protection with iframe 2019-05-22 23:55:57 +02:00
kkapsner
67fa723a32 Added new iframe tests 2019-05-22 23:46:56 +02:00
kkapsner
ac9f1282fd Added new performance tests 2019-05-22 23:43:26 +02:00
kkapsner
5785c3c2a0 Added test with iFrame
For #321
2019-05-22 23:39:56 +02:00
kkapsner
2da680bfcb Improved iFrame protection 2019-05-22 23:37:23 +02:00
kkapsner
92ff2ff5d4 Audio cache could break readout 2019-05-22 10:06:11 +02:00
kkapsner
32fab79e09 Simplified the "display hidden settings" UI
Fixes #314
2019-05-20 08:55:19 +02:00
kkapsner
e0dda5ec0f Detection over navigator and DOMRect getters was possible 2019-05-20 08:45:31 +02:00
micrococo
335310b330
Update messages.json 2019-05-17 11:20:13 +00:00
micrococo
15f9b9964e
Update description.txt 2019-05-17 11:19:35 +00:00
kkapsner
79a9034051 Preventing double interception 2019-05-17 00:36:34 +02:00
kkapsner
95bb415f86 Made performance test manual an cumulative. 2019-05-15 00:44:36 +02:00
kkapsner
4dc3418769 Text refinements 2019-05-12 23:42:58 +02:00
kkapsner
cb39d59c8f Added warning about browser faking in navigator
As discussed in #321
2019-05-12 00:55:31 +02:00
kkapsner
9fd454eb03 DOMRect test: made performance measurement cumulative 2019-05-11 20:53:32 +02:00
kkapsner
587bd5bca8 DOMRect: further performance improvements
Total improvement compared to 0.5.8: 7.2 (For #253)
2019-05-11 13:16:45 +02:00
kkapsner
82ba61095a fake- and getterGenerator: added original and window in call
Might enable a performance increase.
2019-05-10 08:28:28 +02:00
kkapsner
103397e35d Minor performance improvements 2019-05-10 01:11:31 +02:00
kkapsner
a89bf0aba8 Remove all "var" from intercept.js 2019-05-10 00:45:50 +02:00
kkapsner
2222ba65c8 Only set random supply when it changes 2019-05-10 00:38:38 +02:00
kkapsner
983423dafa Improved general performance when stack list is disabled 2019-05-10 00:29:53 +02:00
kkapsner
88537c7516 Fixed broken setter on DOMRect 2019-05-09 23:11:15 +02:00
kkapsner
c1e92dcceb Added more information to DOMRect performance test 2019-05-09 23:10:22 +02:00
kkapsner
e441a3f668 Fine tuning of the urlValue collapser 2019-05-08 13:47:23 +02:00
kkapsner
2c291322cf Further improved DOMRect performance
Additional factor 2.6 = total factor 4.7 (For #253).
2019-05-04 13:44:02 +02:00
kkapsner
89124235c0 Improved DOMRect performance
Factor 1.8 (For #253).
2019-05-04 12:39:31 +02:00
kkapsner
97c50e8761 Added performance test for DOMRect
For #253
2019-05-04 12:37:19 +02:00
kkapsner
9891c1d9b8 Fixed collision with "arrow" in select. 2019-05-04 01:17:46 +02:00
kkapsner
4e276edb22 Merge branch 'WhitelistAPISpecific' 2019-05-04 01:14:04 +02:00
kkapsner
b27cf7087b Added whitelist inspection
Fixes #331
2019-05-04 01:12:45 +02:00
kkapsner
6ffd537a58 Unified action pages and fixed display issues
For #341
2019-05-03 23:17:35 +02:00
kkapsner
783743b777 Merge from master 2019-05-03 00:53:21 +02:00
kkapsner
c870fb6720 Fixed broken styled buttons 2019-05-03 00:52:31 +02:00
kkapsner
ed5a1b03cd Merge branch 'master' into WhitelistAPISpecific 2019-05-03 00:46:08 +02:00
kkapsner
bfc6ca06da Added spelling exceptions 2019-05-03 00:45:35 +02:00
kkapsner
8b7c841225 Added version note for automatic theme
Relates to #341
2019-05-03 00:45:01 +02:00
kkapsner
54e3f8d3f4 Improved theme system and appearance
Fixes #181 and #341
2019-05-02 23:46:20 +02:00
kkapsner
6301b744d2 Added centralized theme system and themed all pages 2019-05-02 00:30:30 +02:00
kkapsner
c2a817478e Merge branch 'master' into themes 2019-05-01 23:19:46 +02:00
kkapsner
51445b36e0 Added whitelist scope question 2019-04-30 23:42:21 +02:00
kkapsner
cd8c7bd71c Removed last residue of browser.runtime.sendMessage 2019-04-30 23:40:30 +02:00
kkapsner
403885f426 Don't break if browser API is not available 2019-04-30 23:39:40 +02:00
kkapsner
33b30e158f Fixed typo
Thanks to joaonsg
2019-04-30 23:37:41 +02:00
kkapsner
650f325702 Theme in options page 2019-04-30 23:29:38 +02:00
kkapsner
31bc324019 Added option to protect no part of the canvas API 2019-04-27 22:37:25 +02:00
kkapsner
8e628f9d13 Made history length threshold url specific 2019-04-27 22:26:23 +02:00
kkapsner
56b830c5a9 Changed input of lists to textarea
Fixes #340
2019-04-25 23:39:52 +02:00
kkapsner
23509ea827 Change "showNotifications" title
Fixes #336
2019-04-21 22:10:06 +02:00
kkapsner
4b680a741a Fixed typo 2019-04-19 21:12:54 +02:00
kkapsner
9778443764 Fixed description for "show notifications"
Fixes #336
2019-04-19 14:38:54 +02:00
kkapsner
505fb6409e Run setting migration only in background script 2019-04-19 14:09:56 +02:00
kkapsner
b7a8a51a56 Made data URL protection url specific
Fixes #333
2019-04-19 13:58:04 +02:00
kkapsner
59f8e38722 enabled copying from settings description when they are "hidden"
Fixes #334
2019-04-10 08:38:35 +02:00
kkapsner
eb8906ea3b data-URL test requires proper mime type in current Firefox 2019-04-10 01:04:40 +02:00
kkapsner
bab7d1496f Moved i18n to extension module 2019-04-09 08:29:52 +02:00
kkapsner
d89bfe4cb0 Minibug in require 2019-04-08 23:56:25 +02:00
kkapsner
7f048b80d7 Removed ".js" from require paths 2019-04-08 00:06:25 +02:00
kkapsner
12137402de Fixed relative require paths 2019-04-08 00:02:29 +02:00
kkapsner
9f3da67cf2 Removed proprietary require event system 2019-04-07 23:22:56 +02:00
kkapsner
b7a6f81ef0 Fixed italian translation json 2019-04-07 23:18:26 +02:00
kkapsner
f8f35890a1 Removed remaining sdk shortcut module 2019-04-07 23:09:02 +02:00
kkapsner
ef4e238b94 Faking audio did not work with white random generator 2019-04-05 16:26:22 +02:00
kkapsner
13ff8bda9b Added thank to unbranched 2019-04-04 19:49:02 +02:00
kkapsner
f66abb30eb
Merge pull request #328 from unbranched/patch-1
Italian update
2019-04-02 20:32:22 +02:00
unbranched
cb54b9b53b
Italian update
Updated translation at least on most visible strings
2019-04-02 12:57:02 +02:00
kkapsner
ca12cdc933
Merge pull request #325 from powerman/patch-1
locale(ru): fix typo
2019-03-17 17:35:37 +01:00
Alex Efros
dd17a783e1
locale(ru): fix typo 2019-03-17 08:43:09 +02:00
kkapsner
786295d920 Improved DOMRect test page. 2019-03-16 00:52:28 +01:00
kkapsner
137c1688ba Reduced direct dependency on browser.xxx APIs 2019-03-14 16:51:20 +01:00
kkapsner
a9edf45aa8 Added standard deviation to performance test 2019-03-13 08:08:54 +01:00
kkapsner
91c3c34412 Moved canvas api to separate file 2019-03-13 08:08:36 +01:00
kkapsner
816c7eddef Linting 2019-03-12 22:30:37 +01:00
kkapsner
574efa23e7 Cleanup require system 2019-03-12 22:24:23 +01:00
kkapsner
11b8ddfcc8 Update release notes 2019-03-11 23:02:23 +01:00
kkapsner
f565b8c32e Enabled import of older storage versions. 2019-03-11 22:10:34 +01:00
kkapsner
5f74f13de3
Merge pull request #323 from micrococo/master
Spanish translation update
2019-03-02 21:13:49 +01:00
micrococo
351d15b588
Spanish translation update 2019-03-02 18:38:08 +00:00
micrococo
5ad1ad9319
Spanish translation update 2019-03-02 18:37:35 +00:00
kkapsner
6c0f4e8cb1 Grammar 2019-02-28 00:53:10 +01:00
kkapsner
914b76c0e8 Do not show hidden settings in search.
Fixes #322
2019-02-28 00:16:21 +01:00
kkapsner
e56df7160f Added navigator protection 2019-02-27 23:49:00 +01:00
kkapsner
479ee74903 Added hyphens to German *** API sections. 2019-02-27 23:40:41 +01:00
kkapsner
45bb6094d0 Added missing text for urlspecific canvas part. 2019-02-27 23:13:55 +01:00
kkapsner
ba0f25badc Added translation to options page title. 2019-02-27 23:11:18 +01:00
kkapsner
7bf1b2e595 Fix require.register 2019-02-26 15:59:44 +01:00
kkapsner
4e11487d81 Added icon to test pages 2019-02-20 08:13:37 +01:00
kkapsner
1fedc4f432 Display errors in audio test 2019-02-10 13:00:18 +01:00
kkapsner
6028479649 Added task to run beta 2019-02-10 12:59:00 +01:00
kkapsner
60559af7ea Version 0.5.9 2019-02-10 12:58:00 +01:00
kkapsner
91b814ce7e Improved audio API protection
reduced detection
more consistent faking
2019-02-10 02:55:45 +01:00
kkapsner
ee02c8b999 Improved audio API test 2019-02-10 02:50:21 +01:00
kkapsner
ea30fb3370 Fixed md5 and sha256 hashing
Fixes #315.
2019-02-10 02:49:58 +01:00
kkapsner
e47f726abb Added cache for getChannelData
Fixes #310
2019-02-07 20:12:12 +01:00
kkapsner
53cdf8347e after reset the hidden settings and expanded views were not reset
Fixes #314
2019-02-07 00:44:16 +01:00
kkapsner
3133abf4f7 Version 0.5.8 2019-02-04 19:04:41 +01:00
kkapsner
1bb5013a39 Protection for history.length did not work
Fixes #309
2019-02-04 13:40:44 +01:00
kkapsner
eb83002917 Added note to not double protect APIs
For #253
2019-02-02 12:25:46 +01:00
kkapsner
a268ccd6da Reset settings for everybody
Fixes #307
2019-01-29 20:03:27 +01:00
kkapsner
cf638333fd Version 0.5.7 2019-01-26 21:19:08 +01:00
kkapsner
f38e55b538 Linting 2019-01-24 15:43:20 +01:00
kkapsner
1dc9b50242 Grammar 2019-01-20 17:41:54 +01:00
kkapsner
a97737e129 Updated release notes. 2019-01-19 00:31:20 +01:00
kkapsner
2990c36ea9 Added description on how the notifications work.
Fixes #304
2019-01-18 16:35:21 +01:00
kkapsner
b4b6fcdd13 Fix optional parameter
Fixes #302
2018-12-30 22:22:10 +01:00
kkapsner
7a838b2e79 Added monero address
Fixes #298.
2018-12-20 23:53:02 +01:00
kkapsner
43e2f59cba Updated storageVersion to 0.5 2018-11-09 23:38:19 +01:00
kkapsner
e256d042da Typos 2018-10-31 21:03:19 +01:00
kkapsner
8b219a20b4 Grammar 2018-10-31 21:01:27 +01:00
kkapsner
b7e1e0afc0
Merge pull request #294 from micrococo/master
Spanish translation update
2018-10-31 20:59:59 +01:00
micrococo
b6ff85837e
Spanish translation update 2018-10-30 14:19:25 +01:00
micrococo
bf512c0986
Add description's translation into Spanish 2018-10-30 14:18:13 +01:00
kkapsner
947d9e0c59 added "share persistent randomness between domains"
Fixes #290
2018-10-25 13:42:18 +02:00
kkapsner
9dcb1f8903 Typos 2018-10-24 08:27:14 +02:00
kkapsner
6976d80ee7 Show "readout" options also on "everything" 2018-10-23 23:47:21 +02:00
kkapsner
045379c349 constant rng did not work properly when protecting input 2018-10-23 23:39:47 +02:00
kkapsner
8b9197a68a Decoupled block mode from protected part
Fixes #287
2018-10-23 08:26:23 +02:00
kkapsner
5932ac2292 Added thank to STim99 2018-10-16 00:13:19 +02:00
kkapsner
3aed30d3fd
Merge pull request #288 from STim99/master
Add russian transition
2018-10-16 00:12:18 +02:00
kkapsner
7fb86a4da3 made url specific values manageable with "tabing" 2018-10-16 00:11:07 +02:00
kkapsner
0283da372c highlight "hide" icon when "tabing" to it 2018-10-15 20:15:10 +02:00
Tim
770a79bb6f update translate 2018-10-15 18:34:16 +03:00
Tim
b9c2da7e20 translated 2018-10-15 17:42:31 +03:00
kkapsner
16b4bbcab3 url specific values can be added by hitting enter in the input 2018-10-15 08:53:07 +02:00
kkapsner
dae401acf8 Version 0.5.6 2018-10-13 12:50:30 +02:00
kkapsner
2a7bb7ff0e Added task to open git UI 2018-10-13 12:30:49 +02:00
kkapsner
5aee6531c9
Merge pull request #284 from micrococo/master
Spanish translation update
2018-10-12 18:33:55 +02:00
micrococo
da4341e242
Spanish translation update 2018-10-12 11:37:59 +02:00
Tim
fdf7b0fb69 translation start 2018-10-11 13:58:17 +03:00
kkapsner
5d77a6a1be Typos 2018-10-10 00:24:15 +02:00
kkapsner
ce3699a03c Search in browser action did not work every time.
Fixes #268
2018-10-09 20:44:13 +02:00
kkapsner
9ae73d6a3e Added description of how to use the detection test
Fixes #282
2018-10-09 13:11:38 +02:00
kkapsner
23279bad58 Resolution for minColors was wrong. 2018-10-09 13:06:55 +02:00
kkapsner
eff86ce4ed Added search field to browser page popup
Fixes #268
2018-10-09 12:59:53 +02:00
kkapsner
f5699a1bf3 Added setting sanitation
Fixes #254
2018-10-09 08:14:50 +02:00
kkapsner
fa3111a3ea Update release notes 2018-10-02 19:27:03 +02:00
kkapsner
3a7c15157c Protected notification api calls
Firefox on Android does not support all of them.

Fixes #276
2018-10-02 19:23:59 +02:00
kkapsner
d4d0d80721 Linting 2018-10-02 13:27:01 +02:00
kkapsner
f3a6031f5a Handle wrong content script order
For #273
2018-10-02 13:20:40 +02:00
kkapsner
a4d9be9bd5 Adjusted detection test
Firefox nightly failed function code test when CB was not installed.
2018-10-02 13:18:05 +02:00
kkapsner
8d347a376a Removed tests from build. 2018-10-01 09:04:24 +02:00
kkapsner
0f07cde869 Added value cache for DOMRect
Fixes #272
2018-09-29 09:41:43 +02:00
kkapsner
ab344294d7
Merge pull request #274 from micrococo/master
Spanish translation update
2018-09-26 21:35:15 +02:00
micrococo
4bac2aa0f5
Spanish translation update 2018-09-26 12:07:26 +02:00
kkapsner
de4d185c0e Version 0.5.5 2018-09-23 13:18:15 +02:00
kkapsner
d52f107f00 Removed unused messages
allowPDFCanvas_description
allowPDFCanvas_title
url_title
url_description
inspectImage
2018-09-23 12:56:16 +02:00
kkapsner
18bbab50a5 Removed unused setting notificationDisplayTime 2018-09-23 12:40:05 +02:00
kkapsner
5ca27505eb Messages were not passed to tabs. 2018-09-23 12:33:23 +02:00
kkapsner
2f4fca10ab Ask mode did not show canvas canvas any more. 2018-09-21 16:42:58 +02:00
kkapsner
95605ef746 Search did not include button labels
For #242
2018-09-21 16:40:24 +02:00
kkapsner
ccc36a2154 Initilaize storage with correct version. 2018-09-21 16:32:47 +02:00
kkapsner
ecc55ad13f Unknown classes might break CB
Fixes #267
2018-09-20 22:46:45 +02:00
kkapsner
70b8d50c56 Options page fine tuning 2018-09-19 23:56:34 +02:00
kkapsner
5513bcbb61 Search refinement and bugfixing
Fixes #242
2018-09-19 09:15:19 +02:00
kkapsner
2271477376 fakeUint8Array called forEachIndex with wrong parameters.
Fixes #266
2018-09-18 21:52:15 +02:00
kkapsner
e3861e67b4 Create search in options page
Fixes #242
2018-09-18 13:14:39 +02:00
kkapsner
feff447409 Typos 2018-09-18 00:43:45 +02:00
kkapsner
a1202f9a6e Made audio cache url specific
Fixes #261
2018-09-18 00:03:42 +02:00
kkapsner
41746eebdd
Merge pull request #259 from spodermenpls/master
Locale overhaul #2
2018-09-17 00:55:39 +02:00
spodermenpls
855e951fe4
Update messages.json 2018-09-16 23:01:59 +02:00
spodermenpls
19510ec13f
Update messages.json 2018-09-16 22:53:44 +02:00
spodermenpls
2e8ffcdfa7
Update messages.json 2018-09-16 22:48:06 +02:00
kkapsner
f8de9b9539 Merge branch 'whitelistedIndicator'
Fixes #241
2018-09-16 14:08:00 +02:00
kkapsner
55af2c3dc4 Moved url container initialization
Fixes #166
2018-09-16 12:27:50 +02:00
kkapsner
e4c2196131 Send only necessary notifications to main process
For #238
2018-09-16 12:15:04 +02:00
kkapsner
db79c0129b Audio API notifies on every call 2018-09-16 12:09:48 +02:00
kkapsner
ee7f9b4dae Separated setting containers
For #166
2018-09-16 01:22:40 +02:00
kkapsner
57ef8a4166 Simplified relation logging <-> settings
For #166
2018-09-15 21:13:25 +02:00
kkapsner
9d5e8b71ed Separated settings migration
For #166
2018-09-14 16:29:30 +02:00
kkapsner
caa8db93c7 Added note on where to find the logging
Fixes #248
2018-09-13 23:35:21 +02:00
kkapsner
d63e74edf9
Merge pull request #257 from spodermenpls/master
Locale overhaul
2018-09-13 23:07:14 +02:00
kkapsner
e67c168d47 Added thank for the Spanish translation 2018-09-13 23:02:17 +02:00
kkapsner
e097395f2e
Merge pull request #250 from micrococo/master
Add Spanish translation
2018-09-13 23:00:06 +02:00
kkapsner
456c21cb04 Ignore port connection without tab
Fixes #255
2018-09-13 22:50:10 +02:00
kkapsner
b0e1e69ec9 Do not pass messages to internal tabs
E.g. about:addons
Otherwise this causes an error.
2018-09-13 18:40:18 +02:00
spodermenpls
cd670b8db7
Update messages.json 2018-09-13 17:52:28 +02:00
spodermenpls
81b90f41fb
Update messages.json 2018-09-13 17:43:14 +02:00
spodermenpls
2bf7203d90
Update messages.json 2018-09-13 17:26:09 +02:00
spodermenpls
e4e9622b0d
Update messages.json 2018-09-13 16:34:02 +02:00
micrococo
0a39be7cc8
Move the translation strings to the right spot 2018-09-13 12:54:44 +02:00
kkapsner
f73a4ee619 Save state of the arrow menu in options page
Fixes #251
2018-09-12 23:43:48 +02:00
kkapsner
040acb311f Added missing translation checker 2018-09-12 22:54:25 +02:00
kkapsner
be337fcd43 Added missing translations 2018-09-12 22:37:45 +02:00
kkapsner
28d6cf0d63 Added instruction von url specific values
Fixes #248
2018-09-12 22:36:14 +02:00
kkapsner
fe1f1ec79a Fixed caching issue
md5 was too slow.

Fixes #236
2018-09-12 22:23:29 +02:00
kkapsner
c798e2b412 Improve options layout 2018-09-12 18:10:31 +02:00
kkapsner
19a9035bed Settings rearrangement
For #251
2018-09-12 09:21:52 +02:00
kkapsner
c16aea3d6e Added translation tool 2018-09-12 00:07:39 +02:00
kkapsner
f05717836d canvas content was not stored to be displayed when wanted 2018-09-11 23:56:44 +02:00
kkapsner
5e5011f208 Added setting to controll to save notification details
Fixes #236
2018-09-11 23:54:59 +02:00
kkapsner
1a066de2fd Put RegExp in quotes 2018-09-09 01:07:00 +02:00
kkapsner
0133af70f5 Add proper DOMRect ask texts.
For #236
2018-09-09 00:16:44 +02:00
kkapsner
1eacfe7dc5 Ignoring DOMRect did not work.
For #236.
2018-09-09 00:15:47 +02:00
kkapsner
4c2fea8a90 Don't store ignored notifications.
For #236
2018-09-09 00:15:21 +02:00
micrococo
c2ca07e339
Add Spanish translation 2018-09-08 11:12:39 +02:00
kkapsner
e147c119ef Only use whitelisted status of tab url
For #241
2018-09-08 00:44:37 +02:00
kkapsner
255c8e6bbf DOMRect did not work because of protectedAPIFeatures 2018-09-08 00:05:56 +02:00
kkapsner
9af7378139 Fix German translation 2018-09-07 23:52:58 +02:00
kkapsner
fa92c15dab Converted apiWhiteList to protectedAPIFeatures
For #247
2018-09-07 23:52:29 +02:00
kkapsner
2138467fd3 Changed urlSettings title
For #245
2018-09-07 14:47:30 +02:00
kkapsner
ca6e5d83e1 Merge branch 'DOMRect'
Fixes #236
2018-09-06 20:24:37 +02:00
kkapsner
eed3e670ce Harmonized ask texts 2018-09-06 20:23:13 +02:00
kkapsner
b36bc34f5c Grammar 2018-09-06 20:17:30 +02:00
kkapsner
639ecb7cf4 Orthographie 2018-09-06 20:16:44 +02:00
kkapsner
6477572f79 Added indicator for whitelisted tab
First draft for #241
2018-09-06 20:13:16 +02:00
kkapsner
d3d137beed Fixed accidental blocking
See #243
2018-09-06 17:30:44 +02:00
kkapsner
bda97dbc38 Merge branch 'master' into DOMRect 2018-09-06 17:27:52 +02:00
kkapsner
aa8b202545 Fixed bug with "block" mode
window and audio API were always blocked when using any of the "block
..." modes

Fixes #243
2018-09-06 17:24:05 +02:00
kkapsner
e0729480fb Fix dataUrls.js 2018-09-06 08:38:22 +02:00
kkapsner
360c4628ce Corrected domain recognition
Domains with hyphens were treates like RegExps.

Fixes #244.
2018-09-06 08:34:08 +02:00
kkapsner
aa91a32b68 Update API whitelist description
For #244
2018-09-06 08:33:08 +02:00
kkapsner
fb31545604 Removed debugging statement 2018-09-05 17:02:36 +02:00
kkapsner
f8dc7ff05b DOMRect: added test for range functions 2018-09-05 16:56:34 +02:00
kkapsner
a01ccf458f Corrected type and api on DOMRect changed functions 2018-09-05 16:47:32 +02:00
kkapsner
b2b66b8960 Updated documentation. 2018-09-05 16:42:57 +02:00
kkapsner
6a6a123c3b Added german DOMRect translation. 2018-09-05 16:42:25 +02:00
kkapsner
df1d59cf52 Added support for pixel fractions
Pixel fractions can be controlled by CSS. These fractions must not be
faked.

For #236.
2018-09-05 15:53:01 +02:00
kkapsner
1d5953e8c7 Added protection from undefined properties.
DOMRect has some new properties that are only in nightly at the moment.
2018-09-05 15:50:59 +02:00
kkapsner
350fdd3278 Added DOMRect detection tests. 2018-09-05 15:48:16 +02:00
kkapsner
c83b1f8a3b Added test for DOMRect 2018-09-05 08:21:22 +02:00
kkapsner
f00c3b674e First DOMRect draft
For #236
2018-09-04 23:29:58 +02:00
kkapsner
9d7c801c2b Added save/load directly to/from file option
Fixes #240.
2018-09-02 13:34:20 +02:00
kkapsner
f0f13f17a3 Version 0.5.4 2018-09-02 12:36:27 +02:00
kkapsner
260746f944 Fixed bug in reCAPTCHA-confirmation.
Fixes #231.
2018-08-31 19:37:57 +02:00
kkapsner
6ca0239c53 Added user prompt for reCAPTCHA when activating window protection
Fixes #231.
2018-08-31 16:41:36 +02:00
kkapsner
bde8ac3e8e Only use onHeadersReceived listener when necessary
As mentioned in #214
2018-08-28 21:09:03 +02:00
kkapsner
d020c55e11 Added space in browser action title
As mentioned in #225.
2018-08-28 08:29:57 +02:00
kkapsner
84bd36197b Added theme to page action popup
Fixes #232.
2018-08-28 08:29:01 +02:00
kkapsner
40677bd2c6 Only display 250 notifications for one type
More will be counted but not rendered.

Fixes #234.
2018-08-27 22:09:51 +02:00
kkapsner
9a7d3d4230 Grammatical typos. 2018-08-27 19:51:19 +02:00
kkapsner
83efac5e49 Added protection for window.name and window.opener
As requested by #231.

But this protection is disabled by default.
2018-08-27 00:33:39 +02:00
kkapsner
fd7c4fabbd Added protection for history.length
As requested by #231.
2018-08-27 00:30:48 +02:00
kkapsner
4c7b83aca6 Added support to fake getters. 2018-08-27 00:23:19 +02:00
kkapsner
103c69d4b8 Spell checking. 2018-08-26 23:13:23 +02:00
kkapsner
da14aaff51 Added option to ignore APIs
As mentioned in #233
2018-08-24 19:39:34 +02:00
kkapsner
5ced858173 Fixed display dependencies for ignoreList 2018-08-24 16:36:07 +02:00
kkapsner
391deae6f1 Improved browser action title
As mentioned in #233.
2018-08-22 22:37:06 +02:00
kkapsner
0d1738d328 Announcement: drop active support for Firefox < 60
You will be able to install it on Firefox >= 52 but I will not test it
and will not provide a separate release version for it.
2018-08-22 22:21:52 +02:00
kkapsner
4a043b2c78 Typos and linting 2018-08-22 22:16:49 +02:00
kkapsner
f873bd84e5 protectAudio should be url specific 2018-08-22 14:41:48 +02:00
kkapsner
f8287293a2 Fixed default theme
For #232.
2018-08-21 23:25:57 +02:00
kkapsner
bfb959c290 Added badge
First draft for #233.
2018-08-21 22:43:41 +02:00
kkapsner
c0563cd7d5 Theme settings
For #232
2018-08-21 22:03:16 +02:00
kkapsner
b9cd07910b Updare README 2018-08-21 22:01:31 +02:00
kkapsner
9d231c7b02 CSP cleanup
Should help with #223.
2018-08-21 22:01:10 +02:00
kkapsner
1cb5f6efa9 Added theme for browser action popup
First draft for #232.
2018-08-21 21:53:13 +02:00
kkapsner
454873b6df Render notifications in junks
Fixes #234.
2018-08-21 21:37:21 +02:00
kkapsner
43b43d858e
Merge pull request #228 from yfdyh000/zh_CN
Add zh_CN locale
2018-08-20 22:27:19 +02:00
kkapsner
c25e95f845 Added highlighting options for notification icons
Fixes #225.
2018-08-20 21:48:05 +02:00
kkapsner
15feed6445 Release note update 2018-08-19 23:35:42 +02:00
kkapsner
fe013c9058 Fixed display conditions for notification settings 2018-08-19 23:34:50 +02:00
kkapsner
212cce2ed3 Set text color for popups
Fixes #226.
2018-08-19 23:25:19 +02:00
kkapsner
0d5c9beeb3 Fix vertical position of "don't..."-checkbox. 2018-08-19 00:23:02 +02:00
kkapsner
cedd2137e2 Added option "Don't show again on update." for options page.
Fixes #227.
2018-08-19 00:13:43 +02:00
kkapsner
34019f2515 Added link to standalone options page.
As mentioned in #221.
2018-08-18 22:41:34 +02:00
kkapsner
635912c8b9 Fixed options standalone detection. 2018-08-18 22:35:52 +02:00
kkapsner
dfc613db04 Added version display to options page.
As suggested in #221.
2018-08-18 21:50:04 +02:00
YFdyh000
9418496c13 Add zh_CN locale 2018-08-07 04:57:39 +08:00
kkapsner
bf868eb6ae Missing semicolon in CSP
Fixed #224.
2018-08-02 20:56:01 +02:00
kkapsner
d71f427598 Use non language specific review url
Fixes #219.
2018-07-31 20:40:13 +02:00
kkapsner
2ade097dd9 Version 0.5.3 2018-07-31 20:38:21 +02:00
kkapsner
d7b773a951 Updated release notes for release. 2018-07-31 15:39:53 +02:00
kkapsner
c2c916dd92 Added "review" in browser action popup 2018-07-31 14:17:39 +02:00
kkapsner
05a3429dbe Change browser action icon depending on fake status.
As mentioned in #217
2018-07-31 13:36:34 +02:00
kkapsner
4a6c5192f8 Added browser toolbar icon
Fixes #217
2018-07-29 21:43:40 +02:00
kkapsner
9b18631768 separate persistent random numbers for incognito windows 2018-07-28 14:13:14 +02:00
kkapsner
7f1fe0ed1c Intercepting broken on getter.
Issue mentioned in #215
2018-07-28 13:44:21 +02:00
kkapsner
b91d2f17b1 Typo 2018-07-25 08:38:09 +02:00
kkapsner
9a26baf5c1 Block blob in Firefox ESR (52) 2018-07-24 23:30:00 +02:00
kkapsner
942d74ce54 Optimized CSP 2018-07-24 21:30:57 +02:00
kkapsner
ab114f419c Fixed syntax errors in fr translation. 2018-07-24 14:54:47 +02:00
kkapsner
fb25077f12 Added French translation
Thanks to Maleficient.
2018-07-23 23:53:36 +02:00
kkapsner
c037038da6 Applying code style rules. 2018-07-21 19:35:24 +02:00
kkapsner
7bfd300f6a Inject CSP only in the relevant requests.
Prevents detection of CB.
2018-07-21 19:34:24 +02:00
kkapsner
92da6fc809 Typo 2018-07-21 14:30:13 +02:00
kkapsner
495e461cee Version 0.5.2 2018-07-21 13:54:01 +02:00
kkapsner
7cbc00f3b9 Updated release notes for release. 2018-07-21 13:28:22 +02:00
kkapsner
8389165b70 Allow blob and filesystem schemes
They are protected and do not need to be blocked (like data-URLs).

Fixes #212 and fixes #213.
2018-07-21 13:25:15 +02:00
kkapsner
eb1a441625 Aded blob scheme test.
To reprooduce #212 and #213.
2018-07-21 13:20:45 +02:00
kkapsner
698ead8097 Updated release notes for release submission. 2018-07-21 00:33:14 +02:00
kkapsner
9ba9c48422 Block data URLs instead of their requests
Fixes #211
2018-07-21 00:32:15 +02:00
kkapsner
0ce446cf52 Improved dataUrlTest
Makes #211 reproducible.
2018-07-21 00:17:00 +02:00
kkapsner
5077c86859 Added session white list
Fixes #197
2018-07-17 13:07:50 +02:00
kkapsner
6c2dbbebf0 Close page action after changes are written to storage.
Fixes #209.
2018-07-17 12:58:52 +02:00
kkapsner
9753681651 Return storage promise from settings.set(). 2018-07-17 12:54:10 +02:00
kkapsner
1f5f5bccc4 Remove all traces of the addon in the displayed calling stack. 2018-07-17 12:50:40 +02:00
kkapsner
bb4f43ec6d Version 0.5.1 2018-07-16 09:14:01 +02:00
kkapsner
32175f2045 Typo 2018-07-16 09:13:25 +02:00
kkapsner
b6a80c0b69 Typos 2018-07-16 09:11:55 +02:00
kkapsner
95c826ad8d Fixed release notes. 2018-07-16 00:59:06 +02:00
kkapsner
2756b0b165 Added release notes for 0.5.0a and 0.5.0b 2018-07-16 00:38:23 +02:00
kkapsner
a2847d9f6a Added list of protected APIs to the addon description. 2018-07-16 00:28:02 +02:00
kkapsner
388736d169 Refined detection test. 2018-07-16 00:21:56 +02:00
kkapsner
63eedcbdb4 Display API white list in all block modes. 2018-07-16 00:15:49 +02:00
kkapsner
47a9519ceb "Protect" data URL pages by blocking outgoing requests
Fixes #208
2018-07-16 00:14:44 +02:00
kkapsner
8ca23e37e1 Added test for data URL pages
For #208.
2018-07-16 00:05:33 +02:00
kkapsner
95f8faed6f Content scripts should match about:blank
As mentioned in https://bugzilla.mozilla.org/show_bug.cgi?id=1475831 it
should protect data URL pages (see #208) - but it doesn't...

Reopens #165
2018-07-16 00:01:25 +02:00
kkapsner
14ada6a7b0 Test getImageData first.
Shows if getImageData is actually protected.
2018-07-15 23:58:52 +02:00
kkapsner
8db0774d7c Added note where the dynamic content script fails. 2018-07-15 22:39:03 +02:00
kkapsner
a65855a587 Show page action when blocking
Fixes #207
2018-07-13 16:59:49 +02:00
kkapsner
26529a3653 Hide function replacement
Fixes #206
2018-07-13 16:58:13 +02:00
kkapsner
9711c67c3f Name spelling. 2018-07-12 20:55:47 +02:00
kkapsner
6dc08534a6 Improved logging on settings storage. 2018-07-12 01:18:49 +02:00
kkapsner
88b5e7668f Added image-data hash. 2018-07-12 00:42:34 +02:00
kkapsner
96118e5690 Refined property descriptor detection test. 2018-07-11 17:38:01 +02:00
kkapsner
6d1c051323 Added a sentence that "block everything" may break web sites. 2018-07-09 23:06:43 +02:00
kkapsner
b776c256a6 Added meta information detection tests. 2018-07-09 18:49:16 +02:00
kkapsner
07c5585f5a Added 10% and 100% fake rates for audio 2018-07-04 23:59:27 +02:00
kkapsner
720a9bc9a5 Added feature to hide settings. 2018-07-02 00:29:41 +02:00
kkapsner
22fda1eac7 Changed the way the random indices are chosen
Only the offset is random. The indices are then spaced evenly.
2018-06-30 23:34:59 +02:00
kkapsner
b4a8507140 Added test for audio faking 2018-06-30 23:15:47 +02:00
kkapsner
d580c35898 Added hashCode 2018-06-30 23:06:20 +02:00
kkapsner
8472e877a4 Corrected md5 hashing 2018-06-30 23:02:31 +02:00
kkapsner
9f38703e84 Added prepareOnce to performance test. 2018-06-30 15:16:10 +02:00
kkapsner
4d71d6bc02 Added audio cache. 2018-06-30 00:34:20 +02:00
kkapsner
f7a0990a29 Also fake array entries that contain zero. 2018-06-29 23:27:20 +02:00
kkapsner
df5109bbf6 Refined audio faking procedure. 2018-06-21 00:20:41 +02:00
kkapsner
c13a6f88b3 Added fixed indices setting. 2018-06-21 00:19:49 +02:00
kkapsner
a41eba1dff Notification should show up for every function. 2018-06-21 00:19:12 +02:00
kkapsner
dd1173841b Corrected display dependencies 2018-06-21 00:17:52 +02:00
kkapsner
21992121b9 Audio faking broke when using "storeImageForInspection". 2018-06-21 00:14:20 +02:00
kkapsner
0f44820e3d Used api property to display correct text in ask mode. 2018-06-21 00:13:32 +02:00
kkapsner
1abc681e3f Added api property to changedFunctions. 2018-06-21 00:09:07 +02:00
kkapsner
e9fbb7259e Added grouping for keys in object setting. 2018-06-21 00:07:29 +02:00
kkapsner
4f18dc3ab6 Computed default value
Default values for settings can now be functions to be computed.
2018-06-21 00:03:17 +02:00
kkapsner
c5882a30aa Linted tasks.json 2018-06-20 23:35:20 +02:00
kkapsner
4ce327c68f Display new lines in hidden description mode 2018-06-16 00:25:14 +02:00
kkapsner
0f0f526fd5 Added protection for audio API 2018-06-16 00:22:31 +02:00
kkapsner
032bc2e424 Modified randomSuppies API
getRng now returns a 32 bit random Number
getIndexRng returns a random index in a range
getBitRng returns a random bit
getValueRng is the old getRng which alters the provided value
2018-06-16 00:09:06 +02:00
kkapsner
e079e1c0a3 Added donation address
Fixes #194
2018-06-05 08:30:19 +02:00
kkapsner
940e80b380
Merge pull request #192 from GuyXY/master
Fixed typo
2018-05-27 09:23:27 +01:00
GuyXY
3bcbbd9827
Fixed typo 2018-05-27 05:52:56 +02:00
kkapsner
23583c9a1c Added missing german translation. 2018-05-27 00:12:49 +02:00
kkapsner
e9d0fa5318 Added thank to anthologist 2018-05-27 00:10:06 +02:00
kkapsner
d27473f383 Reinserted Version 0.4.6 2018-05-26 21:51:42 +02:00
kkapsner
15c9197d02 Version 0.4.5c 2018-05-26 15:44:02 +02:00
kkapsner
52e44e0eb2 respect RFP setting in isPointInPath and isPointInStroke
Fixes #189
2018-05-26 15:36:55 +02:00
kkapsner
f02246128e Added setting to whitelist parts of the canvas API 2018-05-26 15:33:39 +02:00
kkapsner
9d0cd04fc3 Version 0.4.6 2018-05-02 23:10:47 +02:00
kkapsner
43de1ba191 Added release notes for 0.4.5a and 0.4.5b 2018-04-27 09:07:15 +02:00
kkapsner
4084c8e1b6 Updated release notes. 2018-04-24 13:34:16 +02:00
kkapsner
a7e472f298 added isPointInPath and isPointInStroke to the readout-API list 2018-04-01 22:47:57 +02:00
kkapsner
6f8f9a7e9c Split long clear timeout delays.
window.setTimeout can not handle big delays.

Fixes #180
2018-02-16 18:10:18 +01:00
kkapsner
10d9c022e0 Border issue with sections 2018-01-08 17:08:36 +01:00
kkapsner
2b92481004 Show options page on install or update
But only when pageAction is not available (i.e. Fennec)
2018-01-08 17:07:46 +01:00
kkapsner
77e079e5cc Added showCanvasWhileAsking
Fixes #175
2018-01-04 13:36:18 +01:00
kkapsner
ab19ebd2c6 Enable asking in iframes 2018-01-04 13:30:48 +01:00
kkapsner
66336d1b65 prevent possible double faking 2018-01-03 10:59:56 +01:00
kkapsner
575df224ae Global actions display fix 2017-12-24 22:41:06 +01:00
kkapsner
9f2f77dbc1 Secured dynamic content script 2017-12-24 21:54:39 +01:00
kkapsner
2162fdbf7d Added header to standalone options page 2017-12-24 21:53:26 +01:00
kkapsner
6c363c076b Added sections to options list 2017-12-24 21:52:44 +01:00
kkapsner
a85ea32a74 Added button to open options page from pageAction popup 2017-12-23 23:49:05 +01:00
kkapsner
e9fe20d966
Merge pull request #172 from anthologist/master
Create italian messages.json
2017-12-20 17:16:52 +01:00
anthologist
d5c12062dc
Create messages.json 2017-12-20 11:03:00 +00:00
kkapsner
657d929ffa Version 0.4.5 2017-12-20 00:23:55 +01:00
kkapsner
ad4d5b3e8e Version 0.4.4b 2017-12-20 00:08:29 +01:00
kkapsner
63e558308b Updated gitignore 2017-12-19 23:56:07 +01:00
kkapsner
c51126483c Updated release notes. 2017-12-19 23:15:31 +01:00
kkapsner
19a7a32e0f Do not struggle on unknown settings.
Fixes #169
Fixes #168
Fixes #164
Fixes #170
2017-12-19 23:04:03 +01:00
kkapsner
4348c71b55 Removed trailing spaces in migration URL 2017-12-19 23:00:35 +01:00
kkapsner
30a3f9ea83 Added [CanvasBlocker] to logging 2017-12-19 22:59:30 +01:00
kkapsner
596a7ca33b Switch to using beta channel 2017-12-19 00:28:42 +01:00
kkapsner
18ceb998e0 Secured logging color picking 2017-12-18 23:57:25 +01:00
kkapsner
04d3777e6f Version 0.4.3d... 2017-12-18 23:55:58 +01:00
kkapsner
41a8112920 Added better logging to pre intercepting 2017-12-18 23:55:13 +01:00
kkapsner
3d05b48089 Added colors to the logging 2017-12-18 23:47:24 +01:00
kkapsner
96b5291459 Added logging to dynamic content script. 2017-12-18 23:19:28 +01:00
kkapsner
140349b401 Added timing to settings loading test 2017-12-18 23:17:55 +01:00
kkapsner
1c64c5e06e Re-added white, black and ignore list
but only in expert mode.
2017-12-18 23:17:18 +01:00
kkapsner
01574a62f0 Improved issue template 2017-12-17 12:00:09 +01:00
kkapsner
52724d6527 Adjusted issue template to fit editor. 2017-12-16 20:37:24 +01:00
kkapsner
c7cf6732f9 Added ISSUE_TEMPLATE
Thanks to https://www.talater.com/open-source-templates/#/
2017-12-16 20:35:02 +01:00
kkapsner
c01b8283c1 Version 0.4.4 2017-12-16 20:34:03 +01:00
kkapsner
22fd0e8be1 Discarded pre-intercept
It broke pinned tabs and JS in some cases.

Fixes #164.
2017-12-16 19:27:29 +01:00
kkapsner
de5ac1f6d4 Do not insert content script in about:blank
Fixes #165
2017-12-15 20:07:34 +01:00
kkapsner
97ab13e7b4 Updated settings screenshot 2017-12-15 09:12:07 +01:00
kkapsner
3bbbfc4a15 Force settings loading 2017-12-15 01:00:52 +01:00
kkapsner
a5f3e78292 Do not forceLoad depending on Firefox version 2017-12-15 00:48:00 +01:00
kkapsner
3fcc5774c2 Only Firefox < 57 block on pre-intercept 2017-12-13 20:15:50 +01:00
kkapsner
67438d15ff Added test for settings loading 2017-12-13 20:08:53 +01:00
kkapsner
bd48d1f39a Added test for settings loading timing 2017-12-12 21:56:22 +01:00
kkapsner
3e214ed967 Changed pre-intercept to block
... instead of forcing the loading of the settings with a synchonous
XHR.
2017-12-11 20:59:56 +01:00
kkapsner
871199cbc3 do not show notifications when canvas faking was aborted 2017-12-11 12:48:08 +01:00
kkapsner
096db123d7 Added setting for minimal colors
Fixes #162
2017-12-11 12:47:43 +01:00
kkapsner
e128cba84a Hardened detection test. 2017-12-09 20:19:54 +01:00
kkapsner
d787b84b13 Activated settings migration to 0.3 2017-12-08 20:25:08 +01:00
kkapsner
74863d3c98 Switched from prompt() to inputs. 2017-12-08 20:20:42 +01:00
kkapsner
9e27dedb4b Adjusted max fake size recommendation
Fixes #161
2017-12-06 18:57:11 +01:00
kkapsner
94d62f5302 Background script never sends settings 2017-12-04 00:32:19 +01:00
kkapsner
ce7dc1b422 Only force setting loading when necessary
May help for #160.
2017-12-04 00:26:26 +01:00
kkapsner
ba8f35a9a8 Hide lists 2017-12-03 23:58:54 +01:00
kkapsner
01780da9f5 Added URL specific settings
For blockMode and showNotifications.

Fixes #148.
2017-12-03 23:47:49 +01:00
kkapsner
78a0ccc243 Inject content script also in about:blank 2017-11-29 08:45:08 +01:00
kkapsner
64ded9a342 Keepp logging in chronical order 2017-11-29 08:38:52 +01:00
kkapsner
5f5d36de23 Added dynamic settings content script
Not yet fully usable due to missing detection in frame.js
2017-11-27 12:28:01 +01:00
kkapsner
2bc0315c5b Added "white" rng 2017-11-24 17:06:43 +01:00
kkapsner
970de1c093 Created "reset settings" button.
As mentioned in #151
2017-11-22 14:14:33 +01:00
kkapsner
9f242004c9 Changed settings loading URL
Fixes #155
2017-11-20 23:48:28 +01:00
kkapsner
094915a128 Do not blur image of faked canvas. 2017-11-19 18:09:20 +01:00
kkapsner
e4728cbb26 Added missing translation for exportSettings 2017-11-17 09:15:46 +01:00
kkapsner
dd3620cd08 Fixed page action display confusion
Fixes #149
2017-11-14 23:57:44 +01:00
kkapsner
d35ffe0b70 Adjusted addon description 2017-11-14 23:56:30 +01:00
kkapsner
790578e7cd Version 0.4.3 2017-11-14 23:22:03 +01:00
kkapsner
d531abb2de Added export and import for settings 2017-11-14 01:07:27 +01:00
kkapsner
41d9b7073f Wait for settings in the frame script
Fixes #147
2017-11-14 01:04:20 +01:00
kkapsner
b3bb10d334 Cleaned up options page 2017-11-11 23:34:59 +01:00
kkapsner
a465303fff askOnly once extended
API-types can now be combined in "askOnlyOnce".
Needed new storage version -> added settings migration
2017-11-10 23:45:09 +01:00
kkapsner
f75189f374 Added ask deny mode
Fixes #142 and some minor bugs.
2017-11-09 00:53:52 +01:00
kkapsner
e539a893b4 Removed updateContentScripts
It does not to seem necessary any more.
2017-11-08 17:47:09 +01:00
kkapsner
3cb1974b18 Added clear interval
Also ensures that the persistent data is loaded correctly in ESR.

Fixes #139 and #143
2017-11-08 17:46:41 +01:00
kkapsner
ec1c5ae7d8 Minor cleanups 2017-11-07 19:51:49 +01:00
kkapsner
e8536f3104 Added vscode task for run in ESR 2017-11-07 19:51:25 +01:00
kkapsner
f2307ca13a Correcting minimal version.
Fixes #143
2017-11-07 19:49:09 +01:00
kkapsner
2193313980 Centralized settings management 2017-11-07 00:36:44 +01:00
kkapsner
18df3f97fe Merge branch 'settingsAPI' 2017-10-14 12:48:07 +02:00
kkapsner
ae0763cfe6 Improved design of the page action display. 2017-10-14 12:24:53 +02:00
kkapsner
03bf34d092 getImageData does not need to be faked in input mode when facing a non 2d context.
Fixes #137
2017-10-12 00:25:12 +02:00
kkapsner
0204d92fb4 Added release notes for hotfix 0.4.0.2. 2017-10-10 21:48:52 +02:00
kkapsner
e686b14106 Improved window intercepting. 2017-10-10 21:11:50 +02:00
kkapsner
68fb7730b9 Secured getWrapped from weird errors (Unexpected object).
Fixes #133
2017-10-10 21:11:05 +02:00
kkapsner
c5872ef5a1 Fixed broken webGl faking.
Fixes #136
2017-10-10 21:09:26 +02:00
kkapsner
db3b8fdd69 Extended standard test to capture additional iframe scenarios. 2017-10-10 20:33:42 +02:00
kkapsner
f28d635e64 Better webGL test (also covers webgl2). 2017-10-10 20:13:40 +02:00
kkapsner
932ec56079 Got rid of innerHTML - part 1. 2017-10-10 13:38:55 +02:00
kkapsner
4108d1a0e8 Added release notes for hotfix 0.4.0.1. 2017-10-07 23:55:02 +02:00
kkapsner
eb62521adc Trying to get wrappedJSObject of an wrappedJSObject is wrong...
Fixes #133 and #134.
2017-10-07 23:26:04 +02:00
kkapsner
42ee6e483e Added planned todos. 2017-10-07 23:15:26 +02:00
kkapsner
4dd802adbc Added vscode tasks for the web-ext tool. 2017-10-07 23:14:53 +02:00
kkapsner
93878e66b8 Updated settings screenshot. 2017-10-07 23:13:54 +02:00
kkapsner
b35b460b91 Version 0.4.1 2017-10-06 23:01:34 +02:00
kkapsner
dcb878392e Simplified require and further linting. 2017-10-06 16:06:31 +02:00
kkapsner
01c1145e28 Code cleanup. 2017-10-05 19:00:00 +02:00
kkapsner
289cea0fc0 Merge pull request #132 from spodermenpls/master
Code Review
2017-10-03 23:38:33 +02:00
spodermenpls
8ac4763b71 Update options.js 2017-10-03 19:51:03 +02:00
kkapsner
ef38abe545 Code linting. 2017-10-03 15:35:31 +02:00
kkapsner
cde71f8a62 Cleanup of page action interface. 2017-10-03 12:17:14 +02:00
kkapsner
f569a48b01 Added logging prefix for option page. 2017-09-29 00:31:00 +02:00
kkapsner
1689686935 Fixed logging to be able to use %s in the first logged argument. 2017-09-29 00:29:34 +02:00
kkapsner
991690091a Merge pull request #131 from spodermenpls/master
Slight optimizations
2017-09-25 09:34:44 +02:00
spodermenpls
6ede6ebded Update releaseNotes.txt (#1) 2017-09-25 04:24:12 +02:00
spodermenpls
f24044ddb5 Update messages.json (#2) 2017-09-25 04:23:45 +02:00
kkapsner
782880a573 Made border of the icon thinner. 2017-09-24 20:21:22 +02:00
kkapsner
17508d9ffa Merge pull request #130 from spodermenpls/master
Slight code rot
2017-09-24 10:09:44 +02:00
kkapsner
5251aaf4df "use strict" should be defined in functions. 2017-09-24 10:08:06 +02:00
kkapsner
f1a9708e41 Update all lists after loading of the settings. 2017-09-24 10:07:33 +02:00
spodermenpls
98f061d82b Update main.js 2017-09-24 03:38:44 +02:00
kkapsner
101a8605b5 Wrong named keys in English localisation. 2017-09-24 00:29:57 +02:00
kkapsner
eb0f936cb0 First steps. 2017-09-24 00:12:12 +02:00
kkapsner
07b052520a Added .eslintrc.json 2017-09-24 00:11:16 +02:00
kkapsner
00252d3e93 Updated release notes and readme. 2017-09-24 00:06:03 +02:00
kkapsner
6b0d4f076c Fine tuning of the icon. 2017-09-23 23:54:42 +02:00
kkapsner
26c5968b64 Fixed bug that the update of the lists sometimes did not use the new value but the old one. 2017-09-23 23:47:44 +02:00
kkapsner
2b1a32e078 Settings only need to be loaded when still in default state. 2017-09-23 23:40:57 +02:00
kkapsner
a4a92fc2f9 Ping back after the port opening to the background script now also returns the settings and the persistentRnd data. 2017-09-23 23:37:46 +02:00
kkapsner
e5e38e148e Made the domain rnd setable for the persistent rng. 2017-09-23 23:34:29 +02:00
kkapsner
07330cbdcf Removed old page action icon. 2017-09-23 23:32:47 +02:00
kkapsner
d5ac2aba4c Cleanup of the default settings. 2017-09-23 23:30:54 +02:00
kkapsner
8fc5ee45c2 getImageData also faked when using fakeInput mode. 2017-09-23 23:23:12 +02:00
kkapsner
1a73fc90e4 Fixed image inspecting which was not working sometimes. 2017-09-23 22:51:01 +02:00
kkapsner
26176b50f8 Fixed name collision with parameter name. 2017-09-23 22:50:17 +02:00
kkapsner
581af1db4f Played a little bit with the icons for #127. 2017-09-22 00:40:28 +02:00
kkapsner
e0e226d3f0 Changed printed icon to right size. 2017-09-17 01:23:55 +02:00
kkapsner
4e239ba17e Added svg icons 2017-09-16 16:18:19 +02:00
kkapsner
7d0c9681df Test cleanup. 2017-08-13 23:44:31 +02:00
kkapsner
d8f6fb1ac9 Made readPixels consistent with the other faked readout functions. 2017-08-13 23:41:57 +02:00
kkapsner
bdbdf1d04a Add fakeAlphaChannel to options page. 2017-08-13 23:30:16 +02:00
kkapsner
fba0c01130 Typos. 2017-08-12 16:48:30 +02:00
kkapsner
73e4848ffd Added setting for alpha channel faking. 2017-08-11 16:26:24 +02:00
kkapsner
6f9e2ad686 Cleanup of manifest.json 2017-08-09 18:20:28 +02:00
kkapsner
b12dc3ad68 Added displayAdvancedSettings setting. 2017-08-08 18:11:45 +02:00
kkapsner
48dc965f7c Added setting for canvas cache. 2017-08-08 18:08:18 +02:00
kkapsner
f853071d19 Added names to random supply objects. 2017-08-08 08:29:42 +02:00
kkapsner
48464e49b8 Added performance test. 2017-08-07 21:03:45 +02:00
kkapsner
1733be23f2 Added setting "ignoreFrequentColors" 2017-08-07 21:03:34 +02:00
kkapsner
9da251b14d Added "constant" rng. 2017-08-07 17:43:57 +02:00
kkapsner
4cb91462f7 Wrong German description. 2017-08-07 08:50:56 +02:00
kkapsner
2cdf364334 Fixed logging in options.js 2017-08-07 08:50:09 +02:00
kkapsner
921c7dbd5f Changed rng interface to use colors instead of separate channels. 2017-08-07 08:49:49 +02:00
kkapsner
26457b2a7f Added more information for error provoking detection tests. 2017-07-28 17:37:31 +02:00
kkapsner
74a6b16090 Typo... 2017-07-27 20:50:37 +02:00
kkapsner
9715eb09d2 Added logging lib with setting to control log level. 2017-07-27 19:14:04 +02:00
kkapsner
65ad3a5814 Fixed typo. 2017-07-19 00:31:56 +02:00
kkapsner
cde3b90492 Added double readout test. 2017-07-18 23:53:24 +02:00
kkapsner
45d5576eaf Detection test: added test for function code and for known pixel values. 2017-07-18 16:19:56 +02:00
kkapsner
b7acfbb2f9 Page action refinements. 2017-07-18 16:19:32 +02:00
kkapsner
72a2904b0a Removed log entry for missing unload - it's not possible in WebExtensions. 2017-07-18 16:19:06 +02:00
kkapsner
c8b451cf2f Added more logging to frame script. 2017-07-18 16:18:36 +02:00
kkapsner
3c47eaf97f Added loading of the current settings in the frame script. 2017-07-18 16:17:19 +02:00
kkapsner
bec157391d Removed warning about unknown property. 2017-07-18 16:16:38 +02:00
kkapsner
6c47397d46 Do not intercept when the SOP is in the way. 2017-07-18 16:14:03 +02:00
kkapsner
2a3abbcec7 Number settings were not stored as numbers but as string when changed. 2017-07-18 16:11:47 +02:00
kkapsner
5575c50a03 Added minimal fake size and respected the fake sizes in all fakeable functions. 2017-07-18 16:11:12 +02:00
kkapsner
0d7e8bdd8b Formatting cleanup. 2017-07-16 00:26:59 +02:00
kkapsner
b39851b289 Release notes could be shown nicer - but it's not supported by fennec. 2017-07-16 00:26:40 +02:00
kkapsner
736d6b0fb2 Added some logging to frame script. 2017-07-16 00:25:19 +02:00
kkapsner
788152d06c Typo in English i10n file. 2017-07-16 00:13:43 +02:00
kkapsner
900563c956 Updates settings screenshot. 2017-07-16 00:12:51 +02:00
kkapsner
47729f81bb Added storage version check. 2017-07-16 00:12:12 +02:00
kkapsner
7337ac093a Moved file that should not be in xpi to excluded folder. 2017-07-14 09:00:37 +02:00
kkapsner
0234a6d8cf Removed obsolete files. 2017-07-14 08:58:48 +02:00
kkapsner
fdf71f304f Added description for rng. 2017-07-09 17:10:21 +02:00
kkapsner
1eddf48d20 Show only settings that are useful within the given settings set. 2017-07-08 22:43:20 +02:00
kkapsner
3cefcfe702 Added method to display faked canvas content. 2017-07-08 22:40:38 +02:00
kkapsner
8cec88f5f7 Restructuring of main.js. 2017-07-07 08:50:23 +02:00
kkapsner
18a2e32044 Added better logging to frame.js and separated settings update from defaultSettings.js 2017-07-07 08:49:12 +02:00
kkapsner
97c9f1c94b Added function lists.updateAll() to account for later loaded settings. 2017-07-07 08:46:58 +02:00
kkapsner
5576b54883 Page action message display and buttons. 2017-07-02 12:21:16 +02:00
kkapsner
b6dd2ff011 Fixed: options page did not update and checkboxes were not displayed. 2017-07-02 12:18:20 +02:00
kkapsner
584f178ff7 Created way to load test page with no initial read access. 2017-07-02 02:05:44 +02:00
kkapsner
820f187d35 Fixed German typo. 2017-06-30 08:39:33 +02:00
kkapsner
f70380aa67 Added test page for webGL - it is also working with the webExtension. 2017-06-29 20:19:00 +02:00
kkapsner
0f35d762e2 Fixed typo. 2017-06-29 20:01:58 +02:00
kkapsner
158a53564d Added name detection case. 2017-06-29 07:35:37 +02:00
kkapsner
c53961e1d4 Added more information and recommondation to the description of the maxFakeSize.
Suggested in #119.
2017-06-29 07:33:51 +02:00
kkapsner
067ec6954c Allow the page scripts to overwrite the faked functions.
Fixes #121
2017-06-29 07:31:55 +02:00
kkapsner
5cec9781c2 Added pageAction to display the notifications. 2017-06-29 07:21:36 +02:00
kkapsner
cba5680406 First working webExtesion. 2017-06-25 22:33:12 +02:00
kkapsner
4ea073132d Changed library functions that may work in both types.
Added helper scripts for webExtension.
2017-06-25 22:22:17 +02:00
kkapsner
6c3b27e7e4 Added options page for webextension. 2017-06-25 22:11:28 +02:00
kkapsner
59f5fc39e1 Transformed the locale files for WebExtension. 2017-06-25 21:16:03 +02:00
kkapsner
4d75ad4ca1 Fixed ask mode with input mode. 2017-06-25 21:14:13 +02:00
kkapsner
993ac2a2b3 Added console.log() output in the very first position of the test file for reference. 2017-06-25 21:13:47 +02:00
kkapsner
01e19bbf6a Version 0.4.0 2017-05-24 17:47:52 +02:00
kkapsner
a6e1b05045 WebExtension: added embedded WebExtension to store the preferences for the transition 2017-05-21 13:17:35 +02:00
kkapsner
a9c7d97708 Prevented error when wrong object is passed to the faked functions.
Solves the fourth problem in #114.
2017-05-05 09:18:11 +02:00
kkapsner
231e33ffb7 Relative paths did no longer work for remoteRequire in nightly.
Also fixes #113 (first tab after restoration did not load frame script) - no clue why.
2017-04-23 00:27:40 +02:00
kkapsner
c5bb80bbb8 Improved tests. 2017-04-23 00:25:33 +02:00
kkapsner
6fdf13bd10 Prevented error when canvas has size zero
Solves the third problem in #114
2017-04-19 19:32:37 +02:00
kkapsner
41fcb6ed11 Version 0.3.8 2017-03-03 01:21:11 +01:00
kkapsner
47725364e8 Updated release notes. 2017-03-03 01:05:55 +01:00
kkapsner
e55d0078d5 Modified functions need type.
Fixes #109
2017-03-03 00:55:32 +01:00
kkapsner
f85303065c Only interfecpt constructors that are present.
Fixes #108.
2017-02-22 17:46:17 +01:00
kkapsner
a8611230b1 Added option to store data for persistent rng.
Fixes #102.
2017-02-10 17:37:35 +01:00
kkapsner
3b14e56537 Corrected supported versions. 2017-02-10 17:31:44 +01:00
kkapsner
b968e3e7a0 Firefox 45.7.0 (ESR) complained about function in block.
Fixes #105.
2017-02-10 17:29:38 +01:00
kkapsner
66536113e8 Fixed mode "fake at input". 2017-02-10 16:30:11 +01:00
kkapsner
cd16614a7f Corrected German description. 2017-02-01 13:27:57 +01:00
kkapsner
ece87af743 Version 0.3.7 2017-02-01 12:03:09 +01:00
kkapsner
ad40bf9be1 Documentation cleanup. 2017-02-01 11:48:05 +01:00
kkapsner
6636e1d68b window objects of <frame>s with no url do get the "about:blank" too late -> treat blank URL the same way. 2017-02-01 11:15:05 +01:00
kkapsner
eb6494eca5 Shared persistent rnd between processes.
Fixes #103.
2017-02-01 10:49:33 +01:00
kkapsner
ab42c76a44 Updated release notes for removed memory leak. 2017-01-31 21:58:28 +01:00
kkapsner
602d5a6bfd Switch from frameScript to require("sdk/remote/...").
Fixes #98. Fixes #100.
2017-01-31 21:51:08 +01:00
kkapsner
c0c16b6546 Improved test page. 2017-01-31 20:59:57 +01:00
kkapsner
9c7e842f4b Prevented error message when notifications where triggered on preview, which is not possible. 2017-01-31 20:03:48 +01:00
kkapsner
ec1ae73cda about:blank pages are treated with respect to the opening page 2017-01-31 20:00:02 +01:00
kkapsner
b563a9d3ca removed error message when notification can not be closed 2017-01-30 11:31:04 +01:00
kkapsner
f93f2958b7 Removed default entry in white list. 2017-01-30 11:23:07 +01:00
kkapsner
fe05bc335c Updates release notes. 2017-01-21 13:57:34 +01:00
kkapsner
960f3c4f36 Only alter last bit also in non persistent rng mode.
Fixes #99.
2017-01-18 08:46:45 +01:00
kkapsner
6d7a9fc22a Removed bug with faking webgl and added readPixels for webgl2.
Fixes #96 and #97.
2016-12-26 14:36:01 +01:00
kkapsner
6748771402 Version 0.3.6 2016-12-17 10:50:24 +01:00
kkapsner
b5684fd895 Further German translation fixes. 2016-12-16 22:39:52 +01:00
kkapsner
bfaffc98df Simplified require-gathering. 2016-12-14 12:26:01 +01:00
kkapsner
48c04ee33f Updated release notes. 2016-12-13 23:12:49 +01:00
kkapsner
389adefef9 Changed the gathering of the require function in the frame script.
Fixes #94.
2016-12-13 23:07:56 +01:00
kkapsner
efb9e49ba3 German translation fixes. 2016-12-11 12:34:01 +01:00
kkapsner
0eeaf84826 Improved performance for getImageData. 2016-12-03 17:29:30 +01:00
kkapsner
7b7583afe0 Performance increase when canvas bigger than maxSize.
Fixes #93.
2016-12-01 20:40:28 +01:00
kkapsner
af6fcd8026 Version 0.3.5 2016-11-30 17:22:45 +01:00
kkapsner
c3c6c7a2e9 Fixes bug in fake function for readPixels.
Fixes #92.
2016-11-26 17:37:52 +01:00
kkapsner
d8a5cf2283 Dynamic notification id from message id. 2016-11-22 08:30:57 +01:00
kkapsner
7ef342560e German translations not working. 2016-11-21 12:35:57 +01:00
kkapsner
fc07961c6b Completely remove function monitoring for white listed sites.
Fixes #84.
2016-11-19 15:35:00 +01:00
kkapsner
bda00e5741 Version 0.3.4 2016-11-18 16:47:14 +01:00
kkapsner
749b088fe9 Added button in options site to display release notes.
Fixes #83
2016-11-13 15:34:33 +01:00
kkapsner
82bb25d0f2 Monitoring only the necessary functions -> changes of the mode or the white/black lists only affects new loaded pages.
Fixes #84.
2016-11-13 15:09:03 +01:00
kkapsner
b2823cbd8d Added internal type handling for getContext.
Fixes #86
2016-11-13 14:55:42 +01:00
kkapsner
e4c65d415e Made checkStack available during interception. 2016-11-13 14:51:58 +01:00
kkapsner
d122f90655 Added notification display time.
Fixes #85.
2016-11-11 00:19:25 +01:00
kkapsner
410e92d1b0 Version 0.3.3 2016-11-03 22:13:16 +01:00
kkapsner
e931fa997c Documentation. 2016-11-03 17:49:48 +01:00
kkapsner
26dcc31f5b Moved "use strict" to be ECMA 2016 compliant.
Fixes #80.
2016-10-31 16:43:49 +01:00
kkapsner
dc98a92e8f Direct access to exportFunction in intercept.js 2016-10-24 22:30:57 +02:00
kkapsner
a2fa00fb98 First implementation of the fakeInput mode. (And other improvements.) 2016-10-23 22:12:12 +02:00
kkapsner
b6d08459a5 Preworks for the new "fake-input" mode. 2016-10-22 13:32:48 +02:00
kkapsner
fcedf34b9f Fake notification was not shown in all cases. 2016-10-12 00:08:53 +02:00
kkapsner
827fd3124c Minor bug fixing and commenting in lib/randomSupplies.js
Fixes #76
2016-08-15 13:27:28 +02:00
kkapsner
4eea090baa Version 0.3.2 2016-08-15 12:58:26 +02:00
kkapsner
1b2c4cb487 Added preference to control rng type. 2016-08-06 19:17:36 +02:00
kkapsner
447ff54222 Made random changes constant within the same domain. 2016-05-18 08:55:21 +02:00
kkapsner
699698f529 Improved faking performance. 2016-05-14 19:12:45 +02:00
kkapsner
7a0cad6966 Changed label for ignore button.
Fixes #49
2016-05-14 18:29:42 +02:00
kkapsner
37fd9f7a36 Suppressed notification if maxFakeSize triggers. 2016-05-11 08:58:45 +02:00
kkapsner
b8ba76300e Introduced maxFakeSize. 2016-05-10 08:01:21 +02:00
kkapsner
8240bf6007 .nodeName not readable on HTMLCanvasElementPrototype.
Fixes #66.
2016-04-30 15:05:20 +02:00
kkapsner
4465ff8435 Disabled faking in getImageData for bigger areas. 2016-04-21 23:54:48 +02:00
kkapsner
535a72ab62 Added fennec in install.rdf 2016-03-30 19:05:23 +02:00
kkapsner
75b1017022 Version 0.3.1 2016-02-13 13:13:51 +01:00
kkapsner
6ce7b81124 Code cleanup. 2016-02-13 12:48:22 +01:00
kkapsner
951277e922 e10s ready!
Fixes #60 and #42
2016-02-13 12:28:36 +01:00
kkapsner
35c6a82480 Version 0.2.3 2016-01-29 00:28:10 +01:00
kkapsner
b68e1bc8a4 Switch to jpm. 2016-01-29 00:07:41 +01:00
kkapsner
424b88f04f Prevented bypass with empty <iframe>.
Fixes #58
2016-01-28 23:46:39 +01:00
kkapsner
39ffe4d3b2 Added description and translations for stackList. 2016-01-16 00:03:51 +01:00
kkapsner
d2f5a0cca1 Introduced stackList. 2015-12-31 13:37:27 +01:00
kkapsner
24d67113d6 Merge pull request #54 from patricksadowski/fix-de-locale
Fix de-DE locale typo
2015-12-23 15:00:55 +01:00
Patrick Sadowski
36fe354acc Fix de-DE locale typo 2015-12-22 23:17:05 +01:00
kkapsner
1193243d50 Version 0.2.2 2015-12-07 16:42:03 +01:00
kkapsner
712fdb698c Update README.md 2015-12-07 16:31:06 +01:00
kkapsner
6c806583f0 Removed bug with "add to ignore list"-button & added translations for prompts.
Fixes #41.
2015-10-24 10:44:51 +02:00
kkapsner
0f575a7aed Added also prompt for adding to ignore list. 2015-10-11 13:56:28 +02:00
kkapsner
9255fb5813 Added prompts for domain and URL whitelist adding in notification as mentioned in issue #40. 2015-10-08 17:17:02 +02:00
kkapsner
72ebf99297 Added keywords and homepage to package.json
Fixes #39
2015-09-14 17:10:38 +02:00
kkapsner
8e77487bd9 Version 0.2.1 2015-09-10 22:38:25 +02:00
kkapsner
087c3066bc Updated description files. 2015-09-10 17:30:29 +02:00
kkapsner
5fe5ec1d64 Added support for webgl2 (?) 2015-09-10 01:58:38 +02:00
kkapsner
0640008459 Fixed bug with webgl-canvas. 2015-09-10 01:35:49 +02:00
kkapsner
0904d8e2a6 Linted all files. 2015-09-08 11:42:32 +02:00
kkapsner
6c46d28593 Reintroduced ask modes. 2015-09-08 11:41:33 +02:00
kkapsner
c10b382c93 Version 0.2.0
Reenabled notifications
Code cleanup.
2015-09-06 15:40:34 +02:00
kkapsner
97e0c6b9cd Removed pageMod and many not needed features.
Notifications not working.
2015-09-06 12:26:50 +02:00
kkapsner
195d780bf8 Version 0.1.9 2015-09-03 22:38:16 +02:00
kkapsner
98a15ef9f2 Removed bug with inproper calls (i.e. float point numbers for sw or sh) to getImageData(). 2015-09-02 23:57:31 +02:00
kkapsner
4ed4bb759b Changed notification not to show full URL but only domain. Added button to show full URL.
Fixes #33
2015-09-01 21:40:30 +02:00
kkapsner
637f2dd465 Made toDataURL() and toBlob() return valid data. 2015-09-01 21:28:03 +02:00
kkapsner
513e96f6c5 Version 0.1.8 2015-09-01 21:25:01 +02:00
kkapsner
f6e09a9b1a Removed bypass option with non content windos. 2015-08-26 18:12:12 +02:00
kkapsner
01ea10fe79 Changed status and description of the preference allowPDFCanvas. 2015-08-25 10:05:09 +02:00
kkapsner
cc0f1f03ec Version 0.1.7 2015-08-25 09:54:24 +02:00
kkapsner
519f6a4c58 Changed require calls for own modules. Otherwise the harness-options.json will contain wrong module names. 2015-06-23 13:14:50 +02:00
kkapsner
cc8ac1c22d Some code cleanup and commenting. 2015-06-18 14:54:09 +02:00
kkapsner
9676f3f5b1 Changed preferencePane styling to self hosted module. 2015-05-15 11:21:14 +02:00
kkapsner
3bcdbc23ac Added JPM support 2015-05-15 00:31:44 +02:00
kkapsner
f8cfff16a2 Fixed german translation typo 2015-05-15 00:30:58 +02:00
kkapsner
0a4b92508a Reenabled "whitelist URL"
Added proper escaping to the URL.

This fixes #28
2015-05-11 10:55:12 +02:00
kkapsner
d1cf450ce5 Disabled "whitelist URL" in notification
Referres to #28
2015-05-11 10:47:50 +02:00
kkapsner
dc38d922c3 Better input in lists by notification buttons. 2015-05-11 10:45:04 +02:00
kkapsner
9aff165a68 Added files with addon.mozilla.com descriptions
Fixes #27
2015-05-07 00:37:34 +02:00
kkapsner
233cfd1f6a Preferences changes
Changed translations, reordered preferences and added a "disable
notifications" button to the notifications.

Fixed #24, #25 and #26
2015-05-06 23:59:36 +02:00
kkapsner
b6ac2248f3 Added proference to disable notifications 2015-05-03 13:39:27 +02:00
kkapsner
a2853455d0 Fixed translation error.
Found in #21
2015-04-25 18:56:14 +02:00
kkapsner
b1fa00a28a Invalid version characters... 2015-04-24 01:34:46 +02:00
kkapsner
b915630750 Version 0.1.6 2015-04-24 01:20:54 +02:00
237 changed files with 63019 additions and 827 deletions

6
.codebeatsettings Normal file
View File

@ -0,0 +1,6 @@
{
"JAVASCRIPT": {
"LOC": [80, 90, 100, 120],
"BLOCK_NESTING": [4, 5, 6, 7]
}
}

BIN
.documentation/Settings.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,45 @@
Dieses Add-on ermöglicht es Nutzern, Webseiten davon abzuhalten, sie über Javascript APIs zu identifizieren. Nutzer können auswählen, ob die APIs komplett auf bestimmten oder allen Seiten blockiert werden (dies wird die Funktionalität einiger Seiten beeinträchtigen) oder bei den identifikationsfreundlichen Auslese-Funktionen falsche Werte vorzutäuschen.
Bei Problemen konsultieren Sie bitte zuerst <a href="https://canvasblocker.kkapsner.de/faq/">FAQ</a>. Falls Sie Fehler finden oder Verbesserungsvorschläge haben, teilen Sie mir das bitte auf https://github.com/kkapsner/CanvasBlocker/issues mit.
<b>WICHTIG</b>: Sie sollten nur ein Addon/eine Einstellung aktiv haben, die eine API beschützt. Ansonsten können Sie massive Performanceprobleme bekommen. (Z.B. EclipsedMoon für Palemoon hat 'canvas.poison', was bekanntermaßen Probleme verursacht: https://github.com/kkapsner/CanvasBlocker/issues/253#issuecomment-459499290)
privacy.resistFingerprinting kann aber problemlos aktiviert werden und der Fingerprinting-Schutz muss nicht deaktiviert werden.
Beschützte "Fingerprinting"-APIs:
<ul>
<li>canvas 2d</li>
<li>webGL</li>
<li>audio</li>
<li>history</li>
<li>window (standardmäßig deaktiviert)</li>
<li>DOMRect</li>
<li>TextMetrics</li>
<li>navigator (standardmäßig deaktiviert)</li>
<li>screen</li>
</ul>
Nähere Informationen zum Fingerprinting können Sie finden auf:
<ul>
<li>&lt;canvas&gt;: http://www.browserleaks.com/canvas</li>
<li>audio:
<ul>
<li>https://audiofingerprint.openwpm.com/ (sehr schlecht geschrieben = langsam)</li>
<li>https://webtransparency.cs.princeton.edu/webcensus/#audio-fp</li>
</ul>
</li>
<li>DOMRect:
<ul>
<li>http://jcarlosnorte.com/security/2016/03/06/advanced-tor-browser-fingerprinting.html</li>
<li>https://browserleaks.com/rects</li>
</ul>
</li>
</ul>
Die verschiedenen Blockiermodi sind:
<ul>
<li>Auslese-API vortäuschen: Standardeinstellung und mein Favorit! Alle Webseiten, die nicht auf der Whitelist oder Blacklist gelistet sind, können die beschützten APIs zur Darstellung verwenden. Werte, die über die APIs zurückgegeben werden, werde so verändert, dass kein konsistenter Fingerprinting erstellt werden kann.</li>
<li>um Erlaubnis fragen: Wenn eine Seite weder auf der Whitelist noch auf der Blacklist gelistet ist, wird der Nutzer gefragt, ob die Webseite die beschützten APIs verwenden darf, wenn sie benutzt wird.</li>
<li>alles blockieren: Ignoriert alle Listen und blockiert die beschützten APIs auf allen Webseiten.</li>
<li>nur Einträge der Whitelist erlauben: Nur Seiten, die in der Whitelist gelistet sind, dürfen die beschützten APIs verwenden.</li>
<li>nur Einträge der Blacklist blockieren: Blockiere die beschützten APIs nur auf den Seiten der Blacklist.</li>
<li>alles erlauben: Ignoriere alle Listen und erlaube die beschützten APIs auf allen Webseiten.</li>
</ul>

View File

@ -0,0 +1,46 @@
This add-on allows users to prevent websites from using some Javascript APIs to fingerprint them. Users can choose to block the APIs entirely on some or all websites (which may break some websites) or fake its fingerprinting-friendly readout API.
If you encounter any problems please check the <a href="https://canvasblocker.kkapsner.de/faq/">FAQ</a> first. Please report issues and feature requests at https://github.com/kkapsner/CanvasBlocker/issues
<b>IMPORTANT</b>: you should only have ONE addon/setting set that protects an API. Otherwise you could face massive performance issues. (E.g. EclipsedMoon for Palemoon has 'canvas.poison' which is known to cause issues: https://github.com/kkapsner/CanvasBlocker/issues/253#issuecomment-459499290)
But setting privacy.resistFingerprinting to true and/or using the new fingerprinting protection introduced with Firefox 67 is fine.
Protected "fingerprinting" APIs:
<ul>
<li>canvas 2d</li>
<li>webGL</li>
<li>audio</li>
<li>history</li>
<li>window (disabled by default)</li>
<li>DOMRect</li>
<li>TextMetrics</li>
<li>navigator (disabled by default)</li>
<li>screen</li>
</ul>
More information on fingerprinting can be found at:
<ul>
<li> &lt;canvas&gt;: http://www.browserleaks.com/canvas</li>
<li> audio:
<ul>
<li>https://audiofingerprint.openwpm.com/ (very poorly written = slow)</li>
<li>https://webtransparency.cs.princeton.edu/webcensus/#audio-fp</li>
</ul>
</li>
<li> DOMRect:
<ul>
<li>http://jcarlosnorte.com/security/2016/03/06/advanced-tor-browser-fingerprinting.html</li>
<li>https://browserleaks.com/rects</li>
</ul>
</li>
</ul>
The different block modes are:
<ul>
<li> fake: Canvas Blocker's default setting, and my favorite! All websites not on the white list or black list can use the protected APIs. But values obtained by the APIs are altered so that a consistent fingerprinting is not possible</li>
<li> ask for permission: If a website is not listed on the white list or black list, the user will be asked if the website should be allowed to use the protected APIs each time they are called.</li>
<li> block everything: Ignore all lists and block the protected APIs on all websites.</li>
<li> allow only white list: Only websites in the white list are allowed to use the protected APIs.</li>
<li> block only black list: Block the protected APIs only for websites on the black list.</li>
<li> allow everything: Ignore all lists and allow the protected APIs on all websites.</li>
</ul>

View File

@ -0,0 +1,43 @@
Este complemento permite a los usuarios impedir que los sitios web usen algunas API de JavaScript para crear huellas digitales para ellos. Los usuarios pueden elegir entre bloquear las API por completo en algunos sitios web o en todos (lo que puede romper algunos) o falsear su API de lectura para crear huellas digitales.
<b>IMPORTANTE</b>: solo debe tener UN complemento/configuración activo para proteger una API. De lo contrario, puede sufrir enormes problemas de rendimiento (p. ej. EclipsedMoon para Palemoon tiene «canvas.poison», del que se sabe que causa problemas: https://github.com/kkapsner/CanvasBlocker/issues/253#issuecomment-459499290). Aunque poner privacy.resistFingerprinting a «true» no importa.
Puede encontrar más información sobre huellas digitales en:
<ul>
<li> &lt;canvas&gt;: http://www.browserleaks.com/canvas</li>
<li> audio:
<ul>
<li>https://audiofingerprint.openwpm.com/ (muy mal escrita = lenta)</li>
<li>https://webtransparency.cs.princeton.edu/webcensus/#audio-fp</li>
</ul>
</li>
<li> DOMRect:
<ul>
<li>http://jcarlosnorte.com/security/2016/03/06/advanced-tor-browser-fingerprinting.html</li>
<li>https://browserleaks.com/rects</li>
</ul>
</li>
</ul>
Los distintos modos de bloqueo son:
<ul>
<li> falsear: configuración por defecto de CanvasBlocker, ¡y mi favorita! Todos los sitios web que no estén en la lista blanca o en la negra pueden usar las API protegidas. Pero los valores obtenidos por las API son alterados para que no sea posible una huella digital consistente.</li>
<li> pedir permiso: si un sitio web no está en la lista blanca o en la negra, se pregunta al usuario si dicha web puede usar las API protegidas cada vez que son llamadas.</li>
<li> bloquear todo: ignora todas las listas y bloquea las API protegidas en todos los sitios web.</li>
<li> permitir solo lo de la lista blanca: solo se permite usar las API protegidas a los sitios web de la lista blanca.</li>
<li> bloquear solo lo de la lista negra: bloquea las API protegidas solo en los sitios web de la lista negra.</li>
<li> permitir todo: ignora todas las listas y permite usar las API protegidas en todos los sitios web.</li>
</ul>
Las API para «huellas digitales» protegidas son:
<ul>
<li>canvas 2d</li>
<li>webGL</li>
<li>audio</li>
<li>history</li>
<li>window (deshabilitada por defecto)</li>
<li>DOMRect</li>
<li>navigator (deshabilitada por defecto)</li>
</ul>
Puede informar sobre problemas y solicitar funciones en https://github.com/kkapsner/CanvasBlocker/issues

View File

@ -0,0 +1,27 @@
Это дополнение позволяет пользователям запретить веб-сайтам использовать API Javascript canvas для считывания цифровых отпечатков. Пользователи могут заблокировать API canvas полностью на некоторых или на всех веб-сайтах (возможно некоторые сайты перестанут корректно работать) или просто заблокировать или подделать его API для считывания цифровых отпечатков. Более подробную информацию о считывание цифровых отпечатков можно найти по адресу http://www.browserleaks.com/canvas.
Эсть разные режимы блокирования:
<ul>
<li>блокировать readout(считывание) API: Все сайты, не включенные в белый или черный список, могут использовать API canvas для отображения чего-либо на странице, но API readout(считывания) не может возвращать значения на сайт. Это может сломать сайты, такие как Google Maps.</li>
<li>подделывать readout(считывание) API: Настройка по умолчанию, и моя любимая! Все сайты, не включенные в белый или черный список, могут использовать API canvas для отображения чего-либо на странице, но API считывания вынужден возвращать новое случайное значение при каждом вызове.</li>
<li>подделывать для input(ввод): При отображении текста рисованные пиксели слегка изменяются. Это делает обнаружение дополнения более сложным, но менее безопасным. На WebGL-холсте поведение идентично подделывать "readout(считывания) API"..</li>
<li>попросить разрешения для readout(считывание) API: Все сайты, не включенные в белый или черный список, могут использовать API canvas для отображения чего-либо на странице, но при каждом вызове сайта у пользователя будет запрашиваться разрешение на использование API считывания(readout).</li>
<li>блокировать все: Игнорировать все списки и блокировать API canvas на всех сайтах.</li>
<li>разрешить только белый список: API canvas могут использовать только сайты из белого списка.</li>
<li>попросить разрешения: Если сайт не указан в белом или черном списке, пользователю будет предложено разрешить ему использовать API canvas при каждом вызове.</li>
<li>блокировать только черный список: Блокирует API canvas только для сайтов из черного списка.</li>
<li>разрешить все: Игнорировать все списки и разрешить canvas API на всех сайтах.</li>
</ul>
Защищенные API от "снятия цифровых отпечатков":
<ul>
<li>canvas 2d</li>
<li>webGL</li>
<li>audio</li>
<li>history</li>
<li>window (disabled by default)</li>
<li>DOMRect</li>
<li>navigator (disabled by default)</li>
</ul>
Сообщите о проблемах и пожеланиях на странице https://github.com/kkapsner/CanvasBlocker/issues.

View File

@ -0,0 +1,12 @@
body {
margin: 30px auto;
max-width: 680px;
font-size: 13pt;
line-height: 1.4em;
color: #444444;
padding: 0;
}
h1, h2, h3{
line-height: 1.2em;
}

View File

@ -0,0 +1,9 @@
How is CanvasBlocker funded?
-------
There is no steady monetary funding of CanvasBlocker. Donations are accepted and help to cover some expenses. But since these are not that high it is not sure if a steady funding with any obligations will be accepted.
There is also no plan to monetize CanvasBlocker in any way.
All the development work is done by kkapsner in their spare time and no salary or compensation is paid for it.
So it's all done voluntarily for fun and free.

View File

@ -0,0 +1,5 @@
How can I support CanvasBlocker?
------
The best way to support CanvasBlocker is to give feedback. If something is not working like it should or something could be improved please open an [issue](https://github.com/kkapsner/CanvasBlocker/issues/new). Reviews at [addons.mozilla.org](https://addons.mozilla.org/firefox/addon/canvasblocker/reviews/) can also help to increase the user base but it is a very bad platform to communicate issues and improvements.
If you want to contribute with your own spare time you can help to improve the [translations](https://github.com/kkapsner/CanvasBlocker/issues/420). Code contributions can also be done in form of pull requests but will be reviewed very thoroughly.

View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<title>
CanvasBlocker FAQs
</title>
<link rel="stylesheet" href="../default.css" type="text/css">
</head>
<body>
<header><h1>CanvasBlocker FAQs</h1></header>
<?php
include_once("../../kamiKatze/autoload.php");
$parser = new MarkdownParser();
foreach (new DirectoryIterator("./") as $file){
if (!$file->isDot() && !$file->isDir() && $file->getExtension() === "md"){
$markdown = $parser->parse(file_get_contents($file->getPathname()));
echo preg_replace("/<h2/", "<h2 id=\"" . str_replace(".md", "", $file->getFilename()) . "\"", $markdown->view("html"), 1);
}
}
?>
</body>
</html>

View File

@ -0,0 +1,9 @@
I do not find setting X.
------
Some settings are not always visible. There are three reasons why settings might be hidden:
* Some require other settings to be a certain value to be displayed because they are not useful without the other setting. E.g. the whole "Asking" section is only displayed when the block mode is set to "ask for permission".
* Other settings are hidden behind the "expert mode" because they need a certain level of understanding of CanvasBlocker to be used correctly.
* Finally you can hide settings. To show these settings you have to enable "display hidden settings".
So if you search for a setting and do not find it you should first enable the "expert mode" and "display hidden settings". If you then still do not find it it's not relevant for your current setup of CanvasBlocker.

View File

@ -0,0 +1,3 @@
PayPal transactions started with "Buy now" button not working!
-----
It's a known fact that the window API protection hinders the completion of all transaction processes initiated via PayPal's "Buy now" button. You have to whitelist paypal.com for that API for it to work properly.

View File

@ -0,0 +1,9 @@
Why does CanvasBlocker need permission X?
------
Here is the list of permission that CanvasBlocker needs and the reason why it's needed:
* <all_urls> and tabs: CanvasBlocker needs to be able to interact with all possible urls and tabs as fingerprinting attempts could be done everywhere.
* storage: to store the settings the storage.local API is used.
* webRequest and webRequestBlocking: to insert the CSR headers in a request in order to protect the data-URLs. Once [this bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1475831) has been fixed I can completely remove the data-URI protection (see [here](https://github.com/kkapsner/CanvasBlocker/issues/208) for further information).
* contextualIdentities and cookies: for support of browser containers. I would like to make this optional for only the people that use containers but I cannot (see [here](https://github.com/kkapsner/CanvasBlocker/issues/381) for further information).
* privacy: this permission is needed to read if the user has privacy.resistFingerprinting enabled. A notice about a slightly changed behaviour of CanvasBlocker is displayed in the settings page in that case.

View File

@ -0,0 +1,5 @@
reCAPTCHA is not working!
-----
It's a known fact that the window API protection breaks reCAPTCHAs. They use the window.name API to store information about the captcha. The protection is designed to mitigate exactly such techniques of passing information from one domain to another. But in this case the information is shared with an embedded HTML page (an <iframe> tag). As the information gets lost when the top level page navigates somewhere the tracking potential is quite limited in such a scenario.
So in conclusion you can enable "Allow window.name in frames" to make reCAPTCHA work and still don't have to worry too much about tracking with window.name.

View File

@ -0,0 +1,5 @@
How do I remove URL specific settings?
------
If one URL specific setting is set for a URL it shows up at every setting that can have URL specific values. So if you click on the little "x" to reset the value the line for the URL may not disappear. But the input field will appear a little bit gray to indicate that the "normal" value is still used for this URL.
To get rid of this URL line you have to remove all specific settings for this URL. The easiest way to get to know which settings are still set you can go to General > Settings > Export settings > Inspect. There the entry "urlSettings" stores the url specific values.

View File

@ -0,0 +1,10 @@
Page X claims my fingerprint is unique.
------
Having a unique fingerprint is fine as long as it changes. With the default settings of CanvasBlocker the fingerprint should change all the time. But also with other settings (e.g. the stealth preset) that do not change the fingerprint all the time the fingerprint should be unique per domain and therefore prevent tracking. To test this you can check the different fingerprints on [canvasblocker.kkapsner.de](https://canvasblocker.kkapsner.de/test/) and [canvasblocker2.kkapsner.de](https://canvasblocker2.kkapsner.de/test/).
My fingerprint does not change when I reload page X.
------
Some pages do not recalculate the fingerprint upon reload. Make sure you force the recomputation.
But also some CanvasBlocker settings make it to not change the fingerprint upon reload (e.g. the stealth preset).
If you have privacy.resistFingerprinting enabled the fingerprints also may stay the same. But in this case you are not trackable as the fingerprint does not leak any information about your system. See [here](https://github.com/kkapsner/CanvasBlocker/issues/158) and [here](https://github.com/ghacksuserjs/ghacks-user.js/issues/767) for further information.

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

1
.eslintignore Normal file
View File

@ -0,0 +1 @@
!/.tools

93
.eslintrc.json Normal file
View File

@ -0,0 +1,93 @@
{
"env": {
"browser": true,
"commonjs": true,
"es6": true,
"webextensions": true
},
"parserOptions": {
"ecmaVersion": 8,
"ecmaFeatures": {
"jsx": true
},
"sourceType": "script"
},
"plugins": [
"promise",
"eslint-comments",
"html"
],
"extends": [
"eslint:recommended",
"plugin:promise/recommended",
"plugin:eslint-comments/recommended"
],
"globals": {
"exportFunction": false
},
"rules": {
"brace-style": ["error", "stroustrup", {"allowSingleLine": true}],
"comma-spacing": ["error", { "before": false, "after": true }],
"complexity": ["warn", 20],
"consistent-return": "error",
"constructor-super": "warn",
"eqeqeq": "error",
"eslint-comments/no-use": ["error", {"allow": ["eslint-disable-next-line", "globals"]}],
"indent": ["error", "tab", {"SwitchCase": 1}],
"max-depth": ["warn", 4],
"max-len": ["warn", {"code": 120, "tabWidth": 4}],
"max-lines-per-function": ["warn", {"max": 80,"skipBlankLines": true, "skipComments": true}],
"max-lines": ["warn", {"max": 500, "skipBlankLines": true, "skipComments": true}],
"max-params": ["warn", 4],
"no-console": "error",
"no-const-assign": "error",
"no-inner-declarations": "warn",
"no-mixed-spaces-and-tabs": ["error", "smart-tabs"],
"no-prototype-builtins": "off",
"no-this-before-super": "warn",
"no-trailing-spaces": ["error", {"skipBlankLines": true}],
"no-undef": "error",
"no-unreachable": "warn",
"no-unused-vars": "off",
"no-use-before-define": ["error", {"functions": false}],
"no-useless-rename": "warn",
"no-useless-return": "warn",
"no-var": "error",
"quotes": ["error", "double"],
"require-atomic-updates": "off",
"semi": ["error", "always"],
"space-in-parens": ["error", "never"],
"strict": ["error", "function"],
"valid-typeof": "warn"
},
"overrides": [
{
"files": ["detectionTest.js", "modifiedCanvasAPI.js", "options.js", "settingsDisplay.js"],
"rules": {
"max-lines": "off"
}
},
{
"files": ["test/*"],
"rules": {
"no-console": "off"
}
},
{
"files": [".tools/*.js"],
"env": {
"node": true
},
"rules": {
"no-console": "off"
}
},
{
"files": ["*.html", "*.php"],
"rules": {
"no-useless-escape": "off",
"no-undef": "off"
}
}
]
}

43
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,43 @@
<!--- Provide a general summary of the issue in the title above. -->
## Description
<!--- Provide a more detailed introduction to the issue itself. -->
<!--- Why you consider it to be a bug or a useful change/improvement? -->
## Expected Behaviour
<!--- If you're describing a bug, tell us what should happen. -->
<!--- If you're suggesting a change/improvement, tell us how it should work. -->
## Current Behaviour
<!--- If describing a bug, tell us what happens instead of the expected behavior. -->
<!--- If suggesting a change/improvement, explain the difference from current behavior. -->
## Possible Solution
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
<!--- or ideas how to implement the addition or change. -->
## Steps to Reproduce (for bugs)
<!--- Provide a link to a live example, or an unambiguous set of steps to reproduce this bug. -->
1. create a fresh Firefox profile
2.
3.
4.
## Context
<!--- How has this issue affected you? What are you trying to accomplish? -->
<!--- Did you reproduce the problem with a fresh Firefox profile? -->
<!--- Providing context helps us come up with a solution that is most useful in the real world. -->
## Your Environment
<!--- Include as many relevant details about the environment you experienced the bug in. -->
* CanvasBlocker Version used:
* Firefox version incl. 32- or 64-bit:
* Operating System and version (desktop or mobile):
* Installed addons:
## Your Settings
~~~ json
<!--- Copy your CanvasBlocker settings here. -->
<!-- They can be retrieved by checking the expert mode and going to export settings. -->
<!--- You may consider deleting personal data - especially the "persistentRndStorage". -->
~~~

5
.gitignore vendored
View File

@ -1 +1,4 @@
*.svg
printed.png
web-ext-artifacts/
versions/*.xpi
node_modules/

125
.tools/build.js Normal file
View File

@ -0,0 +1,125 @@
const child_process = require("child_process");
const path = require("path");
const yargs = require("yargs");
const args = yargs
.options("type", {
alias: "t",
describe: "Type of the build",
choices: ["alpha", "rc", "release"],
default: "alpha",
})
.help()
.alias("help", "h")
.argv;
const fs = require("fs");
const versionsPath = path.join(__dirname, "..", "versions");
function getXPIFileName(id, version){
"use strict";
return `${id}-${version}.xpi`;
}
async function addAlphaVersionToUpdatesJSON(version){
"use strict";
const updatesPath = path.join(versionsPath, "updates.json");
const data = JSON.parse(await fs.promises.readFile(updatesPath));
const versions = data.addons["CanvasBlocker-Beta@kkapsner.de"].updates;
if (versions.some(function(entry){
return entry.version === version;
})){
return;
}
versions.push({
version,
update_link: `https://canvasblocker.kkapsner.de/versions/${getXPIFileName("canvasblocker_beta", version)}`
});
await fs.promises.writeFile(updatesPath, JSON.stringify(data, undefined, "\t"));
}
async function getAlphaVersion(manifest){
"use strict";
function f(n){
if (n < 10) return "0" + n.toString(10);
return n.toString(10);
}
const now = new Date();
const date = `${now.getFullYear()}${f(now.getMonth() + 1)}${f(now.getDate())}`;
const versionParts = manifest.version.split(".");
while (versionParts.length > 2){
versionParts.pop();
}
const baseVersion = `${versionParts.join(".")}.${date}`;
if (!fs.existsSync(path.join(versionsPath, getXPIFileName("canvasblocker_beta", baseVersion)))){
return baseVersion;
}
let dayTry = 1;
while (fs.existsSync(path.join(versionsPath, getXPIFileName("canvasblocker_beta", `${baseVersion}.${dayTry}`)))){
dayTry += 1;
}
return `${baseVersion}.${dayTry}`;
}
function getRCVersion(manifest){
"use strict";
throw "not implemented";
}
function getReleaseVersion(manifest){
"use strict";
return manifest.version.replace(/^([\d.]+).*$/, "$1");
}
async function run(){
"use strict";
const manifestPath = path.join(__dirname, "../manifest.json");
const oldManifest = await fs.promises.readFile(manifestPath);
const manifest = require(manifestPath);
if (args.type === "alpha" || args.type === "rc"){
manifest.name = "CanvasBlocker-Beta";
["gecko", "gecko_android"].forEach(function(browserType){
if (!manifest.browser_specific_settings[browserType]) return;
manifest.browser_specific_settings[browserType].id = "CanvasBlocker-Beta@kkapsner.de";
});
}
else {
manifest.name = "CanvasBlocker";
["gecko", "gecko_android"].forEach(function(browserType){
if (!manifest.browser_specific_settings[browserType]) return;
manifest.browser_specific_settings[browserType].id = "CanvasBlocker@kkapsner.de";
delete manifest.browser_specific_settings[browserType].update_url;
});
}
if (args.type === "alpha"){
manifest.version = await getAlphaVersion(manifest);
addAlphaVersionToUpdatesJSON(manifest.version);
}
else if (args.type === "rc"){
manifest.version = getRCVersion(manifest);
}
else {
manifest.version = getReleaseVersion(manifest);
}
await fs.promises.writeFile(manifestPath, JSON.stringify(manifest, null, "\t"));
const childArgs = [
"build",
"--overwrite-dest",
"--ignore-files",
"test",
"--ignore-files",
"versions",
"--ignore-files",
"crowdin.yml",
"--ignore-files",
"package*"
];
const child = child_process.spawn("web-ext", childArgs, {stdio: "inherit"});
child.on("close", function(){
fs.promises.writeFile(manifestPath, oldManifest);
});
}
run();

View File

@ -0,0 +1,164 @@
const data = require("./chromeVendors.json");
function addString(string, currentTree){
"use strict";
if (string.length <= 1){
const nextTree = currentTree[string] || {};
currentTree[string] = nextTree;
}
else {
const firstChar = string.substring(0, 1);
const nextTree = currentTree[firstChar] || {};
currentTree[firstChar] = nextTree;
const nextString = string.substring(1);
addString(nextString, nextTree);
}
}
function output(tree){
"use strict";
const keys = Object.keys(tree);
switch (keys.length){
case 0:
return "";
case 1:
return keys[0] + output(tree[keys[0]]);
default:
return "<" + keys.map(key => key + output(tree[key])).join("|") + ">";
}
}
// every string ends with a ) and does not contain <, >, $ or |
data.forEach(function(string){
"use strict";
if (
!string.endsWith(")") ||
string.match(/[<>|$]/)
){
throw string;
}
});
const tree1 = {};
const tree2 = {};
const tree3 = {};
data.every(function(string){
"use strict";
string = string.substring(0, string.length - 1);
const parts = string.split(" Direct", 2);
const parts2 = parts[0].split(" (Microsoft Corporation", 2);
addString(parts2[0], tree1);
if (parts2.length > 1){
addString(" (Microsoft Corporation" + parts2[1], tree2);
}
else {
addString("", tree2);
}
if (parts.length > 1){
addString(" Direct" + parts[1], tree3);
}
else {
addString("", tree3);
}
return true;
});
// const compressed = output(tree1) + output(tree2) + output(tree3) + ")";
const compressed = output(tree1) + output(tree2) +
"< Direct3D<11 vs_<4_<0 ps_4_0|1 ps_4_1>|5_0 ps_5_0>|9<Ex|> vs_<0_0 ps_<2_0|3_0>|2_0 ps_2_0|3_0 ps_3_0>>|>" + ")";
console.log("compressed length", compressed.length);
// console.log(compressed);
function countWords(string){
"use strict";
const words = {};
string.split(/[^0-9a-z]+/i).filter(word => word.length > 2).forEach(function(word){
const wordStats = words[word] || {count: 0};
words[word] = wordStats;
wordStats.count += 1;
});
return words;
}
function wordCompressor(string){
"use strict";
const words = countWords(string);
const duplicatedWord = Object.keys(words)
.map(function(word){
return {
word,
count: words[word].count
};
})
.filter(word => word.count > 1)
.sort((a, b) => b.word.length*b.count - a.word.length*a.count);
let compressed = string;
let index = 0;
const usedWords = [];
for (let i = 0; i < duplicatedWord.length; i += 1){
const replacement = "$" + index.toString(36);
const word = duplicatedWord[i].word;
if (
replacement.length < word.length &&
(word.length - replacement.length) * duplicatedWord[i].count > word.length + 1
){
compressed = compressed.replace(new RegExp("\\b" + word + "\\b", "g"), replacement);
index += 1;
usedWords.push(word);
}
}
return {compressed, usedWords};
}
const {compressed: compressed2, usedWords} = wordCompressor(compressed);
console.log("compressed 2 length", compressed2.length);
console.log(compressed2);
console.log(usedWords.join("|"));
function decompress(string, words){
"use strict";
return string.replace(/\$([0-9a-z]+)/gi, function(m, index){
return words[parseInt(index, 36)];
});
}
const decompressed2 = decompress(compressed2, usedWords);
console.log("test: ", compressed === decompressed2);
for (let start = 0; start < compressed.length; start += 100){
if (compressed.substring(start, start + 100) !== decompressed2.substring(start, start + 100)){
console.log(start);
console.log(compressed.substring(start, start + 100));
console.log(decompressed2.substring(start, start + 100));
}
}
function pickOne(string){
"use strict";
const options = [];
let cumulate = "";
let index = 0;
for (const l = string.length; index < l; index += 1){
const char = string.charAt(index);
if (char === "|"){
options.push(cumulate);
cumulate = "";
}
else if (char === "<"){
const subPick = pickOne(string.substring(index + 1));
cumulate += subPick.value;
index += 1 + subPick.endIndex;
}
else if (char === ">"){
break;
}
else {
cumulate += char;
}
}
options.push(cumulate);
return {value: options[Math.floor(Math.random() * options.length)], endIndex: index};
}
console.log(pickOne(compressed).value);

View File

@ -0,0 +1,17 @@
const en = require("../_locales/en/messages.json");
const enKeys = Object.keys(en);
const language = process.argv[2];
const la = require("../_locales/" + language + "/messages.json");
const laKeys = Object.keys(la);
enKeys.forEach(function(key){
"use strict";
if (en[key].message){
if (!la[key] || !la[key].message){
console.log(key, "missing");
}
}
});

693
.tools/chromeVendors.json Normal file
View File

@ -0,0 +1,693 @@
[
"ANGLE (AMD (ATI) FirePro M8900 (FireGL) Mobility Pro Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD 760G (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD 760G Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (AMD 760G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD FirePro 2270 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (AMD FirePro W5000 (FireGL V) Graphics Adapter Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD M880G with ATI Mobility Radeon HD 4200 )",
"ANGLE (AMD M880G with ATI Mobility Radeon HD 4200 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD M880G with ATI Mobility Radeon HD 4250 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 5450 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 5500 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 5570 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 5670 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 5700 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 5800 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6250 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6250M )",
"ANGLE (AMD Radeon HD 6290 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6290 Graphics (Microsoft Corporation- WDDM v1.20) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6290 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6300 series Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6310 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6310 Graphics )",
"ANGLE (AMD Radeon HD 6310 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6310M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6320 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6320 Graphic Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6320 Graphics )",
"ANGLE (AMD Radeon HD 6320 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6320 Graphics)",
"ANGLE (AMD Radeon HD 6320 series Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6320M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6350 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6370D Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6370M)",
"ANGLE (AMD Radeon HD 6400M Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6410D Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6410D Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6450 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6450 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6450A Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6470M )",
"ANGLE (AMD Radeon HD 6470M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6470M)",
"ANGLE (AMD Radeon HD 6480G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6500 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6500M/5600/5700 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6510 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6520G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6530D Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6550A Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6570 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6570 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6570)",
"ANGLE (AMD Radeon HD 6620G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6630M)",
"ANGLE (AMD Radeon HD 6650A Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6670 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6700 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6730M)",
"ANGLE (AMD Radeon HD 6800 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6800 Series)",
"ANGLE (AMD Radeon HD 6900 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 6900M Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7000 series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7290 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7300 Series Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7300 Series)",
"ANGLE (AMD Radeon HD 7310 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7310 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7310M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7340 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7340 Graphics (Microsoft Corporation - WDDM v1.20) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7340 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7340G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7340M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7400M Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7420G Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7420G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7450 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7450 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7470M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7480D Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7480D Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7500 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7500/7600 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7500G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7500M/7600M Series (Microsoft Corporation - WDDM v1.3) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7520G + 7670M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7520G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7540D Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7550M/7650M Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7550M/7650M Graphics)",
"ANGLE (AMD Radeon HD 7560D Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7570 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7570 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7570M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7580D Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7600G + 6400M Dual Graphics)",
"ANGLE (AMD Radeon HD 7600M Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7610M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7610M)",
"ANGLE (AMD Radeon HD 7640G + 7600M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7640G + 7670M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7640G + 8750M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7640G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7650M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7660D Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7660D)",
"ANGLE (AMD Radeon HD 7660G + 7600M Dual Graphics)",
"ANGLE (AMD Radeon HD 7660G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7670M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7700 Series Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7700 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7800 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 7800 Series)",
"ANGLE (AMD Radeon HD 7900 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8210 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8240 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8250 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8330 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8350 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8400 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8450G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8470 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8470D Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8510G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8550G + 8570M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8550G + HD 8600/8700M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8550G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8570D Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8610G + 8500M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8610G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8650G + 8670M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8650G + 8750M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD 8670D Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD6370D Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD6410D Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD7700 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon HD7770 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon R7 200 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon R9 200 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon(TM) HD 6380G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon(TM) HD 6480G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon(TM) HD 6520G )",
"ANGLE (AMD Radeon(TM) HD 6520G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon(TM) HD 6620G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (AMD Radeon(TM) HD 7450 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ASUS EAH4350 series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ASUS EAH5450 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ASUS EAH5670 Series Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ASUS EAH5770 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ASUS EAH6450 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ASUS EAH6670 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ASUS EAH6970 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ASUS HD7770 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ASUS R9 270 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI FirePro 2450 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI FirePro V3700 (FireGL) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI FirePro V3800 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI FirePro V4800 (FireGL) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon 9600/9700 Series)",
"ANGLE (ATI Mobility Radeon HD 2400 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 2400 XT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 2600 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 3400 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 3430 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 3450 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 3470 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 3650 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4200 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4200 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4250 )",
"ANGLE (ATI Mobility Radeon HD 4250 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4250 Graphics Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4250 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4300 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4300/4500 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4330 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4330)",
"ANGLE (ATI Mobility Radeon HD 4500 Series (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4500 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4500/5100 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4530 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4570 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4570)",
"ANGLE (ATI Mobility Radeon HD 4650 (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 4650 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 5000 Series (Microsoft Corporation - WDDM v1.20) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 5000 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 5145 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 5400 Series )",
"ANGLE (ATI Mobility Radeon HD 5400 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 5430)",
"ANGLE (ATI Mobility Radeon HD 5450 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 545v Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 5470 )",
"ANGLE (ATI Mobility Radeon HD 5470 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 5470 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 5470)",
"ANGLE (ATI Mobility Radeon HD 5650 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon HD 5650)",
"ANGLE (ATI Mobility Radeon HD 6370)",
"ANGLE (ATI Mobility Radeon HD 6550 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon X1300 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon X1600 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Mobility Radeon X1600)",
"ANGLE (ATI Radeon 2100 (Microsoft Corporation - WDDM) Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon 2100 Direct3D9 vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon 2100)",
"ANGLE (ATI Radeon 3000 Graphics (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon 3000 Graphics Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon 3000 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon 3000 Graphics)",
"ANGLE (ATI Radeon 3100 Graphics (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon 3100 Graphics)",
"ANGLE (ATI Radeon HD 2350 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 2400 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 2400 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 2400 Pro )",
"ANGLE (ATI Radeon HD 2400 Pro Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 2400 PRO Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 2400 Pro Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 2400 PRO Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 2400 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 2400 XT (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 2400 XT )",
"ANGLE (ATI Radeon HD 2400 XT Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 2400 XT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 2400 XT)",
"ANGLE (ATI Radeon HD 2600 Pro )",
"ANGLE (ATI Radeon HD 2600 PRO)",
"ANGLE (ATI Radeon HD 2600 XT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 2600 XT)",
"ANGLE (ATI Radeon HD 3200 Graphics (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3200 Graphics Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3200 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3300 Graphics Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3300 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3400 Series Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3400 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3450 - Dell Optiplex Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3450 - Dell Optiplex Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3450 (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3450 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3470 - Dell Optiplex Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3600 Series Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3600 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3650 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 3800 Series Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4200 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4200 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4200)",
"ANGLE (ATI Radeon HD 4250 )",
"ANGLE (ATI Radeon HD 4250 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4250 Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4250)",
"ANGLE (ATI Radeon HD 4300 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4300/4500 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4350 (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4350 )",
"ANGLE (ATI Radeon HD 4350 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4350 Series)",
"ANGLE (ATI Radeon HD 4350)",
"ANGLE (ATI Radeon HD 4550 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4600 Series (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4600 Series )",
"ANGLE (ATI Radeon HD 4600 Series Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4600 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4600 Serisi (Microsoft Corporation- WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4650 (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4650 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4670)",
"ANGLE (ATI Radeon HD 4770 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4800 Series (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4800 Series (Microsoft Corporation WDDM 1.1) )",
"ANGLE (ATI Radeon HD 4800 Series Direct3D11 vs_4_1 ps_4_1)",
"ANGLE (ATI Radeon HD 4800 Series Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4800 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 4800 Series)",
"ANGLE (ATI Radeon HD 4870 X2 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 5400 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 5450 (Microsoft Corporation - WDDM v1.20) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 5450 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 5450 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 5450)",
"ANGLE (ATI Radeon HD 5570 (Microsoft Corporation - WDDM v1.20) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 5570 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 5600 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 5670 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 5700 Series (Microsoft Corporation - WDDM v1.20) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 5700 Series Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 5700 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 5800 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 6230 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD 6350 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon HD4670 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (ATI Radeon X1050 Direct3D9 vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon X1050 Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon X1200 Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon X1200 Series (Microsoft Corporation - WDDM) Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon X1200 Series Direct3D9 vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon X1200 Series Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon X1200 Series)",
"ANGLE (ATI Radeon X1250 Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon X1270 Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon X300/X550/X1050 Series Direct3D9 vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon X300/X550/X1050 Series Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon X300/X550/X1050 Series)",
"ANGLE (ATI Radeon Xpress 1100 Direct3D9 vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon Xpress 1150 Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon Xpress 1150 Series Direct3D9 vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon Xpress 1150 Series Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon Xpress 1200 Series Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon Xpress 1250 Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (ATI Radeon Xpress 200 Series Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (Intel(R) 4 Series Internal Chipset Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (Intel(R) 4 Series Internal Chipset Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) 82915G/GV/910GL Express Chipset Family Direct3D9 vs_0_0 ps_2_0)",
"ANGLE (Intel(R) 82945G Express Chipset Family (Microsoft Corporation - WDDM 1.0) Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) 82945G Express Chipset Family Direct3D9 vs_0_0 ps_2_0)",
"ANGLE (Intel(R) 82945G Express Chipset Family Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) 82945G Express Chipset Family)",
"ANGLE (Intel(R) 946GZ Express Chipset Family Direct3D9 vs_0_0 ps_2_0)",
"ANGLE (Intel(R) 946GZ Express Chipset Family Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) B43 Express Chipset Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) G33/G31 Express Chipset Family (Microsoft Corporation - WDDM 1.0) Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) G33/G31 Express Chipset Family Direct3D9 vs_0_0 ps_2_0)",
"ANGLE (Intel(R) G33/G31 Express Chipset Family Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) G33/G31 Express Chipset Family)",
"ANGLE (Intel(R) G41 Express Chipset (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) G41 Express Chipset (Microsoft Corporation - WDDM 1.1))",
"ANGLE (Intel(R) G41 Express Chipset Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (Intel(R) G41 Express Chipset Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) G41 Express Chipset)",
"ANGLE (Intel(R) G45/G43 Express Chipset (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) G45/G43 Express Chipset Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) G965 Express Chipset Family Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) Graphics Media Accelerator 3150 (Microsoft Corporation - WDDM 1.0) Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) Graphics Media Accelerator 3150 Direct3D9 vs_0_0 ps_2_0)",
"ANGLE (Intel(R) Graphics Media Accelerator 3150 Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) Graphics Media Accelerator 3150)",
"ANGLE (Intel(R) Graphics Media Accelerator 3600 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) Graphics Media Accelerator HD )",
"ANGLE (Intel(R) Graphics Media Accelerator HD Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) HD Graphics 3000 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) HD Graphics 3000)",
"ANGLE (Intel(R) HD Graphics 4000 (Microsoft Corporation - WDDM 1.2) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) HD Graphics 4000 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) HD Graphics 4000)",
"ANGLE (Intel(R) HD Graphics 4400 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) HD Graphics 4600 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) HD Graphics Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (Intel(R) HD Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) HD Graphics Family Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (Intel(R) HD Graphics Family Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) HD Graphics Family)",
"ANGLE (Intel(R) HD Graphics)",
"ANGLE (Intel(R) Q33 Express Chipset Family (Microsoft Corporation - WDDM 1.0) Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) Q33 Express Chipset Family Direct3D9 vs_0_0 ps_2_0)",
"ANGLE (Intel(R) Q33 Express Chipset Family Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) Q35 Express Chipset Family (Microsoft Corporation - WDDM 1.0) Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) Q35 Express Chipset Family Direct3D9 vs_0_0 ps_2_0)",
"ANGLE (Intel(R) Q35 Express Chipset Family Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) Q45/Q43 Express Chipset (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) Q45/Q43 Express Chipset (Microsoft Corporation - WDDM 1.1))",
"ANGLE (Intel(R) Q45/Q43 Express Chipset Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (Intel(R) Q45/Q43 Express Chipset Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Intel(R) Q45/Q43 Express Chipset)",
"ANGLE (Intel(R) Q965/Q963 Express Chipset Family (Microsoft Corporation - WDDM 1.0) Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) Q965/Q963 Express Chipset Family Direct3D9 vs_0_0 ps_2_0)",
"ANGLE (Intel(R) Q965/Q963 Express Chipset Family Direct3D9Ex vs_0_0 ps_2_0)",
"ANGLE (Intel(R) Q965/Q963 Express Chipset Family)",
"ANGLE (Microsoft Basic Render Driver Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Mobile Intel(R) - famiglia Express Chipset 45 (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Mobile Intel(R) 4 Series Express Chipset Family (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Mobile Intel(R) 4 Series Express Chipset Family Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (Mobile Intel(R) 4 Series Express Chipset Family Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Mobile Intel(R) 4 Series Express Chipset Family)",
"ANGLE (Mobile Intel(R) 45 Express Chipset Family (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Mobile Intel(R) 915GM/GMS,910GML Express Chipset Family Direct3D9 vs_0_0 ps_2_0)",
"ANGLE (Mobile Intel(R) 915GM/GMS,910GML Express Chipset Family)",
"ANGLE (Mobile Intel(R) 945 Express Chipset Family)",
"ANGLE (Mobile Intel(R) 945GM Express Chipset Family)",
"ANGLE (Mobile Intel(R) 965 Express Chipset Family (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Mobile Intel(R) 965 Express Chipset Family Direct3D9 vs_0_0 ps_3_0)",
"ANGLE (Mobile Intel(R) 965 Express Chipset Family Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (Mobile Intel(R) 965 Express Chipset Family Direct3D9Ex vs_0_0 ps_3_0)",
"ANGLE (Mobile Intel(R) 965 Express Chipset Family Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Mobile Intel(R) 965 Express Chipset Family)",
"ANGLE (Mobile Intel(R) HD Graphics Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Mobile Intel(R) HD Graphics)",
"ANGLE (NVIDIA GeForce 210 )",
"ANGLE (NVIDIA GeForce 210 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 210 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 210)",
"ANGLE (NVIDIA GeForce 310 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 310M (Microsoft Corporation - WDDM v1.2) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 310M )",
"ANGLE (NVIDIA GeForce 310M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 310M)",
"ANGLE (NVIDIA GeForce 315 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 315M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 405 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 405)",
"ANGLE (NVIDIA GeForce 405M)",
"ANGLE (NVIDIA GeForce 410M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 605 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6100 nForce 405 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6100 nForce 405 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6100)",
"ANGLE (NVIDIA GeForce 610M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6150 LE (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6150 LE Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6150SE nForce 430 (Microsoft Corporation - WDDM v1.2) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6150SE nForce 430 (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6150SE nForce 430 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6150SE nForce 430 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6150SE nForce 430)",
"ANGLE (NVIDIA GeForce 6200 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6200 TurboCache(TM) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6500 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6600 (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6600 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 6600 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7000M / nForce 610M Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7000M / nForce 610M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7025 / NVIDIA nForce 630a (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7025 / NVIDIA nForce 630a )",
"ANGLE (NVIDIA GeForce 7025 / NVIDIA nForce 630a Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7025 / NVIDIA nForce 630a Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7025 / NVIDIA nForce 630a)",
"ANGLE (NVIDIA GeForce 7050 / NVIDIA nForce 620i Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7050 PV / NVIDIA nForce 630a Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7100 / NVIDIA nForce 630i Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7100 GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7150M / nForce 630M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7300 GS Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7300 GT (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7300 GT Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7300 GT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7300 LE (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7300 LE Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7300 SE/7200 GS (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7300 SE/7200 GS Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7300 SE/7200 GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 7900 GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8200 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8200M G Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8200M G)",
"ANGLE (NVIDIA GeForce 8300 GS )",
"ANGLE (NVIDIA GeForce 8300 GS Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8300 GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8400 GS (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8400 GS Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8400 GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8400 GS)",
"ANGLE (NVIDIA GeForce 8400GS Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8400GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8400M GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8400M GT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8500 GT Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8500 GT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8600 GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8600 GT (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8600 GT )",
"ANGLE (NVIDIA GeForce 8600 GT Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8600 GT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8600 GT)",
"ANGLE (NVIDIA GeForce 8600 GTS (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8600 GTS Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8600 GTS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8600GS (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8600M GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8600M GT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8800 GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8800 GT Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8800 GT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8800 GTS 512 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 8800 GTS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9100 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9200 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9200M GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9300 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9300 GE (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9300 GE Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9300 GE Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9300M GS (Microsoft Corporation - WDDM v1.1))",
"ANGLE (NVIDIA GeForce 9300M GS )",
"ANGLE (NVIDIA GeForce 9300M GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9400 GT (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9400 GT )",
"ANGLE (NVIDIA GeForce 9400 GT Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9400 GT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9400 GT)",
"ANGLE (NVIDIA GeForce 9400M )",
"ANGLE (NVIDIA GeForce 9500 GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9500 GS)",
"ANGLE (NVIDIA GeForce 9500 GT (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9500 GT Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9500 GT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9500 GT)",
"ANGLE (NVIDIA GeForce 9500M GS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9600 GSO 512 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9600 GT (Microsoft Corporation - WDDM v1.1))",
"ANGLE (NVIDIA GeForce 9600 GT Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9600 GT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9600 GT)",
"ANGLE (NVIDIA GeForce 9600M GS)",
"ANGLE (NVIDIA GeForce 9600M GT Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9600M GT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9650M GT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9700M GTS Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9800 GT (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9800 GT (Microsoft Corporation - WDDM v1.1))",
"ANGLE (NVIDIA GeForce 9800 GT )",
"ANGLE (NVIDIA GeForce 9800 GT Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9800 GT Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce 9800 GTX/9800 GTX+ Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce FX 5200 Direct3D9 vs_2_0 ps_2_0)",
"ANGLE (NVIDIA GeForce G 103M )",
"ANGLE (NVIDIA GeForce G 105M )",
"ANGLE (NVIDIA GeForce G 105M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce G100 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce G100)",
"ANGLE (NVIDIA GeForce G102M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce G105M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce G210 )",
"ANGLE (NVIDIA GeForce G210 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce G210)",
"ANGLE (NVIDIA GeForce G210M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce Go 7300 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 120M)",
"ANGLE (NVIDIA GeForce GT 220 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 220 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 220)",
"ANGLE (NVIDIA GeForce GT 230 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 230M )",
"ANGLE (NVIDIA GeForce GT 230M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 240 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 240 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 240)",
"ANGLE (NVIDIA GeForce GT 240M )",
"ANGLE (NVIDIA GeForce GT 240M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 320 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 320M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 330 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 330M )",
"ANGLE (NVIDIA GeForce GT 330M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 335M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 420 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 420M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 425M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 430 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 430 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 430)",
"ANGLE (NVIDIA GeForce GT 440 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 440 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 440)",
"ANGLE (NVIDIA GeForce GT 520 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 520 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 520)",
"ANGLE (NVIDIA GeForce GT 520M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 520M)",
"ANGLE (NVIDIA GeForce GT 525M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 530 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 545 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 555M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 610 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 610)",
"ANGLE (NVIDIA GeForce GT 620 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 620)",
"ANGLE (NVIDIA GeForce GT 625 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 630 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 630 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 630M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 635 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 640 )",
"ANGLE (NVIDIA GeForce GT 640 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 640)",
"ANGLE (NVIDIA GeForce GT 640M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 650M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 740M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GT 755M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTS 240 Direct3D11 vs_4_0 ps_4_0)",
"ANGLE (NVIDIA GeForce GTS 250 (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTS 250 (Microsoft Corporation - WDDM v1.1))",
"ANGLE (NVIDIA GeForce GTS 250 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTS 250 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTS 250)",
"ANGLE (NVIDIA GeForce GTS 350M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTS 450 )",
"ANGLE (NVIDIA GeForce GTS 450 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTS 450 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTS 450)",
"ANGLE (NVIDIA GeForce GTX 260 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 275 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 285 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 295 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 460 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 460 SE Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 460)",
"ANGLE (NVIDIA GeForce GTX 460M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 480 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 550 Ti Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 550 Ti)",
"ANGLE (NVIDIA GeForce GTX 560 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 560 Ti )",
"ANGLE (NVIDIA GeForce GTX 560 Ti Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 560M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 570 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 580 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 580M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 650 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 650 Ti BOOST Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 650 Ti Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 650)",
"ANGLE (NVIDIA GeForce GTX 660 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 660 Ti Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 660M )",
"ANGLE (NVIDIA GeForce GTX 660M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 670 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 670)",
"ANGLE (NVIDIA GeForce GTX 675M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 680 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 690 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 760 (192-bit) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 760 Direct3D11 vs_5_0 ps_5_0)",
"ANGLE (NVIDIA GeForce GTX 760 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 770 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA GeForce GTX 780 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA ION Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA MCP67M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA nForce 750a SLI Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA NVS 300 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA NVS 3100M )",
"ANGLE (NVIDIA NVS 3100M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA NVS 4200M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA NVS 5100M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA NVS 5200M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA NVS 5400M )",
"ANGLE (NVIDIA Quadro 1000M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro 2000M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro 600 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro FX 1500M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro FX 1700 (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro FX 1700 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro FX 1800 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro FX 2500M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro FX 2700M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro FX 3700 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro FX 570 (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro FX 570 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro FX 580 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro FX 770M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro FX 880M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro K3000M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro K600 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro NVS 110M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro NVS 135M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro NVS 140M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro NVS 140M)",
"ANGLE (NVIDIA Quadro NVS 160M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro NVS 160M)",
"ANGLE (NVIDIA Quadro NVS 285 Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro NVS 290 (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA Quadro NVS 290 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Radeon (TM) HD 6470M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Radeon (TM) HD 6490M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Radeon HD 6470M Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Radeon X1300/X1550 Series (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Radeon X1300/X1550 Series Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (Radeon X1300/X1550 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Radeon X1550 64-bit (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Radeon X1550 Series (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Radeon X1650 SE Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Radeon X1650 Series (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Radeon X1650 Series )",
"ANGLE (Radeon X1650 Series Direct3D9 vs_3_0 ps_3_0)",
"ANGLE (Radeon X1650 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Radeon X1950 Series Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Radeon X300/X550/X1050 Series (Microsoft Corporation - WDDM) Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (Radeon X300/X550/X1050 Series Direct3D9 vs_2_0 ps_2_0)",
"ANGLE (Radeon X800 GTO (Microsoft Corporation - WDDM) Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (RDPDD Chained DD Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (Royal BNA Driver Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (RS880 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (SiS Mirage 3 Graphics Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (SiS Mirage 3 Graphics)",
"ANGLE (VIA Chrome9 HC IGP Family WDDM Direct3D9Ex vs_2_0 ps_2_0)",
"ANGLE (WinFast GT 640(NVIDIA) Direct3D9Ex vs_3_0 ps_3_0)"
]

View File

@ -0,0 +1,174 @@
const fs = require("fs");
const path = require("path");
const util = require("util");
function getMessagesInContent(content){
"use strict";
const foundMessages = [];
[
/\b(?:_|browser.i18n.getMessage|extension.getTranslation|notify|extension)\(["']([^"']+)["']\s*(?:\)|,)/g,
/\b(?:messageId|name|getTranslation)\s*:\s*["']([^"']+)["']/g,
].forEach(function(re){
let match;
while ((match = re.exec(content)) !== null){
foundMessages.push(match[1].toLowerCase());
}
});
return foundMessages;
}
async function getMessagesInFile(path){
"use strict";
const exists = await util.promisify(fs.exists)(path);
if (exists){
const content = await util.promisify(fs.readFile)(path, {encoding: "UTF-8"});
return getMessagesInContent(content);
}
else {
console.log("file does not exist:", path);
return [];
}
}
async function getMessagesInFolder(folder){
"use strict";
const files = await util.promisify(fs.readdir)(folder, {encoding: "UTF-8"});
const messages = await Promise.all(
files.filter(function(file){
return !file.startsWith(".");
}).map(function(file){
return path.join(folder, file);
}).map(async function(path){
const stat = await util.promisify(fs.stat)(path);
if (stat.isDirectory()){
return getMessagesInFolder(path);
}
else {
if (path.endsWith(".js")){
return getMessagesInFile(path);
}
else {
return [];
}
}
})
);
const flat = [];
messages.forEach(function(messages){
messages.forEach(function(message){
flat.push(message);
});
});
return flat;
}
async function getSettingMessages(){
"use strict";
const settingStrings = require("../lib/settingStrings");
const settingDefinitions = require("../lib/settingDefinitions");
function getDefinition(name){
return settingDefinitions.filter(function(settingDefinition){
return settingDefinition.name === name;
})[0];
}
const settingsDisplay = require("../options/settingsDisplay");
const foundMessages = [];
settingsDisplay.forEach(function(groupDefinition){
if (groupDefinition.name){
foundMessages.push("group_" + groupDefinition.name.toLowerCase());
}
groupDefinition.sections.forEach(function(sectionDefinition){
if (sectionDefinition.name){
foundMessages.push("section_" + sectionDefinition.name.toLowerCase());
}
sectionDefinition.settings.forEach(function(display){
let settingDefinition = getDefinition(display.name);
if (!settingDefinition){
settingDefinition = display;
display.action = true;
}
if (settingDefinition){
if (display.inputs){
settingDefinition.inputs = display.inputs.map(function(input){
return getDefinition(input);
});
}
else if (display.actions){
settingDefinition.actions = display.actions.map(function(action){
return {name: action};
});
}
settingStrings.getMessages(settingDefinition).forEach(function(message){
foundMessages.push(message.toLowerCase());
});
}
});
});
});
const presets = require("../options/presets.json");
Object.keys(presets).forEach(function(preset){
foundMessages.push("preset_" + preset + "_title");
foundMessages.push("preset_" + preset + "_description");
});
return foundMessages.map(function(message){return message.toLowerCase();});
}
async function getKnownMessages(){
"use strict";
return [
"addon_title",
"addon_description",
"urlSettings_title",
"installnotice",
"presets_installnotice",
"updatenotice",
"disableNotifications",
"showoptions",
"displayHiddenSettings_title",
"displayHiddenSettings_description",
"browseraction_settings",
"browseraction_test",
"browseraction_review",
"browseraction_reportIssue",
].map(function(message){
return message.toLowerCase();
});
}
async function main(){
"use strict";
const en = require("../_locales/en/messages.json");
const declaredMessages = Object.keys(en)
// .filter(function(key){return en[key].message;})
.map(function(key){
return key.toLowerCase();
});
const [settingMessages, fileMessages, knownMessages] = await Promise.all([
getSettingMessages(),
getMessagesInFolder(path.join(__dirname, "..")),
getKnownMessages()]
);
declaredMessages.forEach(function(message){
if (
fileMessages.indexOf(message) === -1 &&
settingMessages.indexOf(message) === -1 &&
knownMessages.indexOf(message) === -1
){
console.log(`usage of ${message} not found`);
}
});
}
main();

92
.tools/translate.js Normal file
View File

@ -0,0 +1,92 @@
const fs = require("fs");
const path = require("path");
const util = require("util");
const en = require("../_locales/en/messages.json");
const enKeys = Object.keys(en);
const language = process.argv[2];
function getTranslationPath(language){
"use strict";
return path.join(__dirname, "../_locales/" + language + "/messages.json");
}
async function loadTranslation(language){
"use strict";
const path = getTranslationPath(language);
const exists = await util.promisify(fs.exists)(path);
if (exists){
console.log("language exists -> load data");
const data = await util.promisify(fs.readFile)(path, {encoding: "UTF-8"});
return JSON.parse(data);
}
else {
console.log("language does not exist -> create it");
return {};
}
}
async function saveTranslation(language, data){
"use strict";
const path = getTranslationPath(language);
return await util.promisify(fs.writeFile)(path, JSON.stringify(data, null, "\t"));
}
async function getInput(prompt){
"use strict";
return new Promise(function(resolve){
process.stdout.write(prompt);
process.stdin.setEncoding("utf8");
process.stdin.resume();
process.stdin.on("data", function onData(data){
process.stdin.removeListener("data", onData);
process.stdin.pause();
resolve(data.replace(/[\n\r]+$/, ""));
});
});
}
async function askForTranslation(key){
"use strict";
const enData = en[key];
console.log("English translation for", key, ":", enData.message);
if (enData.description){
console.log("\nDescription:", enData.description);
}
return getInput("Please enter translation: ");
}
async function translate(language){
"use strict";
const originalData = await loadTranslation(language);
const data = {};
for (let i = 0; i < enKeys.length; i += 1){
const key = enKeys[i];
const oldData = originalData[key];
const enData = en[key];
if (oldData && oldData.message && oldData.message.trim()){
data[key] = oldData;
}
else {
data[key] = {
message: enData.message.trim() === ""? "": await askForTranslation(key),
description: (oldData && oldData.description) || enData.description
};
}
}
return data;
}
(async function(){
"use strict";
const data = await translate(language);
saveTranslation(language, data);
}());

84
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,84 @@
{
"cSpell.words": [
"arial",
"Benachrichtigungsdetails",
"benachrichtigungsicon",
"Blockiermodi",
"Blockiermodus",
"canvasblocker",
"Captcha",
"checkmark",
"collapser",
"Coord",
"darkgreen",
"dont",
"fakeable",
"Fenix",
"fragmenter",
"Funktionalitätstest",
"Funktionalitätstests",
"graytext",
"Hyrp",
"iframe",
"ignorelist",
"Ignorierliste",
"KHTML",
"Krasnaya",
"lightgray",
"Maleficient",
"mediump",
"micrococo",
"monero",
"monospace",
"Nachfrageverweigerungsmodus",
"nocanvas",
"Oakenpants",
"onedrive",
"onloaded",
"oscpu",
"Palemoon",
"paypal",
"PDFs",
"Ploshchad",
"prefs",
"promisify",
"recaptcha",
"Rect",
"Rects",
"ruleset",
"spodermenpls",
"Spoofer",
"statechange",
"Strg",
"SVGAPI",
"Thorin",
"Tiie",
"unticking",
"Vortäuschaktion",
"Vortäuschgröße",
"Vortäuschrate",
"Waterfox",
"webgl",
"whitelisted",
"writeln",
"wyciwyg",
"yfdyh"
],
"cSpell.language": "en,de,en-GB",
"cSpell.ignorePaths": [
"**/package-lock.json",
"**/node_modules/**",
"**/vscode-extension/**",
"**/.git/objects/**",
".vscode",
".eslintrc.json",
".tools/chromeVendors.json"
],
"eslint.validate": [
"javascript",
"php",
"html"
],
"eslint.lintTask.enable": true,
"cSpell.enabled": true
}

241
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,241 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "eslint",
"type": "shell",
"windows": {
"command": "eslint"
},
"linux": {
"command": "eslint"
},
"osx": {
"command": "eslint"
},
"args": [
"./",
"--ext",
".js,.html,.php"
],
"presentation": {
"echo": true,
"reveal": "silent",
"focus": false,
"panel": "shared"
},
"problemMatcher": "$eslint-stylish"
},
{
"label": "run",
"type": "shell",
"windows": {
"command": "web-ext"
},
"linux": {
"command": "web-ext"
},
"osx": {
"command": "web-ext"
},
"args": [
"run",
"-f",
"nightly",
"--url",
"http://canvasblocker.localhost/test/"
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": []
},
{
"label": "run current",
"type": "shell",
"windows": {
"command": "web-ext"
},
"linux": {
"command": "web-ext"
},
"osx": {
"command": "web-ext"
},
"args": [
"run",
"--url",
"http://canvasblocker.localhost/test/"
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": []
},
{
"label": "run esr",
"type": "shell",
"windows": {
"command": "web-ext"
},
"linux": {
"command": "web-ext"
},
"osx": {
"command": "web-ext"
},
"args": [
"run",
"-f",
"firefox-esr",
"--url",
"http://canvasblocker.localhost/test/"
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": []
},
{
"label": "run beta",
"type": "shell",
"windows": {
"command": "web-ext"
},
"linux": {
"command": "web-ext"
},
"osx": {
"command": "web-ext"
},
"args": [
"run",
"-f",
"firefox-beta",
"--url",
"http://canvasblocker.localhost/test/"
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": []
},
{
"label": "build",
"type": "shell",
"windows": {
"command": "web-ext"
},
"linux": {
"command": "web-ext"
},
"osx": {
"command": "web-ext"
},
"args": [
"build",
"--overwrite-dest",
"--ignore-files",
"test",
"--ignore-files",
"versions",
"--ignore-files",
"crowdin.yml",
"--ignore-files",
"package*"
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": []
},
{
"label": "build alpha",
"type": "shell",
"windows": {
"command": "node"
},
"linux": {
"command": "node"
},
"osx": {
"command": "node"
},
"args": [
".tools/build.js",
"--type",
"alpha"
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": []
},
{
"label": "web-ext lint",
"type": "shell",
"windows": {
"command": "web-ext"
},
"linux": {
"command": "web-ext"
},
"osx": {
"command": "web-ext"
},
"args": [
"lint",
"--ignore-files",
"test"
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": []
},
{
"label": "open git UI",
"type": "shell",
"windows": {
"command": "git-cola"
},
"linux": {
"command": "git-cola"
},
"osx": {
"command": "git-cola"
},
"args": [],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": []
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

BIN
Icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -0,0 +1,65 @@
CanvasBlocker [![codebeat badge](https://codebeat.co/badges/0edd6c9f-250a-4f1e-9c64-0958741522af)](https://codebeat.co/projects/github-com-kkapsner-canvasblocker-master)
=====
This add-on allows users to prevent websites from using some Javascript APIs to fingerprint them. Users can choose to block the APIs entirely on some or all websites (which may break some websites) or just block or fake its fingerprinting-friendly readout API.
**IMPORTANT**: you should only have ONE addon/setting set that protects an API. Otherwise you could face massive performance issues. (E.g. EclipsedMoon for Palemoon has 'canvas.poison' which is known to cause issues: https://github.com/kkapsner/CanvasBlocker/issues/253#issuecomment-459499290)
But setting privacy.resistFingerprinting to true and/or using the new fingerprinting protection introduced with Firefox 67 is fine.
-----
Protected "fingerprinting" APIs:
* canvas 2d
* webGL
* audio
* history
* window (disabled by default)
* DOMRect
* SVG
* TextMetrics
* navigator (disabled by default)
* screen
More information on fingerprinting can be found at:
* &lt;canvas&gt;: https://www.browserleaks.com/canvas
* audio:
* https://audiofingerprint.openwpm.com/ (very poorly written = slow)
* https://webtransparency.cs.princeton.edu/webcensus/#audio-fp
* DOMRect:
* http://jcarlosnorte.com/security/2016/03/06/advanced-tor-browser-fingerprinting.html
* https://browserleaks.com/rects
* https://github.com/ghacksuserjs/ghacks-user.js/wiki/Appendix-A---Test-Sites
-----
Beta versions can be found at https://canvasblocker.kkapsner.de/versions/.
-----
The different block modes are:
* fake: Canvas Blocker's default setting, and my favorite! All websites not on the white list or black list can use the protected APIs. But values obtained by the APIs are altered so that a consistent fingerprinting is not possible
* ask for permission: If a website is not listed on the white list or black list, the user will be asked if the website should be allowed to use the protected APIs each time they are called.
* block everything: Ignore all lists and block the protected APIs on all websites.
* allow only white list: Only websites in the white list are allowed to use the protected APIs.
* block only black list: Block the protected APIs only for websites on the black list.
* allow everything: Ignore all lists and allow the protected APIs on all websites.
-----
You can contribute to CanvasBlocker by translating it and/or improving the translations. For further instructions go to https://github.com/kkapsner/CanvasBlocker/issues/420.
Special thanks to:
* spodermenpls for finding all the typos
* Thorin-Oakenpants for the icon idea
* anthologist and unbranched for the Italian translation
* Maleficient for the French translation
* yfdyh000 and KrasnayaPloshchad for the Chinese translation
* micrococo for the Spanish translation
* STim99 for the Russian translation
-----
If you want to support this addon you can donate to the following addresses:
* bitcoin: 159Y9BLcfHyrp6wj6f3syEuk92xkRVTiie
* bitcoin cash:qrchnszkdwv9knhg9wjucrqy43rpl4klkq7jhkc8dz
* monero: 482QYZaagALWtPmwbptwBaexDYmcVsJrhJp2VVjTgjYA3Kk1YyMdSg9Wz2qz1Gh31E843PFVCDWS4hR4Bjf6ipWuB9iz2cs

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 KiB

1670
_locales/cs/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/de/messages.json Normal file

File diff suppressed because it is too large Load Diff

1739
_locales/en/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/es/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/fr/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/hi/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/it/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/ja/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/ko/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/lt/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/nb/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/pl/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/pt/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/pt_BR/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/ru/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/zh_CN/messages.json Normal file

File diff suppressed because it is too large Load Diff

1670
_locales/zh_TW/messages.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,71 @@
body {
padding: 0.5em;
margin: 0;
}
div {
display: block;
}
.action .icon {
vertical-align: text-bottom;
height: 19px;
width: 19px;
margin-right: 0.25em;
background-color: currentColor;
mask-size: 100%;
display: inline-block;
}
.action.search {
padding-left: calc(0.5em + 19px + 0.25em);
}
#headerActions {
display: grid;
grid-template-columns: 0.5fr 50px 0.5fr;
grid-template-rows: auto;
}
#addonStatus {
grid-row: 1 / 2;
grid-column: 2 / 3;
border: none;
display: block;
margin: 5px auto;
width: 40px;
min-width: 0;
height: 40px;
background: none;
background-position: 50%;
background-size: 100%;
cursor: pointer;
}
#addonStatus.unknown {
background-image: radial-gradient(black, rgba(0, 0, 0, 0), transparent);;
}
#addonStatus.off {
background-image: url(../icons/browserAction-CBoff.svg);
}
#addonStatus.on {
background-image: url(../icons/browserAction-CBon.svg);
}
#reload {
grid-row: 1 / 2;
grid-column: 3 / 4;
cursor: pointer;
height: 19px;
width: 19px;
align-self: center;
justify-self: left;
margin-left: 1em;
background-color: currentColor;
mask-size: 100%;
mask-image: url(../icons/browserAction-reload.svg);
}
#reload.hidden {
display: none;
}

View File

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<head>
<title>CanvasBlocker browser action</title>
<link href="browserAction.css" rel="stylesheet" type="text/css">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="headerActions">
<button id="addonStatus" class="undefined"></button>
<div id="reload" class="hidden"></div>
</div>
<div id="actions" class="stackedInputs"></div>
<div id="version" class="versionDisplay"></div>
<script src="../lib/require.js"></script>
<script src="../lib/logging.js"></script>
<script src="../lib/extension.js"></script>
<script src="../lib/settingDefinitions.js"></script>
<script src="../lib/settingContainers.js"></script>
<script src="../lib/settings.js"></script>
<script src="../lib/lists.js"></script>
<script src="../lib/theme.js"></script>
<script src="browserAction.js"></script>
</body>
</html>

View File

@ -0,0 +1,171 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
(function(){
"use strict";
const extension = require("../lib/extension");
const logging = require("../lib/logging");
const settings = require("../lib/settings");
const settingContainers = require("../lib/settingContainers");
const lists = require("../lib/lists");
require("../lib/theme").init();
logging.message("Opened browser action");
browser.tabs.query({active: true, currentWindow: true}).then(async function([currentTab]){
function isWhitelisted(url){
if (!(url instanceof URL)){
url = new URL(url);
}
return lists.get("white").match(url) ||
settings.get("blockMode", url).startsWith("allow");
}
const currentURL = new URL(currentTab.url);
const reloadButton = document.getElementById("reload");
reloadButton.addEventListener("click", async function(){
await browser.tabs.reload(currentTab.id, {bypassCache: true});
window.close();
});
const addonStatus = document.getElementById("addonStatus");
addonStatus.addEventListener("click", async function(){
reloadButton.classList.toggle("hidden");
if (isWhitelisted(currentURL)){
settingContainers.resetUrlValue("blockMode", currentURL);
if (settings.get("blockMode").startsWith("allow")){
settings.set("blockMode", "fake", currentURL.host);
}
if (settings.get("blockDataURLs")){
settingContainers.resetUrlValue("blockDataURLs", currentURL);
}
const entries = lists.get("white").filter(e => e.match(currentURL)).map(e => e.value);
await Promise.all([
lists.removeFrom("white", entries),
lists.removeFrom("sessionWhite", entries)
]);
}
else {
settings.set("blockMode", "allowEverything", currentURL.hostname);
if (settings.get("blockDataURLs")){
settings.set("blockDataURLs", false, currentURL.hostname);
}
}
update();
});
function update(){
if (isWhitelisted(currentURL)){
addonStatus.className = "off";
addonStatus.title = extension.getTranslation("browserAction_status_off");
}
else {
addonStatus.className = "on";
addonStatus.title = extension.getTranslation("browserAction_status_on");
}
}
return settings.onloaded(update);
}).catch(function(){});
const actionDefinitions = [
{
label: "settings",
icon: extension.getURL("icons/pageAction-showOptions.svg"),
action: function(){
if (browser.runtime && browser.runtime.openOptionsPage){
browser.runtime.openOptionsPage();
}
else {
browser.tabs.create({url: extension.getURL("options/options.html")});
}
window.close();
}
},
{
label: "faq",
icon: extension.getURL("icons/browserAction-faq.svg"),
action: function(){
browser.tabs.create({url: "https://canvasblocker.kkapsner.de/faq/"});
window.close();
}
},
{
label: "test",
advanced: true,
icon: extension.getURL("icons/browserAction-test.svg"),
action: function(){
browser.tabs.create({url: "https://canvasblocker.kkapsner.de/test"});
window.close();
}
},
{
label: "review",
icon: extension.getURL("icons/browserAction-review.svg"),
action: function(){
browser.tabs.create({url: "https://addons.mozilla.org/firefox/addon/canvasblocker/reviews/"});
window.close();
}
},
{
label: "reportIssue",
icon: extension.getURL("icons/browserAction-reportIssue.svg"),
action: function(){
browser.tabs.create({url: "https://github.com/kkapsner/CanvasBlocker/issues"});
window.close();
}
},
];
settings.onloaded(async function(){
const actions = document.getElementById("actions");
actionDefinitions.forEach(function(action){
logging.verbose("Action", action);
if (action.advanced && !settings.displayAdvancedSettings){
logging.verbose("Hiding advanced action");
return;
}
const actionButton = document.createElement("button");
actionButton.className = "action";
const icon = document.createElement("span");
icon.className = "icon";
function setIcon(url){
icon.style.maskImage = "url(" + url + ")";
}
setIcon(action.icon);
actionButton.appendChild(icon);
const textNode = document.createTextNode("");
function setLabel(label){
textNode.nodeValue = extension.getTranslation("browserAction_" + label) || label;
}
setLabel(action.label);
actionButton.appendChild(textNode);
actionButton.addEventListener("click", function(){
action.action.call(this, {setIcon, setLabel});
});
actions.appendChild(actionButton);
});
const search = document.createElement("input");
search.placeholder = extension.getTranslation("search");
search.className = "search action";
actions.appendChild(search);
search.focus();
search.addEventListener("keypress", function(event){
if ([10, 13].indexOf(event.keyCode) !== -1){
browser.tabs.create({url: extension.getURL(
"options/options.html" +
"?search=" +
encodeURIComponent(this.value)
)});
window.close();
}
});
});
window.addEventListener("load", async function(){
extension.displayVersion("version", 250);
});
}());

Binary file not shown.

8
crowdin.yml Normal file
View File

@ -0,0 +1,8 @@
files:
- source: /_locales/en/*.json
translation: /_locales/%two_letters_code%/%original_file_name%
languages_mapping:
two_letters_code:
zh-CN: zh_CN
pt-BR: pt_BR
zh-TW: zh_TW

View File

@ -1,316 +0,0 @@
/* global self, window, CanvasRenderingContext2D, WebGLRenderingContext, console, unsafeWindow, exportFunction, cloneInto, checkURL, getDomainRegExpList */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
(function(){
"use strict";
var settings = {
showCallingFile: false,
showCompleteCallingStack: false
};
var blockMode = {
getContext: {
name: "getContext",
status: "block",
askText: {
visible: "askForVisiblePermission",
invisible: "askForInvisiblePermission",
nocanvas: "askForPermission"
},
askStatus: {
askOnce: false,
alreadyAsked: {},
answer: {}
}
},
readAPI: {
name: "readAPI",
status: "allow",
askText: {
visible: "askForVisibleReadoutPermission",
invisible: "askForInvisibleReadoutPermission",
nocanvas: "askForReadoutPermission"
},
askStatus: {
askOnce: false,
alreadyAsked: {},
answer: {}
}
}
};
var undef;
var randomImage = (function(){
var length = Math.floor(20 + Math.random() * 100);
var bytes = "";
for (var i = 0; i < length; i += 1){
bytes += String.fromCharCode(Math.floor(Math.random() * 256));
}
return bytes;
}());
// parse calling stack
function errorToCallingStackMsg(error){
var msg = "";
var callers = error.stack.trim().split("\n");
//console.log(callers);
var findme = callers.shift(); // Remove us from the stack
findme = findme.replace(/(:[0-9]+){1,2}$/, ""); // rm line & column
// Eliminate squashed stack. stack may contain 2+ stacks, but why...
var inDoubleStack = false;
callers = callers.filter(function(caller){
var doubleStackStart = caller.search(findme) !== -1;
inDoubleStack = inDoubleStack || doubleStackStart;
return !inDoubleStack;
});
msg += "\n\n" + _("sourceOutput") + ": ";
if (settings.showCompleteCallingStack){
msg += callers.reduce(function(stack, c){
return stack + "\n\t" + _("stackEntryOutput", parseStackEntry(c));
}, "");
}
else{
msg += _("stackEntryOutput", parseStackEntry(callers[0]));
}
return msg;
}
// Check canvas appearance
function canvasAppearance(context){
var oldBorder = false;
var canvas = false;
var inDOM = null;
if (context){
if (context.nodeName === "CANVAS"){
canvas = context;
}
else if (
context instanceof CanvasRenderingContext2D ||
context instanceof WebGLRenderingContext
){
canvas = context.canvas;
}
}
if (canvas){
oldBorder = canvas.style.border;
canvas.style.border = "2px solid red";
inDOM = canvas.ownerDocument.contains(canvas);
}
return {
canvas: canvas,
askCategory: canvas? (inDOM? "visible": "invisible"): "nocanvas",
get text(){
var text = canvas? (this.visible? "visible": "invisible"): "nocanvas";
Object.defineProperty(this, "text", {value: text});
return text;
},
inDom: inDOM,
get visible(){
var visible = inDOM;
if (inDOM){
canvas.scrollIntoView();
var rect = canvas.getBoundingClientRect();
var foundEl = document.elementFromPoint(rect.left + rect.width / 2, rect.top + rect.height / 2);
visible = (foundEl === canvas);
}
Object.defineProperty(this, "visible", {value: visible});
return visible;
},
reset: function(){
if (canvas){
canvas.style.border = oldBorder;
}
}
};
}
// changed functions
var changedFunctions = {
getContext: {
mode: blockMode.getContext,
object: unsafeWindow.HTMLCanvasElement
},
toDataURL: {
mode: blockMode.readAPI,
object: unsafeWindow.HTMLCanvasElement,
fake: function(){
var type = arguments[0] || "image/png";
return "data:" + type + ";base64," + btoa(randomImage);
}
},
toBlob: {
mode: blockMode.readAPI,
object: unsafeWindow.HTMLCanvasElement,
fake: function(callback){
var type = arguments[0] || "image/png";
var blob = new window.Blob(randomImage, {type: type});
callback(blob);
},
exportOptions: {allowCallbacks: true}
},
mozGetAsFile: {
mode: blockMode.readAPI,
object: unsafeWindow.HTMLCanvasElement
},
getImageData: {
mode: blockMode.readAPI,
object: unsafeWindow.CanvasRenderingContext2D,
fake: function(sx, sy, sw, sh){
var l = sw * sh * 4;
var data = new Uint8ClampedArray(l);
for (var i = 0; i < l; i += 1){
data[i] = Math.floor(
Math.random() * 256
);
}
var imageData = new window.ImageData(sw, sh);
imageData.data.set(cloneInto(data, unsafeWindow));
return imageData;
}
},
readPixels: {
mode: blockMode.readAPI,
object: unsafeWindow.WebGLRenderingContext,
fake: function(x, y, width, height, format, type, pixels){
// fake not working due to XRay copy restrictions...
// for (var i = 0; i < pixels.length; i += 1){
// pixels[i] = Math.floor(
// Math.random() * 256
// );
// }
}
}
};
Object.keys(changedFunctions).forEach(function(name){
var changedFunction = changedFunctions[name];
var original = changedFunction.object.prototype[name];
Object.defineProperty(
changedFunction.object.prototype,
name,
{
enumerable: true,
configureable: false,
get: exportFunction(function(){
var status = changedFunction.mode.status;
var callingStackMsg = errorToCallingStackMsg(new Error());
if (status === "ask"){
var askStatus = changedFunction.mode.askStatus;
var appearance = canvasAppearance(this);
if (askStatus.askOnce && askStatus.alreadyAsked[appearance.askCategory]){
// console.log("already asked");
status = askStatus.answer[appearance.askCategory];
}
else {
//console.log("asking");
var msg = _(changedFunction.mode.askText[appearance.text]);
if (settings.showCallingFile){
msg += callingStackMsg;
}
status = window.confirm(msg) ? "allow": "block";
askStatus.alreadyAsked[appearance.text] = true;
askStatus.answer[appearance.text] = status;
//console.log("asking (done)");
appearance.reset();
}
}
self.port.emit("accessed " + changedFunction.mode.name, status, callingStackMsg);
switch (status){
case "allow":
return original;
case "fake":
return changedFunction.fake? exportFunction(
changedFunction.fake,
unsafeWindow,
changedFunction.exportOptions
): undef;
//case "block":
default:
return undef;
}
}, unsafeWindow)
}
);
});
// Stack parsing
function parseStackEntry(entry){
var m = /@(.*):(\d*):(\d*)$/.exec(entry) || ["", entry, "--", "--"];
return {
url: m[1],
line: m[2],
column: m[3],
raw: entry
};
}
// Translation
var _ = function(name, replace){
var str = self.options.translations[name] || name;
if (replace){
Object.keys(replace).forEach(function(name){
str = str.replace(new RegExp("{" + name + "}", "g"), replace[name]);
});
}
return str;
};
// Communication with main.js
function setStatus(mode, askOnce){
switch (mode){
case "block":
blockMode.getContext.status = "block";
blockMode.readAPI.status = "block";
break;
case "ask":
blockMode.getContext.status = "ask";
blockMode.getContext.askStatus.askOnce = askOnce;
blockMode.readAPI.status = "allow";
break;
case "blockReadout":
blockMode.getContext.status = "allow";
blockMode.readAPI.status = "block";
break;
case "fakeReadout":
blockMode.getContext.status = "allow";
blockMode.readAPI.status = "fake";
break;
case "askReadout":
blockMode.getContext.status = "allow";
blockMode.readAPI.status = "ask";
blockMode.readAPI.askStatus.askOnce = askOnce;
break;
case "unblock":
blockMode.getContext.status = "allow";
blockMode.readAPI.status = "allow";
break;
case "detach":
blockMode.getContext.status = "allow";
blockMode.readAPI.status = "allow";
break;
}
}
["block", "ask", "blockReadout", "fakeReadout", "askReadout", "unblock", "detach"].forEach(function(mode){
self.port.on(mode, function(askOnce){
setStatus(mode, askOnce);
});
});
setStatus(
checkURL(
location,
self.options.blockMode,
getDomainRegExpList(self.options.whiteList),
getDomainRegExpList(self.options.blackList)
),
self.options.askOnce
);
// settings passthrough
self.port.on("set", function(name, value){
settings[name] = value;
});
}());

View File

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
width="96"
height="96"
id="svg2">
<defs
id="defs4" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(0,-956.36218)"
id="layer1">
<path
d="m 47.25,8.375 c -21.815247,0 -39.5,17.684752 -39.5,39.5 0,21.815248 17.684753,39.5 39.5,39.5 21.815247,0 39.5,-17.684752 39.5,-39.5 0,-21.815248 -17.684753,-39.5 -39.5,-39.5 z m 0,10 c 16.2924,0 29.5,13.207599 29.5,29.5 0,16.292401 -13.2076,29.5 -29.5,29.5 -16.2924,0 -29.5,-13.207599 -29.5,-29.5 0,-16.292401 13.2076,-29.5 29.5,-29.5 z"
transform="translate(0,956.36218)"
id="path2987"
style="fill:#fa1111;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<path
d="m 44.464287,38.32143 c -0.528244,1.28032 -1.986463,-0.0804 -2.127976,-0.877976 -0.383493,-2.161389 2.018697,-3.533412 3.883928,-3.377976 3.336463,0.278038 5.191474,3.831534 4.627976,6.889881 -0.826956,4.488248 -5.66381,6.88442 -9.895834,5.877976 C 35.31176,45.491904 32.361009,39.331022 33.824406,33.931549 35.665942,27.136862 43.168023,23.62615 49.732145,25.553573 57.682175,27.88794 61.755631,36.740041 59.36012,44.467264 56.537093,53.57353 46.329844,58.211385 37.440476,55.34524 27.177349,52.036162 21.974023,40.470516 25.312501,30.419643 29.105892,18.999203 42.032123,13.229668 53.24405,17.041668 65.822137,21.318157 72.158413,35.606519 67.872025,47.97917 63.113322,61.715157 47.461695,68.618568 33.928571,63.857145"
transform="translate(1.742814,962.60726)"
id="path2985"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
width="69"
height="9"
rx="4.723"
ry="4.723"
x="738.05121"
y="638.83063"
transform="matrix(0.67533082,0.73751494,-0.73751494,0.67533082,0,0)"
id="rect3795"
style="fill:#fa1111;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
viewBox="0 0 38 38"
width="38"
height="38"
id="svg2"
inkscape:version="0.48.4 r9939"
sodipodi:docname="pageAction-printed.svg">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="852"
inkscape:window-height="555"
id="namedview3829"
showgrid="false"
inkscape:zoom="2.4583333"
inkscape:cx="47.999999"
inkscape:cy="47.999999"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg2"
showborder="true" />
<defs
id="defs4" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path2985"
d="m 17.561156,17.285201 c -0.394679,0.957248 -1.484191,-0.06011 -1.589923,-0.65643 -0.286528,-1.615991 1.508275,-2.641803 2.901887,-2.525589 2.492848,0.207879 3.878825,2.864697 3.457805,5.151311 -0.617862,3.355698 -4.231731,5.147228 -7.393699,4.394746 C 10.72282,22.646301 8.518158,18.040036 9.61154,14.003048 10.987448,8.9229111 16.592649,6.2980809 21.497051,7.7391441 c 5.939887,1.7453204 8.98338,8.3637109 7.193568,14.1410709 -2.109233,6.80842 -9.735607,10.275974 -16.377323,8.133063 C 4.6451732,27.539202 0.7574939,18.891994 3.2518469,11.377326 6.0860892,2.8386827 15.743958,-1.4749865 24.12098,1.3751058 33.518733,4.5724794 38.252899,15.255362 35.050312,24.505938 31.494834,34.775831 19.800678,39.937257 9.689367,36.377316" />
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1"
id="svg2" inkscape:version="0.92.2 2405546, 2018-03-11" sodipodi:docname="browserAction-whitelisted.svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="96px" height="96px"
viewBox="0 0 96 96" enable-background="new 0 0 96 96" xml:space="preserve">
<sodipodi:namedview id="namedview9" inkscape:pageshadow="2" inkscape:window-width="1600" inkscape:window-height="841" inkscape:current-layer="svg2" inkscape:window-x="0" inkscape:window-y="0" inkscape:pageopacity="0" gridtolerance="10" inkscape:cx="-19.539638" objecttolerance="10" inkscape:zoom="3.4766083" borderopacity="1" showgrid="false" bordercolor="#666666" guidetolerance="10" pagecolor="#ffffff" inkscape:cy="53.605992" inkscape:window-maximized="1">
</sodipodi:namedview>
<path id="rect3826" fill="#F5F5F5" d="M23.808,2h48.385C84.236,2,94,11.764,94,23.808v48.385C94,84.236,84.236,94,72.191,94H23.808
C11.764,94,2,84.236,2,72.191V23.808C2,11.764,11.764,2,23.808,2z"/>
<path id="path4138" inkscape:connector-curvature="0" fill="#5C5C5C" d="M30.141,82.826c0.456,0.027,1.107-0.164,1.411-0.412
c0.139-0.113,0.567-0.551,0.953-0.971c1.881-2.055,3.544-2.898,4.942-2.512c1.059,0.295,2.344,2.311,3.471,5.438
c0.671,1.862,1.018,2.272,2.078,2.461c0.646,0.106,1.577-0.211,1.949-0.677c0.786-0.982,0.744-1.581-0.297-4.195
c-1.14-2.859-2.118-4.486-3.483-5.796c-0.557-0.533-0.688-0.608-1.792-1.093c-1.115-0.48-1.25-0.521-2.083-0.574
c-1.22-0.079-1.971,0.035-3.196,0.482c-1.626,0.603-3.177,1.717-4.734,3.402c-0.836,0.906-1.096,1.307-1.206,1.854
C27.903,81.493,28.871,82.75,30.141,82.826z M22.995,76.758c0.63-0.013,2.712-0.607,4.185-1.197c2.96-1.186,5.259-2.843,6.942-5.006
c1.732-2.223,2.766-5.514,2.534-8.063c-0.14-1.537-1.171-2.426-2.56-2.204c-1.155,0.185-1.846,1.142-1.794,2.487
c0.05,1.305-0.112,2.123-0.675,3.406c-0.385,0.877-0.617,1.291-0.996,1.769c-0.619,0.78-1.767,1.784-2.752,2.403
c-0.96,0.604-3.115,1.506-4.52,1.896c-1.711,0.474-2.105,0.747-2.419,1.679C20.476,75.309,21.548,76.785,22.995,76.758
L22.995,76.758z M51.635,88.271c0.777,0.125,1.611-0.181,2.063-0.742c0.357-0.449,0.572-1.219,0.482-1.725
c-0.047-0.264-0.535-1.229-1.246-2.457C47.646,74.152,43.52,64.589,41.913,57.8c-0.611-2.579-0.907-5.196-0.801-7.098
c0.148-2.679,0.969-4.377,2.944-6.095c1.762-1.532,3.848-1.911,5.826-1.057c1.743,0.751,3.076,2.407,3.571,4.432
c0.115,0.471,0.252,1.868,0.331,3.375c0.401,7.607,1.776,12.148,5.877,19.398c1.379,2.438,4.983,8.372,5.26,8.658
c0.401,0.418,1.349,0.727,1.919,0.621c1.196-0.217,2.012-1.457,1.729-2.645c-0.047-0.197-0.654-1.31-1.354-2.465
c-4.361-7.22-5.924-10.104-7.027-13.035c-1.252-3.308-1.752-5.979-2.022-10.822c-0.16-2.871-0.322-3.906-0.828-5.317
c-1.099-3.067-3.728-5.678-6.591-6.551c-2.245-0.684-4.219-0.622-6.348,0.198c-2.368,0.913-4.308,2.545-5.829,4.908
c-0.639,0.992-1.221,2.44-1.507,3.751c-0.764,3.5-0.163,8.708,1.692,14.667c1.689,5.424,4.678,12.258,8.348,19.088
c1.315,2.444,2.89,5.198,3.224,5.629C50.621,87.842,51.201,88.205,51.635,88.271L51.635,88.271z M16.767,68.199
c1.446,0.063,3.005-0.068,4.184-0.352c3.642-0.882,7.026-3.611,9.745-7.875c1.634-2.563,2.318-4.521,3.509-10.057
c1.172-5.442,2.109-7.967,3.715-10.011c1.779-2.264,4.521-3.784,7.851-4.353c2.52-0.429,4.891-0.146,7.23,0.864
c2.353,1.015,4.129,2.524,5.588,4.745c1.854,2.821,2.699,5.881,2.933,10.604c0.065,1.353,0.201,2.918,0.307,3.479
c0.688,3.884,2.863,8.895,5.92,13.621c0.916,1.419,1.207,1.744,1.771,1.988c1.646,0.711,3.463-0.881,2.918-2.563
c-0.076-0.231-0.453-0.908-0.842-1.498c-2.794-4.276-4.837-8.867-5.479-12.313c-0.08-0.438-0.163-1.318-0.185-1.963
c-0.133-4.199-0.59-6.895-1.646-9.699c-1.692-4.485-4.479-7.75-8.464-9.903c-3.773-2.044-8.651-2.458-13.146-1.115
c-5.404,1.616-9.096,5.196-11.024,10.692c-0.607,1.731-1.005,3.23-1.692,6.383c-0.791,3.628-1.068,4.646-1.708,6.272
c-0.496,1.265-0.673,1.619-1.226,2.455c-1.98,2.989-3.854,4.75-5.994,5.623c-1.19,0.48-2.282,0.647-4.036,0.611
c-1.452-0.027-1.799,0.037-2.299,0.449c-0.739,0.607-1,1.592-0.647,2.441C14.468,67.754,15.168,68.129,16.767,68.199z M59.887,85.92
c0.512-0.016,0.977-0.203,1.449-0.588c0.332-0.27,0.672-1.158,0.635-1.663c-0.039-0.546-0.158-0.802-1.128-2.423
c-4.798-8.023-8.554-16.719-10.219-23.664c-0.656-2.736-0.978-4.822-1.11-7.225c-0.078-1.395-0.127-1.67-0.354-2.042
c-0.219-0.346-0.375-0.48-0.848-0.716c-0.381-0.191-0.708-0.283-0.942-0.294c-1.189-0.013-2.147,0.904-2.231,2.132
c-0.043,0.636,0.108,2.902,0.277,4.158c1.131,8.401,5.262,19.021,11.536,29.646c0.567,0.964,1.172,1.891,1.34,2.059
C58.714,85.734,59.246,85.938,59.887,85.92L59.887,85.92z M14.583,61.125c0.586-0.031,2.742-0.874,4.285-1.674
c1.912-0.99,3.742-2.354,4.875-3.629c0.981-1.105,1.427-1.824,2.097-3.387c0.732-1.707,0.892-2.229,2.144-7.027
c1.272-4.877,1.599-5.944,2.381-7.763c0.754-1.753,1.157-2.384,2.252-3.528c0.693-0.725,2.023-1.881,2.895-2.519
c2.495-1.823,5.927-3.274,8.839-3.737c6.736-1.071,14.553,1.754,18.793,6.792c1.271,1.517,2.273,3.206,3.144,5.3
c1,2.419,1.549,4.663,2.187,8.936c0.336,2.241,0.695,3.818,1.256,5.479c0.899,2.672,2.705,5.885,3.646,6.496
c0.739,0.479,1.938,0.368,2.604-0.236c0.18-0.161,0.406-0.493,0.521-0.754c0.354-0.813,0.248-1.536-0.35-2.337
c-0.592-0.796-1.432-2.38-1.93-3.637c-0.8-2.012-1.113-3.368-1.652-7.07c-0.938-6.443-2.918-11.259-6.196-15.068
c-2.198-2.553-4.604-4.357-7.858-5.901c-5.721-2.709-11.805-3.296-17.592-1.696c-4.545,1.257-9.443,4.404-12.359,7.941
c-0.997,1.21-1.276,1.7-2.223,3.907c-1.008,2.352-1.2,2.962-2.501,7.973c-1.507,5.809-2,7.213-2.963,8.454
c-1.16,1.496-3.207,2.865-6.102,4.084c-1.705,0.722-2.043,0.949-2.319,1.588C11.812,59.604,12.948,61.215,14.583,61.125
L14.583,61.125z M16.24,52.795c0.483,0.055,1.019-0.072,1.441-0.348c0.606-0.393,0.871-0.975,1.224-2.689
c1.364-6.627,3.764-12.456,6.843-16.617c0.599-0.81,0.96-1.228,1.792-2.076c1.003-1.021,1.213-1.806,0.752-2.811
c-0.614-1.339-2.258-1.645-3.459-0.643c-0.925,0.771-2.451,2.626-3.626,4.407c-2.578,3.906-4.743,9.102-6.082,14.591
c-0.455,1.863-0.815,3.732-0.801,4.146C14.359,51.752,15.23,52.678,16.24,52.795L16.24,52.795z M77.986,50.193
c0.961,0.14,1.797-0.314,2.26-1.229c0.326-0.641,0.309-1-0.189-3.746c-0.914-5.066-2.465-10.016-4.086-13.047
c-2.645-4.948-6.426-8.803-11.617-11.844c-1.438-0.847-4.939-2.44-6.442-2.938c-6.185-2.042-12.656-2.134-19.49-0.278
c-2.937,0.798-7.896,2.919-9.62,4.115c-0.965,0.67-1.278,1.718-0.809,2.71c0.53,1.121,1.613,1.56,2.716,1.102
c0.315-0.131,1.1-0.529,1.743-0.884c1.418-0.784,5.004-2.234,6.736-2.724c7.333-2.072,14.103-1.64,20.314,1.298
c5.229,2.475,8.858,5.515,11.537,9.662c2.168,3.365,3.647,7.662,4.71,13.635c0.521,2.965,0.521,2.974,0.88,3.377
C77.049,49.893,77.426,50.111,77.986,50.193L77.986,50.193z M81.521,35.5c1.049-0.005,1.99-0.758,2.176-1.744
c0.117-0.623-0.105-1.528-0.82-3.338c-2.076-5.25-5.73-10.019-10.551-13.767c-4.316-3.356-9.973-5.997-15.771-7.365
C52.813,8.404,48.351,8.09,44.511,8.44c-1.835,0.167-4.559,0.642-6.361,1.109c-1.521,0.395-2.014,0.709-2.351,1.499
c-0.576,1.351,0.384,2.922,1.839,3.013c0.196,0.012,1.036-0.144,1.867-0.347c3.635-0.888,6.941-1.216,10.265-1.017
c7.313,0.437,15.016,3.396,20.502,7.883c4.207,3.437,7.521,8.089,8.979,12.609c0.271,0.842,0.504,1.368,0.694,1.58
C80.284,35.141,81.063,35.502,81.521,35.5L81.521,35.5z"/>
<linearGradient id="rect3826-9_1_" gradientUnits="userSpaceOnUse" x1="-2884.5107" y1="2237.3203" x2="-2884.0027" y2="2328.032" gradientTransform="matrix(-1.0612 0 0 1 -3035.2104 -2234.4375)">
<stop offset="0" style="stop-color:#808080;stop-opacity:0"/>
<stop offset="0.6455" style="stop-color:#808080;stop-opacity:0.498"/>
<stop offset="0.8787" style="stop-color:#808080"/>
<stop offset="1" style="stop-color:#808080"/>
</linearGradient>
<path id="rect3826-9" inkscape:connector-curvature="0" opacity="0.6" fill="url(#rect3826-9_1_)" enable-background="new " d="
M48,3v90H26.146C13.326,93,3,83.27,3,71.188V24.813C3,12.731,13.326,3,26.146,3H48z"/>
<path id="rect3826-4" inkscape:connector-curvature="0" opacity="0.6" fill="#808080" enable-background="new " d="M71.188,3
C83.27,3,93,12.731,93,24.813v46.375C93,83.27,83.27,93,71.188,93H48V3H71.188z"/>
<path id="rect3826-0" fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" d="M23.808,2
h48.385C84.236,2,94,11.764,94,23.808v48.385C94,84.236,84.236,94,72.191,94H23.808C11.764,94,2,84.236,2,72.191V23.808
C2,11.764,11.764,2,23.808,2z"/>
<g id="Loeschen">
<g id="XMLID_1_">
<g>
<path fill="#FFFFFF" d="M82.62,69.56c0,4.221-1.64,8.19-4.63,11.181c-2.98,2.979-6.95,4.63-11.181,4.63
c-4.22,0-8.189-1.65-11.18-4.63C52.64,77.75,51,73.78,51,69.56c0-4.229,1.64-8.199,4.63-11.18c2.98-2.99,6.96-4.64,11.18-4.64
c4.23,0,8.19,1.649,11.181,4.64c1.49,1.49,2.649,3.23,3.439,5.12C82.21,65.4,82.62,67.44,82.62,69.56z M76,64.61l-4.24-4.25
l-4.95,4.949L61.86,60.37l-4.24,4.24l4.95,4.949l-4.95,4.95l4.24,4.24l4.949-4.95l4.95,4.95L76,74.51l-4.95-4.95L76,64.61z"/>
<polygon fill="#FF0000" points="71.76,60.36 76,64.61 71.05,69.56 76,74.51 71.76,78.75 66.81,73.8 61.86,78.75 57.62,74.51
62.57,69.56 57.62,64.61 61.86,60.37 66.81,65.31 "/>
<path fill="#FF0000" d="M82.62,69.56c0-2.119-0.41-4.159-1.19-6.06c-0.79-1.89-1.949-3.63-3.439-5.12
c-2.99-2.99-6.95-4.64-11.181-4.64c-4.22,0-8.199,1.649-11.18,4.64C52.64,61.36,51,65.33,51,69.56c0,4.221,1.64,8.19,4.63,11.181
c2.99,2.979,6.96,4.63,11.18,4.63c4.23,0,8.2-1.65,11.181-4.63C80.98,77.75,82.62,73.78,82.62,69.56z M80.06,56.31
c7.32,7.311,7.32,19.181,0,26.5C76.4,86.47,71.61,88.3,66.81,88.3c-4.79,0-9.59-1.83-13.25-5.49
c-7.319-7.319-7.319-19.189,0-26.5c3.66-3.659,8.46-5.489,13.25-5.489C71.61,50.82,76.4,52.65,80.06,56.31z"/>
</g>
<g>
<polygon fill="none" stroke="#000000" stroke-width="0.5" stroke-linejoin="round" stroke-miterlimit="10" points="71.76,60.36
66.81,65.31 61.86,60.37 57.62,64.61 62.57,69.56 57.62,74.51 61.86,78.75 66.81,73.8 71.76,78.75 76,74.51 71.05,69.56
76,64.61 "/>
<path fill="none" stroke="#000000" stroke-width="0.5" stroke-linejoin="round" stroke-miterlimit="10" d="M80.06,56.31
C76.4,52.65,71.61,50.82,66.81,50.82c-4.79,0-9.59,1.83-13.25,5.489c-7.319,7.311-7.319,19.181,0,26.5
c3.66,3.66,8.46,5.49,13.25,5.49c4.801,0,9.591-1.83,13.25-5.49C87.38,75.49,87.38,63.62,80.06,56.31z"/>
<path fill="none" stroke="#000000" stroke-width="0.5" stroke-linejoin="round" stroke-miterlimit="10" d="M77.99,80.74
c-2.98,2.979-6.95,4.63-11.181,4.63c-4.22,0-8.189-1.65-11.18-4.63C52.64,77.75,51,73.78,51,69.56c0-4.229,1.64-8.199,4.63-11.18
c2.98-2.99,6.96-4.64,11.18-4.64c4.23,0,8.19,1.649,11.181,4.64c1.49,1.49,2.649,3.23,3.439,5.12c0.78,1.9,1.19,3.94,1.19,6.06
C82.62,73.78,80.98,77.75,77.99,80.74z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1"
id="svg2" inkscape:version="0.92.2 2405546, 2018-03-11" sodipodi:docname="browserAction-notPrinted.svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="96px" height="96px"
viewBox="0 0 96 96" enable-background="new 0 0 96 96" xml:space="preserve">
<sodipodi:namedview id="namedview9" inkscape:pageshadow="2" inkscape:window-width="1600" inkscape:window-height="841" inkscape:current-layer="svg2" inkscape:window-x="0" inkscape:window-y="0" inkscape:pageopacity="0" gridtolerance="10" inkscape:cx="-39.24275" objecttolerance="10" inkscape:zoom="3.4766083" borderopacity="1" showgrid="false" bordercolor="#666666" guidetolerance="10" pagecolor="#ffffff" inkscape:cy="53.605992" inkscape:window-maximized="1">
</sodipodi:namedview>
<path id="rect3826" fill="#F5F5F5" d="M23.808,2h48.385C84.236,2,94,11.764,94,23.808v48.385C94,84.236,84.236,94,72.191,94H23.808
C11.764,94,2,84.236,2,72.191V23.808C2,11.764,11.764,2,23.808,2z"/>
<path id="path4138" inkscape:connector-curvature="0" fill="#5C5C5C" d="M30.141,82.826c0.456,0.027,1.107-0.164,1.411-0.412
c0.139-0.113,0.567-0.551,0.953-0.971c1.881-2.055,3.544-2.898,4.942-2.512c1.059,0.295,2.344,2.311,3.471,5.439
c0.671,1.863,1.018,2.273,2.078,2.461c0.646,0.107,1.577-0.211,1.949-0.676c0.786-0.983,0.744-1.582-0.297-4.196
c-1.14-2.86-2.118-4.487-3.483-5.796c-0.557-0.533-0.688-0.609-1.792-1.092c-1.115-0.481-1.25-0.521-2.083-0.575
c-1.22-0.079-1.971,0.035-3.196,0.483c-1.626,0.602-3.177,1.717-4.734,3.402c-0.836,0.906-1.096,1.307-1.206,1.854
C27.903,81.493,28.871,82.75,30.141,82.826z M22.995,76.758c0.63-0.013,2.712-0.607,4.185-1.197c2.96-1.186,5.259-2.843,6.942-5.006
c1.732-2.223,2.766-5.514,2.534-8.063c-0.14-1.537-1.171-2.426-2.56-2.204c-1.155,0.185-1.846,1.142-1.794,2.487
c0.05,1.305-0.112,2.123-0.675,3.406c-0.385,0.877-0.617,1.291-0.996,1.769c-0.619,0.78-1.767,1.784-2.752,2.403
c-0.96,0.604-3.115,1.506-4.52,1.896c-1.711,0.474-2.105,0.747-2.419,1.679C20.476,75.309,21.548,76.785,22.995,76.758
L22.995,76.758z M51.635,88.271c0.777,0.125,1.611-0.18,2.063-0.742c0.357-0.449,0.572-1.219,0.482-1.725
c-0.047-0.263-0.535-1.228-1.246-2.457C47.646,74.152,43.52,64.589,41.913,57.8c-0.611-2.579-0.907-5.196-0.801-7.098
c0.148-2.679,0.969-4.377,2.944-6.095c1.762-1.532,3.848-1.911,5.826-1.057c1.743,0.751,3.076,2.407,3.571,4.432
c0.115,0.471,0.252,1.868,0.331,3.375c0.401,7.608,1.776,12.149,5.877,19.399c1.379,2.438,4.983,8.372,5.26,8.658
c0.401,0.418,1.349,0.726,1.919,0.621c1.196-0.216,2.012-1.457,1.729-2.644c-0.047-0.197-0.655-1.31-1.354-2.465
c-4.362-7.22-5.924-10.104-7.028-13.035c-1.252-3.308-1.752-5.979-2.022-10.822c-0.16-2.872-0.322-3.907-0.828-5.318
c-1.099-3.067-3.728-5.678-6.591-6.551c-2.245-0.684-4.219-0.622-6.348,0.198c-2.368,0.913-4.308,2.545-5.829,4.908
c-0.639,0.992-1.221,2.44-1.507,3.751c-0.764,3.5-0.163,8.708,1.692,14.667c1.689,5.424,4.678,12.258,8.348,19.088
c1.315,2.445,2.89,5.199,3.224,5.629C50.621,87.842,51.201,88.205,51.635,88.271L51.635,88.271z M16.767,68.199
c1.446,0.063,3.005-0.068,4.184-0.352c3.642-0.881,7.026-3.611,9.745-7.875c1.634-2.563,2.318-4.521,3.509-10.056
c1.172-5.442,2.109-7.967,3.715-10.011c1.779-2.264,4.521-3.784,7.851-4.352c2.52-0.429,4.891-0.146,7.23,0.864
c2.353,1.015,4.129,2.524,5.588,4.745c1.854,2.821,2.699,5.881,2.933,10.603c0.065,1.353,0.201,2.918,0.306,3.479
c0.688,3.884,2.864,8.895,5.92,13.621c0.916,1.419,1.207,1.744,1.771,1.988c1.646,0.711,3.463-0.881,2.918-2.563
c-0.076-0.231-0.453-0.908-0.842-1.498c-2.793-4.276-4.836-8.867-5.479-12.313c-0.08-0.438-0.163-1.319-0.184-1.963
c-0.133-4.199-0.59-6.895-1.646-9.699c-1.692-4.485-4.479-7.75-8.463-9.903c-3.774-2.044-8.652-2.458-13.146-1.115
c-5.404,1.616-9.096,5.196-11.024,10.692c-0.607,1.731-1.005,3.23-1.692,6.383c-0.791,3.628-1.068,4.646-1.708,6.272
c-0.496,1.265-0.673,1.619-1.226,2.455c-1.98,2.99-3.854,4.75-5.994,5.623c-1.19,0.481-2.282,0.648-4.036,0.612
c-1.452-0.028-1.799,0.037-2.299,0.449c-0.739,0.608-1,1.592-0.647,2.442C14.468,67.754,15.168,68.129,16.767,68.199z M59.887,85.92
c0.512-0.016,0.977-0.203,1.449-0.588c0.332-0.27,0.672-1.158,0.635-1.663c-0.039-0.546-0.158-0.802-1.128-2.423
c-4.798-8.023-8.554-16.719-10.219-23.664c-0.656-2.736-0.978-4.822-1.11-7.225c-0.078-1.394-0.127-1.67-0.354-2.042
c-0.219-0.346-0.375-0.48-0.848-0.716c-0.381-0.191-0.708-0.283-0.942-0.294c-1.189-0.013-2.147,0.904-2.231,2.133
c-0.043,0.635,0.108,2.902,0.277,4.158c1.131,8.401,5.262,19.02,11.536,29.646c0.567,0.964,1.172,1.891,1.34,2.059
C58.714,85.734,59.246,85.938,59.887,85.92L59.887,85.92z M14.583,61.125c0.586-0.031,2.742-0.874,4.285-1.674
c1.912-0.99,3.742-2.354,4.875-3.629c0.981-1.105,1.427-1.824,2.097-3.387c0.732-1.707,0.892-2.229,2.144-7.027
c1.272-4.877,1.599-5.944,2.381-7.763c0.754-1.753,1.157-2.384,2.252-3.528c0.693-0.725,2.023-1.881,2.895-2.519
c2.495-1.823,5.927-3.274,8.839-3.737c6.736-1.071,14.553,1.754,18.793,6.792c1.272,1.517,2.274,3.206,3.144,5.3
c1,2.419,1.549,4.663,2.187,8.936c0.336,2.241,0.695,3.818,1.256,5.479c0.899,2.672,2.705,5.885,3.646,6.496
c0.739,0.479,1.938,0.368,2.604-0.236c0.179-0.161,0.406-0.493,0.521-0.754c0.354-0.813,0.248-1.536-0.35-2.337
c-0.592-0.796-1.432-2.38-1.93-3.637c-0.799-2.012-1.113-3.368-1.652-7.07c-0.938-6.443-2.918-11.259-6.196-15.068
c-2.198-2.553-4.604-4.357-7.858-5.901c-5.721-2.709-11.805-3.296-17.592-1.696c-4.545,1.257-9.443,4.404-12.359,7.941
c-0.997,1.21-1.276,1.7-2.223,3.907c-1.008,2.352-1.2,2.962-2.501,7.973c-1.507,5.809-2,7.213-2.963,8.454
c-1.16,1.496-3.207,2.865-6.102,4.084c-1.705,0.721-2.043,0.949-2.319,1.588C11.812,59.604,12.948,61.215,14.583,61.125
L14.583,61.125z M16.24,52.795c0.483,0.055,1.019-0.072,1.441-0.348c0.606-0.393,0.871-0.975,1.224-2.689
c1.364-6.627,3.764-12.456,6.843-16.617c0.599-0.81,0.96-1.228,1.792-2.076c1.003-1.021,1.213-1.806,0.752-2.811
c-0.614-1.339-2.258-1.645-3.459-0.643c-0.925,0.771-2.451,2.626-3.626,4.407c-2.578,3.906-4.743,9.102-6.082,14.591
c-0.455,1.863-0.815,3.732-0.801,4.146C14.359,51.752,15.23,52.678,16.24,52.795L16.24,52.795z M77.986,50.193
c0.961,0.14,1.797-0.314,2.26-1.229c0.326-0.641,0.309-1-0.189-3.746c-0.914-5.066-2.465-10.016-4.086-13.047
c-2.645-4.948-6.426-8.803-11.617-11.844c-1.439-0.847-4.94-2.44-6.443-2.938c-6.184-2.042-12.656-2.134-19.49-0.278
c-2.937,0.798-7.896,2.919-9.62,4.115c-0.965,0.67-1.278,1.718-0.809,2.71c0.53,1.121,1.613,1.56,2.716,1.102
c0.315-0.131,1.1-0.529,1.743-0.884c1.418-0.784,5.004-2.234,6.736-2.724c7.333-2.072,14.103-1.64,20.314,1.298
c5.23,2.475,8.859,5.515,11.537,9.662c2.168,3.365,3.648,7.662,4.71,13.635c0.521,2.965,0.522,2.974,0.88,3.377
C77.049,49.893,77.426,50.111,77.986,50.193L77.986,50.193z M81.521,35.5c1.049-0.005,1.99-0.758,2.176-1.744
c0.117-0.623-0.105-1.528-0.82-3.338c-2.076-5.25-5.73-10.019-10.551-13.767c-4.316-3.356-9.973-5.997-15.771-7.365
C52.813,8.404,48.351,8.09,44.511,8.44c-1.835,0.167-4.559,0.642-6.361,1.109c-1.521,0.395-2.014,0.709-2.351,1.499
c-0.576,1.351,0.384,2.922,1.839,3.013c0.196,0.012,1.036-0.144,1.867-0.347c3.635-0.888,6.941-1.216,10.265-1.017
c7.313,0.437,15.015,3.396,20.502,7.883c4.207,3.437,7.521,8.089,8.979,12.609c0.271,0.842,0.504,1.368,0.694,1.58
C80.284,35.141,81.063,35.502,81.521,35.5L81.521,35.5z"/>
<linearGradient id="rect3826-9_1_" gradientUnits="userSpaceOnUse" x1="-2392.2759" y1="-1420.481" x2="-2391.7678" y2="-1511.1927" gradientTransform="matrix(-1.0612 0 0 -1 -2512.8511 -1417.5977)">
<stop offset="0" style="stop-color:#0050BF;stop-opacity:0"/>
<stop offset="0.6455" style="stop-color:#0050BF;stop-opacity:0.498"/>
<stop offset="0.8787" style="stop-color:#0050BF"/>
<stop offset="1" style="stop-color:#0050BF"/>
</linearGradient>
<path id="rect3826-9" inkscape:connector-curvature="0" opacity="0.5" fill="url(#rect3826-9_1_)" enable-background="new " d="
M48,3v90H26.146C13.326,93,3,83.27,3,71.188V24.813C3,12.731,13.326,3,26.146,3H48z"/>
<path id="rect3826-4" inkscape:connector-curvature="0" opacity="0.5" fill="#004FBD" enable-background="new " d="M71.188,3
C83.27,3,93,12.731,93,24.813v46.375C93,83.27,83.27,93,71.188,93H48V3H71.188z"/>
<path id="rect3826-0" fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" d="M23.808,2
h48.385C84.236,2,94,11.764,94,23.808v48.385C94,84.236,84.236,94,72.191,94H23.808C11.764,94,2,84.236,2,72.191V23.808
C2,11.764,11.764,2,23.808,2z"/>
<g id="Haekchen">
<g id="XMLID_1_">
<g>
<path fill="#FFFFFF" d="M78.01,58.39c6.16,6.17,6.16,16.19,0,22.36c-2.99,2.98-6.96,4.62-11.18,4.62s-8.19-1.64-11.17-4.62
c-6.16-6.17-6.16-16.19,0-22.36c2.979-2.979,6.95-4.62,11.17-4.62S75.02,55.41,78.01,58.39z M77.78,65l-3.11-3.16l-10.4,8.63
l-3.859-4.2l-4.271,4.28l8.04,8.04L77.78,65z"/>
<polygon fill="#58E617" points="74.67,61.84 77.78,65 64.18,78.59 56.14,70.55 60.41,66.27 64.27,70.47 "/>
<path fill="#58E617" d="M78.01,80.75c6.16-6.17,6.16-16.19,0-22.36c-2.99-2.979-6.96-4.62-11.18-4.62s-8.19,1.641-11.17,4.62
c-6.16,6.17-6.16,16.19,0,22.36c2.979,2.98,6.95,4.62,11.17,4.62S75.02,83.73,78.01,80.75z M80.08,56.33
c7.31,7.31,7.31,19.17,0,26.479c-3.66,3.66-8.46,5.49-13.25,5.49s-9.58-1.83-13.24-5.49c-7.32-7.31-7.32-19.17,0-26.479
c3.66-3.66,8.45-5.49,13.24-5.49S76.42,52.67,80.08,56.33z"/>
</g>
<g>
<path fill="none" stroke="#000000" stroke-width="0.5" stroke-linejoin="round" stroke-miterlimit="10" d="M80.08,56.33
c-3.66-3.66-8.46-5.49-13.25-5.49s-9.58,1.83-13.24,5.49c-7.32,7.31-7.32,19.17,0,26.479c3.66,3.66,8.45,5.49,13.24,5.49
s9.59-1.83,13.25-5.49C87.39,75.5,87.39,63.64,80.08,56.33z"/>
<path fill="none" stroke="#000000" stroke-width="0.5" stroke-linejoin="round" stroke-miterlimit="10" d="M78.01,80.75
c-2.99,2.98-6.96,4.62-11.18,4.62s-8.19-1.64-11.17-4.62c-6.16-6.17-6.16-16.19,0-22.36c2.979-2.979,6.95-4.62,11.17-4.62
s8.189,1.641,11.18,4.62C84.17,64.56,84.17,74.58,78.01,80.75z"/>
<polygon fill="none" stroke="#000000" stroke-width="0.5" stroke-linejoin="round" stroke-miterlimit="10" points="64.27,70.47
60.41,66.27 56.14,70.55 64.18,78.59 77.78,65 74.67,61.84 "/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

100
icons/browserAction-faq.svg Normal file
View File

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
version="1.1"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
width="38"
height="38"
viewBox="0 0 38 38"
sodipodi:docname="browserAction-faq.svg"
inkscape:export-filename="Fingerprint.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="841"
id="namedview4"
showgrid="false"
inkscape:zoom="8.8685035"
inkscape:cx="-5.5444943"
inkscape:cy="22.071382"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
showguides="true">
<inkscape:grid
type="xygrid"
id="grid3725" />
</sodipodi:namedview>
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 19,0 C 8.5272756,0 0,8.5272748 0,19 0,29.472725 8.5272756,38 19,38 29.472724,38 38,29.472725 38,19 38,8.5272748 29.472724,0 19,0 Z m 0,3.5 c 8.581184,0 15.5,6.918815 15.5,15.5 0,8.581185 -6.918816,15.5 -15.5,15.5 C 10.418816,34.5 3.5,27.581185 3.5,19 3.5,10.418815 10.418816,3.5 19,3.5 Z"
id="path819"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#bbbbbb;fill-opacity:1;stroke:none"
x="10.982422"
y="33.580078"
id="text823"><tspan
sodipodi:role="line"
id="tspan821"
x="10.982422"
y="68.970703"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:AkrutiMal2;-inkscape-font-specification:AkrutiMal2" /></text>
<circle
style="opacity:1;fill:#919191;fill-opacity:1;stroke:#bbbbbb;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path831"
cx="19"
cy="27.772472"
r="3.9999993" />
<path
style="fill:none;stroke:#919191;stroke-width:6.30000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.290687,12.178281 c 0,0 2.914851,-4.0593089 6.314481,-4.0593088 3.382758,0 5.57748,1.9006158 5.750689,4.2848258 0.142504,1.961563 -3.177558,2.475312 -4.172068,4.172069 -0.770156,1.313982 -1.240343,2.139595 -1.240344,4.397584 l -1e-6,1.691379"
id="path817"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csaasc" />
</svg>

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
id="svg2"
version="1.1"
inkscape:version="1.1 (c4e8f9ed74, 2021-05-24)"
width="38"
height="38"
viewBox="0 0 38 38"
sodipodi:docname="browserAction-reload.svg"
inkscape:export-filename="Fingerprint.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="841"
id="namedview4"
showgrid="false"
inkscape:zoom="8.8685035"
inkscape:cx="0.62017228"
inkscape:cy="22.044305"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
showguides="true"
inkscape:pagecheckerboard="0">
<inkscape:grid
type="xygrid"
id="grid3725" />
</sodipodi:namedview>
<path
id="path819"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 27.558376,2.036681 C 18.208263,-2.6806621 6.7540244,1.0915089 2.036681,10.441624 c -4.7173433,9.350114 -0.9451714,20.804352 8.404943,25.521695 9.350113,4.717343 20.804352,0.945172 25.521695,-8.404943 1.490789,-2.95485 2.131192,-6.119738 2.017806,-9.215679 l -3.48287,0.09573 c 0.09126,2.528509 -0.436066,5.11796 -1.659758,7.543405 -3.865316,7.661336 -13.158996,10.72198 -20.82033,6.856664 C 4.3568317,28.973181 1.2961865,19.679502 5.1615029,12.018167 9.0268193,4.3568308 18.320499,1.2961869 25.981833,5.1615029 27.491656,5.9232425 28.81983,6.8983886 29.954505,8.027729 L 32.30738,5.4367801 C 30.943863,4.0966388 29.353902,2.942564 27.558376,2.036681 Z" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#bbbbbb;fill-opacity:1;stroke:none"
x="10.982422"
y="33.580078"
id="text823"><tspan
sodipodi:role="line"
id="tspan821"
x="10.982422"
y="68.970703"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:AkrutiMal2;-inkscape-font-specification:AkrutiMal2" /></text>
<g
id="g180"
transform="matrix(-0.67598944,-0.06825165,0.06825165,-0.67598944,43.19324,21.507957)"
style="stroke-width:1.47183">
<rect
style="fill:#919191;fill-opacity:1;stroke:#919191;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect829"
width="5.999999"
height="16.195862"
x="15.780028"
y="-28.064632"
transform="rotate(82.446816)" />
<rect
style="fill:#919191;fill-opacity:1;stroke:#919191;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect829-3"
width="5.999999"
height="16.195862"
x="-18.228109"
y="-31.699099"
transform="rotate(173.76303)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
version="1.1"
inkscape:version="0.92.2 2405546, 2018-03-11"
width="38"
height="38"
viewBox="0 0 38 38"
sodipodi:docname="browserAction-reportIssue.svg"
inkscape:export-filename="Fingerprint.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="841"
id="namedview4"
showgrid="false"
inkscape:zoom="8.8685035"
inkscape:cx="23.096189"
inkscape:cy="22.071382"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
showguides="true">
<inkscape:grid
type="xygrid"
id="grid3725" />
</sodipodi:namedview>
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 19,0 C 8.5272756,0 0,8.5272748 0,19 0,29.472725 8.5272756,38 19,38 29.472724,38 38,29.472725 38,19 38,8.5272748 29.472724,0 19,0 Z m 0,3.5 c 8.581184,0 15.5,6.918815 15.5,15.5 0,8.581185 -6.918816,15.5 -15.5,15.5 C 10.418816,34.5 3.5,27.581185 3.5,19 3.5,10.418815 10.418816,3.5 19,3.5 Z"
id="path819"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#bbbbbb;fill-opacity:1;stroke:none"
x="10.982422"
y="33.580078"
id="text823"><tspan
sodipodi:role="line"
id="tspan821"
x="10.982422"
y="68.970703"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:AkrutiMal2;-inkscape-font-specification:AkrutiMal2" /></text>
<rect
style="opacity:1;fill:#919191;fill-opacity:1;stroke:#919191;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect829"
width="5.999999"
height="16.195862"
x="16"
y="6.4025636" />
<circle
style="opacity:1;fill:#919191;fill-opacity:1;stroke:#bbbbbb;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path831"
cx="19"
cy="27.772472"
r="3.9999993" />
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="38"
height="38"
viewBox="0 0 10.054166 10.054167"
version="1.1"
id="svg830"
inkscape:version="0.92.2 2405546, 2018-03-11"
sodipodi:docname="browserAction-review.svg">
<defs
id="defs824" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.2"
inkscape:cx="32.467265"
inkscape:cy="15.819073"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1600"
inkscape:window-height="841"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata827">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-286.94581)">
<path
sodipodi:type="star"
style="opacity:1;fill:none;fill-opacity:1;stroke:#919191;stroke-width:3.83938536;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path1375"
sodipodi:sides="5"
sodipodi:cx="13.296659"
sodipodi:cy="285.24011"
sodipodi:r1="13.713037"
sodipodi:r2="6.4780655"
sodipodi:arg1="0.90975316"
sodipodi:arg2="1.5470626"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 21.71565,296.06453 -8.265256,-4.34818 -7.8467547,4.87563 1.5812554,-9.20439 -7.06177323,-5.95606 9.24252543,-1.34044 3.4823381,-8.55667 4.13094,8.37594 9.213977,0.66775 -6.689465,6.51706 z"
inkscape:transform-center-x="0.037474818"
inkscape:transform-center-y="-0.33085789"
transform="matrix(0.27028556,0,0,0.2811245,1.4881246,212.25546)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
version="1.1"
inkscape:version="0.92.2 2405546, 2018-03-11"
width="38"
height="38"
viewBox="0 0 38 38"
sodipodi:docname="browserAction-test.svg"
inkscape:export-filename="Fingerprint.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="841"
id="namedview4"
showgrid="false"
inkscape:zoom="8.8685035"
inkscape:cx="0.60084917"
inkscape:cy="22.071382"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
showguides="true">
<inkscape:grid
type="xygrid"
id="grid3725" />
</sodipodi:namedview>
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 19,0 C 8.5272756,0 0,8.5272748 0,19 0,29.472725 8.5272756,38 19,38 29.472724,38 38,29.472725 38,19 38,8.5272748 29.472724,0 19,0 Z m 0,3.5 c 8.581184,0 15.5,6.918815 15.5,15.5 0,8.581185 -6.918816,15.5 -15.5,15.5 C 10.418816,34.5 3.5,27.581185 3.5,19 3.5,10.418815 10.418816,3.5 19,3.5 Z"
id="path819"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#bbbbbb;fill-opacity:1;stroke:none"
x="10.982422"
y="33.580078"
id="text823"><tspan
sodipodi:role="line"
id="tspan821"
x="10.982422"
y="68.970703"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:AkrutiMal2;-inkscape-font-specification:AkrutiMal2" /></text>
<rect
style="opacity:1;fill:#919191;fill-opacity:1;stroke:#919191;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect829"
width="5.999999"
height="16.195862"
x="-14.558913"
y="17.192804"
transform="rotate(-54.080164)" />
<rect
style="opacity:1;fill:#919191;fill-opacity:1;stroke:#919191;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect829-3"
width="5.999999"
height="16.195862"
x="27.174421"
y="-6.8408589"
transform="rotate(34.549396)" />
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

117
icons/icon.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
width="38"
height="38"
viewBox="0 0 38 38"
sodipodi:docname="pageAction-disableNotifications.svg"
inkscape:export-filename="Fingerprint.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="848"
id="namedview4"
showgrid="false"
inkscape:zoom="8.4296296"
inkscape:cx="9.7478643"
inkscape:cy="25.52671"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<g
id="g3803"
transform="translate(-0.33931853,0.58823573)" />
<path
inkscape:connector-curvature="0"
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#919191;fill-opacity:1;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 19.59375,0.34374996 c -0.696598,0.01253 -1.335268,0.06471 -1.90625,0.09375 -0.877797,0.04464 -2.116829,-0.01338 -3.59375,0.40625 C 12.325659,1.346112 10.54204,2.130182 8.968751,3.375 7.17143,4.797077 5.191965,6.634624 4.1875,9.28125 a 2.5072653,2.5072653 0 1 0 4.687501,1.78125 c 0.477266,-1.257532 1.710028,-2.612245 3.1875,-3.78125 0.912334,-0.721858 2.125453,-1.261092 3.406249,-1.625 0.481635,-0.136846 1.313099,-0.15998 2.46875,-0.21875 1.296425,-0.06593 2.397947,-0.144688 3.21875,-0.03125 1.228192,0.169741 2.327474,0.441749 3.15625,0.875 1.30194,0.680602 2.499489,1.622405 3.28125,2.65625 0.693878,0.917622 1.079214,1.801796 1.375,3.21875 a 2.50025,2.50025 0 1 0 4.875,-1 C 33.4393,9.218741 32.724764,7.443292 31.5625,5.90625 30.214851,4.124044 28.45185,2.798754 26.625,1.84375 25.005862,0.99732996 23.351768,0.67716396 21.84375,0.46874996 c -0.798875,-0.110408 -1.553402,-0.13753 -2.25,-0.125 z M 19.71875,8.53125 C 19.334943,8.51299 18.962688,8.52955 18.59375,8.5625 17.855873,8.62835 17.133155,8.758277 16.5,8.9375 c -1.450114,0.410469 -2.876295,1.105829 -4.124999,2.1875 -1.838716,1.592757 -2.601335,3.478278 -3.375,4.59375 C 8.197736,16.875457 7.837903,17.638135 7.656251,17.8125 7.171588,18.27772 6.50228,18.815058 5.9375,19.1875 5.372721,19.559942 4.799658,19.624068 5.28125,19.625 a 2.50025,2.50025 0 1 0 0,5 c 1.605704,0.0031 2.485204,-0.642619 3.406251,-1.25 0.921046,-0.607381 1.76274,-1.321058 2.4375,-1.96875 1.252498,-1.202255 1.638064,-2.366967 1.968749,-2.84375 1.149506,-1.65736 1.819354,-3.039581 2.53125,-3.65625 0.565797,-0.490113 1.390258,-0.912891 2.25,-1.15625 0.799063,-0.226185 1.562999,-0.284857 2.03125,-0.1875 0.120742,0.0251 0.601285,0.322179 1.375,0.84375 0.385037,0.259558 0.626249,0.450484 0.71875,0.5625 0.455709,0.551853 0.804852,1.165219 0.96875,1.6875 0.149537,0.476518 0.22108,1.208296 0.1875,2.09375 -0.03163,0.833984 -0.716662,2.279758 -0.78125,4.46875 C 22.33807,24.470663 22.215367,26.162724 23,28 c 0.466738,1.092902 1.116866,2.030174 1.8125,2.84375 0.695634,0.813576 1.011533,1.448356 2.5,2.03125 a 2.50025,2.50025 0 1 0 1.875,-4.625 C 29.772432,28.470285 29.046431,28.086635 28.625,27.59375 28.180096,27.073416 27.725511,26.37103 27.59375,26.0625 27.393825,25.59436 27.338007,24.628847 27.375,23.375 c 0.02421,-0.820592 0.667514,-2.262754 0.75,-4.4375 0.041,-1.081088 0.0647,-2.380096 -0.375,-3.78125 -0.412842,-1.315575 -1.104203,-2.441583 -1.875,-3.375 C 25.269593,11.048114 24.617559,10.603106 24.09375,10.25 23.443887,9.811919 22.46639,9.011881 20.90625,8.6875 20.497919,8.6026 20.102557,8.549506 19.71875,8.53125 z M 32.625,17.1875 a 2.50025,2.50025 0 0 0 -2.25,2.25 l -0.34375,2.96875 A 2.5020499,2.5020499 0 1 0 35,23 l 0.34375,-2.96875 A 2.50025,2.50025 0 0 0 32.875,17.1875 a 2.50025,2.50025 0 0 0 -0.25,0 z m -14.75,0.65625 a 2.50025,2.50025 0 0 0 -2.125,1.8125 c -0.811028,2.662046 -1.59496,4.07594 -3.031249,5.78125 -1.243662,1.476602 -3.103234,2.870772 -4.78125,3.6875 a 2.5017572,2.5017572 0 1 0 2.1875,4.5 c 2.310134,-1.124394 4.635309,-2.829006 6.437499,-4.96875 1.795982,-2.132374 3.020244,-4.41796 3.96875,-7.53125 a 2.50025,2.50025 0 0 0 -2.40625,-3.28125 2.50025,2.50025 0 0 0 -0.25,0 z m 2.0625,11.3125 c -0.32141,0.0042 -0.64688,0.04897 -0.90625,0.15625 -0.51874,0.214569 -0.815602,0.529196 -1,0.75 -0.737593,0.883214 -0.551195,1.078803 -0.625,1.40625 -0.04146,0.05463 -0.172995,0.234468 -0.40625,0.5 -0.339281,0.386229 -0.840677,0.833898 -1.375,1.625 A 2.50025,2.50025 0 0 0 19.1875,37 a 2.50025,2.50025 0 0 0 4,-2.84375 c 9.65e-4,0.01132 -0.007,-0.01003 -0.03125,-0.0625 -0.02588,-0.09446 -0.07587,-0.312877 -0.125,-0.5625 -0.07954,-0.404152 -0.163116,-0.904087 -0.25,-1.375 -0.04344,-0.235456 -0.09683,-0.476314 -0.15625,-0.71875 -0.05942,-0.242436 -0.06929,-0.426318 -0.375,-0.96875 -0.152854,-0.271216 -0.336284,-0.815938 -1.40625,-1.1875 -0.267491,-0.09289 -0.58484,-0.129214 -0.90625,-0.125 z"
id="path3753-8" />
<g
id="g3803-8"
transform="matrix(0.89199553,0,0,0.89199692,1.7556472,0.98781322)"
style="fill:#ff0101;fill-opacity:0.6;stroke:#ff0000;stroke-width:3.36324286;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
<path
inkscape:connector-curvature="0"
style="fill:#ff0101;fill-opacity:0.6;fill-rule:nonzero;stroke:#ff0000;stroke-width:3.36324286;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="M 10.78125,5.125 C 9.6228558,5.031087 8.3153904,5.5344787 7.28125,6.5625 L 6.6875,7.15625 C 5.0328753,8.8010841 4.733916,11.163694 6.03125,12.46875 L 12.53125,19 6,25.46875 c -1.3050563,1.297334 -1.0510841,3.689125 0.59375,5.34375 l 0.59375,0.59375 c 1.6448341,1.654625 4.038694,1.922334 5.34375,0.625 l 6.53125,-6.46875 6.46875,6.5 c 1.297334,1.305056 3.657875,1.051084 5.3125,-0.59375 L 31.4375,30.875 c 1.654625,-1.644834 1.953584,-4.007444 0.65625,-5.3125 l -6.5,-6.53125 L 32.125,12.5625 C 33.430056,11.265166 33.144834,8.8733747 31.5,7.21875 L 30.90625,6.625 C 29.261416,4.9703753 26.898806,4.7026659 25.59375,6 l -6.5,6.46875 -6.5,-6.53125 C 12.10725,5.448104 11.476287,5.1813479 10.78125,5.125 z"
transform="translate(0.33931853,-0.58823573)"
id="rect2988" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="22"
height="19"
id="svg3798"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="pageAction-displayCallingStack.svg">
<defs
id="defs3800" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.313708"
inkscape:cx="9.8914915"
inkscape:cy="12.036692"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="848"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata3803">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1033.3622)">
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 4.90625 3.90625 C 4.532132 4.616128 4.34375 5.4298287 4.34375 6.28125 C 4.34375 6.4959002 4.3489496 6.6983985 4.375 6.90625 L 11.3125 6.90625 L 11.3125 3.90625 L 4.90625 3.90625 z M 4.8125 8.40625 C 5.5380675 9.967138 7.0142586 11.113996 8.8125 11.40625 L 10.625 11.40625 C 10.865212 11.36721 11.084183 11.318686 11.3125 11.25 L 11.3125 8.40625 L 4.8125 8.40625 z "
transform="translate(0,1033.3622)"
id="rect3955-1" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 1 5 L 1 7 L 4.46875 7 C 4.4426996 6.7921495 4.40625 6.589649 4.40625 6.375 C 4.40625 5.90116 4.5025603 5.4363512 4.625 5 L 1 5 z M 1 8 L 1 10 L 5.9375 10 C 5.3819309 9.4446571 4.9452692 8.7500694 4.6875 8 L 1 8 z M 1 11 L 1 13 L 11 13 L 11 11.4375 C 10.618102 11.520482 10.220298 11.5625 9.8125 11.5625 C 8.9439902 11.5625 8.132929 11.352839 7.40625 11 L 1 11 z "
transform="translate(0,1033.3622)"
id="rect3955" />
<path
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#909090;fill-opacity:1;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 14.012442,1035.5221 c -2.335232,-2.4003 -6.181514,-2.4678 -8.563982,-0.1499 -2.382415,2.3178 -2.409607,6.1539 -0.07438,8.5542 2.083652,2.1417 5.370014,2.4455 7.746402,0.8391 l 6.980535,7.1749 1.507034,-1.4662 -6.980536,-7.1749 c 1.672964,-2.3332 1.468573,-5.6355 -0.615078,-7.7772 z m -1.048412,1.02 c 1.790326,1.8402 1.762992,4.7471 -0.04629,6.5074 -1.809231,1.7602 -4.704915,1.6971 -6.495242,-0.1431 -1.790325,-1.8402 -1.763281,-4.7256 0.04595,-6.4858 1.809283,-1.7603 4.705256,-1.7186 6.495583,0.1215 z"
id="path2985"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="19"
height="19"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="pageAction-displayFullURL.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="25.668069"
inkscape:cy="31.957338"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="848"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1033.3622)">
<text
xml:space="preserve"
style="font-size:144px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="-2.7251744"
y="1012.9865"
id="text3755"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3757"
x="-2.7251744"
y="1012.9865"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Times New Roman;-inkscape-font-specification:Times New Roman">https:</tspan></text>
<path
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#909090;fill-opacity:1;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 10.962994,1035.9566 c -2.3352318,-2.4003 -6.1815138,-2.4678 -8.5639818,-0.1499 -2.38241496,2.3178 -2.40960696,6.1539 -0.07438,8.5542 2.083652,2.1417 5.370014,2.4455 7.7464018,0.8391 l 6.980535,7.1749 1.507034,-1.4662 -6.980536,-7.1749 c 1.672964,-2.3332 1.468573,-5.6355 -0.615078,-7.7772 z m -1.0484118,1.02 c 1.7903258,1.8402 1.7629918,4.7471 -0.04629,6.5074 -1.809231,1.7602 -4.704915,1.6971 -6.495242,-0.1431 -1.790325,-1.8402 -1.763281,-4.7256 0.04595,-6.4858 1.809283,-1.7603 4.705256,-1.7186 6.495583,0.1215 z"
id="path2985"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="17"
height="19"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="pageAction-ignorelistDomain.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="49.848596"
inkscape:cy="25.401849"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="848"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1033.3622)">
<text
xml:space="preserve"
style="font-size:144px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="-2.5989053"
y="1016.2492"
id="text3755"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3757"
x="-2.5989053"
y="1016.2492"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Times New Roman;-inkscape-font-specification:Times New Roman">www.</tspan></text>
<path
inkscape:connector-curvature="0"
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#919191;fill-opacity:1;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 8.7680531,1033.5273 c -0.348299,0.01 -0.667634,0.033 -0.953125,0.047 -0.438898,0.022 -1.058414,-0.01 -1.796875,0.2031 -0.884045,0.2512 -1.775855,0.6432 -2.562499,1.2656 -0.898661,0.711 -1.888393,1.6298 -2.390626,2.9531 a 1.2536462,1.2536462 0 1 0 2.343751,0.8907 c 0.238633,-0.6288 0.855014,-1.3062 1.59375,-1.8907 0.456167,-0.3609 1.062726,-0.6305 1.703124,-0.8125 0.240818,-0.068 0.65655,-0.08 1.234375,-0.1093 0.648213,-0.033 1.198974,-0.072 1.6093747,-0.016 0.6140962,0.085 1.1637372,0.2209 1.5781252,0.4375 0.65097,0.3403 1.249745,0.8112 1.640625,1.3281 0.346939,0.4588 0.539607,0.9009 0.6875,1.6094 a 1.250125,1.250125 0 1 0 2.4375,-0.5 c -0.202225,-0.9688 -0.559493,-1.8565 -1.140625,-2.625 -0.673824,-0.8911 -1.555325,-1.5538 -2.46875,-2.0313 -0.809569,-0.4232 -1.636616,-0.5833 -2.3906252,-0.6875 -0.399437,-0.055 -0.7767007,-0.069 -1.1249997,-0.062 z m 0.0625,4.0937 c -0.191903,-0.01 -0.378031,0 -0.5625,0.015 -0.368938,0.033 -0.730297,0.098 -1.046875,0.1875 -0.725057,0.2052 -1.438147,0.5529 -2.062499,1.0938 -0.919358,0.7963 -1.300668,1.7391 -1.6875,2.2968 -0.401133,0.5784 -0.581049,0.9597 -0.671875,1.0469 -0.242332,0.2326 -0.576986,0.5013 -0.859376,0.6875 -0.282389,0.1862 -0.568921,0.2183 -0.328125,0.2188 a 1.250125,1.250125 0 1 0 0,2.5 c 0.802852,0 1.242602,-0.3214 1.703126,-0.625 0.460523,-0.3037 0.88137,-0.6606 1.21875,-0.9844 0.626249,-0.6011 0.819032,-1.1835 0.984374,-1.4219 0.574753,-0.8287 0.909677,-1.5198 1.265625,-1.8281 0.282899,-0.2451 0.695129,-0.4565 1.125,-0.5781 0.399532,-0.1131 0.7815,-0.1425 1.015625,-0.094 0.06037,0.013 0.3006427,0.1611 0.6874997,0.4219 0.192519,0.1298 0.313125,0.2252 0.359375,0.2812 0.2278552,0.276 0.4024262,0.5826 0.4843752,0.8438 0.07477,0.2382 0.11054,0.6041 0.09375,1.0469 -0.01581,0.417 -0.358331,1.1398 -0.390625,2.2343 -0.01846,0.626 -0.07982,1.472 0.3125,2.3907 0.233369,0.5464 0.558433,1.015 0.90625,1.4218 0.347817,0.4068 0.505767,0.7242 1.25,1.0157 a 1.250125,1.250125 0 1 0 0.9375,-2.3125 c 0.292466,0.1101 -0.07053,-0.082 -0.28125,-0.3282 -0.222452,-0.2601 -0.449744,-0.6113 -0.515625,-0.7656 -0.09996,-0.2341 -0.127871,-0.7168 -0.109375,-1.3437 0.01211,-0.4103 0.333757,-1.1314 0.375,-2.2188 0.0205,-0.5405 0.03235,-1.19 -0.1875,-1.8906 -0.206421,-0.6578 -0.552101,-1.2208 -0.9375,-1.6875 -0.302703,-0.3666 -0.62872,-0.5891 -0.890625,-0.7656 -0.324931,-0.2191 -0.81368,-0.6191 -1.5937502,-0.7813 -0.204165,-0.043 -0.4018457,-0.069 -0.5937497,-0.078 z m 6.4531249,4.3282 a 1.250125,1.250125 0 0 0 -1.125,1.125 l -0.171875,1.4843 a 1.2510265,1.2510265 0 1 0 2.484375,0.2969 l 0.171875,-1.4844 a 1.250125,1.250125 0 0 0 -1.234375,-1.4218 1.250125,1.250125 0 0 0 -0.125,0 z m -7.3749999,0.3281 a 1.250125,1.250125 0 0 0 -1.0625,0.9062 c -0.405514,1.3311 -0.79748,2.038 -1.515624,2.8907 -0.621831,0.7383 -1.551617,1.4353 -2.390625,1.8437 a 1.2508786,1.2508786 0 1 0 1.09375,2.25 c 1.155067,-0.5622 2.317654,-1.4145 3.218749,-2.4844 0.897991,-1.0662 1.510122,-2.2089 1.9843747,-3.7656 a 1.250125,1.250125 0 0 0 -1.2031247,-1.6406 1.250125,1.250125 0 0 0 -0.125,0 z m 1.03125,5.6562 c -0.160705,0 -0.32344,0.024 -0.453125,0.078 -0.25937,0.1072 -0.407801,0.2646 -0.5,0.375 -0.368796,0.4416 -0.275597,0.5394 -0.3125,0.7031 -0.02073,0.028 -0.0865,0.1172 -0.203125,0.25 -0.16964,0.1931 -0.420338,0.4169 -0.6875,0.8125 a 1.250125,1.250125 0 0 0 1.78125,1.7031 1.250125,1.250125 0 0 0 1.9999999,-1.4219 c 4.83e-4,0.01 -0.0035,0 -0.01563,-0.031 -0.01294,-0.047 -0.03793,-0.1564 -0.0625,-0.2812 -0.03977,-0.2021 -0.08156,-0.4521 -0.125,-0.6875 -0.02172,-0.1177 -0.04841,-0.2382 -0.07813,-0.3594 -0.02971,-0.1212 -0.03464,-0.2132 -0.1875,-0.4844 -0.07643,-0.1356 -0.1681422,-0.4079 -0.7031252,-0.5937 -0.133745,-0.046 -0.2924197,-0.065 -0.4531247,-0.062 z"
id="path3753-8" />
<g
id="g3803-8"
transform="matrix(0.44599777,0,0,0.44599846,-0.15099788,1034.1493)"
style="fill:#ff0101;fill-opacity:0.6;stroke:#ff0000;stroke-width:3.36324286;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
<path
inkscape:connector-curvature="0"
style="fill:#ff0101;fill-opacity:0.6;fill-rule:nonzero;stroke:#ff0000;stroke-width:3.36324286;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="M 10.78125,5.125 C 9.6228558,5.031087 8.3153904,5.5344787 7.28125,6.5625 L 6.6875,7.15625 C 5.0328753,8.8010841 4.733916,11.163694 6.03125,12.46875 L 12.53125,19 6,25.46875 c -1.3050563,1.297334 -1.0510841,3.689125 0.59375,5.34375 l 0.59375,0.59375 c 1.6448341,1.654625 4.038694,1.922334 5.34375,0.625 l 6.53125,-6.46875 6.46875,6.5 c 1.297334,1.305056 3.657875,1.051084 5.3125,-0.59375 L 31.4375,30.875 c 1.654625,-1.644834 1.953584,-4.007444 0.65625,-5.3125 l -6.5,-6.53125 L 32.125,12.5625 C 33.430056,11.265166 33.144834,8.8733747 31.5,7.21875 L 30.90625,6.625 C 29.261416,4.9703753 26.898806,4.7026659 25.59375,6 l -6.5,6.46875 -6.5,-6.53125 C 12.10725,5.448104 11.476287,5.1813479 10.78125,5.125 z"
transform="translate(0.33931853,-0.58823573)"
id="rect2988" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="17"
height="19"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="pageAction-ignorelistDomain.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="49.848596"
inkscape:cy="25.401849"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="848"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1033.3622)">
<text
xml:space="preserve"
style="font-size:144px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="-2.5989053"
y="1016.2492"
id="text3755"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3757"
x="-2.5989053"
y="1016.2492"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Times New Roman;-inkscape-font-specification:Times New Roman">www.</tspan></text>
<path
inkscape:connector-curvature="0"
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#919191;fill-opacity:1;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 8.7680531,1033.5273 c -0.348299,0.01 -0.667634,0.033 -0.953125,0.047 -0.438898,0.022 -1.058414,-0.01 -1.796875,0.2031 -0.884045,0.2512 -1.775855,0.6432 -2.562499,1.2656 -0.898661,0.711 -1.888393,1.6298 -2.390626,2.9531 a 1.2536462,1.2536462 0 1 0 2.343751,0.8907 c 0.238633,-0.6288 0.855014,-1.3062 1.59375,-1.8907 0.456167,-0.3609 1.062726,-0.6305 1.703124,-0.8125 0.240818,-0.068 0.65655,-0.08 1.234375,-0.1093 0.648213,-0.033 1.198974,-0.072 1.6093747,-0.016 0.6140962,0.085 1.1637372,0.2209 1.5781252,0.4375 0.65097,0.3403 1.249745,0.8112 1.640625,1.3281 0.346939,0.4588 0.539607,0.9009 0.6875,1.6094 a 1.250125,1.250125 0 1 0 2.4375,-0.5 c -0.202225,-0.9688 -0.559493,-1.8565 -1.140625,-2.625 -0.673824,-0.8911 -1.555325,-1.5538 -2.46875,-2.0313 -0.809569,-0.4232 -1.636616,-0.5833 -2.3906252,-0.6875 -0.399437,-0.055 -0.7767007,-0.069 -1.1249997,-0.062 z m 0.0625,4.0937 c -0.191903,-0.01 -0.378031,0 -0.5625,0.015 -0.368938,0.033 -0.730297,0.098 -1.046875,0.1875 -0.725057,0.2052 -1.438147,0.5529 -2.062499,1.0938 -0.919358,0.7963 -1.300668,1.7391 -1.6875,2.2968 -0.401133,0.5784 -0.581049,0.9597 -0.671875,1.0469 -0.242332,0.2326 -0.576986,0.5013 -0.859376,0.6875 -0.282389,0.1862 -0.568921,0.2183 -0.328125,0.2188 a 1.250125,1.250125 0 1 0 0,2.5 c 0.802852,0 1.242602,-0.3214 1.703126,-0.625 0.460523,-0.3037 0.88137,-0.6606 1.21875,-0.9844 0.626249,-0.6011 0.819032,-1.1835 0.984374,-1.4219 0.574753,-0.8287 0.909677,-1.5198 1.265625,-1.8281 0.282899,-0.2451 0.695129,-0.4565 1.125,-0.5781 0.399532,-0.1131 0.7815,-0.1425 1.015625,-0.094 0.06037,0.013 0.3006427,0.1611 0.6874997,0.4219 0.192519,0.1298 0.313125,0.2252 0.359375,0.2812 0.2278552,0.276 0.4024262,0.5826 0.4843752,0.8438 0.07477,0.2382 0.11054,0.6041 0.09375,1.0469 -0.01581,0.417 -0.358331,1.1398 -0.390625,2.2343 -0.01846,0.626 -0.07982,1.472 0.3125,2.3907 0.233369,0.5464 0.558433,1.015 0.90625,1.4218 0.347817,0.4068 0.505767,0.7242 1.25,1.0157 a 1.250125,1.250125 0 1 0 0.9375,-2.3125 c 0.292466,0.1101 -0.07053,-0.082 -0.28125,-0.3282 -0.222452,-0.2601 -0.449744,-0.6113 -0.515625,-0.7656 -0.09996,-0.2341 -0.127871,-0.7168 -0.109375,-1.3437 0.01211,-0.4103 0.333757,-1.1314 0.375,-2.2188 0.0205,-0.5405 0.03235,-1.19 -0.1875,-1.8906 -0.206421,-0.6578 -0.552101,-1.2208 -0.9375,-1.6875 -0.302703,-0.3666 -0.62872,-0.5891 -0.890625,-0.7656 -0.324931,-0.2191 -0.81368,-0.6191 -1.5937502,-0.7813 -0.204165,-0.043 -0.4018457,-0.069 -0.5937497,-0.078 z m 6.4531249,4.3282 a 1.250125,1.250125 0 0 0 -1.125,1.125 l -0.171875,1.4843 a 1.2510265,1.2510265 0 1 0 2.484375,0.2969 l 0.171875,-1.4844 a 1.250125,1.250125 0 0 0 -1.234375,-1.4218 1.250125,1.250125 0 0 0 -0.125,0 z m -7.3749999,0.3281 a 1.250125,1.250125 0 0 0 -1.0625,0.9062 c -0.405514,1.3311 -0.79748,2.038 -1.515624,2.8907 -0.621831,0.7383 -1.551617,1.4353 -2.390625,1.8437 a 1.2508786,1.2508786 0 1 0 1.09375,2.25 c 1.155067,-0.5622 2.317654,-1.4145 3.218749,-2.4844 0.897991,-1.0662 1.510122,-2.2089 1.9843747,-3.7656 a 1.250125,1.250125 0 0 0 -1.2031247,-1.6406 1.250125,1.250125 0 0 0 -0.125,0 z m 1.03125,5.6562 c -0.160705,0 -0.32344,0.024 -0.453125,0.078 -0.25937,0.1072 -0.407801,0.2646 -0.5,0.375 -0.368796,0.4416 -0.275597,0.5394 -0.3125,0.7031 -0.02073,0.028 -0.0865,0.1172 -0.203125,0.25 -0.16964,0.1931 -0.420338,0.4169 -0.6875,0.8125 a 1.250125,1.250125 0 0 0 1.78125,1.7031 1.250125,1.250125 0 0 0 1.9999999,-1.4219 c 4.83e-4,0.01 -0.0035,0 -0.01563,-0.031 -0.01294,-0.047 -0.03793,-0.1564 -0.0625,-0.2812 -0.03977,-0.2021 -0.08156,-0.4521 -0.125,-0.6875 -0.02172,-0.1177 -0.04841,-0.2382 -0.07813,-0.3594 -0.02971,-0.1212 -0.03464,-0.2132 -0.1875,-0.4844 -0.07643,-0.1356 -0.1681422,-0.4079 -0.7031252,-0.5937 -0.133745,-0.046 -0.2924197,-0.065 -0.4531247,-0.062 z"
id="path3753-8" />
<g
id="g3803-8"
transform="matrix(0.44599777,0,0,0.44599846,-0.15099788,1034.1493)"
style="fill:#ff0101;fill-opacity:0.6;stroke:#ff0000;stroke-width:3.36324286;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
<path
inkscape:connector-curvature="0"
style="fill:#ff0101;fill-opacity:0.6;fill-rule:nonzero;stroke:#ff0000;stroke-width:3.36324286;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="M 10.78125,5.125 C 9.6228558,5.031087 8.3153904,5.5344787 7.28125,6.5625 L 6.6875,7.15625 C 5.0328753,8.8010841 4.733916,11.163694 6.03125,12.46875 L 12.53125,19 6,25.46875 c -1.3050563,1.297334 -1.0510841,3.689125 0.59375,5.34375 l 0.59375,0.59375 c 1.6448341,1.654625 4.038694,1.922334 5.34375,0.625 l 6.53125,-6.46875 6.46875,6.5 c 1.297334,1.305056 3.657875,1.051084 5.3125,-0.59375 L 31.4375,30.875 c 1.654625,-1.644834 1.953584,-4.007444 0.65625,-5.3125 l -6.5,-6.53125 L 32.125,12.5625 C 33.430056,11.265166 33.144834,8.8733747 31.5,7.21875 L 30.90625,6.625 C 29.261416,4.9703753 26.898806,4.7026659 25.59375,6 l -6.5,6.46875 -6.5,-6.53125 C 12.10725,5.448104 11.476287,5.1813479 10.78125,5.125 z"
transform="translate(0.33931853,-0.58823573)"
id="rect2988" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="19"
height="19"
id="svg2"
version="1.1"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
sodipodi:docname="pageAction-inspectWhitelist.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="4.6442693"
inkscape:cy="37.008101"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="841"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1033.3622)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="-4.8717484"
y="1008.9256"
id="text3755"><tspan
sodipodi:role="line"
id="tspan3757"
x="-4.8717484"
y="1008.9256"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';text-align:start;text-anchor:start">www.</tspan></text>
<path
style="fill:none;stroke:#00be00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 4.1668789,1040.8717 c 2.65165,3.1567 3.661803,3.788 4.293148,8.5863 0.883884,-3.7881 2.3550471,-9.0615 7.0710681,-13.3846"
id="path2985"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#909090;fill-opacity:1;stroke:none;stroke-width:3.00000048;marker:none;enable-background:accumulate"
d="m 12.132528,1038.8104 c -1.951229,-2.0055 -5.1650311,-2.0621 -7.1557308,-0.1252 -1.9906536,1.9366 -2.0133742,5.1417 -0.062156,7.1474 1.7410193,1.7895 4.4869752,2.0432 6.4725938,0.7011 l 5.832664,5.995 1.259219,-1.225 -5.832666,-5.9951 c 1.397863,-1.9497 1.227084,-4.7088 -0.513935,-6.4985 z m -0.876012,0.8523 c 1.495926,1.5376 1.473088,3.9665 -0.03868,5.4376 -1.5117245,1.4706 -3.9312443,1.4177 -5.4271737,-0.1197 -1.495926,-1.5376 -1.473329,-3.9486 0.038391,-5.4192 1.5117684,-1.4709 3.9315303,-1.4359 5.4274577,0.1004 z"
id="path2985-3"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
width="38"
height="38"
viewBox="0 0 38 38"
sodipodi:docname="pageAction-printed.svg"
inkscape:export-filename="Fingerprint.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="848"
id="namedview4"
showgrid="false"
inkscape:zoom="8.4296296"
inkscape:cx="23.956678"
inkscape:cy="31.057044"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<path
id="path3753"
style="fill:none;stroke:#919191;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 6.5395498,10.17429 c 0.7408653,-1.9520786 2.3402,-3.5432761 3.9775962,-4.8388171 1.242812,-0.983338 2.744201,-1.660303 4.268645,-2.093438 0.979278,-0.27824 2.022824,-0.2462293 3.039548,-0.297934 1.219195,-0.062001 2.453007,-0.18146 3.662283,-0.014333 1.368105,0.1890774 2.759629,0.4995468 3.983586,1.1393823 1.564395,0.8178027 3.037124,1.9416322 4.101829,3.349658 0.928071,1.2273323 1.485164,2.5584127 1.835282,4.2356441"
inkscape:connector-curvature="0"
sodipodi:nodetypes="caaaaaac" />
<path
style="fill:none;stroke:#919191;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 28.226191,30.535847 c -0.705549,-0.276298 -2.334601,-2.105253 -2.9331,-3.506685 -0.492279,-1.152708 -0.452262,-2.484391 -0.415298,-3.737271 0.0444,-1.504792 0.705511,-2.947131 0.76257,-4.451496 0.03729,-0.983271 0.01802,-2.000111 -0.276597,-2.938947 -0.28837,-0.918928 -0.808138,-1.772901 -1.421391,-2.515536 -0.348954,-0.422576 -0.798177,-0.758586 -1.2526,-1.064918 -0.711789,-0.479826 -1.441775,-1.018308 -2.282216,-1.193051 -1.050788,-0.218477 -2.178824,-0.06167 -3.211511,0.230645 -1.154928,0.326914 -2.286754,0.87691 -3.194005,1.662802 -1.275306,1.104713 -1.992225,2.724079 -2.953811,4.110495 -0.566475,0.816745 -0.941198,1.789962 -1.658273,2.478272 -1.1594225,1.112912 -2.9893077,2.51719 -4.1134185,2.515015"
id="path3761"
inkscape:connector-curvature="0"
sodipodi:nodetypes="caaaaaaaaaaac" />
<path
style="fill:none;stroke:#919191;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 18.150896,20.381584 c -0.879767,2.887668 -1.890819,4.740429 -3.506955,6.659271 -1.522926,1.808173 -3.627915,3.352908 -5.62199,4.323469"
id="path3764"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cac" />
<path
style="fill:none;stroke:#919191;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 17.696557,34.987707 c 0.591743,-0.876117 1.883594,-1.823128 2.139697,-2.959374 0.360415,-1.599032 0.578087,2.114498 1.043851,3.123918"
id="path3768"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csc" />
<path
style="fill:none;stroke:#919191;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 32.860324,19.731113 32.504352,22.69683"
id="path3774"
inkscape:connector-curvature="0" />
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
version="1.1"
inkscape:version="0.92.2 2405546, 2018-03-11"
width="38"
height="38"
viewBox="0 0 38 38"
sodipodi:docname="pageAction-printedHighlight.svg"
inkscape:export-filename="Fingerprint.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="841"
id="namedview4"
showgrid="false"
inkscape:zoom="8.4296296"
inkscape:cx="0.29015771"
inkscape:cy="31.057044"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<style>
@keyframes blink {
0% { stroke: #919191; }
50% { stroke: #fc2626; }
100% { stroke: #919191; }
}
</style>
<path
id="path3753"
style="fill:none;stroke:#fc2626;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;animation: blink 1.5s cubic-bezier(.45,.05,.55,.95) infinite;"
d="m 6.5395498,10.17429 c 0.7408653,-1.9520786 2.3402,-3.5432761 3.9775962,-4.8388171 1.242812,-0.983338 2.744201,-1.660303 4.268645,-2.093438 0.979278,-0.27824 2.022824,-0.2462293 3.039548,-0.297934 1.219195,-0.062001 2.453007,-0.18146 3.662283,-0.014333 1.368105,0.1890774 2.759629,0.4995468 3.983586,1.1393823 1.564395,0.8178027 3.037124,1.9416322 4.101829,3.349658 0.928071,1.2273323 1.485164,2.5584127 1.835282,4.2356441"
inkscape:connector-curvature="0"
sodipodi:nodetypes="caaaaaac" />
<path
style="fill:none;stroke:#fc2626;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;animation: blink 1.5s cubic-bezier(.45,.05,.55,.95) infinite;"
d="m 28.226191,30.535847 c -0.705549,-0.276298 -2.334601,-2.105253 -2.9331,-3.506685 -0.492279,-1.152708 -0.452262,-2.484391 -0.415298,-3.737271 0.0444,-1.504792 0.705511,-2.947131 0.76257,-4.451496 0.03729,-0.983271 0.01802,-2.000111 -0.276597,-2.938947 -0.28837,-0.918928 -0.808138,-1.772901 -1.421391,-2.515536 -0.348954,-0.422576 -0.798177,-0.758586 -1.2526,-1.064918 -0.711789,-0.479826 -1.441775,-1.018308 -2.282216,-1.193051 -1.050788,-0.218477 -2.178824,-0.06167 -3.211511,0.230645 -1.154928,0.326914 -2.286754,0.87691 -3.194005,1.662802 -1.275306,1.104713 -1.992225,2.724079 -2.953811,4.110495 -0.566475,0.816745 -0.941198,1.789962 -1.658273,2.478272 -1.1594225,1.112912 -2.9893077,2.51719 -4.1134185,2.515015"
id="path3761"
inkscape:connector-curvature="0"
sodipodi:nodetypes="caaaaaaaaaaac" />
<path
style="fill:none;stroke:#fc2626;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;animation: blink 1.5s cubic-bezier(.45,.05,.55,.95) infinite;"
d="m 18.150896,20.381584 c -0.879767,2.887668 -1.890819,4.740429 -3.506955,6.659271 -1.522926,1.808173 -3.627915,3.352908 -5.62199,4.323469"
id="path3764"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cac" />
<path
style="fill:none;stroke:#fc2626;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;animation: blink 1.5s cubic-bezier(.45,.05,.55,.95) infinite;"
d="m 17.696557,34.987707 c 0.591743,-0.876117 1.883594,-1.823128 2.139697,-2.959374 0.360415,-1.599032 0.578087,2.114498 1.043851,3.123918"
id="path3768"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csc" />
<path
style="fill:none;stroke:#fc2626;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;animation: blink 1.5s cubic-bezier(.45,.05,.55,.95) infinite;"
d="M 32.860324,19.731113 32.504352,22.69683"
id="path3774"
inkscape:connector-curvature="0" />
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
version="1.1"
inkscape:version="0.92.2 2405546, 2018-03-11"
width="38"
height="38"
viewBox="0 0 38 38"
sodipodi:docname="pageAction-printedHighlight.svg"
inkscape:export-filename="Fingerprint.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="841"
id="namedview4"
showgrid="false"
inkscape:zoom="8.4296296"
inkscape:cx="0.29015771"
inkscape:cy="31.057044"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<style>
@keyframes blink {
0% { stroke: #919191; }
50% { stroke: #fc2626; }
100% { stroke: #919191; }
}
</style>
<path
id="path3753"
style="fill:none;stroke:#fc2626;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;"
d="m 6.5395498,10.17429 c 0.7408653,-1.9520786 2.3402,-3.5432761 3.9775962,-4.8388171 1.242812,-0.983338 2.744201,-1.660303 4.268645,-2.093438 0.979278,-0.27824 2.022824,-0.2462293 3.039548,-0.297934 1.219195,-0.062001 2.453007,-0.18146 3.662283,-0.014333 1.368105,0.1890774 2.759629,0.4995468 3.983586,1.1393823 1.564395,0.8178027 3.037124,1.9416322 4.101829,3.349658 0.928071,1.2273323 1.485164,2.5584127 1.835282,4.2356441"
inkscape:connector-curvature="0"
sodipodi:nodetypes="caaaaaac" />
<path
style="fill:none;stroke:#fc2626;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;"
d="m 28.226191,30.535847 c -0.705549,-0.276298 -2.334601,-2.105253 -2.9331,-3.506685 -0.492279,-1.152708 -0.452262,-2.484391 -0.415298,-3.737271 0.0444,-1.504792 0.705511,-2.947131 0.76257,-4.451496 0.03729,-0.983271 0.01802,-2.000111 -0.276597,-2.938947 -0.28837,-0.918928 -0.808138,-1.772901 -1.421391,-2.515536 -0.348954,-0.422576 -0.798177,-0.758586 -1.2526,-1.064918 -0.711789,-0.479826 -1.441775,-1.018308 -2.282216,-1.193051 -1.050788,-0.218477 -2.178824,-0.06167 -3.211511,0.230645 -1.154928,0.326914 -2.286754,0.87691 -3.194005,1.662802 -1.275306,1.104713 -1.992225,2.724079 -2.953811,4.110495 -0.566475,0.816745 -0.941198,1.789962 -1.658273,2.478272 -1.1594225,1.112912 -2.9893077,2.51719 -4.1134185,2.515015"
id="path3761"
inkscape:connector-curvature="0"
sodipodi:nodetypes="caaaaaaaaaaac" />
<path
style="fill:none;stroke:#fc2626;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;"
d="m 18.150896,20.381584 c -0.879767,2.887668 -1.890819,4.740429 -3.506955,6.659271 -1.522926,1.808173 -3.627915,3.352908 -5.62199,4.323469"
id="path3764"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cac" />
<path
style="fill:none;stroke:#fc2626;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;"
d="m 17.696557,34.987707 c 0.591743,-0.876117 1.883594,-1.823128 2.139697,-2.959374 0.360415,-1.599032 0.578087,2.114498 1.043851,3.123918"
id="path3768"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csc" />
<path
style="fill:none;stroke:#fc2626;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;"
d="M 32.860324,19.731113 32.504352,22.69683"
id="path3774"
inkscape:connector-curvature="0" />
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="19"
height="19"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="pageAction-whitelistDomain.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="49.848596"
inkscape:cy="42.058864"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="848"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1033.3622)">
<path
style="fill:none;stroke:#00be00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 4.1668789,1040.8717 c 2.65165,3.1567 3.661803,3.788 4.293148,8.5863 0.883884,-3.7881 2.3550471,-9.0615 7.0710681,-13.3846"
id="path2985"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="19"
height="19"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="pageAction-whitelistDomain.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="49.848596"
inkscape:cy="42.058864"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="848"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1033.3622)">
<path
style="fill:none;stroke:#00be00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 4.1668789,1040.8717 c 2.65165,3.1567 3.661803,3.788 4.293148,8.5863 0.883884,-3.7881 2.3550471,-9.0615 7.0710681,-13.3846"
id="path2985"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="19"
height="19"
id="svg2"
version="1.1"
inkscape:version="0.92.2 2405546, 2018-03-11"
sodipodi:docname="pageAction-whitelistDomainTemporarily.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="34.759442"
inkscape:cy="26.906576"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="841"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1033.3622)">
<path
style="fill:none;stroke:#00be00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 4.1668789,1040.8717 c 2.65165,3.1567 3.661803,3.788 4.293148,8.5863 0.883884,-3.7881 2.3550471,-9.0615 7.0710681,-13.3846"
id="path2985"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<g
id="g1396"
transform="matrix(1.25,0,0,1.25,-4.2499997,-262.84053)"
style="fill:#ffffff;fill-opacity:1">
<circle
r="3.6056104"
cy="1047.3622"
cx="13"
id="path1366"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#bbbbbb;stroke-width:0.78877938;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path1368"
d="m 13.188069,1044.9014 v 2.5254"
style="fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path1370"
d="m 13.188069,1047.4268 2.466712,-1.2334"
style="fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="19"
height="19"
id="svg2"
version="1.1"
inkscape:version="0.92.2 2405546, 2018-03-11"
sodipodi:docname="pageAction-whitelistDomainTemporarily.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="34.759442"
inkscape:cy="26.906576"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="841"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1033.3622)">
<path
style="fill:none;stroke:#00be00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 4.1668789,1040.8717 c 2.65165,3.1567 3.661803,3.788 4.293148,8.5863 0.883884,-3.7881 2.3550471,-9.0615 7.0710681,-13.3846"
id="path2985"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<g
id="g1396"
transform="matrix(1.25,0,0,1.25,-4.2499997,-262.84053)"
style="fill:#ffffff;fill-opacity:1">
<circle
r="3.6056104"
cy="1047.3622"
cx="13"
id="path1366"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#bbbbbb;stroke-width:0.78877938;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path1368"
d="m 13.188069,1044.9014 v 2.5254"
style="fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path1370"
d="m 13.188069,1047.4268 2.466712,-1.2334"
style="fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="19"
height="19"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="pageAction-whitelistURL.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="49.848596"
inkscape:cy="42.058864"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="848"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1033.3622)">
<path
style="fill:none;stroke:#00be00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 4.167,1040.8719 c 2.65165,3.1567 3.661803,3.788 4.293148,8.5863 0.883884,-3.7881 2.355047,-9.0615 7.071068,-13.3846"
id="path2985"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="19"
height="19"
id="svg2"
version="1.1"
inkscape:version="0.92.2 2405546, 2018-03-11"
sodipodi:docname="pageAction-whitelistURLTemporarily.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="44.797833"
inkscape:cy="16.80505"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="841"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1033.3622)">
<path
style="fill:none;stroke:#00be00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 4.167,1040.8719 c 2.65165,3.1567 3.661803,3.788 4.293148,8.5863 0.883884,-3.7881 2.355047,-9.0615 7.071068,-13.3846"
id="path2985"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<ellipse
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#bbbbbb;stroke-width:0.98597425;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path1366"
cx="12"
cy="1046.3623"
rx="4.5070128"
ry="4.5070133" />
<path
style="fill:none;stroke:#000000;stroke-width:0.62500006;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.235088,1043.2863 v 3.1567"
id="path1368"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.62500006;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.235088,1046.443 3.08339,-1.5417"
id="path1370"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

215
lib/askForPermission.js Normal file
View File

@ -0,0 +1,215 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
(function(){
"use strict";
let scope;
if ((typeof exports) !== "undefined"){
scope = exports;
}
else {
scope = require.register("./askForPermission", {});
}
const {parseErrorStack} = require("./callingStack");
// Check canvas appearance
function canvasAppearance(window, api, context){
let oldBorder = false;
let canvas = false;
let inDOM = null;
if (api === "canvas" && context){
let nodeName;
try {
nodeName = context.nodeName;
}
catch (error){
nodeName = "";
}
if (nodeName === "CANVAS"){
canvas = context;
}
else if (
context instanceof window.CanvasRenderingContext2D ||
context instanceof window.WebGLRenderingContext
){
canvas = context.canvas;
}
}
if (canvas){
oldBorder = canvas.style.border;
canvas.style.border = "2px solid red";
inDOM = canvas.ownerDocument.contains(canvas);
}
return {
canvas: canvas,
askCategory: canvas? (inDOM? "visible": "invisible"): (api === "canvas"? "nocanvas": api),
get text(){
const text = canvas? (this.visible? "visible": "invisible"): (api === "canvas"? "nocanvas": api);
Object.defineProperty(this, "text", {value: text});
return text;
},
inDom: inDOM,
get visible(){
let visible = inDOM;
if (inDOM){
canvas.scrollIntoView();
const rect = canvas.getBoundingClientRect();
const foundEl = window.document.elementFromPoint(
rect.left + rect.width / 2,
rect.top + rect.height / 2
);
visible = (foundEl === canvas);
}
Object.defineProperty(this, "visible", {value: visible});
return visible;
},
reset: function(){
if (canvas){
canvas.style.border = oldBorder;
}
}
};
}
const modes = new WeakMap();
function getAskMode(window, type, _){
let mode = modes.get(window);
if (mode){
return mode[type];
}
else {
mode = {
context: {
askText: {
visible: _("askForVisiblePermission"),
invisible: _("askForInvisiblePermission"),
nocanvas: _("askForPermission"),
audio: _("askForAudioPermission"),
history: _("askForHistoryPermission"),
window: _("askForWindowPermission"),
domRect: _("askForDOMRectPermission"),
svg: _("askForSVGPermission"),
},
askStatus: {
alreadyAsked: {},
answer: {}
}
},
input: {
askText: {
visible: _("askForVisibleInputPermission"),
invisible: _("askForInvisibleInputPermission"),
nocanvas: _("askForInputPermission"),
audio: _("askForAudioInputPermission"),
history: _("askForHistoryInputPermission"),
window: _("askForWindowInputPermission"),
domRect: _("askForDOMRectInputPermission"),
svg: _("askForSVGInputPermission"),
},
askStatus: {
alreadyAsked: {},
answer: {}
}
},
readout: {
askText: {
visible: _("askForVisibleReadoutPermission"),
invisible: _("askForInvisibleReadoutPermission"),
nocanvas: _("askForReadoutPermission"),
audio: _("askForAudioReadoutPermission"),
history: _("askForHistoryReadoutPermission"),
window: _("askForWindowReadoutPermission"),
domRect: _("askForDOMRectReadoutPermission"),
svg: _("askForSVGReadoutPermission"),
},
askStatus: {
alreadyAsked: {},
answer: {}
}
}
};
modes.set(window, mode);
return mode[type];
}
}
scope.ask = function({window, type, api, canvas, errorStack}, {_, prefs}){
let answer;
const askMode = getAskMode(window, type, _);
const askStatus = askMode.askStatus;
const appearance = canvasAppearance(window, api, canvas);
let category = appearance.askCategory;
if (prefs("askOnlyOnce") !== "no" && askStatus.alreadyAsked[category]){
// already asked
appearance.reset();
return askStatus.answer[category];
}
else {
let imgContainer = null;
if (type === "readout" && prefs("showCanvasWhileAsking") && canvas){
try {
let document = window.top.document;
imgContainer = document.createElement("div");
imgContainer.style.cssText = `
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.7);
color: white;
text-align: center;
z-index: 100000000000000;
padding: 1em;`;
let heading = document.createElement("h1");
heading.textContent = "CanvasBlocker";
imgContainer.appendChild(heading);
let text = document.createElement("div");
text.style.margin = "0.5em auto";
text.textContent = _("showCanvasWhileAsking_message");
imgContainer.appendChild(text);
let img = document.createElement("img");
img.style.backgroundColor = "white";
img.style.border = "2px solid lightgray";
img.src = HTMLCanvasElement.prototype.toDataURL.call(canvas);
imgContainer.appendChild(img);
document.body.appendChild(imgContainer);
}
catch (error){
// unable to read the canvas
}
}
// asking
let msg = askMode.askText[appearance.text];
// visible vs invisible is only calculated here correctly
category = appearance.text;
if (prefs("showCallingFile")){
msg += parseErrorStack(errorStack).toString(_);
}
answer = window.top.confirm(msg)? "allow": prefs("askDenyMode");
if (imgContainer && imgContainer.parentNode){
imgContainer.parentNode.removeChild(imgContainer);
}
if (prefs("askOnlyOnce") === "combined"){
["context", "readout", "input"].forEach(function(type){
const askMode = getAskMode(window, type, _);
const askStatus = askMode.askStatus;
askStatus.alreadyAsked[category] = true;
askStatus.answer[category] = answer;
});
}
else {
askStatus.alreadyAsked[category] = true;
askStatus.answer[category] = answer;
}
appearance.reset();
return answer;
}
};
}());

100
lib/callingStack.js Normal file
View File

@ -0,0 +1,100 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
(function(){
"use strict";
let scope;
if ((typeof exports) !== "undefined"){
scope = exports;
}
else {
scope = require.register("./callingStack", {});
}
const settings = require("./settings");
const extension = require("./extension");
// Translation
const _ = function(name, replace, translateAPI){
if (!translateAPI){
translateAPI = extension.getTranslation;
}
let str = translateAPI(name) || name;
if (replace){
// replace generic content in the translation by given parameter
Object.keys(replace).forEach(function(name){
str = str.replace(new RegExp("{" + name + "}", "g"), replace[name]);
});
}
return str;
};
// Stack parsing
function parseStackEntry(entry){
const m = /@(.*):(\d*):(\d*)$/.exec(entry) || ["", entry, "--", "--"];
return {
url: m[1],
line: parseInt(m[2], 10),
column: parseInt(m[3], 10),
raw: entry
};
}
function stackRuleMatch(stackEntry, stackRule){
if (!stackEntry){
return false;
}
if (stackEntry.url !== stackRule.url){
return false;
}
if ((typeof stackRule.line) !== "undefined" && stackEntry.line !== stackRule.line){
return false;
}
if ((typeof stackRule.column) !== "undefined" && stackEntry.column !== stackRule.column){
return false;
}
return true;
}
// parse calling stack
const extensionID = extension.extensionID;
function parseErrorStack(errorStack){
const callers = errorStack.trim().split("\n").map(parseStackEntry).filter(function(caller){
return !caller.url.startsWith(extensionID);
});
return {
toString: function(translateAPI){
let msg = "";
msg += "\n\n" + _("sourceOutput", undefined, translateAPI) + ": ";
if (settings.showCompleteCallingStack){
msg += callers.reduce(function(stack, c){
return stack + "\n\t" + _("stackEntryOutput", c, translateAPI);
}, "");
}
else{
msg += _("stackEntryOutput", callers[0], translateAPI);
}
return msg;
},
match: function(stackRule){
if (typeof stackRule.stackPosition !== "undefined"){
let pos = stackRule.stackPosition;
if (pos < 0){
pos += callers.length;
}
return stackRuleMatch(callers[pos], stackRule);
}
else {
return callers.some(function(stackEntry){
return stackRuleMatch(stackEntry, stackRule);
});
}
}
};
}
scope.parseErrorStack = parseErrorStack;
}());

105
lib/check.js Normal file
View File

@ -0,0 +1,105 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
(function(){
"use strict";
let scope;
if ((typeof exports) !== "undefined"){
scope = exports;
}
else {
scope = require.register("./check", {});
}
const settings = require("./settings");
const lists = require("./lists");
const {parseErrorStack} = require("./callingStack");
const logging = require("./logging");
scope.check = function check({url, errorStack}){
url = new URL(url || "about:blank");
const match = checkBoth(errorStack, url, settings.get("blockMode", url)).match(
/^(block|allow|fake|ask)(|Everything|Internal)$/
);
if (match){
return {
url: url,
internal: match[2] === "Internal",
mode: match[1]
};
}
else {
return {
url: url,
internal: false,
mode: "block"
};
}
};
function checkBoth(errorStack, url, blockMode){
if (settings.enableStackList && errorStack && checkStack(errorStack)){
return "allow";
}
else {
return checkURL(url, blockMode);
}
}
function checkURL(url, blockMode){
logging.message("check url %s for block mode %s", url, blockMode);
switch (url.protocol){
case "about:":
if (url.pathname === "blank"){
logging.message("use regular mode on about:blank");
break;
}
logging.message("allow internal URLs");
return "allowInternal";
case "chrome:":
logging.message("allow internal URLs");
return "allowInternal";
}
let mode = "block";
switch (blockMode){
case "blockEverything":
mode = "block";
break;
case "block":
case "ask":
case "fake":
case "allow":
if (url && lists.get("white").match(url)){
mode = "allow";
}
else if (url && lists.get("black").match(url)){
mode = "block";
}
else {
mode = blockMode;
}
break;
case "allowEverything":
mode = "allow";
break;
default:
logging.warning("Unknown blocking mode (" + blockMode + "). Default to block everything.");
}
return mode;
}
function checkStack(errorStack){
if (settings.enableStackList){
const stackList = lists.get("stack");
if (stackList.length){
const callingStack = parseErrorStack(errorStack);
return stackList.match(callingStack);
}
}
return false;
}
scope.checkStack = checkStack;
}());

109
lib/colorStatistics.js Normal file
View File

@ -0,0 +1,109 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
(function(){
"use strict";
let scope;
if ((typeof exports) !== "undefined"){
scope = exports;
}
else {
scope = require.register("./colorStatistics", {});
}
class Statistic{
constructor(){
this.colors = Object.create(null);
this.numberOfColors = 0;
this.minBoundary = {count: Number.NEGATIVE_INFINITY};
this.maxBoundary = {count: Number.POSITIVE_INFINITY, previousColor: this.minBoundary};
this.minBoundary.nextColor = this.maxBoundary;
}
addColor(r, g, b, a){
const index = String.fromCharCode(r, g, b, a);
let color = this.colors[index];
if (!color){
color = {
index,
color: [r, g, b, a],
count: 0,
previousColor: this.minBoundary,
nextColor: this.minBoundary.nextColor
};
this.numberOfColors += 1;
this.minBoundary.nextColor = color;
color.nextColor.previousColor = color;
this.colors[index] = color;
}
color.count += 1;
if (color.count > color.nextColor.count){
// swap colors to remain in right order
// a_ -> b_ -> c -> d becomes a_ -> c -> b_ -> d
const a_ = color.previousColor;
const b_ = color;
const c = color.nextColor;
const d = color.nextColor.nextColor;
a_.nextColor = c;
c.previousColor = a_;
c.nextColor = b_;
b_.previousColor = c;
b_.nextColor = d;
d.previousColor = b_;
}
}
getMaxColors(n){
n = Math.min(n, this.numberOfColors);
const colors = Object.create(null);
let current = this.maxBoundary;
for (;n && current;n -= 1){
current = current.previousColor;
colors[current.index] = current;
}
return colors;
}
}
scope.compute = function computeColorStatistics(rawData){
const statistic = new Statistic();
for (let i = 0, l = rawData.length; i < l; i += 4){
statistic.addColor(
rawData[i + 0],
rawData[i + 1],
rawData[i + 2],
rawData[i + 3]
);
}
return statistic;
};
scope.hasMoreColors = function hasMoreColors(rawData, threshold, statistic){
if (statistic){
return statistic.numberOfColors > threshold;
}
else {
const colors = Object.create(null);
let count = 0;
for (let i = 0, l = rawData.length; i < l; i += 4){
const index = String.fromCharCode(
rawData[i + 0],
rawData[i + 1],
rawData[i + 2],
rawData[i + 3]
);
if (!Object.prototype.hasOwnProperty.call(colors, index)){
colors[index] = true;
count += 1;
if (count > threshold){
return true;
}
}
}
return count > threshold;
}
};
}());

104
lib/dataUrls.js Normal file
View File

@ -0,0 +1,104 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
(function(){
"use strict";
let scope;
if ((typeof exports) !== "undefined"){
scope = exports;
}
else {
scope = require.register("./dataUrls", {});
}
const logging = require("./logging");
const settings = require("./settings");
const settingContainer = require("./settingContainers");
let canMergeHeader = false;
let blockBlob = true;
browser.runtime.getBrowserInfo().then(function(info){
const mainVersion = parseInt(info.version.replace(/\..+/, ""), 10);
canMergeHeader = mainVersion > 59;
blockBlob = mainVersion < 60;
return canMergeHeader;
}).catch(function(){
canMergeHeader = false;
blockBlob = true;
});
function setHeader(headers, header){
if (canMergeHeader){
headers.push(header);
}
else {
const headerName = header.name.toLowerCase();
const presentHeader = headers.filter(function(h){
return h.name.toLowerCase() === headerName;
});
if (presentHeader.length){
presentHeader[0].value += ", " + header.value;
}
else {
headers.push(header);
}
}
}
scope.init = function(){
function listener(details){
const headers = details.responseHeaders;
if (
details.statusCode !== 304 &&
settings.get("blockDataURLs", new URL(details.url))
){
const cspMatch = (blockBlob? "": "blob: ") + "filesystem: *";
logging.verbose("Adding CSP header to", details);
setHeader(headers, {
name: "Content-Security-Policy",
value: `object-src ${cspMatch}; frame-src ${cspMatch}`
// + "; report-to https://canvasblocker.invalid/; report-uri https://canvasblocker.invalid/"
});
}
return {
responseHeaders: headers
};
}
function addListener(){
if (!browser.webRequest.onHeadersReceived.hasListener(listener)){
logging.message("add listener for CSP headers (data URL protection)");
browser.webRequest.onHeadersReceived.addListener(
listener,
{
urls: ["<all_urls>"],
types: ["main_frame", "sub_frame", "object"]
},
["blocking", "responseHeaders"]
);
}
}
function removeListener(){
if (browser.webRequest.onHeadersReceived.hasListener(listener)){
logging.message("remove listener for CSP headers (data URL protection)");
browser.webRequest.onHeadersReceived.removeListener(listener);
}
}
function adjustListener(){
if (
settings.blockDataURLs ||
settingContainer.urlContainer.get().some(function(entry){
return entry.blockDataURLs;
})
){
addListener();
}
else {
removeListener();
}
}
settings.onloaded(adjustListener);
settings.on("blockDataURLs", adjustListener);
settingContainer.urlContainer.on(adjustListener);
};
}());

330
lib/extension.js Normal file
View File

@ -0,0 +1,330 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
(function(){
"use strict";
let scope;
if ((typeof exports) !== "undefined"){
scope = exports;
}
else {
scope = require.register("./extension", {});
}
const browserAvailable = typeof browser !== "undefined";
const logging = require("./logging");
scope.inBackgroundScript = !!(
browserAvailable &&
browser.extension.getBackgroundPage &&
browser.extension.getBackgroundPage() === window
);
scope.getTranslation = browserAvailable? function getTranslation(id){
return browser.i18n.getMessage(id);
}: function(id){
return id;
};
scope.parseTranslation = function parseTranslation(message, parameters = {}){
const container = document.createDocumentFragment();
message.split(/(\{[^}]+\})/).forEach(function(part){
if (part.startsWith("{") && part.endsWith("}")){
part = part.substring(1, part.length - 1);
const args = part.split(":");
switch (args[0]){
case "image": {
const image = document.createElement("img");
image.className = "noticeImage";
image.src = args.slice(1).join(":");
container.appendChild(image);
break;
}
case "link": {
const link = document.createElement("a");
link.target = "_blank";
link.textContent = args[1];
link.href = args.slice(2).join(":");
container.appendChild(link);
break;
}
default:
if (parameters[args[0]]){
const parameter = parameters[args[0]];
if ((typeof parameter) === "function"){
container.appendChild(parameter(args.slice(1).join(":")));
}
else {
container.appendChild(document.createTextNode(parameter));
}
}
else {
container.appendChild(document.createTextNode(part));
}
}
}
else {
container.appendChild(document.createTextNode(part));
}
});
return container;
};
scope.getURL = function getURL(str){
return browser.runtime.getURL(str);
};
scope.extensionID = browserAvailable? scope.getURL(""): "extensionID";
scope.inIncognitoContext = browserAvailable? browser.extension.inIncognitoContext: false;
scope.message = {
on: browserAvailable? function(callback){
return browser.runtime.onMessage.addListener(callback);
}: function(){
return false;
},
send: browserAvailable? function(data){
return browser.runtime.sendMessage(data);
}: function(){
return false;
}
};
Object.seal(scope.message);
scope.getWrapped = function getWrapped(obj){
return obj && (obj.wrappedJSObject || obj);
};
scope.exportFunctionWithName = function exportFunctionWithName(func, context, name){
const targetObject = scope.getWrapped(context).Object.create(null);
const exportedTry = exportFunction(func, targetObject, {allowCrossOriginArguments: true, defineAs: name});
if (exportedTry.name === name){
return exportedTry;
}
else {
if (func.name === name){
logging.message(
"FireFox bug: Need to change name in exportFunction from",
exportedTry.name,
"(originally correct) to",
name
);
}
else {
logging.error("Wrong name specified for", name, new Error());
}
const wrappedContext = scope.getWrapped(context);
const options = {
allowCrossOriginArguments: true,
defineAs: name
};
const oldDescriptor = Object.getOwnPropertyDescriptor(wrappedContext, name);
if (oldDescriptor && !oldDescriptor.configurable){
logging.error(
"Unable to export function with the correct name", name,
"instead we have to use", exportedTry.name
);
return exportedTry;
}
const exported = exportFunction(func, context, options);
if (oldDescriptor){
Object.defineProperty(wrappedContext, name, oldDescriptor);
}
else {
delete wrappedContext[name];
}
return exported;
}
};
const proxies = new Map();
const changedWindowsForProxies = new WeakMap();
function setupWindowForProxies(window){
if (changedWindowsForProxies.get(window)){
return;
}
const wrappedWindow = scope.getWrapped(window);
const functionPrototype = wrappedWindow.Function.prototype;
const originalToString = functionPrototype.toString;
changedWindowsForProxies.set(window, originalToString);
const alteredToString = scope.createProxyFunction(
window,
originalToString,
function toString(){
if (proxies.has(this)){
return proxies.get(this).string;
}
return originalToString.call(scope.getWrapped(this));
}
);
scope.changeProperty(window, "toString", {
object: functionPrototype,
name: "toString",
type: "value",
changed: alteredToString
});
const wrappedReflect = wrappedWindow.Reflect;
const originalReflectSetPrototypeOf = wrappedReflect.setPrototypeOf;
const alteredReflectSetPrototypeOf = scope.exportFunctionWithName(
function setPrototypeOf(target, prototype){
target = scope.getWrapped(target);
if (proxies.has(target)){
target = proxies.get(target).wrappedOriginal;
}
if (proxies.has(prototype)){
prototype = proxies.get(prototype).wrappedOriginal;
}
if (prototype){
const grandPrototype = wrappedReflect.getPrototypeOf(prototype);
if (proxies.has(grandPrototype)){
const testPrototype = wrappedWindow.Object.create(proxies.get(grandPrototype).wrappedOriginal);
const value = originalReflectSetPrototypeOf.call(wrappedReflect, target, testPrototype);
if (!value){
return false;
}
}
}
const value = originalReflectSetPrototypeOf.call(wrappedReflect, target, scope.getWrapped(prototype));
return value;
}, window, "setPrototypeOf"
);
scope.changeProperty(window, "toString", {
object: wrappedWindow.Reflect,
name: "setPrototypeOf",
type: "value",
changed: alteredReflectSetPrototypeOf
});
}
scope.createProxyFunction = function createProxyFunction(window, original, replacement){
setupWindowForProxies(window);
const wrappedObject = scope.getWrapped(window).Object;
const handler = wrappedObject.create(null);
handler.apply = scope.exportFunctionWithName(function(target, thisArg, args){
try {
return args.length?
replacement.call(thisArg, ...args):
replacement.call(thisArg);
}
catch (error){
try {
return original.apply(thisArg, args);
}
catch (error){
return scope.getWrapped(target).apply(thisArg, args);
}
}
}, window, "");
handler.setPrototypeOf = scope.exportFunctionWithName(function(target, prototype){
target = scope.getWrapped(target);
if (proxies.has(target)){
target = proxies.get(target).wrappedOriginal;
}
if (proxies.has(prototype)){
prototype = proxies.get(prototype).wrappedOriginal;
}
if (prototype){
const grandPrototype = wrappedObject.getPrototypeOf(prototype);
if (proxies.has(grandPrototype)){
const testPrototype = wrappedObject.create(proxies.get(grandPrototype).wrappedOriginal);
wrappedObject.setPrototypeOf(target, testPrototype);
}
}
return wrappedObject.setPrototypeOf(target, scope.getWrapped(prototype));
}, window, "");
const proxy = new window.Proxy(original, handler);
const proxyData = {
original: original,
wrappedOriginal: scope.getWrapped(original),
string: changedWindowsForProxies.get(window).call(original),
};
proxies.set(proxy, proxyData);
proxies.set(scope.getWrapped(proxy), proxyData);
return scope.getWrapped(proxy);
};
const changedPropertiesByWindow = new WeakMap();
scope.changeProperty = function(window, group, {object, name, type, changed}){
let changedProperties = changedPropertiesByWindow.get(scope.getWrapped(window));
if (!changedProperties){
changedProperties = [];
changedPropertiesByWindow.set(scope.getWrapped(window), changedProperties);
}
const descriptor = Object.getOwnPropertyDescriptor(object, name);
const original = descriptor[type];
descriptor[type] = changed;
Object.defineProperty(object, name, descriptor);
changedProperties.push({group, object, name, type, original});
};
scope.revertProperties = function(window, group){
window = scope.getWrapped(window);
let changedProperties = changedPropertiesByWindow.get(window);
if (!changedProperties){
return;
}
if (group){
const remainingProperties = changedProperties.filter(function(changedProperty){
return changedProperty.group !== group;
});
changedPropertiesByWindow.set(window, remainingProperties);
changedProperties = changedProperties.filter(function(changedProperty){
return changedProperty.group === group;
});
}
else {
changedPropertiesByWindow.delete(window);
}
for (let i = changedProperties.length - 1; i >= 0; i -= 1){
const {object, name, type, original} = changedProperties[i];
logging.verbose("reverting", name, "on", object);
const descriptor = Object.getOwnPropertyDescriptor(object, name);
descriptor[type] = original;
Object.defineProperty(object, name, descriptor);
}
};
scope.waitSync = function waitSync(reason = "for no reason"){
logging.message(`Starting synchronous request ${reason}.`);
try {
let xhr = new XMLHttpRequest();
xhr.open("GET", "https://[::]", false);
xhr.send();
xhr = null;
}
catch (error){
logging.verbose("Error in XHR:", error);
}
};
scope.displayVersion = async function displayVersion(node, displayRefresh = false){
if ("string" === typeof node){
node = document.getElementById(node);
}
if (!node){
throw "display node not found";
}
fetch(scope.getURL("manifest.json")).then(function(response){
return response.json();
}).then(function(manifest){
node.textContent = "Version " + manifest.version;
return manifest.version;
}).catch(function(error){
node.textContent = "Unable to get version: " + error;
});
if (displayRefresh){
// Workaround to hide the scroll bars
window.setTimeout(function(){
node.style.display = "none";
node.style.display = "";
}, displayRefresh);
}
};
Object.seal(scope);
}());

230
lib/frame.js Normal file
View File

@ -0,0 +1,230 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
(function(require){
"use strict";
const settings = require("./settings");
const {preIntercept: intercept} = require("./intercept");
const {ask} = require("./askForPermission");
const {sha256String: hashing} = require("./hash");
const {check: originalCheck, checkStack: originalCheckStack} = require("./check");
const extension = require("./extension");
const iframeProtection = require("./iframeProtection");
const logging = require("./logging");
logging.setPrefix("frame script");
// Variable to "unload" the script
let enabled = true;
logging.message("starting", location.href);
function check(message){
if (enabled){
return originalCheck(message);
}
else {
return {type: [], mode: "allow"};
}
}
function checkStack(stack){
if (enabled){
return originalCheckStack(stack);
}
else {
return true;
}
}
function askWrapper(data){
return ask(data, {
_: extension.getTranslation,
prefs
});
}
let extensionSecret;
function computeExtensionSecret(){
function hashString(string){
return hashing(new Uint16Array(
string.split("").map(function(c){
return c.charCodeAt(0);
})
));
}
const now = new Date();
const lastTenMinutes = Math.floor(now.getMinutes() / 10) * 10;
const nextRun = new Date(
now.getFullYear(), now.getMonth(), now.getDate(),
now.getHours(), lastTenMinutes + 10, 0, 0
);
window.setTimeout(
computeExtensionSecret,
nextRun .getTime() - now.getTime()
);
let string =
extension.extensionID +
`${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${now.getHours()}:${lastTenMinutes}`;
extensionSecret = [hashString("input" + string), hashString(string + "output")];
}
computeExtensionSecret();
logging.message("open port to background script");
const port = browser.runtime.connect();
if (window === window.top){
logging.message("Is top level window -> tab had navigation -> clear page action");
port.postMessage({"canvasBlocker-clear-page-action": true});
}
let tabId;
port.onMessage.addListener(function(data){
logging.message("Got data from port", data);
if (data.hasOwnProperty("tabId")){
logging.notice("my tab id is", data.tabId);
tabId = data.tabId;
}
if (data.hasOwnProperty("cookieStoreId")){
logging.notice("my tab cookie store id is", data.cookieStoreId);
const {persistent: persistentRnd} = require("./randomSupplies");
persistentRnd.setCookieStoreId(data.cookieStoreId);
const modifiedNavigatorAPI = require("./modifiedNavigatorAPI");
modifiedNavigatorAPI.setCookieStoreId(data.cookieStoreId);
}
const persistentRndName = "persistent" + (extension.inIncognitoContext? "Incognito": "") + "Rnd";
if (data.hasOwnProperty(persistentRndName)){
const persistentRndValue = data[persistentRndName];
logging.notice("got persistent random data", persistentRndValue);
const {persistent: persistentRnd} = require("./randomSupplies");
Object.keys(persistentRndValue).forEach(function(domain){
logging.verbose("random data for", domain, persistentRndValue[domain]);
persistentRnd.setDomainRnd(domain, persistentRndValue[domain]);
});
}
});
const notifications = [];
const notificationCounter = {};
const sentAPIs = {};
function notify(data){
if (!settings.ignoredAPIs[data.api]){
if (settings.storeNotificationData){
notifications.push(data);
}
if (!notificationCounter[data.messageId]){
notificationCounter[data.messageId] = {
count: 0,
api: data.api
};
}
notificationCounter[data.messageId].count += 1;
if (!sentAPIs[data.api]){
sentAPIs[data.api] = true;
port.postMessage({"canvasBlocker-notify": data});
}
}
}
function prefs(...args){
return settings.get(...args);
}
const interceptedWindows = new WeakMap();
function interceptWindow(window){
let wrappedTry;
try {
const href = window.location.href;
wrappedTry = extension.getWrapped(window);
}
catch (error){
// we are unable to read the location due to SOP
// therefore we also can not intercept anything.
logging.notice("NOT intercepting window due to SOP", window);
return false;
}
const wrappedWindow = wrappedTry;
if (!enabled || interceptedWindows.get(wrappedWindow)){
return false;
}
const canvasBlockerData = wrappedWindow.matchMedia(extensionSecret[0]);
if (canvasBlockerData.secret === extensionSecret[1]){
if (wrappedWindow.top === wrappedWindow){
canvasBlockerData.undoIntercept(extension.extensionID);
}
else {
interceptedWindows.set(wrappedWindow, true);
return false;
}
}
logging.message("intercepting window", window);
intercept(
{subject: window},
{check, checkStack, ask: askWrapper, notify, prefs}
);
logging.message("prepare to intercept (i)frames.");
function interceptAllFrames(){
const currentLength = window.length;
for (let i = currentLength; i--;){
if (!interceptedWindows.get(wrappedWindow[i])){
interceptWindow(window[i]);
}
}
}
iframeProtection.protect(window, wrappedWindow, interceptWindow, interceptAllFrames);
const matchMediaDescriptor = Object.getOwnPropertyDescriptor(wrappedWindow, "matchMedia");
const originalMatchMedia = matchMediaDescriptor.value;
extension.changeProperty(window, "matchMedia", {
object: wrappedWindow,
name: "matchMedia",
type: "value",
changed: extension.exportFunctionWithName(function matchMedia(query){
if (query === extensionSecret[0]){
return {
secret: extensionSecret[1],
undoIntercept: function(token){
if (token === extension.extensionID){
extension.revertProperties(window);
}
}
};
}
else {
return arguments.length > 1?
originalMatchMedia.call(this, ...arguments):
originalMatchMedia.call(this, query);
}
}, window, originalMatchMedia.name)
});
interceptedWindows.set(wrappedWindow, true);
return true;
}
logging.message("register listener for messages from background script");
extension.message.on(function(data){
if (data["canvasBlocker-unload"]){
extension.revertProperties(window);
for (let frameIndex = 0; frameIndex < window.length; frameIndex += 1){
extension.revertProperties(window[frameIndex]);
}
enabled = false;
}
if (
data.hasOwnProperty("canvasBlocker-sendNotifications") &&
data["canvasBlocker-sendNotifications"] === tabId
){
logging.notice("sending notifications:", notifications);
extension.message.send({
sender: tabId,
url: window.location.href,
"canvasBlocker-notificationCounter": notificationCounter,
"canvasBlocker-notifications": notifications
});
logging.notice("notifications sent");
}
});
interceptWindow(window);
}(require));

Some files were not shown because too many files have changed in this diff Show More