"use strict"
function debug(s){}
const Cc=Components.classes;const Ci=Components.interfaces;const Cu=Components.utils;Cu.import("resource://gre/modules/XPCOMUtils.jsm");Cu.import("resource://gre/modules/Services.jsm");Cu.import("resource://gre/modules/Promise.jsm");try{if(Services.prefs.getBoolPref("dom.apps.customization.enabled")){Cu.import("resource://gre/modules/UserCustomizations.jsm");}}catch(e){}
const APPS_SERVICE_CID=Components.ID("{05072afa-92fe-45bf-ae22-39b69c117058}");function AppsService()
{debug("AppsService Constructor");this.inParent=Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).processType==Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;debug("inParent: "+this.inParent);Cu.import(this.inParent?"resource://gre/modules/Webapps.jsm":"resource://gre/modules/AppsServiceChild.jsm");}
AppsService.prototype={getManifestCSPByLocalId:function getCSPByLocalId(localId){debug("GetManifestCSPByLocalId( "+localId+" )");return DOMApplicationRegistry.getManifestCSPByLocalId(localId);},getDefaultCSPByLocalId:function getCSPByLocalId(localId){debug("GetDefaultCSPByLocalId( "+localId+" )");return DOMApplicationRegistry.getDefaultCSPByLocalId(localId);},getAppByManifestURL:function getAppByManifestURL(aManifestURL){debug("GetAppByManifestURL( "+aManifestURL+" )");return DOMApplicationRegistry.getAppByManifestURL(aManifestURL);},getManifestFor:function getManifestFor(aManifestURL){debug("getManifestFor("+aManifestURL+")");if(this.inParent){return DOMApplicationRegistry.getManifestFor(aManifestURL);}else{return Promise.reject(new Error("Calling getManifestFor() from child is not supported"));}},getAppLocalIdByManifestURL:function getAppLocalIdByManifestURL(aManifestURL){debug("getAppLocalIdByManifestURL( "+aManifestURL+" )");return DOMApplicationRegistry.getAppLocalIdByManifestURL(aManifestURL);},getAppLocalIdByStoreId:function getAppLocalIdByStoreId(aStoreId){debug("getAppLocalIdByStoreId( "+aStoreId+" )");return DOMApplicationRegistry.getAppLocalIdByStoreId(aStoreId);},getAppByLocalId:function getAppByLocalId(aLocalId){debug("getAppByLocalId( "+aLocalId+" )");return DOMApplicationRegistry.getAppByLocalId(aLocalId);},getManifestURLByLocalId:function getManifestURLByLocalId(aLocalId){debug("getManifestURLByLocalId( "+aLocalId+" )");return DOMApplicationRegistry.getManifestURLByLocalId(aLocalId);},getCoreAppsBasePath:function getCoreAppsBasePath(){debug("getCoreAppsBasePath()");return DOMApplicationRegistry.getCoreAppsBasePath();},getWebAppsBasePath:function getWebAppsBasePath(){debug("getWebAppsBasePath()");return DOMApplicationRegistry.getWebAppsBasePath();},getAppInfo:function getAppInfo(aAppId){debug("getAppInfo()");return DOMApplicationRegistry.getAppInfo(aAppId);},getRedirect:function getRedirect(aLocalId,aURI){debug("getRedirect for "+aLocalId+" "+aURI.spec);if(aLocalId==Ci.nsIScriptSecurityManager.NO_APP_ID||aLocalId==Ci.nsIScriptSecurityManager.UNKNOWN_APP_ID){return null;}
let app=DOMApplicationRegistry.getAppByLocalId(aLocalId);if(app&&app.redirects){let spec=aURI.spec;for(let i=0;i<app.redirects.length;i++){let redirect=app.redirects[i];if(spec.startsWith(redirect.from)){
let to=app.origin+redirect.to;
let index=-1;index=spec.indexOf('?');if(index==-1){index=spec.indexOf('#');}
if(index!=-1){to+=spec.substring(index);}
debug('App specific redirection from '+spec+' to '+to);return Services.io.newURI(to,null,null);}}}
return null;},classID:APPS_SERVICE_CID,QueryInterface:XPCOMUtils.generateQI([Ci.nsIAppsService])}
this.NSGetFactory=XPCOMUtils.generateNSGetFactory([AppsService])