From 0ff567df63c242d0d7679db7a7e575af66ad1e75 Mon Sep 17 00:00:00 2001 From: Dominik Henneke Date: Mon, 3 Jan 2022 13:27:24 +0100 Subject: [PATCH 1/2] Only return the approved widget capabilities instead of accepting all requested capabilities --- src/stores/widgets/StopGapWidgetDriver.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/stores/widgets/StopGapWidgetDriver.ts b/src/stores/widgets/StopGapWidgetDriver.ts index 83b7dfb8271..353be33a698 100644 --- a/src/stores/widgets/StopGapWidgetDriver.ts +++ b/src/stores/widgets/StopGapWidgetDriver.ts @@ -34,7 +34,7 @@ import { IContent, IEvent, MatrixEvent } from "matrix-js-sdk/src/models/event"; import { Room } from "matrix-js-sdk/src/models/room"; import { logger } from "matrix-js-sdk/src/logger"; -import { iterableDiff, iterableUnion } from "../../utils/iterables"; +import { iterableDiff } from "../../utils/iterables"; import { MatrixClientPeg } from "../../MatrixClientPeg"; import ActiveRoomObserver from "../../ActiveRoomObserver"; import Modal from "../../Modal"; @@ -131,13 +131,11 @@ export class StopGapWidgetDriver extends WidgetDriver { } } - const allAllowed = new Set(iterableUnion(allowedSoFar, requested)); - if (rememberApproved) { - setRememberedCapabilitiesForWidget(this.forWidget, Array.from(allAllowed)); + setRememberedCapabilitiesForWidget(this.forWidget, Array.from(allowedSoFar)); } - return allAllowed; + return allowedSoFar; } public async sendEvent( From ecf20e7a96deb093310fb6585b6249c38e2cd2e8 Mon Sep 17 00:00:00 2001 From: Dominik Henneke Date: Wed, 5 Jan 2022 09:49:11 +0100 Subject: [PATCH 2/2] Restore the original logic that only keeps accepted permissions if they were requested Signed-off-by: Dominik Henneke --- src/stores/widgets/StopGapWidgetDriver.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/stores/widgets/StopGapWidgetDriver.ts b/src/stores/widgets/StopGapWidgetDriver.ts index 353be33a698..f2f42d5cbfe 100644 --- a/src/stores/widgets/StopGapWidgetDriver.ts +++ b/src/stores/widgets/StopGapWidgetDriver.ts @@ -34,7 +34,7 @@ import { IContent, IEvent, MatrixEvent } from "matrix-js-sdk/src/models/event"; import { Room } from "matrix-js-sdk/src/models/room"; import { logger } from "matrix-js-sdk/src/logger"; -import { iterableDiff } from "../../utils/iterables"; +import { iterableDiff, iterableIntersection } from "../../utils/iterables"; import { MatrixClientPeg } from "../../MatrixClientPeg"; import ActiveRoomObserver from "../../ActiveRoomObserver"; import Modal from "../../Modal"; @@ -131,11 +131,15 @@ export class StopGapWidgetDriver extends WidgetDriver { } } + // discard all previously allowed capabilities if they are not requested + // TODO: this results in an unexpected behavior when this function is called during the capabilities renegotiation of MSC2974 that will be resolved later. + const allAllowed = new Set(iterableIntersection(allowedSoFar, requested)); + if (rememberApproved) { - setRememberedCapabilitiesForWidget(this.forWidget, Array.from(allowedSoFar)); + setRememberedCapabilitiesForWidget(this.forWidget, Array.from(allAllowed)); } - return allowedSoFar; + return allAllowed; } public async sendEvent(