diff --git a/src/Posting/QR.coffee b/src/Posting/QR.coffee index e37874824..4412dd876 100644 --- a/src/Posting/QR.coffee +++ b/src/Posting/QR.coffee @@ -430,14 +430,15 @@ QR = handleUrl: (urlDefault) -> QR.open() QR.selected.preventAutoPost() - url = prompt 'Enter a URL:', urlDefault - return if url is null - QR.nodes.fileButton.focus() - CrossOrigin.file url, (blob) -> - if blob and not /^text\//.test blob.type - QR.handleFiles [blob] - else - QR.error "Can't load file." + CrossOrigin.permission -> + url = prompt 'Enter a URL:', urlDefault + return if url is null + QR.nodes.fileButton.focus() + CrossOrigin.file url, (blob) -> + if blob and not /^text\//.test blob.type + QR.handleFiles [blob] + else + QR.error "Can't load file." handleFiles: (files) -> if @ isnt QR # file input diff --git a/src/meta/eventPage.coffee b/src/meta/eventPage.coffee index 6deeacff1..1b113aa72 100644 --- a/src/meta/eventPage.coffee +++ b/src/meta/eventPage.coffee @@ -8,47 +8,41 @@ chrome.runtime.onMessage.addListener (request, sender, sendResponse) -> chrome.tabs.sendMessage sender.tab.id, {id, data: response} handlers = - ajax: (request, cb) -> - if request.responseType is 'arraybuffer' - # Cross-origin image fetching. Need permission. - chrome.permissions.contains - origins: ['*://*/'] - , (result) -> - if result - ajax request, cb - else - chrome.permissions.request - origins: ['*://*/'] - , -> - ajax request, cb - return true - else - # JSON fetching from non-HTTPS archive. - ajax request, cb + permission: (request, cb) -> + chrome.permissions.contains + origins: ['*://*/'] + , (result) -> + if result + cb() + else + chrome.permissions.request + origins: ['*://*/'] + , -> + cb() -ajax = (request, cb) -> - xhr = new XMLHttpRequest() - xhr.open 'GET', request.url, true - xhr.responseType = request.responseType - xhr.timeout = request.timeout - xhr.addEventListener 'load', -> - {status, statusText, response} = @ - if @readyState is @DONE && xhr.status is 200 - if request.responseType is 'arraybuffer' - response = [new Uint8Array(response)...] - contentType = @getResponseHeader 'Content-Type' - contentDisposition = @getResponseHeader 'Content-Disposition' - cb {status, statusText, response, contentType, contentDisposition} - else - cb {status, statusText, response, error: true} - , false - xhr.addEventListener 'error', -> - cb {error: true} - , false - xhr.addEventListener 'abort', -> - cb {error: true} - , false - xhr.addEventListener 'timeout', -> - cb {error: true} - , false - xhr.send() + ajax: (request, cb) -> + xhr = new XMLHttpRequest() + xhr.open 'GET', request.url, true + xhr.responseType = request.responseType + xhr.timeout = request.timeout + xhr.addEventListener 'load', -> + {status, statusText, response} = @ + if @readyState is @DONE && xhr.status is 200 + if request.responseType is 'arraybuffer' + response = [new Uint8Array(response)...] + contentType = @getResponseHeader 'Content-Type' + contentDisposition = @getResponseHeader 'Content-Disposition' + cb {status, statusText, response, contentType, contentDisposition} + else + cb {status, statusText, response, error: true} + , false + xhr.addEventListener 'error', -> + cb {error: true} + , false + xhr.addEventListener 'abort', -> + cb {error: true} + , false + xhr.addEventListener 'timeout', -> + cb {error: true} + , false + xhr.send() diff --git a/src/platform/CrossOrigin.coffee b/src/platform/CrossOrigin.coffee index c3a2d0d88..179a90cde 100644 --- a/src/platform/CrossOrigin.coffee +++ b/src/platform/CrossOrigin.coffee @@ -131,3 +131,11 @@ CrossOrigin = else failure url <% } %> + + permission: (cb) -> + <% if (type === 'crx') { %> + eventPageRequest {type: 'permission'}, -> cb() + <% } %> + <% if (type === 'userscript') { %> + cb() + <% } %>