Add Firefox support

The release.bash script has been updated, and now depends on a helper
script called generateManifest.bash. A "--browser" flag (shorthand "-b")
has been added to the script in order to specify the target browser.

Now the manifest.json file is saved as a template at
templates/manifest.gjson (gjson stands for Generic JSON), which includes
conditional clauses which indicate what parts of the manifest are
applicable to each browser.

generateManifest.bash generates the src/manifest.json file.

Change-Id: Ib051f3d893045c1377007b9b076ffa7a702d9648
diff --git a/README.md b/README.md
index e0c2166..211b92f 100644
--- a/README.md
+++ b/README.md
@@ -7,26 +7,45 @@
 When the code in the `master` branch is considered to be stable, a release can be made. This is the procedure:
 
 1. Tag the last commit with a version number (in the format `vx`, where x is the extension's [version number](https://developer.chrome.com/extensions/manifest/version) for that release) by running `git tag -a vx -m "vx"`. Note that the tag should be an annotated tag and not a lightweight tag, and it must be pushed to Gerrit after being created.
-2. Build the extension for both the stable and beta channels (this is explained in the next section). This will output a ZIP file for each release channel.
-3. [Upload both release files](https://developer.chrome.com/webstore/publish#upload-your-item) to the Chrome Web Store, one for each release channel.
-4. [Submit both releases](https://developer.chrome.com/webstore/publish#submit-your-item-for-publishing) to be reviewed by the Chrome Web Store team, but in the case of the stable channel uncheck the "Publish automatically after it has passed review" option.
-5. Upload the beta release file to the [GitHub releases page](https://github.com/avm99963/infinitegforums/releases) under the newly created tag. Mark that release as a pre-release at GitHub.
-6. Wait until the beta release is reviewed and approved by Google.
-7. Test again the extension by using the beta channel. Check if the options have been transfered correctly from version to version, and wait some days (for instance between 3 and 5 days) to see if other people report issues with the updated version.
-8. If everything goes well, publish the update in the stable channel. The updated version should have already been reviewed by the Chrome Web Store team at this time.
-9. Update the release file in the GitHub releases page by removing the beta release file and uploading the stable release file. Also, remove the pre-release label.
+2. Build the extension for both the stable and beta channels (this is explained in the next section). This will output a ZIP file for each release channel and each supported browser.
+
+Afterwards, the release/build files must be submitted to the Chrome Web Store and addons.mozilla.org.
+
+### Submitting to the Chrome Web Store
+1. [Upload both release files](https://developer.chrome.com/webstore/publish#upload-your-item) to the Chrome Web Store, one for each release channel.
+2. [Submit both releases](https://developer.chrome.com/webstore/publish#submit-your-item-for-publishing) to be reviewed by the Chrome Web Store team, but in the case of the stable channel uncheck the "Publish automatically after it has passed review" option.
+3. Upload the beta release file to the [GitHub releases page](https://github.com/avm99963/infinitegforums/releases) under the newly created tag. Mark that release as a pre-release at GitHub.
+4. Wait until the beta release is reviewed and approved by Google.
+5. Test again the extension by using the beta channel. Check if the options have been transfered correctly from version to version, and wait some days (for instance between 3 and 5 days) to see if other people report issues with the updated version.
+6. If everything goes well, publish the update in the stable channel. The updated version should have already been reviewed by the Chrome Web Store team at this time.
+7. Update the release file in the GitHub releases page by removing the beta release file and uploading the stable release file. Also, remove the pre-release label.
 
 If during this process the release wasn't approved by Google or an issue was found during beta testing, a new release which fixes this should be created.
 
+### Submitting to addons.mozilla.org
+The procedure is similar to the one with the Chrome Web Store.
+
+@TODO: Add more details once the first version of the extension has been uploaded to addons.mozilla.org.
+
 ## Build the extension
-To create a zip file with the contents of the extension, which can be uploaded to the Chrome Web Store, run `bash release.bash`. You can also use `bash release.bash --channel=beta` to include a beta label in the extension name and version of the resulting zip file.
+A zip file with the contents of the extension, which can be uploaded to the Chrome Web Store and addons.mozilla.org, can be created with any of the following procedures:
 
-The ZIP file will contain a manifest.json file with the according version name, and will be located in the `out` folder.
+### Using the release.bash script
+Run `bash release.bash -h` in order to learn how to use this command. To summarize, the command accepts the `--channel` and `--browser` flags (or their short versions `-c` and `-b`).
 
-You can also get information about how to use the `release.bash` script by running `bash release.bash -h`.
+As an example, if you wanted to create a ZIP file of the beta-branded extension targeted for Firefox, you would run `bash release.bash -c beta -b gecko`.
+
+### Using make
+You can also use _make_ to build the extension. This is just a wrapper for the `release.bash` command.
+
+Run `make all` to build the extension for all the available channels and browsers. You can also run `make {target}` where `{target}` is one of the following: `chromium-stable`, `chromium-beta`, `gecko-stable`, `gecko-beta`.
+
+Run `make clean` to clean all the release files (this removes the `out` folder, which is where the release files are saved).
 
 ## Testing notes
+When testing the extension during development, you don't have to build the extension each time you want to import an updated version to Chrome/Firefox. Instead, run `bash generateManifest.bash {browser}` once, where `{browser}` is either `chromium` or `gecko`, and this will generate a `manifest.json` file for the specified browser in the `src` directory. Now, you can load the `src` folder directly in the browser in order to import the extension, which removes the need to build it. When the `manifest.gjson` file is modified, you'll have to generate the manifest again.
+
 To test translations, you might want to set your browser's locale. This section tells you how to set the locale in [Windows](https://developer.chrome.com/extensions/i18n#testing-win), [Mac OS X](https://developer.chrome.com/extensions/i18n#testing-mac), [Linux](https://developer.chrome.com/extensions/i18n#testing-linux), and [Chrome OS](https://developer.chrome.com/extensions/i18n#testing-chromeos).
 
 ## Beta channel
-The beta channel is available [here](https://chrome.google.com/webstore/detail/infinite-scroll-in-tw-bet/memmklnkkhifmflmidnflfcdepamljef).
+The beta channel for Chrome is available [here](https://chrome.google.com/webstore/detail/infinite-scroll-in-tw-bet/memmklnkkhifmflmidnflfcdepamljef).