mirror of
https://github.com/zero-peak/ZeroOmega.git
synced 2025-02-02 11:08:13 -05:00
Adapt to browser.storage if available. Disable proxy for now.
Added feature detection for some other chrome.* APIs.
This commit is contained in:
parent
7333d43064
commit
8d040f9402
@ -147,11 +147,11 @@ actionForUrl = (url) ->
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
storage = new OmegaTargetCurrent.Storage(chrome.storage.local, 'local')
|
storage = new OmegaTargetCurrent.Storage('local')
|
||||||
state = new OmegaTargetCurrent.BrowserStorage(localStorage, 'omega.local.')
|
state = new OmegaTargetCurrent.BrowserStorage(localStorage, 'omega.local.')
|
||||||
|
|
||||||
if chrome.storage.sync
|
if chrome?.storage?.sync or browser?.storage?.sync
|
||||||
syncStorage = new OmegaTargetCurrent.Storage(chrome.storage.sync, 'sync')
|
syncStorage = new OmegaTargetCurrent.Storage('sync')
|
||||||
sync = new OmegaTargetCurrent.OptionsSync(syncStorage)
|
sync = new OmegaTargetCurrent.OptionsSync(syncStorage)
|
||||||
if localStorage['omega.local.syncOptions'] != '"sync"'
|
if localStorage['omega.local.syncOptions'] != '"sync"'
|
||||||
sync.enabled = false
|
sync.enabled = false
|
||||||
|
@ -34,8 +34,10 @@ class TrackedEvent
|
|||||||
constructor: (@event) ->
|
constructor: (@event) ->
|
||||||
@callbacks = []
|
@callbacks = []
|
||||||
mes = ['hasListener', 'hasListeners', 'addRules', 'getRules', 'removeRules']
|
mes = ['hasListener', 'hasListeners', 'addRules', 'getRules', 'removeRules']
|
||||||
for method in mes
|
for methodName in mes
|
||||||
this[method] = @event[method].bind(@event)
|
method = @event[methodName]
|
||||||
|
if method?
|
||||||
|
this[methodName] = method.bind(@event)
|
||||||
|
|
||||||
addListener: (callback) ->
|
addListener: (callback) ->
|
||||||
@event.addListener(callback)
|
@event.addListener(callback)
|
||||||
@ -69,7 +71,7 @@ class TrackedEvent
|
|||||||
###
|
###
|
||||||
dispose: ->
|
dispose: ->
|
||||||
@removeAllListeners()
|
@removeAllListeners()
|
||||||
if @event.hasListeners()
|
if @event.hasListeners?()
|
||||||
throw new Error("Underlying Event still has listeners!")
|
throw new Error("Underlying Event still has listeners!")
|
||||||
@event = null
|
@event = null
|
||||||
@callbacks = null
|
@callbacks = null
|
||||||
|
@ -10,6 +10,7 @@ module.exports = class ExternalApi
|
|||||||
'padekgcemlokbadohgkifijomclgjgif': 32
|
'padekgcemlokbadohgkifijomclgjgif': 32
|
||||||
disabled: false
|
disabled: false
|
||||||
listen: ->
|
listen: ->
|
||||||
|
return unless chrome.runtime.onConnectExternal
|
||||||
chrome.runtime.onConnectExternal.addListener (rawPort) =>
|
chrome.runtime.onConnectExternal.addListener (rawPort) =>
|
||||||
port = new ChromePort(rawPort)
|
port = new ChromePort(rawPort)
|
||||||
port.onMessage.addListener (msg) => @onMessage(msg, port)
|
port.onMessage.addListener (msg) => @onMessage(msg, port)
|
||||||
|
@ -3,7 +3,14 @@ OmegaPac = OmegaTarget.OmegaPac
|
|||||||
Promise = OmegaTarget.Promise
|
Promise = OmegaTarget.Promise
|
||||||
querystring = require('querystring')
|
querystring = require('querystring')
|
||||||
chromeApiPromisifyAll = require('./chrome_api')
|
chromeApiPromisifyAll = require('./chrome_api')
|
||||||
proxySettings = chromeApiPromisifyAll(chrome.proxy.settings)
|
if chrome?.proxy?.settings
|
||||||
|
proxySettings = chromeApiPromisifyAll(chrome.proxy.settings)
|
||||||
|
else
|
||||||
|
proxySettings =
|
||||||
|
setAsync: -> Promise.resolve()
|
||||||
|
clearAsync: -> Promise.resolve()
|
||||||
|
get: -> null
|
||||||
|
onChange: addListener: -> null
|
||||||
parseExternalProfile = require('./parse_external_profile')
|
parseExternalProfile = require('./parse_external_profile')
|
||||||
ProxyAuth = require('./proxy_auth')
|
ProxyAuth = require('./proxy_auth')
|
||||||
WebRequestMonitor = require('./web_request_monitor')
|
WebRequestMonitor = require('./web_request_monitor')
|
||||||
@ -118,14 +125,14 @@ class ChromeOptions extends OmegaTarget.Options
|
|||||||
@_proxyChangeListener = (details) =>
|
@_proxyChangeListener = (details) =>
|
||||||
for watcher in @_proxyChangeWatchers
|
for watcher in @_proxyChangeWatchers
|
||||||
watcher(details)
|
watcher(details)
|
||||||
chrome.proxy.settings.onChange.addListener @_proxyChangeListener
|
proxySettings.onChange.addListener @_proxyChangeListener
|
||||||
@_proxyChangeWatchers.push(callback)
|
@_proxyChangeWatchers.push(callback)
|
||||||
applyProfileProxy: (profile, meta) ->
|
applyProfileProxy: (profile, meta) ->
|
||||||
meta ?= profile
|
meta ?= profile
|
||||||
if profile.profileType == 'SystemProfile'
|
if profile.profileType == 'SystemProfile'
|
||||||
# Clear proxy settings, returning proxy control to Chromium.
|
# Clear proxy settings, returning proxy control to Chromium.
|
||||||
return proxySettings.clearAsync({}).then =>
|
return proxySettings.clearAsync({}).then =>
|
||||||
chrome.proxy.settings.get {}, @_proxyChangeListener
|
proxySettings.get {}, @_proxyChangeListener
|
||||||
return
|
return
|
||||||
config = {}
|
config = {}
|
||||||
if profile.profileType == 'DirectProfile'
|
if profile.profileType == 'DirectProfile'
|
||||||
@ -161,7 +168,7 @@ class ChromeOptions extends OmegaTarget.Options
|
|||||||
@_proxyAuth.setProxies(@_watchingProfiles)
|
@_proxyAuth.setProxies(@_watchingProfiles)
|
||||||
proxySettings.setAsync({value: config})
|
proxySettings.setAsync({value: config})
|
||||||
).then =>
|
).then =>
|
||||||
chrome.proxy.settings.get {}, @_proxyChangeListener
|
proxySettings.get {}, @_proxyChangeListener
|
||||||
return
|
return
|
||||||
|
|
||||||
_quickSwitchInit: false
|
_quickSwitchInit: false
|
||||||
|
@ -13,6 +13,9 @@ module.exports = class ProxyAuth
|
|||||||
if not chrome.webRequest
|
if not chrome.webRequest
|
||||||
@options.log.error('Proxy auth disabled! No webRequest permission.')
|
@options.log.error('Proxy auth disabled! No webRequest permission.')
|
||||||
return
|
return
|
||||||
|
if not chrome.webRequest.onAuthRequired
|
||||||
|
@options.log.error('Proxy auth disabled! onAuthRequired not available.')
|
||||||
|
return
|
||||||
chrome.webRequest.onAuthRequired.addListener(
|
chrome.webRequest.onAuthRequired.addListener(
|
||||||
@authHandler.bind(this)
|
@authHandler.bind(this)
|
||||||
{urls: ['<all_urls>']}
|
{urls: ['<all_urls>']}
|
||||||
|
@ -28,27 +28,40 @@ class ChromeStorage extends OmegaTarget.Storage
|
|||||||
# This could happen if the storage area is not available. For example,
|
# This could happen if the storage area is not available. For example,
|
||||||
# some Chromium-based browsers disable access to the sync storage.
|
# some Chromium-based browsers disable access to the sync storage.
|
||||||
err = new OmegaTarget.Storage.StorageUnavailableError()
|
err = new OmegaTarget.Storage.StorageUnavailableError()
|
||||||
|
else if err.message.indexOf(
|
||||||
|
'Please set webextensions.storage.sync.enabled to true') >= 0
|
||||||
|
# This happens when sync storage is disabled in flags.
|
||||||
|
err = new OmegaTarget.Storage.StorageUnavailableError()
|
||||||
|
|
||||||
return Promise.reject(err)
|
return Promise.reject(err)
|
||||||
|
|
||||||
constructor: (storage, @areaName) ->
|
constructor: (@areaName) ->
|
||||||
@storage = chromeApiPromisifyAll(storage)
|
if browser?.storage?[@areaName]
|
||||||
|
@storage = browser.storage[@areaName]
|
||||||
|
else
|
||||||
|
wrapper = chromeApiPromisifyAll(chrome.storage[@areaName])
|
||||||
|
@storage =
|
||||||
|
get: wrapper.getAsync.bind(wrapper),
|
||||||
|
set: wrapper.setAsync.bind(wrapper),
|
||||||
|
remove: wrapper.removeAsync.bind(wrapper),
|
||||||
|
clear: wrapper.clearAsync.bind(wrapper),
|
||||||
|
|
||||||
get: (keys) ->
|
get: (keys) ->
|
||||||
keys ?= null
|
keys ?= null
|
||||||
@storage.getAsync(keys).catch(ChromeStorage.parseStorageErrors)
|
Promise.resolve(@storage.get(keys)).catch(ChromeStorage.parseStorageErrors)
|
||||||
|
|
||||||
set: (items) ->
|
set: (items) ->
|
||||||
if Object.keys(items).length == 0
|
if Object.keys(items).length == 0
|
||||||
return Promise.resolve({})
|
return Promise.resolve({})
|
||||||
@storage.setAsync(items).catch(ChromeStorage.parseStorageErrors)
|
Promise.resolve(@storage.set(items)).catch(ChromeStorage.parseStorageErrors)
|
||||||
|
|
||||||
remove: (keys) ->
|
remove: (keys) ->
|
||||||
if not keys?
|
if not keys?
|
||||||
return @storage.clearAsync()
|
return Promise.resolve(@storage.clear())
|
||||||
if Array.isArray(keys) and keys.length == 0
|
if Array.isArray(keys) and keys.length == 0
|
||||||
return Promise.resolve({})
|
return Promise.resolve({})
|
||||||
@storage.removeAsync(keys).catch(ChromeStorage.parseStorageErrors)
|
Promise.resolve(@storage.remove(keys))
|
||||||
|
.catch(ChromeStorage.parseStorageErrors)
|
||||||
|
|
||||||
watch: (keys, callback) ->
|
watch: (keys, callback) ->
|
||||||
ChromeStorage.watchers[@areaName] ?= {}
|
ChromeStorage.watchers[@areaName] ?= {}
|
||||||
|
Loading…
Reference in New Issue
Block a user