Skip to content
This repository has been archived by the owner on Dec 11, 2019. It is now read-only.

Commit

Permalink
Use component updater for extensions
Browse files Browse the repository at this point in the history
  • Loading branch information
bbondy committed Sep 20, 2016
1 parent cc75109 commit 8b56866
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 22 deletions.
4 changes: 4 additions & 0 deletions app/common/state/extensionState.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ const browserActionDefaults = Immutable.fromJS({

const extensionState = {

getExtensions: (state) => {
return state.get('extensions')
},

getEnabledExtensions: (state) => {
return state.get('extensions').filter((installInfo, extensionId) => {
return installInfo.get('enabled') === true
Expand Down
90 changes: 70 additions & 20 deletions app/extensions.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ const browserActions = require('./browser/extensions/browserActions')
const extensionActions = require('./common/actions/extensionActions')
const AppStore = require('../js/stores/appStore')
const config = require('../js/constants/config')
const { fileUrl } = require('../js/lib/appUrlUtil')
const { getAppUrl, getExtensionsPath, getIndexHTML } = require('../js/lib/appUrlUtil')
const { getSetting } = require('../js/settings')
const {fileUrl} = require('../js/lib/appUrlUtil')
const {getAppUrl, getExtensionsPath, getIndexHTML} = require('../js/lib/appUrlUtil')
const {getSetting} = require('../js/settings')
const settings = require('../js/constants/settings')
const {passwordManagers, extensionIds} = require('../js/constants/passwordManagers')
const appStore = require('../js/stores/appStore')
const extensionState = require('./common/state/extensionState')

let generateBraveManifest = () => {
let baseManifest = {
Expand Down Expand Up @@ -139,23 +141,62 @@ let generateBraveManifest = () => {
}

module.exports.init = () => {
const installedExtensions = {}
const registeredExtensions = {}
browserActions.init()
let installedExtensions = {}

const defaultSession = require('electron').session.defaultSession
defaultSession.updateClient.on('component-checking-for-updates', () => {
// console.log('checking for update')
})
defaultSession.updateClient.on('component-update-found', () => {
// console.log('update-found')
})
defaultSession.updateClient.on('component-update-ready', () => {
// console.log('update-ready')
})
defaultSession.updateClient.on('component-update-updated', (e, extensionId, version) => {
// console.log('update-updated', extensionId, version)
})
defaultSession.updateClient.on('component-ready', (e, extensionId, extensionPath) => {
// console.log('component-ready', extensionId, extensionPath)
// Re-setup the installedExtensions info if it exists
delete installedExtensions[extensionId]
installExtension(extensionId, extensionPath)
})
defaultSession.updateClient.on('component-not-updated', () => {
// console.log('update-not-updated')
})
defaultSession.updateClient.on('component-registered', (e, extensionId) => {
// console.log('component-registered')
const extensions = extensionState.getExtensions(appStore.getState())
const extensionPath = extensions.getIn([extensionId, 'filePath'])
// If we don't have info on the extension yet, check for an update / install
if (!extensionPath) {
defaultSession.updateClient.install(extensionId)
} else {
installExtension(extensionId, extensionPath)
}
})

let extensionInstalled = (installInfo) => {
if (installInfo.error) {
console.error(installInfo.error)
// TODO(bridiver) extensionActions.extensionInstallFailed
return
}
installedExtensions[installInfo.id] = installInfo
installInfo.filePath = installInfo.base_path
installInfo.base_path = fileUrl(installInfo.base_path)

extensionActions.extensionInstalled(installInfo.id, installInfo)
enableExtension(installInfo.id)
}

let installExtension = (extensionId, path, options = {}) => {
if (!installedExtensions[extensionId]) {
process.emit('load-extension', path, options, extensionInstalled)
} else {
enableExtension(extensionId)
}
}

Expand All @@ -175,42 +216,51 @@ module.exports.init = () => {
}
}

let enableExtensions = () => {
installExtension(config.braveExtensionId, getExtensionsPath('brave'), {manifest_location: 'component', manifest: generateBraveManifest()})
let registerExtension = (extensionId) => {
const extensions = extensionState.getExtensions(appStore.getState())
if (!registeredExtensions[extensionId]) {
defaultSession.updateClient.registerComponent(extensionId)
registeredExtensions[extensionId] = true
} else {
const extensionPath = extensions.getIn([extensionId, 'filePath'])
if (extensionPath) {
// Otheriwse just install it
installExtension(extensionId, extensionPath)
}
}
}

// Manually install only the braveExtension
registeredExtensions[config.braveExtensionId] = true
installExtension(config.braveExtensionId, getExtensionsPath('brave'), {manifest_location: 'component', manifest: generateBraveManifest()})

let registerExtensions = () => {
if (getSetting(settings.PDFJS_ENABLED)) {
installExtension(config.PDFJSExtensionId, getExtensionsPath('pdfjs'))
enableExtension(config.PDFJSExtensionId)
registerExtension(config.PDFJSExtensionId)
} else {
disableExtension(config.PDFJSExtensionId)
}

const activePasswordManager = getSetting(settings.ACTIVE_PASSWORD_MANAGER)
if (activePasswordManager === passwordManagers.ONE_PASSWORD) {
installExtension(extensionIds[passwordManagers.ONE_PASSWORD], getExtensionsPath('1password'))
enableExtension(extensionIds[passwordManagers.ONE_PASSWORD])
registerExtension(extensionIds[passwordManagers.ONE_PASSWORD])
} else {
disableExtension(extensionIds[passwordManagers.ONE_PASSWORD])
}

if (activePasswordManager === passwordManagers.DASHLANE) {
installExtension(extensionIds[passwordManagers.DASHLANE], getExtensionsPath('dashlane'))
enableExtension(extensionIds[passwordManagers.DASHLANE])
registerExtension(extensionIds[passwordManagers.DASHLANE])
} else {
disableExtension(extensionIds[passwordManagers.DASHLANE])
}

if (activePasswordManager === passwordManagers.LAST_PASS) {
installExtension(extensionIds[passwordManagers.LAST_PASS], getExtensionsPath('lastpass'))
enableExtension(extensionIds[passwordManagers.LAST_PASS])
registerExtension(extensionIds[passwordManagers.LAST_PASS])
} else {
disableExtension(extensionIds[passwordManagers.LAST_PASS])
}
}

enableExtensions()

AppStore.addChangeListener(() => {
enableExtensions()
})
registerExtensions()
AppStore.addChangeListener(registerExtensions)
}
7 changes: 5 additions & 2 deletions app/sessionStore.js
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,11 @@ module.exports.cleanAppData = (data, isShutdown) => {
// if (data.tabs) {
// data.tabs = data.tabs.map((tab) => tabState.getPersistentTabState(tab).toJS())
// }
// TODO(bridiver) - really just need to clear out tabId related stuff
delete data.extensions
if (data.extensions) {
Object.keys(data.extensions).forEach((extensionId) => {
delete data.extensions[extensionId].tabs
})
}
}

/**
Expand Down

0 comments on commit 8b56866

Please sign in to comment.