Home | History | Annotate | Download | only in articles
      1 <h1>Formats: Manifest Files</h1>
      2 
      3 
      4 <p>
      5 Every extension, installable web app, and theme has a
      6 <a href="http://www.json.org">JSON</a>-formatted manifest file,
      7 named <code>manifest.json</code>,
      8 that provides important information.
      9 </p>
     10 
     11 <h2 id="overview"> Field summary </h2>
     12 
     13 <p>
     14 The following code shows the supported manifest fields,
     15 with links to the page that discusses each field.
     16 The only fields that are always required
     17 are <b>name</b> and <b>version</b>.
     18 </p>
     19 
     20 <pre>
     21 {
     22   <em>// Required</em>
     23   "<a href="#name">name</a>": "<em>My Extension</em>",
     24   "<a href="#version">version</a>": "<em>versionString</em>",
     25   "<a href="#manifest_version">manifest_version</a>": 2,
     26 {{?is_apps}}
     27   "<a href="#app">app</a>": {...},
     28 {{/is_apps}}
     29 
     30   <em>// Recommended</em>
     31   "<a href="#description">description</a>": "<em>A plain text description</em>",
     32   "<a href="#icons">icons</a>": { ... },
     33   "<a href="#default_locale">default_locale</a>": "<em>en</em>",
     34 {{^is_apps}}
     35 
     36   <em>// Pick one (or none)</em>
     37   "<a href="browserAction.html">browser_action</a>": {...},
     38   "<a href="pageAction.html">page_action</a>": {...},
     39   "<a href="themes.html">theme</a>": {...},
     40   "<a href="#app">app</a>": {...},
     41 {{/is_apps}}
     42 
     43   <em>// Add any of these that you need</em>
     44   "<a href="event_pages.html">background</a>": {"persistent": false, ...},
     45   "<a href="background_pages.html">background</a>": {"persistent": true, ...},
     46 {{^is_apps}}
     47   "<a href="override.html">chrome_url_overrides</a>": {...},
     48 {{/is_apps}}
     49   "<a href="content_scripts.html">content_scripts</a>": [...],
     50   "<a href="contentSecurityPolicy.html">content_security_policy</a>": "<em>policyString</em>",
     51   "<a href="fileBrowserHandler.html">file_browser_handlers</a>": [...],
     52   "<a href="#file_handlers">file_handlers</a>": {...},
     53   "<a href="#homepage_url">homepage_url</a>": "http://<em>path/to/homepage</em>",
     54   "<a href="#incognito">incognito</a>": "spanning" <em>or</em> "split",
     55   "<a href="#key">key</a>": "<em>publicKey</em>",
     56   "<a href="#minimum_chrome_version">minimum_chrome_version</a>": "<em>versionString</em>",
     57 
     58   "<a href="#nacl_modules">nacl_modules</a>": [...],
     59   "<a href="#kiosk_enabled">kiosk_enabled</a>": true,
     60   "<a href="#offline_enabled">offline_enabled</a>": true,
     61   "<a href="omnibox.html">omnibox</a>": { "keyword": "<em>aString</em>" },
     62 {{^is_apps}}
     63   "<a href="options.html">options_page</a>": "<em>aFile</em>.html",
     64 {{/is_apps}}
     65   "<a href="declare_permissions.html">permissions</a>": [...],
     66   "<a href="npapi.html">plugins</a>": [...],
     67   "<a href="#requirements">requirements</a>": {...},
     68   "<a href="autoupdate.html">update_url</a>": "http://<em>path/to/updateInfo</em>.xml",
     69   "<a href="#web_accessible_resources">web_accessible_resources</a>": [...],
     70   "<a href="#sandbox">sandbox</a>": [...]
     71 }
     72 </pre>
     73 
     74 
     75 <h2 id="field_details">Field details</h2>
     76 
     77 <p>
     78 This section covers fields that aren't described in another page.
     79 For a complete list of fields,
     80 with links to where they're described in detail,
     81 see the <a href="#overview">Field summary</a>.
     82 </p>
     83 
     84 
     85 <h3 id="app">app</h3>
     86 
     87 <p>
     88 Used by <a href="../apps/app_lifecycle.html#eventpage">packaged apps</a>
     89 to specify the app's background scripts.
     90 Also used by <a href="https://developers.google.com/chrome/apps/docs/developers_guide#live">hosted apps</a>
     91 to specify the URLs that the app uses.
     92 </p>
     93 
     94 <h3 id="default_locale">default_locale</h3>
     95 
     96 <p>
     97 Specifies the subdirectory of <code>_locales</code>
     98 that contains the default strings for this extension.
     99 This field is <b>required</b> in extensions
    100 that have a <code>_locales</code> directory;
    101 it <b>must be absent</b> in extensions
    102 that have no <code>_locales</code> directory.
    103 For details, see
    104 <a href="i18n.html">Internationalization</a>.
    105 </p>
    106 
    107 <h3 id="description">description</h3>
    108 
    109 <p>
    110 A plain text string
    111 (no HTML or other formatting;
    112 no more than 132 characters)
    113 that describes the extension.
    114 The description should be suitable for both
    115 the browser's extension management UI
    116 and the <a href="https://chrome.google.com/webstore">Chrome Web Store</a>.
    117 You can specify locale-specific strings for this field;
    118 see <a href="i18n.html">Internationalization</a> for details.
    119 </p>
    120 
    121 <h3 id="file_handlers">file_handlers</h3>
    122 
    123 <p>
    124 Used by <a href="../apps/app_lifecycle.html#eventpage">packaged apps</a>
    125 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 and/or a list of file extensions that can be handled, and
    126 a title. The app can handle a file if it either has a matching file extension or
    127 has a matching MIME type.
    128 You can use a wildcard <code>"*"</code> in <code>types</code> or
    129 <code>extensions</code> to indicate that the app can handle any file type or
    130 <code>"<em>type</em>/*"</code> in <code>types</code> to indicate that the app
    131 can handle any file with a MIME type of <code><em>type</em></code>.
    132 Here's an example of specifying file handlers:
    133 </p>
    134 
    135 <pre>
    136 "file_handlers": {
    137   "text": {
    138     "types": [
    139       "text/*"
    140     ],
    141     "title": "Text editor"
    142   },
    143   "image": {
    144     "types": [
    145       "image/png",
    146       "image/jpeg"
    147     ],
    148     "extensions": [
    149       "tiff"
    150     ]
    151     "title": "Image editor"
    152   },
    153   "any": {
    154     "extensions": [
    155       "*"
    156     ]
    157     "title": "Any file type editor"
    158   }
    159 }
    160 </pre>
    161 
    162 <p>
    163 To handle files, apps also need to declare the $ref:fileSystem
    164 permission. Apps can then be passed files in the $ref:app.runtime.onLaunched
    165 event - either from the system
    166 file manager (currently supported on ChromeOS only) or by providing
    167 a path on the <a href="../apps/first_app.html#open">command line</a>.
    168 </p>
    169 
    170 <h3 id="homepage_url">homepage_url</h3>
    171 
    172 <p>
    173 The URL of the homepage for this extension. The extensions management page (chrome://extensions)
    174 will contain a link to this URL.  This field is particularly useful if you
    175 <a href="hosting.html">host the extension on your own site</a>. If you distribute your
    176 extension using the <a href="https://chrome.google.com/webstore">Chrome Web Store</a>,
    177 the homepage URL defaults to the extension's own page.
    178 </p>
    179 
    180 <h3 id="icons">icons</h3>
    181 
    182 <p>
    183 One or more icons that represent the extension, app, or theme.
    184 You should always provide a 128x128 icon;
    185 it's used during installation and by the Chrome Web Store.
    186 Extensions should also provide a 48x48 icon,
    187 which is used in the extensions management page
    188 (chrome://extensions).
    189 You can also specify a 16x16 icon to be used as the favicon
    190 for an extension's pages.
    191 The 16x16 icon is also displayed in the experimental extension
    192 <a href="infobars.html">infobar</a>
    193 feature.
    194 </p>
    195 
    196 <p>
    197 Icons should generally be in PNG format,
    198 because PNG has the best support for transparency.
    199 They can, however, be in any format supported by WebKit,
    200 including BMP, GIF, ICO, and JPEG.
    201 Here's an example of specifying the icons:
    202 </p>
    203 
    204 <pre>
    205 "icons": { "16": "icon16.png",
    206            "48": "icon48.png",
    207           "128": "icon128.png" },
    208 </pre>
    209 
    210 <p class="note">
    211 You may provide icons of any other size you wish, and Chrome will attempt to use
    212 the best size where appropriate. For example, Windows often requires 32-pixel
    213 icons, and if the app includes a 32-pixel icon, Chrome will choose that instead
    214 of shrinking a 48-pixel icon down. However, you should ensure that all of your
    215 icons are square, or unexpected behavior may result.
    216 </p>
    217 
    218 <p>
    219 If you upload your extension, app, or theme using the
    220 <a href="https://chrome.google.com/webstore/developer/dashboard">Chrome Developer Dashboard</a>,
    221 you'll need to upload additional images,
    222 including at least one screenshot of your extension.
    223 For more information,
    224 see the
    225 <a href="http://code.google.com/chrome/webstore/">Chrome Web Store
    226 developer documentation</a>.
    227 </p>
    228 
    229 <h3 id="incognito">incognito</h3>
    230 
    231 <p>
    232 Either "spanning" or "split", to specify how this extension will
    233 behave if allowed to run in incognito mode.
    234 </p>
    235 
    236 <p>
    237 The default for extensions is "spanning", which means that the extension
    238 will run in a single shared process. Any events or messages from an incognito
    239 tab will be sent to the shared process, with an <em>incognito</em> flag
    240 indicating where it came from. Because incognito tabs cannot use this shared
    241 process, an extension using the "spanning" incognito mode will not be able to
    242 load pages from its extension package into the main frame of an incognito tab.
    243 </p>
    244 
    245 <p>
    246 The default for installable web apps is "split",
    247 which means that all app pages in
    248 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.
    249 This incognito process runs along side the regular process, but has a separate
    250 memory-only cookie store. Each process sees events and messages only from its
    251 own context (for example, the incognito process will see only incognito tab updates).
    252 The processes are unable to communicate with each other.
    253 </p>
    254 
    255 <p>
    256 As a rule of thumb, if your extension or app needs to load a tab in an incognito browser, use
    257 <em>split</em> incognito behavior. If your extension or app needs to be logged
    258 into a remote server or persist settings locally, use <em>spanning</em>
    259 incognito behavior.
    260 </p>
    261 
    262 <h3 id="key">key</h3>
    263 
    264 <p>
    265 This value can be used to control
    266 the unique ID of an extension, app, or theme when
    267 it is loaded during development.
    268 </p>
    269 
    270 <p class="note">
    271 <b>Note:</b> You don't usually need to
    272 use this value. Instead, write your
    273 code so that the key value doesn't matter
    274 by using <a href="../extensions/overview.html#relative-urls">relative paths</a>
    275 and $ref:runtime.getURL.
    276 </p>
    277 
    278 <p>
    279 To get a suitable key value, first
    280 install your extension from a <code>.crx</code> file
    281 (you may need to
    282 <a href="https://chrome.google.com/webstore/developer/dashboard">upload your extension</a>
    283 or <a href="packaging.html">package it manually</a>).
    284 Then, in your
    285 <a href="http://www.chromium.org/user-experience/user-data-directory">user
    286 data directory</a>, look in the file
    287 <code>Default/Extensions/<em>&lt;extensionId&gt;</em>/<em>&lt;versionString&gt;</em>/manifest.json</code>.
    288 You will see the key value filled in there.
    289 </p>
    290 
    291 <h3 id="minimum_chrome_version">minimum_chrome_version</h3>
    292 
    293 <p>
    294 The version of Chrome that your extension, app, or theme requires, if any.
    295 The format for this string is the same as for the
    296 <a href="#version">version</a> field.
    297 
    298 <h3 id="name">name</h3>
    299 
    300 <p>
    301 A short, plain text string
    302 (no more than 45 characters)
    303 that identifies the extension.
    304 The name is used in the install dialog,
    305 extension management UI,
    306 and the <a href="https://chrome.google.com/webstore">store</a>.
    307 You can specify locale-specific strings for this field;
    308 see <a href="i18n.html">Internationalization</a> for details.
    309 </p>
    310 
    311 <h3 id="nacl_modules">nacl_modules</h3>
    312 
    313 <p>
    314 One or more mappings from MIME types to the Native Client module
    315 that handles each type.
    316 For example, the bold code in the following snippet
    317 registers a Native Client module as the content handler
    318 for the OpenOffice spreadsheet MIME type.
    319 </p>
    320 
    321 <pre>
    322 {
    323   "name": "Native Client OpenOffice Spreadsheet Viewer",
    324   "version": "0.1",
    325   "description": "Open OpenOffice spreadsheets, right in your browser.",
    326   <b>"nacl_modules": [{
    327     "path": "OpenOfficeViewer.nmf",
    328     "mime_type": "application/vnd.oasis.opendocument.spreadsheet"
    329   }]</b>
    330 }
    331 </pre>
    332 
    333 <p>
    334 The value of "path" is the location of a Native Client manifest
    335 (a <code>.nmf</code> file)
    336 within the extension directory.
    337 For more information on Native Client and <code>.nmf</code> files, see the
    338 <a href="http://code.google.com/chrome/nativeclient/docs/technical_overview.html">Native Client Technical Overview</a>.
    339 </p>
    340 
    341 <p>
    342 Each MIME type can be associated with only one <code>.nmf</code> file,
    343 but a single <code>.nmf</code> file might handle multiple MIME types.
    344 The following example shows an extension
    345 with two <code>.nmf</code> files
    346 that handle three MIME types.
    347 </p>
    348 
    349 <pre>
    350 {
    351   "name": "Spreadsheet Viewer",
    352   "version": "0.1",
    353   "description": "Open OpenOffice and Excel spreadsheets, right in your browser.",
    354   "nacl_modules": [{
    355     "path": "OpenOfficeViewer.nmf",
    356     "mime_type": "application/vnd.oasis.opendocument.spreadsheet"
    357   },
    358   {
    359     "path": "OpenOfficeViewer.nmf",
    360     "mime_type": "application/vnd.oasis.opendocument.spreadsheet-template"
    361   },
    362   {
    363     "path": "ExcelViewer.nmf",
    364     "mime_type": "application/excel"
    365   }]
    366 }
    367 </pre>
    368 
    369 <p class="note">
    370 <strong>Note:</strong>
    371 You can use Native Client modules in extensions
    372 without specifying "nacl_modules".
    373 Use "nacl_modules" only if you want the browser
    374 to use your Native Client module
    375 to display a particular type of content.
    376 </p>
    377 
    378 <h3 id="kiosk_enabled">kiosk_enabled</h3>
    379 
    380 <p>
    381 Whether the packaged app is designed to expected to work in ChromeOS kiosk mode.
    382 In kiosk mode, the platform app window will cover the entire surface of the
    383 display (forced full screen). The kiosk-enabled apps are expected to be designed
    384 with this constraint in mind.
    385 </p>
    386 
    387 <h3 id="offline_enabled">offline_enabled</h3>
    388 
    389 <p>
    390 Whether the app or extension is expected to work offline. When Chrome detects
    391 that it is offline, apps with this field set to true will be highlighted
    392 on the New Tab page.
    393 </p>
    394 
    395 <h3 id="requirements">requirements</h3>
    396 
    397 <p>
    398 Technologies required by the app or extension.
    399 Hosting sites such as the Chrome Web Store may use this list
    400 to dissuade users from installing apps or extensions
    401 that will not work on their computer.
    402 Supported requirements currently include "3D" and "plugins";
    403 additional requirements checks may be added in the future.
    404 </p>
    405 
    406 <p>
    407 The "3D" requirement denotes GPU hardware acceleration.
    408 The "webgl" requirement refers to the
    409 <a href="http://www.khronos.org/webgl/">WebGL API</a>.
    410 For more information on Chrome 3D graphics support,
    411 see the help article on
    412 <a href="http://www.google.com/support/chrome/bin/answer.py?answer=1220892">WebGL and 3D graphics</a>.
    413 You can list the 3D-related features your app requires,
    414 as demonstrated in the following example:
    415 </p>
    416 
    417 <pre>
    418 "requirements": {
    419   "3D": {
    420     "features": ["webgl"]
    421   }
    422 }
    423 </pre>
    424 
    425 <p>
    426 The "plugins" requirement indicates
    427 if an app or extension requires NPAPI to run.
    428 This requirement is enabled by default
    429 when the manifest includes the
    430 <a href="npapi.html">"plugins" field</a>.
    431 For apps and extensions that still work when plugins aren't available,
    432 you can disable this requirement
    433 by setting NPAPI to false.
    434 You can also enable this requirement manually,
    435 by setting NPAPI to true,
    436 as shown in this example:
    437 </p>
    438 
    439 <pre>
    440 "requirements": {
    441   "plugins": {
    442     "npapi": true
    443   }
    444 }
    445 </pre>
    446 
    447 
    448 <h3 id="version">version</h3>
    449 
    450 <p>
    451 One to four dot-separated integers
    452 identifying the version of this extension.
    453 A couple of rules apply to the integers:
    454 they must be between 0 and 65535, inclusive,
    455 and non-zero integers can't start with 0.
    456 For example, 99999 and 032 are both invalid.
    457 </p>
    458 
    459 <p>
    460 Here are some examples of valid versions:
    461 </p>
    462 
    463 <ul>
    464   <li> <code>"version": "1"</code> </li>
    465   <li> <code>"version": "1.0"</code> </li>
    466   <li> <code>"version": "2.10.2"</code> </li>
    467   <li> <code>"version": "3.1.2.4567"</code> </li>
    468 </ul>
    469 
    470 <p>
    471 The autoupdate system compares versions
    472 to determine whether an installed extension
    473 needs to be updated.
    474 If the published extension has a newer version string
    475 than the installed extension,
    476 then the extension is automatically updated.
    477 </p>
    478 
    479 <p>
    480 The comparison starts with the leftmost integers.
    481 If those integers are equal,
    482 the integers to the right are compared,
    483 and so on.
    484 For example, 1.2.0 is a newer version than 1.1.9.9999.
    485 </p>
    486 
    487 <p>
    488 A missing integer is equal to zero.
    489 For example, 1.1.9.9999 is newer than 1.1.
    490 </p>
    491 
    492 <p>
    493 For more information, see
    494 <a href="autoupdate.html">Autoupdating</a>.
    495 </p>
    496 
    497 
    498 
    499 <h3 id="manifest_version">manifest_version</h3>
    500 
    501 <p>
    502 One integer specifying the version of the manifest file format your package
    503 requires. As of Chrome 18, developers <em>should</em> specify <code>2</code>
    504 (without quotes) to use the format as described by this document:
    505 </p>
    506 
    507 <pre>"manifest_version": 2</pre>
    508 
    509 <p>
    510 Consider manifest version 1 <em>deprecated</em> as of Chrome 18. Version 2 is
    511 not yet <em>required</em>, but we will, at some point in the not-too-distant
    512 future, stop supporting packages using deprecated manifest versions. Extensions,
    513 applications, and themes that aren't ready to make the jump to the new manifest
    514 version in Chrome 18 can either explicitly specify version <code>1</code>, or
    515 leave the key off entirely.
    516 </p>
    517 
    518 <p>
    519 The changes between version 1 and version 2 of the manifest file format are
    520 described in detail in <a href="manifestVersion.html">the
    521 <code>manifest_version</code> documentation.</a>
    522 </p>
    523 
    524 <p class="caution">
    525   Setting <code>manifest_version</code> 2 in Chrome 17 or lower is not
    526   recommended. If your extension needs to work in older versions of Chrome,
    527   stick with version 1 for the moment. We'll give you ample warning before
    528   version 1 stops working.
    529 </p>
    530 
    531 <h3 id="web_accessible_resources">web_accessible_resources</h3>
    532 
    533 <p>
    534 An array of strings specifying the paths (relative to the package root) of
    535 packaged resources that are expected to be usable in the context of a web page.
    536 For example, an extension that injects a content script with the intention of
    537 building up some custom interface for <code>example.com</code> would whitelist
    538 any resources that interface requires (images, icons, stylesheets, scripts,
    539 etc.) as follows:
    540 </p>
    541 
    542 <pre>{
    543   ...
    544   "web_accessible_resources": [
    545     "images/my-awesome-image1.png",
    546     "images/my-amazing-icon1.png",
    547     "style/double-rainbow.css",
    548     "script/double-rainbow.js"
    549   ],
    550   ...
    551 }</pre>
    552 
    553 <p>
    554 These resources would then be available in a webpage via the URL
    555 <code>chrome-extension://[PACKAGE ID]/[PATH]</code>, which can be generated with
    556 the $ref:runtime.getURL method. Whitelisted resources are served with appropriate
    557 <a href="http://www.w3.org/TR/cors/">CORS</a> headers, so they're available via
    558 mechanisms like XHR.
    559 </p>
    560 
    561 <p>
    562 Injected content scripts themselves do not need to be whitelisted.
    563 </p>
    564 
    565 <p>
    566 Prior to manifest version 2 all resources within an extension could be accessed
    567 from any page on the web. This allowed a malicious website to
    568 <a href="http://en.wikipedia.org/wiki/Device_fingerprint">fingerprint</a> the
    569 extensions that a user has installed or exploit vulnerabilities (for example
    570 <a href="http://en.wikipedia.org/wiki/Cross-site_scripting">XSS bugs</a>)within
    571 installed extensions. Limiting availability to only resources which are
    572 explicitly intended to be web accessible serves to both minimize the available
    573 attack surface and protect the privacy of users.
    574 </p>
    575 
    576 <h4 id="availability">Default Availability</h4>
    577 
    578 <p>
    579 Resources inside of packages using <a href="#manifest_version"><code>manifest_version</code></a>
    580 2 or above are <strong>blocked by default</strong>, and must be whitelisted
    581 for use via this property.
    582 </p>
    583 
    584 <p>
    585 Resources inside of packages using <code>manifest_version</code> 1 are available
    586 by default, but <em>if</em> you do set this property, then it will be treated as
    587 a complete list of all whitelisted resources. Resources not listed will be
    588 blocked.
    589 </p>
    590 
    591 <h3 id="sandbox">sandbox</h3>
    592 
    593 <p>
    594 Defines an collection of app or extension pages that are to be served
    595 in a sandboxed unique origin, and optionally a Content Security Policy to use
    596 with them. Being in a sandbox has two implications:
    597 </p>
    598 
    599 <ol>
    600 <li>A sandboxed page will not have access to extension or app APIs, or
    601 direct access to non-sandboxed pages (it may communicate with them via
    602 <code>postMessage()</code>).</li>
    603 <li>
    604   <p>A sandboxed page is not subject to the
    605   <a href="../extensions/contentSecurityPolicy.html">Content Security Policy
    606   (CSP)</a> used by the rest of the app or extension (it has its own separate
    607   CSP value). This means that, for example, it can use inline script and
    608   <code>eval</code>.</p>
    609 
    610   <p>For example, here's how to specify that two extension pages are to be
    611   served in a sandbox with a custom CSP:</p>
    612 
    613   <pre>{
    614   ...
    615   "sandbox": {
    616     "pages": [
    617       "page1.html",
    618       "directory/page2.html"
    619     ]
    620     <i>// content_security_policy is optional.</i>
    621     "content_security_policy":
    622         "sandbox allow-scripts; script-src https://www.google.com"
    623   ],
    624   ...
    625 }</pre>
    626 
    627   <p>
    628   If not specified, the default <code>content_security_policy</code> value is
    629   <code>sandbox allow-scripts allow-forms</code>. You can specify your CSP
    630   value to restrict the sandbox even further, but it must have the <code>sandbox</code>
    631   directive and may not have the <code>allow-same-origin</code> token (see
    632   <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox">the
    633   HTML5 specification</a> for possible sandbox tokens).
    634   </p>
    635 </li>
    636 </ol>
    637 
    638 <p>
    639 Note that you only need to list pages that you expected to be loaded in
    640 windows or frames. Resources used by sandboxed pages (e.g. stylesheets or
    641 JavaScript source files) do not need to appear in the
    642 <code>sandboxed_page</code> list, they will use the sandbox of the page
    643 that embeds them.
    644 </p>
    645 
    646 <p>
    647 <a href="sandboxingEval.html">"Using eval in Chrome Extensions. Safely."</a>
    648 goes into more detail about implementing a sandboxing workflow that enables use
    649 of libraries that would otherwise have issues executing under extension's
    650 <a href="../extensions/contentSecurityPolicy.html">default Content Security
    651 Policy</a>.
    652 </p>
    653 
    654 <p>
    655 Sandboxed page may only be specified when using
    656 <a href="#manifest_version"><code>manifest_version</code></a> 2 or above.
    657 </p>
    658