From d8c2e3b1c8160738234eb3ca4d4c47ed3b68942e Mon Sep 17 00:00:00 2001 From: Tao Zhou Date: Wed, 14 Aug 2019 17:41:26 +0200 Subject: [PATCH] Fix duplicate events when revert in polymer 2 Due to event retargetting, in shadow DOM, event will be fired both from the first element and the shadowroot host. Bug: Issue 11322 Change-Id: I52fbc0fac9dfdaf945dce3da0a266bfe58b0bd38 --- .../gr-confirm-delete-item-dialog_test.html | 8 ++++++-- .../gr-confirm-abandon-dialog.js | 2 ++ .../gr-confirm-abandon-dialog_test.html | 11 +++++++++-- .../gr-confirm-cherrypick-conflict-dialog.js | 2 ++ .../gr-confirm-cherrypick-conflict-dialog_test.html | 8 ++++++-- .../gr-confirm-cherrypick-dialog.js | 2 ++ .../gr-confirm-move-dialog/gr-confirm-move-dialog.js | 2 ++ .../gr-confirm-rebase-dialog.js | 2 ++ .../gr-confirm-revert-dialog.js | 2 ++ .../gr-confirm-submit-dialog.js | 2 ++ .../change/gr-download-dialog/gr-download-dialog.js | 1 + .../change/gr-file-list-header/gr-file-list-header.js | 2 ++ .../gr-included-in-dialog/gr-included-in-dialog.js | 1 + .../gr-upload-help-dialog/gr-upload-help-dialog.js | 1 + .../gr-keyboard-shortcuts-dialog.js | 1 + .../elements/core/gr-main-header/gr-main-header.js | 1 + .../gr-confirm-delete-comment-dialog.js | 2 ++ .../app/elements/shared/gr-dialog/gr-dialog.js | 2 ++ 18 files changed, 46 insertions(+), 6 deletions(-) diff --git a/polygerrit-ui/app/elements/admin/gr-confirm-delete-item-dialog/gr-confirm-delete-item-dialog_test.html b/polygerrit-ui/app/elements/admin/gr-confirm-delete-item-dialog/gr-confirm-delete-item-dialog_test.html index cf9e0fad2b..3292cec8f0 100644 --- a/polygerrit-ui/app/elements/admin/gr-confirm-delete-item-dialog/gr-confirm-delete-item-dialog_test.html +++ b/polygerrit-ui/app/elements/admin/gr-confirm-delete-item-dialog/gr-confirm-delete-item-dialog_test.html @@ -51,19 +51,23 @@ limitations under the License. test('_handleConfirmTap', () => { const confirmHandler = sandbox.stub(); element.addEventListener('confirm', confirmHandler); - sandbox.stub(element, '_handleConfirmTap'); + sandbox.spy(element, '_handleConfirmTap'); element.$$('gr-dialog').fire('confirm'); assert.isTrue(confirmHandler.called); + assert.isTrue(confirmHandler.calledOnce); assert.isTrue(element._handleConfirmTap.called); + assert.isTrue(element._handleConfirmTap.calledOnce); }); test('_handleCancelTap', () => { const cancelHandler = sandbox.stub(); element.addEventListener('cancel', cancelHandler); - sandbox.stub(element, '_handleCancelTap'); + sandbox.spy(element, '_handleCancelTap'); element.$$('gr-dialog').fire('cancel'); assert.isTrue(cancelHandler.called); + assert.isTrue(cancelHandler.calledOnce); assert.isTrue(element._handleCancelTap.called); + assert.isTrue(element._handleCancelTap.calledOnce); }); test('_computeItemName function for branches', () => { diff --git a/polygerrit-ui/app/elements/change/gr-confirm-abandon-dialog/gr-confirm-abandon-dialog.js b/polygerrit-ui/app/elements/change/gr-confirm-abandon-dialog/gr-confirm-abandon-dialog.js index 6b7163a743..f83ea8f964 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-abandon-dialog/gr-confirm-abandon-dialog.js +++ b/polygerrit-ui/app/elements/change/gr-confirm-abandon-dialog/gr-confirm-abandon-dialog.js @@ -56,6 +56,7 @@ _handleConfirmTap(e) { e.preventDefault(); + e.stopPropagation(); this._confirm(); }, @@ -65,6 +66,7 @@ _handleCancelTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('cancel', null, {bubbles: false}); }, }); diff --git a/polygerrit-ui/app/elements/change/gr-confirm-abandon-dialog/gr-confirm-abandon-dialog_test.html b/polygerrit-ui/app/elements/change/gr-confirm-abandon-dialog/gr-confirm-abandon-dialog_test.html index 3a3cad63cb..cc4b80ea6a 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-abandon-dialog/gr-confirm-abandon-dialog_test.html +++ b/polygerrit-ui/app/elements/change/gr-confirm-abandon-dialog/gr-confirm-abandon-dialog_test.html @@ -51,19 +51,26 @@ limitations under the License. test('_handleConfirmTap', () => { const confirmHandler = sandbox.stub(); element.addEventListener('confirm', confirmHandler); - sandbox.stub(element, '_confirm'); + sandbox.spy(element, '_handleConfirmTap'); + sandbox.spy(element, '_confirm'); element.$$('gr-dialog').fire('confirm'); assert.isTrue(confirmHandler.called); + assert.isTrue(confirmHandler.calledOnce); + assert.isTrue(element._handleConfirmTap.called); assert.isTrue(element._confirm.called); + assert.isTrue(element._confirm.called); + assert.isTrue(element._confirm.calledOnce); }); test('_handleCancelTap', () => { const cancelHandler = sandbox.stub(); element.addEventListener('cancel', cancelHandler); - sandbox.stub(element, '_handleCancelTap'); + sandbox.spy(element, '_handleCancelTap'); element.$$('gr-dialog').fire('cancel'); assert.isTrue(cancelHandler.called); + assert.isTrue(cancelHandler.calledOnce); assert.isTrue(element._handleCancelTap.called); + assert.isTrue(element._handleCancelTap.calledOnce); }); }); diff --git a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog.js b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog.js index b26842ac72..195027a04e 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog.js +++ b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog.js @@ -39,11 +39,13 @@ _handleConfirmTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('confirm', null, {bubbles: false}); }, _handleCancelTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('cancel', null, {bubbles: false}); }, }); diff --git a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog_test.html b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog_test.html index dbf332ca55..f411de45b5 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog_test.html +++ b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog_test.html @@ -49,19 +49,23 @@ limitations under the License. test('_handleConfirmTap', () => { const confirmHandler = sandbox.stub(); element.addEventListener('confirm', confirmHandler); - sandbox.stub(element, '_handleConfirmTap'); + sandbox.spy(element, '_handleConfirmTap'); element.$$('gr-dialog').fire('confirm'); assert.isTrue(confirmHandler.called); + assert.isTrue(confirmHandler.calledOnce); assert.isTrue(element._handleConfirmTap.called); + assert.isTrue(element._handleConfirmTap.calledOnce); }); test('_handleCancelTap', () => { const cancelHandler = sandbox.stub(); element.addEventListener('cancel', cancelHandler); - sandbox.stub(element, '_handleCancelTap'); + sandbox.spy(element, '_handleCancelTap'); element.$$('gr-dialog').fire('cancel'); assert.isTrue(cancelHandler.called); + assert.isTrue(cancelHandler.calledOnce); assert.isTrue(element._handleCancelTap.called); + assert.isTrue(element._handleCancelTap.calledOnce); }); }); diff --git a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.js b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.js index 2f098de873..61597421a8 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.js +++ b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.js @@ -79,11 +79,13 @@ _handleConfirmTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('confirm', null, {bubbles: false}); }, _handleCancelTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('cancel', null, {bubbles: false}); }, diff --git a/polygerrit-ui/app/elements/change/gr-confirm-move-dialog/gr-confirm-move-dialog.js b/polygerrit-ui/app/elements/change/gr-confirm-move-dialog/gr-confirm-move-dialog.js index 2d3c0e3a81..3636c9e74f 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-move-dialog/gr-confirm-move-dialog.js +++ b/polygerrit-ui/app/elements/change/gr-confirm-move-dialog/gr-confirm-move-dialog.js @@ -53,11 +53,13 @@ _handleConfirmTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('confirm', null, {bubbles: false}); }, _handleCancelTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('cancel', null, {bubbles: false}); }, diff --git a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.js b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.js index 22ce27e5c3..a2fef69893 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.js +++ b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.js @@ -120,6 +120,7 @@ _handleConfirmTap(e) { e.preventDefault(); + e.stopPropagation(); this.dispatchEvent(new CustomEvent('confirm', {detail: {base: this._getSelectedBase()}})); this._text = ''; @@ -127,6 +128,7 @@ _handleCancelTap(e) { e.preventDefault(); + e.stopPropagation(); this.dispatchEvent(new CustomEvent('cancel')); this._text = ''; }, diff --git a/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog.js b/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog.js index f4ad002b24..c064d14957 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog.js +++ b/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog.js @@ -60,11 +60,13 @@ _handleConfirmTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('confirm', null, {bubbles: false}); }, _handleCancelTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('cancel', null, {bubbles: false}); }, }); diff --git a/polygerrit-ui/app/elements/change/gr-confirm-submit-dialog/gr-confirm-submit-dialog.js b/polygerrit-ui/app/elements/change/gr-confirm-submit-dialog/gr-confirm-submit-dialog.js index 93d38df33d..6b4a886c41 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-submit-dialog/gr-confirm-submit-dialog.js +++ b/polygerrit-ui/app/elements/change/gr-confirm-submit-dialog/gr-confirm-submit-dialog.js @@ -56,11 +56,13 @@ _handleConfirmTap(e) { e.preventDefault(); + e.stopPropagation(); this.dispatchEvent(new CustomEvent('confirm', {bubbles: false})); }, _handleCancelTap(e) { e.preventDefault(); + e.stopPropagation(); this.dispatchEvent(new CustomEvent('cancel', {bubbles: false})); }, }); diff --git a/polygerrit-ui/app/elements/change/gr-download-dialog/gr-download-dialog.js b/polygerrit-ui/app/elements/change/gr-download-dialog/gr-download-dialog.js index 63586d04f2..ddac3be829 100644 --- a/polygerrit-ui/app/elements/change/gr-download-dialog/gr-download-dialog.js +++ b/polygerrit-ui/app/elements/change/gr-download-dialog/gr-download-dialog.js @@ -181,6 +181,7 @@ _handleCloseTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('close', null, {bubbles: false}); }, diff --git a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.js b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.js index d6bf92ce95..870be8b917 100644 --- a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.js +++ b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.js @@ -227,6 +227,7 @@ _handleDownloadTap(e) { e.preventDefault(); + e.stopPropagation(); this.dispatchEvent( new CustomEvent('open-download-dialog', {bubbles: false})); }, @@ -249,6 +250,7 @@ _handleUploadTap(e) { e.preventDefault(); + e.stopPropagation(); this.dispatchEvent( new CustomEvent('open-upload-help-dialog', {bubbles: false})); }, diff --git a/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog.js b/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog.js index 4f63626ab5..2b7dcb6abd 100644 --- a/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog.js +++ b/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog.js @@ -88,6 +88,7 @@ _handleCloseTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('close', null, {bubbles: false}); }, diff --git a/polygerrit-ui/app/elements/change/gr-upload-help-dialog/gr-upload-help-dialog.js b/polygerrit-ui/app/elements/change/gr-upload-help-dialog/gr-upload-help-dialog.js index 1c9013e80f..59eb805e70 100644 --- a/polygerrit-ui/app/elements/change/gr-upload-help-dialog/gr-upload-help-dialog.js +++ b/polygerrit-ui/app/elements/change/gr-upload-help-dialog/gr-upload-help-dialog.js @@ -77,6 +77,7 @@ _handleCloseTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('close', null, {bubbles: false}); }, diff --git a/polygerrit-ui/app/elements/core/gr-keyboard-shortcuts-dialog/gr-keyboard-shortcuts-dialog.js b/polygerrit-ui/app/elements/core/gr-keyboard-shortcuts-dialog/gr-keyboard-shortcuts-dialog.js index 4ecbfb36b6..391ec9286e 100644 --- a/polygerrit-ui/app/elements/core/gr-keyboard-shortcuts-dialog/gr-keyboard-shortcuts-dialog.js +++ b/polygerrit-ui/app/elements/core/gr-keyboard-shortcuts-dialog/gr-keyboard-shortcuts-dialog.js @@ -71,6 +71,7 @@ _handleCloseTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('close', null, {bubbles: false}); }, diff --git a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js index 50ba9d0bdc..661cd21f9d 100644 --- a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js +++ b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js @@ -330,6 +330,7 @@ _onMobileSearchTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('mobile-search', null, {bubbles: false}); }, diff --git a/polygerrit-ui/app/elements/shared/gr-confirm-delete-comment-dialog/gr-confirm-delete-comment-dialog.js b/polygerrit-ui/app/elements/shared/gr-confirm-delete-comment-dialog/gr-confirm-delete-comment-dialog.js index 9f5f243657..b441ba84e1 100644 --- a/polygerrit-ui/app/elements/shared/gr-confirm-delete-comment-dialog/gr-confirm-delete-comment-dialog.js +++ b/polygerrit-ui/app/elements/shared/gr-confirm-delete-comment-dialog/gr-confirm-delete-comment-dialog.js @@ -47,11 +47,13 @@ _handleConfirmTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('confirm', {reason: this.message}, {bubbles: false}); }, _handleCancelTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('cancel', null, {bubbles: false}); }, }); diff --git a/polygerrit-ui/app/elements/shared/gr-dialog/gr-dialog.js b/polygerrit-ui/app/elements/shared/gr-dialog/gr-dialog.js index 065ee84165..e0a1947e5c 100644 --- a/polygerrit-ui/app/elements/shared/gr-dialog/gr-dialog.js +++ b/polygerrit-ui/app/elements/shared/gr-dialog/gr-dialog.js @@ -65,11 +65,13 @@ if (this.disabled) { return; } e.preventDefault(); + e.stopPropagation(); this.fire('confirm', null, {bubbles: false}); }, _handleCancelTap(e) { e.preventDefault(); + e.stopPropagation(); this.fire('cancel', null, {bubbles: false}); },