Commit Graph

268 Commits (2f075c71e2e3d7efdbd6d10981ad96d91bb87ad4)

Author SHA1 Message Date
Deathamns 8f0172467a Remove unnecessary messaging workaround
A better fix was introduced in e36c702 for this issue.

The actual problem was that Safari when sends a message from the
background to content, then it passes to all the frames in the target tab,
but it doesn't make copies, it passes only references to the same object,
so if one frame modifies the message, then other frames would have
received the modified message.
10 years ago
Deathamns aebfb15aa2 Building extension files
Adds possibility to build extension files (Chrome and Safari) from
command line.

To run from the project directory:
python tools/build.py [meta]

If the optional `meta` argument is set, then only the manifest and
language files are uptated.
Without that everything is being built (extension files too) into the
`dist/build/version_number` folder.

For Chrome there will be two files, a crx, and a .zip file which
includes the key.pem private key (so this must not be shared,
it's just a bit help for publishing it to the Chrome Web Store).

Beside the extension files, update-files are generated too (for self
hosting - Safari needs it).
10 years ago
Deathamns a39572448d Fix messaging for Safari 10 years ago
Deathamns 08247fb5dd Preferences button for Safari
Brings back the possibility to click a checkbox which opens the extension
settings from Safari's Preferences/Extensions.
10 years ago
Deathamns 1a38523875 Messaging fixes
Checking the message name (and connectorId) is mandatory for Safari,
because when the background page sends a response back to a document,
then all the frames in its owner tab will receive the exact same
message, which could confuse the script in some cases.
10 years ago
Deathamns 0bc67a8819 Drop js-loader, updates from gorhill/uBlock/master 10 years ago
Deathamns d150eb6d1c Use different page navigation detection for Safari
The beforeNavigate event wasn't reliable (sometimes didn't fire, sometimes
fired unnecessary when opening a link with the middle click - which had a
workaround previously, but that's also removed by this commit).

When the event didn't fire, the bindTabToPageStats method didn't run,
and the requests related to the tab weren't blocked.
10 years ago
Deathamns ed1e23cfb1 Site-patching possibility for Safari
Safari's extension API doesn't provide a way to intercept requests
initiated by plugins, so those cases need special care (or at least the
popular sites).

This commit adds a new JS file (sitepatch-safari.js), which will store the
patches (if it's possible to create one) for specific sites.

As an example, this commit includes a technique for removing in-video ads
from YouTube videos.
10 years ago
Deathamns 192053ae99 document.head isn't always available in Safari 10 years ago
Deathamns 4df265b15f Badge number sometimes disappeared in Safari 10 years ago
Deathamns bc980a3522 Implement pop-up blocking for Safari
It works similarly to the xhr intercepting, except here the window.open
global function is being overridden.
Note that it could only work if the site's Content Security Policy allows
inline scripts, and the script on the webpage doesn't have a copy of the
original window.open function (it can happen only if the page has an
inline script in its head element, where the reference to the original
function can be obtained - likely this cannot be prevented in Safari).
10 years ago
Deathamns 9313a7f16b Element picker tweaks
- Indentation whitespace fixes.
- Use built-in getBoundingClientRect() function instead of self-made.
- Use built-in DOM API for manipulating the class attributes instead of
  altering the className property.
- Add pointer-events: none to the svgRoot when using
  document.elementFromPoint(), but if the browser (older Safari for
  example) doesn't take the pointer-events into account, then fall back to
  display: none.
- Initiate every part of the picker at the same time; when the message is
  received from the background. This way the selected element will have
  the red overlay immediately, instead of showing first the black overlay,
  then a few milliseconds later the red.
10 years ago
Deathamns c56d3ca717 Avoid using Chrome's @@bidi_* type i18n messages
... for the sake of portability.

When including vapi-common.js in an HTML file, then the body element there
will have a "dir" attribute filled with the current locale's direction
(ltr or rtl).

The following languages are considered right-to-left: ar, he, fa, ps, ur.
Everything else is left-to-right.

After the "dir" attribute is set, we can decide in CSS which elements
should have different styling for rtl languages (e.g., body[dir=rtl] #id).
10 years ago
Deathamns f514bf0835 Workaround for a messaging bug in Safari 10 years ago
Deathamns 5d08b448b0 Use HTML5 download instead of extension API
Benefits:
- Cross browser solution (however only for relatively new browsers)
- Doesn't need extra permission in Chrome

If the browser doesn't suppor the download attribute, then a new tab will
be opened with the exported data.

Other changes:
- Start the download only if the data is not empty (previously the
  download started anyway)
- Reorder code in vapi-client.js for Safari, so unnecessary code doesn't
  run on extension pages
10 years ago
Deathamns 34e1df3218 Script injection, element picker, messaging
- Add script injection to vAPI, plus a raw implementation for Safari
  (element-picker.js requires it)
- Tweak element picker to work with Safari
- Revert a change from previous commit: element-picker.js' background
  message handler (since actually it can have its own messaging channel)
- Don't send "undefined" reponses from background to content
10 years ago
Deathamns 4072264fa8 Add .jshintrc, and use the "use strict" directive
.jshintrc's otion-set is a personal choice, merely a suggestion.
Beside that, it includes some common globals for specific browsers, so
there's no need to set the globals in every .js file.

In order to force strict coding, "use strict" directive was added into
every .js file.
10 years ago
Deathamns a04a788eea Work on vendor API abstraction, and near complete Safari support 10 years ago
Deathamns fccb781950 Ports cleanup
- Remove duplicate platform specific (from src/) and other unnecessary
  files
- Fix and update vapi-*.js files for Safari
- Add tools/make-safari.sh
- Move js/vapi-appinfo.js to meta/ (so, every vendor specific file will be
  at the same location)
10 years ago
Raymond Hill bd5492654f give specific message handlers priority over default one 10 years ago
Deathamns c3178cd442 Only top window should have type `main_frame` 10 years ago
Deathamns 8eb76e880c Building extension files
Adds possibility to build extension files (Chrome and Safari) from
command line.

To run from the project directory:
python tools/build.py [meta]

If the optional `meta` argument is set, then only the manifest and
language files are uptated.
Without that everything is being built (extension files too) into the
`dist/build/version_number` folder.

For Chrome there will be two files, a crx, and a .zip file which
includes the key.pem private key (so this must not be shared,
it's just a bit help for publishing it to the Chrome Web Store).

Beside the extension files, update-files are generated too (for self
hosting - Safari needs it).
10 years ago
Deathamns 29eabd44fd Fix messaging for Safari 10 years ago
Deathamns 872a478f91 Preferences button for Safari
Brings back the possibility to click a checkbox which opens the extension
settings from Safari's Preferences/Extensions.
10 years ago
Deathamns 3d535c6c69 Messaging fixes
Checking the message name (and connectorId) is mandatory for Safari,
because when the background page sends a response back to a document,
then all the frames in its owner tab will receive the exact same
message, which could confuse the script in some cases.
10 years ago
Deathamns bda4dba902 Use different page navigation detection for Safari
The beforeNavigate event wasn't reliable (sometimes didn't fire, sometimes
fired unnecessary when opening a link with the middle click - which had a
workaround previously, but that's also removed by this commit).

When the event didn't fire, the bindTabToPageStats method didn't run,
and the requests related to the tab weren't blocked.
10 years ago
Deathamns ceb18d4629 Site-patching possibility for Safari
Safari's extension API doesn't provide a way to intercept requests
initiated by plugins, so those cases need special care (or at least the
popular sites).

This commit adds a new JS file (sitepatch-safari.js), which will store the
patches (if it's possible to create one) for specific sites.

As an example, this commit includes a technique for removing in-video ads
from YouTube videos.
10 years ago
Deathamns c0b1565131 Badge number sometimes disappeared in Safari 10 years ago
Deathamns 31f9683d9f Implement pop-up blocking for Safari
It works similarly to the xhr intercepting, except here the window.open
global function is being overridden.
Note that it could only work if the site's Content Security Policy allows
inline scripts, and the script on the webpage doesn't have a copy of the
original window.open function (it can happen only if the page has an
inline script in its head element, where the reference to the original
function can be obtained - likely this cannot be prevented in Safari).
10 years ago
Deathamns 1be99cf58e Remove unnecessary comments 10 years ago
Deathamns 816dca2f33 Script injection, element picker, messaging
- Add script injection to vAPI, plus a raw implementation for Safari
  (element-picker.js requires it)
- Tweak element picker to work with Safari
- Revert a change from previous commit: element-picker.js' background
  message handler (since actually it can have its own messaging channel)
- Don't send "undefined" reponses from background to content
10 years ago
Deathamns 9981c25286 Remove storage change-event listener from Safari
Earlier, a technique was used to open the extension's Options page when
the user clicked a checkbox input at Safari's extension settings. The method was removed because:
- the Options page can be opened via the extension's toolbar button (which
  cannot be disabled in Safari, so it will be there all the time);
- involved more clicks than opening from the toolbar button;
- the string beside the checkbox couldn't be localized.
10 years ago
Deathamns be7668767f Minor changes
- Update assets from gorhill/uBlock/master
- Remove whitespace from element-picker.js
- Simplify code in profiler.js (btw, Date is still needed as fallback
  for older browsers)
- Clarification for Safari's storage where the QUOTA_BYTES came from
10 years ago
Deathamns 35ed9cd853 Work on vendor API abstraction, and near complete Safari support 10 years ago
gorhill 63aa4be9f7 reorganizing, preparing move to vAPI 10 years ago
gorhill 056e68da66 this fixes #42 10 years ago
gorhill 01f7cea94f re #89: fixed using non-compliant color 10 years ago
emanueLczirai 7085beb66a missing semicolon 10 years ago
gorhill 0174955287 comment re potential redundant eval 10 years ago
gorhill b68ba6d728 this fixes #82 10 years ago
Raymond Hill f0063372c5 this fixes #77 10 years ago
Raymond Hill 5777dc0b15 code review: actually no `file:` should occurs within `https:` doc 10 years ago
Raymond Hill baa8e86fd4 this addresses issue raised in #71 10 years ago
Raymond Hill b62fb94a00 code review 10 years ago
Raymond Hill 44533d77eb this fixes #72 10 years ago
Raymond Hill e39b36beda code review; make strict https break less stuff on new tab page 10 years ago
Raymond Hill 36233c7325 vertical ellispsis instead 10 years ago
Raymond Hill ee361ae37f comments 10 years ago
Raymond Hill a31351c6f9 doc is hardcoded now 10 years ago
Raymond Hill bf5b6c4517 code review 10 years ago
Raymond Hill 9a93c2375c move "Strict HTTPS" last since now it is built-in the browser 10 years ago
Raymond Hill cf02253cdd this should help futur occurrences of #65 10 years ago
Raymond Hill dc3de2a3ca make ua-spoofing code easier to read from dev tools 10 years ago
Raymond Hill 40bc8087e5 this fixes #61 10 years ago
Raymond Hill 238e6c3536 re #61 10 years ago
Raymond Hill 5d8bae3da2 this fixes #59 10 years ago
Raymond Hill 977f94a50a fine-tuning for RTL languages 10 years ago
Raymond Hill d01ab961b8 this fixes #7, #36 10 years ago
Raymond Hill ce6305210c UI work toward fixing #7, #36 10 years ago
Raymond Hill 5f3dc76b32 code review 10 years ago
Raymond Hill 5e19edaab7 ability to foil mixed content 10 years ago
Raymond Hill 5ba8f58094 ensure switches are listed first: more convenient 10 years ago
Raymond Hill 2962bd19e2 cide review 10 years ago
Raymond Hill 4aab150af3 infrastructure work toward addressing #7, #36 10 years ago
gorhill 3524c12924 fixed double definition as per 4bf6664d6b 10 years ago
gorhill f0a58ad06f bring back color hint for site-level scope 10 years ago
gorhill 3edd9eabc6 export must be on left side since permanent rules are exported 10 years ago
gorhill 4211613055 fix rendering of mu character 10 years ago
gorhill 970e1253da code review 10 years ago
gorhill 5d90401f54 this fixes #49 10 years ago
gorhill 9cc0e9bba0 this fixes #47 10 years ago
gorhill 667becf500 imported mutation observer code from uBlock: more efficient, robust 10 years ago
gorhill fb9def312a buttons must be able to wrap 10 years ago
Raymond Hill e8152f1517 ensure rule panes are always aligned 10 years ago
gorhill 8d8ff67546 just reordering labels 10 years ago
gorhill df6bdbe464 this fixes #44 completely 10 years ago
gorhill 4026149a17 this fixes #44 10 years ago
gorhill 4f456da482 translation work from Crowdin 10 years ago
gorhill 1d9a8e18e8 just trying something to possibly workaround reported crashes in #40 10 years ago
gorhill 92c48c0d49 "matrix:" instead of too generic "switch:" 10 years ago
gorhill 7e038a9433 use pretty 1st-party label only for rendering 10 years ago
gorhill 3ddb31a96c rtl languages friendly: issue #29 10 years ago
gorhill b42fd99bd0 no badge when count is zero 10 years ago
gorhill 1908504895 this fixes #37 completely 10 years ago
gorhill f6a366194c this address #37: the rebinding of pages which change incrementally 10 years ago
gorhill 2f7af6890d this addresses #37 10 years ago
gorhill e49e87ba54 better url 10 years ago
gorhill 50bcc24049 this is a start for #29 10 years ago
gorhill 3c455d3fdc give credits to issue authors 10 years ago
gorhill f7c2e68887 jshint 10 years ago
gorhill 4b4dc3c0db code review 10 years ago
Raymond Hill 4dd3b09ae4 this fixes #34 10 years ago
gorhill 85ecc71230 this fixes #31 10 years ago
gorhill 296f16f08e this fixes #31/#issuecomment-61376018 10 years ago
gorhill 8e7ae17b5c updating default UA strings 10 years ago
gorhill faef346878 this address 3 in #28 10 years ago
gorhill 575676e415 this addresses some of #28 issues 10 years ago
gorhill 48c5f7bf45 no longer needed 10 years ago
gorhill 30c570253f this fixes #23 10 years ago
gorhill 03609910c5 not needed anymore 10 years ago
gorhill 5c05a8773a revamped "My rules" tab 10 years ago
gorhill 89f757d61e this does help a bit further re. #27 10 years ago
gorhill 24502090e2 this somewhat fixes #27 10 years ago
gorhill 49bbe6f7dd ip address friendly 10 years ago
gorhill c5acad2332 minor code review 10 years ago
gorhill b2d19afeb8 finally... fixes #24 10 years ago
gorhill 9838d009aa this fixes #24 10 years ago
gorhill 967707723a this fixes #24 10 years ago
gorhill 49441de2b6 bring back `doc` req type; many little fixes 10 years ago
gorhill eab99cf26b forgot to rename to uMatrix (as per wilderssecurity.com thread) 10 years ago
gorhill 20ba3157eb slight colored bg for tooltips 10 years ago
gorhill 448a56cc70 fixed tooltips; illegal characters in messages.json 10 years ago
gorhill 10ef2cf0f1 fix meta row of blacklisted hostnames group 10 years ago
gorhill 425f512aa4 getting ready for crowdin work 10 years ago
gorhill ff4d827e1f this fixes #21 10 years ago
gorhill 02e6b2c2d8 oops: 5 min, not 5 hr 10 years ago
gorhill 257844c233 a bit of refacotring work 10 years ago
gorhill ead35cedbe code review 10 years ago
gorhill 5131a5d806 this fixes #19 10 years ago
gorhill 3aeeea7abd code review 10 years ago
gorhill 118306ab51 this fixes #17 10 years ago
gorhill e187161b84 take care of session storage as well 10 years ago
gorhill c0450c578d todo 10 years ago
gorhill 6d72b65a1a jshint 10 years ago
gorhill b605f3d4ea this fixes #18 10 years ago
gorhill 8cb0619687 fix to ensure PSL is available when binding tabs 10 years ago
gorhill abdbbd55dd jshint 10 years ago
gorhill 5e96f44798 this fixes #14 10 years ago
gorhill 77cfb56d94 this fixes #12 10 years ago
gorhill bd411290dd forgot to tag source code with github issue 10 years ago
gorhill b946a96bb6 this fixes #13, hopefully 10 years ago
gorhill ceed73dd59 this fixes another console error as per #10 10 years ago
gorhill cbb0b8a8f1 fixed as per code review 10 years ago
gorhill 8653401961 this fixes #10 10 years ago
gorhill 9441ffe719 this fixes #8 (the 2nd part) 10 years ago
gorhill b31b7227ff this fixes #8 10 years ago
gorhill fa84fa2508 this fixes #9 10 years ago
gorhill 92717f4cfd this fixes #4 10 years ago
gorhill 56a9e8a460 this fixes #3 10 years ago
gorhill 0d459545a2 this fixes #2 10 years ago
gorhill 0c6d0b3a98 another check for #1 10 years ago
gorhill 1743f198e5 another check for #1 10 years ago
gorhill 207ee2773b ui details 10 years ago
gorhill a39bd536b5 work on auto-update, backup/restore/reset 10 years ago
gorhill b94047f9f7 forgot to check this 10 years ago
gorhill 2b41bc8087 work on many things, need more 10 years ago
gorhill 65a8000657 fixed parsing of partial rules 10 years ago
gorhill dc39fa9452 moving assets out of src 10 years ago
gorhill 5f63a0f984 no good reason to prevent scopable literal "1st-party" 10 years ago
gorhill cd7996fb7d fixed bad test for 1st-party 10 years ago