(function () {
    if (window !== window.top)
        return;

    var origin = location.origin;

    // NOTE: location.origin doesn't exist in IE11 on Windows 10.10240 LTSB
    if (!origin)
        origin = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '');

    var testRunId            = {{{testRunId}}};
    var browserId            = {{{browserId}}};
    var selectorTimeout      = {{{selectorTimeout}}};
    var pageLoadTimeout      = {{{pageLoadTimeout}}};
    var retryTestPages       = {{{retryTestPages}}};
    var speed                = {{{speed}}};
    var browserHeartbeatUrl  = origin + {{{browserHeartbeatRelativeUrl}}};
    var browserStatusUrl     = origin + {{{browserStatusRelativeUrl}}};
    var browserStatusDoneUrl = origin + {{{browserStatusDoneRelativeUrl}}};
    var skipJsErrors         = {{{skipJsErrors}}};
    var dialogHandler        = {{{dialogHandler}}};
    var userAgent            = {{{userAgent}}};
    var fixtureName          = {{{fixtureName}}};
    var testName             = {{{testName}}};

    var ClientDriver = window['%testCafeDriver%'];
    var driver       = new ClientDriver(testRunId,
        { heartbeat: browserHeartbeatUrl, status: browserStatusUrl, statusDone: browserStatusDoneUrl },
        { userAgent: userAgent, fixtureName: fixtureName, testName: testName },
        {
            selectorTimeout: selectorTimeout,
            pageLoadTimeout: pageLoadTimeout,
            skipJsErrors:    skipJsErrors,
            dialogHandler:   dialogHandler,
            retryTestPages:  retryTestPages,
            speed:           speed
        }
    );

    Object.defineProperty(window, '%testCafeDriverInstance%', {
        configurable: true,
        value:        driver
    });

    driver.start();
})();
