[EME] Bug 25506 - Convert more internal anchor references.
authorDavid Dorwin <ddorwin@google.com>
Fri, 10 Oct 2014 14:54:22 -0700
changeset 459 3f14cd4554db
parent 458 8e93e6f65537
child 460 57861d0e6e47
[EME] Bug 25506 - Convert more internal anchor references.
encrypted-media/encrypted-media-respec.html
encrypted-media/encrypted-media.js
--- a/encrypted-media/encrypted-media-respec.html	Fri Oct 10 14:45:07 2014 -0700
+++ b/encrypted-media/encrypted-media-respec.html	Fri Oct 10 14:54:22 2014 -0700
@@ -138,7 +138,7 @@
     <dl>
       <dt id="cdm">Content Decryption Module (CDM)</dt>
       <dd>
-    <p>The Content Decryption Module (CDM) is a generic term for the client component that provides the functionality, including decryption, for one or more <a href="#key-system">Key Systems</a>.</p>
+    <p>The Content Decryption Module (CDM) is a generic term for the client component that provides the functionality, including decryption, for one or more <a def-id="keysystems"></a>.</p>
     <p class="note">Implementations may or may not separate the implementations of CDMs or treat them as separate from the user agent.
     This is transparent to the API and application.
     A user agent may support one or more CDMs.</p>
@@ -148,7 +148,7 @@
       <dd>
     <p>A Key System is a generic term for a decryption mechanism and/or content protection provider.
     Key System strings provide unique identification of a Key System.
-    They are used by the user agent to select the <a href="#cdm">Content Decryption Modules</a> and identify the source of a key-related event.
+    They are used by the user agent to select a <a def-id="cdm"></a> and identify the source of a key-related event.
     The <a href="#common-key-systems">Common Key Systems</a> are supported by all user agents. User agents may also provide additional CDMs with corresponding Key System strings.
     </p>
 
@@ -165,19 +165,19 @@
 
       <dt id="key-session">Key Session</dt>
       <dd>
-    <p>A Key Session, or simply Session, provides a context for message exchange with the CDM as a result of which key(s) are made available to be <a href="#cdm">CDM</a>.
+    <p>A Key Session, or simply Session, provides a context for message exchange with the CDM as a result of which key(s) are made available to the <a def-id="cdm"></a>.
     Sessions are embodied as <a def-id="mediakeysession"></a> objects.
-    Each Key session is associated with a single instance of <a href="#initialization-data">Initialization Data</a> provided in the <a def-id="generateRequest"></a> call.
+    Each Key session is associated with a single instance of <a def-id="initialization-data"></a> provided in the <a def-id="generateRequest"></a> call.
     </p>
-    <p>Each Key Session is associated with a single <a def-id="mediakeys"></a> object, and only <a href="#htmlmediaelement-extensions">media element(s)</a> associated with that object may access key(s) associated with the session.
-    Other <a def-id="mediakeys"></a> objects, <a href="#cdm">CDM</a> instances, and media elements may <em>not</em> access the key session or use its key(s).
+    <p>Each Key Session is associated with a single <a def-id="mediakeys"></a> object, and only media element(s) associated with that object may access key(s) associated with the session.
+    Other <a def-id="mediakeys"></a> objects, <a def-id="cdm"></a> instances, and media elements may <em>not</em> access the key session or use its key(s).
     Key sessions and the keys they contain are no longer usable by the CDM for decryption when the <a href="#algorithms-session-close">session is closed</a>, including when the <a def-id="mediakeysession"></a> object is destroyed.
     </p>
       </dd>
 
       <dt id="session-id">Session ID</dt>
       <dd>
-    <p>A Session ID is a unique string identifier generated by the <a href="#cdm">CDM</a> that can be used by the application to identify <a def-id="mediakeysession"></a> objects.</p>
+    <p>A Session ID is a unique string identifier generated by the <a def-id="cdm"></a> that can be used by the application to identify <a def-id="mediakeysession"></a> objects.</p>
 
     <p>A new Session ID is generated each time the user agent and CDM successfully create a new session.</p>
 
@@ -193,7 +193,7 @@
     <p>Unless otherwise stated, key refers to a decryption key that can be used to decrypt blocks within <a def-id="media-data"></a>.
     Each such key is uniquely identified by a <a href="#decryption-key-id">key ID</a>.
     A key is associated with the <a href="#key-session">session</a> used to provide it to the CDM. (The same key may be present in multiple sessions.)
-    Such keys may only be provided to the <a href="#cdm">CDM</a> via an <a def-id="update"></a> call. (They may later be loaded by <a def-id="load"></a> as part of the stored session data.)
+    Such keys may only be provided to the <a def-id="cdm"></a> via an <a def-id="update"></a> call. (They may later be loaded by <a def-id="load"></a> as part of the stored session data.)
     </p>
     
     <p>A key is considered <em>usable</em> if the CDM is certain the key is currently usable for decryption.</p>
@@ -204,9 +204,9 @@
       <dd>
     <p>A <a href="#decryption-key">key</a> is associated with a key ID, which uniquely identifies a key.
     The container specifies the ID of the key that can decrypt a block or set of blocks within the <a def-id="media-data"></a>.
-    <a href="#initialization-data">Initialization Data</a> may contain key ID(s) to identify the keys that are needed to decrypt the media data.
+    <a def-id="initialization-data"></a> may contain key ID(s) to identify the keys that are needed to decrypt the media data.
     However, there is no requirement that Initialization Data contain any or all key IDs used in the <a def-id="media-data"></a> or <a def-id="media-resource"></a>.
-    <a href="#license">Licenses</a> provided to the CDM associate each key with a key ID so the <a href="#cdm">CDM</a> can select the appropriate key when decrypting an encrypted block of media data.
+    <a href="#license">Licenses</a> provided to the CDM associate each key with a key ID so the <a def-id="cdm"></a> can select the appropriate key when decrypting an encrypted block of media data.
     </p>
       </dd>
 
@@ -218,14 +218,14 @@
       <dt id="initialization-data">Initialization Data</dt>
       <dd>
     <p class="note">
-    <a href="#key-system">Key Systems</a> usually require a block of initialization data containing information about the stream to be decrypted before they can construct a license request message.
+    <a def-id="keysystems"></a> usually require a block of initialization data containing information about the stream to be decrypted before they can construct a license request message.
     This block could be a simple key or content ID or a more complex structure containing such information.
     It should always allow unique identification of the key(s) needed to decrypt the content.
     This initialization information may be obtained in some application-specific way or provided with the <a def-id="media-data"></a>.
     </p>
 
     <p>
-    Initialization Data is a generic term for container-specific data that is used by <a href="#cdm">CDMs</a> to generate a license request.
+    Initialization Data is a generic term for container-specific data that is used by a <a def-id="cdm"></a> to generate a license request.
     Initialization data found with the <a def-id="media-data"></a> is provided to the application in the <a def-id="encrypted-event-initdata-attribute"></a> attribute of the <a def-id="encrypted"></a> event.
     </p>
 
@@ -245,16 +245,16 @@
       <dt id="cross-origin">Cross Origin Limitations</dt>
       <dd>
     <p>During playback, embedded media data is exposed to script in the embedding <a def-id="origin"></a>.
-    In order for the API to provide <a href="#initialization-data">Initialization Data</a> in the <a def-id="encrypted"></a> event, <a def-id="media-data"></a> must be <a def-id="cors-same-origin"></a> with the embedding page.
+    In order for the API to provide <a def-id="initialization-data"></a> in the <a def-id="encrypted"></a> event, <a def-id="media-data"></a> must be <a def-id="cors-same-origin"></a> with the embedding page.
     If <a def-id="media-data"></a> is cross-origin with the embedding document, authors should use the <a def-id="media-crossorigin"></a> attribute
-    on the <a href="#htmlmediaelement-extensions">media element</a> and CORS headers on the <a def-id="media-data"></a> response to make it <a def-id="cors-same-origin"></a>.
+    on the <a def-id="htmlmediaelement"></a> and CORS headers on the <a def-id="media-data"></a> response to make it <a def-id="cors-same-origin"></a>.
     </p>
       </dd>
 
       <dt id="mixed-content">Mixed Content Limitations</dt>
       <dd>
     <p>During playback, embedded media data is exposed to script in the embedding <a def-id="origin"></a>.
-    In order for the API to provide <a href="#initialization-data">Initialization Data</a> in the <a def-id="encrypted"></a> event, <a def-id="media-data"></a> must not be Mixed Content [[!MIXED-CONTENT]].
+    In order for the API to provide <a def-id="initialization-data"></a> in the <a def-id="encrypted"></a> event, <a def-id="media-data"></a> must not be Mixed Content [[!MIXED-CONTENT]].
     </p>
       </dd>
     </dl>
@@ -302,7 +302,7 @@
     <dl title="interface MediaKeys" class='idl'>
       <dt>readonly attribute DOMString keySystem</dt>
       <dd>
-        Identifies the <a href="#key-system">Key System</a> being used.
+        Identifies the <a def-id="keysystem"></a> being used.
       </dd>
 
       <dt>MediaKeySession createSession(optional SessionType sessionType = "temporary")</dt>
@@ -311,8 +311,8 @@
     <p>Returns a new <a def-id="mediakeysession"></a> object.</p>
 
     <ol class="method-algorithm">
-      <!-- TODO: Reference the CDM loaded during initialization instead of "<a href="#cdm">content decryption module</a> corresponding to the <a def-id="keySystem-attribute"></a> attribute". Here and elsewhere. -->
-      <li><p>If <var title="true">sessionType</var> is not supported by the <a href="#cdm">content decryption module</a> corresponding to the <a def-id="keySystem-attribute"></a> attribute, throw <a def-id="new-domexception-named"></a> <code><a href="#dfn-NotSupportedError">"NotSupportedError"</a></code>.</p></li>
+      <!-- TODO: Reference the CDM loaded during initialization instead of "<a def-id="cdm"></a> corresponding to the <a def-id="keySystem-attribute"></a> attribute". Here and elsewhere. -->
+      <li><p>If <var title="true">sessionType</var> is not supported by the <a def-id="cdm"></a> corresponding to the <a def-id="keySystem-attribute"></a> attribute, throw <a def-id="new-domexception-named"></a> <code><a href="#dfn-NotSupportedError">"NotSupportedError"</a></code>.</p></li>
       <li><p>Let <var title="true">session</var> be a new <a def-id="mediakeysession"></a> object, and initialize it as follows:</p>
         <ol>
           <li><p>Let the <a def-id="sessionId"></a> attribute be the empty string.</p></li>
@@ -330,12 +330,12 @@
       <dt>Promise&lt;void&gt; setServerCertificate((ArrayBuffer or ArrayBufferView) serverCertificate)</dt>
       <dd>
     <p id="server-certificate">Provides a server certificate to be used to encrypt messages to the license server.</p>
-    <p class="note">The contents of <var title="true">serverCertificate</var> are <a href="#key-system">Key System</a>-specific.</p>
+    <p class="note">The contents of <var title="true">serverCertificate</var> are <a def-id="keysystem"></a>-specific.</p>
     <p class="note">Key systems that use such certificates should also support requesting the certificate from the server via an  additional round trip. This simplifies interoperability for applications that are not designed to provide certificates to specific key systems.</p>
 
     <ol class="method-algorithm">
       <li><p>If <var title="true">serverCertificate</var> is an empty array, return a promise rejected with a new <a def-id="new-domexception-named"></a> <code><a href="#dfn-InvalidAccessError">"InvalidAccessError"</a></code>.</p></li>
-      <li><p>If the <a href="#cdm">content decryption module</a> corresponding to the <a def-id="keySystem-attribute"></a> attribute does not support server certificates, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-NotSupportedError">"NotSupportedError"</a></code>.</p></li>
+      <li><p>If the <a def-id="cdm"></a> corresponding to the <a def-id="keySystem-attribute"></a> attribute does not support server certificates, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-NotSupportedError">"NotSupportedError"</a></code>.</p></li>
       <li><p>Let <var>certificate</var> be a copy of the contents of the <var title="true">serverCertificate</var> parameter.</p></li>
       <li><p>Let <var>promise</var> be a new promise.</p></li>
       <li><p>Run the following steps asynchronously:</p>
@@ -356,12 +356,12 @@
 
     <ol class="method-algorithm">
       <li><p>If <var title="true">keySystem</var> is an empty string, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-InvalidAccessError">"InvalidAccessError"</a></code>.</p></li>
-      <li><p>If <var title="true">keySystem</var> is not one of the <a href="#key-system">Key Systems</a> supported by the user agent, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-NotSupportedError">"NotSupportedError"</a></code>. String comparison is case-sensitive.</p></li>
+      <li><p>If <var title="true">keySystem</var> is not one of the <a def-id="keysystems"></a> supported by the user agent, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-NotSupportedError">"NotSupportedError"</a></code>. String comparison is case-sensitive.</p></li>
       <li><p>If <var title="true">keySystem</var> is not supported or not allowed in the <a def-id="origin"></a> of the calling context's <a def-id="document-concept"></a>, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-NotSupportedError">"NotSupportedError"</a></code>.</p></li>
       <li><p>Let <var>promise</var> be a new promise.</p></li>
       <li><p>Run the following steps asynchronously:</p>
         <ol>
-          <li><p>Let <var title="true">cdm</var> be the <a href="#cdm">content decryption module</a> corresponding to <var title="true">keySystem</var>.</p></li>
+          <li><p>Let <var title="true">cdm</var> be the <a def-id="cdm"></a> corresponding to <var title="true">keySystem</var>.</p></li>
           <li><p>Load and initialize the <var title="true">cdm</var> if necessary.</p></li>
           <li><p>If <var title="true">cdm</var> fails to load or initialize, reject <var>promise</var> with <a def-id="new-domexception-named"></a> the appropriate <a href="#error-names">error name</a>.</p></li>
 
@@ -380,23 +380,23 @@
 
       <dt>static IsTypeSupportedResult isTypeSupported(DOMstring keySystem, optional DOMString initDataType, optional DOMString contentType, optional DOMString capability)</dt>
       <dd>
-    <p>Returns whether <var title="true">keySystem</var> is supported with the <var title="true"><a href="#initialization-data-type">initDataType</a></var>, container and codec(s) specified by <var title="true">contentType</var>, and <var title="true">capability</var>.</p>
+    <p>Returns whether <var title="true">keySystem</var> is supported with the <var title="true">initDataType</var>, container and codec(s) specified by <var title="true">contentType</var>, and <var title="true">capability</var>.</p>
     <div class="example">
       <p>The following list shows some examples.</p>
       <dl>
-        <dt>Returns whether the Some System <a href="#key-system">Key System</a> may be supported. Specific containers and codecs may or may not be supported with Some System.</dt>
+        <dt>Returns whether the Some System <a def-id="keysystem"></a> may be supported. Specific containers and codecs may or may not be supported with Some System.</dt>
         <dd><pre class="code">MediaKeys.isTypeSupported("com.example.somesystem")</pre></dd>
-        <dt>Returns whether the Some System <a href="#key-system">Key System</a> may be supported and is capable of parsing the <a href="#initialization-data-type">initialization data type</a> format "keyids". Specific containers and codecs may or may not be supported with Some System.</dt>
+        <dt>Returns whether the Some System <a def-id="keysystem"></a> may be supported and is capable of parsing the <a def-id="initialization-data-type"></a> format "keyids". Specific containers and codecs may or may not be supported with Some System.</dt>
         <dd><pre class="code">MediaKeys.isTypeSupported("com.example.somesystem", "keyids")</pre></dd>
-        <dt>Returns whether the Some System <a href="#key-system">Key System</a> may be supported and is capable of parsing the <a href="#initialization-data-type">initialization data type</a> format <var title="true">initDataType</var>, the user agent is capable of demuxing the container specified by <var title="true">mimeType</var>, and the codec(s) specified by <var title="true">mimeType</var> are supported, all as specified by capability "foo".</dt>
+        <dt>Returns whether the Some System <a def-id="keysystem"></a> may be supported and is capable of parsing the <a def-id="initialization-data-type"></a> format <var title="true">initDataType</var>, the user agent is capable of demuxing the container specified by <var title="true">mimeType</var>, and the codec(s) specified by <var title="true">mimeType</var> are supported, all as specified by capability "foo".</dt>
         <dd><pre class="code">MediaKeys.isTypeSupported("com.example.somesystem", <var title="true">initDataType</var>, <var title="true">mimeType</var>, "foo")</pre></dd>
-        <dt>Returns whether the user agent <em>probably</em> supports <a href="#clear-key">Clear Key</a> using the <a href="#initialization-data-type">initialization data type</a> format <var title="true">initDataType</var> and the container and codec(s) specified by <var title="true">mimeType</var>.</dt>
+        <dt>Returns whether the user agent <em>probably</em> supports <a href="#clear-key">Clear Key</a> using the <a def-id="initialization-data-type"></a> format <var title="true">initDataType</var> and the container and codec(s) specified by <var title="true">mimeType</var>.</dt>
         <dd><pre class="code">"probably" == MediaKeys.isTypeSupported("org.w3.clearkey", <var title="true">initDataType</var>, <var title="true">mimeType</var>)</pre></dd>
       </dl>
     </div>
 
     <ol class="method-algorithm">
-      <li><p>If <var title="true">keySystem</var> is an empty string or contains an unrecognized or unsupported <a href="#key-system">Key System</a>, return <a def-id="IsTypeSupportedResult-empty"></a> and abort these steps. String comparison is case-sensitive.</p></li>
+      <li><p>If <var title="true">keySystem</var> is an empty string or contains an unrecognized or unsupported <a def-id="keysystem"></a>, return <a def-id="IsTypeSupportedResult-empty"></a> and abort these steps. String comparison is case-sensitive.</p></li>
       <li><p>If the <var title="true">keySystem</var> implementation is not available and usable, return <a def-id="IsTypeSupportedResult-empty"></a> and abort these steps.</p></li>
       <li><p>Follow the steps for the first matching condition from the following list:</p>
         <dl class="switch">
@@ -417,8 +417,8 @@
         </dl>
       </li>
 
-      <li><p>If <var title="true">initDataType</var> is an empty string or contains an unrecognized or unsupported <a href="#initialization-data-type">initialization data type</a>, return <a def-id="IsTypeSupportedResult-empty"></a> and abort these steps. String comparison is case-sensitive.</p></li>
-      <li><p>If <var title="true">initDataType</var> is not an <a href="#initialization-data-type">initialization data type</a> supported by the <var title="true">keySystem</var> implementation, return <a def-id="IsTypeSupportedResult-empty"></a> and abort these steps.</p></li>
+      <li><p>If <var title="true">initDataType</var> is an empty string or contains an unrecognized or unsupported <a def-id="initialization-data-type"></a>, return <a def-id="IsTypeSupportedResult-empty"></a> and abort these steps. String comparison is case-sensitive.</p></li>
+      <li><p>If <var title="true">initDataType</var> is not an <a def-id="initialization-data-type"></a> supported by the <var title="true">keySystem</var> implementation, return <a def-id="IsTypeSupportedResult-empty"></a> and abort these steps.</p></li>
       <li><p>If the <var title="true">keySystem</var> implementation supporting <var title="true">initDataType</var> is not available and usable, return <a def-id="IsTypeSupportedResult-empty"></a> and abort these steps.</p></li>
       <li><p>If <var title="true">contentType</var> was not provided, follow the steps for the first matching condition from the following list and abort these steps:</p>
         <dl class="switch">
@@ -479,7 +479,7 @@
     <dl title="interface MediaKeySession : EventTarget" class='idl'>
       <dt>readonly attribute DOMString sessionId</dt>
       <dd>
-        <p>The <a href="#session-id">Session ID</a> for this object and the associated key(s) or license(s).</p>
+        <p>The <a def-id="session-id"></a> for this object and the associated key(s) or license(s).</p>
       </dd>
 
       <dt>readonly attribute unrestricted double expiration</dt>
@@ -496,8 +496,8 @@
       <dt>Promise&lt;void&gt; generateRequest(DOMString initDataType, (ArrayBuffer or ArrayBufferView) initData)</dt>
       <dd>
     <p>Generates a request based on the <var title="true">initData</var>.</p>
-    <p><var title="true">initData</var> is <a href="#initialization-data">Initialization Data</a>, and
-    <var title="true">initDataType</var> is an <a href="#initialization-data-type">initialization data type</a> that indicates how to interpret <var title="true">initData</var>.
+    <p><var title="true">initData</var> is <a def-id="initialization-data"></a>, and
+    <var title="true">initDataType</var> is an <a def-id="initialization-data-type"></a> that indicates how to interpret <var title="true">initData</var>.
     </p>
 
     <ol class="method-algorithm">
@@ -506,7 +506,7 @@
       <li><p>If <var title="true">initDataType</var> is an empty string, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-InvalidAccessError">"InvalidAccessError"</a></code>.</p></li>
       <li><p>If <var title="true">initData</var> is an empty array, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-InvalidAccessError">"InvalidAccessError"</a></code>.</p></li>
       <li><p>Let <var title="true">media keys</var> be the <a def-id="mediakeys"></a> object that created this object.</p></li>
-      <li><p>If the <a href="#cdm">content decryption module</a> corresponding to <var title="true">media keys</var>'s <a def-id="keySystem-attribute"></a> attribute does not support <var title="true">initDataType</var> as an <a href="#initialization-data-type">initialization data type</a>, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-NotSupportedError">"NotSupportedError"</a></code>. String comparison is case-sensitive.</p></li>
+      <li><p>If the <a def-id="cdm"></a> corresponding to <var title="true">media keys</var>'s <a def-id="keySystem-attribute"></a> attribute does not support <var title="true">initDataType</var> as an <a def-id="initialization-data-type"></a>, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-NotSupportedError">"NotSupportedError"</a></code>. String comparison is case-sensitive.</p></li>
       <li><p>Let <var>init data</var> be a copy of the contents of the <var title="true">initData</var> parameter.</p></li>
       <li><p>Let <var title="true">session type</var> be this object's <var title="true">session type</var>.</p></li>
       <li><p>Let <var>promise</var> be a new promise.</p></li>
@@ -542,7 +542,7 @@
                 <p class="note">The license server determines the type of license that is returned, either persistent or non-persistent. A persistent license cannot be added to a non-persistable session.</p>
               </li>
 
-              <li><p>Let <var title="true">session id</var> be a unique <a href="#session-id">Session ID</a> string.</p>
+              <li><p>Let <var title="true">session id</var> be a unique <a def-id="session-id"></a> string.</p>
                 <p>If <var title="true">session type</var> is <a def-id="persistent-session"></a>, the ID must be unique within the the <a def-id="origin"></a> of this object's <a def-id="document-concept"></a> over time, including across Documents and browsing sessions.</p>
               </li>
               <li><p>Let <var title="true">message</var> be a request for the <var title="true">requested session type</var> generated based on the <var>init data</var>, which is interpreted per <var title="true">initDataType</var>.</p>
@@ -573,7 +573,7 @@
       <li><p>If <var title="true">sessionId</var> is an empty string, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-InvalidAccessError">"InvalidAccessError"</a></code>.</p></li>
       <li><p>If this object's <var title="true">session type</var> is not <a def-id="persistent-session"></a>, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-InvalidAccessError">"InvalidAccessError"</a></code>.</p></li>
       <li><p>Let <var title="true">media keys</var> be the <a def-id="mediakeys"></a> object that created this object.</p></li>
-      <li><p>If the <a href="#cdm">content decryption module</a> corresponding to <var title="true">media keys</var>'s <a def-id="keySystem-attribute"></a> attribute does not support loading previous sessions, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-NotSupportedError">"NotSupportedError"</a></code>.</p></li>
+      <li><p>If the <a def-id="cdm"></a> corresponding to <var title="true">media keys</var>'s <a def-id="keySystem-attribute"></a> attribute does not support loading previous sessions, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-NotSupportedError">"NotSupportedError"</a></code>.</p></li>
       <li><p>Let <var>promise</var> be a new promise.</p></li>
       <li><p>Run the following steps asynchronously:</p>
         <ol>
@@ -600,7 +600,7 @@
               <li><p>If the <var title="true">session data</var> indicates an expiration time for the session, let <var title="true">expiration time</var> be the expiration time in milliseconds since 01 January 1970 UTC.</p></li>
               <li><p>If the CDM needs to send a message:</p>
                 <ol>
-                  <li><p>Let <var title="true">message</var> be a message generated by the <a href="#cdm">CDM</a> based on the <var title="true">session data</var>.</p></li>
+                  <li><p>Let <var title="true">message</var> be a message generated by the <a def-id="cdm"></a> based on the <var title="true">session data</var>.</p></li>
                   <li><p>Let <var title="true">message type</var> be the appropriate <a def-id="MediaKeyMessageType"></a> for the message.</p></li>
                 </ol>
               </li>
@@ -624,7 +624,7 @@
       <dt>Promise&lt;void&gt; update((ArrayBuffer or ArrayBufferView) response)</dt>
       <dd>
     <p>Provides messages, including licenses, to the CDM.</p>
-    <p class="note">The contents of <var title="true">response</var> are <var title="true"><a href="#key-system">keySystem</a></var>-specific.</p>
+    <p class="note">The contents of <var title="true">response</var> are <a def-id="keysystem"></a>-specific.</p>
 
     <ol class="method-algorithm">
       <li><p>If this object's <var title="true">callable</var> value is false, return a promise rejected with <a def-id="new-domexception-named"></a> <code><a href="#dfn-InvalidStateError">"InvalidStateError"</a></code>.</p></li>
@@ -660,7 +660,7 @@
                 </dl>
                 <p>See also <a href="#session-storage">Session Storage and Persistence</a>.</p>
                 <p class="note">When <var>sanitized response</var> contains key(s) and/or related data, <var title="true">cdm</var> will likely cache the key and related data indexed by key ID.</p>
-                <p class="note">The replacement algorithm within a session is <a href="#key-system">Key System</a>-dependent.</p>
+                <p class="note">The replacement algorithm within a session is <a def-id="keysystem"></a>-dependent.</p>
                 <p class="note">Keys from different sessions should be cached independently such that closing one session does not affect keys in other sessions, even if they have overlapping key IDs.</p>
                 <p class="note">It is recommended that CDMs support a standard and reasonably high minimum number of keys per <a def-id="mediakeysession"></a> object, including a standard replacement algorithm, and a standard and reasonably high minimum number of <a def-id="mediakeysession"></a> objects.
                 This enables a reasonable number of key rotation algorithms to be implemented across user agents and may reduce the likelihood of playback interruptions in use cases that involve various streams in the same element (i.e. adaptive streams, various audio and video tracks) using different keys.
@@ -885,7 +885,7 @@
     <ol>
       <li><p>Let the <var title="true">session</var> be the associated <a def-id="mediakeysession"></a> object.</p></li>
       <li><p><a def-id="Queue-a-task-to-fire-an-event-named"></a> <a def-id="keyschange"></a> at the <var title="true">session</var>.</p></li>
-      <li><p><a def-id="Queue-a-task-to-run-algorithm"></a> <a href="#algorithms-resume-playback">Attempt to Resume Playback If Necessary</a> algorithm on each of the <a href="#htmlmediaelement-extensions">media element(s)</a> whose <a def-id="mediaKeys-attribute"></a> attribute is the MediaKeys object that created the <var title="true">session</var>.</p>
+      <li><p><a def-id="Queue-a-task-to-run-algorithm"></a> <a href="#algorithms-resume-playback">Attempt to Resume Playback If Necessary</a> algorithm on each of the media element(s) whose <a def-id="mediaKeys-attribute"></a> attribute is the MediaKeys object that created the <var title="true">session</var>.</p>
         <p>The user agent may choose to skip this step if it knows resuming will fail.</p>
         <p class="note">For example, the user agenet may skip this step if no additional keys became available.</p>
       </li>
@@ -980,7 +980,7 @@
     <h3>Session Storage and Persistence</h3>
     <p>This section provides an overview of session stroage and persistence that complements the algorithms.</p>
     <p>If this object's <var title="true">session type</var> is not <a def-id="persistent-session"></a>, the user agent and CDM must <em>not</em> persist a record of or data related to the session at any point.
-      This includes license(s), key(s), and the <a href="#session-id">Session ID</a>.
+      This includes license(s), key(s), and the <a def-id="session-id"></a>.
     </p>
     <p>The remainder of this section applies to <a def-id="persistent-session"></a> sessions, which implementatations may optionally support.</p>
     <p>Persisted data must always be stored such that only the <a def-id="origin"></a> of this object's <a def-id="document-concept"></a> can access it.
@@ -1027,7 +1027,7 @@
     <dl title="partial interface HTMLMediaElement : EventTarget" class='idl'>
       <dt>readonly attribute MediaKeys? mediaKeys</dt>
       <dd>
-        <p>The <a def-id="mediakeys"></a> being used when decrypting encrypted <a def-id="media-data"></a> for this <a href="#htmlmediaelement-extensions">media element</a>.</p>
+        <p>The <a def-id="mediakeys"></a> being used when decrypting encrypted <a def-id="media-data"></a> for this media element.</p>
       </dd>
 
       <dt>readonly attribute MediaWaitingFor waitingFor</dt>
@@ -1105,12 +1105,12 @@
 
         <dt>readonly attribute DOMString initDataType</dt>
         <dd>
-          Indicates the <a href="#initialization-data-type">initialization data type</a> of the <a href="#initialization-data">Initialization Data</a> contained in the <a def-id="encrypted-event-initdata-attribute"></a> attribute.
+          Indicates the <a def-id="initialization-data-type"></a> of the <a def-id="initialization-data"></a> contained in the <a def-id="encrypted-event-initdata-attribute"></a> attribute.
         </dd>
 
         <dt>readonly attribute ArrayBuffer? initData</dt>
         <dd>
-          The <a href="#initialization-data">Initialization Data</a> for the event.
+          The <a def-id="initialization-data"></a> for the event.
         </dd>
       </dl>
 
@@ -1119,11 +1119,11 @@
         <dl title="dictionary MediaEncryptedEventInit : EventInit" class="idl">
           <dt>DOMString initDataType = ""</dt>
           <dd>
-            The <a href="#initialization-data-type">initialization data type</a>.
+            The <a def-id="initialization-data-type"></a>.
           </dd>
           <dt>ArrayBuffer? initData = null</dt>
           <dd>
-            The <a href="#initialization-data">Initialization Data</a>.
+            The <a def-id="initialization-data"></a>.
           </dd>
         </dl>
       </section>
@@ -1145,7 +1145,7 @@
         <tr>
           <td><a def-id="eventdfn">encrypted</a></td>
           <td><a>MediaEncryptedEvent</a></td>
-          <td>The user agent encounters <a href="#initialization-data">Initialization Data</a> in the <a def-id="media-data"></a>.</td>
+          <td>The user agent encounters <a def-id="initialization-data"></a> in the <a def-id="media-data"></a>.</td>
           <td><a def-id="readystate"></a> is equal to <a def-id="have-metadata"></a> or greater.
           <p class="note">It is possible that the element is playing or has played.</p>
           </td>
@@ -1159,7 +1159,7 @@
 
     <section id="algorithms-initdata-encountered">
     <h4>Initialization Data Encountered</h4>
-    <p>The following steps are run when the media element encounters <a href="#initialization-data">Initialization Data</a> in the <a def-id="media-data"></a> during the <a def-id="resource-fetch-algorithm"></a>:</p>
+    <p>The following steps are run when the media element encounters <a def-id="initialization-data"></a> in the <a def-id="media-data"></a> during the <a def-id="resource-fetch-algorithm"></a>:</p>
 
     <ol>
       <li><p>Let <var title="">initDataType</var> be the empty string.</p></li>
@@ -1167,7 +1167,7 @@
       <li>
         <p>If the <a def-id="media-data"></a> is <a def-id="cors-same-origin"></a> and <em>not</em> <a href="#mixed-content">mixed content</a>, run the following steps:</p>
         <ol>
-          <li><p>Let <var title="">initDataType</var> be the string representing the <a href="#initialization-data-type">initialization data type</a> of the Initialization Data.</p></li>
+          <li><p>Let <var title="">initDataType</var> be the string representing the <a def-id="initialization-data-type"></a> of the Initialization Data.</p></li>
           <li><p>Let <var title="">initData</var> be the Initialization Data.</p></li>
         </ol>
         <p class="note">While the media element may allow loading of "Optionally-blockable Content" [MIXED-CONTENT], the user agent must not expose Initialization Data from such media data to the application.</p>
@@ -1213,7 +1213,7 @@
                     <dd>Run the following steps:
                       <ol>
                         <li><p>Let <var title="">block key</var> be the matching key.</p>
-                          <p class="note">If multiple sessions contain a <em>usable</em> key for the <var title="">block key ID</var>, which key to use is <a href="#key-system">Key System</a>-dependent.</p>
+                          <p class="note">If multiple sessions contain a <em>usable</em> key for the <var title="">block key ID</var>, which key to use is <a def-id="keysystem"></a>-dependent.</p>
                         </li>
                         <li><p>Use the <var title="true">cdm</var> to decrypt the block using <var title="">block key</var>.</p></li>
                         <li><p>Follow the steps for the first matching condition from the following list:</p>
@@ -1345,7 +1345,7 @@
     <span id="simple-decryption-clear-key"></span> <!-- Legacy anchor name. -->
     <section id="clear-key">
     <h3>Clear Key</h3>
-    <p>The "org.w3.clearkey" <a href="#key-system">Key System</a> uses plain-text clear (unencrypted) key(s) to decrypt the source.
+    <p>The "org.w3.clearkey" <a def-id="keysystem"></a> uses plain-text clear (unencrypted) key(s) to decrypt the source.
     No additional client-side content protection is required.
     This Key System is described below.
     </p>
@@ -1381,7 +1381,7 @@
         </ul>
       </li>
       <li><p>The <a def-id="getUsableKeyIds"></a> method always returns all key IDs that have been provided via <a def-id="update"></a>.</p></li>
-      <li><p><a href="#initialization-data">Initialization Data</a>: Implementations may support any combination of registered Initialization Data types [[EME-REGISTRY]].
+      <li><p><a def-id="initialization-data"></a>: Implementations may support any combination of registered Initialization Data types [[EME-REGISTRY]].
         Implementations should support the "<a href="keyids-format.html">keyids</a>" type and other types appropriate for content types supported by the user agent.
       </p></li>
     </ul>
@@ -1476,7 +1476,7 @@
     <section id="security" class="informative">
     <h2>Security Considerations</h2>
 
-    <p>User Agent and Key System implementations must consider <a def-id="media-data"></a>, <a href="#initialization-data">Initialization Data</a>, responses (i.e. data passed to <a def-id="update"></a>), licenses, key data, and all other data provided by the application as untrusted content and potential attack vectors.
+    <p>User Agent and Key System implementations must consider <a def-id="media-data"></a>, <a def-id="initialization-data"></a>, responses (i.e. data passed to <a def-id="update"></a>), licenses, key data, and all other data provided by the application as untrusted content and potential attack vectors.
     They must use appropriate safeguards to mitigate any associated threats and take care to safely parse, decrypt, etc. such data.
     User Agents may want to validate data before passing it to the CDM, especially if the CDM does not run in the same (sandboxed) context as the DOM (i.e. rendering).
     </p>
@@ -1691,8 +1691,8 @@
 
     <section id="example-selecting-key-system">
     <h3>Selecting a Supported Key System and Using Initialization Data from the <a def-id="encrypted"></a> Event</h3>
-    <p class="exampledescription">This example selects a supported <a href="#key-system">Key System</a> using the <a def-id="isTypeSupported"></a> method then uses
-    the <a href="#initialization-data">Initialization Data</a> from the <a def-id="media-data"></a> to generate the license request and send it to the appropriate license server.
+    <p class="exampledescription">This example selects a supported <a def-id="keysystem"></a> using the <a def-id="isTypeSupported"></a> method then uses
+    the <a def-id="initialization-data"></a> from the <a def-id="media-data"></a> to generate the license request and send it to the appropriate license server.
     One of the supported key systems uses a serverCertificate, which is provided proactively.
     </p>
 
@@ -1784,7 +1784,7 @@
     <section id="example-mediakeys-before-source">
     <h3>Create MediaKeys Before Loading Media</h3>
     <p class="exampledescription">Initialization is much simpler if encrypted events do not need to be handled during MediaKeys initialization.
-    This can be accomplished either by providing the <a href="#initialization-data">Initialization Data</a> in other ways or setting the source after the MediaKeys object has been created.
+    This can be accomplished either by providing the <a def-id="initialization-data"></a> in other ways or setting the source after the MediaKeys object has been created.
     This example does the latter.
     </p>
 
--- a/encrypted-media/encrypted-media.js	Fri Oct 10 14:45:07 2014 -0700
+++ b/encrypted-media/encrypted-media.js	Fri Oct 10 14:54:22 2014 -0700
@@ -141,6 +141,13 @@
   var emeDefinitions = {
 //    'eme-spec': { func: link_helper, fragment: '#', link_text: 'Encrypted Media Extensions', },
 
+    'cdm': { func: term_helper, fragment: 'cdm', link_text: 'CDM'  },
+    'keysystem': { func: term_helper, fragment: 'key-system', link_text: 'Key System'  },
+    'keysystems': { func: term_helper, fragment: 'key-system', link_text: 'Key Systems'  },
+    'initialization-data': { func: term_helper, fragment: 'initialization-data', link_text: 'Initialization Data'  },
+    'initialization-data-type': { func: term_helper, fragment: 'initialization-data', link_text: 'Initialization Data'  },
+    'session-id': { func: term_helper, fragment: 'session-id', link_text: 'Session Id'  },
+    
     'sessiontype': { func: idlref_helper, fragment: 'idl-def-SessionType', link_text: 'SessionType',  },
     'persistent-session': { func: idlref_helper, fragment: 'idl-def-SessionType.persistent', link_text: '"persistent"',  },
     'temporary-session': { func: idlref_helper, fragment: 'idl-def-SessionType.temporary', link_text: '"temporary"',  },