From 53574541c3a480ee3fda37b642d2e8d1e82c5183 Mon Sep 17 00:00:00 2001 From: Robert Swain Date: Mon, 4 Sep 2017 09:31:25 +0200 Subject: [PATCH 1/4] AppTile: Add Jitsi electron screensharing support --- src/components/views/elements/AppTile.js | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index 7436f84f69..5a5e266df8 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -19,6 +19,7 @@ limitations under the License. import url from 'url'; import React from 'react'; import MatrixClientPeg from '../../../MatrixClientPeg'; +import PlatformPeg from '../../../PlatformPeg'; import ScalarAuthClient from '../../../ScalarAuthClient'; import SdkConfig from '../../../SdkConfig'; import Modal from '../../../Modal'; @@ -127,6 +128,30 @@ export default React.createClass({ loading: false, }); }); + window.addEventListener('message', this._onMessage, false); + }, + + componentWillUnmount() { + window.removeEventListener('message', this._onMessage); + }, + + _onMessage(event) { + if (!PlatformPeg.get().isElectron() || this.props.type !== 'jitsi') { + return; + } + if (!event.origin) { + event.origin = event.originalEvent.origin; + } + + if (this.state.widgetUrl.indexOf(event.origin) === -1) { + return; + } + + if (event.data.widgetAction === 'jitsi_iframe_loaded') { + const iframe = this.refs.appFrame.contentWindow + .document.querySelector('iframe[id^="jitsiConferenceFrame"]'); + PlatformPeg.get().setupScreenSharingForIframe(iframe); + } }, _canUserModify: function() { From 7f1d8834a25faed2a691ed0b0fa8d6dd48cd4818 Mon Sep 17 00:00:00 2001 From: Robert Swain Date: Mon, 25 Sep 2017 17:12:37 +0200 Subject: [PATCH 2/4] Add setupScreenSharingForIframe to BasePlatform --- src/BasePlatform.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/BasePlatform.js b/src/BasePlatform.js index 5f8772c7aa..abc9aa0bed 100644 --- a/src/BasePlatform.js +++ b/src/BasePlatform.js @@ -107,6 +107,9 @@ export default class BasePlatform { isElectron(): boolean { return false; } + setupScreenSharingForIframe() { + } + /** * Restarts the application, without neccessarily reloading * any application code From 6e49926228368f64d650d641298ca4f54204fc2c Mon Sep 17 00:00:00 2001 From: Robert Swain Date: Mon, 25 Sep 2017 17:13:18 +0200 Subject: [PATCH 3/4] AppTile: Do not test for electron platform The method platform method is instead stubbed on all other platforms. --- src/components/views/elements/AppTile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index 5a5e266df8..2e6a4dab2d 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -136,7 +136,7 @@ export default React.createClass({ }, _onMessage(event) { - if (!PlatformPeg.get().isElectron() || this.props.type !== 'jitsi') { + if (this.props.type !== 'jitsi') { return; } if (!event.origin) { From 24de01e21de03d8abdcc112ea67d43a581c72e5a Mon Sep 17 00:00:00 2001 From: Robert Swain Date: Mon, 25 Sep 2017 17:14:25 +0200 Subject: [PATCH 4/4] AppTile: Test if widgetUrl startsWith instead of has a substring The event origin should be at the beginning of the URL. --- src/components/views/elements/AppTile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index 2e6a4dab2d..f4e4702989 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -143,7 +143,7 @@ export default React.createClass({ event.origin = event.originalEvent.origin; } - if (this.state.widgetUrl.indexOf(event.origin) === -1) { + if (!this.state.widgetUrl.startsWith(event.origin)) { return; }