delegate.js 2.33 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/writer/delegate';

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

        return origin;
    }

    /**
     * This writer will delegate to its parent window
     * assuming the parent takes care of further processing
     * @param {string} [targetOrigin] origin to be referenced for messaging, default is the current origin
     * @param {Window} [target] target window, default is parent
     * @constructor
     */
    function DelegateWriter(targetOrigin, target) {
        this._targetOrigin = targetOrigin || currentOrigin(); // default: origin of current frame
        this._targetWindow = target || window.parent;
    }

    /**
     *
     * @param {date} date
     * @param {Logger.LEVEL} level
     * @param {string} message
     */
    DelegateWriter.prototype.write = function(date, level, message) {
        this._targetWindow.postMessage({
            module: moduleName,
            frame: location.href,
            date: date,
            level: level,
            message: message
        }, this._targetOrigin);
    };

    DelegateWriter.MODULE_NAME = moduleName;

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

    window.screens = window.screens || {};
    window.screens.logger = window.screens.logger || {};
    window.screens.logger.writer = window.screens.logger.writer || {};
    window.screens.logger.writer.delegate = DelegateWriter;

}(this));