Skip to content

Commit

Permalink
fix: Enforce string-format of event data keys.
Browse files Browse the repository at this point in the history
Previously, many events were being defined with a data dictionary
that used variable-type keys (e.g. {key: value}). This worked fine
in uncompiled mode, but in compiled mode it lead to those properties
being obfuscated.
This changes the FakeEvent constructor to take a map rather than an
object, so the compiler will force the keys to be strings.

Closes shaka-project#3710

Change-Id: I67b1a391540a5ee21f0aaf940ae054d26f4c10a4
  • Loading branch information
theodab committed Oct 25, 2021
1 parent ff98844 commit dd3748d
Show file tree
Hide file tree
Showing 23 changed files with 237 additions and 252 deletions.
132 changes: 46 additions & 86 deletions lib/ads/client_side_ad_manager.js
Expand Up @@ -138,7 +138,7 @@ shaka.ads.ClientSideAdManager = class {
// Remove ad breaks from the timeline
this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.CUEPOINTS_CHANGED,
{'cuepoints': []}));
(new Map()).set('cuepoints', [])));
}


Expand All @@ -151,17 +151,14 @@ shaka.ads.ClientSideAdManager = class {

const now = Date.now() / 1000;
const loadTime = now - this.requestAdsStartTime_;
this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.ADS_LOADED,
{'loadTime': loadTime}));
this.onEvent_(new shaka.util.FakeEvent(shaka.ads.AdManager.ADS_LOADED,
(new Map()).set('loadTime', loadTime)));

this.imaAdsManager_ = e.getAdsManager(this.video_);

this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.IMA_AD_MANAGER_LOADED,
{
'imaAdManager': this.imaAdsManager_,
}));
(new Map()).set('imaAdManager', this.imaAdsManager_)));

const cuePointStarts = this.imaAdsManager_.getCuePoints();
if (cuePointStarts.length) {
Expand All @@ -176,9 +173,9 @@ shaka.ads.ClientSideAdManager = class {
cuePoints.push(shakaCuePoint);
}

this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.CUEPOINTS_CHANGED,
{'cuepoints': cuePoints}));
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.CUEPOINTS_CHANGED,
(new Map()).set('cuepoints', cuePoints)));
}

this.addImaEventListeners_();
Expand Down Expand Up @@ -228,6 +225,15 @@ shaka.ads.ClientSideAdManager = class {
* @private
*/
addImaEventListeners_() {
/**
* @param {!Event} e
* @param {string} type
*/
const convertEventAndSend = (e, type) => {
const data = (new Map()).set('originalEvent', e);
this.onEvent_(new shaka.util.FakeEvent(type, data));
};

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdErrorEvent.Type.AD_ERROR, (error) => {
this.onAdError_(/** @type {!google.ima.AdErrorEvent} */ (error));
Expand All @@ -245,30 +251,22 @@ shaka.ads.ClientSideAdManager = class {

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.FIRST_QUARTILE, (e) => {
this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_FIRST_QUARTILE,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_FIRST_QUARTILE);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.MIDPOINT, (e) => {
this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_MIDPOINT,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_MIDPOINT);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.THIRD_QUARTILE, (e) => {
this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_THIRD_QUARTILE,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_THIRD_QUARTILE);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.COMPLETE, (e) => {
this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_COMPLETE,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_COMPLETE);
});

this.eventManager_.listen(this.imaAdsManager_,
Expand All @@ -283,140 +281,102 @@ shaka.ads.ClientSideAdManager = class {

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.SKIPPED, (e) => {
this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_SKIPPED,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_SKIPPED);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.VOLUME_CHANGED, (e) => {
this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_VOLUME_CHANGED,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_VOLUME_CHANGED);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.VOLUME_MUTED, (e) => {
this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_MUTED,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_MUTED);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.PAUSED, (e) => {
goog.asserts.assert(this.ad_ != null, 'Ad should not be null!');
this.ad_.setPaused(true);
this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_PAUSED,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_PAUSED);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.RESUMED, (e) => {
goog.asserts.assert(this.ad_ != null, 'Ad should not be null!');
this.ad_.setPaused(false);
this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_RESUMED,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_RESUMED);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.SKIPPABLE_STATE_CHANGED, (e) => {
goog.asserts.assert(this.ad_ != null, 'Ad should not be null!');
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_SKIP_STATE_CHANGED,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_SKIP_STATE_CHANGED);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.CLICK, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_CLICKED,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_CLICKED);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.AD_PROGRESS, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_PROGRESS,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_PROGRESS);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.AD_BUFFERING, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_BUFFERING,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_BUFFERING);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.IMPRESSION, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_IMPRESSION,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_IMPRESSION);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.DURATION_CHANGE, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_DURATION_CHANGED,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_DURATION_CHANGED);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.USER_CLOSE, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_CLOSED,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_CLOSED);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.LOADED, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_LOADED,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_LOADED);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.ALL_ADS_COMPLETED, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.ALL_ADS_COMPLETED,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.ALL_ADS_COMPLETED);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.LINEAR_CHANGED, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_LINEAR_CHANGED,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_LINEAR_CHANGED);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.AD_METADATA, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_METADATA,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_METADATA);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.LOG, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_RECOVERABLE_ERROR,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_RECOVERABLE_ERROR);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.AD_BREAK_READY, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_BREAK_READY,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_BREAK_READY);
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.INTERACTION, (e) => {
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_INTERACTION,
{'originalEvent': e}));
convertEventAndSend(e, shaka.ads.AdManager.AD_INTERACTION);
});
}

Expand All @@ -430,12 +390,12 @@ shaka.ads.ClientSideAdManager = class {

const imaAd = e.getAd();
this.ad_ = new shaka.ads.ClientSideAd(imaAd, this.imaAdsManager_);
this.onEvent_(new shaka.util.FakeEvent(shaka.ads.AdManager.AD_STARTED,
{
'ad': this.ad_,
'sdkAdObject': imaAd,
'originalEvent': e,
}));
const data = new Map()
.set('ad', this.ad_)
.set('sdkAdObject', imaAd)
.set('originalEvent', e);
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.AD_STARTED, data));
if (this.ad_.isLinear()) {
this.adContainer_.setAttribute('ad-active', 'true');
this.video_.pause();
Expand All @@ -448,7 +408,7 @@ shaka.ads.ClientSideAdManager = class {
*/
onAdComplete_(e) {
this.onEvent_(new shaka.util.FakeEvent(shaka.ads.AdManager.AD_STOPPED,
{'originalEvent': e}));
(new Map()).set('originalEvent', e)));
if (this.ad_.isLinear()) {
this.adContainer_.removeAttribute('ad-active');
this.video_.play();
Expand Down
17 changes: 7 additions & 10 deletions lib/ads/server_side_ad_manager.js
Expand Up @@ -80,9 +80,7 @@ shaka.ads.ServerSideAdManager = class {

this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.IMA_STREAM_MANAGER_LOADED,
{
'imaStreamManager': this.streamManager_,
}));
(new Map()).set('imaStreamManager', this.streamManager_)));

// Events
this.eventManager_.listen(this.streamManager_,
Expand Down Expand Up @@ -309,7 +307,7 @@ shaka.ads.ServerSideAdManager = class {
}

this.onEvent_(new shaka.util.FakeEvent(shaka.ads.AdManager.AD_STARTED,
{'ad': this.ad_}));
(new Map()).set('ad', this.ad_)));
this.adContainer_.setAttribute('ad-active', 'true');
}

Expand All @@ -335,9 +333,8 @@ shaka.ads.ServerSideAdManager = class {
onLoaded_(e) {
const now = Date.now() / 1000;
const loadTime = now - this.streamRequestStartTime_;
this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.ADS_LOADED,
{'loadTime': loadTime}));
this.onEvent_(new shaka.util.FakeEvent(shaka.ads.AdManager.ADS_LOADED,
(new Map()).set('loadTime', loadTime)));

const streamData = e.getStreamData();
const url = streamData.url;
Expand Down Expand Up @@ -403,8 +400,8 @@ shaka.ads.ServerSideAdManager = class {

this.currentCuePoints_ = cuePoints;

this.onEvent_(
new shaka.util.FakeEvent(shaka.ads.AdManager.CUEPOINTS_CHANGED,
{'cuepoints': cuePoints}));
this.onEvent_(new shaka.util.FakeEvent(
shaka.ads.AdManager.CUEPOINTS_CHANGED,
(new Map()).set('cuepoints', cuePoints)));
}
};
5 changes: 3 additions & 2 deletions lib/cast/cast_proxy.js
Expand Up @@ -525,7 +525,8 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
goog.asserts.assert(error instanceof shaka.util.Error,
'Wrong error type!');
const eventType = shaka.Player.EventName.Error;
const event = new shaka.util.FakeEvent(eventType, {'detail': error});
const data = (new Map()).set('detail', error);
const event = new shaka.util.FakeEvent(eventType, data);
this.localPlayer_.dispatchEvent(event);
});
}
Expand Down Expand Up @@ -598,7 +599,7 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {

// Convert this real Event into a FakeEvent for dispatch from our
// FakeEventListener.
const fakeEvent = new shaka.util.FakeEvent(event.type, event);
const fakeEvent = shaka.util.FakeEvent.fromRealEvent(event);
this.videoEventTarget_.dispatchEvent(fakeEvent);
}

Expand Down
3 changes: 2 additions & 1 deletion lib/cast/cast_receiver.js
Expand Up @@ -407,7 +407,8 @@ shaka.cast.CastReceiver = class extends shaka.util.FakeEventTarget {
goog.asserts.assert(error instanceof shaka.util.Error,
'Wrong error type!');
const eventType = shaka.Player.EventName.Error;
const event = new shaka.util.FakeEvent(eventType, {'detail': error});
const data = (new Map()).set('detail', error);
const event = new shaka.util.FakeEvent(eventType, data);
// Only dispatch the event if the player still exists.
if (this.player_) {
this.player_.dispatchEvent(event);
Expand Down
4 changes: 2 additions & 2 deletions lib/cast/cast_sender.js
Expand Up @@ -647,7 +647,7 @@ shaka.cast.CastSender = class {
case 'event': {
const targetName = message['targetName'];
const event = message['event'];
const fakeEvent = new shaka.util.FakeEvent(event['type'], event);
const fakeEvent = shaka.util.FakeEvent.fromRealEvent(event);
this.onRemoteEvent_(targetName, fakeEvent);
break;
}
Expand Down Expand Up @@ -725,7 +725,7 @@ shaka.cast.CastSender = class {

// Dispatch it through the Player proxy
const fakeEvent = new shaka.util.FakeEvent(
'error', {'detail': shakaError});
'error', (new Map()).set('detail', shakaError));
this.onRemoteEvent_('player', fakeEvent);

// Force this session to disconnect and transfer playback to the local
Expand Down
12 changes: 5 additions & 7 deletions lib/hls/hls_parser.js
Expand Up @@ -420,18 +420,16 @@ shaka.hls.HlsParser = class {
const uri = tag.getAttributeValue('URI');
const language = tag.getAttributeValue('LANGUAGE');
const value = tag.getAttributeValue('VALUE');
const data = {
'id': id,
};
const data = (new Map()).set('id', id);
if (uri) {
data.uri =
shaka.hls.Utils.constructAbsoluteUri(this.masterPlaylistUri_, uri);
data.set('uri',
shaka.hls.Utils.constructAbsoluteUri(this.masterPlaylistUri_, uri));
}
if (language) {
data.language = language;
data.set('language', language);
}
if (value) {
data.value = value;
data.set('value', value);
}
const event = new shaka.util.FakeEvent('sessiondata', data);
if (this.playerInterface_) {
Expand Down

0 comments on commit dd3748d

Please sign in to comment.