/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* global Frame:false uncaughtError:true fakeManyContacts:true fakeFewerContacts:true */ (function() { "use strict"; // Stop the default init functions running to avoid conflicts. document.removeEventListener("DOMContentLoaded", loop.panel.init); document.removeEventListener("DOMContentLoaded", loop.conversation.init); var sharedActions = loop.shared.actions; // 1. Desktop components // 1.1 Panel var AvailabilityDropdown = loop.panel.AvailabilityDropdown; var PanelView = loop.panel.PanelView; var SignInRequestView = loop.panel.SignInRequestView; var ContactDetailsForm = loop.contacts.ContactDetailsForm; var ContactDropdown = loop.contacts.ContactDropdown; var ContactDetail = loop.contacts.ContactDetail; var GettingStartedView = loop.panel.GettingStartedView; // 1.2. Conversation Window var AcceptCallView = loop.conversationViews.AcceptCallView; var DesktopPendingConversationView = loop.conversationViews.PendingConversationView; var OngoingConversationView = loop.conversationViews.OngoingConversationView; var DirectCallFailureView = loop.conversationViews.DirectCallFailureView; var DesktopRoomEditContextView = loop.roomViews.DesktopRoomEditContextView; var RoomFailureView = loop.roomViews.RoomFailureView; var DesktopRoomConversationView = loop.roomViews.DesktopRoomConversationView; // 2. Standalone webapp var HomeView = loop.webapp.HomeView; var UnsupportedBrowserView = loop.webapp.UnsupportedBrowserView; var UnsupportedDeviceView = loop.webapp.UnsupportedDeviceView; var StandaloneRoomView = loop.standaloneRoomViews.StandaloneRoomView; var StandaloneHandleUserAgentView = loop.standaloneRoomViews.StandaloneHandleUserAgentView; // 3. Shared components var ConversationToolbar = loop.shared.views.ConversationToolbar; var FeedbackView = loop.feedbackViews.FeedbackView; var Checkbox = loop.shared.views.Checkbox; var TextChatView = loop.shared.views.chat.TextChatView; // Store constants var ROOM_STATES = loop.store.ROOM_STATES; var CALL_TYPES = loop.shared.utils.CALL_TYPES; var FAILURE_DETAILS = loop.shared.utils.FAILURE_DETAILS; var SCREEN_SHARE_STATES = loop.shared.utils.SCREEN_SHARE_STATES; // Local helpers function returnTrue() { return true; } function returnFalse() { return false; } function noop(){} // We save the visibility change listeners so that we can fake an event // to the panel once we've loaded all the views. var visibilityListeners = []; var rootObject = window; rootObject.document.addEventListener = function(eventName, func) { if (eventName === "visibilitychange") { visibilityListeners.push(func); } window.addEventListener(eventName, func); }; rootObject.document.removeEventListener = function(eventName, func) { if (eventName === "visibilitychange") { var index = visibilityListeners.indexOf(func); visibilityListeners.splice(index, 1); } window.removeEventListener(eventName, func); }; loop.shared.mixins.setRootObject(rootObject); var dispatcher = new loop.Dispatcher(); var MockSDK = function() { dispatcher.register(this, [ "setupStreamElements" ]); }; MockSDK.prototype = { setupStreamElements: function() { // Dummy function to stop warnings. }, sendTextChatMessage: function(actionData) { dispatcher.dispatch(new loop.shared.actions.ReceivedTextChatMessage({ contentType: loop.shared.utils.CHAT_CONTENT_TYPES.TEXT, message: actionData.message, receivedTimestamp: actionData.sentTimestamp })); } }; var mockSDK = new MockSDK(); /** * Every view that uses an activeRoomStore needs its own; if they shared * an active store, they'd interfere with each other. * * @param options * @returns {loop.store.ActiveRoomStore} */ function makeActiveRoomStore(options) { var roomDispatcher = new loop.Dispatcher(); var store = new loop.store.ActiveRoomStore(roomDispatcher, { mozLoop: navigator.mozLoop, sdkDriver: mockSDK }); if (!("remoteVideoEnabled" in options)) { options.remoteVideoEnabled = true; } if (!("mediaConnected" in options)) { options.mediaConnected = true; } store.setStoreState({ mediaConnected: options.mediaConnected, remoteVideoEnabled: options.remoteVideoEnabled, roomName: "A Very Long Conversation Name", roomState: options.roomState, used: !!options.roomUsed, videoMuted: !!options.videoMuted }); store.forcedUpdate = function forcedUpdate(contentWindow) { // Since this is called by setTimeout, we don't want to lose any // exceptions if there's a problem and we need to debug, so... try { // the dimensions here are taken from the poster images that we're // using, since they give the