From 7401f4e76412017d87b299c1f30d95a9451fc0c0 Mon Sep 17 00:00:00 2001 From: Brian Clifton Date: Mon, 26 Feb 2018 07:16:12 +0000 Subject: [PATCH] Merge pull request #13285 from NejcZdovc/hotfix/#13281-image Fixes favicons fetch --- app/browser/api/ledger.js | 76 +++- app/browser/reducers/ledgerReducer.js | 4 +- app/common/state/ledgerState.js | 26 -- package-lock.json | 328 ++++++++---------- package.json | 2 +- test/unit/app/browser/api/ledgerTest.js | 233 +++++++++++++ test/unit/app/common/state/ledgerStateTest.js | 53 --- 7 files changed, 439 insertions(+), 283 deletions(-) diff --git a/app/browser/api/ledger.js b/app/browser/api/ledger.js index d5efc5b15c2..40e0bcbe1be 100644 --- a/app/browser/api/ledger.js +++ b/app/browser/api/ledger.js @@ -850,6 +850,17 @@ const addNewLocation = (state, location, tabId = tabState.TAB_ID_NONE, keepInfo return state } +const onFavIconReceived = (state, publisherKey, blob) => { + if (publisherKey == null) { + return state + } + + state = ledgerState.setPublishersProp(state, publisherKey, 'faviconURL', blob) + module.exports.savePublisherData(publisherKey, 'faviconURL', blob) + + return state +} + const getFavIcon = (state, publisherKey, page) => { let publisher = ledgerState.getPublisher(state, publisherKey) const protocol = page.get('protocol') @@ -921,7 +932,7 @@ const fetchFavIcon = (publisherKey, url, redirects) => { underscore.keys(fileTypes).forEach((fileType) => { if (matchP) return if ( - prefix.length >= fileTypes[fileType].length || + prefix.length < fileTypes[fileType].length || fileTypes[fileType].compare(prefix, 0, fileTypes[fileType].length) !== 0 ) { return @@ -936,10 +947,6 @@ const fetchFavIcon = (publisherKey, url, redirects) => { } else if (tail > 0 && (tail + 8 >= blob.length)) return appActions.onFavIconReceived(publisherKey, blob) - - if (synopsis.publishers && synopsis.publishers[publisherKey]) { - synopsis.publishers[publisherKey].faviconURL = blob - } }) } @@ -2363,6 +2370,31 @@ const migration = (state) => { return state } +const setPublishersOptions = (state, publishersArray) => { + if (!publishersArray || publishersArray.size === 0) { + return state + } + + publishersArray.forEach(publisherData => { + const publisherKey = publisherData.get('publisherKey') + + if (publisherKey == null) { + return state + } + + for (const data of publisherData) { + const prop = data[0] + const value = data[1] + if (prop !== 'publisherKey') { + state = ledgerState.setPublisherOption(state, publisherKey, prop, value) + module.exports.savePublisherOption(publisherKey, prop, value) + } + } + }) + + return state +} + // for synopsis variable handling only const deleteSynopsisPublisher = (publisherKey) => { delete synopsis.publishers[publisherKey] @@ -2373,15 +2405,31 @@ const saveOptionSynopsis = (prop, value) => { } const savePublisherOption = (publisherKey, prop, value) => { - if (synopsis && synopsis.publishers && synopsis.publishers[publisherKey] && synopsis.publishers[publisherKey].options) { - synopsis.publishers[publisherKey].options[prop] = value + if (!synopsis || !synopsis.publishers || !publisherKey) { + return } + + if (!synopsis.publishers[publisherKey]) { + synopsis.publishers[publisherKey] = {} + } + + if (!synopsis.publishers[publisherKey].options) { + synopsis.publishers[publisherKey].options = {} + } + + synopsis.publishers[publisherKey].options[prop] = value } const savePublisherData = (publisherKey, prop, value) => { - if (synopsis && synopsis.publishers && synopsis.publishers[publisherKey]) { - synopsis.publishers[publisherKey][prop] = value + if (!synopsis || !synopsis.publishers || !publisherKey) { + return + } + + if (!synopsis.publishers[publisherKey]) { + synopsis.publishers[publisherKey] = {} } + + synopsis.publishers[publisherKey][prop] = value } const deleteSynopsis = () => { @@ -2507,10 +2555,10 @@ const onMediaPublisher = (state, mediaKey, response, duration, revisited) => { } } - synopsis.publishers[publisherKey].faviconName = faviconName - synopsis.publishers[publisherKey].faviconURL = faviconURL - synopsis.publishers[publisherKey].publisherURL = publisherURL - synopsis.publishers[publisherKey].providerName = providerName + savePublisherData(publisherKey, 'faviconName', faviconName) + savePublisherData(publisherKey, 'faviconURL', faviconURL) + savePublisherData(publisherKey, 'publisherURL', publisherURL) + savePublisherData(publisherKey, 'providerName', providerName) state = ledgerState.setPublishersProp(state, publisherKey, 'faviconName', faviconName) state = ledgerState.setPublishersProp(state, publisherKey, 'faviconURL', faviconURL) state = ledgerState.setPublishersProp(state, publisherKey, 'publisherURL', publisherURL) @@ -2742,6 +2790,7 @@ const getMethods = () => { deleteSynopsis, normalizePinned, roundToTarget, + onFavIconReceived, savePublisherData, pruneSynopsis, onMediaRequest, @@ -2755,6 +2804,7 @@ const getMethods = () => { onPublisherTimestamp, checkVerifiedStatus, checkReferralActivity, + setPublishersOptions, referralCheck, roundtrip } diff --git a/app/browser/reducers/ledgerReducer.js b/app/browser/reducers/ledgerReducer.js index c75ab61cf57..2f74ff3dee9 100644 --- a/app/browser/reducers/ledgerReducer.js +++ b/app/browser/reducers/ledgerReducer.js @@ -200,7 +200,7 @@ const ledgerReducer = (state, action, immutableAction) => { } case appConstants.APP_ON_FAVICON_RECEIVED: { - state = ledgerState.setPublishersProp(state, action.get('publisherKey'), 'faviconURL', action.get('blob')) + state = ledgerApi.onFavIconReceived(state, action.get('publisherKey'), action.get('blob')) state = ledgerApi.updatePublisherInfo(state) break } @@ -223,7 +223,7 @@ const ledgerReducer = (state, action, immutableAction) => { } case appConstants.APP_ON_PUBLISHERS_OPTION_UPDATE: { - state = ledgerState.setPublishersOption(state, action.get('publishersArray')) + state = ledgerApi.setPublishersOptions(state, action.get('publishersArray')) break } case appConstants.APP_ON_LEDGER_WALLET_CREATE: diff --git a/app/common/state/ledgerState.js b/app/common/state/ledgerState.js index a04600d851f..2392ff24b37 100644 --- a/app/common/state/ledgerState.js +++ b/app/common/state/ledgerState.js @@ -192,32 +192,6 @@ const ledgerState = { return state.setIn(['ledger', 'synopsis', 'publishers', key, 'options', prop], value) }, - setPublishersOption: (state, publishersArray) => { - state = validateState(state) - - if (!publishersArray || publishersArray.size === 0) { - return state - } - - publishersArray.forEach(publisherData => { - const publisherKey = publisherData.get('publisherKey') - - if (publisherKey == null) { - return - } - - for (const data of publisherData) { - const prop = data[0] - const value = data[1] - if (prop !== 'publisherKey') { - state = ledgerState.setPublisherOption(state, publisherKey, prop, value) - } - } - }) - - return state - }, - getPublisherOption: (state, key, prop) => { state = validateState(state) diff --git a/package-lock.json b/package-lock.json index 1d8b33caa2c..244f9d578e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,9 +94,9 @@ } }, "addr-to-ip-port": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/addr-to-ip-port/-/addr-to-ip-port-1.4.2.tgz", - "integrity": "sha1-fkb/Hya3qfXjP9g51XrvYwO0xpI=" + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/addr-to-ip-port/-/addr-to-ip-port-1.4.3.tgz", + "integrity": "sha512-+KHTG8KSAFdKYmLNZp3VnKj94AZ94gDdu2ipAwxNuMmN9vpf5hdsQgk1hNXFqQOXfd+BMHokyDa1GwDAlGAtGQ==" }, "agent-base": { "version": "2.1.1", @@ -125,15 +125,15 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { "co": "4.6.0", - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } }, "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=" }, "align-text": { "version": "0.1.4", @@ -622,9 +622,9 @@ "dev": true }, "ast-types": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.1.tgz", - "integrity": "sha512-BAlXqqeEhVEajhgz7rgerupI8sb695KpCaJ/w4Sb9s2LoUci8sSMhXw93Jp8MsOufWGJOY/P2jpUEVw4RlSzNw==" + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.2.tgz", + "integrity": "sha512-aL+pcOQ+6dpWd0xrUe+Obo2CgdkFvsntkXEmzZKqEN4cR0PStF+1MBuc4V+YZsv4Q36luvyjG7F4lc+wH2bmag==" }, "async": { "version": "2.6.0", @@ -689,7 +689,7 @@ "dev": true, "requires": { "caniuse-db": "1.0.30000810", - "electron-to-chromium": "1.3.33" + "electron-to-chromium": "1.3.34" } }, "chalk": { @@ -1000,9 +1000,9 @@ } }, "babel-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz", - "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.3.tgz", + "integrity": "sha512-PeN29YvOynPMvNk7QCzsHqxpmfXwKAC+uxkiSNFQsmXBBVltzEkVWmv/Ip3tx7yk149dQUwk497bTXNu+DZjLA==", "requires": { "find-cache-dir": "1.0.0", "loader-utils": "1.1.0", @@ -1487,7 +1487,7 @@ "dev": true, "requires": { "caniuse-lite": "1.0.30000810", - "electron-to-chromium": "1.3.33" + "electron-to-chromium": "1.3.34" } } } @@ -1672,7 +1672,7 @@ "requires": { "@ambassify/backoff-strategies": "1.0.0", "bat-balance": "1.0.7", - "bat-publisher": "2.0.9", + "bat-publisher": "2.0.11", "bitgo": "4.20.0", "brave-crypto": "0.0.1", "http-request-signature": "0.0.2", @@ -1698,9 +1698,9 @@ } }, "bat-publisher": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/bat-publisher/-/bat-publisher-2.0.9.tgz", - "integrity": "sha512-SkCuvS6jjTd/diUZFKfvd5pmoabZF5Rssvs2JFuMvNhiaDjLW0A6f8aqTdR8WnZjBEl5WmL/g3QLjHsNtKr30Q==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/bat-publisher/-/bat-publisher-2.0.11.tgz", + "integrity": "sha512-zXYPS208qBOhzWaMPx5hkU96kZuPVgjhqigJy/MtMGavOuKIAW2RgzJES140PM2QHPwTfLsWS5zQhOotNbv65Q==", "requires": { "@ambassify/backoff-strategies": "1.0.0", "async": "2.6.0", @@ -2071,9 +2071,9 @@ } }, "bittorrent-tracker": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/bittorrent-tracker/-/bittorrent-tracker-9.4.0.tgz", - "integrity": "sha512-crjYvkPtIJa+0DELC49AEAAgte+Z9a3DUxssW4he5xmsXltl3A6PnG4YnLcDYexdMM/RSqUSWhArFanU+XnyOw==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/bittorrent-tracker/-/bittorrent-tracker-9.5.0.tgz", + "integrity": "sha512-6zSPhd4eJmKVpd/OJIzeRgYTIDqU2Rqn8lcSdAe3O4SiARphs1UtcJ9J9Qv69sX2DT+A6EhFiP5C5yUDaJGMGA==", "requires": { "bencode": "1.0.0", "bittorrent-peerid": "1.2.0", @@ -2092,12 +2092,12 @@ "run-series": "1.1.4", "safe-buffer": "5.1.1", "simple-get": "2.7.0", - "simple-peer": "8.5.0", + "simple-peer": "9.0.0", "simple-websocket": "7.0.1", "string2compact": "1.2.2", "uniq": "1.0.1", "unordered-array-remove": "1.0.2", - "ws": "4.0.0", + "ws": "4.1.0", "xtend": "4.0.1" }, "dependencies": { @@ -2109,14 +2109,25 @@ "ms": "2.0.0" } }, + "simple-peer": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.0.0.tgz", + "integrity": "sha512-oQEM7S540h7+aOgttTputZ9Nkd5DP9jqMif2fdUvoRGVvjBn5jIeV8CADOULMosRIYaaAXKzkB6G6xUw3MLIXQ==", + "requires": { + "debug": "3.1.0", + "get-browser-rtc": "1.0.2", + "inherits": "2.0.3", + "randombytes": "2.0.6", + "readable-stream": "2.3.4" + } + }, "ws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz", - "integrity": "sha512-QYslsH44bH8O7/W2815u5DpnCpXWpEK44FmaHffNwgJI4JMaSZONgPBTOfrxJ29mXKbXak+LsJ2uAkDTYq2ptQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", "requires": { "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" + "safe-buffer": "5.1.1" } } } @@ -2157,7 +2168,7 @@ "version": "github:brave/bloodhound#03555132b049adcb5a09138aa911acc3b4d3af7c", "requires": { "babel-core": "6.26.0", - "babel-loader": "7.1.2", + "babel-loader": "7.1.3", "es6-promise": "3.3.1", "immutable": "3.8.2", "object-assign": "4.1.1", @@ -2414,7 +2425,7 @@ "snapdragon": "0.8.1", "snapdragon-node": "2.1.1", "split-string": "3.1.0", - "to-regex": "3.0.1" + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -2673,7 +2684,7 @@ "github-from-package": "0.0.0", "minimist": "1.2.0", "mkdirp": "0.5.1", - "node-abi": "2.2.0", + "node-abi": "2.3.0", "noop-logger": "0.1.1", "npmlog": "4.1.2", "os-homedir": "1.0.2", @@ -2919,7 +2930,7 @@ "dev": true, "requires": { "caniuse-db": "1.0.30000810", - "electron-to-chromium": "1.3.33" + "electron-to-chromium": "1.3.34" } } } @@ -3939,9 +3950,9 @@ "integrity": "sha1-p7M7RBn4PUEjIN3pEzoNEASUjXA=" }, "css-loader": { - "version": "0.28.9", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.9.tgz", - "integrity": "sha512-r3dgelMm/mkPz5Y7m9SeiGE46i2VsEU/OYbez+1llfxtv8b2y5/b5StaeEvPK3S5tlNQI+tDW/xDIhKJoZgDtw==", + "version": "0.28.10", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.10.tgz", + "integrity": "sha512-X1IJteKnW9Llmrd+lJ0f7QZHh9Arf+11S7iRcoT2+riig3BK0QaCaOtubAulMK6Itbo08W6d3l8sW21r+Jhp5Q==", "dev": true, "requires": { "babel-code-frame": "6.26.0", @@ -3967,7 +3978,7 @@ "dev": true, "requires": { "caniuse-db": "1.0.30000810", - "electron-to-chromium": "1.3.33" + "electron-to-chromium": "1.3.34" } }, "chalk": { @@ -5277,7 +5288,7 @@ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", "requires": { - "ast-types": "0.11.1", + "ast-types": "0.11.2", "escodegen": "1.9.0", "esprima": "3.1.3" } @@ -5557,7 +5568,7 @@ "integrity": "sha1-QooiOv4DQl0s1tY0f99AxmkDVj0=", "optional": true, "requires": { - "nan": "2.8.0" + "nan": "2.9.2" } }, "duplexer2": { @@ -6243,9 +6254,9 @@ } }, "electron-to-chromium": { - "version": "1.3.33", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz", - "integrity": "sha1-vwBwPWKnxlI4E2V4w1LWxcBCpUU=", + "version": "1.3.34", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz", + "integrity": "sha1-2TSY9AORuwwWpgPYJBuZUUBBV+0=", "dev": true }, "elliptic": { @@ -6595,7 +6606,7 @@ "semver": "5.5.0", "strip-ansi": "4.0.0", "strip-json-comments": "2.0.1", - "table": "4.0.2", + "table": "4.0.3", "text-table": "0.2.0" }, "dependencies": { @@ -6686,9 +6697,9 @@ } }, "eslint-plugin-flowtype": { - "version": "2.45.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.45.0.tgz", - "integrity": "sha512-oUZgzkZOrqxvQvYZnkhojo/XfMhJ4rFy+TVwHTkgh6pNCom9hEzTS9QCeDaya+XP9vUqGopyQq983ExNtg96EA==", + "version": "2.46.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.46.1.tgz", + "integrity": "sha512-GJzxW7QwiIiW0ZA/+nY+N5TuK3es4Uei0D4xuy14dLZBYEFhM6e7c0J1u4+/iwfPqFtkr5a0oSApnSKF4U6KHw==", "dev": true, "requires": { "lodash": "4.17.5" @@ -6949,7 +6960,7 @@ "posix-character-classes": "0.1.1", "regex-not": "1.0.2", "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -7192,7 +7203,7 @@ "fragment-cache": "0.2.1", "regex-not": "1.0.2", "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -7261,9 +7272,9 @@ } }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-future": { "version": "1.0.2", @@ -7469,7 +7480,7 @@ "requires": { "detect-file": "1.0.0", "is-glob": "3.1.0", - "micromatch": "3.1.8", + "micromatch": "3.1.9", "resolve-dir": "1.0.1" } }, @@ -7746,7 +7757,7 @@ "dev": true, "optional": true, "requires": { - "nan": "2.8.0", + "nan": "2.9.2", "node-pre-gyp": "0.6.39" }, "dependencies": { @@ -12022,9 +12033,9 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.8.tgz", - "integrity": "sha512-/XeuOQqYg+B5kwjDWekXseSwGS7CzE0w9Gjo4Cjkf/uFitNh47NrZHAY2vp/oS2YQVfebPIdbEIvgdy+kIcAog==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", "dev": true, "requires": { "arr-diff": "4.0.0", @@ -12039,7 +12050,7 @@ "object.pick": "1.3.0", "regex-not": "1.0.2", "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "to-regex": "3.0.2" } }, "miller-rabin": { @@ -12489,9 +12500,9 @@ } }, "nan": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=" + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", + "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==" }, "nanomatch": { "version": "1.2.9", @@ -12510,7 +12521,7 @@ "object.pick": "1.3.0", "regex-not": "1.0.2", "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "to-regex": "3.0.2" } }, "natives": { @@ -12576,9 +12587,9 @@ } }, "node-abi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.2.0.tgz", - "integrity": "sha512-FqVC0WNNL8fQWQK3GYTESfwZXZKDbSIiEEIvufq7HV6Lj0IDDZRVa4CU/KTA0JVlqY9eTDSuPiC8FS9UfGVuzA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.3.0.tgz", + "integrity": "sha512-zwm6vU3SsVgw3e9fu48JBaRBCJGIvAgysDsqtf5+vEexFE71bEOtaMWb5zr/zODZNzTPtQlqUUpC79k68Hspow==", "requires": { "semver": "5.5.0" } @@ -14940,7 +14951,7 @@ "github-from-package": "0.0.0", "minimist": "1.2.0", "mkdirp": "0.5.1", - "node-abi": "2.2.0", + "node-abi": "2.3.0", "noop-logger": "0.1.1", "npmlog": "4.1.2", "os-homedir": "1.0.2", @@ -15157,7 +15168,7 @@ "create-hash": "1.1.3", "drbg.js": "1.0.1", "elliptic": "6.4.0", - "nan": "2.8.0", + "nan": "2.9.2", "prebuild-install": "2.5.1", "safe-buffer": "5.1.1" } @@ -15549,6 +15560,14 @@ "js-yaml": "3.10.0", "json5": "0.5.1", "lazy-val": "1.0.3" + }, + "dependencies": { + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + } } }, "read-file-stdin": { @@ -16036,9 +16055,9 @@ } }, "ripple-binary-codec": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-0.1.12.tgz", - "integrity": "sha1-MPthqNW/YTAYmWFsb4QuOTCC44U=", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-0.1.13.tgz", + "integrity": "sha1-xolRQFoXpxaVVR54mWb/N22lUuQ=", "requires": { "babel-runtime": "6.26.0", "bn.js": "4.11.8", @@ -16057,7 +16076,7 @@ "bignumber.js": "4.1.0", "create-hash": "1.1.3", "ripple-address-codec": "2.0.1", - "ripple-binary-codec": "0.1.12" + "ripple-binary-codec": "0.1.13" } }, "ripple-keypairs": { @@ -16114,7 +16133,7 @@ "jsonschema": "1.2.2", "lodash": "4.17.5", "ripple-address-codec": "2.0.1", - "ripple-binary-codec": "0.1.12", + "ripple-binary-codec": "0.1.13", "ripple-hashes": "0.3.1", "ripple-keypairs": "0.10.1", "ripple-lib-transactionparser": "0.6.2", @@ -16169,9 +16188,9 @@ "integrity": "sha1-iac93F51ye+KtjIMChYA1qQRebk=" }, "rusha": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/rusha/-/rusha-0.8.12.tgz", - "integrity": "sha1-XYOM4fzosUVnTudx6q1byyV15ks=" + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/rusha/-/rusha-0.8.13.tgz", + "integrity": "sha1-mghOe4YLF7/zAVuSxnpqM2GRUTo=" }, "rx": { "version": "4.1.0", @@ -16276,7 +16295,7 @@ "create-hash": "1.1.3", "drbg.js": "1.0.1", "elliptic": "6.4.0", - "nan": "2.8.0", + "nan": "2.9.2", "prebuild-install": "2.5.1" } }, @@ -16472,7 +16491,7 @@ "integrity": "sha1-aYnxtwpJhwWHajc+LGKs6WqpOZo=", "optional": true, "requires": { - "nan": "2.8.0" + "nan": "2.9.2" } }, "shebang-command": { @@ -16558,7 +16577,7 @@ "resolved": "https://registry.npmjs.org/simple-sha1/-/simple-sha1-2.1.0.tgz", "integrity": "sha1-lCe7lv8SY8wQqEFM7dUaGLkZ6LM=", "requires": { - "rusha": "0.8.12" + "rusha": "0.8.13" } }, "simple-websocket": { @@ -16571,7 +16590,7 @@ "randombytes": "2.0.6", "readable-stream": "2.3.4", "safe-buffer": "5.1.1", - "ws": "4.0.0" + "ws": "4.1.0" }, "dependencies": { "debug": { @@ -16583,13 +16602,12 @@ } }, "ws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz", - "integrity": "sha512-QYslsH44bH8O7/W2815u5DpnCpXWpEK44FmaHffNwgJI4JMaSZONgPBTOfrxJ29mXKbXak+LsJ2uAkDTYq2ptQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", "requires": { "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" + "safe-buffer": "5.1.1" } } } @@ -17607,7 +17625,7 @@ "resolved": "https://registry.npmjs.org/string2compact/-/string2compact-1.2.2.tgz", "integrity": "sha1-Qgs6nuHEaFSRm0oq6sZcQ/pQWXs=", "requires": { - "addr-to-ip-port": "1.4.2", + "addr-to-ip-port": "1.4.3", "ipaddr.js": "1.6.0" } }, @@ -17878,18 +17896,28 @@ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" }, "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", + "ajv": "6.1.1", + "ajv-keywords": "3.1.0", "chalk": "2.3.1", "lodash": "4.17.5", "slice-ansi": "1.0.0", "string-width": "2.1.1" }, "dependencies": { + "ajv": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.1.1.tgz", + "integrity": "sha1-l41Zf7wrfQ5aXD3esUmmgvKr+g4=", + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -18226,91 +18254,15 @@ } }, "to-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", - "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "regex-not": "1.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -18364,7 +18316,7 @@ "integrity": "sha512-UzlkS9UBynp1HdkuNjFfRIKVLG/TyEiKQGkvHDiBV2pzyD0mpB+vn15iqDuNkNXX6qF0OwBVe1eU/PyvI14I0w==", "requires": { "bittorrent-dht": "8.0.1", - "bittorrent-tracker": "9.4.0", + "bittorrent-tracker": "9.5.0", "debug": "3.1.0", "inherits": "2.0.3", "run-parallel": "1.1.7", @@ -18585,9 +18537,9 @@ "optional": true }, "uglifyjs-webpack-plugin": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.0.tgz", - "integrity": "sha512-Bc2NeyTTSJAy2JuKaBpdvWyuySPSPHNcj70KFqu7FhfrfsjPo0Kta9jgAvPrQxnz86mOH1tk4n/I8wvZrXvetA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.2.tgz", + "integrity": "sha512-CG/NvzXfemUAm5Y4Guh5eEaJYHtkG7kKNpXEJHp9QpxsFVB5/qKvYWoMaq4sa99ccZ0hM3MK8vQV9XPZB4357A==", "dev": true, "requires": { "cacache": "10.0.4", @@ -18597,7 +18549,7 @@ "source-map": "0.6.1", "uglify-es": "3.3.9", "webpack-sources": "1.1.0", - "worker-farm": "1.5.2" + "worker-farm": "1.5.4" }, "dependencies": { "ajv": { @@ -18606,17 +18558,11 @@ "integrity": "sha1-l41Zf7wrfQ5aXD3esUmmgvKr+g4=", "dev": true, "requires": { - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } }, - "ajv-keywords": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", - "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", - "dev": true - }, "commander": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", @@ -19678,6 +19624,12 @@ "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==", "dev": true }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -20039,7 +19991,7 @@ "resolved": "https://registry.npmjs.org/webtorrent/-/webtorrent-0.98.23.tgz", "integrity": "sha512-5OA3Mwlc0qUvHaSVasRRSbo2RdSs0yRxxJCTI3ahizxS1VydKbOfwe+6r2/VVP0/DrRZQ8NW6zh55Oqse7IgQA==", "requires": { - "addr-to-ip-port": "1.4.2", + "addr-to-ip-port": "1.4.3", "bitfield": "2.0.0", "bittorrent-dht": "8.0.1", "bittorrent-protocol": "2.3.0", @@ -20262,9 +20214,9 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "worker-farm": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.2.tgz", - "integrity": "sha512-XxiQ9kZN5n6mmnW+mFJ+wXjNNI/Nx4DIdaAKLX1Bn6LYBWlN/zaBhu34DQYPZ1AJobQuu67S2OfDdNSVULvXkQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.4.tgz", + "integrity": "sha512-ITyClEvcfv0ozqJl1vmWFWhvI+OIrkbInYqkEPE50wFPXj8J9Gd3FYf8+CkZJXJJsQBYe+2DvmoK9Zhx5w8W+w==", "dev": true, "requires": { "errno": "0.1.7", diff --git a/package.json b/package.json index d0fa064e375..196361e2f53 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "async": "^2.0.1", "bat-balance": "^1.0.7", "bat-client": "^2.0.11", - "bat-publisher": "^2.0.9", + "bat-publisher": "^2.0.11", "bignumber.js": "^4.0.4", "bloodhound-js": "brave/bloodhound", "clipboard-copy": "^1.0.0", diff --git a/test/unit/app/browser/api/ledgerTest.js b/test/unit/app/browser/api/ledgerTest.js index 54f79f3dcd8..857f5003c0e 100644 --- a/test/unit/app/browser/api/ledgerTest.js +++ b/test/unit/app/browser/api/ledgerTest.js @@ -2430,4 +2430,237 @@ describe('ledger api unit tests', function () { ]).calledOnce) }) }) + + describe('setPublishersOptions', function () { + let savePublisherOptionSpy + + before(function () { + savePublisherOptionSpy = sinon.spy(ledgerApi, 'savePublisherOption') + }) + + afterEach(function () { + savePublisherOptionSpy.reset() + }) + + after(function () { + savePublisherOptionSpy.restore() + }) + + it('null case', function () { + const result = ledgerApi.setPublishersOptions(defaultAppState) + assert(savePublisherOptionSpy.notCalled) + assert.deepEqual(result.toJS(), defaultAppState.toJS()) + }) + + it('publisher list is empty', function () { + const result = ledgerApi.setPublishersOptions(defaultAppState, Immutable.List()) + assert(savePublisherOptionSpy.notCalled) + assert.deepEqual(result.toJS(), defaultAppState.toJS()) + }) + + it('publisher is missing publisherKey', function () { + const result = ledgerApi.setPublishersOptions(defaultAppState, Immutable.fromJS([ + { + verified: true, + verifiedTimestamp: 100 + } + ])) + assert(savePublisherOptionSpy.notCalled) + assert.deepEqual(result.toJS(), defaultAppState.toJS()) + }) + + it('publisher list is ok', function () { + const result = ledgerApi.setPublishersOptions(defaultAppState, Immutable.fromJS([ + { + publisherKey: 'clifton.io', + verified: true, + verifiedTimestamp: 100 + }, + { + publisherKey: 'brianbondy.com', + verified: false, + verifiedTimestamp: 200 + } + ])) + const expectedState = defaultAppState + .setIn(['ledger', 'synopsis', 'publishers'], Immutable.fromJS({ + 'clifton.io': { + options: { + verified: true, + verifiedTimestamp: 100 + } + }, + 'brianbondy.com': { + options: { + verified: false, + verifiedTimestamp: 200 + } + } + })) + + assert(savePublisherOptionSpy.withArgs('clifton.io', 'verified', true).calledOnce) + assert(savePublisherOptionSpy.withArgs('clifton.io', 'verifiedTimestamp', 100).calledOnce) + assert(savePublisherOptionSpy.withArgs('brianbondy.com', 'verified', false).calledOnce) + assert(savePublisherOptionSpy.withArgs('brianbondy.com', 'verifiedTimestamp', 200).calledOnce) + assert.deepEqual(result.toJS(), expectedState.toJS()) + }) + }) + + describe('onFavIconReceived', function () { + let savePublisherDataSpy, setPublishersPropSpy + const publisherKey = 'clifton.io' + const icon = 'blob' + + before(function () { + savePublisherDataSpy = sinon.spy(ledgerApi, 'savePublisherData') + setPublishersPropSpy = sinon.spy(ledgerState, 'setPublishersProp') + }) + + afterEach(function () { + savePublisherDataSpy.reset() + setPublishersPropSpy.reset() + }) + + after(function () { + savePublisherDataSpy.restore() + setPublishersPropSpy.restore() + }) + + it('null case', function () { + const result = ledgerApi.onFavIconReceived(defaultAppState) + assert(savePublisherDataSpy.notCalled) + assert(setPublishersPropSpy.notCalled) + assert.deepEqual(result.toJS(), defaultAppState.toJS()) + }) + + it('icon is saved', function () { + const expectedSate = defaultAppState + .setIn(['ledger', 'synopsis', 'publishers', publisherKey, 'faviconURL'], icon) + const result = ledgerApi.onFavIconReceived(defaultAppState, publisherKey, icon) + assert(setPublishersPropSpy.withArgs(sinon.match.any, publisherKey, 'faviconURL', icon).calledOnce) + assert(savePublisherDataSpy.calledOnce) + assert.deepEqual(result.toJS(), expectedSate.toJS()) + }) + }) + + describe('savePublisherOption', function () { + const expectedSynopsis = { + options: {}, + publishers: { + 'clifton.io': { + options: { + excluded: true + } + } + } + } + + after(() => { + ledgerApi.setSynopsis(undefined) + }) + + it('null case', function () { + ledgerApi.setSynopsis(undefined) + ledgerApi.savePublisherOption() + assert.equal(ledgerApi.getSynopsis(), undefined) + }) + + it('publishers object is missing', function () { + ledgerApi.setSynopsis({ + options: {} + }) + ledgerApi.savePublisherOption('clifton.io', 'excluded', true) + assert.deepEqual(ledgerApi.getSynopsis(), { + options: {} + }) + }) + + it('publisher is missing in the synopsis', function () { + ledgerApi.setSynopsis({ + options: {}, + publishers: {} + }) + ledgerApi.savePublisherOption('clifton.io', 'excluded', true) + assert.deepEqual(ledgerApi.getSynopsis(), expectedSynopsis) + }) + + it('options is missing in the synopsis', function () { + ledgerApi.setSynopsis({ + options: {}, + publishers: { + 'clifton.io': {} + } + }) + ledgerApi.savePublisherOption('clifton.io', 'excluded', true) + assert.deepEqual(ledgerApi.getSynopsis(), expectedSynopsis) + }) + + it('option already exists', function () { + ledgerApi.setSynopsis({ + options: {}, + publishers: { + 'clifton.io': { + options: { + excluded: false + } + } + } + }) + ledgerApi.savePublisherOption('clifton.io', 'excluded', true) + assert.deepEqual(ledgerApi.getSynopsis(), expectedSynopsis) + }) + }) + + describe('savePublisherData', function () { + const expectedSynopsis = { + options: {}, + publishers: { + 'clifton.io': { + faviconURL: 'data' + } + } + } + + after(() => { + ledgerApi.setSynopsis(undefined) + }) + + it('null case', function () { + ledgerApi.setSynopsis(undefined) + ledgerApi.savePublisherData() + assert.equal(ledgerApi.getSynopsis(), undefined) + }) + + it('publishers object is missing', function () { + ledgerApi.setSynopsis({ + options: {} + }) + ledgerApi.savePublisherData('clifton.io', 'faviconURL', 'data') + assert.deepEqual(ledgerApi.getSynopsis(), { + options: {} + }) + }) + + it('publisher is missing in the synopsis', function () { + ledgerApi.setSynopsis({ + options: {}, + publishers: {} + }) + ledgerApi.savePublisherData('clifton.io', 'faviconURL', 'data') + assert.deepEqual(ledgerApi.getSynopsis(), expectedSynopsis) + }) + + it('publisher already exists', function () { + ledgerApi.setSynopsis({ + options: {}, + publishers: { + 'clifton.io': { + faviconURL: 'oldData' + } + } + }) + ledgerApi.savePublisherData('clifton.io', 'faviconURL', 'data') + assert.deepEqual(ledgerApi.getSynopsis(), expectedSynopsis) + }) + }) }) diff --git a/test/unit/app/common/state/ledgerStateTest.js b/test/unit/app/common/state/ledgerStateTest.js index b3a93a60ac3..493a28183a2 100644 --- a/test/unit/app/common/state/ledgerStateTest.js +++ b/test/unit/app/common/state/ledgerStateTest.js @@ -579,57 +579,4 @@ describe('ledgerState unit test', function () { }) }) }) - - describe('setPublishersOption', function () { - it('null case', function () { - const result = ledgerState.setPublishersOption(defaultState) - assert.deepEqual(result.toJS(), defaultState.toJS()) - }) - - it('publisher list is empty', function () { - const result = ledgerState.setPublishersOption(defaultState, Immutable.List()) - assert.deepEqual(result.toJS(), defaultState.toJS()) - }) - - it('publisher is missing publisherKey', function () { - const result = ledgerState.setPublishersOption(defaultState, Immutable.fromJS([ - { - verified: true, - verifiedTimestamp: 100 - } - ])) - assert.deepEqual(result.toJS(), defaultState.toJS()) - }) - - it('publisher list is ok', function () { - const result = ledgerState.setPublishersOption(defaultState, Immutable.fromJS([ - { - publisherKey: 'clifton.io', - verified: true, - verifiedTimestamp: 100 - }, - { - publisherKey: 'brianbondy.com', - verified: false, - verifiedTimestamp: 100 - } - ])) - const expectedState = defaultState - .setIn(['ledger', 'synopsis', 'publishers'], Immutable.fromJS({ - 'clifton.io': { - options: { - verified: true, - verifiedTimestamp: 100 - } - }, - 'brianbondy.com': { - options: { - verified: false, - verifiedTimestamp: 100 - } - } - })) - assert.deepEqual(result.toJS(), expectedState.toJS()) - }) - }) })