Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(115)

Unified Diff: chrome/common/extensions/docs/templates/articles/manifest.html

Issue 14273041: Doc server manifest page generation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/templates/articles/manifest.html
diff --git a/chrome/common/extensions/docs/templates/articles/manifest.html b/chrome/common/extensions/docs/templates/articles/manifest.html
index 1e280ea8635ca233ab8e3b6314d29cf22dfb77b0..d24592ec7af284d20851353ded1eb7fc8fdd9b62 100644
--- a/chrome/common/extensions/docs/templates/articles/manifest.html
+++ b/chrome/common/extensions/docs/templates/articles/manifest.html
@@ -20,614 +20,23 @@ are <b>name</b> and <b>version</b>.
<pre>
{
<em>// Required</em>
- "<a href="#name">name</a>": "<em>My Extension</em>",
- "<a href="#version">version</a>": "<em>versionString</em>",
- "<a href="#manifest_version">manifest_version</a>": 2,
+ {{#manifest_json.extensions_manifest.required}}
+ "<a href="{{documentation}}">{{name}}</a>": <em>{{*example}}</em>,
+ {{/}}
<em>// Recommended</em>
- "<a href="#description">description</a>": "<em>A plain text description</em>",
- "<a href="#icons">icons</a>": { ... },
- "<a href="#default_locale">default_locale</a>": "<em>en</em>",
+ {{#manifest_json.extensions_manifest.recommended}}
+ "<a href="{{documentation}}">{{name}}</a>": <em>{{*example}}</em>,
+ {{/}}
<em>// Pick one (or none)</em>
- "<a href="browserAction.html">browser_action</a>": {...},
- "<a href="pageAction.html">page_action</a>": {...},
- "<a href="themes.html">theme</a>": {...},
- "<a href="#app">app</a>": {...},
+ {{#manifest_json.extensions_manifest.only_one}}
+ "<a href="{{documentation}}">{{name}}</a>": <em>{{*example}}</em>,
+ {{/}}
<em>// Add any of these that you need</em>
- "<a href="event_pages.html">background</a>": {"persistent": false, ...},
- "<a href="background_pages.html">background</a>": {"persistent": true, ...},
- "<a href="override.html">chrome_url_overrides</a>": {...},
- "<a href="content_scripts.html">content_scripts</a>": [...],
- "<a href="../extensions/contentSecurityPolicy.html">content_security_policy</a>": "<em>policyString</em>",
- "<a href="fileBrowserHandler.html">file_browser_handlers</a>": [...],
- "<a href="#file_handlers">file_handlers</a>": {...},
- "<a href="#homepage_url">homepage_url</a>": "http://<em>path/to/homepage</em>",
- "<a href="#incognito">incognito</a>": "spanning" <em>or</em> "split",
- "<a href="#key">key</a>": "<em>publicKey</em>",
- "<a href="#minimum_chrome_version">minimum_chrome_version</a>": "<em>versionString</em>",
-
- "<a href="#nacl_modules">nacl_modules</a>": [...],
- "<a href="#kiosk_enabled">kiosk_enabled</a>": true,
- "<a href="#offline_enabled">offline_enabled</a>": true,
- "<a href="omnibox.html">omnibox</a>": { "keyword": "<em>aString</em>" },
- "<a href="options.html">options_page</a>": "<em>aFile</em>.html",
- "<a href="declare_permissions.html">permissions</a>": [...],
- "<a href="npapi.html">plugins</a>": [...],
- "<a href="#requirements">requirements</a>": {...},
- "<a href="autoupdate.html">update_url</a>": "http://<em>path/to/updateInfo</em>.xml",
- "<a href="#web_accessible_resources">web_accessible_resources</a>": [...],
- "<a href="#sandbox">sandbox</a>": [...]
-}
-</pre>
-
-
-<h2 id="field_details">Field details</h2>
-
-<p>
-This section covers fields that aren't described in another page.
-For a complete list of fields,
-with links to where they're described in detail,
-see the <a href="#overview">Field summary</a>.
-</p>
-
-
-<h3 id="app">app</h3>
-
-<p>
-Used by <a href="../apps/app_lifecycle.html#eventpage">packaged apps</a>
-to specify the app's background scripts.
-Also used by <a href="https://developers.google.com/chrome/apps/docs/developers_guide#live">hosted apps</a>
-to specify the URLs that the app uses.
-</p>
-
-<h3 id="default_locale">default_locale</h3>
-
-<p>
-Specifies the subdirectory of <code>_locales</code>
-that contains the default strings for this extension.
-This field is <b>required</b> in extensions
-that have a <code>_locales</code> directory;
-it <b>must be absent</b> in extensions
-that have no <code>_locales</code> directory.
-For details, see
-<a href="i18n.html">Internationalization</a>.
-</p>
-
-<h3 id="description">description</h3>
-
-<p>
-A plain text string
-(no HTML or other formatting;
-no more than 132 characters)
-that describes the extension.
-The description should be suitable for both
-the browser's extension management UI
-and the <a href="https://chrome.google.com/webstore">Chrome Web Store</a>.
-You can specify locale-specific strings for this field;
-see <a href="i18n.html">Internationalization</a> for details.
-</p>
-
-<h3 id="file_handlers">file_handlers</h3>
-
-<p>
-Used by <a href="../apps/app_lifecycle.html#eventpage">packaged apps</a>
-to specify what types of files the app can handle. An app can have multiple <code>file_handlers</code>, with each one having an identifier, a list of MIME types that can be handled, and
-a title. Here's an example of specifying file handlers:
-</p>
-
-<pre>
-"file_handlers": {
- "text": {
- "types": [
- "text/*"
- ],
- "title": "Text editor"
- },
- "image": {
- "types": [
- "image/png",
- "image/jpeg"
- ],
- "title": "Image editor"
- }
-}
-</pre>
-
-<p>
-To handle files, apps also need to declare the $ref:fileSystem
-permission. Apps can then be passed files in the $ref:app.runtime.onLaunched
-event - either from the system
-file manager (currently supported on ChromeOS only) or by providing
-a path on the <a href="../apps/first_app.html#open">command line</a>.
-</p>
-
-<h3 id="homepage_url">homepage_url</h3>
-
-<p>
-The URL of the homepage for this extension. The extensions management page (chrome://extensions)
-will contain a link to this URL. This field is particularly useful if you
-<a href="hosting.html">host the extension on your own site</a>. If you distribute your
-extension using the <a href="https://chrome.google.com/webstore">Chrome Web Store</a>,
-the homepage URL defaults to the extension's own page.
-</p>
-
-<h3 id="icons">icons</h3>
-
-<p>
-One or more icons that represent the extension, app, or theme.
-You should always provide a 128x128 icon;
-it's used during installation and by the Chrome Web Store.
-Extensions should also provide a 48x48 icon,
-which is used in the extensions management page
-(chrome://extensions).
-You can also specify a 16x16 icon to be used as the favicon
-for an extension's pages.
-The 16x16 icon is also displayed in the experimental extension
-<a href="experimental.infobars.html">infobar</a>
-feature.
-</p>
-
-<p>
-Icons should generally be in PNG format,
-because PNG has the best support for transparency.
-They can, however, be in any format supported by WebKit,
-including BMP, GIF, ICO, and JPEG.
-Here's an example of specifying the icons:
-</p>
-
-<pre>
-"icons": { "16": "icon16.png",
- "48": "icon48.png",
- "128": "icon128.png" },
-</pre>
-
-<p class="note">
-You may provide icons of any other size you wish, and Chrome will attempt to use
-the best size where appropriate. For example, Windows often requires 32-pixel
-icons, and if the app includes a 32-pixel icon, Chrome will choose that instead
-of shrinking a 48-pixel icon down. However, you should ensure that all of your
-icons are square, or unexpected behavior may result.
-</p>
-
-<p>
-If you upload your extension, app, or theme using the
-<a href="https://chrome.google.com/webstore/developer/dashboard">Chrome Developer Dashboard</a>,
-you'll need to upload additional images,
-including at least one screenshot of your extension.
-For more information,
-see the
-<a href="http://code.google.com/chrome/webstore/">Chrome Web Store
-developer documentation</a>.
-</p>
-
-<h3 id="incognito">incognito</h3>
-
-<p>
-Either "spanning" or "split", to specify how this extension will
-behave if allowed to run in incognito mode.
-</p>
-
-<p>
-The default for extensions is "spanning", which means that the extension
-will run in a single shared process. Any events or messages from an incognito
-tab will be sent to the shared process, with an <em>incognito</em> flag
-indicating where it came from. Because incognito tabs cannot use this shared
-process, an extension using the "spanning" incognito mode will not be able to
-load pages from its extension package into the main frame of an incognito tab.
-</p>
-
-<p>
-The default for installable web apps is "split",
-which means that all app pages in
-an incognito window will run in their own incognito process. If the app or extension contains a background page, that will also run in the incognito process.
-This incognito process runs along side the regular process, but has a separate
-memory-only cookie store. Each process sees events and messages only from its
-own context (for example, the incognito process will see only incognito tab updates).
-The processes are unable to communicate with each other.
-</p>
-
-<p>
-As a rule of thumb, if your extension or app needs to load a tab in an incognito browser, use
-<em>split</em> incognito behavior. If your extension or app needs to be logged
-into a remote server or persist settings locally, use <em>spanning</em>
-incognito behavior.
-</p>
-
-<h3 id="key">key</h3>
-
-<p>
-This value can be used to control
-the unique ID of an extension, app, or theme when
-it is loaded during development.
-</p>
-
-<p class="note">
-<b>Note:</b> You don't usually need to
-use this value. Instead, write your
-code so that the key value doesn't matter
-by using <a href="overview.html#relative-urls">relative paths</a>
-and $ref:runtime.getURL.
-</p>
-
-<p>
-To get a suitable key value, first
-install your extension from a <code>.crx</code> file
-(you may need to
-<a href="https://chrome.google.com/webstore/developer/dashboard">upload your extension</a>
-or <a href="packaging.html">package it manually</a>).
-Then, in your
-<a href="http://www.chromium.org/user-experience/user-data-directory">user
-data directory</a>, look in the file
-<code>Default/Extensions/<em>&lt;extensionId&gt;</em>/<em>&lt;versionString&gt;</em>/manifest.json</code>.
-You will see the key value filled in there.
-</p>
-
-<h3 id="minimum_chrome_version">minimum_chrome_version</h3>
-
-<p>
-The version of Chrome that your extension, app, or theme requires, if any.
-The format for this string is the same as for the
-<a href="#version">version</a> field.
-
-<h3 id="name">name</h3>
-
-<p>
-A short, plain text string
-(no more than 45 characters)
-that identifies the extension.
-The name is used in the install dialog,
-extension management UI,
-and the <a href="https://chrome.google.com/webstore">store</a>.
-You can specify locale-specific strings for this field;
-see <a href="i18n.html">Internationalization</a> for details.
-</p>
-
-<h3 id="nacl_modules">nacl_modules</h3>
-
-<p>
-One or more mappings from MIME types to the Native Client module
-that handles each type.
-For example, the bold code in the following snippet
-registers a Native Client module as the content handler
-for the OpenOffice spreadsheet MIME type.
-</p>
-
-<pre>
-{
- "name": "Native Client OpenOffice Spreadsheet Viewer",
- "version": "0.1",
- "description": "Open OpenOffice spreadsheets, right in your browser.",
- <b>"nacl_modules": [{
- "path": "OpenOfficeViewer.nmf",
- "mime_type": "application/vnd.oasis.opendocument.spreadsheet"
- }]</b>
-}
-</pre>
-
-<p>
-The value of "path" is the location of a Native Client manifest
-(a <code>.nmf</code> file)
-within the extension directory.
-For more information on Native Client and <code>.nmf</code> files, see the
-<a href="http://code.google.com/chrome/nativeclient/docs/technical_overview.html">Native Client Technical Overview</a>.
-</p>
-
-<p>
-Each MIME type can be associated with only one <code>.nmf</code> file,
-but a single <code>.nmf</code> file might handle multiple MIME types.
-The following example shows an extension
-with two <code>.nmf</code> files
-that handle three MIME types.
-</p>
-
-<pre>
-{
- "name": "Spreadsheet Viewer",
- "version": "0.1",
- "description": "Open OpenOffice and Excel spreadsheets, right in your browser.",
- "nacl_modules": [{
- "path": "OpenOfficeViewer.nmf",
- "mime_type": "application/vnd.oasis.opendocument.spreadsheet"
- },
- {
- "path": "OpenOfficeViewer.nmf",
- "mime_type": "application/vnd.oasis.opendocument.spreadsheet-template"
- },
- {
- "path": "ExcelViewer.nmf",
- "mime_type": "application/excel"
- }]
-}
-</pre>
-
-<p class="note">
-<strong>Note:</strong>
-You can use Native Client modules in extensions
-without specifying "nacl_modules".
-Use "nacl_modules" only if you want the browser
-to use your Native Client module
-to display a particular type of content.
-</p>
-
-<h3 id="kiosk_enabled">kiosk_enabled</h3>
-
-<p>
-Whether the packaged app is designed to expected to work in ChromeOS kiosk mode.
-In kiosk mode, the platform app window will cover the entire surface of the
-display (forced full screen). The kiosk-enabled apps are expected to be designed
-with this constraint in mind.
-</p>
-
-<h3 id="offline_enabled">offline_enabled</h3>
-
-<p>
-Whether the app or extension is expected to work offline. When Chrome detects
-that it is offline, apps with this field set to true will be highlighted
-on the New Tab page.
-</p>
-
-<h3 id="requirements">requirements</h3>
-
-<p>
-Technologies required by the app or extension.
-Hosting sites such as the Chrome Web Store may use this list
-to dissuade users from installing apps or extensions
-that will not work on their computer.
-Supported requirements currently include "3D" and "plugins";
-additional requirements checks may be added in the future.
-</p>
-
-<p>
-The "3D" requirement denotes GPU hardware acceleration.
-The "webgl" requirement refers to the
-<a href="http://www.khronos.org/webgl/">WebGL API</a>.
-For more information on Chrome 3D graphics support,
-see the help article on
-<a href="http://www.google.com/support/chrome/bin/answer.py?answer=1220892">WebGL and 3D graphics</a>.
-You can list the 3D-related features your app requires,
-as demonstrated in the following example:
-</p>
-
-<pre>
-"requirements": {
- "3D": {
- "features": ["webgl"]
- }
-}
-</pre>
-
-<p>
-The "plugins" requirement indicates
-if an app or extension requires NPAPI to run.
-This requirement is enabled by default
-when the manifest includes the
-<a href="http://developer.chrome.com/extensions/npapi.html">"plugins" field</a>.
-For apps and extensions that still work when plugins aren't available,
-you can disable this requirement
-by setting NPAPI to false.
-You can also enable this requirement manually,
-by setting NPAPI to true,
-as shown in this example:
-</p>
-
-<pre>
-"requirements": {
- "plugins": {
- "npapi": true
- }
+ {{#manifest_json.extensions_manifest.optional}}
+ "<a href="{{documentation}}">{{name}}</a>": <em>{{*example}}</em>,
+ {{/}}
}
</pre>
-
-
-<h3 id="version">version</h3>
-
-<p>
-One to four dot-separated integers
-identifying the version of this extension.
-A couple of rules apply to the integers:
-they must be between 0 and 65535, inclusive,
-and non-zero integers can't start with 0.
-For example, 99999 and 032 are both invalid.
-</p>
-
-<p>
-Here are some examples of valid versions:
-</p>
-
-<ul>
- <li> <code>"version": "1"</code> </li>
- <li> <code>"version": "1.0"</code> </li>
- <li> <code>"version": "2.10.2"</code> </li>
- <li> <code>"version": "3.1.2.4567"</code> </li>
-</ul>
-
-<p>
-The autoupdate system compares versions
-to determine whether an installed extension
-needs to be updated.
-If the published extension has a newer version string
-than the installed extension,
-then the extension is automatically updated.
-</p>
-
-<p>
-The comparison starts with the leftmost integers.
-If those integers are equal,
-the integers to the right are compared,
-and so on.
-For example, 1.2.0 is a newer version than 1.1.9.9999.
-</p>
-
-<p>
-A missing integer is equal to zero.
-For example, 1.1.9.9999 is newer than 1.1.
-</p>
-
-<p>
-For more information, see
-<a href="autoupdate.html">Autoupdating</a>.
-</p>
-
-
-
-<h3 id="manifest_version">manifest_version</h3>
-
-<p>
-One integer specifying the version of the manifest file format your package
-requires. As of Chrome 18, developers <em>should</em> specify <code>2</code>
-(without quotes) to use the format as described by this document:
-</p>
-
-<pre>"manifest_version": 2</pre>
-
-<p>
-Consider manifest version 1 <em>deprecated</em> as of Chrome 18. Version 2 is
-not yet <em>required</em>, but we will, at some point in the not-too-distant
-future, stop supporting packages using deprecated manifest versions. Extensions,
-applications, and themes that aren't ready to make the jump to the new manifest
-version in Chrome 18 can either explicitly specify version <code>1</code>, or
-leave the key off entirely.
-</p>
-
-<p>
-The changes between version 1 and version 2 of the manifest file format are
-described in detail in <a href="manifestVersion.html">the
-<code>manifest_version</code> documentation.</a>
-</p>
-
-<p class="caution">
- Setting <code>manifest_version</code> 2 in Chrome 17 or lower is not
- recommended. If your extension needs to work in older versions of Chrome,
- stick with version 1 for the moment. We'll give you ample warning before
- version 1 stops working.
-</p>
-
-<h3 id="web_accessible_resources">web_accessible_resources</h3>
-
-<p>
-An array of strings specifying the paths (relative to the package root) of
-packaged resources that are expected to be usable in the context of a web page.
-For example, an extension that injects a content script with the intention of
-building up some custom interface for <code>example.com</code> would whitelist
-any resources that interface requires (images, icons, stylesheets, scripts,
-etc.) as follows:
-</p>
-
-<pre>{
- ...
- "web_accessible_resources": [
- "images/my-awesome-image1.png",
- "images/my-amazing-icon1.png",
- "style/double-rainbow.css",
- "script/double-rainbow.js"
- ],
- ...
-}</pre>
-
-<p>
-These resources would then be available in a webpage via the URL
-<code>chrome-extension://[PACKAGE ID]/[PATH]</code>, which can be generated with
-the $ref:runtime.getURL method. Whitelisted resources are served with appropriate
-<a href="http://www.w3.org/TR/cors/">CORS</a> headers, so they're available via
-mechanisms like XHR.
-</p>
-
-<p>
-Injected content scripts themselves do not need to be whitelisted.
-</p>
-
-<p>
-Prior to manifest version 2 all resources within an extension could be accessed
-from any page on the web. This allowed a malicious website to
-<a href="http://en.wikipedia.org/wiki/Device_fingerprint">fingerprint</a> the
-extensions that a user has installed or exploit vulnerabilities (for example
-<a href="http://en.wikipedia.org/wiki/Cross-site_scripting">XSS bugs</a>)within
-installed extensions. Limiting availability to only resources which are
-explicitly intended to be web accessible serves to both minimize the available
-attack surface and protect the privacy of users.
-</p>
-
-<h4 id="availability">Default Availability</h4>
-
-<p>
-Resources inside of packages using <a href="#manifest_version"><code>manifest_version</code></a>
-2 or above are <strong>blocked by default</strong>, and must be whitelisted
-for use via this property.
-</p>
-
-<p>
-Resources inside of packages using <code>manifest_version</code> 1 are available
-by default, but <em>if</em> you do set this property, then it will be treated as
-a complete list of all whitelisted resources. Resources not listed will be
-blocked.
-</p>
-
-<h3 id="sandbox">sandbox</h3>
-
-<p>
-Defines an collection of app or extension pages that are to be served
-in a sandboxed unique origin, and optionally a Content Security Policy to use
-with them. Being in a sandbox has two implications:
-</p>
-
-<ol>
-<li>A sandboxed page will not have access to extension or app APIs, or
-direct access to non-sandboxed pages (it may communicate with them via
-<code>postMessage()</code>).</li>
-<li>
- <p>A sandboxed page is not subject to the
- <a href="../extensions/contentSecurityPolicy.html">Content Security Policy
- (CSP)</a> used by the rest of the app or extension (it has its own separate
- CSP value). This means that, for example, it can use inline script and
- <code>eval</code>.</p>
-
- <p>For example, here's how to specify that two extension pages are to be
- served in a sandbox with a custom CSP:</p>
-
- <pre>{
- ...
- "sandbox": {
- "pages": [
- "page1.html",
- "directory/page2.html"
- ]
- <i>// content_security_policy is optional.</i>
- "content_security_policy":
- "sandbox allow-scripts; script-src https://www.google.com"
- ],
- ...
-}</pre>
-
- <p>
- If not specified, the default <code>content_security_policy</code> value is
- <code>sandbox allow-scripts allow-forms</code>. You can specify your CSP
- value to restrict the sandbox even further, but it must have the <code>sandbox</code>
- directive and may not have the <code>allow-same-origin</code> token (see
- <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox">the
- HTML5 specification</a> for possible sandbox tokens).
- </p>
-</li>
-</ol>
-
-<p>
-Note that you only need to list pages that you expected to be loaded in
-windows or frames. Resources used by sandboxed pages (e.g. stylesheets or
-JavaScript source files) do not need to appear in the
-<code>sandboxed_page</code> list, they will use the sandbox of the page
-that embeds them.
-</p>
-
-<p>
-<a href="sandboxingEval.html">"Using eval in Chrome Extensions. Safely."</a>
-goes into more detail about implementing a sandboxing workflow that enables use
-of libraries that would otherwise have issues executing under extension's
-<a href="../extensions/contentSecurityPolicy.html">default Content Security
-Policy</a>.
-</p>
-
-<p>
-Sandboxed page may only be specified when using
-<a href="#manifest_version"><code>manifest_version</code></a> 2 or above.
-</p>

Powered by Google App Engine
This is Rietveld 408576698