[html5] r8036 - [giow] (3) navigator.plugins and company Fixing https://www.w3.org/Bugs/Public/s [...]
whatwg at whatwg.org
whatwg at whatwg.org
Mon Jul 8 18:19:49 PDT 2013
Author: ianh
Date: 2013-07-08 18:19:46 -0700 (Mon, 08 Jul 2013)
New Revision: 8036
Modified:
complete.html
index
source
Log:
[giow] (3) navigator.plugins and company
Fixing https://www.w3.org/Bugs/Public/show_bug.cgi?id=22553
Affected topics: DOM APIs, HTML
Modified: complete.html
===================================================================
--- complete.html 2013-07-03 23:00:32 UTC (rev 8035)
+++ complete.html 2013-07-09 01:19:46 UTC (rev 8036)
@@ -256,7 +256,7 @@
<header class=head id=head><p><a href=http://www.whatwg.org/ class=logo><img width=101 src=/images/logo alt=WHATWG height=101></a></p>
<hgroup><h1 class=allcaps>HTML</h1>
- <h2 class="no-num no-toc">Living Standard — Last Updated 3 July 2013</h2>
+ <h2 class="no-num no-toc">Living Standard — Last Updated 9 July 2013</h2>
</hgroup><dl><dt><strong>Web developer edition:</strong></dt>
<dd><strong><a href=http://developers.whatwg.org/>http://developers.whatwg.org/</a></strong></dd>
<dt>Multiple-page version:</dt>
@@ -1004,7 +1004,8 @@
<ol>
<li><a href=#security-and-privacy><span class=secno>7.5.1.3.1 </span>Security and privacy</a></li>
<li><a href=#sample-handler-impl><span class=secno>7.5.1.3.2 </span>Sample user interface</a></ol></li>
- <li><a href=#manually-releasing-the-storage-mutex><span class=secno>7.5.1.4 </span>Manually releasing the storage mutex</a></ol></li>
+ <li><a href=#manually-releasing-the-storage-mutex><span class=secno>7.5.1.4 </span>Manually releasing the storage mutex</a></li>
+ <li><a href=#plugins-0><span class=secno>7.5.1.5 </span>Plugins</a></ol></li>
<li><a href=#the-external-interface><span class=secno>7.5.2 </span>The <code>External</code> interface</a></ol></li>
<li><a href=#images><span class=secno>7.6 </span>Images</a></ol></li>
<li><a href=#editing><span class=secno>8 </span>User interaction</a>
@@ -3039,6 +3040,13 @@
privileges as the user agent itself, vulnerabilities in the third-party software become as
dangerous as those in the user agent.</p>
+ <p>Since different users having differents sets of <a href=#plugin title=plugin>plugins</a> provides a
+ fingerprinting vector that increases the chances of users being uniquely identified, user agents
+ are encouraged to support the exact same set of <a href=#plugin title=plugin>plugins</a> for each
+ user.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
</div>
@@ -73936,7 +73944,8 @@
<a href=#navigator>Navigator</a> implements <a href=#navigatorlanguage>NavigatorLanguage</a>;
<a href=#navigator>Navigator</a> implements <a href=#navigatoronline>NavigatorOnLine</a>;
<a href=#navigator>Navigator</a> implements <a href=#navigatorcontentutils>NavigatorContentUtils</a>;
-<a href=#navigator>Navigator</a> implements <a href=#navigatorstorageutils>NavigatorStorageUtils</a>;</pre>
+<a href=#navigator>Navigator</a> implements <a href=#navigatorstorageutils>NavigatorStorageUtils</a>;
+<a href=#navigator>Navigator</a> implements <a href=#navigatorplugins>NavigatorPlugins</a>;</pre>
<!-- v2:
cookieEnabled geolocator javaEnabled mozIsLocallyAvailable preference
@@ -74646,6 +74655,381 @@
</div>
+
+ <h5 id=plugins-0><span class=secno>7.5.1.5 </span>Plugins</h5>
+
+ <pre class=idl>[NoInterfaceObject]
+interface <dfn id=navigatorplugins>NavigatorPlugins</dfn> {
+ readonly attribute <a href=#pluginarray>PluginArray</a> <a href=#dom-navigator-plugins title=dom-navigator-plugins>plugins</a>;
+ readonly attribute <a href=#mimetypearray>MimeTypeArray</a> <a href=#dom-navigator-mimetypes title=dom-navigator-mimeTypes>mimeTypes</a>;
+};
+
+interface <dfn id=pluginarray>PluginArray</dfn> {
+ void <a href=#dom-pluginarray-refresh title=dom-PluginArray-refresh>refresh</a>(optional boolean reload = false);
+ readonly attribute unsigned long <a href=#dom-pluginarray-length title=dom-PluginArray-length>length</a>;
+ getter <a href=#dom-plugin title=dom-Plugin>Plugin</a>? <a href=#dom-pluginarray-item title=dom-PluginArray-item>item</a>(unsigned long index);
+ getter <a href=#dom-plugin title=dom-Plugin>Plugin</a>? <a href=#dom-pluginarray-nameditem title=dom-PluginArray-namedItem>namedItem</a>(DOMString name);
+};
+
+interface <dfn id=mimetypearray>MimeTypeArray</dfn> {
+ readonly attribute unsigned long <a href=#dom-mimetypearray-length title=dom-MimeTypeArray-length>length</a>;
+ getter <a href=#mimetype>MimeType</a>? <a href=#dom-mimetypearray-item title=dom-MimeTypeArray-item>item</a>(unsigned long index);
+ getter <a href=#mimetype>MimeType</a>? <a href=#dom-mimetypearray-nameditem title=dom-MimeTypeArray-namedItem>namedItem</a>(DOMString name);
+};
+
+interface <dfn id=dom-plugin title=dom-Plugin>Plugin</dfn> {
+ readonly attribute DOMString <a href=#dom-plugin-name title=dom-Plugin-name>name</a>;
+ readonly attribute DOMString <a href=#dom-plugin-description title=dom-Plugin-description>description</a>;
+ readonly attribute DOMString <a href=#dom-plugin-filename title=dom-Plugin-filename>filename</a>;
+ readonly attribute unsigned long <a href=#dom-plugin-length title=dom-Plugin-length>length</a>;
+ getter <a href=#mimetype>MimeType</a>? <a href=#dom-plugin-item title=dom-Plugin-item>item</a>(unsigned long index);
+ getter <a href=#mimetype>MimeType</a>? <a href=#dom-plugin-nameditem title=dom-Plugin-namedItem>namedItem</a>(DOMString name);
+};
+
+interface <dfn id=mimetype>MimeType</dfn> {
+ readonly attribute DOMString <a href=#dom-mimetype-type title=dom-MimeType-type>type</a>;
+ readonly attribute DOMString <a href=#dom-mimetype-description title=dom-MimeType-description>description</a>;
+ readonly attribute DOMString <a href=#dom-mimetype-suffixes title=dom-MimeType-suffixes>suffixes</a>; // comma-separated
+ readonly attribute <a href=#dom-plugin title=dom-Plugin>Plugin</a> <a href=#dom-mimetype-enabledplugin title=dom-MimeType-enabledPlugin>enabledPlugin</a>;
+};</pre>
+
+ <dl class=domintro><dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-plugins>plugins</code> . <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>refresh</a></code>( [ <var title="">refresh</var> ] )</dt>
+ <dd>
+ <p>Updates the lists of supported plugins and MIME types for this page, and reloads the page if the lists have changed.</p>
+ <!-- that's not quite what all browsers have always done -->
+ </dd>
+
+ <dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-plugins>plugins</code> . <code title=dom-PluginArray-length><a href=#dom-pluginarray-length>length</a></code></dt>
+ <dd>
+ <p>Returns the number of plugins, represented by <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> objects, that the user agent reports.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> = <var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-plugins>plugins</code> . <code title=dom-PluginArray-item><a href=#dom-pluginarray-item>item</a></code>(<var title="">index</var>)</dt>
+ <dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-plugins>plugins</code>[<var title="">index</var>]</dt>
+ <dd>
+ <p>Returns the specified <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> = <var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-plugins>plugins</code> . <code title=dom-PluginArray-item><a href=#dom-pluginarray-item>item</a></code>(<var title="">name</var>)</dt>
+ <dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-plugins>plugins</code>[<var title="">name</var>]</dt>
+ <dd>
+ <p>Returns the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object for the plugin with the given name.</p>
+ </dd>
+
+ <dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-mimeTypes>mimeTypes</code> . <code title=dom-MimeTypeArray-length><a href=#dom-mimetypearray-length>length</a></code></dt>
+ <dd>
+ <p>Returns the number of MIME types, represented by <code><a href=#mimetype>MimeType</a></code> objects, supported by the plugins that the user agent reports.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> = <var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-mimeTypes>mimeTypes</code> . <code title=dom-MimeTypeArray-item><a href=#dom-mimetypearray-item>item</a></code>(<var title="">index</var>)</dt>
+ <dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-mimeTypes>mimeTypes</code>[<var title="">index</var>]</dt>
+ <dd>
+ <p>Returns the specified <code><a href=#mimetype>MimeType</a></code> object.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> = <var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-mimeTypes>mimeTypes</code> . <code title=dom-MimeTypeArray-item><a href=#dom-mimetypearray-item>item</a></code>(<var title="">name</var>)</dt>
+ <dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-mimeTypes>mimeTypes</code>[<var title="">name</var>]</dt>
+ <dd>
+ <p>Returns the <code><a href=#mimetype>MimeType</a></code> object for the given MIME type.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> . <code title=dom-Plugin-name><a href=#dom-plugin-name>name</a></code>
+ <dd>
+ <p>Returns the plugin's name.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> . <code title=dom-Plugin-description><a href=#dom-plugin-description>description</a></code>
+ <dd>
+ <p>Returns the plugin's description.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> . <code title=dom-Plugin-filename><a href=#dom-plugin-filename>filename</a></code>
+ <dd>
+ <p>Returns the plugin library's filename, if applicable on the current platform.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> . <code title=dom-Plugin-length><a href=#dom-plugin-length>length</a></code></dt>
+ <dd>
+ <p>Returns the number of MIME types, represented by <code><a href=#mimetype>MimeType</a></code> objects, supported by the plugin.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> = <var title="">plugin</var> . <code title=dom-Plugin-item><a href=#dom-plugin-item>item</a></code>(<var title="">index</var>)</dt>
+ <dt><var title="">plugin</var>[<var title="">index</var>]</dt>
+ <dd>
+ <p>Returns the specified <code><a href=#mimetype>MimeType</a></code> object.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> = <var title="">plugin</var> . <code title=dom-Plugin-item><a href=#dom-plugin-item>item</a></code>(<var title="">name</var>)</dt>
+ <dt><var title="">plugin</var>[<var title="">name</var>]</dt>
+ <dd>
+ <p>Returns the <code><a href=#mimetype>MimeType</a></code> object for the given MIME type.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> . <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code>
+ <dd>
+ <p>Returns the MIME type.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> . <code title=dom-MimeType-description><a href=#dom-mimetype-description>description</a></code>
+ <dd>
+ <p>Returns the MIME type's description.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> . <code title=dom-MimeType-suffixes><a href=#dom-mimetype-suffixes>suffixes</a></code>
+ <dd>
+ <p>Returns the MIME type's typical file extensions, in a comma-separated list.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> . <code title=dom-MimeType-enabledPlugin><a href=#dom-mimetype-enabledplugin>enabledPlugin</a></code>
+ <dd>
+ <p>Returns the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object that implements this MIME type.</p>
+ </dd>
+
+ </dl><div class=impl>
+
+ <p>The <dfn id=dom-navigator-plugins title=dom-navigator-plugins><code>navigator.plugins</code></dfn> attribute must
+ return a <code><a href=#pluginarray>PluginArray</a></code> object. The same object must be returned each time.</p>
+
+ <p>The <dfn id=dom-navigator-mimetypes title=dom-navigator-mimeTypes><code>navigator.mimeTypes</code></dfn> attribute must
+ return a <code>MimeTypenArray</code> object. The same object must be returned each time.</p>
+
+ <hr><p>A <code><a href=#pluginarray>PluginArray</a></code> object represents none, some, or all of the <a href=#plugin title=plugin>plugins</a> supported by the user agent, each of which is represented by a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object. Each of these <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code>
+ objects may be <dfn id=hidden-plugin title="hidden plugin">hidden plugins</dfn>. A <a href=#hidden-plugin>hidden plugin</a> can't
+ be enumerated, but can still be inspected by using its name.</p>
+
+ <p class=note>The fewer <a href=#plugin title=plugin>plugins</a> are represented by the
+ <code><a href=#pluginarray>PluginArray</a></code> object, and of those, the more that are <a href=#hidden-plugin title="hidden
+ plugin">hidden</a>, the more the user's privacy will be protected. Each exposed plugin
+ increases the number of bits that can be derived for fingerprinting. Hiding a plugin helps, but
+ unless it is an extremely rare plugin, it is likely that a site attempting to derive the list of
+ plugins can still determine whether the plugin is supported or not by probing for it by name (the
+ names of popular plugins are widely known). Therefore not exposing a plugin at all is preferred.
+ Unfortunately, many legacy sites use this feature to determine, for example, which plugin to use
+ to play video. Not exposing any plugins at all might therefore not be entirely plausible.</p>
+
+ <p>The <code><a href=#pluginarray>PluginArray</a></code> objects created by a user agent must not be <a href=#live>live</a>. The
+ set of plugins represented by the objects must not change once an object is created, except when
+ it is updated by the <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>refresh()</a></code> method.</p>
+
+ <p>Each <a href=#plugin>plugin</a> represented by a <code><a href=#pluginarray>PluginArray</a></code> can support a number of
+ <a href=#mime-type title="MIME type">MIME types</a>. For each such <a href=#plugin>plugin</a>, the user agent must
+ pick one or more of these <a href=#mime-type title="MIME type">MIME types</a> to be those that are
+ <dfn id=explicitly-supported>explicitly supported</dfn>.</p>
+
+ <p class=note>The <a href=#explicitly-supported>explicitly supported</a> <a href=#mime-type title="MIME type">MIME types</a> of
+ a <a href=#plugin>plugin</a> are those that are exposed through the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> and <code><a href=#mimetypearray>MimeTypeArray</a></code> interfaces. As with <a href=#plugin title=plugin>plugins</a> themselves, any variation between users regarding what is exposed
+ allows sites to fingerprint users. User agents are therefore encouraged to expose the same <a href=#mime-type title="MIME type">MIME types</a> for all users of a <a href=#plugin>plugin</a>, regardless of the
+ actual types supported... at least, within the constraints imposed by compatibility with legacy
+ content.</p>
+
+ <p>The <a href=#supported-property-indices>supported property indices</a> of a <code><a href=#pluginarray>PluginArray</a></code> object are the
+ numbers from zero to the number of non-<a href=#hidden-plugin title="hidden plugin">hidden</a> <a href=#plugin title=plugin>plugins</a> represented by the object, if any.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-pluginarray-length title=dom-PluginArray-length><code>length</code></dfn> attribute must return the
+ number of non-<a href=#hidden-plugin title="hidden plugin">hidden</a> <a href=#plugin title=plugin>plugins</a>
+ represented by the object.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-pluginarray-item title=dom-PluginArray-item><code>item()</code></dfn> method of a
+ <code><a href=#pluginarray>PluginArray</a></code> object must return null if the argument is not one of the object's
+ <a href=#supported-property-indices>supported property indices</a>, and otherwise must return the result of running the
+ following steps, using the method's argument as <var title="">index</var>:</p>
+
+ <ol><li><p>Let <var title="">list</var> be the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> objects
+ representing the non-<a href=#hidden-plugin title="hidden plugin">hidden</a> <a href=#plugin title=plugin>plugins</a> represented by the <code><a href=#pluginarray>PluginArray</a></code> object.</li>
+
+ <li><p>Sort <var title="">list</var> alphabetically by the <code title=dom-Plugin-name><a href=#dom-plugin-name>name</a></code> of each <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code>.</li>
+
+ <li><p>Return the <var title="">index</var>th entry in <var title="">list</var>.</li>
+
+ </ol><p class=note>It is important <a href=#fingerprinting-vector class=no-backref title="fingerprinting vector">for
+ privacy</a> that the order of plugins not leak additional information, e.g. the order in which
+ plugins were installed.</p>
+
+ <p>The <a href=#supported-property-names>supported property names</a> of a <code><a href=#pluginarray>PluginArray</a></code> object are the values
+ of the <code title=dom-Plugin-name><a href=#dom-plugin-name>name</a></code> attributes of all the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> objects represented by the <code><a href=#pluginarray>PluginArray</a></code> object. The
+ properties exposed in this way must not be enumerable.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-pluginarray-nameditem title=dom-PluginArray-namedItem><code>namedItem()</code></dfn> method of a
+ <code><a href=#pluginarray>PluginArray</a></code> object must return null if the argument is not one of the object's
+ <a href=#supported-property-names>supported property names</a>, and otherwise must return the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object, of those represented by the <code><a href=#pluginarray>PluginArray</a></code>
+ object, that has a <code title=dom-Plugin-name><a href=#dom-plugin-name>name</a></code> equal to the method's argument.</p>
+
+ <p>The <dfn id=dom-pluginarray-refresh title=dom-PluginArray-refresh><code>refresh()</code></dfn> method of the
+ <code><a href=#pluginarray>PluginArray</a></code> object of a <code><a href=#navigator>Navigator</a></code> object, when invoked, must check to
+ see if any <a href=#plugin title=plugin>plugins</a> have been installed or reconfigured since the user
+ agent created the <code><a href=#pluginarray>PluginArray</a></code> object. If so, and the method's argument is true, then
+ the user agent must act as if the <code title=dom-location-reload><a href=#dom-location-reload>location.reload()</a></code>
+ method was called instead. Otherwise, the user agent must update the <code><a href=#pluginarray>PluginArray</a></code>
+ object and <code><a href=#mimetypearray>MimeTypeArray</a></code> object created for attributes of that <code><a href=#navigator>Navigator</a></code>
+ object, and the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> and <code><a href=#mimetype>MimeType</a></code> objects created
+ for those <code><a href=#pluginarray>PluginArray</a></code> and <code><a href=#mimetypearray>MimeTypeArray</a></code> objects, using the same <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> objects for cases where the <code title=dom-Plugin-name><a href=#dom-plugin-name>name</a></code> is the same, and the same <code><a href=#mimetype>MimeType</a></code> objects for
+ cases where the <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> is the same, and creating new objects
+ for cases where there were no matching objects immediately prior to the <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>refresh()</a></code> call. Old <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code>
+ and <code><a href=#mimetype>MimeType</a></code> objects must continue to return the same values that they had prior to
+ the update, though naturally now the data is stale and may appear inconsistent (for example, an
+ old <code><a href=#mimetype>MimeType</a></code> entry might list as its <code title=dom-MimeType-enabledPlugin><a href=#dom-mimetype-enabledplugin>enabledPlugin</a></code> a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code>
+ object that no longer lists that <code><a href=#mimetype>MimeType</a></code> as a supported <code><a href=#mimetype>MimeType</a></code>).</p>
+
+ <hr><p>A <code><a href=#mimetypearray>MimeTypeArray</a></code> object represents the <a href=#mime-type title="MIME type">MIME types</a>
+ <a href=#explicitly-supported>explicitly supported</a> by <a href=#plugin title=plugin>plugins</a> supported by the user
+ agent, each of which is represented by a <code><a href=#mimetype>MimeType</a></code> object.</p>
+
+ <p>The <code><a href=#mimetypearray>MimeTypeArray</a></code> objects created by a user agent must not be <a href=#live>live</a>.
+ The set of MIME types represented by the objects must not change once an object is created, except
+ when it is updated by the <code><a href=#pluginarray>PluginArray</a></code> object's <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>refresh()</a></code> method.</p>
+
+ <p>The <a href=#supported-property-indices>supported property indices</a> of a <code><a href=#mimetypearray>MimeTypeArray</a></code> object are the
+ numbers from zero to the number of <a href=#mime-type title="MIME type">MIME types</a> <a href=#explicitly-supported>explicitly
+ supported</a> by non-<a href=#hidden-plugin title="hidden plugin">hidden</a> <a href=#plugin title=plugin>plugins</a> represented by the corresponding <code><a href=#pluginarray>PluginArray</a></code> object, if
+ any.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-mimetypearray-length title=dom-MimeTypeArray-length><code>length</code></dfn> attribute must return the
+ number of <a href=#mime-type title="MIME type">MIME types</a> <a href=#explicitly-supported>explicitly supported</a> by non-<a href=#hidden-plugin title="hidden plugin">hidden</a> <a href=#plugin title=plugin>plugins</a> represented by the
+ corresponding <code><a href=#pluginarray>PluginArray</a></code> object, if any.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-mimetypearray-item title=dom-MimeTypeArray-item><code>item()</code></dfn> method of a
+ <code><a href=#mimetypearray>MimeTypeArray</a></code> object must return null if the argument is not one of the object's
+ <a href=#supported-property-indices>supported property indices</a>, and otherwise must return the result of running the
+ following steps, using the method's argument as <var title="">index</var>:</p>
+
+ <ol><li><p>Let <var title="">list</var> be the <code><a href=#mimetype>MimeType</a></code> objects representing the <a href=#mime-type title="MIME type">MIME types</a> <a href=#explicitly-supported>explicitly supported</a> by non-<a href=#hidden-plugin title="hidden
+ plugin">hidden</a> <a href=#plugin title=plugin>plugins</a> represented by the corresponding
+ <code><a href=#pluginarray>PluginArray</a></code> object, if any.</li>
+
+ <li><p>Sort <var title="">list</var> alphabetically by the <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> of each <code><a href=#mimetype>MimeType</a></code>.</li>
+
+ <li><p>Return the <var title="">index</var>th entry in <var title="">list</var>.</li>
+
+ </ol><p class=note>It is important <a href=#fingerprinting-vector class=no-backref title="fingerprinting vector">for
+ privacy</a> that the order of MIME types not leak additional information, e.g. the order in
+ which plugins were installed.</p>
+
+ <p>The <a href=#supported-property-names>supported property names</a> of a <code><a href=#mimetypearray>MimeTypeArray</a></code> object are the values
+ of the <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> attributes of all the <code><a href=#mimetype>MimeType</a></code>
+ objects represented by the <code><a href=#mimetypearray>MimeTypeArray</a></code> object. The properties exposed in this way
+ must not be enumerable.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-mimetypearray-nameditem title=dom-MimeTypeArray-namedItem><code>namedItem()</code></dfn> method of a
+ <code><a href=#mimetypearray>MimeTypeArray</a></code> object must return null if the argument is not one of the object's
+ <a href=#supported-property-names>supported property names</a>, and otherwise must return the <code><a href=#mimetype>MimeType</a></code> object
+ that has a <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> equal to the method's argument.</p>
+
+ <hr><p>A <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object represents a <a href=#plugin>plugin</a>. It has
+ several attributes to provide details about the plugin, and can be enumerated to obtain the list
+ of <a href=#mime-type title="MIME type">MIME types</a> that it <a href=#explicitly-supported title="explicitly supported">explicitly
+ supports</a>.</p>
+
+ <p>The <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> objects created by a user agent must not be
+ <a href=#live>live</a>. The set of MIME types represented by the objects, and the values of the
+ objects' attributes, must not change once an object is created, except when updated by the
+ <code><a href=#pluginarray>PluginArray</a></code> object's <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>refresh()</a></code>
+ method.</p>
+
+ <p>The <dfn id=reported-mime-types>reported MIME types</dfn> for a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object are the
+ <a href=#mime-type title="MIME type">MIME types</a> <a href=#explicitly-supported>explicitly supported</a> by the corresponding
+ <a href=#plugin>plugin</a> when this object was last created or updated by <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>PluginArray.refresh()</a></code>, whichever happened most
+ recently.</p>
+
+ <p>The <a href=#supported-property-indices>supported property indices</a> of a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object
+ are the numbers from zero to the number of <a href=#reported-mime-types>reported MIME types</a>.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-plugin-length title=dom-Plugin-length><code>length</code></dfn> attribute must return the number
+ of <a href=#reported-mime-types>reported MIME types</a>.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-plugin-item title=dom-Plugin-item><code>item()</code></dfn> method of a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object must return null if the argument is not one of the
+ object's <a href=#supported-property-indices>supported property indices</a>, and otherwise must return the result of running
+ the following steps, using the method's argument as <var title="">index</var>:</p>
+
+ <ol><li><p>Let <var title="">list</var> be the <code><a href=#mimetype>MimeType</a></code> objects representing the
+ <a href=#reported-mime-types>reported MIME types</a>.</li>
+
+ <li><p>Sort <var title="">list</var> alphabetically by the <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> of each <code><a href=#mimetype>MimeType</a></code>.</li>
+
+ <li><p>Return the <var title="">index</var>th entry in <var title="">list</var>.</li>
+
+ </ol><p class=note>It is important <a href=#fingerprinting-vector class=no-backref title="fingerprinting vector">for
+ privacy</a> that the order of MIME types not leak additional information, e.g. the order in
+ which plugins were installed.</p>
+
+ <p>The <a href=#supported-property-names>supported property names</a> of a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object
+ are the values of the <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> attributes of the
+ <code><a href=#mimetype>MimeType</a></code> objects representing the <a href=#reported-mime-types>reported MIME types</a>. The properties
+ exposed in this way must not be enumerable.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-plugin-nameditem title=dom-Plugin-namedItem><code>namedItem()</code></dfn> method of a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object must return null if the argument is not one of the
+ object's <a href=#supported-property-names>supported property names</a>, and otherwise must return the
+ <code><a href=#mimetype>MimeType</a></code> object that has a <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> equal to the
+ method's argument.</p>
+
+ <p>The <dfn id=dom-plugin-name title=dom-Plugin-name><code>name</code></dfn> attribute must return the
+ <a href=#plugin>plugin</a>'s name.</p>
+
+ <p>The <dfn id=dom-plugin-description title=dom-Plugin-description><code>description</code></dfn> and <dfn id=dom-plugin-filename title=dom-Plugin-filename><code>filename</code></dfn> attributes must return user-agent-defined
+ (or, in all likelihood, <a href=#plugin>plugin</a>-defined) strings. In each case, the same string must
+ be returned each time, except that the strings returned may change when the <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>PluginArray.refresh()</a></code> method updates the object.</p>
+
+ <p class=warning>If the values returned by the <code title=dom-Plugin-description><a href=#dom-plugin-description>description</a></code> or <code title=dom-Plugin-filename><a href=#dom-plugin-filename>filename</a></code> attributes vary between versions of a
+ <a href=#plugin>plugin</a>, they can be used both as a fingerprinting vector and, even more importantly,
+ as a trivial way to determine what security vulnerabilities a <a href=#plugin>plugin</a> (and thus a
+ browser) may have. It is thus highly recommended that the <code title=dom-Plugin-description><a href=#dom-plugin-description>description</a></code> attribute just return the same value as the
+ <code title=dom-Plugin-name><a href=#dom-plugin-name>name</a></code> attribute, and that the <code title=dom-Plugin-filename><a href=#dom-plugin-filename>filename</a></code> attribute return the empty string.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <hr><p>A <code><a href=#mimetype>MimeType</a></code> object represents a <a href=#mime-type>MIME type</a> that is, or was,
+ <a href=#explicitly-supported>explicitly supported</a> by a <a href=#plugin>plugin</a>.</p>
+
+ <p>The <code><a href=#mimetype>MimeType</a></code> objects created by a user agent must not be <a href=#live>live</a>. The
+ values of the objects' attributes must not change once an object is created, except when updated
+ by the <code><a href=#pluginarray>PluginArray</a></code> object's <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>refresh()</a></code>
+ method.</p>
+
+ <p>The <dfn id=dom-mimetype-type title=dom-MimeType-type><code>type</code></dfn> attribute must return the
+ <a href=#valid-mime-type-with-no-parameters>valid MIME type with no parameters</a> describing the <a href=#mime-type>MIME type</a>.</p>
+
+ <p>The <dfn id=dom-mimetype-description title=dom-MimeType-description><code>description</code></dfn> and <dfn id=dom-mimetype-suffixes title=dom-MimeType-suffixes><code>suffixes</code></dfn> attributes must return
+ user-agent-defined (or, in all likelihood, <a href=#plugin>plugin</a>-defined) strings. In each case, the
+ same string must be returned each time, except that the strings returned may change when the <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>PluginArray.refresh()</a></code> method updates the object.</p>
+
+ <p class=warning>If the values returned by the <code title=dom-MimeType-description><a href=#dom-mimetype-description>description</a></code> or <code title=dom-MimeType-suffixes><a href=#dom-mimetype-suffixes>suffxies</a></code> attributes vary between versions of a
+ <a href=#plugin>plugin</a>, they can be used both as a fingerprinting vector and, even more importantly,
+ as a trivial way to determine what security vulnerabilities a <a href=#plugin>plugin</a> (and thus a
+ browser) may have. It is thus highly recommended that the <code title=dom-MimeType-description><a href=#dom-mimetype-description>description</a></code> attribute just return the same value as the
+ <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> attribute, and that the <code title=dom-MimeType-suffixes><a href=#dom-mimetype-suffixes>suffixes</a></code> attribute return the empty string.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p class=note>Commas in the <code title=dom-MimeType-suffixes><a href=#dom-mimetype-suffixes>suffixes</a></code> attribute are
+ interpreted as separating subsequent filename extensions, as in "<code title="">htm,html</code>".</p>
+
+ <p>The <dfn id=dom-mimetype-enabledplugin title=dom-MimeType-enabledPlugin><code>enabledPlugin</code></dfn> attribute must
+ return the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object that represents the <a href=#plugin>plugin</a>
+ that <a href=#explicitly-supported>explicitly supported</a> the <a href=#mime-type>MIME type</a> that this <code><a href=#mimetype>MimeType</a></code>
+ object represents when this object was last created or updated by <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>PluginArray.refresh()</a></code>, whichever happened most
+ recently.</p>
+
+ </div>
+
+
+
<h4 id=the-external-interface><span class=secno>7.5.2 </span>The <code><a href=#external>External</a></code> interface</h4>
<div class=impl>
@@ -102722,15 +103106,20 @@
<li><code><a href=#messagechannel>MessageChannel</a></code>
<li><code><a href=#messageevent>MessageEvent</a></code>
<li><code><a href=#messageport>MessagePort</a></code>
+ <li><code><a href=#mimetype>MimeType</a></code>
+ <li><code><a href=#mimetypearray>MimeTypeArray</a></code>
<li><code>MouseEvent</code>, <a href=#MouseEvent-partial>partial</a>
<li><code><a href=#navigator>Navigator</a></code>
<li><code><a href=#navigatorcontentutils>NavigatorContentUtils</a></code>
<li><code><a href=#navigatorid>NavigatorID</a></code>
<li><code><a href=#navigatorlanguage>NavigatorLanguage</a></code>
<li><code><a href=#navigatoronline>NavigatorOnLine</a></code>
+ <li><code><a href=#navigatorplugins>NavigatorPlugins</a></code>
<li><code><a href=#navigatorstorageutils>NavigatorStorageUtils</a></code>
<li><code><a href=#pagetransitionevent>PageTransitionEvent</a></code>
<li><code><a href=#path>Path</a></code>
+ <li><code><a href=#dom-plugin>Plugin</a></code>
+ <li><code><a href=#pluginarray>PluginArray</a></code>
<li><code><a href=#popstateevent>PopStateEvent</a></code>
<li><code><a href=#portcollection>PortCollection</a></code>
<li><code><a href=#propertynodelist>PropertyNodeList</a></code>
@@ -103350,6 +103739,7 @@
Chris Evans,
Chris Morris,
Chris Pearce,
+ Chris Peterson,
Chris Weber,
Christian Biesinger,
Christian Johansen,
Modified: index
===================================================================
--- index 2013-07-03 23:00:32 UTC (rev 8035)
+++ index 2013-07-09 01:19:46 UTC (rev 8036)
@@ -256,7 +256,7 @@
<header class=head id=head><p><a href=http://www.whatwg.org/ class=logo><img width=101 src=/images/logo alt=WHATWG height=101></a></p>
<hgroup><h1 class=allcaps>HTML</h1>
- <h2 class="no-num no-toc">Living Standard — Last Updated 3 July 2013</h2>
+ <h2 class="no-num no-toc">Living Standard — Last Updated 9 July 2013</h2>
</hgroup><dl><dt><strong>Web developer edition:</strong></dt>
<dd><strong><a href=http://developers.whatwg.org/>http://developers.whatwg.org/</a></strong></dd>
<dt>Multiple-page version:</dt>
@@ -1004,7 +1004,8 @@
<ol>
<li><a href=#security-and-privacy><span class=secno>7.5.1.3.1 </span>Security and privacy</a></li>
<li><a href=#sample-handler-impl><span class=secno>7.5.1.3.2 </span>Sample user interface</a></ol></li>
- <li><a href=#manually-releasing-the-storage-mutex><span class=secno>7.5.1.4 </span>Manually releasing the storage mutex</a></ol></li>
+ <li><a href=#manually-releasing-the-storage-mutex><span class=secno>7.5.1.4 </span>Manually releasing the storage mutex</a></li>
+ <li><a href=#plugins-0><span class=secno>7.5.1.5 </span>Plugins</a></ol></li>
<li><a href=#the-external-interface><span class=secno>7.5.2 </span>The <code>External</code> interface</a></ol></li>
<li><a href=#images><span class=secno>7.6 </span>Images</a></ol></li>
<li><a href=#editing><span class=secno>8 </span>User interaction</a>
@@ -3039,6 +3040,13 @@
privileges as the user agent itself, vulnerabilities in the third-party software become as
dangerous as those in the user agent.</p>
+ <p>Since different users having differents sets of <a href=#plugin title=plugin>plugins</a> provides a
+ fingerprinting vector that increases the chances of users being uniquely identified, user agents
+ are encouraged to support the exact same set of <a href=#plugin title=plugin>plugins</a> for each
+ user.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
</div>
@@ -73936,7 +73944,8 @@
<a href=#navigator>Navigator</a> implements <a href=#navigatorlanguage>NavigatorLanguage</a>;
<a href=#navigator>Navigator</a> implements <a href=#navigatoronline>NavigatorOnLine</a>;
<a href=#navigator>Navigator</a> implements <a href=#navigatorcontentutils>NavigatorContentUtils</a>;
-<a href=#navigator>Navigator</a> implements <a href=#navigatorstorageutils>NavigatorStorageUtils</a>;</pre>
+<a href=#navigator>Navigator</a> implements <a href=#navigatorstorageutils>NavigatorStorageUtils</a>;
+<a href=#navigator>Navigator</a> implements <a href=#navigatorplugins>NavigatorPlugins</a>;</pre>
<!-- v2:
cookieEnabled geolocator javaEnabled mozIsLocallyAvailable preference
@@ -74646,6 +74655,381 @@
</div>
+
+ <h5 id=plugins-0><span class=secno>7.5.1.5 </span>Plugins</h5>
+
+ <pre class=idl>[NoInterfaceObject]
+interface <dfn id=navigatorplugins>NavigatorPlugins</dfn> {
+ readonly attribute <a href=#pluginarray>PluginArray</a> <a href=#dom-navigator-plugins title=dom-navigator-plugins>plugins</a>;
+ readonly attribute <a href=#mimetypearray>MimeTypeArray</a> <a href=#dom-navigator-mimetypes title=dom-navigator-mimeTypes>mimeTypes</a>;
+};
+
+interface <dfn id=pluginarray>PluginArray</dfn> {
+ void <a href=#dom-pluginarray-refresh title=dom-PluginArray-refresh>refresh</a>(optional boolean reload = false);
+ readonly attribute unsigned long <a href=#dom-pluginarray-length title=dom-PluginArray-length>length</a>;
+ getter <a href=#dom-plugin title=dom-Plugin>Plugin</a>? <a href=#dom-pluginarray-item title=dom-PluginArray-item>item</a>(unsigned long index);
+ getter <a href=#dom-plugin title=dom-Plugin>Plugin</a>? <a href=#dom-pluginarray-nameditem title=dom-PluginArray-namedItem>namedItem</a>(DOMString name);
+};
+
+interface <dfn id=mimetypearray>MimeTypeArray</dfn> {
+ readonly attribute unsigned long <a href=#dom-mimetypearray-length title=dom-MimeTypeArray-length>length</a>;
+ getter <a href=#mimetype>MimeType</a>? <a href=#dom-mimetypearray-item title=dom-MimeTypeArray-item>item</a>(unsigned long index);
+ getter <a href=#mimetype>MimeType</a>? <a href=#dom-mimetypearray-nameditem title=dom-MimeTypeArray-namedItem>namedItem</a>(DOMString name);
+};
+
+interface <dfn id=dom-plugin title=dom-Plugin>Plugin</dfn> {
+ readonly attribute DOMString <a href=#dom-plugin-name title=dom-Plugin-name>name</a>;
+ readonly attribute DOMString <a href=#dom-plugin-description title=dom-Plugin-description>description</a>;
+ readonly attribute DOMString <a href=#dom-plugin-filename title=dom-Plugin-filename>filename</a>;
+ readonly attribute unsigned long <a href=#dom-plugin-length title=dom-Plugin-length>length</a>;
+ getter <a href=#mimetype>MimeType</a>? <a href=#dom-plugin-item title=dom-Plugin-item>item</a>(unsigned long index);
+ getter <a href=#mimetype>MimeType</a>? <a href=#dom-plugin-nameditem title=dom-Plugin-namedItem>namedItem</a>(DOMString name);
+};
+
+interface <dfn id=mimetype>MimeType</dfn> {
+ readonly attribute DOMString <a href=#dom-mimetype-type title=dom-MimeType-type>type</a>;
+ readonly attribute DOMString <a href=#dom-mimetype-description title=dom-MimeType-description>description</a>;
+ readonly attribute DOMString <a href=#dom-mimetype-suffixes title=dom-MimeType-suffixes>suffixes</a>; // comma-separated
+ readonly attribute <a href=#dom-plugin title=dom-Plugin>Plugin</a> <a href=#dom-mimetype-enabledplugin title=dom-MimeType-enabledPlugin>enabledPlugin</a>;
+};</pre>
+
+ <dl class=domintro><dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-plugins>plugins</code> . <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>refresh</a></code>( [ <var title="">refresh</var> ] )</dt>
+ <dd>
+ <p>Updates the lists of supported plugins and MIME types for this page, and reloads the page if the lists have changed.</p>
+ <!-- that's not quite what all browsers have always done -->
+ </dd>
+
+ <dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-plugins>plugins</code> . <code title=dom-PluginArray-length><a href=#dom-pluginarray-length>length</a></code></dt>
+ <dd>
+ <p>Returns the number of plugins, represented by <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> objects, that the user agent reports.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> = <var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-plugins>plugins</code> . <code title=dom-PluginArray-item><a href=#dom-pluginarray-item>item</a></code>(<var title="">index</var>)</dt>
+ <dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-plugins>plugins</code>[<var title="">index</var>]</dt>
+ <dd>
+ <p>Returns the specified <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> = <var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-plugins>plugins</code> . <code title=dom-PluginArray-item><a href=#dom-pluginarray-item>item</a></code>(<var title="">name</var>)</dt>
+ <dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-plugins>plugins</code>[<var title="">name</var>]</dt>
+ <dd>
+ <p>Returns the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object for the plugin with the given name.</p>
+ </dd>
+
+ <dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-mimeTypes>mimeTypes</code> . <code title=dom-MimeTypeArray-length><a href=#dom-mimetypearray-length>length</a></code></dt>
+ <dd>
+ <p>Returns the number of MIME types, represented by <code><a href=#mimetype>MimeType</a></code> objects, supported by the plugins that the user agent reports.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> = <var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-mimeTypes>mimeTypes</code> . <code title=dom-MimeTypeArray-item><a href=#dom-mimetypearray-item>item</a></code>(<var title="">index</var>)</dt>
+ <dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-mimeTypes>mimeTypes</code>[<var title="">index</var>]</dt>
+ <dd>
+ <p>Returns the specified <code><a href=#mimetype>MimeType</a></code> object.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> = <var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-mimeTypes>mimeTypes</code> . <code title=dom-MimeTypeArray-item><a href=#dom-mimetypearray-item>item</a></code>(<var title="">name</var>)</dt>
+ <dt><var title="">window</var> . <code title=dom-navigator><a href=#dom-navigator>navigator</a></code> . <code title=dom-mimeTypes>mimeTypes</code>[<var title="">name</var>]</dt>
+ <dd>
+ <p>Returns the <code><a href=#mimetype>MimeType</a></code> object for the given MIME type.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> . <code title=dom-Plugin-name><a href=#dom-plugin-name>name</a></code>
+ <dd>
+ <p>Returns the plugin's name.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> . <code title=dom-Plugin-description><a href=#dom-plugin-description>description</a></code>
+ <dd>
+ <p>Returns the plugin's description.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> . <code title=dom-Plugin-filename><a href=#dom-plugin-filename>filename</a></code>
+ <dd>
+ <p>Returns the plugin library's filename, if applicable on the current platform.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> . <code title=dom-Plugin-length><a href=#dom-plugin-length>length</a></code></dt>
+ <dd>
+ <p>Returns the number of MIME types, represented by <code><a href=#mimetype>MimeType</a></code> objects, supported by the plugin.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> = <var title="">plugin</var> . <code title=dom-Plugin-item><a href=#dom-plugin-item>item</a></code>(<var title="">index</var>)</dt>
+ <dt><var title="">plugin</var>[<var title="">index</var>]</dt>
+ <dd>
+ <p>Returns the specified <code><a href=#mimetype>MimeType</a></code> object.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> = <var title="">plugin</var> . <code title=dom-Plugin-item><a href=#dom-plugin-item>item</a></code>(<var title="">name</var>)</dt>
+ <dt><var title="">plugin</var>[<var title="">name</var>]</dt>
+ <dd>
+ <p>Returns the <code><a href=#mimetype>MimeType</a></code> object for the given MIME type.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> . <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code>
+ <dd>
+ <p>Returns the MIME type.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> . <code title=dom-MimeType-description><a href=#dom-mimetype-description>description</a></code>
+ <dd>
+ <p>Returns the MIME type's description.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> . <code title=dom-MimeType-suffixes><a href=#dom-mimetype-suffixes>suffixes</a></code>
+ <dd>
+ <p>Returns the MIME type's typical file extensions, in a comma-separated list.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> . <code title=dom-MimeType-enabledPlugin><a href=#dom-mimetype-enabledplugin>enabledPlugin</a></code>
+ <dd>
+ <p>Returns the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object that implements this MIME type.</p>
+ </dd>
+
+ </dl><div class=impl>
+
+ <p>The <dfn id=dom-navigator-plugins title=dom-navigator-plugins><code>navigator.plugins</code></dfn> attribute must
+ return a <code><a href=#pluginarray>PluginArray</a></code> object. The same object must be returned each time.</p>
+
+ <p>The <dfn id=dom-navigator-mimetypes title=dom-navigator-mimeTypes><code>navigator.mimeTypes</code></dfn> attribute must
+ return a <code>MimeTypenArray</code> object. The same object must be returned each time.</p>
+
+ <hr><p>A <code><a href=#pluginarray>PluginArray</a></code> object represents none, some, or all of the <a href=#plugin title=plugin>plugins</a> supported by the user agent, each of which is represented by a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object. Each of these <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code>
+ objects may be <dfn id=hidden-plugin title="hidden plugin">hidden plugins</dfn>. A <a href=#hidden-plugin>hidden plugin</a> can't
+ be enumerated, but can still be inspected by using its name.</p>
+
+ <p class=note>The fewer <a href=#plugin title=plugin>plugins</a> are represented by the
+ <code><a href=#pluginarray>PluginArray</a></code> object, and of those, the more that are <a href=#hidden-plugin title="hidden
+ plugin">hidden</a>, the more the user's privacy will be protected. Each exposed plugin
+ increases the number of bits that can be derived for fingerprinting. Hiding a plugin helps, but
+ unless it is an extremely rare plugin, it is likely that a site attempting to derive the list of
+ plugins can still determine whether the plugin is supported or not by probing for it by name (the
+ names of popular plugins are widely known). Therefore not exposing a plugin at all is preferred.
+ Unfortunately, many legacy sites use this feature to determine, for example, which plugin to use
+ to play video. Not exposing any plugins at all might therefore not be entirely plausible.</p>
+
+ <p>The <code><a href=#pluginarray>PluginArray</a></code> objects created by a user agent must not be <a href=#live>live</a>. The
+ set of plugins represented by the objects must not change once an object is created, except when
+ it is updated by the <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>refresh()</a></code> method.</p>
+
+ <p>Each <a href=#plugin>plugin</a> represented by a <code><a href=#pluginarray>PluginArray</a></code> can support a number of
+ <a href=#mime-type title="MIME type">MIME types</a>. For each such <a href=#plugin>plugin</a>, the user agent must
+ pick one or more of these <a href=#mime-type title="MIME type">MIME types</a> to be those that are
+ <dfn id=explicitly-supported>explicitly supported</dfn>.</p>
+
+ <p class=note>The <a href=#explicitly-supported>explicitly supported</a> <a href=#mime-type title="MIME type">MIME types</a> of
+ a <a href=#plugin>plugin</a> are those that are exposed through the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> and <code><a href=#mimetypearray>MimeTypeArray</a></code> interfaces. As with <a href=#plugin title=plugin>plugins</a> themselves, any variation between users regarding what is exposed
+ allows sites to fingerprint users. User agents are therefore encouraged to expose the same <a href=#mime-type title="MIME type">MIME types</a> for all users of a <a href=#plugin>plugin</a>, regardless of the
+ actual types supported... at least, within the constraints imposed by compatibility with legacy
+ content.</p>
+
+ <p>The <a href=#supported-property-indices>supported property indices</a> of a <code><a href=#pluginarray>PluginArray</a></code> object are the
+ numbers from zero to the number of non-<a href=#hidden-plugin title="hidden plugin">hidden</a> <a href=#plugin title=plugin>plugins</a> represented by the object, if any.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-pluginarray-length title=dom-PluginArray-length><code>length</code></dfn> attribute must return the
+ number of non-<a href=#hidden-plugin title="hidden plugin">hidden</a> <a href=#plugin title=plugin>plugins</a>
+ represented by the object.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-pluginarray-item title=dom-PluginArray-item><code>item()</code></dfn> method of a
+ <code><a href=#pluginarray>PluginArray</a></code> object must return null if the argument is not one of the object's
+ <a href=#supported-property-indices>supported property indices</a>, and otherwise must return the result of running the
+ following steps, using the method's argument as <var title="">index</var>:</p>
+
+ <ol><li><p>Let <var title="">list</var> be the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> objects
+ representing the non-<a href=#hidden-plugin title="hidden plugin">hidden</a> <a href=#plugin title=plugin>plugins</a> represented by the <code><a href=#pluginarray>PluginArray</a></code> object.</li>
+
+ <li><p>Sort <var title="">list</var> alphabetically by the <code title=dom-Plugin-name><a href=#dom-plugin-name>name</a></code> of each <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code>.</li>
+
+ <li><p>Return the <var title="">index</var>th entry in <var title="">list</var>.</li>
+
+ </ol><p class=note>It is important <a href=#fingerprinting-vector class=no-backref title="fingerprinting vector">for
+ privacy</a> that the order of plugins not leak additional information, e.g. the order in which
+ plugins were installed.</p>
+
+ <p>The <a href=#supported-property-names>supported property names</a> of a <code><a href=#pluginarray>PluginArray</a></code> object are the values
+ of the <code title=dom-Plugin-name><a href=#dom-plugin-name>name</a></code> attributes of all the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> objects represented by the <code><a href=#pluginarray>PluginArray</a></code> object. The
+ properties exposed in this way must not be enumerable.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-pluginarray-nameditem title=dom-PluginArray-namedItem><code>namedItem()</code></dfn> method of a
+ <code><a href=#pluginarray>PluginArray</a></code> object must return null if the argument is not one of the object's
+ <a href=#supported-property-names>supported property names</a>, and otherwise must return the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object, of those represented by the <code><a href=#pluginarray>PluginArray</a></code>
+ object, that has a <code title=dom-Plugin-name><a href=#dom-plugin-name>name</a></code> equal to the method's argument.</p>
+
+ <p>The <dfn id=dom-pluginarray-refresh title=dom-PluginArray-refresh><code>refresh()</code></dfn> method of the
+ <code><a href=#pluginarray>PluginArray</a></code> object of a <code><a href=#navigator>Navigator</a></code> object, when invoked, must check to
+ see if any <a href=#plugin title=plugin>plugins</a> have been installed or reconfigured since the user
+ agent created the <code><a href=#pluginarray>PluginArray</a></code> object. If so, and the method's argument is true, then
+ the user agent must act as if the <code title=dom-location-reload><a href=#dom-location-reload>location.reload()</a></code>
+ method was called instead. Otherwise, the user agent must update the <code><a href=#pluginarray>PluginArray</a></code>
+ object and <code><a href=#mimetypearray>MimeTypeArray</a></code> object created for attributes of that <code><a href=#navigator>Navigator</a></code>
+ object, and the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> and <code><a href=#mimetype>MimeType</a></code> objects created
+ for those <code><a href=#pluginarray>PluginArray</a></code> and <code><a href=#mimetypearray>MimeTypeArray</a></code> objects, using the same <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> objects for cases where the <code title=dom-Plugin-name><a href=#dom-plugin-name>name</a></code> is the same, and the same <code><a href=#mimetype>MimeType</a></code> objects for
+ cases where the <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> is the same, and creating new objects
+ for cases where there were no matching objects immediately prior to the <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>refresh()</a></code> call. Old <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code>
+ and <code><a href=#mimetype>MimeType</a></code> objects must continue to return the same values that they had prior to
+ the update, though naturally now the data is stale and may appear inconsistent (for example, an
+ old <code><a href=#mimetype>MimeType</a></code> entry might list as its <code title=dom-MimeType-enabledPlugin><a href=#dom-mimetype-enabledplugin>enabledPlugin</a></code> a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code>
+ object that no longer lists that <code><a href=#mimetype>MimeType</a></code> as a supported <code><a href=#mimetype>MimeType</a></code>).</p>
+
+ <hr><p>A <code><a href=#mimetypearray>MimeTypeArray</a></code> object represents the <a href=#mime-type title="MIME type">MIME types</a>
+ <a href=#explicitly-supported>explicitly supported</a> by <a href=#plugin title=plugin>plugins</a> supported by the user
+ agent, each of which is represented by a <code><a href=#mimetype>MimeType</a></code> object.</p>
+
+ <p>The <code><a href=#mimetypearray>MimeTypeArray</a></code> objects created by a user agent must not be <a href=#live>live</a>.
+ The set of MIME types represented by the objects must not change once an object is created, except
+ when it is updated by the <code><a href=#pluginarray>PluginArray</a></code> object's <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>refresh()</a></code> method.</p>
+
+ <p>The <a href=#supported-property-indices>supported property indices</a> of a <code><a href=#mimetypearray>MimeTypeArray</a></code> object are the
+ numbers from zero to the number of <a href=#mime-type title="MIME type">MIME types</a> <a href=#explicitly-supported>explicitly
+ supported</a> by non-<a href=#hidden-plugin title="hidden plugin">hidden</a> <a href=#plugin title=plugin>plugins</a> represented by the corresponding <code><a href=#pluginarray>PluginArray</a></code> object, if
+ any.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-mimetypearray-length title=dom-MimeTypeArray-length><code>length</code></dfn> attribute must return the
+ number of <a href=#mime-type title="MIME type">MIME types</a> <a href=#explicitly-supported>explicitly supported</a> by non-<a href=#hidden-plugin title="hidden plugin">hidden</a> <a href=#plugin title=plugin>plugins</a> represented by the
+ corresponding <code><a href=#pluginarray>PluginArray</a></code> object, if any.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-mimetypearray-item title=dom-MimeTypeArray-item><code>item()</code></dfn> method of a
+ <code><a href=#mimetypearray>MimeTypeArray</a></code> object must return null if the argument is not one of the object's
+ <a href=#supported-property-indices>supported property indices</a>, and otherwise must return the result of running the
+ following steps, using the method's argument as <var title="">index</var>:</p>
+
+ <ol><li><p>Let <var title="">list</var> be the <code><a href=#mimetype>MimeType</a></code> objects representing the <a href=#mime-type title="MIME type">MIME types</a> <a href=#explicitly-supported>explicitly supported</a> by non-<a href=#hidden-plugin title="hidden
+ plugin">hidden</a> <a href=#plugin title=plugin>plugins</a> represented by the corresponding
+ <code><a href=#pluginarray>PluginArray</a></code> object, if any.</li>
+
+ <li><p>Sort <var title="">list</var> alphabetically by the <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> of each <code><a href=#mimetype>MimeType</a></code>.</li>
+
+ <li><p>Return the <var title="">index</var>th entry in <var title="">list</var>.</li>
+
+ </ol><p class=note>It is important <a href=#fingerprinting-vector class=no-backref title="fingerprinting vector">for
+ privacy</a> that the order of MIME types not leak additional information, e.g. the order in
+ which plugins were installed.</p>
+
+ <p>The <a href=#supported-property-names>supported property names</a> of a <code><a href=#mimetypearray>MimeTypeArray</a></code> object are the values
+ of the <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> attributes of all the <code><a href=#mimetype>MimeType</a></code>
+ objects represented by the <code><a href=#mimetypearray>MimeTypeArray</a></code> object. The properties exposed in this way
+ must not be enumerable.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-mimetypearray-nameditem title=dom-MimeTypeArray-namedItem><code>namedItem()</code></dfn> method of a
+ <code><a href=#mimetypearray>MimeTypeArray</a></code> object must return null if the argument is not one of the object's
+ <a href=#supported-property-names>supported property names</a>, and otherwise must return the <code><a href=#mimetype>MimeType</a></code> object
+ that has a <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> equal to the method's argument.</p>
+
+ <hr><p>A <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object represents a <a href=#plugin>plugin</a>. It has
+ several attributes to provide details about the plugin, and can be enumerated to obtain the list
+ of <a href=#mime-type title="MIME type">MIME types</a> that it <a href=#explicitly-supported title="explicitly supported">explicitly
+ supports</a>.</p>
+
+ <p>The <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> objects created by a user agent must not be
+ <a href=#live>live</a>. The set of MIME types represented by the objects, and the values of the
+ objects' attributes, must not change once an object is created, except when updated by the
+ <code><a href=#pluginarray>PluginArray</a></code> object's <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>refresh()</a></code>
+ method.</p>
+
+ <p>The <dfn id=reported-mime-types>reported MIME types</dfn> for a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object are the
+ <a href=#mime-type title="MIME type">MIME types</a> <a href=#explicitly-supported>explicitly supported</a> by the corresponding
+ <a href=#plugin>plugin</a> when this object was last created or updated by <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>PluginArray.refresh()</a></code>, whichever happened most
+ recently.</p>
+
+ <p>The <a href=#supported-property-indices>supported property indices</a> of a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object
+ are the numbers from zero to the number of <a href=#reported-mime-types>reported MIME types</a>.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-plugin-length title=dom-Plugin-length><code>length</code></dfn> attribute must return the number
+ of <a href=#reported-mime-types>reported MIME types</a>.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-plugin-item title=dom-Plugin-item><code>item()</code></dfn> method of a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object must return null if the argument is not one of the
+ object's <a href=#supported-property-indices>supported property indices</a>, and otherwise must return the result of running
+ the following steps, using the method's argument as <var title="">index</var>:</p>
+
+ <ol><li><p>Let <var title="">list</var> be the <code><a href=#mimetype>MimeType</a></code> objects representing the
+ <a href=#reported-mime-types>reported MIME types</a>.</li>
+
+ <li><p>Sort <var title="">list</var> alphabetically by the <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> of each <code><a href=#mimetype>MimeType</a></code>.</li>
+
+ <li><p>Return the <var title="">index</var>th entry in <var title="">list</var>.</li>
+
+ </ol><p class=note>It is important <a href=#fingerprinting-vector class=no-backref title="fingerprinting vector">for
+ privacy</a> that the order of MIME types not leak additional information, e.g. the order in
+ which plugins were installed.</p>
+
+ <p>The <a href=#supported-property-names>supported property names</a> of a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object
+ are the values of the <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> attributes of the
+ <code><a href=#mimetype>MimeType</a></code> objects representing the <a href=#reported-mime-types>reported MIME types</a>. The properties
+ exposed in this way must not be enumerable.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p>The <dfn id=dom-plugin-nameditem title=dom-Plugin-namedItem><code>namedItem()</code></dfn> method of a <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object must return null if the argument is not one of the
+ object's <a href=#supported-property-names>supported property names</a>, and otherwise must return the
+ <code><a href=#mimetype>MimeType</a></code> object that has a <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> equal to the
+ method's argument.</p>
+
+ <p>The <dfn id=dom-plugin-name title=dom-Plugin-name><code>name</code></dfn> attribute must return the
+ <a href=#plugin>plugin</a>'s name.</p>
+
+ <p>The <dfn id=dom-plugin-description title=dom-Plugin-description><code>description</code></dfn> and <dfn id=dom-plugin-filename title=dom-Plugin-filename><code>filename</code></dfn> attributes must return user-agent-defined
+ (or, in all likelihood, <a href=#plugin>plugin</a>-defined) strings. In each case, the same string must
+ be returned each time, except that the strings returned may change when the <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>PluginArray.refresh()</a></code> method updates the object.</p>
+
+ <p class=warning>If the values returned by the <code title=dom-Plugin-description><a href=#dom-plugin-description>description</a></code> or <code title=dom-Plugin-filename><a href=#dom-plugin-filename>filename</a></code> attributes vary between versions of a
+ <a href=#plugin>plugin</a>, they can be used both as a fingerprinting vector and, even more importantly,
+ as a trivial way to determine what security vulnerabilities a <a href=#plugin>plugin</a> (and thus a
+ browser) may have. It is thus highly recommended that the <code title=dom-Plugin-description><a href=#dom-plugin-description>description</a></code> attribute just return the same value as the
+ <code title=dom-Plugin-name><a href=#dom-plugin-name>name</a></code> attribute, and that the <code title=dom-Plugin-filename><a href=#dom-plugin-filename>filename</a></code> attribute return the empty string.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <hr><p>A <code><a href=#mimetype>MimeType</a></code> object represents a <a href=#mime-type>MIME type</a> that is, or was,
+ <a href=#explicitly-supported>explicitly supported</a> by a <a href=#plugin>plugin</a>.</p>
+
+ <p>The <code><a href=#mimetype>MimeType</a></code> objects created by a user agent must not be <a href=#live>live</a>. The
+ values of the objects' attributes must not change once an object is created, except when updated
+ by the <code><a href=#pluginarray>PluginArray</a></code> object's <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>refresh()</a></code>
+ method.</p>
+
+ <p>The <dfn id=dom-mimetype-type title=dom-MimeType-type><code>type</code></dfn> attribute must return the
+ <a href=#valid-mime-type-with-no-parameters>valid MIME type with no parameters</a> describing the <a href=#mime-type>MIME type</a>.</p>
+
+ <p>The <dfn id=dom-mimetype-description title=dom-MimeType-description><code>description</code></dfn> and <dfn id=dom-mimetype-suffixes title=dom-MimeType-suffixes><code>suffixes</code></dfn> attributes must return
+ user-agent-defined (or, in all likelihood, <a href=#plugin>plugin</a>-defined) strings. In each case, the
+ same string must be returned each time, except that the strings returned may change when the <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>PluginArray.refresh()</a></code> method updates the object.</p>
+
+ <p class=warning>If the values returned by the <code title=dom-MimeType-description><a href=#dom-mimetype-description>description</a></code> or <code title=dom-MimeType-suffixes><a href=#dom-mimetype-suffixes>suffxies</a></code> attributes vary between versions of a
+ <a href=#plugin>plugin</a>, they can be used both as a fingerprinting vector and, even more importantly,
+ as a trivial way to determine what security vulnerabilities a <a href=#plugin>plugin</a> (and thus a
+ browser) may have. It is thus highly recommended that the <code title=dom-MimeType-description><a href=#dom-mimetype-description>description</a></code> attribute just return the same value as the
+ <code title=dom-MimeType-type><a href=#dom-mimetype-type>type</a></code> attribute, and that the <code title=dom-MimeType-suffixes><a href=#dom-mimetype-suffixes>suffixes</a></code> attribute return the empty string.
+ <a href=#fingerprinting-vector class=fingerprint title="fingerprinting vector"><img src=http://images.whatwg.org/fingerprint.png width=46 alt="(This is a fingerprinting vector.)" height=64></a>
+ </p>
+
+ <p class=note>Commas in the <code title=dom-MimeType-suffixes><a href=#dom-mimetype-suffixes>suffixes</a></code> attribute are
+ interpreted as separating subsequent filename extensions, as in "<code title="">htm,html</code>".</p>
+
+ <p>The <dfn id=dom-mimetype-enabledplugin title=dom-MimeType-enabledPlugin><code>enabledPlugin</code></dfn> attribute must
+ return the <code title=dom-Plugin><a href=#dom-plugin>Plugin</a></code> object that represents the <a href=#plugin>plugin</a>
+ that <a href=#explicitly-supported>explicitly supported</a> the <a href=#mime-type>MIME type</a> that this <code><a href=#mimetype>MimeType</a></code>
+ object represents when this object was last created or updated by <code title=dom-PluginArray-refresh><a href=#dom-pluginarray-refresh>PluginArray.refresh()</a></code>, whichever happened most
+ recently.</p>
+
+ </div>
+
+
+
<h4 id=the-external-interface><span class=secno>7.5.2 </span>The <code><a href=#external>External</a></code> interface</h4>
<div class=impl>
@@ -102722,15 +103106,20 @@
<li><code><a href=#messagechannel>MessageChannel</a></code>
<li><code><a href=#messageevent>MessageEvent</a></code>
<li><code><a href=#messageport>MessagePort</a></code>
+ <li><code><a href=#mimetype>MimeType</a></code>
+ <li><code><a href=#mimetypearray>MimeTypeArray</a></code>
<li><code>MouseEvent</code>, <a href=#MouseEvent-partial>partial</a>
<li><code><a href=#navigator>Navigator</a></code>
<li><code><a href=#navigatorcontentutils>NavigatorContentUtils</a></code>
<li><code><a href=#navigatorid>NavigatorID</a></code>
<li><code><a href=#navigatorlanguage>NavigatorLanguage</a></code>
<li><code><a href=#navigatoronline>NavigatorOnLine</a></code>
+ <li><code><a href=#navigatorplugins>NavigatorPlugins</a></code>
<li><code><a href=#navigatorstorageutils>NavigatorStorageUtils</a></code>
<li><code><a href=#pagetransitionevent>PageTransitionEvent</a></code>
<li><code><a href=#path>Path</a></code>
+ <li><code><a href=#dom-plugin>Plugin</a></code>
+ <li><code><a href=#pluginarray>PluginArray</a></code>
<li><code><a href=#popstateevent>PopStateEvent</a></code>
<li><code><a href=#portcollection>PortCollection</a></code>
<li><code><a href=#propertynodelist>PropertyNodeList</a></code>
@@ -103350,6 +103739,7 @@
Chris Evans,
Chris Morris,
Chris Pearce,
+ Chris Peterson,
Chris Weber,
Christian Biesinger,
Christian Johansen,
Modified: source
===================================================================
--- source 2013-07-03 23:00:32 UTC (rev 8035)
+++ source 2013-07-09 01:19:46 UTC (rev 8036)
@@ -1798,6 +1798,13 @@
privileges as the user agent itself, vulnerabilities in the third-party software become as
dangerous as those in the user agent.</p>
+ <p>Since different users having differents sets of <span title="plugin">plugins</span> provides a
+ fingerprinting vector that increases the chances of users being uniquely identified, user agents
+ are encouraged to support the exact same set of <span title="plugin">plugins</span> for each
+ user.
+ <!--INSERT FINGERPRINT-->
+ </p>
+
</div>
@@ -82767,7 +82774,8 @@
<span>Navigator</span> implements <span>NavigatorLanguage</span>;
<span>Navigator</span> implements <span>NavigatorOnLine</span>;
<span>Navigator</span> implements <span>NavigatorContentUtils</span>;
-<span>Navigator</span> implements <span>NavigatorStorageUtils</span>;</pre>
+<span>Navigator</span> implements <span>NavigatorStorageUtils</span>;
+<span>Navigator</span> implements <span>NavigatorPlugins</span>;</pre>
<!-- v2:
cookieEnabled geolocator javaEnabled mozIsLocallyAvailable preference
@@ -83575,6 +83583,442 @@
</div>
+
+ <h5>Plugins</h5>
+
+ <pre class="idl">[NoInterfaceObject]
+interface <dfn>NavigatorPlugins</dfn> {
+ readonly attribute <span>PluginArray</span> <span title="dom-navigator-plugins">plugins</span>;
+ readonly attribute <span>MimeTypeArray</span> <span title="dom-navigator-mimeTypes">mimeTypes</span>;
+};
+
+interface <dfn>PluginArray</dfn> {
+ void <span title="dom-PluginArray-refresh">refresh</span>(optional boolean reload = false);
+ readonly attribute unsigned long <span title="dom-PluginArray-length">length</span>;
+ getter <span title="dom-Plugin">Plugin</span>? <span title="dom-PluginArray-item">item</span>(unsigned long index);
+ getter <span title="dom-Plugin">Plugin</span>? <span title="dom-PluginArray-namedItem">namedItem</span>(DOMString name);
+};
+
+interface <dfn>MimeTypeArray</dfn> {
+ readonly attribute unsigned long <span title="dom-MimeTypeArray-length">length</span>;
+ getter <span>MimeType</span>? <span title="dom-MimeTypeArray-item">item</span>(unsigned long index);
+ getter <span>MimeType</span>? <span title="dom-MimeTypeArray-namedItem">namedItem</span>(DOMString name);
+};
+
+interface <dfn title="dom-Plugin">Plugin</dfn> {
+ readonly attribute DOMString <span title="dom-Plugin-name">name</span>;
+ readonly attribute DOMString <span title="dom-Plugin-description">description</span>;
+ readonly attribute DOMString <span title="dom-Plugin-filename">filename</span>;
+ readonly attribute unsigned long <span title="dom-Plugin-length">length</span>;
+ getter <span>MimeType</span>? <span title="dom-Plugin-item">item</span>(unsigned long index);
+ getter <span>MimeType</span>? <span title="dom-Plugin-namedItem">namedItem</span>(DOMString name);
+};
+
+interface <dfn>MimeType</dfn> {
+ readonly attribute DOMString <span title="dom-MimeType-type">type</span>;
+ readonly attribute DOMString <span title="dom-MimeType-description">description</span>;
+ readonly attribute DOMString <span title="dom-MimeType-suffixes">suffixes</span>; // comma-separated
+ readonly attribute <span title="dom-Plugin">Plugin</span> <span title="dom-MimeType-enabledPlugin">enabledPlugin</span>;
+};</pre>
+
+ <dl class="domintro">
+
+ <dt><var title="">window</var> . <code title="dom-navigator">navigator</code> . <code title="dom-plugins">plugins</code> . <code title="dom-PluginArray-refresh">refresh</code>( [ <var title="">refresh</var> ] )</dt>
+ <dd>
+ <p>Updates the lists of supported plugins and MIME types for this page, and reloads the page if the lists have changed.</p>
+ <!-- that's not quite what all browsers have always done -->
+ </dd>
+
+ <dt><var title="">window</var> . <code title="dom-navigator">navigator</code> . <code title="dom-plugins">plugins</code> . <code title="dom-PluginArray-length">length</code></dt>
+ <dd>
+ <p>Returns the number of plugins, represented by <code title="dom-Plugin">Plugin</code> objects, that the user agent reports.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> = <var title="">window</var> . <code title="dom-navigator">navigator</code> . <code title="dom-plugins">plugins</code> . <code title="dom-PluginArray-item">item</code>(<var title="">index</var>)</dt>
+ <dt><var title="">window</var> . <code title="dom-navigator">navigator</code> . <code title="dom-plugins">plugins</code>[<var title="">index</var>]</dt>
+ <dd>
+ <p>Returns the specified <code title="dom-Plugin">Plugin</code> object.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> = <var title="">window</var> . <code title="dom-navigator">navigator</code> . <code title="dom-plugins">plugins</code> . <code title="dom-PluginArray-item">item</code>(<var title="">name</var>)</dt>
+ <dt><var title="">window</var> . <code title="dom-navigator">navigator</code> . <code title="dom-plugins">plugins</code>[<var title="">name</var>]</dt>
+ <dd>
+ <p>Returns the <code title="dom-Plugin">Plugin</code> object for the plugin with the given name.</p>
+ </dd>
+
+ <dt><var title="">window</var> . <code title="dom-navigator">navigator</code> . <code title="dom-mimeTypes">mimeTypes</code> . <code title="dom-MimeTypeArray-length">length</code></dt>
+ <dd>
+ <p>Returns the number of MIME types, represented by <code>MimeType</code> objects, supported by the plugins that the user agent reports.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> = <var title="">window</var> . <code title="dom-navigator">navigator</code> . <code title="dom-mimeTypes">mimeTypes</code> . <code title="dom-MimeTypeArray-item">item</code>(<var title="">index</var>)</dt>
+ <dt><var title="">window</var> . <code title="dom-navigator">navigator</code> . <code title="dom-mimeTypes">mimeTypes</code>[<var title="">index</var>]</dt>
+ <dd>
+ <p>Returns the specified <code>MimeType</code> object.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> = <var title="">window</var> . <code title="dom-navigator">navigator</code> . <code title="dom-mimeTypes">mimeTypes</code> . <code title="dom-MimeTypeArray-item">item</code>(<var title="">name</var>)</dt>
+ <dt><var title="">window</var> . <code title="dom-navigator">navigator</code> . <code title="dom-mimeTypes">mimeTypes</code>[<var title="">name</var>]</dt>
+ <dd>
+ <p>Returns the <code>MimeType</code> object for the given MIME type.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> . <code title="dom-Plugin-name">name</code>
+ <dd>
+ <p>Returns the plugin's name.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> . <code title="dom-Plugin-description">description</code>
+ <dd>
+ <p>Returns the plugin's description.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> . <code title="dom-Plugin-filename">filename</code>
+ <dd>
+ <p>Returns the plugin library's filename, if applicable on the current platform.</p>
+ </dd>
+
+ <dt><var title="">plugin</var> . <code title="dom-Plugin-length">length</code></dt>
+ <dd>
+ <p>Returns the number of MIME types, represented by <code>MimeType</code> objects, supported by the plugin.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> = <var title="">plugin</var> . <code title="dom-Plugin-item">item</code>(<var title="">index</var>)</dt>
+ <dt><var title="">plugin</var>[<var title="">index</var>]</dt>
+ <dd>
+ <p>Returns the specified <code>MimeType</code> object.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> = <var title="">plugin</var> . <code title="dom-Plugin-item">item</code>(<var title="">name</var>)</dt>
+ <dt><var title="">plugin</var>[<var title="">name</var>]</dt>
+ <dd>
+ <p>Returns the <code>MimeType</code> object for the given MIME type.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> . <code title="dom-MimeType-type">type</code>
+ <dd>
+ <p>Returns the MIME type.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> . <code title="dom-MimeType-description">description</code>
+ <dd>
+ <p>Returns the MIME type's description.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> . <code title="dom-MimeType-suffixes">suffixes</code>
+ <dd>
+ <p>Returns the MIME type's typical file extensions, in a comma-separated list.</p>
+ </dd>
+
+ <dt><var title="">mimeType</var> . <code title="dom-MimeType-enabledPlugin">enabledPlugin</code>
+ <dd>
+ <p>Returns the <code title="dom-Plugin">Plugin</code> object that implements this MIME type.</p>
+ </dd>
+
+ </dl>
+
+ <div class="impl">
+
+ <p>The <dfn title="dom-navigator-plugins"><code>navigator.plugins</code></dfn> attribute must
+ return a <code>PluginArray</code> object. The same object must be returned each time.</p>
+
+ <p>The <dfn title="dom-navigator-mimeTypes"><code>navigator.mimeTypes</code></dfn> attribute must
+ return a <code>MimeTypenArray</code> object. The same object must be returned each time.</p>
+
+ <hr>
+
+ <p>A <code>PluginArray</code> object represents none, some, or all of the <span
+ title="plugin">plugins</span> supported by the user agent, each of which is represented by a <code
+ title="dom-Plugin">Plugin</code> object. Each of these <code title="dom-Plugin">Plugin</code>
+ objects may be <dfn title="hidden plugin">hidden plugins</dfn>. A <span>hidden plugin</span> can't
+ be enumerated, but can still be inspected by using its name.</p>
+
+ <p class="note">The fewer <span title="plugin">plugins</span> are represented by the
+ <code>PluginArray</code> object, and of those, the more that are <span title="hidden
+ plugin">hidden</span>, the more the user's privacy will be protected. Each exposed plugin
+ increases the number of bits that can be derived for fingerprinting. Hiding a plugin helps, but
+ unless it is an extremely rare plugin, it is likely that a site attempting to derive the list of
+ plugins can still determine whether the plugin is supported or not by probing for it by name (the
+ names of popular plugins are widely known). Therefore not exposing a plugin at all is preferred.
+ Unfortunately, many legacy sites use this feature to determine, for example, which plugin to use
+ to play video. Not exposing any plugins at all might therefore not be entirely plausible.</p>
+
+ <p>The <code>PluginArray</code> objects created by a user agent must not be <span>live</span>. The
+ set of plugins represented by the objects must not change once an object is created, except when
+ it is updated by the <code title="dom-PluginArray-refresh">refresh()</code> method.</p>
+
+ <p>Each <span>plugin</span> represented by a <code>PluginArray</code> can support a number of
+ <span title="MIME type">MIME types</span>. For each such <span>plugin</span>, the user agent must
+ pick one or more of these <span title="MIME type">MIME types</span> to be those that are
+ <dfn>explicitly supported</dfn>.</p>
+
+ <p class="note">The <span>explicitly supported</span> <span title="MIME type">MIME types</span> of
+ a <span>plugin</span> are those that are exposed through the <code
+ title="dom-Plugin">Plugin</code> and <code>MimeTypeArray</code> interfaces. As with <span
+ title="plugin">plugins</span> themselves, any variation between users regarding what is exposed
+ allows sites to fingerprint users. User agents are therefore encouraged to expose the same <span
+ title="MIME type">MIME types</span> for all users of a <span>plugin</span>, regardless of the
+ actual types supported... at least, within the constraints imposed by compatibility with legacy
+ content.</p>
+
+ <p>The <span>supported property indices</span> of a <code>PluginArray</code> object are the
+ numbers from zero to the number of non-<span title="hidden plugin">hidden</span> <span
+ title="plugin">plugins</span> represented by the object, if any.
+ <!--INSERT FINGERPRINT-->
+ </p>
+
+ <p>The <dfn title="dom-PluginArray-length"><code>length</code></dfn> attribute must return the
+ number of non-<span title="hidden plugin">hidden</span> <span title="plugin">plugins</span>
+ represented by the object.
+ <!--INSERT FINGERPRINT-->
+ </p>
+
+ <p>The <dfn title="dom-PluginArray-item"><code>item()</code></dfn> method of a
+ <code>PluginArray</code> object must return null if the argument is not one of the object's
+ <span>supported property indices</span>, and otherwise must return the result of running the
+ following steps, using the method's argument as <var title="">index</var>:</p>
+
+ <ol>
+
+ <li><p>Let <var title="">list</var> be the <code title="dom-Plugin">Plugin</code> objects
+ representing the non-<span title="hidden plugin">hidden</span> <span
+ title="plugin">plugins</span> represented by the <code>PluginArray</code> object.</p></li>
+
+ <li><p>Sort <var title="">list</var> alphabetically by the <code
+ title="dom-Plugin-name">name</code> of each <code title="dom-Plugin">Plugin</code>.</p></li>
+
+ <li><p>Return the <var title="">index</var>th entry in <var title="">list</var>.</p></li>
+
+ </ol>
+
+ <p class="note">It is important <span class="no-backref" title="fingerprinting vector">for
+ privacy</span> that the order of plugins not leak additional information, e.g. the order in which
+ plugins were installed.</p>
+
+ <p>The <span>supported property names</span> of a <code>PluginArray</code> object are the values
+ of the <code title="dom-Plugin-name">name</code> attributes of all the <code
+ title="dom-Plugin">Plugin</code> objects represented by the <code>PluginArray</code> object. The
+ properties exposed in this way must not be enumerable.
+ <!--INSERT FINGERPRINT-->
+ </p>
+
+ <p>The <dfn title="dom-PluginArray-namedItem"><code>namedItem()</code></dfn> method of a
+ <code>PluginArray</code> object must return null if the argument is not one of the object's
+ <span>supported property names</span>, and otherwise must return the <code
+ title="dom-Plugin">Plugin</code> object, of those represented by the <code>PluginArray</code>
+ object, that has a <code title="dom-Plugin-name">name</code> equal to the method's argument.</p>
+
+ <p>The <dfn title="dom-PluginArray-refresh"><code>refresh()</code></dfn> method of the
+ <code>PluginArray</code> object of a <code>Navigator</code> object, when invoked, must check to
+ see if any <span title="plugin">plugins</span> have been installed or reconfigured since the user
+ agent created the <code>PluginArray</code> object. If so, and the method's argument is true, then
+ the user agent must act as if the <code title="dom-location-reload">location.reload()</code>
+ method was called instead. Otherwise, the user agent must update the <code>PluginArray</code>
+ object and <code>MimeTypeArray</code> object created for attributes of that <code>Navigator</code>
+ object, and the <code title="dom-Plugin">Plugin</code> and <code>MimeType</code> objects created
+ for those <code>PluginArray</code> and <code>MimeTypeArray</code> objects, using the same <code
+ title="dom-Plugin">Plugin</code> objects for cases where the <code
+ title="dom-Plugin-name">name</code> is the same, and the same <code>MimeType</code> objects for
+ cases where the <code title="dom-MimeType-type">type</code> is the same, and creating new objects
+ for cases where there were no matching objects immediately prior to the <code
+ title="dom-PluginArray-refresh">refresh()</code> call. Old <code title="dom-Plugin">Plugin</code>
+ and <code>MimeType</code> objects must continue to return the same values that they had prior to
+ the update, though naturally now the data is stale and may appear inconsistent (for example, an
+ old <code>MimeType</code> entry might list as its <code
+ title="dom-MimeType-enabledPlugin">enabledPlugin</code> a <code title="dom-Plugin">Plugin</code>
+ object that no longer lists that <code>MimeType</code> as a supported <code>MimeType</code>).</p>
+
+ <hr>
+
+ <p>A <code>MimeTypeArray</code> object represents the <span title="MIME type">MIME types</span>
+ <span>explicitly supported</span> by <span title="plugin">plugins</span> supported by the user
+ agent, each of which is represented by a <code>MimeType</code> object.</p>
+
+ <p>The <code>MimeTypeArray</code> objects created by a user agent must not be <span>live</span>.
+ The set of MIME types represented by the objects must not change once an object is created, except
+ when it is updated by the <code>PluginArray</code> object's <code
+ title="dom-PluginArray-refresh">refresh()</code> method.</p>
+
+ <p>The <span>supported property indices</span> of a <code>MimeTypeArray</code> object are the
+ numbers from zero to the number of <span title="MIME type">MIME types</span> <span>explicitly
+ supported</span> by non-<span title="hidden plugin">hidden</span> <span
+ title="plugin">plugins</span> represented by the corresponding <code>PluginArray</code> object, if
+ any.
+ <!--INSERT FINGERPRINT-->
+ </p>
+
+ <p>The <dfn title="dom-MimeTypeArray-length"><code>length</code></dfn> attribute must return the
+ number of <span title="MIME type">MIME types</span> <span>explicitly supported</span> by non-<span
+ title="hidden plugin">hidden</span> <span title="plugin">plugins</span> represented by the
+ corresponding <code>PluginArray</code> object, if any.
+ <!--INSERT FINGERPRINT-->
+ </p>
+
+ <p>The <dfn title="dom-MimeTypeArray-item"><code>item()</code></dfn> method of a
+ <code>MimeTypeArray</code> object must return null if the argument is not one of the object's
+ <span>supported property indices</span>, and otherwise must return the result of running the
+ following steps, using the method's argument as <var title="">index</var>:</p>
+
+ <ol>
+
+ <li><p>Let <var title="">list</var> be the <code>MimeType</code> objects representing the <span
+ title="MIME type">MIME types</span> <span>explicitly supported</span> by non-<span title="hidden
+ plugin">hidden</span> <span title="plugin">plugins</span> represented by the corresponding
+ <code>PluginArray</code> object, if any.</p></li>
+
+ <li><p>Sort <var title="">list</var> alphabetically by the <code
+ title="dom-MimeType-type">type</code> of each <code>MimeType</code>.</p></li>
+
+ <li><p>Return the <var title="">index</var>th entry in <var title="">list</var>.</p></li>
+
+ </ol>
+
+ <p class="note">It is important <span class="no-backref" title="fingerprinting vector">for
+ privacy</span> that the order of MIME types not leak additional information, e.g. the order in
+ which plugins were installed.</p>
+
+ <p>The <span>supported property names</span> of a <code>MimeTypeArray</code> object are the values
+ of the <code title="dom-MimeType-type">type</code> attributes of all the <code>MimeType</code>
+ objects represented by the <code>MimeTypeArray</code> object. The properties exposed in this way
+ must not be enumerable.
+ <!--INSERT FINGERPRINT-->
+ </p>
+
+ <p>The <dfn title="dom-MimeTypeArray-namedItem"><code>namedItem()</code></dfn> method of a
+ <code>MimeTypeArray</code> object must return null if the argument is not one of the object's
+ <span>supported property names</span>, and otherwise must return the <code>MimeType</code> object
+ that has a <code title="dom-MimeType-type">type</code> equal to the method's argument.</p>
+
+ <hr>
+
+ <p>A <code title="dom-Plugin">Plugin</code> object represents a <span>plugin</span>. It has
+ several attributes to provide details about the plugin, and can be enumerated to obtain the list
+ of <span title="MIME type">MIME types</span> that it <span title="explicitly supported">explicitly
+ supports</span>.</p>
+
+ <p>The <code title="dom-Plugin">Plugin</code> objects created by a user agent must not be
+ <span>live</span>. The set of MIME types represented by the objects, and the values of the
+ objects' attributes, must not change once an object is created, except when updated by the
+ <code>PluginArray</code> object's <code title="dom-PluginArray-refresh">refresh()</code>
+ method.</p>
+
+ <p>The <dfn>reported MIME types</dfn> for a <code title="dom-Plugin">Plugin</code> object are the
+ <span title="MIME type">MIME types</span> <span>explicitly supported</span> by the corresponding
+ <span>plugin</span> when this object was last created or updated by <code
+ title="dom-PluginArray-refresh">PluginArray.refresh()</code>, whichever happened most
+ recently.</p>
+
+ <p>The <span>supported property indices</span> of a <code title="dom-Plugin">Plugin</code> object
+ are the numbers from zero to the number of <span>reported MIME types</span>.
+ <!--INSERT FINGERPRINT-->
+ </p>
+
+ <p>The <dfn title="dom-Plugin-length"><code>length</code></dfn> attribute must return the number
+ of <span>reported MIME types</span>.
+ <!--INSERT FINGERPRINT-->
+ </p>
+
+ <p>The <dfn title="dom-Plugin-item"><code>item()</code></dfn> method of a <code
+ title="dom-Plugin">Plugin</code> object must return null if the argument is not one of the
+ object's <span>supported property indices</span>, and otherwise must return the result of running
+ the following steps, using the method's argument as <var title="">index</var>:</p>
+
+ <ol>
+
+ <li><p>Let <var title="">list</var> be the <code>MimeType</code> objects representing the
+ <span>reported MIME types</span>.</p></li>
+
+ <li><p>Sort <var title="">list</var> alphabetically by the <code
+ title="dom-MimeType-type">type</code> of each <code>MimeType</code>.</p></li>
+
+ <li><p>Return the <var title="">index</var>th entry in <var title="">list</var>.</p></li>
+
+ </ol>
+
+ <p class="note">It is important <span class="no-backref" title="fingerprinting vector">for
+ privacy</span> that the order of MIME types not leak additional information, e.g. the order in
+ which plugins were installed.</p>
+
+ <p>The <span>supported property names</span> of a <code title="dom-Plugin">Plugin</code> object
+ are the values of the <code title="dom-MimeType-type">type</code> attributes of the
+ <code>MimeType</code> objects representing the <span>reported MIME types</span>. The properties
+ exposed in this way must not be enumerable.
+ <!--INSERT FINGERPRINT-->
+ </p>
+
+ <p>The <dfn title="dom-Plugin-namedItem"><code>namedItem()</code></dfn> method of a <code
+ title="dom-Plugin">Plugin</code> object must return null if the argument is not one of the
+ object's <span>supported property names</span>, and otherwise must return the
+ <code>MimeType</code> object that has a <code title="dom-MimeType-type">type</code> equal to the
+ method's argument.</p>
+
+ <p>The <dfn title="dom-Plugin-name"><code>name</code></dfn> attribute must return the
+ <span>plugin</span>'s name.</p>
+
+ <p>The <dfn title="dom-Plugin-description"><code>description</code></dfn> and <dfn
+ title="dom-Plugin-filename"><code>filename</code></dfn> attributes must return user-agent-defined
+ (or, in all likelihood, <span>plugin</span>-defined) strings. In each case, the same string must
+ be returned each time, except that the strings returned may change when the <code
+ title="dom-PluginArray-refresh">PluginArray.refresh()</code> method updates the object.</p>
+
+ <p class="warning">If the values returned by the <code
+ title="dom-Plugin-description">description</code> or <code
+ title="dom-Plugin-filename">filename</code> attributes vary between versions of a
+ <span>plugin</span>, they can be used both as a fingerprinting vector and, even more importantly,
+ as a trivial way to determine what security vulnerabilities a <span>plugin</span> (and thus a
+ browser) may have. It is thus highly recommended that the <code
+ title="dom-Plugin-description">description</code> attribute just return the same value as the
+ <code title="dom-Plugin-name">name</code> attribute, and that the <code
+ title="dom-Plugin-filename">filename</code> attribute return the empty string.
+ <!--INSERT FINGERPRINT-->
+ </p>
+
+ <hr>
+
+ <p>A <code>MimeType</code> object represents a <span>MIME type</span> that is, or was,
+ <span>explicitly supported</span> by a <span>plugin</span>.</p>
+
+ <p>The <code>MimeType</code> objects created by a user agent must not be <span>live</span>. The
+ values of the objects' attributes must not change once an object is created, except when updated
+ by the <code>PluginArray</code> object's <code title="dom-PluginArray-refresh">refresh()</code>
+ method.</p>
+
+ <p>The <dfn title="dom-MimeType-type"><code>type</code></dfn> attribute must return the
+ <span>valid MIME type with no parameters</span> describing the <span>MIME type</span>.</p>
+
+ <p>The <dfn title="dom-MimeType-description"><code>description</code></dfn> and <dfn
+ title="dom-MimeType-suffixes"><code>suffixes</code></dfn> attributes must return
+ user-agent-defined (or, in all likelihood, <span>plugin</span>-defined) strings. In each case, the
+ same string must be returned each time, except that the strings returned may change when the <code
+ title="dom-PluginArray-refresh">PluginArray.refresh()</code> method updates the object.</p>
+
+ <p class="warning">If the values returned by the <code
+ title="dom-MimeType-description">description</code> or <code
+ title="dom-MimeType-suffixes">suffxies</code> attributes vary between versions of a
+ <span>plugin</span>, they can be used both as a fingerprinting vector and, even more importantly,
+ as a trivial way to determine what security vulnerabilities a <span>plugin</span> (and thus a
+ browser) may have. It is thus highly recommended that the <code
+ title="dom-MimeType-description">description</code> attribute just return the same value as the
+ <code title="dom-MimeType-type">type</code> attribute, and that the <code
+ title="dom-MimeType-suffixes">suffixes</code> attribute return the empty string.
+ <!--INSERT FINGERPRINT-->
+ </p>
+
+ <p class="note">Commas in the <code title="dom-MimeType-suffixes">suffixes</code> attribute are
+ interpreted as separating subsequent filename extensions, as in "<code
+ title="">htm,html</code>".</p>
+
+ <p>The <dfn title="dom-MimeType-enabledPlugin"><code>enabledPlugin</code></dfn> attribute must
+ return the <code title="dom-Plugin">Plugin</code> object that represents the <span>plugin</span>
+ that <span>explicitly supported</span> the <span>MIME type</span> that this <code>MimeType</code>
+ object represents when this object was last created or updated by <code
+ title="dom-PluginArray-refresh">PluginArray.refresh()</code>, whichever happened most
+ recently.</p>
+
+ </div>
+
+
+
<h4>The <code>External</code> interface</h4>
<div class="impl">
@@ -115886,6 +116330,7 @@
Chris Evans,
Chris Morris,
Chris Pearce,
+ Chris Peterson,
Chris Weber,
Christian Biesinger,
Christian Johansen,
More information about the Commit-Watchers
mailing list