Commit Graph

547 Commits (62f48a15ff5da6af67e0267348af2805249e5644)

Author SHA1 Message Date
gorhill be3e86e055 user is responsible to reload + fixed cleanup of stale tabs 10 years ago
gorhill e751a5403b code review 10 years ago
gorhill 0e77cbd15d this fixes #45 + revised color-blind mode + support shutdown of content script 10 years ago
gorhill dbe14694c8 code review 10 years ago
gorhill 1c05281183 comments 10 years ago
gorhill 1f4ff9c809 more refactoring, code review 10 years ago
gorhill 8ae33e9c12 FF: this fixes availability of response headers for when item pulled from cache 10 years ago
gorhill 7cd060a15f refactoring, fixing script/frame blocking on FF, etc., more to do 10 years ago
gorhill c0bfb00be8 code review 10 years ago
gorhill c1314e496b support ping request type explicitly 10 years ago
gorhill 595de33e83 sanitizing outgoing headers (drafty) 10 years ago
gorhill 5106c4bc44 this fixes rendering of toolbar icon 10 years ago
gorhill 764b1a0b7a jshint 10 years ago
gorhill 9340975606 a whole lot more left to do, at least popup shows 10 years ago
gorhill dd90ff1c57 code review re. last commit 10 years ago
gorhill 4fffc97954 untangling fennec code 10 years ago
gorhill 4d8f908022 #10: manually imported fixes from e762a29d30 10 years ago
gorhill 7c5cf28c33 this fixes https://github.com/chrisaljoudi/uBlock/issues/1219 for Firefox 10 years ago
gorhill 301e707e6b refactored tabs/context code 10 years ago
gorhill c6d89dab64 removed spurious lines of code 10 years ago
YFdyh000 8102f3467e Correct issue links 10 years ago
gorhill a14f487488 new switch: toggle cosmetic filtering on/off for a site 10 years ago
AlexVallat 3607286a3e Changes following review 10 years ago
AlexVallat 4f825399f6 No need for special treatment for about:blank and about:newtab 10 years ago
AlexVallat 0a736dc270 Fix for #1122 10 years ago
AlexVallat a0b86f7d25 Remove onNavigation from onTabSelect, as mentioned in #1125 10 years ago
gorhill 882d1d9425 translation work from https://crowdin.com/project/ublock 10 years ago
gorhill d8bbe9a501 this fixes #1013, #1062 (draft) 10 years ago
AlexVallat 3ec2c29ef0 Use a nsIWebProgressListener instead of a tabsProgressListener for location change monitoring 10 years ago
AlexVallat ca8330d4f0 Cleanup for DOMTitleChanged listener 10 years ago
gorhill dbbd13a8d5 #1013: Firefox support 10 years ago
AlexVallat ed43097de8 Fix for #1072: Listen to DOMTitleChanged as additional navigation event for Fennec 10 years ago
gorhill a179821f3d #1057: cleanup code 10 years ago
gorhill eb70156b90 this fixes #1057 10 years ago
Deathamns b93759e2f9 Firefox: handle nsIContentPolicy.TYPE_IMAGESET
https://bugzil.la/1055750
10 years ago
Deathamns 687e9d84a9 Firefox: register unload event sooner 10 years ago
Deathamns e38cd3c7f1 Firefox: check for non-existent button 10 years ago
AlexVallat 28923771dc Robustness changes from watching logs in Fennec 10 years ago
Deathamns 1629accdb8 Firefox: determine tabIds via <browser> 10 years ago
Deathamns 8f9be95a08 abp:subscribe fixes
Test a[href^="abp:"], since the protocol probably not used for anything
else, also "a", because ABP checks only anchors, and these links are made
only for ABP.

Also, the event target is not always the link, so at least some parents
should be tested as well.
10 years ago
Deathamns 0124096789 Firefox: update buttons when addon is enabled 10 years ago
AlexVallat 2643125f66 Fixing #1017, only apply switch to about:blank or about:newtab if not loading 10 years ago
AlexVallat aa80edc171 Testing alternative tab ID for Fennec (issue #1001) 10 years ago
Deathamns 8474fce1bc No hasAttribute on tab objects in Fennec 10 years ago
gorhill 365593a389 move platform-specific images to their respective platform 10 years ago
gorhill 1bfe037de6 fixed ff icons 10 years ago
Deathamns cba6d2346e Firefox: badge color fix 10 years ago
Deathamns b5c47c898e Code organizing 10 years ago
Deathamns fffec145b9 Firefox: load content-scripts on extension start 10 years ago
Deathamns 539826310b Firefox: bypass cache when reloading a tab 10 years ago
Deathamns f3d62969ee Remove unnecessary fallback code for downloading 10 years ago
gorhill 0b81faebee this helps #993 10 years ago
AlexVallat 16ff5db8f4 Trying to fix merge 10 years ago
AlexVallat c9a8c8d6df Changes following review at https://github.com/gorhill/uBlock/pull/956#issuecomment-78047032 10 years ago
gorhill 651fa9c16a this fixes #967 10 years ago
Deathamns 96454afb20 Firefox: change badge color in onWidgetUnderflow 10 years ago
Deathamns f5c675e8b8 Firefox: different way for reloading a tab 10 years ago
AlexVallat 64e3310a36 Initial UI support for Fennec 10 years ago
Deathamns ef9301276c Firefox: block popups earlier 10 years ago
Deathamns 6c4428ff73 Firefox: workaround for #886 10 years ago
Deathamns 6952156891 Firefox: handle behind-the-scene redirects 10 years ago
Deathamns 42e84760dc Fennec: fix tab title 10 years ago
AlexVallat 21c8bfa537 https://github.com/gorhill/uBlock/issues/524#issuecomment-76620479 10 years ago
Deathamns e965b1eef7 Firefox/Fennec fixes 10 years ago
AlexVallat dc5761164b Fixing up basic functionality for Fennec 10 years ago
Deathamns 29aa1d393d Firefox/Fennec code cleanup 10 years ago
Cheng Sun dee9c4706f Fennec WIP #2 10 years ago
Cheng Sun b843ddfd70 Use named "same document" constant instead of hardcoding 10 years ago
Deathamns 33af8467b8 Firefox: toolbar icon fixes for Firefox 36+ 10 years ago
Deathamns 223240bba0 Firefox: behind-the-scene request types 10 years ago
Deathamns bace1708f9 Remove unused code 10 years ago
gorhill 178bded97f this fixes #730 10 years ago
gorhill 8f7d7d233b link to relevant jsperf 10 years ago
gorhill e0eaf97eb4 use static function instead of closure 10 years ago
Deathamns 8db990daa3 Firefox: get the version number from the fragment 10 years ago
Deathamns 1ee1bd052a Firefox: use correct data for parentFrameId 10 years ago
Deathamns f4a7378ff2 Firefox: each frame should have a unique ID 10 years ago
Deathamns 97ae38c584 Firefox: remove evalInSandbox
Probably we won't eval plain text code, which makes it unnecessary, also
this way the validator on AMO won't complain about it.
10 years ago
Deathamns a61e73d212 Firefox: vAPI.tabs.onNavigation() for about: pages 10 years ago
Deathamns 6d8554da76 Firefox: behind-the-scene requests / non-http tabs 10 years ago
gorhill 24f1ef515f more fixes for #105 10 years ago
gorhill 56d4cf6a6a code review: jshint'ed 10 years ago
gorhill 26e80a8c5c this fixes #536 10 years ago
gorhill cfa4b7ebe5 new version 10 years ago
gorhill 05b835dd73 started work on #105, #475, and possibly #510 10 years ago
gorhill a3c4df4e00 new revision 10 years ago
Chris c64e26deea Fix `set` for Firefox & Safari (don't set non-own properties in for..in loop) 10 years ago
gorhill 3e71ee90c6 new revision + fixed frame parent id 10 years ago
gorhill db6ed71060 fixed bad test 10 years ago
gorhill f9ca8d5040 new revision 10 years ago
Deathamns 0241870671 Firefox: minimal effort to support older versions 10 years ago
Deathamns 86e852a722 Firefox: suppress some "unsafe CPOW usage" message 10 years ago
Deathamns 859482fff2 Firefox: fix tab closing issue (pop-up blocking) 10 years ago
Deathamns ab556945f3 URL handling changes 10 years ago
gorhill 8a1b6d806e code review re #498 10 years ago
gorhill 3bd9eee897 this fixes one part of #498 10 years ago
Deathamns d1a5a1856f Firefox: lower popup resize delay 10 years ago
Deathamns 1c64aa4af4 Firefox: fix tooltip animation 10 years ago
gorhill e90bc19420 this fixes #490 10 years ago
Deathamns 5a422a681d Fix popup tooltips and sizing for Firefox 10 years ago
Deathamns 09d605fa04 Implement vAPI.insertHTML
The purpose of this API is basically to satisfy AMO reviewers in the
future, since the use of innerHTML with variables (i.e., not plain text) will
be rejected without any questions.

Since this is not a problem for browsers other than Firefox, they will
use simple innerHTML assignment, however safe-parsing could be implemented
for them too.
10 years ago
Deathamns 6151b10bd8 Firefox: remove unloading from vAPI 10 years ago
Deathamns 00e081f3fe Miscellaneous changes 10 years ago
Deathamns 89fe48ae66 Firefox: fixed content scripts? 10 years ago
Deathamns 7a5d174aa4 Firefox,Safari: implement vAPI.tabs.reload 10 years ago
Deathamns 648e5e2d67 Firefox: simplify vAPI.app.restart 10 years ago
Deathamns bc9c9ca2d9 Firefox: blocking improvements / other fixes
- Implement pop-up blocking
- Support blocking redirected requests
- Fix Local mirroring and inline-script blocking
- Block content on data: and about:blank pages
10 years ago
Deathamns f1e9bc363e Firefox: popup size for menu-panel 10 years ago
Deathamns 71b0c22c9d Firefox: fix copy-paste memory leak 10 years ago
Deathamns ec337b61af Firefox: implement vAPI.app.restart 10 years ago
Deathamns 2a2fa8da75 Code styling 10 years ago
Deathamns a3b2edf65e Firefox: ownsWeak=true for observers, +minor mods 10 years ago
Deathamns 4f8c0e65e6 Make vAPI.setIcon less Chromium specific 10 years ago
Deathamns 488be6ef3e Popup related changes 10 years ago
Deathamns 749c723d57 Firefox: new method for request handling
Now both nsIContentPolicy and on-http-* observers are used for net request
monitoring.

Reasons:
 - In many cases, nsIContentPolicy.shouldLoad is invoked twice for the same
   resource, because of the speculative parsing.
 - nsIContentPolicy.shouldLoad don't have information about the channel,
   so it can't redirect the request, nor change its headers, however
   on-http-opening-request can.

Also, local mirroring and inline-script blocking has been implemented.
10 years ago
Deathamns 84a0bbf18e Firefox: proper cleanup for context-menu item 10 years ago
Deathamns 0769160b34 Firefox: move callback to last call 10 years ago
Deathamns c2af79c996 Firefox: saved prefs were overwritten by defaults 10 years ago
Deathamns 6b4a9a1962 Firefox: add missing vAPI.onLoadAllCompleted 10 years ago
Deathamns 4833012ae3 Firefox: improve vAPI.tabs.getTabId 10 years ago
Deathamns 85eded970b Firefox: implement vAPI.contextMenu 10 years ago
Deathamns dd25e64134 Firefox: revert previous change
Initializing the extension with AddonManager takes too long (at least for
this extension).
When starting the browser, tabs loaded before the extension could, and
because of that, blocking didn't work.
It works better, if it's initialized when the window's DOM is ready.
10 years ago
Deathamns 3ce0d0aded Firefox,Safari: fill vAPI.app in a different way
Pass the extension data (name and version) as the fragment of the URL
for the background script, so vAPI.app can be filled without using XHR
to read the manifest files.
10 years ago
Deathamns feea508a8e Firefox: location.host isntead of app.cleanName 10 years ago
Deathamns fb2cb5c41c Add license headers, plus some code styling 10 years ago
Deathamns 6eaa7e02b8 Firefox: minor changes 10 years ago
Deathamns f17ad2f1a5 Firefox: implement vAPI.tabs.injectScript 10 years ago
Deathamns 4e1b938f25 Firefox: 'load' -> 'DOMContentLoaded' 10 years ago
Deathamns e0d742b040 Firefox: initialize buttons when DOM is ready 10 years ago
Deathamns f432dfa856 Firefox: observe main_frame requests too 10 years ago
Deathamns 7348d11871 Firefox: fix styling for toolbar button 10 years ago
Deathamns e2105c395e Firefox: implement toolbar button and popup 10 years ago
Deathamns 055c398916 Firefox: blocking and content scripts for e10s 10 years ago
Deathamns e724d1a9e2 Firefox: add basic blocking + some fixes 10 years ago
Deathamns a6b4e3dee0 Firefox: partial vAPI.tabs implementation 10 years ago
Deathamns cba32c8eb4 Firefox: implement vAPI.storage via SQLite 10 years ago
Deathamns 54868d149a Initial Firefox port (base, messaging, locales) 10 years ago
Deathamns 08403a44f8 Implement vAPI.insertHTML
The purpose of this API is basically to satisfy AMO reviewers in the
future, since the use of innerHTML with variables (i.e., not plain text) will
be rejected without any questions.

Since this is not a problem for browsers other than Firefox, they will
use simple innerHTML assignment, however safe-parsing could be implemented
for them too.
10 years ago
Deathamns bbfcb4eea9 abp:subscribe fixes
Test a[href^="abp:"], since the protocol probably not used for anything
else, also "a", because ABP checks only anchors, and these links are made
only for ABP.

Also, the event target is not always the link, so at least some parents
should be tested as well.
10 years ago
Deathamns aff7501596 Firefox: different kind of vAPI.localStorage 10 years ago
Deathamns 10f364c153 Firefox,Safari: vAPI.localStorage 10 years ago
gorhill c80280bd2d this fixes #792 10 years ago
Deathamns c9b1298344 Remove unnecessary fallback code for downloading 10 years ago
gorhill c6e3b5a81b Firefox: oops 10 years ago
gorhill 3e43478e13 changes re #993 for firefox platform 10 years ago
Deathamns 829f80e1da Fix prorblems caused by vAPI.insertHTML 10 years ago
Deathamns 618502354f Implement vAPI.insertHTML
The purpose of this API is basically to satisfy AMO reviewers in the
future, since the use of innerHTML with variables (i.e., not plain text) will
be rejected without any questions.

Since this is not a problem for browsers other than Firefox, they will
use simple innerHTML assignment, however safe-parsing could be implemented
for them too.
10 years ago
Deathamns e2c0beb663 Miscellaneous changes 10 years ago
Deathamns 3dc8e88c75 Popup related changes 10 years ago
Deathamns 9cb78c2575 Add license headers, plus some code styling 10 years ago
Deathamns 7c69a427c2 Firefox: implement toolbar button and popup 10 years ago
Deathamns 799aafbcd4 Firefox: implement vAPI.storage via SQLite 10 years ago
Deathamns e98b514a51 Initial Firefox port (base, messaging, locales) 10 years ago
gorhill db49291fa6 this fixes https://github.com/chrisaljoudi/uBlock/issues/1219 for Firefox 10 years ago
gorhill 2fbca2cc09 forgot to add shutdown to other platforms (re. https://github.com/gorhill/uMatrix/issues/144) 10 years ago
Deathamns afaf6aff9b vAPI.sessionId, element-picker dialog as iframe
vAPI.sessionId - random ID generated every time when a page loads.

Having the dialog in an iframe lowers the chance of interference with the
styling of the page, also avoids using innerHTML (AMO complaint).
10 years ago
Chris 0fbaf41d09 Remove previous Safari overhead; cleanup workarounds from rest of code 10 years ago
Deathamns 4b3d6716ff Firefox: remove evalInSandbox
Probably we won't eval plain text code, which makes it unnecessary, also
this way the validator on AMO won't complain about it.
10 years ago
Deathamns f196d31a2f Firefox: behind-the-scene requests / non-http tabs 10 years ago
gorhill 995236c6a9 not needed 10 years ago
Deathamns a7f15f0b71 URL handling changes 10 years ago
Deathamns a6acb50892 Firefox: fixed content scripts? 10 years ago
Deathamns 5f92ce4599 Firefox: improvements for content scripts 10 years ago
Deathamns 1a1d1b1c4b Code styling 10 years ago
Deathamns 3e39e1bd9f Firefox: new method for request handling
Now both nsIContentPolicy and on-http-* observers are used for net request
monitoring.

Reasons:
 - In many cases, nsIContentPolicy.shouldLoad is invoked twice for the same
   resource, because of the speculative parsing.
 - nsIContentPolicy.shouldLoad don't have information about the channel,
   so it can't redirect the request, nor change its headers, however
   on-http-opening-request can.

Also, local mirroring and inline-script blocking has been implemented.
10 years ago
Deathamns e70bf61206 Add license headers, plus some code styling 10 years ago
Deathamns 1ae15f1a61 Firefox: implement vAPI.tabs.injectScript 10 years ago
Deathamns 747f6f9955 Firefox: implement toolbar button and popup 10 years ago
Deathamns e96e535f3d Firefox: add basic blocking + some fixes 10 years ago
Deathamns dd6f3cc4b3 Firefox: partial vAPI.tabs implementation 10 years ago
Deathamns 8f0cf1d340 Initial Firefox port (base, messaging, locales) 10 years ago
AlexVallat cc85464eb5 Tidying .xul location, update linux script to match windows one 10 years ago
gorhill e4688ecf22 this fixes https://github.com/chrisaljoudi/uBlock/issues/1219 for Firefox 10 years ago
Deathamns 2b365ec4c1 Firefox: update application versions 10 years ago
AlexVallat 15df6b8e4f Initial UI support for Fennec 10 years ago
Deathamns 6812ed591a Firefox/Fennec code cleanup 10 years ago
Cheng Sun cce2e85eeb Fennec WIP #2 10 years ago
Deathamns 0397ea0eac Remove unused code 10 years ago
Deathamns ab0b1936b4 Firefox: get the version number from the fragment 10 years ago
Deathamns ad19bae5e1 Firefox: add localized descriptions to install.rdf 10 years ago
Deathamns 2f7be81668 Firefox: minimal effort to support older versions 10 years ago
Deathamns 839c6300b8 Miscellaneous changes 10 years ago
Deathamns 8b01ed93ed Firefox: update manifest files when building 10 years ago
Deathamns 2750dac88c Firefox: implement toolbar button and popup 10 years ago
Deathamns 691c261118 Firefox: partial vAPI.tabs implementation 10 years ago
Deathamns ee210ad15c Firefox: implement vAPI.storage via SQLite 10 years ago
Deathamns 91ad0d65a8 Initial Firefox port (base, messaging, locales) 10 years ago
AlexVallat 8af9d7f361 Use a nsIWebProgressListener instead of a tabsProgressListener for location change monitoring 10 years ago
Deathamns 8c9382d4db Firefox: load content-scripts on extension start 10 years ago
Deathamns 9aaee014d4 Miscellaneous changes 10 years ago
Deathamns 9317615bc7 Firefox: improvements for content scripts 10 years ago
Deathamns 3646ecbeb2 Code styling 10 years ago
Deathamns e9b3b5bcd2 Firefox: new method for request handling
Now both nsIContentPolicy and on-http-* observers are used for net request
monitoring.

Reasons:
 - In many cases, nsIContentPolicy.shouldLoad is invoked twice for the same
   resource, because of the speculative parsing.
 - nsIContentPolicy.shouldLoad don't have information about the channel,
   so it can't redirect the request, nor change its headers, however
   on-http-opening-request can.

Also, local mirroring and inline-script blocking has been implemented.
10 years ago
Deathamns 24bc4c9f47 Remove duplicate 'use strict'; 10 years ago
Deathamns dced33ca44 Add license headers, plus some code styling 10 years ago
Deathamns bc199316be Firefox: implement toolbar button and popup 10 years ago
Deathamns 41f3579461 Firefox: blocking and content scripts for e10s 10 years ago
Deathamns 05f174ab97 Firefox: add basic blocking + some fixes 10 years ago
Deathamns ac201e2f8e Firefox: partial vAPI.tabs implementation 10 years ago
Deathamns 3b5826fe75 Firefox: implement vAPI.storage via SQLite 10 years ago
Deathamns 24163694f4 Firefox: implement content scripts 10 years ago
Deathamns efb4b98986 Initial Firefox port (base, messaging, locales) 10 years ago
gorhill beb70b8343 code review 10 years ago
gorhill a26c893339 this fixes #43 10 years ago
gorhill 73dc3ba2b0 removed spurious lines of code 10 years ago
gorhill 231afb565a translation work from https://crowdin.com/project/ublock 10 years ago
AlexVallat 75ac4b979e Changes following review 10 years ago
gorhill 22bad6201e translation work from https://crowdin.com/project/ublock 10 years ago
AlexVallat 822d78be1b More restrictive monitoring.
Probably doesn't make a difference, but at least theoretically more efficient.
10 years ago
AlexVallat c5546e322f Use a nsIWebProgressListener instead of a tabsProgressListener for location change monitoring 10 years ago
Deathamns fd3e24713f Firefox: load content-scripts on extension start 10 years ago
Deathamns d3223766c8 Firefox: abp:subscribe 10 years ago
gorhill 7243aedf17 this fixes #224 for Chromium 10 years ago
Deathamns b1acfb08e6 Firefox/Fennec fixes 10 years ago
Deathamns 7b5ea26f28 Firefox/Fennec code cleanup 10 years ago
Deathamns df2ffce8aa Firefox: match Chrome's behavior with frame ids 10 years ago
gorhill 1b66ce8b40 #795: code review as per @Deathamns feedback 10 years ago
gorhill 0f629c9df8 this fixes #795 10 years ago
Deathamns a6dfe3f416 Firefox: remove unused arguments 10 years ago
Deathamns 1e6f29e64e Firefox: don't close popups after user interaction 10 years ago
Deathamns 052f296181 Doesn't work 10 years ago
Deathamns eecc860be7 Firefox: use correct data for parentFrameId 10 years ago
Deathamns 65cecfe263 Firefox: each frame should have a unique ID 10 years ago
Deathamns 45cd3305d1 Firefox: remove evalInSandbox
Probably we won't eval plain text code, which makes it unnecessary, also
this way the validator on AMO won't complain about it.
10 years ago
Deathamns cd52352995 Update frameModule.js 10 years ago
Deathamns 92838e16d3 Firefox: behind-the-scene requests / non-http tabs 10 years ago
Deathamns ae66f96570 Firefox: minimal effort to support older versions 10 years ago
Deathamns 6250109a78 Firefox: fix tab closing issue (pop-up blocking) 10 years ago
gorhill f482164601 removed unused code for the time being 10 years ago
Deathamns c46d25874d URL handling changes 10 years ago
Deathamns 46883756e5 Miscellaneous changes 10 years ago
Deathamns f51bb42fa4 Firefox: fixed content scripts? 10 years ago
Deathamns de1f643510 Firefox: improvements for content scripts 10 years ago
Deathamns f570bc7f48 Firefox: simplify vAPI.app.restart 10 years ago
Deathamns 6571a0700f Firefox: workaround for the e10s crash 10 years ago
Deathamns 9f4e9d48da Firefox: blocking improvements / other fixes
- Implement pop-up blocking
- Support blocking redirected requests
- Fix Local mirroring and inline-script blocking
- Block content on data: and about:blank pages
10 years ago
Deathamns 40b191e9f4 Code styling 10 years ago
Deathamns de2f0bb292 Firefox: ownsWeak=true for observers, +minor mods 10 years ago
Deathamns 1b71f8bba3 Firefox: new method for request handling
Now both nsIContentPolicy and on-http-* observers are used for net request
monitoring.

Reasons:
 - In many cases, nsIContentPolicy.shouldLoad is invoked twice for the same
   resource, because of the speculative parsing.
 - nsIContentPolicy.shouldLoad don't have information about the channel,
   so it can't redirect the request, nor change its headers, however
   on-http-opening-request can.

Also, local mirroring and inline-script blocking has been implemented.
10 years ago
Deathamns 08f87c72bb Fix build scipts' shebang, let -> const 10 years ago
Deathamns 54d264646a Firefox: better way to get the messageManager 10 years ago
Deathamns 6faa9e85c2 Add license headers, plus some code styling 10 years ago
Deathamns afe6a29c36 Firefox: minor changes 10 years ago
Deathamns 0579c1bcaa Firefox: fix script injection 10 years ago
Deathamns d66b8aa329 Firefox: implement vAPI.tabs.injectScript 10 years ago
Deathamns 12ca303901 Firefox: fix 'main_frame' for e10s 10 years ago
Deathamns 0fd304947c Firefox: initialize buttons when DOM is ready 10 years ago
Deathamns 500213f479 Firefox: observe main_frame requests too 10 years ago
Deathamns 33c052e397 Firefox: fix styling for toolbar button 10 years ago
Deathamns 4f7070cf5d Firefox: implement toolbar button and popup 10 years ago