On Monday, June 24, 2013 at 7:48 PM, Jonas Sicking wrote:

>  
> My thinking was to use some sort of versioned manifest for now, as long as we 
> only use it in prefixed mozApps.install.
>  
>  
> Once we switch to an unprefixed function, we also need to use a standardized 
> manifest and forever maintain compatibility with that manifest format.

Ok, here is a shot at this to get the ball rolling… Below is a quick straw 
person Mounir and I put together over IRC.  

In order to limit potential issues with breaking changes in the FxOS manifest 
going forward, as well as to provide us with a way to add new (non-backwards 
compatible) features through the FxOS manifest format, it was proposed that a 
versioning scheme be introduced. It is assumed that the user agent will 
continue to support legacy content indefinitely (that is, all V1 content going 
forward).   

# The `manifest_version` member  
The `manifest_version` member denotes the manifest version used by the 
application. It's type is expected to be a non-negative integer greater than 0. 
  

Notes on the type: ECMAScript's ToNumber() algorithm is used to perform the 
conversion from JSON, hence the following are all valid and equivelent: "2", "  
2  ", 2, [2].  

## example of usage
{
...
"manifest_version": 2
...
}

##Authoring guidance and validation
Unless version specific members are included in the manifest, it is optional 
for a developer to include the `manifest_version` member. When the member is 
missing, the user agent assumes the value to be 1. However, if version specific 
members are included in the manifest, and the `manifest_version` is missing or 
in error, then members that rely on `manifest_version` to have some effect will 
be ignored by the user agent.   

A manifest validator must validate that `manifest_version` contains a 
non-negative integer greater than 0.    

Note: Future versions of FxOS may require the `manifest_version` member to be 
present in a manifest, and to be set to at least the number 2 (e.g., if some 
future member becomes required for security reasons). However, legacy content 
should continue to work and offending members may end up being ignored by the 
user agent.   

## Steps to determine the version number
The following steps take a JSON-parsed manifest as an argument. The steps 
always return a non-negative integer greater than 0.  

1. If the manifest does not have its own property "manifest_version", return 1 
and terminate this algorithm.  
2. Let potential-version be the result of running ECMASscript's 
ToNumber(manifest_version).  
3. If potential-version is a NaN or a number less than 1, warn the developer 
that the version is invalid. Return 1 and terminate this algorithm.  
4. Return potential-version.

## Outstanding issues
If version is greater than the highest version number supported by the user 
agent, should the user agent treat the manifest as the highest manifest version 
it supports? Or reject the manifest outright as invalid?  

If a manifest version number is invalid (i.e., NaN, <= 0 ), is the manifest 
invalid?  


--  
Marcos Caceres



_______________________________________________
dev-webapps mailing list
dev-webapps@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-webapps

Reply via email to