Request additional permissions immediately on clicking 'Post from URL' and only then. #2230

This commit is contained in:
ccd0 2019-03-08 15:21:43 -08:00
parent c86fadf0f3
commit 8e22de0ca0
3 changed files with 54 additions and 51 deletions

View File

@ -430,14 +430,15 @@ QR =
handleUrl: (urlDefault) -> handleUrl: (urlDefault) ->
QR.open() QR.open()
QR.selected.preventAutoPost() QR.selected.preventAutoPost()
url = prompt 'Enter a URL:', urlDefault CrossOrigin.permission ->
return if url is null url = prompt 'Enter a URL:', urlDefault
QR.nodes.fileButton.focus() return if url is null
CrossOrigin.file url, (blob) -> QR.nodes.fileButton.focus()
if blob and not /^text\//.test blob.type CrossOrigin.file url, (blob) ->
QR.handleFiles [blob] if blob and not /^text\//.test blob.type
else QR.handleFiles [blob]
QR.error "Can't load file." else
QR.error "Can't load file."
handleFiles: (files) -> handleFiles: (files) ->
if @ isnt QR # file input if @ isnt QR # file input

View File

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

View File

@ -131,3 +131,11 @@ CrossOrigin =
else else
failure url failure url
<% } %> <% } %>
permission: (cb) ->
<% if (type === 'crx') { %>
eventPageRequest {type: 'permission'}, -> cb()
<% } %>
<% if (type === 'userscript') { %>
cb()
<% } %>