diff --git a/lib/browser/api/touch-bar.js b/lib/browser/api/touch-bar.js index 6220cd70e60c..55228d89313d 100644 --- a/lib/browser/api/touch-bar.js +++ b/lib/browser/api/touch-bar.js @@ -53,6 +53,7 @@ class TouchBar extends EventEmitter { } let hasOtherItemsProxy = false + const idSet = new Set() items.forEach((item) => { if (!(item instanceof TouchBarItem)) { throw new Error('Each item must be an instance of TouchBarItem') @@ -65,6 +66,12 @@ class TouchBar extends EventEmitter { throw new Error('Must only have one OtherItemsProxy per TouchBar') } } + + if (!idSet.has(item.id)) { + idSet.add(item.id) + } else { + throw new Error('Cannot add a single instance of TouchBarItem multiple times in a TouchBar') + } }) // register in separate loop after all items are validated diff --git a/spec-main/api-touch-bar-spec.ts b/spec-main/api-touch-bar-spec.ts index 7092a714beae..a29ec1246150 100644 --- a/spec-main/api-touch-bar-spec.ts +++ b/spec-main/api-touch-bar-spec.ts @@ -39,6 +39,14 @@ describe('TouchBar module', () => { }).to.throw('Must only have one OtherItemsProxy per TouchBar') }) + it('throws an error if the same TouchBarItem is added multiple times', () => { + expect(() => { + const item = new TouchBarLabel({ label: 'Label' }) + const touchBar = new TouchBar({ items: [item, item] }) + touchBar.toString() + }).to.throw('Cannot add a single instance of TouchBarItem multiple times in a TouchBar') + }) + describe('BrowserWindow behavior', () => { let window: BrowserWindow