1
0
mirror of https://github.com/kkapsner/CanvasBlocker synced 2024-12-22 21:00:23 +01:00

412 Commits

Author SHA1 Message Date
kkapsner
a1202f9a6e Made audio cache url specific
Fixes #261
2018-09-18 00:03:42 +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
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
kkapsner
f73a4ee619 Save state of the arrow menu in options page
Fixes #251
2018-09-12 23:43:48 +02:00
kkapsner
fe1f1ec79a Fixed caching issue
md5 was too slow.

Fixes #236
2018-09-12 22:23:29 +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
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
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
fa92c15dab Converted apiWhiteList to protectedAPIFeatures
For #247
2018-09-07 23:52:29 +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
fb31545604 Removed debugging statement 2018-09-05 17:02:36 +02:00
kkapsner
a01ccf458f Corrected type and api on DOMRect changed functions 2018-09-05 16:47:32 +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
f00c3b674e First DOMRect draft
For #236
2018-09-04 23:29:58 +02:00
kkapsner
bde8ac3e8e Only use onHeadersReceived listener when necessary
As mentioned in #214
2018-08-28 21:09:03 +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
da14aaff51 Added option to ignore APIs
As mentioned in #233
2018-08-24 19:39:34 +02:00
kkapsner
391deae6f1 Improved browser action title
As mentioned in #233.
2018-08-22 22:37:06 +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
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
9d231c7b02 CSP cleanup
Should help with #223.
2018-08-21 22:01:10 +02:00
kkapsner
c25e95f845 Added highlighting options for notification icons
Fixes #225.
2018-08-20 21:48:05 +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
bf868eb6ae Missing semicolon in CSP
Fixed #224.
2018-08-02 20:56:01 +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
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
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
7bfd300f6a Inject CSP only in the relevant requests.
Prevents detection of CB.
2018-07-21 19:34:24 +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
9ba9c48422 Block data URLs instead of their requests
Fixes #211
2018-07-21 00:32:15 +02:00
kkapsner
5077c86859 Added session white list
Fixes #197
2018-07-17 13:07:50 +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
47a9519ceb "Protect" data URL pages by blocking outgoing requests
Fixes #208
2018-07-16 00:14:44 +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
6dc08534a6 Improved logging on settings storage. 2018-07-12 01:18:49 +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
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
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
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
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
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
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
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
9f2f77dbc1 Secured dynamic content script 2017-12-24 21:54:39 +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
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
22fd0e8be1 Discarded pre-intercept
It broke pinned tabs and JS in some cases.

Fixes #164.
2017-12-16 19:27:29 +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
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
d787b84b13 Activated settings migration to 0.3 2017-12-08 20:25:08 +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
01780da9f5 Added URL specific settings
For blockMode and showNotifications.

Fixes #148.
2017-12-03 23:47:49 +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
9f242004c9 Changed settings loading URL
Fixes #155
2017-11-20 23:48:28 +01:00
kkapsner
dd3620cd08 Fixed page action display confusion
Fixes #149
2017-11-14 23:57:44 +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
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
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
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
eb62521adc Trying to get wrappedJSObject of an wrappedJSObject is wrong...
Fixes #133 and #134.
2017-10-07 23:26:04 +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
ef38abe545 Code linting. 2017-10-03 15:35:31 +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
17508d9ffa Merge pull request #130 from spodermenpls/master
Slight code rot
2017-09-24 10:09:44 +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
eb0f936cb0 First steps. 2017-09-24 00:12:12 +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
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
d8f6fb1ac9 Made readPixels consistent with the other faked readout functions. 2017-08-13 23:41:57 +02:00
kkapsner
73e4848ffd Added setting for alpha channel faking. 2017-08-11 16:26:24 +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
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
921c7dbd5f Changed rng interface to use colors instead of separate channels. 2017-08-07 08:49:49 +02:00
kkapsner
9715eb09d2 Added logging lib with setting to control log level. 2017-07-27 19:14:04 +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
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
736d6b0fb2 Added some logging to frame script. 2017-07-16 00:25:19 +02:00
kkapsner
47729f81bb Added storage version check. 2017-07-16 00:12:12 +02:00
kkapsner
0234a6d8cf Removed obsolete files. 2017-07-14 08:58:48 +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
f70380aa67 Added test page for webGL - it is also working with the webExtension. 2017-06-29 20:19:00 +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
4d75ad4ca1 Fixed ask mode with input mode. 2017-06-25 21:14:13 +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
6fdf13bd10 Prevented error when canvas has size zero
Solves the third problem in #114
2017-04-19 19:32:37 +02: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
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
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
602d5a6bfd Switch from frameScript to require("sdk/remote/...").
Fixes #98. Fixes #100.
2017-01-31 21:51:08 +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
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
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
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
fc07961c6b Completely remove function monitoring for white listed sites.
Fixes #84.
2016-11-19 15:35:00 +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
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