diff options
author | kumavis <kumavis@users.noreply.github.com> | 2016-08-30 09:27:55 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-30 09:27:55 +0800 |
commit | 791e80988d889a72fee12579fa6525b6b0f15e18 (patch) | |
tree | dedc156a42acb9419a7eba8decbcad98cc9cb59a | |
parent | a9c738d4d3226f61942641a41c399c75a3e9eb3e (diff) | |
parent | c15eef9425531c86a9016d1cbad9d32f4d12edcd (diff) | |
download | tangerine-wallet-browser-791e80988d889a72fee12579fa6525b6b0f15e18.tar tangerine-wallet-browser-791e80988d889a72fee12579fa6525b6b0f15e18.tar.gz tangerine-wallet-browser-791e80988d889a72fee12579fa6525b6b0f15e18.tar.bz2 tangerine-wallet-browser-791e80988d889a72fee12579fa6525b6b0f15e18.tar.lz tangerine-wallet-browser-791e80988d889a72fee12579fa6525b6b0f15e18.tar.xz tangerine-wallet-browser-791e80988d889a72fee12579fa6525b6b0f15e18.tar.zst tangerine-wallet-browser-791e80988d889a72fee12579fa6525b6b0f15e18.zip |
Merge pull request #596 from MetaMask/EdgeCompatibility
Edge compatibility
-rw-r--r-- | app/manifest.json | 4 | ||||
-rw-r--r-- | app/scripts/chromereload.js | 6 | ||||
-rw-r--r-- | app/scripts/contentscript.js | 8 | ||||
-rw-r--r-- | app/scripts/lib/extension-instance.js | 15 | ||||
-rw-r--r-- | app/scripts/lib/notifications.js | 3 | ||||
-rw-r--r-- | app/scripts/popup.js | 10 | ||||
-rw-r--r-- | gulpfile.js | 17 | ||||
-rw-r--r-- | test/unit/extension-test.js | 29 | ||||
-rw-r--r-- | ui/lib/persistent-form.js | 12 |
9 files changed, 76 insertions, 28 deletions
diff --git a/app/manifest.json b/app/manifest.json index 32b7d189e..5444007fa 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -3,6 +3,7 @@ "short_name": "Metamask", "version": "2.10.0", "manifest_version": 2, + "author": "https://metamask.io", "description": "Ethereum Browser Extension", "commands": { "_execute_browser_action": { @@ -28,7 +29,8 @@ "scripts": [ "scripts/chromereload.js", "scripts/background.js" - ] + ], + "persistent": true }, "browser_action": { "default_icon": { diff --git a/app/scripts/chromereload.js b/app/scripts/chromereload.js index 88333ba8a..f0bae403c 100644 --- a/app/scripts/chromereload.js +++ b/app/scripts/chromereload.js @@ -324,13 +324,13 @@ window.LiveReloadOptions = { host: 'localhost' }; this.pluginIdentifiers = {} this.console = this.window.console && this.window.console.log && this.window.console.error ? this.window.location.href.match(/LR-verbose/) ? this.window.console : { log: function () {}, - error: this.window.console.error.bind(this.window.console), + error: console.error, } : { log: function () {}, error: function () {}, } if (!(this.WebSocket = this.window.WebSocket || this.window.MozWebSocket)) { - this.console.error('LiveReload disabled because the browser does not seem to support web sockets') + console.error('LiveReload disabled because the browser does not seem to support web sockets') return } if ('LiveReloadOptions' in window) { @@ -344,7 +344,7 @@ window.LiveReloadOptions = { host: 'localhost' }; } else { this.options = Options.extract(this.window.document) if (!this.options) { - this.console.error('LiveReload disabled because it could not find its own <SCRIPT> tag') + console.error('LiveReload disabled because it could not find its own <SCRIPT> tag') return } } diff --git a/app/scripts/contentscript.js b/app/scripts/contentscript.js index de2cf263b..b3a560c88 100644 --- a/app/scripts/contentscript.js +++ b/app/scripts/contentscript.js @@ -43,20 +43,20 @@ function setupStreams(){ name: 'contentscript', target: 'inpage', }) - pageStream.on('error', console.error.bind(console)) + pageStream.on('error', console.error) var pluginPort = extension.runtime.connect({name: 'contentscript'}) var pluginStream = new PortStream(pluginPort) - pluginStream.on('error', console.error.bind(console)) + pluginStream.on('error', console.error) // forward communication plugin->inpage pageStream.pipe(pluginStream).pipe(pageStream) // connect contentscript->inpage reload stream var mx = ObjectMultiplex() - mx.on('error', console.error.bind(console)) + mx.on('error', console.error) mx.pipe(pageStream) var reloadStream = mx.createStream('reload') - reloadStream.on('error', console.error.bind(console)) + reloadStream.on('error', console.error) // if we lose connection with the plugin, trigger tab refresh pluginStream.on('close', function () { diff --git a/app/scripts/lib/extension-instance.js b/app/scripts/lib/extension-instance.js index 1098130e3..628b62e3f 100644 --- a/app/scripts/lib/extension-instance.js +++ b/app/scripts/lib/extension-instance.js @@ -46,12 +46,23 @@ function Extension () { _this[api] = browser[api] } } catch (e) {} - try { _this.api = browser.extension[api] } catch (e) {} - }) + + try { + if (browser && browser.runtime) { + this.runtime = browser.runtime + } + } catch (e) {} + + try { + if (browser && browser.browserAction) { + this.browserAction = browser.browserAction + } + } catch (e) {} + } module.exports = Extension diff --git a/app/scripts/lib/notifications.js b/app/scripts/lib/notifications.js index dcb946845..432ad0445 100644 --- a/app/scripts/lib/notifications.js +++ b/app/scripts/lib/notifications.js @@ -14,9 +14,10 @@ function show () { return extension.windows.update(popup.id, { focused: true }) } + extension.windows.create({ url: 'notification.html', - type: 'detached_panel', + type: 'popup', focused: true, width: 360, height: 500, diff --git a/app/scripts/popup.js b/app/scripts/popup.js index 90b90a7af..096b56115 100644 --- a/app/scripts/popup.js +++ b/app/scripts/popup.js @@ -74,22 +74,12 @@ function getCurrentDomain (cb) { }) } -function clearNotifications(){ - extension.notifications.getAll(function (object) { - for (let notification in object){ - extension.notifications.clear(notification) - } - }) -} - function setupApp (err, opts) { if (err) { alert(err.stack) throw err } - clearNotifications() - var container = document.getElementById('app-content') MetaMaskUi({ diff --git a/gulpfile.js b/gulpfile.js index aeaf3e674..dac6cce3e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -34,6 +34,7 @@ gulp.task('copy:locales', copyTask({ destinations: [ './dist/firefox/_locales', './dist/chrome/_locales', + './dist/edge/_locales', ] })) gulp.task('copy:images', copyTask({ @@ -41,6 +42,7 @@ gulp.task('copy:images', copyTask({ destinations: [ './dist/firefox/images', './dist/chrome/images', + './dist/edge/images', ], })) gulp.task('copy:fonts', copyTask({ @@ -48,6 +50,7 @@ gulp.task('copy:fonts', copyTask({ destinations: [ './dist/firefox/fonts', './dist/chrome/fonts', + './dist/edge/fonts', ], })) gulp.task('copy:reload', copyTask({ @@ -55,6 +58,7 @@ gulp.task('copy:reload', copyTask({ destinations: [ './dist/firefox/scripts', './dist/chrome/scripts', + './dist/edge/scripts', ], pattern: '/chromereload.js', })) @@ -63,6 +67,7 @@ gulp.task('copy:root', copyTask({ destinations: [ './dist/firefox', './dist/chrome', + './dist/edge', ], pattern: '/*', })) @@ -131,13 +136,18 @@ gulp.task('zip:chrome', () => { return gulp.src('dist/chrome/**') .pipe(zip(`metamask-chrome-${manifest.version}.zip`)) .pipe(gulp.dest('builds')); -}); +}) gulp.task('zip:firefox', () => { return gulp.src('dist/firefox/**') .pipe(zip(`metamask-firefox-${manifest.version}.zip`)) .pipe(gulp.dest('builds')); -}); -gulp.task('zip', gulp.parallel('zip:chrome', 'zip:firefox')) +}) +gulp.task('zip:edge', () => { + return gulp.src('dist/edge/**') + .pipe(zip(`metamask-edge-${manifest.version}.zip`)) + .pipe(gulp.dest('builds')); +}) +gulp.task('zip', gulp.parallel('zip:chrome', 'zip:firefox', 'zip:edge')) // high level tasks @@ -200,6 +210,7 @@ function bundleTask(opts) { .pipe(sourcemaps.write('./')) // writes .map file .pipe(gulp.dest('./dist/firefox/scripts')) .pipe(gulp.dest('./dist/chrome/scripts')) + .pipe(gulp.dest('./dist/edge/scripts')) .pipe(livereload()) ) diff --git a/test/unit/extension-test.js b/test/unit/extension-test.js index 6b695e835..86e1d887a 100644 --- a/test/unit/extension-test.js +++ b/test/unit/extension-test.js @@ -9,6 +9,34 @@ var Extension = require(path.join(__dirname, '..', '..', 'app', 'scripts', 'lib' describe('extension', function() { + describe('extension.getURL', function() { + const desiredResult = 'http://the-desired-result.io' + + describe('in Chrome or Firefox', function() { + GLOBAL.chrome.extension = { + getURL: () => desiredResult + } + + it('returns the desired result', function() { + const extension = new Extension() + const result = extension.extension.getURL() + assert.equal(result, desiredResult) + }) + }) + + describe('in Microsoft Edge', function() { + GLOBAL.browser.extension = { + getURL: () => desiredResult + } + + it('returns the desired result', function() { + const extension = new Extension() + const result = extension.extension.getURL() + assert.equal(result, desiredResult) + }) + }) + }) + describe('with chrome global', function() { let extension @@ -45,4 +73,5 @@ describe('extension', function() { }) }) + }) diff --git a/ui/lib/persistent-form.js b/ui/lib/persistent-form.js index 2fd7600a2..d4dc20b03 100644 --- a/ui/lib/persistent-form.js +++ b/ui/lib/persistent-form.js @@ -14,7 +14,9 @@ inherits(PersistentForm, Component) PersistentForm.prototype.componentDidMount = function () { const fields = document.querySelectorAll('[data-persistent-formid]') const store = this.getPersistentStore() - fields.forEach((field) => { + + for (var i = 0; i < fields.length; i++) { + const field = fields[i] const key = field.getAttribute('data-persistent-formid') const cached = store[key] if (cached !== undefined) { @@ -22,7 +24,7 @@ PersistentForm.prototype.componentDidMount = function () { } field.addEventListener(eventName, this.persistentFieldDidUpdate.bind(this)) - }) + } } PersistentForm.prototype.getPersistentStore = function () { @@ -50,8 +52,10 @@ PersistentForm.prototype.persistentFieldDidUpdate = function (event) { PersistentForm.prototype.componentWillUnmount = function () { const fields = document.querySelectorAll('[data-persistent-formid]') - fields.forEach((field) => { + for (var i = 0; i < fields.length; i++) { + const field = fields[i] field.removeEventListener(eventName, this.persistentFieldDidUpdate.bind(this)) - }) + } this.setPersistentStore({}) } + |