Bug 766808 - Resolve icon urls for apps using relative urls. r=mfinkle

This commit is contained in:
Wes Johnston 2012-07-09 17:54:40 -07:00
parent 52c0fe6ac0
commit 3cf70e4ab5
2 changed files with 31 additions and 7 deletions

View File

@ -44,7 +44,8 @@ function onLoad(aEvent) {
AppsUI.shortcut = contextmenus.add(gStrings.GetStringFromName("appsContext.shortcut"), contextmenus.SelectorContext("div[mozApp]"),
function(aTarget) {
let manifest = aTarget.manifest;
gChromeWin.WebappsUI.createShortcut(manifest.name, manifest.fullLaunchPath(), gChromeWin.WebappsUI.getBiggestIcon(manifest.icons), "webapp");
let origin = Services.io.newURI(app.origin, null, null);
gChromeWin.WebappsUI.createShortcut(manifest.name, manifest.fullLaunchPath(), gChromeWin.WebappsUI.getBiggestIcon(manifest.icons, origin), "webapp");
});
AppsUI.uninstall = contextmenus.add(gStrings.GetStringFromName("appsContext.uninstall"), contextmenus.SelectorContext("div[mozApp]"),
function(aTarget) {
@ -97,7 +98,8 @@ function addApplication(aApp) {
container.setAttribute("title", manifest.name);
let img = document.createElement("img");
img.src = gChromeWin.WebappsUI.getBiggestIcon(manifest.icons);
let origin = Services.io.newURI(aApp.origin, null, null);
img.src = gChromeWin.WebappsUI.getBiggestIcon(manifest.icons, origin);
img.setAttribute("title", manifest.name);
let title = document.createElement("div");

View File

@ -5851,7 +5851,7 @@ var WebappsUI = {
// Add a homescreen shortcut -- we can't use createShortcut, since we need to pass
// a unique ID for Android webapp allocation
this.makeBase64Icon(this.getBiggestIcon(manifest.icons),
this.makeBase64Icon(this.getBiggestIcon(manifest.icons, Services.io.newURI(data.origin, null, null)),
function(icon) {
sendMessageToJava({
gecko: {
@ -5888,15 +5888,37 @@ var WebappsUI = {
}
},
getBiggestIcon: function getBiggestIcon(aIcons) {
getBiggestIcon: function getBiggestIcon(aIcons, aOrigin) {
const DEFAULT_ICON = "chrome://browser/skin/images/default-app-icon.png";
if (!aIcons)
return "chrome://browser/skin/images/default-app-icon.png";
return DEFAULT_ICON;
let iconSizes = Object.keys(aIcons);
if (iconSizes.length == 0)
return "chrome://browser/skin/images/default-app-icon.png";
return DEFAULT_ICON;
iconSizes.sort(function(a, b) a - b);
return aIcons[iconSizes.pop()];
let biggestIcon = aIcons[iconSizes.pop()];
let iconURI = null;
try {
iconURI = Services.io.newURI(biggestIcon, null, null);
if (iconURI.scheme == "data") {
return iconURI.spec;
}
} catch (ex) {
// we don't have a biggestIcon or its not a valid url
}
// if we have an origin, try to resolve biggestIcon as a relative url
if (!iconURI && aOrigin) {
try {
iconURI = Services.io.newURI(aOrigin.resolve(biggestIcon), null, null);
} catch (ex) {
console.log("Could not resolve url: " + aOrigin.spec + " " + biggestIcon + " - " + ex);
}
}
return iconURI ? iconURI.spec : DEFAULT_ICON;
},
doInstall: function doInstall(aData) {