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

Tab update events should only fire when data has changed #208

Merged
merged 1 commit into from
Jun 7, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion lib/browser/api/extensions.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const {app, BrowserWindow, ipcMain, webContents, session} = require('electron')
const path = require('path')
const browserActions = require('./browser-actions')
const assert = require('assert')
const deepEqual = require('../../common/deep-equal')

// List of currently active background pages by extensionId
var backgroundPages = {}
Expand Down Expand Up @@ -288,7 +289,7 @@ const chromeTabsUpdated = function (tabId) {
let changeInfo = {}

for (var key in tabValue) {
if (tabValue[key] !== oldTabInfo[key]) {
if (!deepEqual(tabValue[key], oldTabInfo[key])) {
changeInfo[key] = tabValue[key]
}
}
Expand Down
27 changes: 27 additions & 0 deletions lib/common/deep-equal.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */

const deepEqual = (x, y) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

did this function come from a library? if it's bespoke might be nice to have unit tests.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no I just wrote it fast but we don't have any test suite at all on muon right now :( We have to fix soon.

if (typeof x !== typeof y) {
return false
}
if (typeof x !== 'object') {
return x === y
}
const xKeys = Object.keys(x)
const yKeys = Object.keys(y)
if (xKeys.length !== yKeys.length) {
return false
}
for (let prop in x) {
if (x.hasOwnProperty(prop)) {
if (!deepEqual(x[prop], y[prop])) {
return false
}
}
}
return true
}

module.exports = deepEqual