зеркало из https://github.com/mozilla/gecko-dev.git
Merge m-c to m-i
This commit is contained in:
Коммит
1f21ae9b68
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="373c9ddb916631facbae3d6f70fb82f3ff501411"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="fea83511df9ccba64259346bc02ebf2c417a12c2"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e85143db5d5f6edc4c2b97263c02b558fee757e"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="373c9ddb916631facbae3d6f70fb82f3ff501411"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="fea83511df9ccba64259346bc02ebf2c417a12c2"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e85143db5d5f6edc4c2b97263c02b558fee757e"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="93f9ba577f68d772093987c2f1c0a4ae293e1802"/>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="373c9ddb916631facbae3d6f70fb82f3ff501411"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="fea83511df9ccba64259346bc02ebf2c417a12c2"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e85143db5d5f6edc4c2b97263c02b558fee757e"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="c42985975f2bbc42859b9136ed348186d989b93d"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="86bd499afd662d5320a675f5da97656c742299c4"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="373c9ddb916631facbae3d6f70fb82f3ff501411"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="fea83511df9ccba64259346bc02ebf2c417a12c2"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e85143db5d5f6edc4c2b97263c02b558fee757e"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="52775e03a2d8532429dff579cb2cd56718e488c3">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="373c9ddb916631facbae3d6f70fb82f3ff501411"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="fea83511df9ccba64259346bc02ebf2c417a12c2"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e85143db5d5f6edc4c2b97263c02b558fee757e"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="373c9ddb916631facbae3d6f70fb82f3ff501411"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="fea83511df9ccba64259346bc02ebf2c417a12c2"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e85143db5d5f6edc4c2b97263c02b558fee757e"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="93f9ba577f68d772093987c2f1c0a4ae293e1802"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="373c9ddb916631facbae3d6f70fb82f3ff501411"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="fea83511df9ccba64259346bc02ebf2c417a12c2"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e85143db5d5f6edc4c2b97263c02b558fee757e"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</project>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="373c9ddb916631facbae3d6f70fb82f3ff501411"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="fea83511df9ccba64259346bc02ebf2c417a12c2"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e85143db5d5f6edc4c2b97263c02b558fee757e"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="c42985975f2bbc42859b9136ed348186d989b93d"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="86bd499afd662d5320a675f5da97656c742299c4"/>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"git": {
|
||||
"git_revision": "373c9ddb916631facbae3d6f70fb82f3ff501411",
|
||||
"git_revision": "fea83511df9ccba64259346bc02ebf2c417a12c2",
|
||||
"remote": "https://git.mozilla.org/releases/gaia.git",
|
||||
"branch": ""
|
||||
},
|
||||
"revision": "c7db5bba15e070f4068e46914193cd98ac6ae91f",
|
||||
"revision": "4b6bb4cbe4e23651f258584586c4185872d1da01",
|
||||
"repo_path": "integration/gaia-central"
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="373c9ddb916631facbae3d6f70fb82f3ff501411"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="fea83511df9ccba64259346bc02ebf2c417a12c2"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e85143db5d5f6edc4c2b97263c02b558fee757e"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="c42985975f2bbc42859b9136ed348186d989b93d"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="86bd499afd662d5320a675f5da97656c742299c4"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="52775e03a2d8532429dff579cb2cd56718e488c3">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="373c9ddb916631facbae3d6f70fb82f3ff501411"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="fea83511df9ccba64259346bc02ebf2c417a12c2"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e85143db5d5f6edc4c2b97263c02b558fee757e"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
|
|
@ -118,6 +118,7 @@ loop.conversation = (function(mozL10n) {
|
|||
var dispatcher = new loop.Dispatcher();
|
||||
var client = new loop.Client();
|
||||
var sdkDriver = new loop.OTSdkDriver({
|
||||
isDesktop: true,
|
||||
dispatcher: dispatcher,
|
||||
sdk: OT
|
||||
});
|
||||
|
@ -137,10 +138,12 @@ loop.conversation = (function(mozL10n) {
|
|||
});
|
||||
var conversationStore = new loop.store.ConversationStore(dispatcher, {
|
||||
client: client,
|
||||
isDesktop: true,
|
||||
mozLoop: navigator.mozLoop,
|
||||
sdkDriver: sdkDriver
|
||||
});
|
||||
var activeRoomStore = new loop.store.ActiveRoomStore(dispatcher, {
|
||||
isDesktop: true,
|
||||
mozLoop: navigator.mozLoop,
|
||||
sdkDriver: sdkDriver
|
||||
});
|
||||
|
|
|
@ -118,6 +118,7 @@ loop.conversation = (function(mozL10n) {
|
|||
var dispatcher = new loop.Dispatcher();
|
||||
var client = new loop.Client();
|
||||
var sdkDriver = new loop.OTSdkDriver({
|
||||
isDesktop: true,
|
||||
dispatcher: dispatcher,
|
||||
sdk: OT
|
||||
});
|
||||
|
@ -137,10 +138,12 @@ loop.conversation = (function(mozL10n) {
|
|||
});
|
||||
var conversationStore = new loop.store.ConversationStore(dispatcher, {
|
||||
client: client,
|
||||
isDesktop: true,
|
||||
mozLoop: navigator.mozLoop,
|
||||
sdkDriver: sdkDriver
|
||||
});
|
||||
var activeRoomStore = new loop.store.ActiveRoomStore(dispatcher, {
|
||||
isDesktop: true,
|
||||
mozLoop: navigator.mozLoop,
|
||||
sdkDriver: sdkDriver
|
||||
});
|
||||
|
|
|
@ -55,6 +55,8 @@ loop.store.ActiveRoomStore = (function() {
|
|||
throw new Error("Missing option sdkDriver");
|
||||
}
|
||||
this._sdkDriver = options.sdkDriver;
|
||||
|
||||
this._isDesktop = options.isDesktop || false;
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -356,6 +358,21 @@ loop.store.ActiveRoomStore = (function() {
|
|||
* @param {sharedActions.ConnectionFailure} actionData
|
||||
*/
|
||||
connectionFailure: function(actionData) {
|
||||
/**
|
||||
* XXX This is a workaround for desktop machines that do not have a
|
||||
* camera installed. As we don't yet have device enumeration, when
|
||||
* we do, this can be removed (bug 1138851), and the sdk should handle it.
|
||||
*/
|
||||
if (this._isDesktop &&
|
||||
actionData.reason === FAILURE_DETAILS.UNABLE_TO_PUBLISH_MEDIA &&
|
||||
this.getStoreState().videoMuted === false) {
|
||||
// We failed to publish with media, so due to the bug, we try again without
|
||||
// video.
|
||||
this.setStoreState({videoMuted: true});
|
||||
this._sdkDriver.retryPublishWithoutVideo();
|
||||
return;
|
||||
}
|
||||
|
||||
// Treat all reasons as something failed. In theory, clientDisconnected
|
||||
// could be a success case, but there's no way we should be intentionally
|
||||
// sending that and still have the window open.
|
||||
|
|
|
@ -10,8 +10,9 @@ loop.store = loop.store || {};
|
|||
(function() {
|
||||
var sharedActions = loop.shared.actions;
|
||||
var CALL_TYPES = loop.shared.utils.CALL_TYPES;
|
||||
|
||||
var REST_ERRNOS = loop.shared.utils.REST_ERRNOS;
|
||||
var FAILURE_DETAILS = loop.shared.utils.FAILURE_DETAILS;
|
||||
|
||||
/**
|
||||
* Websocket states taken from:
|
||||
* https://docs.services.mozilla.com/loop/apis.html#call-progress-state-change-progress
|
||||
|
@ -132,6 +133,7 @@ loop.store = loop.store || {};
|
|||
this.client = options.client;
|
||||
this.sdkDriver = options.sdkDriver;
|
||||
this.mozLoop = options.mozLoop;
|
||||
this._isDesktop = options.isDesktop || false;
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -141,6 +143,21 @@ loop.store = loop.store || {};
|
|||
* @param {sharedActions.ConnectionFailure} actionData The action data.
|
||||
*/
|
||||
connectionFailure: function(actionData) {
|
||||
/**
|
||||
* XXX This is a workaround for desktop machines that do not have a
|
||||
* camera installed. As we don't yet have device enumeration, when
|
||||
* we do, this can be removed (bug 1138851), and the sdk should handle it.
|
||||
*/
|
||||
if (this._isDesktop &&
|
||||
actionData.reason === FAILURE_DETAILS.UNABLE_TO_PUBLISH_MEDIA &&
|
||||
this.getStoreState().videoMuted === false) {
|
||||
// We failed to publish with media, so due to the bug, we try again without
|
||||
// video.
|
||||
this.setStoreState({videoMuted: true});
|
||||
this.sdkDriver.retryPublishWithoutVideo();
|
||||
return;
|
||||
}
|
||||
|
||||
this._endSession();
|
||||
this.setStoreState({
|
||||
callState: CALL_STATES.TERMINATED,
|
||||
|
|
|
@ -33,6 +33,21 @@ loop.OTSdkDriver = (function() {
|
|||
"setupStreamElements",
|
||||
"setMute"
|
||||
]);
|
||||
|
||||
/**
|
||||
* XXX This is a workaround for desktop machines that do not have a
|
||||
* camera installed. As we don't yet have device enumeration, when
|
||||
* we do, this can be removed (bug 1138851), and the sdk should handle it.
|
||||
*/
|
||||
if ("isDesktop" in options && options.isDesktop &&
|
||||
!window.MediaStreamTrack.getSources) {
|
||||
// If there's no getSources function, the sdk defines its own and caches
|
||||
// the result. So here we define the "normal" one which doesn't get cached, so
|
||||
// we can change it later.
|
||||
window.MediaStreamTrack.getSources = function(callback) {
|
||||
callback([{kind: "audio"}, {kind: "video"}]);
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
OTSdkDriver.prototype = {
|
||||
|
@ -57,9 +72,19 @@ loop.OTSdkDriver = (function() {
|
|||
this.getRemoteElement = actionData.getRemoteElementFunc;
|
||||
this.publisherConfig = actionData.publisherConfig;
|
||||
|
||||
this.sdk.on("exception", this._onOTException.bind(this));
|
||||
|
||||
// At this state we init the publisher, even though we might be waiting for
|
||||
// the initial connect of the session. This saves time when setting up
|
||||
// the media.
|
||||
this._publishLocalStreams();
|
||||
},
|
||||
|
||||
/**
|
||||
* Internal function to publish a local stream.
|
||||
* XXX This can be simplified when bug 1138851 is actioned.
|
||||
*/
|
||||
_publishLocalStreams: function() {
|
||||
this.publisher = this.sdk.initPublisher(this.getLocalElement(),
|
||||
this._getCopyPublisherConfig());
|
||||
this.publisher.on("streamCreated", this._onLocalStreamCreated.bind(this));
|
||||
|
@ -69,6 +94,17 @@ loop.OTSdkDriver = (function() {
|
|||
this._onAccessDialogOpened.bind(this));
|
||||
},
|
||||
|
||||
/**
|
||||
* Forces the sdk into not using video, and starts publishing again.
|
||||
* XXX This is part of the work around that will be removed by bug 1138851.
|
||||
*/
|
||||
retryPublishWithoutVideo: function() {
|
||||
window.MediaStreamTrack.getSources = function(callback) {
|
||||
callback([{kind: "audio"}]);
|
||||
};
|
||||
this._publishLocalStreams();
|
||||
},
|
||||
|
||||
/**
|
||||
* Handles the setMute action. Informs the published stream to mute
|
||||
* or unmute audio as appropriate.
|
||||
|
@ -436,6 +472,22 @@ loop.OTSdkDriver = (function() {
|
|||
}));
|
||||
},
|
||||
|
||||
_onOTException: function(event) {
|
||||
if (event.code === OT.ExceptionCodes.UNABLE_TO_PUBLISH &&
|
||||
event.message === "GetUserMedia") {
|
||||
// We free up the publisher here in case the store wants to try
|
||||
// grabbing the media again.
|
||||
if (this.publisher) {
|
||||
this.publisher.off("accessAllowed accessDenied accessDialogOpened streamCreated");
|
||||
this.publisher.destroy();
|
||||
delete this.publisher;
|
||||
}
|
||||
this.dispatcher.dispatch(new sharedActions.ConnectionFailure({
|
||||
reason: FAILURE_DETAILS.UNABLE_TO_PUBLISH_MEDIA
|
||||
}));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Handles publishing of property changes to a stream.
|
||||
*/
|
||||
|
|
|
@ -36,6 +36,7 @@ loop.shared.utils = (function(mozL10n) {
|
|||
|
||||
var FAILURE_DETAILS = {
|
||||
MEDIA_DENIED: "reason-media-denied",
|
||||
UNABLE_TO_PUBLISH_MEDIA: "unable-to-publish-media",
|
||||
COULD_NOT_CONNECT: "reason-could-not-connect",
|
||||
NETWORK_DISCONNECTED: "reason-network-disconnected",
|
||||
EXPIRED_OR_INVALID: "reason-expired-or-invalid",
|
||||
|
|
|
@ -41,6 +41,7 @@ describe("loop.store.ActiveRoomStore", function () {
|
|||
connectSession: sinon.stub(),
|
||||
disconnectSession: sinon.stub(),
|
||||
forceDisconnectAll: sinon.stub().callsArg(0),
|
||||
retryPublishWithoutVideo: sinon.stub(),
|
||||
startScreenShare: sinon.stub(),
|
||||
switchAcquiredWindow: sinon.stub(),
|
||||
endScreenShare: sinon.stub().returns(true)
|
||||
|
@ -609,6 +610,26 @@ describe("loop.store.ActiveRoomStore", function () {
|
|||
});
|
||||
});
|
||||
|
||||
it("should retry publishing if on desktop, and in the videoMuted state", function() {
|
||||
store._isDesktop = true;
|
||||
|
||||
store.connectionFailure(new sharedActions.ConnectionFailure({
|
||||
reason: FAILURE_DETAILS.UNABLE_TO_PUBLISH_MEDIA
|
||||
}));
|
||||
|
||||
sinon.assert.calledOnce(fakeSdkDriver.retryPublishWithoutVideo);
|
||||
});
|
||||
|
||||
it("should set videoMuted to try when retrying publishing", function() {
|
||||
store._isDesktop = true;
|
||||
|
||||
store.connectionFailure(new sharedActions.ConnectionFailure({
|
||||
reason: FAILURE_DETAILS.UNABLE_TO_PUBLISH_MEDIA
|
||||
}));
|
||||
|
||||
expect(store.getStoreState().videoMuted).eql(true);
|
||||
});
|
||||
|
||||
it("should store the failure reason", function() {
|
||||
store.connectionFailure(connectionFailureAction);
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ describe("loop.store.ConversationStore", function () {
|
|||
var CALL_STATES = loop.store.CALL_STATES;
|
||||
var WS_STATES = loop.store.WS_STATES;
|
||||
var WEBSOCKET_REASONS = loop.shared.utils.WEBSOCKET_REASONS;
|
||||
var FAILURE_DETAILS = loop.shared.utils.FAILURE_DETAILS;
|
||||
var sharedActions = loop.shared.actions;
|
||||
var sharedUtils = loop.shared.utils;
|
||||
var sandbox, dispatcher, client, store, fakeSessionData, sdkDriver;
|
||||
|
@ -56,7 +57,8 @@ describe("loop.store.ConversationStore", function () {
|
|||
};
|
||||
sdkDriver = {
|
||||
connectSession: sinon.stub(),
|
||||
disconnectSession: sinon.stub()
|
||||
disconnectSession: sinon.stub(),
|
||||
retryPublishWithoutVideo: sinon.stub()
|
||||
};
|
||||
|
||||
wsCancelSpy = sinon.spy();
|
||||
|
@ -135,6 +137,26 @@ describe("loop.store.ConversationStore", function () {
|
|||
store.setStoreState({windowId: "42"});
|
||||
});
|
||||
|
||||
it("should retry publishing if on desktop, and in the videoMuted state", function() {
|
||||
store._isDesktop = true;
|
||||
|
||||
store.connectionFailure(new sharedActions.ConnectionFailure({
|
||||
reason: FAILURE_DETAILS.UNABLE_TO_PUBLISH_MEDIA
|
||||
}));
|
||||
|
||||
sinon.assert.calledOnce(sdkDriver.retryPublishWithoutVideo);
|
||||
});
|
||||
|
||||
it("should set videoMuted to try when retrying publishing", function() {
|
||||
store._isDesktop = true;
|
||||
|
||||
store.connectionFailure(new sharedActions.ConnectionFailure({
|
||||
reason: FAILURE_DETAILS.UNABLE_TO_PUBLISH_MEDIA
|
||||
}));
|
||||
|
||||
expect(store.getStoreState().videoMuted).eql(true);
|
||||
});
|
||||
|
||||
it("should disconnect the session", function() {
|
||||
store.connectionFailure(
|
||||
new sharedActions.ConnectionFailure({reason: "fake"}));
|
||||
|
|
|
@ -10,6 +10,7 @@ describe("loop.OTSdkDriver", function () {
|
|||
var FAILURE_DETAILS = loop.shared.utils.FAILURE_DETAILS;
|
||||
var STREAM_PROPERTIES = loop.shared.utils.STREAM_PROPERTIES;
|
||||
var SCREEN_SHARE_STATES = loop.shared.utils.SCREEN_SHARE_STATES;
|
||||
|
||||
var sandbox;
|
||||
var dispatcher, driver, publisher, sdk, session, sessionData;
|
||||
var fakeLocalElement, fakeRemoteElement, fakeScreenElement;
|
||||
|
@ -52,9 +53,15 @@ describe("loop.OTSdkDriver", function () {
|
|||
}
|
||||
}, Backbone.Events);
|
||||
|
||||
sdk = {
|
||||
sdk = _.extend({
|
||||
initPublisher: sinon.stub().returns(publisher),
|
||||
initSession: sinon.stub().returns(session)
|
||||
}, Backbone.Events);
|
||||
|
||||
window.OT = {
|
||||
ExceptionCodes: {
|
||||
UNABLE_TO_PUBLISH: 1500
|
||||
}
|
||||
};
|
||||
|
||||
driver = new loop.OTSdkDriver({
|
||||
|
@ -94,6 +101,37 @@ describe("loop.OTSdkDriver", function () {
|
|||
});
|
||||
});
|
||||
|
||||
describe("#retryPublishWithoutVideo", function() {
|
||||
beforeEach(function() {
|
||||
sdk.initPublisher.returns(publisher);
|
||||
|
||||
driver.setupStreamElements(new sharedActions.SetupStreamElements({
|
||||
getLocalElementFunc: function() {return fakeLocalElement;},
|
||||
getRemoteElementFunc: function() {return fakeRemoteElement;},
|
||||
publisherConfig: publisherConfig
|
||||
}));
|
||||
});
|
||||
|
||||
it("should make MediaStreamTrack.getSources return without a video source", function(done) {
|
||||
driver.retryPublishWithoutVideo();
|
||||
|
||||
window.MediaStreamTrack.getSources(function(sources) {
|
||||
expect(sources.some(function(src) {
|
||||
return src.kind === "video";
|
||||
})).eql(false);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it("should call initPublisher", function() {
|
||||
driver.retryPublishWithoutVideo();
|
||||
|
||||
sinon.assert.calledTwice(sdk.initPublisher);
|
||||
sinon.assert.calledWith(sdk.initPublisher, fakeLocalElement, publisherConfig);
|
||||
});
|
||||
});
|
||||
|
||||
describe("#setMute", function() {
|
||||
beforeEach(function() {
|
||||
sdk.initPublisher.returns(publisher);
|
||||
|
@ -627,6 +665,32 @@ describe("loop.OTSdkDriver", function () {
|
|||
sinon.assert.calledOnce(fakeEvent.preventDefault);
|
||||
});
|
||||
});
|
||||
|
||||
describe("exception", function() {
|
||||
describe("Unable to publish (GetUserMedia)", function() {
|
||||
it("should destroy the publisher", function() {
|
||||
sdk.trigger("exception", {
|
||||
code: OT.ExceptionCodes.UNABLE_TO_PUBLISH,
|
||||
message: "GetUserMedia"
|
||||
});
|
||||
|
||||
sinon.assert.calledOnce(publisher.destroy);
|
||||
});
|
||||
|
||||
it("should dispatch a ConnectionFailure action", function() {
|
||||
sdk.trigger("exception", {
|
||||
code: OT.ExceptionCodes.UNABLE_TO_PUBLISH,
|
||||
message: "GetUserMedia"
|
||||
});
|
||||
|
||||
sinon.assert.calledOnce(dispatcher.dispatch);
|
||||
sinon.assert.calledWithExactly(dispatcher.dispatch,
|
||||
new sharedActions.ConnectionFailure({
|
||||
reason: FAILURE_DETAILS.UNABLE_TO_PUBLISH_MEDIA
|
||||
}));
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("Events (screenshare)", function() {
|
||||
|
|
|
@ -42,9 +42,9 @@ function spawnTest () {
|
|||
let firstInterval = OverviewView.getTimeInterval();
|
||||
info("First interval start time: " + firstInterval.startTime);
|
||||
info("First interval end time: " + firstInterval.endTime);
|
||||
ok(firstInterval.startTime - 10 < Number.EPSILON,
|
||||
is(Math.round(firstInterval.startTime), 10,
|
||||
"The interval's start time was properly set.");
|
||||
ok(firstInterval.endTime - 20 < Number.EPSILON,
|
||||
is(Math.round(firstInterval.endTime), 20,
|
||||
"The interval's end time was properly set.");
|
||||
|
||||
// Get/set another time interval and make sure there's no event propagation.
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
== min-height-1.html min-height-1-ref.html
|
||||
== max-width-1.html max-width-1-ref.html
|
||||
== max-height-1.html max-height-1-ref.html
|
||||
# bug 1019840 skip width-special-values-image & width-special-values-block on b2g
|
||||
# due to a race condition in imgRequestProxyCode
|
||||
# bug 1019840 skip width-special-values-image, width-special-values-block,
|
||||
# width-special-values-image-block on b2g due to a race condition in imgRequestProxyCode
|
||||
skip-if(B2G) == width-special-values-block.html width-special-values-block-ref.html
|
||||
== width-special-values-float.html width-special-values-block-ref.html
|
||||
== width-special-values-image-block.html width-special-values-image-block-ref.html
|
||||
skip-if(B2G) == width-special-values-image-block.html width-special-values-image-block-ref.html
|
||||
skip-if(B2G) == width-special-values-image.html width-special-values-image-ref.html
|
||||
== width-special-values-block-intrinsic.html width-special-values-block-intrinsic-ref.html
|
||||
== width-special-values-float-intrinsic.html width-special-values-block-intrinsic-ref.html
|
||||
|
|
Загрузка…
Ссылка в новой задаче