vapi-net.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*******************************************************************************
  2. ηMatrix - a browser extension to black/white list requests.
  3. Copyright (C) 2014-2019 The uMatrix/uBlock Origin authors
  4. Copyright (C) 2019 Alessio Vanni
  5. This program is free software: you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation, either version 3 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program. If not, see {http://www.gnu.org/licenses/}.
  15. Home: https://libregit.org/heckyel/ematrix
  16. uMatrix Home: https://github.com/gorhill/uMatrix
  17. */
  18. 'use strict';
  19. /******************************************************************************/
  20. (function () {
  21. vAPI.net = {};
  22. vAPI.net.registerListeners = function () {
  23. this.onBeforeRequest.types = this.onBeforeRequest.types
  24. ? new Set(this.onBeforeRequest.types)
  25. : null;
  26. this.onBeforeSendHeaders.types = this.onBeforeSendHeaders.types
  27. ? new Set(this.onBeforeSendHeaders.types)
  28. : null;
  29. let shouldLoadListenerMessageName = location.host + ':shouldLoad';
  30. let shouldLoadListener = function (e) {
  31. let details = e.data;
  32. let pendingReq = vAPI.httpObserver.createPendingRequest(details.url);
  33. pendingReq.rawType = details.rawType;
  34. pendingReq.tabId = vAPI.tabs.manager.tabIdFromTarget(e.target);
  35. };
  36. // https://github.com/gorhill/uMatrix/issues/200
  37. // We need this only for Firefox 34 and less: the tab id is derived from
  38. // the origin of the message.
  39. if (!vAPI.modernFirefox) {
  40. vAPI.messaging.globalMessageManager
  41. .addMessageListener(shouldLoadListenerMessageName,
  42. shouldLoadListener);
  43. }
  44. vAPI.httpObserver.register();
  45. vAPI.addCleanUpTask(function () {
  46. if (!vAPI.modernFirefox) {
  47. vAPI.messaging.globalMessageManager
  48. .removeMessageListener(shouldLoadListenerMessageName,
  49. shouldLoadListener);
  50. }
  51. vAPI.httpObserver.unregister();
  52. });
  53. };
  54. })();