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