headers.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. md.headers = ({storage: {state}, detect}) => {
  2. var callback = ({method, url, responseHeaders}) => {
  3. if (method !== 'GET') {
  4. return {responseHeaders}
  5. }
  6. var header = responseHeaders.find(({name}) => /content-type/i.test(name))
  7. if (!detect.match(header, url)) {
  8. return {responseHeaders}
  9. }
  10. if (state.csp) {
  11. responseHeaders = responseHeaders
  12. .filter(({name}) => !/content-security-policy/i.test(name))
  13. }
  14. if (/Firefox/.test(navigator.userAgent)) {
  15. responseHeaders = responseHeaders
  16. // ff: markdown `content-type` is not allowed
  17. .map((header) => {
  18. if (
  19. /content-type/i.test(header.name) &&
  20. /text\/(?:x-)?markdown/.test(header.value)
  21. ) {
  22. header.value = 'text/plain; charset=utf-8'
  23. }
  24. return header
  25. })
  26. }
  27. return {responseHeaders}
  28. }
  29. var filter = {
  30. urls: ['<all_urls>'],
  31. types: ['main_frame', 'sub_frame']
  32. }
  33. var options = ['blocking', 'responseHeaders']
  34. var add = () => {
  35. chrome.webRequest.onHeadersReceived.addListener(callback, filter, options)
  36. }
  37. var remove = () => {
  38. chrome.webRequest.onHeadersReceived.removeListener(callback, filter, options)
  39. }
  40. return {add, remove}
  41. }