From 704beb171f52b4296346c8ae99e693bbc35aa634 Mon Sep 17 00:00:00 2001 From: _nec Date: Wed, 9 Jul 2014 17:15:34 +0200 Subject: [PATCH] added handshake for future use --- package.json | 2 +- pkg/ustream-embedapi.min.js | 2 +- tests/tests.js | 86 +++++++++++++++++++++++-------------- 3 files changed, 56 insertions(+), 34 deletions(-) diff --git a/package.json b/package.json index 2f07e68..aa53ab9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ustream-embedapi", - "version": "0.0.1", + "version": "0.0.2", "devDependencies": { "grunt": "latest", "grunt-mocha": "~0.4.6", diff --git a/pkg/ustream-embedapi.min.js b/pkg/ustream-embedapi.min.js index 27317ff..95acfa6 100644 --- a/pkg/ustream-embedapi.min.js +++ b/pkg/ustream-embedapi.min.js @@ -1 +1 @@ -var UstreamEmbed=function(){function a(a){return b(a)}function b(a){var b=c(a),m=function(a){function b(b){if("socialstream"!==b){if(!v)return x||(x=[]),x.push(arguments),void 0;var d=i(arguments).slice(1);d[0]&&"function"==typeof d[0]&&(y[b]||(y[b]=[]),y[b].push(d[0])),g(a,s,{cmd:b,args:d})}else if(j(window,"message",n),u=c(arguments[1]),t=h(u.getAttribute("src")),w=!0,A.length)for(var e=0,k=A.length;k>e;e++)f(A[e])}function m(){if(x){for(;x.length;)b.apply(this,x.shift());x=null}}function n(a){var b=u;b&&b.contentWindow&&b.contentWindow===a.source?r.onmessage(a):a.source===u.id&&r.onmessage(a)}function o(a){var c,d=JSON.parse(a.data);return d.cmd&&"ready"==d.cmd?(g(u,t,{cmd:"ready"}),void 0):(c=[d.cmd],c=c.concat(d.args),b.apply(this,c),void 0)}function p(){v=!0,m()}function q(){b.apply(this,arguments)}var r,s,t,u,v=!1,w=!1,x=[],y={},z={},A=[];return s=h(a.getAttribute("src")),r={host:s,callMethod:q,getProperty:function(){q.apply(this,arguments)},addListener:function(a,b){z[a]||(z[a]=[]),z[a].push(b)},removeListener:function(a,b){if(b)for(var c=0,d=z[a].length;d>c;c++)z[a][c]===b&&z[a].splice(c,1);else z[a]=null},onmessage:function(a){var b;if(s||t||A.push({origin:a.origin,data:a.data}),a.origin==s){try{b=JSON.parse(a.data)}catch(c){return}if(b.sstream)return o(a),void 0;if(b.event&&b.event.ready&&(p(),d(z,"ready")),b.event&&b.event.live===!0)return d(z,"live"),void 0;if(b.event&&b.event.live===!1)return d(z,"offline"),void 0;if(b.event&&!b.event.ready)if(k)Object.keys(b.event).forEach(function(a){d(z,a,b.event[a])});else for(var f in b.event)b.event.hasOwnProperty(f)&&d(z,f,b.event[f]);if(b.property)if(k)Object.keys(b.property).forEach(function(a){e(y,a,b.property[a])});else for(var f in b.property)b.property.hasOwnProperty(f)&&e(y,f,b.property[f])}else if(w&&a.origin==t)return o(a),void 0},destroy:function(){v=!1,s="",w=!1,t="",u=null,x=[],y={},z={},A=[],l[a.id]&&(l[a.id]=null),a=null}}}(b);return b.id||(b.id="UstreamEmbed"+Math.ceil(1e5*Math.random())),m.id=b.id,l[b.id]=m,m}function c(a){return"string"==typeof a&&(a=document.getElementById(a)),a}function d(a,b,c){for(var d in a[b])a[b].hasOwnProperty(d)&&a[b][d].call(window,b,c)}function e(a,b,c){if(a[b]){for(var d in a[b])a[b].hasOwnProperty(d)&&a[b][d].call(window,c);a[b]=null,delete a[b]}}function f(a){var b,c;for(b in l)l.hasOwnProperty(b)&&l[b]&&(c=document.getElementById(b),c&&c.contentWindow?c.contentWindow===a.source&&l[b].onmessage(a):"string"==typeof a.source&&a.source==b&&l[b].onmessage(a))}function g(a,b,c){a.contentWindow.postMessage(JSON.stringify(c),b)}function h(a){return a.indexOf("http")<0&&(a=location.protocol+a),a.match(m)[1].toString()}function i(a){return Array.prototype.slice.call(a,0)}function j(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent("on"+b,c)}var k="undefined"!=typeof Object.keys,l={},m=new RegExp("^(http(?:s)?://[^/]+)","im");return j(window,"message",f),window.UstreamEmbed=a}(); \ No newline at end of file +var UstreamEmbed=function(){function a(a){return b(a)}function b(a){var b=c(a),m=function(a){function b(b){if("socialstream"!==b){if(!v)return x||(x=[]),x.push(arguments),void 0;var d=i(arguments).slice(1);d[0]&&"function"==typeof d[0]&&(y[b]||(y[b]=[]),y[b].push(d[0])),g(a,s,{cmd:b,args:d})}else if(j(window,"message",n),u=c(arguments[1]),t=h(u.getAttribute("src")),w=!0,A.length)for(var e=0,k=A.length;k>e;e++)f(A[e])}function m(){if(x){for(;x.length;)b.apply(this,x.shift());x=null}}function n(a){var b=u;b&&b.contentWindow&&b.contentWindow===a.source?r.onmessage(a):a.source===u.id&&r.onmessage(a)}function o(a){var c,d=JSON.parse(a.data);return d.cmd&&"ready"==d.cmd?(g(u,t,{cmd:"ready"}),void 0):(c=[d.cmd],c=c.concat(d.args),b.apply(this,c),void 0)}function p(){v=!0,g(a,s,{cmd:"apihandshake",args:[]}),m()}function q(){b.apply(this,arguments)}var r,s,t,u,v=!1,w=!1,x=[],y={},z={},A=[];return s=h(a.getAttribute("src")),r={host:s,callMethod:q,getProperty:function(){q.apply(this,arguments)},addListener:function(a,b){z[a]||(z[a]=[]),z[a].push(b)},removeListener:function(a,b){if(b)for(var c=0,d=z[a].length;d>c;c++)z[a][c]===b&&z[a].splice(c,1);else z[a]=null},onmessage:function(a){var b;if(s||t||A.push({origin:a.origin,data:a.data}),a.origin==s){try{b=JSON.parse(a.data)}catch(c){return}if(b.sstream)return o(a),void 0;if(b.event&&b.event.ready&&(p(),d(z,"ready")),b.event&&b.event.live===!0)return d(z,"live"),void 0;if(b.event&&b.event.live===!1)return d(z,"offline"),void 0;if(b.event&&!b.event.ready)if(k)Object.keys(b.event).forEach(function(a){d(z,a,b.event[a])});else for(var f in b.event)b.event.hasOwnProperty(f)&&d(z,f,b.event[f]);if(b.property)if(k)Object.keys(b.property).forEach(function(a){e(y,a,b.property[a])});else for(var f in b.property)b.property.hasOwnProperty(f)&&e(y,f,b.property[f])}else if(w&&a.origin==t)return o(a),void 0},destroy:function(){v=!1,s="",w=!1,t="",u=null,x=[],y={},z={},A=[],l[a.id]&&(l[a.id]=null),a=null}}}(b);return b.id||(b.id="UstreamEmbed"+Math.ceil(1e5*Math.random())),m.id=b.id,l[b.id]=m,m}function c(a){return"string"==typeof a&&(a=document.getElementById(a)),a}function d(a,b,c){for(var d in a[b])a[b].hasOwnProperty(d)&&a[b][d].call(window,b,c)}function e(a,b,c){if(a[b]){for(var d in a[b])a[b].hasOwnProperty(d)&&a[b][d].call(window,c);a[b]=null,delete a[b]}}function f(a){var b,c;for(b in l)l.hasOwnProperty(b)&&l[b]&&(c=document.getElementById(b),c&&c.contentWindow?c.contentWindow===a.source&&l[b].onmessage(a):"string"==typeof a.source&&a.source==b&&l[b].onmessage(a))}function g(a,b,c){a.contentWindow.postMessage(JSON.stringify(c),b)}function h(a){return a.indexOf("http")<0&&(a=location.protocol+a),a.match(m)[1].toString()}function i(a){return Array.prototype.slice.call(a,0)}function j(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent("on"+b,c)}var k="undefined"!=typeof Object.keys,l={},m=new RegExp("^(http(?:s)?://[^/]+)","im");return j(window,"message",f),window.UstreamEmbed=a}(); \ No newline at end of file diff --git a/tests/tests.js b/tests/tests.js index f54f6e2..bf65766 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -1,3 +1,6 @@ + + + suite('Ustream EmbedAPI tests', function() { var MTE = createMockFrame; @@ -73,11 +76,15 @@ suite('Ustream EmbedAPI tests', function() { mte.send('ready', true); + + setTimeout(function () { - var received = JSON.parse(spy.args[0][0]); + var received1 = JSON.parse(spy.args[0][0]), + received2 = JSON.parse(spy.args[1][0]); - sinon.assert.calledOnce(spy); - assert.equal(received.cmd, 'play'); + sinon.assert.calledTwice(spy); + assert.equal(received1.cmd, 'apihandshake'); + assert.equal(received2.cmd, 'play'); done(); }, 30); @@ -98,10 +105,12 @@ suite('Ustream EmbedAPI tests', function() { mte.send('ready', true); setTimeout(function () { - var received = JSON.parse(spy.args[0][0]); + var received1 = JSON.parse(spy.args[0][0]), + received2 = JSON.parse(spy.args[1][0]); - sinon.assert.calledOnce(spy); - assert.equal(received.cmd, 'pause'); + sinon.assert.calledTwice(spy); + assert.equal(received1.cmd, 'apihandshake'); + assert.equal(received2.cmd, 'pause'); done(); }, 30); @@ -122,10 +131,12 @@ suite('Ustream EmbedAPI tests', function() { mte.send('ready', true); setTimeout(function () { - var received = JSON.parse(spy.args[0][0]); + var received1 = JSON.parse(spy.args[0][0]), + received2 = JSON.parse(spy.args[1][0]); - sinon.assert.calledOnce(spy); - assert.equal(received.cmd, 'stop'); + sinon.assert.calledTwice(spy); + assert.equal(received1.cmd, 'apihandshake'); + assert.equal(received2.cmd, 'stop'); done(); }, 30); @@ -145,12 +156,14 @@ suite('Ustream EmbedAPI tests', function() { mte.send('ready', true); setTimeout(function () { - var received = JSON.parse(spy.args[0][0]); - - sinon.assert.calledOnce(spy); - assert.equal(received.cmd, 'load'); - assert.equal(received.args[0], 'channel'); - assert.equal(received.args[1], 1524); + var received1 = JSON.parse(spy.args[0][0]), + received2 = JSON.parse(spy.args[1][0]); + + sinon.assert.calledTwice(spy); + assert.equal(received1.cmd, 'apihandshake'); + assert.equal(received2.cmd, 'load'); + assert.equal(received2.args[0], 'channel'); + assert.equal(received2.args[1], 1524); done(); }, 30); @@ -170,11 +183,13 @@ suite('Ustream EmbedAPI tests', function() { mte.send('ready', true); setTimeout(function () { - var received = JSON.parse(spy.args[0][0]); + var received1 = JSON.parse(spy.args[0][0]), + received2 = JSON.parse(spy.args[1][0]); - sinon.assert.calledOnce(spy); - assert.equal(received.cmd, 'seek'); - assert.equal(received.args[0], 180); + sinon.assert.calledTwice(spy); + assert.equal(received1.cmd, 'apihandshake'); + assert.equal(received2.cmd, 'seek'); + assert.equal(received2.args[0], 180); done(); }, 30); @@ -193,11 +208,13 @@ suite('Ustream EmbedAPI tests', function() { mte.send('ready', true); setTimeout(function () { - var received = JSON.parse(spy.args[0][0]); + var received1 = JSON.parse(spy.args[0][0]), + received2 = JSON.parse(spy.args[1][0]); - sinon.assert.calledOnce(spy); - assert.equal(received.cmd, 'volume'); - assert.equal(received.args[0], 30); + sinon.assert.calledTwice(spy); + assert.equal(received1.cmd, 'apihandshake'); + assert.equal(received2.cmd, 'volume'); + assert.equal(received2.args[0], 30); done(); }, 30); @@ -217,11 +234,13 @@ suite('Ustream EmbedAPI tests', function() { mte.send('ready', true); setTimeout(function () { - var received = JSON.parse(spy.args[0][0]); + var received1 = JSON.parse(spy.args[0][0]), + received2 = JSON.parse(spy.args[1][0]); - sinon.assert.calledOnce(spy); - assert.equal(received.cmd, 'quality'); - assert.equal(received.args[0], 16); + sinon.assert.calledTwice(spy); + assert.equal(received1.cmd, 'apihandshake'); + assert.equal(received2.cmd, 'quality'); + assert.equal(received2.args[0], 16); done(); }, 30); }); @@ -321,12 +340,15 @@ suite('Ustream EmbedAPI tests', function() { sstream.socialsend('load', ['video',123456]); - var received = JSON.parse(mspy.args[0][0]); + var received1 = JSON.parse(mspy.args[0][0]), + received2 = JSON.parse(mspy.args[1][0]); + + sinon.assert.calledTwice(mspy); + assert.equal(received1.cmd, 'apihandshake'); - sinon.assert.calledOnce(mspy); - assert.equal(received.cmd, 'load'); - assert.equal(received.args[0], 'video'); - assert.equal(received.args[1], 123456); + assert.equal(received2.cmd, 'load'); + assert.equal(received2.args[0], 'video'); + assert.equal(received2.args[1], 123456); done();