зеркало из https://github.com/mozilla/gecko-dev.git
191 строка
6.0 KiB
JavaScript
191 строка
6.0 KiB
JavaScript
/*
|
|
* Copyright 2013 Mozilla Foundation
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
var release = true;
|
|
var SHUMWAY_ROOT = "resource://shumway/";
|
|
|
|
var viewerPlayerglobalInfo = {
|
|
abcs: SHUMWAY_ROOT + "playerglobal/playerglobal.abcs",
|
|
catalog: SHUMWAY_ROOT + "playerglobal/playerglobal.json"
|
|
};
|
|
|
|
var avm2Root = SHUMWAY_ROOT + "avm2/";
|
|
var builtinPath = avm2Root + "generated/builtin/builtin.abc";
|
|
|
|
window.print = function(msg) {
|
|
console.log(msg);
|
|
};
|
|
|
|
function runSwfPlayer(flashParams) {
|
|
var EXECUTION_MODE = Shumway.AVM2.Runtime.ExecutionMode;
|
|
|
|
var compilerSettings = flashParams.compilerSettings;
|
|
var sysMode = compilerSettings.sysCompiler ? EXECUTION_MODE.COMPILE : EXECUTION_MODE.INTERPRET;
|
|
var appMode = compilerSettings.appCompiler ? EXECUTION_MODE.COMPILE : EXECUTION_MODE.INTERPRET;
|
|
var asyncLoading = true;
|
|
var baseUrl = flashParams.baseUrl;
|
|
var objectParams = flashParams.objectParams;
|
|
var movieUrl = flashParams.url;
|
|
|
|
Shumway.frameRateOption.value = flashParams.turboMode ? 60 : -1;
|
|
Shumway.AVM2.Verifier.enabled.value = compilerSettings.verifier;
|
|
|
|
Shumway.createAVM2(builtinPath, viewerPlayerglobalInfo, sysMode, appMode, function (avm2) {
|
|
function runSWF(file) {
|
|
var player = new Shumway.Player.Window.WindowPlayer(window, window.parent);
|
|
player.defaultStageColor = flashParams.bgcolor;
|
|
player.movieParams = flashParams.movieParams;
|
|
player.stageAlign = (objectParams && (objectParams.salign || objectParams.align)) || '';
|
|
player.stageScale = (objectParams && objectParams.scale) || 'showall';
|
|
player.displayParameters = flashParams.displayParameters;
|
|
|
|
Shumway.ExternalInterfaceService.instance = player.createExternalInterfaceService();
|
|
|
|
player.load(file);
|
|
}
|
|
Shumway.FileLoadingService.instance.setBaseUrl(baseUrl);
|
|
if (asyncLoading) {
|
|
runSWF(movieUrl);
|
|
} else {
|
|
new Shumway.BinaryFileReader(movieUrl).readAll(null, function(buffer, error) {
|
|
if (!buffer) {
|
|
throw "Unable to open the file " + movieUrl + ": " + error;
|
|
}
|
|
runSWF(movieUrl, buffer);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
var LOADER_WORKER_PATH = SHUMWAY_ROOT + 'web/worker.js';
|
|
|
|
function setupServices() {
|
|
Shumway.Telemetry.instance = {
|
|
reportTelemetry: function (data) {
|
|
window.parent.postMessage({
|
|
callback: 'reportTelemetry',
|
|
data: data
|
|
}, '*');
|
|
}
|
|
};
|
|
|
|
Shumway.ClipboardService.instance = {
|
|
setClipboard: function (data) {
|
|
window.parent.postMessage({
|
|
callback: 'setClipboard',
|
|
data: data
|
|
}, '*');
|
|
}
|
|
};
|
|
|
|
Shumway.FileLoadingService.instance = {
|
|
baseUrl: null,
|
|
nextSessionId: 1, // 0 - is reserved
|
|
sessions: [],
|
|
createSession: function () {
|
|
var sessionId = this.nextSessionId++;
|
|
return this.sessions[sessionId] = {
|
|
open: function (request) {
|
|
var self = this;
|
|
var path = Shumway.FileLoadingService.instance.resolveUrl(request.url);
|
|
console.log('Session #' + sessionId + ': loading ' + path);
|
|
window.parent.postMessage({
|
|
callback: 'loadFileRequest',
|
|
data: {url: path, method: request.method,
|
|
mimeType: request.mimeType, postData: request.data,
|
|
checkPolicyFile: request.checkPolicyFile, sessionId: sessionId}
|
|
}, '*');
|
|
},
|
|
notify: function (args) {
|
|
switch (args.topic) {
|
|
case "open":
|
|
this.onopen();
|
|
break;
|
|
case "close":
|
|
this.onclose();
|
|
Shumway.FileLoadingService.instance.sessions[sessionId] = null;
|
|
console.log('Session #' + sessionId + ': closed');
|
|
break;
|
|
case "error":
|
|
this.onerror && this.onerror(args.error);
|
|
break;
|
|
case "progress":
|
|
console.log('Session #' + sessionId + ': loaded ' + args.loaded + '/' + args.total);
|
|
this.onprogress && this.onprogress(args.array, {bytesLoaded: args.loaded, bytesTotal: args.total});
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
},
|
|
setBaseUrl: function (url) {
|
|
Shumway.FileLoadingService.instance.baseUrl = url;
|
|
},
|
|
resolveUrl: function (url) {
|
|
return new URL(url, Shumway.FileLoadingService.instance.baseUrl).href;
|
|
},
|
|
navigateTo: function (url, target) {
|
|
window.parent.postMessage({
|
|
callback: 'navigateTo',
|
|
data: {
|
|
url: this.resolveUrl(url),
|
|
target: target
|
|
}
|
|
}, '*');
|
|
}
|
|
};
|
|
|
|
// Using SpecialInflate when chrome code provides it.
|
|
if (parent.createSpecialInflate) {
|
|
window.SpecialInflate = function () {
|
|
return parent.createSpecialInflate();
|
|
};
|
|
}
|
|
|
|
// Using createRtmpXHR/createRtmpSocket when chrome code provides it.
|
|
if (parent.createRtmpXHR) {
|
|
window.createRtmpSocket = parent.createRtmpSocket;
|
|
window.createRtmpXHR = parent.createRtmpXHR;
|
|
}
|
|
}
|
|
|
|
window.addEventListener('message', function onWindowMessage(e) {
|
|
var data = e.data;
|
|
if (typeof data !== 'object' || data === null) {
|
|
return;
|
|
}
|
|
switch (data.type) {
|
|
case "loadFileResponse":
|
|
var args = data.args;
|
|
var session = Shumway.FileLoadingService.instance.sessions[args.sessionId];
|
|
if (session) {
|
|
session.notify(args);
|
|
}
|
|
break;
|
|
case "runSwf":
|
|
if (data.settings) {
|
|
Shumway.Settings.setSettings(data.settings);
|
|
}
|
|
setupServices();
|
|
runSwfPlayer(data.flashParams);
|
|
|
|
document.body.style.backgroundColor = 'green';
|
|
window.parent.postMessage({
|
|
callback: 'started'
|
|
}, '*');
|
|
break;
|
|
}
|
|
}, true);
|