mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-04 13:07:52 +00:00
Bug 962736 - Update Shumway to version 0.8.6. r=till
This commit is contained in:
parent
732637c1d4
commit
fd5479d445
@ -37,18 +37,24 @@ const MAX_CLIPBOARD_DATA_SIZE = 8000;
|
||||
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
|
||||
Cu.import('resource://gre/modules/Services.jsm');
|
||||
Cu.import('resource://gre/modules/NetUtil.jsm');
|
||||
Cu.import('resource://gre/modules/Promise.jsm');
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'PrivateBrowsingUtils',
|
||||
'resource://gre/modules/PrivateBrowsingUtils.jsm');
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'AddonManager',
|
||||
'resource://gre/modules/AddonManager.jsm');
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'ShumwayTelemetry',
|
||||
'resource://shumway/ShumwayTelemetry.jsm');
|
||||
|
||||
let appInfo = Cc['@mozilla.org/xre/app-info;1'].getService(Ci.nsIXULAppInfo);
|
||||
let Svc = {};
|
||||
XPCOMUtils.defineLazyServiceGetter(Svc, 'mime',
|
||||
'@mozilla.org/mime;1', 'nsIMIMEService');
|
||||
|
||||
let StringInputStream = Cc["@mozilla.org/io/string-input-stream;1"];
|
||||
let MimeInputStream = Cc["@mozilla.org/network/mime-input-stream;1"];
|
||||
|
||||
function getBoolPref(pref, def) {
|
||||
try {
|
||||
return Services.prefs.getBoolPref(pref);
|
||||
@ -188,6 +194,32 @@ function isShumwayEnabledFor(actions) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function getVersionInfo() {
|
||||
var deferred = Promise.defer();
|
||||
var versionInfo = {
|
||||
geckoMstone : 'unknown',
|
||||
geckoBuildID: 'unknown',
|
||||
shumwayVersion: 'unknown'
|
||||
};
|
||||
try {
|
||||
versionInfo.geckoMstone = Services.prefs.getCharPref('gecko.mstone');
|
||||
versionInfo.geckoBuildID = Services.prefs.getCharPref('gecko.buildID');
|
||||
} catch (e) {
|
||||
log('Error encountered while getting platform version info:', e);
|
||||
}
|
||||
try {
|
||||
var addonId = "shumway@research.mozilla.org";
|
||||
AddonManager.getAddonByID(addonId, function(addon) {
|
||||
versionInfo.shumwayVersion = addon ? addon.version : 'n/a';
|
||||
deferred.resolve(versionInfo);
|
||||
});
|
||||
} catch (e) {
|
||||
log('Error encountered while getting Shumway version info:', e);
|
||||
deferred.resolve(versionInfo);
|
||||
}
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function fallbackToNativePlugin(window, userAction, activateCTP) {
|
||||
var obj = window.frameElement;
|
||||
var doc = obj.ownerDocument;
|
||||
@ -366,7 +398,7 @@ ChromeActions.prototype = {
|
||||
});
|
||||
},
|
||||
fallback: function(automatic) {
|
||||
automatic = !!automatic; // cast to boolean
|
||||
automatic = !!automatic;
|
||||
fallbackToNativePlugin(this.window, !automatic, automatic);
|
||||
},
|
||||
setClipboard: function (data) {
|
||||
@ -432,6 +464,28 @@ ChromeActions.prototype = {
|
||||
break;
|
||||
}
|
||||
},
|
||||
reportIssue: function(exceptions) {
|
||||
var base = "http://shumway-issue-reporter.paas.allizom.org/input?";
|
||||
var windowUrl = this.window.parent.wrappedJSObject.location + '';
|
||||
var params = 'url=' + encodeURIComponent(windowUrl);
|
||||
params += '&swf=' + encodeURIComponent(this.url);
|
||||
getVersionInfo().then(function (versions) {
|
||||
params += '&ffbuild=' + encodeURIComponent(versions.geckoMstone + ' (' +
|
||||
versions.geckoBuildID + ')');
|
||||
params += '&shubuild=' + encodeURIComponent(versions.shumwayVersion);
|
||||
}).then(function () {
|
||||
var postDataStream = StringInputStream.
|
||||
createInstance(Ci.nsIStringInputStream);
|
||||
postDataStream.data = 'exceptions=' + encodeURIComponent(exceptions);
|
||||
var postData = MimeInputStream.createInstance(Ci.nsIMIMEInputStream);
|
||||
postData.addHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
postData.addContentLength = true;
|
||||
postData.setData(postDataStream);
|
||||
this.window.openDialog('chrome://browser/content', '_blank',
|
||||
'all,dialog=no', base + params, null, null,
|
||||
postData);
|
||||
}.bind(this));
|
||||
},
|
||||
externalCom: function (data) {
|
||||
if (!this.allowScriptAccess)
|
||||
return;
|
||||
@ -459,6 +513,9 @@ ChromeActions.prototype = {
|
||||
case 'unregister':
|
||||
return embedTag.__flash__unregisterCallback(data.functionName);
|
||||
}
|
||||
},
|
||||
getWindowUrl: function() {
|
||||
return this.window.parent.wrappedJSObject.location + '';
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -3875,6 +3875,13 @@ function createParsingContext(commitData) {
|
||||
command: 'complete',
|
||||
stats: stats
|
||||
});
|
||||
},
|
||||
onexception: function (e) {
|
||||
commitData({
|
||||
type: 'exception',
|
||||
message: e.message,
|
||||
stack: e.stack
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
@ -5813,7 +5820,7 @@ var readHeader = function readHeader($bytes, $stream, $, swfVersion, tagCode) {
|
||||
global['tagHandler'] = tagHandler;
|
||||
global['readHeader'] = readHeader;
|
||||
}(this));
|
||||
function readTags(context, stream, swfVersion, final, onprogress) {
|
||||
function readTags(context, stream, swfVersion, final, onprogress, onexception) {
|
||||
var tags = context.tags;
|
||||
var bytes = stream.bytes;
|
||||
var lastSuccessfulPosition;
|
||||
@ -5882,6 +5889,7 @@ function readTags(context, stream, swfVersion, final, onprogress) {
|
||||
}
|
||||
} catch (e) {
|
||||
if (e !== StreamNoDataError) {
|
||||
onexception && onexception(e);
|
||||
throw e;
|
||||
}
|
||||
stream.pos = lastSuccessfulPosition;
|
||||
@ -6041,7 +6049,7 @@ BodyParser.prototype = {
|
||||
finalBlock = progressInfo.bytesLoaded >= progressInfo.bytesTotal;
|
||||
}
|
||||
var readStartTime = performance.now();
|
||||
readTags(swf, stream, swfVersion, finalBlock, options.onprogress);
|
||||
readTags(swf, stream, swfVersion, finalBlock, options.onprogress, options.onexception);
|
||||
swf.parseTime += performance.now() - readStartTime;
|
||||
var read = stream.pos;
|
||||
buffer.removeHead(read);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1 +1,2 @@
|
||||
0.7.933
|
||||
0.8.6
|
||||
4728574
|
||||
|
@ -108,12 +108,17 @@ function runViewer() {
|
||||
parseSwf(movieUrl, movieParams, objectParams);
|
||||
|
||||
if (isOverlay) {
|
||||
document.getElementById('overlay').className = 'enabled';
|
||||
var fallbackDiv = document.getElementById('fallback');
|
||||
fallbackDiv.className = 'enabled';
|
||||
fallbackDiv.addEventListener('click', function(e) {
|
||||
fallback();
|
||||
e.preventDefault();
|
||||
});
|
||||
var reportDiv = document.getElementById('report');
|
||||
reportDiv.addEventListener('click', function(e) {
|
||||
reportIssue();
|
||||
e.preventDefault();
|
||||
});
|
||||
var fallbackMenu = document.getElementById('fallbackMenu');
|
||||
fallbackMenu.removeAttribute('hidden');
|
||||
fallbackMenu.addEventListener('click', fallback);
|
||||
@ -122,13 +127,14 @@ function runViewer() {
|
||||
showURLMenu.addEventListener('click', showURL);
|
||||
var inspectorMenu = document.getElementById('inspectorMenu');
|
||||
inspectorMenu.addEventListener('click', showInInspector);
|
||||
var reportMenu = document.getElementById('reportMenu');
|
||||
reportMenu.addEventListener('click', reportIssue);
|
||||
|
||||
document.getElementById('copyProfileMenu').addEventListener('click', copyProfile);
|
||||
}
|
||||
|
||||
function showURL() {
|
||||
var flashParams = JSON.parse(FirefoxCom.requestSync('getPluginParams', null));
|
||||
window.prompt("Copy to clipboard", flashParams.url);
|
||||
window.prompt("Copy to clipboard", movieUrl);
|
||||
}
|
||||
|
||||
function showInInspector() {
|
||||
@ -140,6 +146,26 @@ function showInInspector() {
|
||||
window.open(base + encodeURIComponent(movieUrl) + params);
|
||||
}
|
||||
|
||||
function reportIssue() {
|
||||
var duplicatesMap = Object.create(null);
|
||||
var prunedExceptions = [];
|
||||
avm2.exceptions.forEach(function(e) {
|
||||
var ident = e.source + e.message + e.stack;
|
||||
var entry = duplicatesMap[ident];
|
||||
if (!entry) {
|
||||
entry = duplicatesMap[ident] = {
|
||||
source: e.source,
|
||||
message: e.message,
|
||||
stack: e.stack,
|
||||
count: 0
|
||||
};
|
||||
prunedExceptions.push(entry);
|
||||
}
|
||||
entry.count++;
|
||||
});
|
||||
FirefoxCom.requestSync('reportIssue', JSON.stringify(prunedExceptions));
|
||||
}
|
||||
|
||||
function copyProfile() {
|
||||
function toArray(v) {
|
||||
var array = [];
|
||||
@ -236,6 +262,12 @@ function parseSwf(url, movieParams, objectParams) {
|
||||
FirefoxCom.requestSync('getCompilerSettings', null));
|
||||
enableVerifier.value = compilerSettings.verifier;
|
||||
|
||||
// init misc preferences
|
||||
turboMode.value = FirefoxCom.requestSync('getBoolPref', {pref: 'shumway.turboMode', def: false});
|
||||
hud.value = FirefoxCom.requestSync('getBoolPref', {pref: 'shumway.hud', def: false});
|
||||
forceHidpi.value = FirefoxCom.requestSync('getBoolPref', {pref: 'shumway.force_hidpi', def: false});
|
||||
dummyAnimation.value = FirefoxCom.requestSync('getBoolPref', {pref: 'shumway.dummyMode', def: false});
|
||||
|
||||
console.log("Compiler settings: " + JSON.stringify(compilerSettings));
|
||||
console.log("Parsing " + url + "...");
|
||||
function loaded() {
|
||||
|
@ -38,38 +38,50 @@ limitations under the License.
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
#fallback {
|
||||
#overlay {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#fallback.enabled {
|
||||
#overlay.enabled {
|
||||
display: block;
|
||||
position:fixed;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#report, #fallback {
|
||||
float: right;
|
||||
width: 70px; height: 16px;
|
||||
padding: 8px 4px 4px;
|
||||
color: white;
|
||||
right: 0px; bottom: 0px; width: 70px; height: 16px;
|
||||
padding: 4px;
|
||||
padding-top: 8px;
|
||||
background-color: rgba(0, 0, 0, 0.62);
|
||||
font: bold 10px sans-serif;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
}
|
||||
#report {
|
||||
display: none;
|
||||
width: 100px;
|
||||
}
|
||||
#overlay:hover #report {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#fallback .icon {
|
||||
display: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#fallback.enabled:hover .icon {
|
||||
#fallback:hover .icon {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#fallback:hover {
|
||||
background-color: rgb(0, 0, 0);
|
||||
#report:hover, #fallback:hover {
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 100px), screen and (max-height: 40px) {
|
||||
body.started #fallback {
|
||||
body.started #overlay {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@ -79,11 +91,15 @@ limitations under the License.
|
||||
<body contextmenu="shumwayMenu">
|
||||
<div id="viewer"></div>
|
||||
<section>
|
||||
<a id="fallback" href="#">Shumway <span class="icon">×</span></a>
|
||||
<div id="overlay">
|
||||
<a id="fallback" href="#">Shumway <span class="icon">×</span></a>
|
||||
<a id="report" href="#">Report Problems</a>
|
||||
</div>
|
||||
<menu type="context" id="shumwayMenu">
|
||||
<menuitem label="Show URL" id="showURLMenu"></menuitem>
|
||||
<menuitem label="Copy Profile" id="copyProfileMenu"></menuitem>
|
||||
<menuitem label="Open in Inspector" id="inspectorMenu"></menuitem>
|
||||
<menuitem label="Report Problems" id="reportMenu"></menuitem>
|
||||
<menuitem label="Fallback to Flash" id="fallbackMenu" hidden></menuitem>
|
||||
</menu>
|
||||
</section>
|
||||
|
Loading…
x
Reference in New Issue
Block a user