receiver.js 2.41 KB
/*
 * ADOBE CONFIDENTIAL
 * __________________
 *
 *  Copyright 2016 Adobe Systems Incorporated
 *  All Rights Reserved.
 *
 * NOTICE:  All information contained herein is, and remains
 * the property of Adobe Systems Incorporated and its suppliers,
 * if any.  The intellectual and technical concepts contained
 * herein are proprietary to Adobe Systems Incorporated and its
 * suppliers and are protected by trade secret or copyright law.
 * Dissemination of this information or reproduction of this material
 * is strictly forbidden unless prior written permission is obtained
 * from Adobe Systems Incorporated.
 */
/* globals location */
(function(window) {
    'use strict';

    var moduleName = 'screens/player/log/receiver';

    function currentOrigin() {
        var origin = location.origin;
        if (!origin) {
            origin = location.protocol + '//' + location.host;
        }

        return origin;
    }

    /**
     * This object allows to receive log messages from other windows
     * @param {string} allowedOrigin
     * @param {Logger.Writer} writer
     * @param [targetWindow] window to listen to
     * @constructor
     */
    function LogReceiver(writer, allowedOrigin, targetWindow) {
        var self = this;

        this._allowedOrigin = allowedOrigin || currentOrigin(); // default: origin of current frame
        this._writer = writer;
        this._targetWindow = targetWindow || window;

        this._targetWindow.addEventListener('message', function(event) {
            var origin = event.origin || event.originalEvent.origin; // For Chrome, the origin property is in the event.originalEvent object.
            if (origin !== self._allowedOrigin) {
                return;
            }

            var data = event.data;

            if (!data || data.module !== 'screens/player/log/writer/delegate') {
                return;
            }

            var message = data.message + ' [' + data.frame + ']'; // attach the frame to the message
            self._writer.write(event.data, event.level, message);

        }, false);
    }

    // register as a requirejs module if available
    /* istanbul ignore else  */
    if (typeof define === 'function') {
        define(moduleName, function() {
            return LogReceiver;
        });
    }

    window.screens = window.screens || {};
    window.screens.logger = window.screens.logger || {};
    window.screens.logger.receiver = LogReceiver;

}(this));