From 12dda7acb9b40b50bb959be0606a3bd0ee02965f Mon Sep 17 00:00:00 2001 From: hristoterezov Date: Sat, 16 Jun 2018 21:28:03 -0500 Subject: [PATCH] fix(deep-linking): GUM when the deep linking page have been displayed. --- react/features/deep-linking/functions.js | 47 +++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/react/features/deep-linking/functions.js b/react/features/deep-linking/functions.js index 5f4f32abd..0ff3c4bb4 100644 --- a/react/features/deep-linking/functions.js +++ b/react/features/deep-linking/functions.js @@ -11,6 +11,44 @@ import { import { _shouldShowDeepLinkingDesktopPage } from './shouldShowDeepLinkingDesktopPage'; +/** + * Indicates whether the window load event was already received. + * + * @type {boolean} + */ +let windowIsLoaded = false; + +/** + * Handler for the window load event. + * + * @returns {void} + */ +function onWindowLoad() { + windowIsLoaded = true; + window.removeEventListener('load', onWindowLoad); +} + +window.addEventListener('load', onWindowLoad); + +/** + * Executes the passed function after the window load event was received. + * + * @param {Function} fn - The function that will be executed. + * @returns {void} + */ +function executeAfterWindowLoad(fn) { + if (windowIsLoaded) { + fn(); + } else { + const loadHandler = () => { + fn(); + window.removeEventListener('load', loadHandler); + }; + + window.addEventListener('load', loadHandler); + } +} + /** * Generates a deep linking URL based on the current window URL. * @@ -76,5 +114,12 @@ export function getDeepLinkingPage(state) { * @returns {void} */ export function openDesktopApp() { - window.location.href = generateDeepLinkingURL(); + executeAfterWindowLoad(() => { + // If the code for opening the deep link is executed before the window + // load event, something with the internal chrome state goes wrong. The + // result is that no window load event is received which is the cause + // for some permission prompts to not be displayed. In our case the GUM + // prompt wasn't displayed which causes the GUM call to never finish. + window.location.href = generateDeepLinkingURL(); + }); }