From 6b99f28c7dfd1724c76a0654e979494a95da3c6c Mon Sep 17 00:00:00 2001 From: crisbeto Date: Fri, 24 Nov 2017 21:00:27 +0100 Subject: [PATCH] fix(chip-list): stateChanges stream not being completed Fixes the `stateChanges` subject not being completed, potentially causing a memory leak if the subscribers forget to unsubscribe. --- src/lib/chips/chip-list.spec.ts | 9 +++++++++ src/lib/chips/chip-list.ts | 1 + 2 files changed, 10 insertions(+) diff --git a/src/lib/chips/chip-list.spec.ts b/src/lib/chips/chip-list.spec.ts index 5f006e427acc..e69fc81bff4f 100644 --- a/src/lib/chips/chip-list.spec.ts +++ b/src/lib/chips/chip-list.spec.ts @@ -345,6 +345,15 @@ describe('MatChipList', () => { }); }); + it('should complete the stateChanges stream on destroy', () => { + const spy = jasmine.createSpy('stateChanges complete'); + const subscription = chipListInstance.stateChanges.subscribe(undefined, undefined, spy); + + fixture.destroy(); + expect(spy).toHaveBeenCalled(); + subscription.unsubscribe(); + }); + }); describe('selection logic', () => { diff --git a/src/lib/chips/chip-list.ts b/src/lib/chips/chip-list.ts index c5e0451731a0..1241dac4cc04 100644 --- a/src/lib/chips/chip-list.ts +++ b/src/lib/chips/chip-list.ts @@ -359,6 +359,7 @@ export class MatChipList implements MatFormFieldControl, ControlValueAccess this._changeSubscription.unsubscribe(); } this._dropSubscriptions(); + this.stateChanges.complete(); }