Request additional permissions immediately on clicking 'Post from URL' and only then. #2230
This commit is contained in:
parent
c86fadf0f3
commit
8e22de0ca0
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -131,3 +131,11 @@ CrossOrigin =
|
||||
else
|
||||
failure url
|
||||
<% } %>
|
||||
|
||||
permission: (cb) ->
|
||||
<% if (type === 'crx') { %>
|
||||
eventPageRequest {type: 'permission'}, -> cb()
|
||||
<% } %>
|
||||
<% if (type === 'userscript') { %>
|
||||
cb()
|
||||
<% } %>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user