Bug 1075509 - Standalone UI needs "call failed" sound. r=nperriault
authorRomain Gauthier <romain.gauthier@monkeypatch.me>
Tue, 28 Oct 2014 14:33:37 +0100
changeset 229303 f9e9a9e2afbaf4f4d3326da033767c68195211ad
parent 229302 a2812f546f76704214ec071ee81dbcbf9e654a93
child 229304 675913ddbb5571ffbd6a2dd44e82ad3579917d0b
child 229305 aa97afb0a949a8bc7981496ffd6f9d092bf3aecb
push id7326
push userbhearsum@mozilla.com
push dateFri, 28 Nov 2014 15:58:42 +0000
treeherdermozilla-aurora@d3a3b2a0f2f8 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersnperriault
bugs1075509
milestone36.0a1
Bug 1075509 - Standalone UI needs "call failed" sound. r=nperriault
browser/components/loop/content/shared/sounds/failure.ogg
browser/components/loop/standalone/content/js/webapp.js
browser/components/loop/standalone/content/js/webapp.jsx
browser/components/loop/test/standalone/webapp_test.js
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..79bc8345dfe16f64d6a7f473105e65ed0134aaf0
GIT binary patch
literal 13298
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
--- a/browser/components/loop/standalone/content/js/webapp.js
+++ b/browser/components/loop/standalone/content/js/webapp.js
@@ -259,17 +259,16 @@ loop.webapp = (function($, _, OT, mozL10
         )
       );
     }
   });
 
   var PendingConversationView = React.createClass({displayName: 'PendingConversationView',
     mixins: [sharedMixins.AudioMixin],
 
-
     getInitialState: function() {
       return {
         callState: "connecting"
       };
     },
 
     propTypes: {
       websocket: React.PropTypes.instanceOf(loop.CallConnectionWebSocket)
@@ -566,16 +565,22 @@ loop.webapp = (function($, _, OT, mozL10
         InitiateConversationView({
           title: mozL10n.get("initiate_call_button_label2"), 
           callButtonLabel: mozL10n.get("initiate_audio_video_call_button2")})
       );
     }
   });
 
   var FailedConversationView = React.createClass({displayName: 'FailedConversationView',
+    mixins: [sharedMixins.AudioMixin],
+
+    componentDidMount: function() {
+      this.play("failure");
+    },
+
     render: function() {
       document.title = mozL10n.get("standalone_title_with_status",
                                    {clientShortname: mozL10n.get("clientShortname2"),
                                     currentStatus: mozL10n.get("status_error")});
       return this.transferPropsTo(
         InitiateConversationView({
           title: mozL10n.get("call_failed_title"), 
           callButtonLabel: mozL10n.get("retry_call_button")})
--- a/browser/components/loop/standalone/content/js/webapp.jsx
+++ b/browser/components/loop/standalone/content/js/webapp.jsx
@@ -259,17 +259,16 @@ loop.webapp = (function($, _, OT, mozL10
         </div>
       );
     }
   });
 
   var PendingConversationView = React.createClass({
     mixins: [sharedMixins.AudioMixin],
 
-
     getInitialState: function() {
       return {
         callState: "connecting"
       };
     },
 
     propTypes: {
       websocket: React.PropTypes.instanceOf(loop.CallConnectionWebSocket)
@@ -566,16 +565,22 @@ loop.webapp = (function($, _, OT, mozL10
         <InitiateConversationView
           title={mozL10n.get("initiate_call_button_label2")}
           callButtonLabel={mozL10n.get("initiate_audio_video_call_button2")} />
       );
     }
   });
 
   var FailedConversationView = React.createClass({
+    mixins: [sharedMixins.AudioMixin],
+
+    componentDidMount: function() {
+      this.play("failure");
+    },
+
     render: function() {
       document.title = mozL10n.get("standalone_title_with_status",
                                    {clientShortname: mozL10n.get("clientShortname2"),
                                     currentStatus: mozL10n.get("status_error")});
       return this.transferPropsTo(
         <InitiateConversationView
           title={mozL10n.get("call_failed_title")}
           callButtonLabel={mozL10n.get("retry_call_button")} />
--- a/browser/components/loop/test/standalone/webapp_test.js
+++ b/browser/components/loop/test/standalone/webapp_test.js
@@ -496,16 +496,51 @@ describe("loop.webapp", function() {
 
                 sinon.assert.calledOnce(conversation.outgoing);
                 sinon.assert.calledWithExactly(conversation.outgoing, fakeSessionData);
               });
           });
         });
       });
     });
+
+    describe("FailedConversationView", function() {
+      var view, conversation, client, fakeAudio;
+
+      beforeEach(function() {
+        fakeAudio = {
+          play: sinon.spy(),
+          pause: sinon.spy(),
+          removeAttribute: sinon.spy()
+        };
+        sandbox.stub(window, "Audio").returns(fakeAudio);
+
+        client = new loop.StandaloneClient({
+          baseServerUrl: "http://fake.example.com"
+        });
+        conversation = new sharedModels.ConversationModel({}, {
+          sdk: {}
+        });
+        conversation.set("loopToken", "fakeToken");
+
+        view = React.addons.TestUtils.renderIntoDocument(
+          loop.webapp.FailedConversationView({
+            conversation: conversation,
+            client: client,
+            notifications: notifications
+          }));
+      });
+
+      it("should play a failure sound, once", function() {
+        sinon.assert.calledOnce(window.Audio);
+        sinon.assert.calledWithExactly(window.Audio,
+                                       "shared/sounds/failure.ogg");
+        expect(fakeAudio.loop).to.equal(false);
+      });
+    });
   });
 
   describe("WebappRootView", function() {
     var helper, sdk, conversationModel, client, props;
 
     function mountTestComponent() {
       return TestUtils.renderIntoDocument(
         loop.webapp.WebappRootView({