aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkumavis <kumavis@users.noreply.github.com>2016-08-30 09:27:55 +0800
committerGitHub <noreply@github.com>2016-08-30 09:27:55 +0800
commit791e80988d889a72fee12579fa6525b6b0f15e18 (patch)
treededc156a42acb9419a7eba8decbcad98cc9cb59a
parenta9c738d4d3226f61942641a41c399c75a3e9eb3e (diff)
parentc15eef9425531c86a9016d1cbad9d32f4d12edcd (diff)
downloadtangerine-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.json4
-rw-r--r--app/scripts/chromereload.js6
-rw-r--r--app/scripts/contentscript.js8
-rw-r--r--app/scripts/lib/extension-instance.js15
-rw-r--r--app/scripts/lib/notifications.js3
-rw-r--r--app/scripts/popup.js10
-rw-r--r--gulpfile.js17
-rw-r--r--test/unit/extension-test.js29
-rw-r--r--ui/lib/persistent-form.js12
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({})
}
+