4chan-x/src/meta/eventPage.coffee

47 lines
1.4 KiB
CoffeeScript

requestID = 0
chrome.runtime.onMessage.addListener (request, sender, sendResponse) ->
if request.responseType is 'arraybuffer'
# Cross-origin image fetching. Need permission.
chrome.permissions.contains
origins: ['*://*/']
, (result) ->
if result
ajax request, sender, sendResponse
else
chrome.permissions.request
origins: ['*://*/']
, ->
ajax request, sender, sendResponse
return true
else
# JSON fetching from non-HTTPS archive.
ajax request, sender, sendResponse
ajax = (request, sender, sendResponse) ->
id = requestID
requestID++
sendResponse id
xhr = new XMLHttpRequest()
xhr.open 'GET', request.url, true
xhr.responseType = request.responseType
xhr.addEventListener 'load', ->
if @readyState is @DONE && xhr.status is 200
{response} = @
if request.responseType is 'arraybuffer'
response = [new Uint8Array(response)...]
contentType = @getResponseHeader 'Content-Type'
contentDisposition = @getResponseHeader 'Content-Disposition'
chrome.tabs.sendMessage sender.tab.id, {id, response, contentType, contentDisposition}
else
chrome.tabs.sendMessage sender.tab.id, {id, error: true}
, false
xhr.addEventListener 'error', ->
chrome.tabs.sendMessage sender.tab.id, {id, error: true}
, false
xhr.addEventListener 'abort', ->
chrome.tabs.sendMessage sender.tab.id, {id, error: true}
, false
xhr.send()