cdf635106c5a80177a64507b2ab09ef4fc05b099
[dotfiles/.git] / .config / google-chrome / Default / Extensions / pkedcjkdefgpdelpbcmbmeomcjbeemfm / 9221.427.0.1_0 / mirroring_cast_streaming.js
1 'use strict';var Qaa={TAB:0,ln:1,jv:2},yx=function(){return new Bb("MediaRouter.CastStreaming.Session.Launch")},zx=function(){return new Hb("MediaRouter.CastStreaming.Session.Length")},Ax=function(a){Mb("MediaRouter.CastStreaming.Start.Success",a,Qaa)};var Bx=fb("mr.mirror.cast.LogUploader");function Cx(a,b,c){Dx("raw_events.log.gz",a,b,c);return b?"https://crash.corp.google.com/samples?reportid=&q="+encodeURIComponent("UserComments='"+b+"'"):""}
2 function Dx(a,b,c,d){if(0==b.size)Bx.info("Trying to upload an empty file to Crash"),d&&d(null);else{var e=new FormData;e.append("prod","Cast");e.append("ver",chrome.runtime.getManifest().version);e.append(a,b);c&&e.append("comments",c);kx("https://clients2.google.com/cr/report",function(f){f=f.target;var g=null;sx(f)?(g=ux(f),Bx.info("Upload to Crash succeeded: "+g)):Bx.info("Upload to Crash failed. HTTP status: "+f.za());d&&d(g)},"POST",e,void 0,3E4)}};var Ex=function(){this.g=0;Tm(this)},Gx=function(){Fx||(Fx=new Ex);return Fx},Raa=function(){var a=Gx(),b={fraction:.01,autoSubmitTimeLimitMillis:6048E5},c=b.autoSubmitTimeLimitMillis,d=Date.now();return a.g&&c&&d-a.g<c?!1:Math.random()<b.fraction};Ex.prototype.cb=function(){return"mirror.cast.LogUtils"};Ex.prototype.cc=function(){return[void 0,{lastAutoSubmitMillis:this.g}]};Ex.prototype.hc=function(){var a=Rm(this);this.g=a&&a.lastAutoSubmitMillis||0};var Fx=null;fb("mr.mirror.cast.LogUtils");var Hx={zM:"OFFER",tE:"ANSWER",FN:"PRESENTATION",EI:"GET_STATUS",zQ:"STATUS_RESPONSE",zI:"GET_CAPABILITIES",UF:"CAPABILITIES_RESPONSE",yP:"RPC"};var Saa=function(){this.capabilities=this.status=this.g=this.error=this.rpc=this.result=this.type=this.h=this.sessionId=null},Uaa=function(a){try{if("string"!==typeof a)throw SyntaxError("Cannot parse non-string as JSON");var b;Ix(JSON.parse(a),function(d){b=Taa(d)},function(){throw Error("non-Object result from JSON parse");});return b}catch(d){var c=d instanceof SyntaxError?"JSON parse error: "+d.message:"Type coercion error: "+d.message}"string"==typeof a?a="a string: "+a:a instanceof ArrayBuffer?
3 (a=new Uint8Array(a),a="an ArrayBuffer whose base64 is "+btoa(String.fromCharCode.apply(null,a))):a="of invalid data type "+typeof a;throw Error(c+". Input was "+a);},Taa=function(a){var b=new Saa;null!=a.sessionId&&(b.sessionId=String(a.sessionId));Jx(a.seqNum,function(f){b.h=f},function(){throw Error('"seqNum" must be a number');});if("type"in a){for(var c=String(a.type).toUpperCase(),d=n(Object.keys(Hx)),e=d.next();!e.done;e=d.next())if(Hx[e.value]==c){b.type=c;break}if(!b.type)throw Error('not a known message "type"');
4 }"result"in a&&(b.result=String(a.result));if("rpc"in a){if("string"!==typeof a.rpc)throw Error('"rpc" must be a String containing a base64 payload');b.rpc=new Uint8Array([].concat(q(atob(a.rpc))).map(function(f){return f.charCodeAt(0)}))}Ix(a.error,function(f){b.error=Vaa(f)},function(){throw Error('"error" must be an Object');});Ix(a.answer,function(f){b.g=Waa(f)},function(){throw Error('"answer" must be an Object');});Ix(a.status,function(f){b.status=Xaa(f)},function(){throw Error('"status" must be an Object');
5 });Ix(a.capabilities,function(f){b.capabilities=Yaa(f)},function(){throw Error('"capabilities" must be an Object');});return b},Ix=function(a,b,c){void 0!==a&&(a instanceof Object?b(a):c())},Jx=function(a,b,c){void 0!==a&&("number"!==typeof a?c():b(a))},Kx=function(a,b,c){void 0!==a&&(a instanceof Array&&a.every(function(d){return"number"===typeof d})?b(a):c())},Lx=function(a,b,c){void 0!==a&&(a instanceof Array?b(a.map(function(d){return String(d)})):c())},Zaa=function(){this.m=null;this.g=[];this.h=
6 [];this.j=this.l=this.o=null},Waa=function(a){var b=new Zaa;Jx(a.udpPort,function(c){b.m=c},function(){throw Error('"answer.udpPort" must be a number');});Kx(a.sendIndexes,function(c){b.g=c},function(){throw Error('"answer.sendIndexes" must be an array of numbers');});Kx(a.ssrcs,function(c){b.h=c},function(){throw Error('"answer.ssrcs" must be an array of numbers');});"IV"in a&&(b.o=String(a.IV));"receiverGetStatus"in a&&(b.l="true"==String(a.receiverGetStatus).toLowerCase());"castMode"in a&&(b.j=
7 String(a.castMode));return b},$aa=function(){this.details=this.description=this.code=null},Vaa=function(a){var b=new $aa;Jx(a.code,function(c){b.code=c},function(){throw Error('"error.code" must be a number');});"description"in a&&(b.description=String(a.description));Ix(a.details,function(c){b.details=c},function(){throw Error('"error.details" must be an Object');});return b},aba=function(){this.h=this.g=null},Xaa=function(a){var b=new aba;Jx(a.wifiSnr,function(c){b.g=c},function(){throw Error('"status.wifiSnr" must be a number');
8 });Kx(a.wifiSpeed,function(c){b.h=c},function(){throw Error('"status.wifiSpeed" must be an array of numbers');});return b},bba=function(){this.h=this.g=null},Yaa=function(a){var b=new bba;Lx(a.mediaCaps,function(c){b.g=c},function(){throw Error('"capabilities.mediaCaps" must be an array');});if("keySystems"in a){a=a.keySystems;if(!(a instanceof Array))throw Error('"capabilities.keySystems" must be an array');b.h=a.map(function(c){var d;Ix(c,function(e){d=cba(e)},function(){throw Error('"capabilities.keySystems" entries must be *Objects');
9 });return d})}return b},dba=function(){this.h=this.o=this.m=this.l=this.u=this.g=this.C=this.codecs=this.initDataTypes=this.j=null},cba=function(a){var b=new dba;"keySystemName"in a&&(b.j=String(a.keySystemName));Lx(a.initDataTypes,function(c){b.initDataTypes=c},function(){throw Error('"capabilities.initDataTypes" must be an array');});Lx(a.codecs,function(c){b.codecs=c},function(){throw Error('"capabilities.codecs" must be an array');});Lx(a.secureCodecs,function(c){b.C=c},function(){throw Error('"capabilities.secureCodecs" must be an array');
10 });Lx(a.audioRobustness,function(c){b.g=c},function(){throw Error('"capabilities.audioRobustness" must be an array');});Lx(a.videoRobustness,function(c){b.u=c},function(){throw Error('"capabilities.videoRobustness" must be an array');});"persistentLicenseSessionSupport"in a&&(b.l=String(a.persistentLicenseSessionSupport));"persistentReleaseMessageSessionSupport"in a&&(b.m=String(a.persistentReleaseMessageSessionSupport));"persistentStateSupport"in a&&(b.o=String(a.persistentStateSupport));"distinctiveIdentifierSupport"in
11 a&&(b.h=String(a.distinctiveIdentifierSupport));return b};var Mx=function(a){this.s=fb("mr.mirror.cast.MessageDispatcher");this.l=a;this.g=null;this.h=new Map;this.j=0},Nx=function(a,b,c){if(a.h.has(b))throw Error("Attempt to multiple-subscribe to the same response type: "+b);a.h.set(b,c);a.j=0;a.s.va("Added subscriber for "+b+"-type messages.");a.g||(a.g=nw(a.l),a.g.onMessage=a.m.bind(a))},Ox=function(a,b){a.h.delete(b)&&a.s.va(function(){return"Removed subscriber of "+b+"-type messages."});0==a.h.size&&a.g&&(a.g.dispose(),a.g=null)};
12 Mx.prototype.sendMessage=function(a){return this.g?"RPC"==a.type?this.g.sendMessage(a,{namespace:"urn:x-cast:com.google.cast.remoting"}):this.g.sendMessage(a,{namespace:"urn:x-cast:com.google.cast.webrtc"}):Promise.reject(Error("Require at least one subscriber before sending messages."))};
13 var Tx=function(a,b,c,d,e){var f=null,g=function(){Ox(a,c);null!=f&&(clearTimeout(f),f=null)};try{Nx(a,c,function(h){e(h)&&g()})}catch(h){e(null,h);return}f=setTimeout(function(){g();e(null,Error("timeout"))},d);a.sendMessage(b).catch(function(h){g();e(null,h)})};
14 Mx.prototype.m=function(a){if(a&&"string"===typeof a.namespace_&&a.namespace_.startsWith("urn:x-cast:com.google.cast.")){do{var b=void 0;try{b=Uaa(a.data)}catch(d){b=d.message;break}if(b.type){var c=this.h.get(b.type);if(c)try{c(b);return}catch(d){b="Error thrown during delivery. Response was: "+(JSON.stringify(b)+". Error from subscriber callback was: ")+(d.message+".")}else b="Message was ignored: "+JSON.stringify(b)}else b="Message did not include response type: "+JSON.stringify(b)}while(0);10>
15 this.j?this.s.L(b):this.s.va(b);++this.j}};var Ux=function(){this.g=Promise.resolve(1)},Wx=function(a,b,c){return Vx(a,function(d){return d==b},c)},eba=function(a,b){var c=[3,4];return Vx(a,function(d){return-1!=c.indexOf(d)},b)},Xx=function(a,b){a.g=a.g.catch(function(){return 1});return Vx(a,function(){return!0},b)},Vx=function(a,b,c){var d,e,f=new Promise(function(g,h){d=g;e=h});a.g=a.g.then(function(g){if(!b(g))return e(Error("Operation requires a different starting checkpoint than "+g)),Promise.resolve(g);var h=new fba(g);try{var m=c(h)}catch(p){m=
16 Promise.reject(p)}return m.then(function(p){return d(p)},function(p){return e(p)}).then(function(){if(null===h.g)throw Error("A prior operation that started at "+(g+" did not complete."));return h.g})},function(g){e(g);throw g;});return f},fba=function(a){this.h=a;this.g=null},Yx=function(a,b){a.g="number"===typeof b?b:a.h};var Zx=chrome.cast.streaming,$x=fb("mr.mirror.cast.StreamingLaunchWorkflow"),by=function(a,b,c,d,e){this.M=a.sessionId;this.D=a.si;this.W=a.kf;this.j=b;this.J=c;this.H=d;this.aa=ay(e,"onAnswer",this.D);this.ba=ay(e,"onSessionStop",this.D);this.s=$x;this.F=new Ux;this.C=this.G=this.u=this.h=this.g=this.o=this.m=this.l=null};
17 by.prototype.start=function(a,b,c){var d=this;if(!a&&!b)return Promise.reject(Error("No tracks to stream"));var e=a instanceof cy,f=b instanceof cy;(e&&b&&!f||f&&a&&!e)&&Ub("Mixing remoting and non-remoting tracks");return Wx(this.F,1,function(g){d.l=a;d.m=b;d.o=c;d.s.info(function(){return"Launching streaming for "+dy(d)+" to a "+(d.W+".")});return gba(d).then(d.O.bind(d)).then(function(h){return hba(d,h).then(function(m){d.aa();var p=iba(d,m,h);d.g=ey(d,d.g,p);d.h=ey(d,d.h,p);if(!d.g&&!d.h)throw Error("Receiver did not select any offers from: "+
18 JSON.stringify(h));d.G=!!m.l;d.C=function(t,y){t==d.g?d.o.ag("Audio stream (id="+t+") error: "+y):t==d.h&&d.o.ag("Video stream (id="+t+") error: "+y)};Zx.rtpStream.onError.addListener(d.C);return jba(d,m,p)})}).then(function(){d.s.info(function(){return"Launched streaming for "+dy(d)});d.o.Bh(d);Yx(g,2);return{yw:d.g,ND:d.h}})})};
19 by.prototype.stop=function(){var a=this;return Xx(this.F,function(b){if(!a.l&&!a.m)return Yx(b,1),Promise.resolve();a.s.info(function(){return"Stopping streaming for "+dy(a)+"."});a.C&&(Zx.rtpStream.onError.removeListener(a.C),a.C=null);if(a.o){var c=a.o.xi();a.o=null}else c=Promise.resolve();return c.then(function(){a.g&&(Zx.rtpStream.stop(a.g),Zx.rtpStream.destroy(a.g),a.g=null);a.h&&(Zx.rtpStream.stop(a.h),Zx.rtpStream.destroy(a.h),a.h=null);a.u&&(Zx.udpTransport.destroy(a.u),a.u=null);a.ba();
20 a.s.info(function(){return"Stopped streaming for "+dy(a)+"."});a.l=null;a.m=null;Yx(b,1)})})};
21 var kba=function(a,b){var c=JSON.stringify(b);return Promise.all([a.g&&new Promise(function(d){return Zx.rtpStream.getRawEvents(a.g,c,d)}),a.h&&new Promise(function(d){return Zx.rtpStream.getRawEvents(a.h,c,d)})]).catch(function(d){a.s.error("Unexpected error when calling getRawEvents()",d);return[]}).then(function(d){return new Blob(d.filter(function(e){return!!e}),{type:"application/gzip"})})},lba=function(a){return Promise.all([a.g&&new Promise(function(b){return Zx.rtpStream.getStats(a.g,b)}),
22 a.h&&new Promise(function(b){return Zx.rtpStream.getStats(a.h,b)})]).catch(function(b){a.s.error("Unexpected error when calling getStats()",b);return[]}).then(function(b){return Object.assign.apply(Object,[{}].concat(q(b.filter(function(c){return!!c}))))})},dy=function(a){if(a.l&&a.m)var b="audio+video ";else if(a.l)b="audio-only ";else if(a.m)b="video-only ";else return"stopped";return a.l instanceof cy||a.m instanceof cy?b+"remoting":b+"streaming"},gba=function(a){return new Promise(function(b){var c=
23 function(d,e,f){d&&!a.l&&(Zx.rtpStream.destroy(d),d=null);e&&!a.m&&(Zx.rtpStream.destroy(e),e=null);a.s.info(function(){return"Created Cast Streaming session: audioStreamId="+d+", videoStreamId="+e+"."});a.g=d;a.h=e;a.u=f;b()};a.l instanceof cy||a.m instanceof cy?Zx.session.create(null,null,c):Zx.session.create(a.l,a.m,c)})};
24 by.prototype.O=function(){for(var a=Bk(),b=Bk(),c=[],d=n([this.g,this.h]),e=d.next();!e.done;e=d.next())if(e=e.value)for(var f=e==this.g,g=f?127:96,h=f?Math.floor(499999*Math.random())+1:Math.floor(499999*Math.random())+500001,m=f?48E3:9E4,p=n(Zx.rtpStream.getSupportedParams(e)),t=p.next();!t.done;t=p.next())t=t.value,t.payload.payloadType=g,t.payload.maxLatency=this.j.maxLatencyMillis,t.payload.minLatency=this.j.minLatencyMillis,t.payload.animatedLatency=this.j.animatedLatencyMillis,t.payload.ssrc=
25 h,t.payload.clockRate=m,t.payload.aesKey=a,t.payload.aesIvMask=b,f?(t.payload.channels=2,t.payload.maxBitrate=this.j.audioBitrate,t.payload.maxFrameRate=100):(t.payload.minBitrate=this.j.minVideoBitrate,t.payload.maxBitrate=this.j.maxVideoBitrate,t.payload.maxFrameRate=this.j.maxFrameRate),c.push(new mba(e,t));return c};
26 var ey=function(a,b,c){b&&!c.some(function(d){return d.dh==b})&&(a.s.L("Destroying RTP stream not selected by the receiver: id="+b),Zx.rtpStream.destroy(b),b=null);return b},hba=function(a,b){return new Promise(function(c,d){for(var e=[],f=0;f<b.length;++f){var g=b[f].params,h={index:f,codecName:g.payload.codecName.toLowerCase(),rtpProfile:"cast",rtpPayloadType:g.payload.payloadType,ssrc:g.payload.ssrc,targetDelay:g.payload.animatedLatency,aesKey:g.payload.aesKey,aesIvMask:g.payload.aesIvMask,timeBase:"1/"+
27 g.payload.clockRate,receiverRtcpEventLog:a.j.enableLogging,rtpExtensions:["adaptive_playout_delay"]};a.j.dscpEnabled&&(h.receiverRtcpDscp=46);127==g.payload.payloadType?Object.assign(h,{type:"audio_source",bitRate:0<g.payload.maxBitrate?1E3*g.payload.maxBitrate:60*g.payload.maxFrameRate+g.payload.clockRate*g.payload.channels,sampleRate:g.payload.clockRate,channels:g.payload.channels}):Object.assign(h,{type:"video_source",renderMode:"video",maxFrameRate:Math.round(1E3*g.payload.maxFrameRate)+"/1000",
28 maxBitRate:1E3*g.payload.maxBitrate,resolutions:[{width:a.j.maxWidth,height:a.j.maxHeight}]});e.push(h)}var m=a.l instanceof cy||a.m instanceof cy?"remoting":"mirroring",p={type:"OFFER",sessionId:a.M,seqNum:co(a.J),offer:{castMode:m,receiverGetStatus:!0,supportedStreams:e}};a.s.info(function(){return"Sending OFFER message: "+JSON.stringify(p)});Tx(a.H,p,"ANSWER",1E4,function(t,y){if(null==t)d(y);else if("ok"==t.result&&t.g){if(t.h!=p.seqNum)return a.s.L("Ignoring ANSWER for OFFER with different seqNum: "+
29 JSON.stringify(t)),!1;((y=t.g.j)&&y!=m||!y&&"mirroring"!=m)&&a.s.error("Expected receiver to ANSWER with castMode="+m+", but got: "+y);a.s.va(function(){return"Received ANSWER: "+JSON.stringify(t)});c(t.g)}else d(Error("Non-OK ANSWER received: "+JSON.stringify(t)));return!0})})},iba=function(a,b,c){if(b.g.length!=b.h.length)return a.s.error("sendIndexes.length != ssrcs.length in ANSWER: "+JSON.stringify(b)),[];for(var d=[],e={},f=0;f<b.g.length;e={ng:e.ng},++f){var g=b.g[f];if(0>g||g>=c.length)return a.s.error("Receiver selected invalid index ("+
30 g+" < "+c.length+") in ANSWER: "+JSON.stringify(b)),[];e.ng=c[g];if(d.some(function(h){return function(m){return m.dh==h.ng.dh}}(e)))return a.s.error("Receiver selected same RTP stream twice in ANSWER: "+JSON.stringify(b)),[];e.ng.params.payload.feedbackSsrc=b.h[g];if(d.some(function(h){return function(m){return m.params.payload.feedbackSsrc==h.ng.params.payload.feedbackSsrc}}(e)))return a.s.error("Receiver provided same SSRC for two different RTP streams in ANSWER: "+JSON.stringify(b)),[];d.push(e.ng)}return d},
31 jba=function(a,b,c){var d=null,e=function(){d&&(Zx.rtpStream.onStarted.removeListener(d),d=null)};return(new Promise(function(f,g){var h=b.m||2344;a.s.info(function(){return"Starting RTP streams to receiver at "+(a.D+":"+h)+(" for selected offers: "+JSON.stringify(c))});var m=a.u||-1;a.j.dscpEnabled&&(a.s.info("Enabled DSCP in sender."),Zx.udpTransport.setOptions(m,{DSCP:!0}));Zx.udpTransport.setDestination(m,{address:a.D,port:h});var p=new Set(c.map(function(y){return y.dh}));d=function(y){p.delete(y);
32 0==p.size&&f()};Zx.rtpStream.onStarted.addListener(d);m=n(c);for(var t=m.next();!t.done;t=m.next())t=t.value,Zx.rtpStream.toggleLogging(t.dh,a.j.enableLogging),Zx.rtpStream.start(t.dh,t.params);setTimeout(function(){g(Error("Timeout: RTP streams failed to start."))},1E4)})).then(e).catch(function(f){e();throw f;})},ay=function(a,b,c){return a&&b in a?function(){try{a[b](c)}catch(d){$x.error("Error from testHooks."+b,d)}}:function(){}},mba=function(a,b){this.dh=a;this.params=b},cy=function(){};var fy=fb("mr.mirror.cast.MediaRemoter"),gy=function(a,b,c,d,e,f){this.C=a;this.J=nba(b,this.C.Sb);this.M=new by(this.C.Sb,c,d,e,f);this.F=e;this.m=new Ux;this.j=new oba;this.D=new mojo.Binding(mojo.MirrorServiceRemoter,this,null);this.s=fy;this.G=this.g=this.o=this.l=this.H=null;this.h=!0;this.u=this.O.bind(this)};k=gy.prototype;
33 k.initialize=function(a,b){var c=this;return Wx(this.m,1,function(d){c.H=a;c.l=b;var e=c.D.createInterfacePtrAndBind();c.D.setConnectionErrorHandler(function(){c.s.info("Remoter mojo pipe connection error.");c.ke()});c.g=new mojo.MirrorServiceRemotingSourcePtr;var f=nk(c.C.mediaSource||"");if(!f)throw Error("Failed to parse tab ID from source:\n          "+c.C.mediaSource);c.s.info("Connecting remoter to browser: tabId="+f);(Wj.get("mr.ProviderManager")||null).onMediaRemoterCreated(f,e,mojo.makeRequest(c.g));
34 c.g.ptr.setConnectionErrorHandler(function(){c.s.info("RemotingSource mojo pipe connection error.");c.ke()});return pba(c).then(function(){if(c.h)c.g.onSinkAvailable(c.J);Yx(d,2)})})};
35 k.ke=function(){var a=this;return Xx(this.m,function(b){a.g&&(a.g.ptr.reset(),a.g=null);var c=a.o;a.o=null;a.l=null;a.H=null;a.D.close();chrome.settingsPrivate.onPrefsChanged.hasListener(a.u)&&chrome.settingsPrivate.onPrefsChanged.removeListener(a.u);return new Promise(function(d){window.setTimeout(function(){hy(a).then(function(){Yx(b,1);d();c&&c()})},250)})})};k.JC=function(a){iy(this.j,a)};k.Bh=function(a){this.l&&this.l.Bh(a)};k.xi=function(){return this.l?this.l.xi():Promise.resolve()};
36 k.ag=function(a,b){this.s.error("Error during streaming: "+a,b);if(this.g)this.g.onError();this.ke()};
37 k.start=function(){var a=this,b=!1;this.s.info(function(){b=!0;return"Starting next media remoting session."});b&&qba(this.j,function(c){return a.s.info(c)});rba(this.j);Wx(this.m,2,function(c){return(0,a.H)().then(function(d){a.o=d;Nx(a.F,"RPC",function(e){if(e.rpc){var f=a.j;e=e.rpc;f.o&&(++f.C,f.h+=e.length,f.o(e))}});Yx(c,3)}).catch(function(d){return hy(a).then(function(){Yx(c);throw d;})})}).then(function(){a.s.info("Remoting started successfully.")}).catch(function(c){a.s.error("Failed to start remoting",c);
38 a.g.onError()})};k.lD=function(a,b){var c=this;return Wx(this.m,3,function(d){return c.M.start(a?new cy:null,b?new cy:null,c).then(function(e){sba(c.j,function(f){return c.F.sendMessage(f)},function(f){c.g.onMessageFromSink(f)});Yx(d,4);return{audio_stream_id:e.yw||-1,video_stream_id:e.ND||-1}}).catch(function(e){return hy(c).then(function(){Yx(d);throw e;})})}).catch(function(d){c.s.error("Failed to start remoting streams",d);c.ke();return{audio_stream_id:-1,video_stream_id:-1}})};
39 k.stop=function(a){var b=this;eba(this.m,function(c){b.g.onStopped(a);return hy(b).then(function(){b.s.info("Remoting stopped.");Yx(c,5);(0,b.o)().then(function(){return Wx(b.m,5,function(d){if(b.g&&b.h)b.g.onSinkAvailable(b.J);Yx(d,2);return Promise.resolve()})}).catch(function(d){throw d;});b.o=null})}).catch(function(c){b.s.error("Failed to stop remoting: ",c);b.ke()})};
40 k.gx=function(){null===this.G&&(this.G=Ab(this.C.Sb.si).then(function(a){return a.g||!1}));return this.G.then(function(a){return{rate:(a?1E7:5E6)/8}})};
41 var hy=function(a){return a.M.stop().then(function(){Ox(a.F,"RPC");tba(a.j);jy(a.j)})},pba=function(a){return new Promise(function(b){chrome.settingsPrivate.getPref("media_router.media_remoting.enabled",function(c){chrome.runtime.lastError?a.s.error("Encountered error getting media remoting pref: "+JSON.stringify(chrome.runtime.lastError)):c.type!=chrome.settingsPrivate.PrefType.BOOLEAN?a.s.error("Pref value not a boolean: "+JSON.stringify(c)):(a.h=!!c.value,a.s.info("Initializing mediaRemotingEnabled_ with value read from pref: "+
42 a.h));chrome.settingsPrivate.onPrefsChanged.hasListener(a.u)||chrome.settingsPrivate.onPrefsChanged.addListener(a.u);b()})})};
43 gy.prototype.O=function(a){if(this.g){a=n(a);for(var b=a.next();!b.done;b=a.next())if(b=b.value,"media_router.media_remoting.enabled"==b.key){if(b.type!=chrome.settingsPrivate.PrefType.BOOLEAN){this.s.error("Pref value not a boolean: "+JSON.stringify(b));break}a=!!b.value;if(this.h==a)break;this.h=a;this.s.info("mediaRemotingEnabled_ changed to: "+this.h);if(this.h)this.g.onSinkAvailable(this.J);else this.g.onStopped(mojo.RemotingStopReason.USER_DISABLED);break}}};
44 var nba=function(a,b){var c=new mojo.RemotingSinkMetadata;c.features=[];c.friendly_name=b.hD||"";c.audio_capabilities=[];c.video_capabilities=[];var d=mojo.RemotingSinkAudioCapability,e=mojo.RemotingSinkVideoCapability,f=c.audio_capabilities,g=c.video_capabilities,h=b.kf||"";(a.g||[]).forEach(function(m){switch(m){case "audio":f.push(d.CODEC_BASELINE_SET);break;case "aac":f.push(d.CODEC_AAC);break;case "opus":f.push(d.CODEC_OPUS);break;case "video":g.push(e.CODEC_BASELINE_SET);break;case "4k":g.push(e.SUPPORT_4K);
45 break;case "h264":g.push(e.CODEC_H264);break;case "vp8":g.push(e.CODEC_VP8);break;case "vp9":h.startsWith("Chromecast Ultra")&&g.push(e.CODEC_VP9);break;case "hevc":h.startsWith("Chromecast Ultra")&&g.push(e.CODEC_HEVC);break;default:fy.info("Unknown mediaCap name: "+m)}});b.kf&&"Chromecast Ultra"==b.kf&&g.push(e.SUPPORT_4K);return c};gy.prototype.estimateTransmissionCapacity=gy.prototype.gx;gy.prototype.stop=gy.prototype.stop;gy.prototype.startDataStreams=gy.prototype.lD;gy.prototype.start=gy.prototype.start;
46 gy.prototype.sendMessageToSink=gy.prototype.JC;
47 var oba=function(){this.o=this.m=this.g=null;this.D=this.h=this.C=this.j=this.u=0;this.l=null},rba=function(a){a.g=[];ky(a,performance.now())},sba=function(a,b,c){a.m=b;a.o=c;a.g?(b=a.g,a.g=null,b.forEach(function(d){return iy(a,d.data).then(d.LC,d.Gr)})):ky(a,performance.now())},tba=function(a){if(a.g){var b=Error("Stop before delivering pending message");a.g.forEach(function(c){return c.Gr(b)});a.g=null}a.m=null;a.o=null},iy=function(a,b){if(a.m){var c=btoa(String.fromCharCode.apply(null,b));++a.u;
48 a.j+=b.length;return a.m({type:"RPC",rpc:c})}return a.g?new Promise(function(d,e){a.g.push({data:b,LC:d,Gr:e})}):Promise.reject(Error("RPC pipe not started"))},qba=function(a,b){jy(a);a.l=setInterval(function(){if(a.g)var c=a.g.length+" messages are waiting to send.";else{c=performance.now();var d=(c-a.D)/1E3;d="Over the past "+d.toFixed(1)+" seconds, sent "+(a.u+" messages ("+Math.round(a.j/d)+" bytes/sec) and received ")+(a.C+" messages ("+Math.round(a.h/d)+" bytes/sec).");ky(a,c);c=d}b(c)},3E4)},
49 jy=function(a){null!=a.l&&(clearInterval(a.l),a.l=null)},ky=function(a,b){a.u=0;a.j=0;a.C=0;a.h=0;a.D=b};function uba(a){return a&&a.getAudioTracks()&&0<a.getAudioTracks().length?a.getAudioTracks()[0]:null}function vba(a){return a&&a.getVideoTracks()&&0<a.getVideoTracks().length?a.getVideoTracks()[0]:null};var ly=function(a,b,c,d,e){this.j=new by(a,b,c,d,void 0===e?null:e);this.s=fb("mr.mirror.cast.MediaStreamer");this.m=new Ux;this.l=this.h=this.g=this.o=null};ly.prototype.start=function(a,b){var c=this;return Wx(this.m,1,function(d){c.o=a;c.g=uba(a);c.g&&"ended"==c.g.readyState&&(c.g=null);c.h=vba(a);c.h&&"ended"==c.h.readyState&&(c.h=null);if(!c.g&&!c.h)return Yx(d),Promise.reject(Error("No MediaStream tracks to stream."));c.l=b;return c.j.start(c.g,c.h,c.l).then(function(){return Yx(d,2)})})};
50 ly.prototype.stop=function(){var a=this;return Xx(this.m,function(b){return a.j.stop().then(function(){a.g=null;a.h=null;a.o=null;a.l=null;Yx(b,1)})})};var wba=function(a){return Wx(a.m,2,function(b){a.s.info("Suspending media streaming...");return a.j.stop().then(function(){a.s.info("Suspended media streaming.");Yx(b,3)})})};
51 ly.prototype.resume=function(){var a=this;return Wx(this.m,3,function(b){a.g&&"ended"==a.g.readyState&&(a.g=null);a.h&&"ended"==a.h.readyState&&(a.h=null);if(!a.g&&!a.h)return Promise.reject(Error("Cannot resume: All tracks have ended."));a.s.info("Resuming media streaming...");return a.j.start(a.g,a.h,a.l).then(function(){a.s.info("Resumed media streaming.");Yx(b,2)})})};var my=function(a,b,c){this.m=a;this.l=b;this.j=c;this.s=fb("mr.mirror.cast.WifiStatusMonitor");this.g=null;this.h=[]};my.prototype.start=function(){var a=this;null==this.g&&(this.s.va("Starting Wifi Status Monitoring."),this.h=[],Nx(this.j,"STATUS_RESPONSE",function(b){return xba(a,b)}),this.g=setInterval(function(){return ny(a)},12E4),ny(this))};my.prototype.stop=function(){null!=this.g&&(this.s.va("Stopping Wifi Status Monitoring."),clearInterval(this.g),this.g=null,Ox(this.j,"STATUS_RESPONSE"))};
52 var xba=function(a,b){if(null!=a.g)if(b.status){var c={};null!=b.status.g&&(c.wifiSnr=b.status.g);null!=b.status.h&&(c.wifiSpeed=b.status.h[3]);0==Object.keys(c).length?a.s.L(function(){return"No status fields populated in response: "+JSON.stringify(b)}):(c.timestamp=Date.now(),30==a.h.length&&a.h.shift(),a.h.push(c),a.s.info(function(){return"Current Wifi status: "+JSON.stringify(c)}))}else a.s.L(function(){return"Ignoring response without status: "+JSON.stringify(b)})},ny=function(a){a.j.sendMessage({type:"GET_STATUS",
53 sessionId:a.m,seqNum:co(a.l),get_status:["wifiSnr","wifiSpeed"]})};var oy=function(a,b,c,d){this.G=b.si;this.J={extVersion:chrome.runtime.getManifest().version,extChannel:"public",mirrorSettings:ir(a),sender:navigator.userAgent||"UNKNOWN",receiverProductName:b.kf};this.H=c;this.F=d;this.l=this.h=this.C=this.o=this.m=this.u=this.j=null;this.g=[]};oy.prototype.Bh=function(a){null!=this.h&&clearInterval(this.h);this.j=a;this.u=Date.now();this.h=setInterval(this.D.bind(this,a),9E5)};
54 oy.prototype.xi=function(){null!=this.h&&(clearInterval(this.h),this.h=null);if(null!=this.j){var a=this.D(this.j);this.j=null;return a}return Promise.resolve()};oy.prototype.ag=function(a,b){null==this.m&&(this.m=Date.now(),"function"===typeof a?this.o=a():"string"===typeof a&&(this.o=a),b&&"string"===typeof b.stack&&(this.C=b.stack))};
55 var yba=function(a,b){return(null==a.j?Promise.resolve():a.D(a.j)).then(function(){var c=b.map(function(d){d=py(a,d);var e=d.map(function(g){return g.qd}).filter(function(g){return null!=g}),f=["["];d.map(function(g){return g.bh}).forEach(function(g,h){0<h&&f.push(",");f.push(g)});f.push("]");return{qd:new Blob(e,{type:"application/gzip"}),bh:new Blob(f,{type:"application/json"})}});a.g=[];return c})};
56 oy.prototype.D=function(a){var b=this;if(null!=this.l)return this.l;var c=Ab(this.G).then(function(d){d={receiverVersion:d.Bg,receiverConnected:d.h,receiverOnEthernet:d.g,receiverHasUpdatePending:d.j,receiverUptimeSeconds:d.l};Object.assign(d,b.J);var e=Date.now();Object.assign(d,{startTime:b.u,endTime:e,activity:dy(a),receiverWifiStatus:Array.from(b.F.h)});b.u=e;null!=b.m&&(Object.assign(d,{streamingErrorTime:b.m,streamingErrorMessage:b.o,streamingErrorCause:b.C}),b.m=null,b.o=null,b.C=null);return d});
57 return(this.l=Promise.all([c.then(function(d){return kba(a,d)}),c,lba(a)]).then(function(d){var e=n(d);d=e.next().value;var f=e.next().value;e=e.next().value;b.g.push({qd:d,bh:new Blob([JSON.stringify(Object.assign({tags:f},e))],{type:"application/json"})});b.g=py(b,b.H);b.l=null}))||Promise.resolve()};
58 var py=function(a,b){b-=2;for(var c=[],d=a.g.length-1;0<=d;--d){b-=a.g[d].bh.size+1;if(0>b)break;c.push({qd:null,bh:a.g[d].bh});if(null!=a.g[d].qd){var e=a.g[d].qd.size;b>=e&&(c[c.length-1].qd=a.g[d].qd,b-=e)}}return c.reverse()};var qy=function(a,b,c,d){d=void 0===d?null:d;Ak.call(this,b);var e=b.Sb;this.D=e.sessionId;this.G=a;this.M=d;this.s=fb("mr.mirror.cast.Session");this.o=new Ux;this.m=new bo("mirror.cast.SeqNumGenerator");this.l=new Mx(b.id);this.u=new ly(e,this.G,this.m,this.l,this.M);this.C=null;this.g=new oy(a,e,c,new my(this.D,this.m,this.l));this.F=null};r(qy,Ak);k=qy.prototype;
59 k.start=function(a){var b=this;return Wx(this.o,1,function(c){var d=yx();return b.u.start(a,b).then(function(){b.u.j.G&&(b.g.F.start(),zba(b));d.end();b.F=zx();Yx(c,2);return b})})};k.stop=function(){var a=this;return Xx(this.o,function(b){a.F&&(a.F.end(),a.F=null);a.g.F.stop();return a.u.stop().then(function(){return a.C?a.C.ke():Promise.resolve()}).then(function(){a.C=null;Yx(b,4)})})};
60 k.Er=function(){var a=this,b={sessionId:this.D,seqNum:co(this.m),type:"PRESENTATION",icons:[],title:yk(this.Vc)};this.s.info("Sending session metadata update to receiver: "+this.D);this.l.sendMessage(b).catch(function(c){a.s.L("Failed to send activity to sink: "+c.message)})};k.Bh=function(a){this.g.Bh(a)};k.xi=function(){return this.g.xi()};k.ag=function(a,b){this.g.ag(a,b);this.s.error(a,b);this.stop()};
61 var ry=function(a,b){return yba(a.g,b)},zba=function(a){Aba(a).then(function(b){(b.g||[]).includes("video")?Bba(a,b):a.s.L(function(){return"Receiver incapable of Media Remoting: "+JSON.stringify(b)})}).catch(function(b){a.s.L("None/Invalid capabilites response. Media Remoting disabled.",b)})},Aba=function(a){return new Promise(function(b,c){var d={type:"GET_CAPABILITIES",sessionId:a.D,seqNum:co(a.m)};a.s.info(function(){return"Sending GET_CAPABILITIES message: "+JSON.stringify(d)});Tx(a.l,d,"CAPABILITIES_RESPONSE",
62 3E4,function(e,f){if(null==e)return c(f),!0;if("ok"!=e.result||!e.capabilities)return c(Error("Bad response: "+JSON.stringify(e))),!0;if(e.h!=d.seqNum)return a.s.info(function(){return"Ignoring CAPABILITIES_RESPONSE with different seqNum: "+JSON.stringify(e)}),!1;a.s.va(function(){return"Received CAPABILITIES_RESPONSE: "+JSON.stringify(e)});b(e.capabilities);return!0})})},Bba=function(a,b){Wx(a.o,2,function(c){var d=a.h.Sb.kf||"<UNKNOWN>";if(!d.startsWith("Chromecast")&&!d.startsWith("Eureka Dongle"))return a.s.L('HACK: Media Remoting disabled because the receiver model--"'+
63 (d+'" according to discovery--is not a Chromecast.')),Yx(c),Promise.resolve();a.C=new gy(a.h,b,a.G,a.m,a.l,a.M);return a.C.initialize(a.O.bind(a),a).catch(function(e){a.s.error("Media Remoting start failed: "+e.message,e)}).then(function(){return Yx(c)})})};
64 qy.prototype.O=function(){var a=this;return Wx(this.o,2,function(b){return new Promise(function(c,d){wba(a.u).then(function(){Yx(b,3);a.H=!0;qk(a);c(a.W.bind(a))}).catch(function(e){a.ag("Failed to suspend MediaStreamer before starting remoting",e);d(e)})})})};
65 qy.prototype.W=function(){var a=this;return Wx(this.o,3,function(b){return new Promise(function(c,d){a.u.resume().then(function(){Yx(b,2);a.H=!1;qk(a);c()}).catch(function(e){a.ag("Failed resume MediaStreamer after ending remoting mode",e);d(e)})})})};var sy=function(){ok.call(this,"cast_streaming");this.m=this.F=this.J=this.H=this.l=null;this.ga=this.M="";this.ja=this.u=!1;this.pa=this.Ia.bind(this);this.O=this.W=this.aa=this.ba=this.o=null};r(sy,ok);k=sy.prototype;k.Dh=function(a){this.u=a||!1;this.ja=!0};k.getName=function(){return"cast_streaming"};
66 k.Zg=function(a,b,c,d,e){var f=this;if(!this.u)return ok.prototype.Zg.call(this,a,b,c,d,e);this.K.info("Start mirroring on route "+a.id);if(!this.ja)return Bj(Error("Not initialized"));var g=new Promise(function(h,m){f.C().then(function(){if(mk(b)&&c.shouldCaptureVideo)return Tj(!1).then(function(p){f.ga=p})}).then(function(){return e?e(a).promise:a}).then(function(p){f.M=b;Cba(f,p);var t=f.H.createInterfacePtrAndBind(),y=f.J.createInterfacePtrAndBind(),A=Dba(p,c);Eba(f,p,b,d);if(!f.l)throw new Fj("Error to get mirroring service host");
67 f.F=new mojo.MirroringCastMessageChannelPtr;f.ba=yx();f.l.start(A,t,y,mojo.makeRequest(f.F));f.o=new Ak(a,f.j.pq.bind(f.j));qk(f.o);Fba(f,p,b);f.W=function(){return h(p)};f.O=m}).catch(function(p){f.K.error("Mirroring launch error: "+p);f.Ug(void 0===p.reason?9:p.reason);m(p)})});return Cj(g)};k.ej=function(a,b){return new qy(a,b,20969472,null)};k.ji=function(){Ax(0)};k.gi=function(){Ax(1)};k.Mj=function(){Ax(2)};k.hi=function(){Kb("MediaRouter.CastStreaming.Session.End")};
68 k.Ug=function(a){Mb("MediaRouter.CastStreaming.Start.Failure",a,Ej)};k.ii=function(){Kb("MediaRouter.CastStreaming.Stream.End")};
69 k.el=function(a){var b=this;return this.u?Promise.resolve():(new Promise(function(c){return chrome.metricsPrivate.getIsCrashReportingEnabled(c)})).then(function(c){var d=c&&Raa(),e=[9351424];d&&e.push(20969472);return ry(a,e).then(function(f){var g=f[f.length-1];f=bn(f[0].qd).catch(function(h){b.K.error("Failed to persist events Blob.",h)});d&&0<g.qd.size?Cx(g.qd,void 0,b.yB.bind(b)):c&&Dx("stats.json",g.bh,void 0,void 0);return f})})};k.yB=function(a){if(a){a=Gx();var b=Date.now();a.g=b}};
70 k.kk=function(a){if(this.u)return ab();this.K.info("Received message to upload logs for "+a);return this.g?ry(this.g,[20969472]).then(function(b){b=n(b).next().value;return 0==b.qd.size?"":Cx(b.qd,a)}):Promise.resolve(Gba(this,a))};
71 var Gba=function(a,b){var c=window.localStorage.getItem("mr.temp.mirror.cast.Service.eventsBlob");if(null==c||1>c.length)c=null;else{for(var d=new Uint16Array(c.length),e=0;e<c.length;++e)d[e]=c.charCodeAt(e);c=d.buffer;d=(new Uint8Array(c,c.byteLength-1,1))[0];c=new Uint8Array(c,0,c.byteLength-(0==d?2:1));c=new Blob([c],{type:"application/gzip"})}if(null!=c&&0!=c.size)return bn(new Blob),a.K.info("Uploading saved logs for feedback."),Cx(c,b)};k=sy.prototype;
72 k.onError=function(a){this.O&&(this.O(a),this.W=this.O=null,this.Ug(9));this.K.info("Mirroring service error: "+a);this.C()};k.didStart=function(){this.W&&(this.W(),this.W=this.O=null);this.ba&&(this.ba.end(),this.ba=null);this.aa=zx();lk(this.M)?this.ji():mk(this.M)?this.gi():jk(this.M)&&this.Mj()};k.didStop=function(){this.C()};k.send=function(a){if(this.m){var b=JSON.parse(a.jsonFormatData);this.K.va(function(){return"Sending message: "+JSON.stringify(b)});this.m.sendMessage(a.jsonFormatData,{namespace:a.messageNamespace})}};
73 k.AB=function(a){if(a&&(a.namespace_===mojo.MirroringWebRtcNamespace||a.namespace_===mojo.MirroringRemotingNamespace)&&this.F){var b=new mojo.MirroringCastMessage;b.messageNamespace=a.namespace_;"string"!==typeof a.data?this.K.info("Received non-string as JSON"):(b.jsonFormatData=a.data,this.F.send(b))}};
74 var Cba=function(a,b){a.H=new mojo.Binding(mojo.MirroringSessionObserver,a,null);a.J=new mojo.Binding(mojo.MirroringCastMessageChannel,a,null);a.m=nw(b.id);a.m.onMessage=a.AB.bind(a)},Dba=function(a,b){var c=new mojo.MirroringSessionParameters;c.receiverAddress=new mojo.IPAddress;c.receiverAddress.addressBytes=a.Sb.si.split(".").map(function(d){return parseInt(d,10)});c.receiverModelName=a.Sb.kf;a=Hba(a.mediaSource);c.targetPlayoutDelay=Iba(a);!b.shouldCaptureVideo||!b.shouldCaptureAudio||a&&"0"===
75 a.searchParams.get("streamingCaptureAudio")?c.type=b.shouldCaptureVideo?mojo.MirroringSessionType.VIDEO_ONLY:mojo.MirroringSessionType.AUDIO_ONLY:c.type=mojo.MirroringSessionType.AUDIO_AND_VIDEO;return c},Iba=function(a){if(!a)return null;a=Number(a.searchParams.get("streamingTargetPlayoutDelayMillis"));return isNaN(a)||0>=a?null:new mojo.TimeDelta({microseconds:1E3*a})},Hba=function(a){if(!a)return null;try{return new URL(a)}catch(b){return null}},Eba=function(a,b,c,d){a.l=new mojo.MirroringServiceHostPtr;
76 b=b.Sb.tabId||-1;lk(c)?a.j.getMirroringServiceHostForTab(b,mojo.makeRequest(a.l)):mk(c)?a.j.getMirroringServiceHostForDesktop(-1,a.ga,mojo.makeRequest(a.l)):jk(c)?(b=new mojo.Url,b.url=c,a.j.getMirroringServiceHostForOffscreenTab(b,d||"",mojo.makeRequest(a.l))):a.l=null},Fba=function(a,b,c){lk(c)&&!chrome.tabs.onUpdated.hasListener(a.pa)&&chrome.tabs.onUpdated.addListener(a.pa);(lk(c)||jk(c))&&tk(a.o,b.Sb.tabId)};sy.prototype.Ia=function(a,b,c){ik(14);this.o&&vk(this.o,a,b,c)};
77 sy.prototype.C=function(){chrome.tabs.onUpdated.removeListener(this.pa);return this.u?this.ja?this.l?(this.l.ptr.reset(),this.F=this.l=null,this.m&&this.m.dispose(),this.m=null,this.H&&(this.H.close(),this.H=null),this.J&&(this.J.close(),this.J=null),uk(this.j,this.o.h.id),this.o=null,this.ga=this.M="",this.aa&&(this.aa.end(),this.aa=null),this.hi(),Promise.resolve(!0)):Promise.resolve(!1):Promise.reject("Not initialized"):ok.prototype.C.call(this)};
78 sy.prototype.wi=function(a,b,c,d,e,f){return this.u?Bj(Error("Mirroring service does not support updating stream")):ok.prototype.wi.call(this,a,b,c,d,e,f)};sy.prototype.send=sy.prototype.send;sy.prototype.didStop=sy.prototype.didStop;sy.prototype.didStart=sy.prototype.didStart;sy.prototype.onError=sy.prototype.onError;var Jba=new sy;fk("mr.mirror.cast.Service",Jba);