hixie: Disallow empty URLs for external resources. Make UAs ignore such references. (whatwg r4834)

hixie: Disallow empty URLs for external resources. Make UAs ignore such
references. (whatwg r4834)

http://dev.w3.org/cvsweb/html5/spec/Overview.html?r1=1.3871&r2=1.3872&f=h
http://html5.org/tools/web-apps-tracker?from=4833&to=4834

===================================================================
RCS file: /sources/public/html5/spec/Overview.html,v
retrieving revision 1.3871
retrieving revision 1.3872
diff -u -d -r1.3871 -r1.3872
--- Overview.html 8 Mar 2010 22:45:37 -0000 1.3871
+++ Overview.html 9 Mar 2010 00:35:24 -0000 1.3872
@@ -1666,7 +1666,13 @@
   3.7 "Media Types" of RFC 2616, but does not contain any U+003B
   SEMICOLON characters (;). In other words, if it consists only of a
   type and subtype, with no MIME Type parameters. <a href="#refsHTTP">[HTTP]</a><p>The term <dfn id="html-mime-type">HTML MIME type</dfn> is used to refer to the <a href="#mime-type" title="MIME type">MIME types</a> <code><a href="#text-html">text/html</a></code> and
-  <code><a href="#text-html-sandboxed">text/html-sandboxed</a></code>.<h4 id="xml"><span class="secno">2.1.2 </span>XML</h4><p class="XXX annotation"><b>Status: </b><i>Last call for comments</i><p id="html-namespace">To ease migration from HTML to XHTML, UAs
+  <code><a href="#text-html-sandboxed">text/html-sandboxed</a></code>.<p>A resource's <dfn id="critical-subresources">critical subresources</dfn> are those that the
+  resource needs to have available to be correctly processed. Which
+  resources are considered critical or not is defined by the
+  specification that defines the resource's format. For CSS resources,
+  only <code title="">@import</code> rules introduce <a href="#critical-subresources">critical
+  subresources</a>; other resources, e.g. fonts or backgrounds, are
+  not.<h4 id="xml"><span class="secno">2.1.2 </span>XML</h4><p class="XXX annotation"><b>Status: </b><i>Last call for comments</i><p id="html-namespace">To ease migration from HTML to XHTML, UAs
   conforming to this specification will place elements in HTML in the
   <code>http://www.w3.org/1999/xhtml</code> namespace, at least for
   the purposes of the DOM and CSS. The term "<dfn id="html-elements">HTML
@@ -4161,7 +4167,8 @@
   that view's environment according to the definitions given in the
   Media Queries specification. <a href="#refsMQ">[MQ]</a><h3 id="urls"><span class="secno">2.5 </span>URLs</h3><p class="XXX annotation"><b>Status: </b><i>Last call for comments. </i><span><a href="http://www.w3.org/html/wg/tracker/issues/56">ISSUE-56</a> (urls-webarch) and <a href="http://www.w3.org/html/wg/tracker/issues/78">ISSUE-78</a> (urls-terminology) block progress to Last Call</span><h4 id="terminology-0"><span class="secno">2.5.1 </span>Terminology</h4><p class="XXX annotation"><b>Status: </b><i>Last call for comments</i><p>A <dfn id="url">URL</dfn> is a string used to identify a resource.<p>A <a href="#url">URL</a> is a <dfn id="valid-url">valid URL</dfn> if it is a
   <span>valid Web address</span> as defined by the Web addresses
-  specification. <a href="#refsWEBADDRESSES">[WEBADDRESSES]</a><p>A <a href="#url">URL</a> is an <dfn id="absolute-url">absolute URL</dfn> if it is an
+  specification. <a href="#refsWEBADDRESSES">[WEBADDRESSES]</a><p>A <a href="#url">URL</a> is a <dfn id="valid-non-empty-url">valid non-empty URL</dfn> if it is a
+  <a href="#valid-url">valid URL</a> but it is not the empty string.<p>A <a href="#url">URL</a> is an <dfn id="absolute-url">absolute URL</dfn> if it is an
   <span>absolute Web address</span> as defined by the Web addresses
   specification. <a href="#refsWEBADDRESSES">[WEBADDRESSES]</a><div class="impl">
 
@@ -9226,7 +9233,7 @@
   attribute gives the address of the document's <a href="#application-cache">application
   cache</a> <a href="#concept-appcache-manifest" title="concept-appcache-manifest">manifest</a>, if there is
   one. If the attribute is present, the attribute's value must be a
-  <a href="#valid-url">valid URL</a>.<p>The <code title="attr-html-manifest"><a href="#attr-html-manifest">manifest</a></code> attribute
+  <a href="#valid-non-empty-url">valid non-empty URL</a>.<p>The <code title="attr-html-manifest"><a href="#attr-html-manifest">manifest</a></code> attribute
   only <a href="#concept-appcache-init" title="concept-appcache-init">has an effect</a> during
   the early stages of document load. Changing the attribute
   dynamically thus has no effect (and thus, no DOM API is provided for
@@ -9460,9 +9467,9 @@
    </dd>
   </dl><p>The <code><a href="#the-link-element">link</a></code> element allows authors to link their
   document to other resources.<p>The destination of the link(s) is given by the <dfn id="attr-link-href" title="attr-link-href"><code>href</code></dfn> attribute, which must
-  be present and must contain a <a href="#valid-url">valid URL</a>. <span class="impl">If the <code title="attr-link-href"><a href="#attr-link-href">href</a></code>
-  attribute is absent, then the element does not define a
-  link.</span><p>A <code><a href="#the-link-element">link</a></code> element must have <code title="attr-link-rel"><a href="#attr-link-rel">rel</a></code> attribute.<p>The types of link indicated (the relationships) are given by the
+  be present and must contain a <a href="#valid-non-empty-url">valid non-empty
+  URL</a>. <span class="impl">If the <code title="attr-link-href"><a href="#attr-link-href">href</a></code> attribute is absent, then the
+  element does not define a link.</span><p>A <code><a href="#the-link-element">link</a></code> element must have <code title="attr-link-rel"><a href="#attr-link-rel">rel</a></code> attribute.<p>The types of link indicated (the relationships) are given by the
   value of the <dfn id="attr-link-rel" title="attr-link-rel"><code>rel</code></dfn>
   attribute, which, if present, must have a value that is a <a href="#set-of-space-separated-tokens">set
   of space-separated tokens</a>. The <a href="#linkTypes">allowed
@@ -9487,16 +9494,28 @@
   independently.<p>The exact behavior for links to external resources depends on the
   exact relationship, as defined for the relevant link type. Some of
   the attributes control whether or not the external resource is to be
-  applied (as defined below). <span class="impl">For external
-  resources that are represented in the DOM (for example, style
-  sheets), the DOM representation must be made available even if the
-  resource is not applied. To <dfn id="concept-link-obtain" title="concept-link-obtain">obtain
-  the resource</dfn>, the user agent must <a href="#resolve-a-url" title="resolve a
-  url">resolve</a> the <a href="#url">URL</a> given by the <code title="attr-link-href"><a href="#attr-link-href">href</a></code> attribute, relative to the
-  element, and then <a href="#fetch">fetch</a> the resulting <a href="#absolute-url">absolute
-  URL</a>. User agents may opt to only try to obtain such resources
-  when they are needed, instead of pro-actively <a href="#fetch" title="fetch">fetching</a> all the external resources that are
-  not applied.</span></p><!-- http-origin privacy sensitive --><div class="impl">
+  applied (as defined below).<div class="impl">
+
+  <p>For external resources that are represented in the
+  DOM (for example, style sheets), the DOM representation must be made
+  available even if the resource is not applied. To <dfn id="concept-link-obtain" title="concept-link-obtain">obtain the resource</dfn>, the user
+  agent must run the following steps:</p>
+
+  <ol><li><p>If the <code title="attr-link-href"><a href="#attr-link-href">href</a></code> attribute's
+   value is the empty string, then abort these steps.</li>
+
+   <li><p><a href="#resolve-a-url" title="resolve a url">Resolve</a> the
+   <a href="#url">URL</a> given by the <code title="attr-link-href"><a href="#attr-link-href">href</a></code> attribute, relative to the
+   element.</li>
+
+   <li><p>If the previous step fails, then abort these steps.</li>
+
+   <li><p><a href="#fetch">Fetch</a> the resulting <a href="#absolute-url">absolute
+   URL</a>.</li> <!-- http-origin privacy sensitive -->
+
+  </ol><p>User agents may opt to only try to obtain such resources when
+  they are needed, instead of pro-actively <a href="#fetch" title="fetch">fetching</a> all the external resources that are
+  not applied.</p>
 
   <p>The semantics of the protocol used (e.g. HTTP) must be followed
   when fetching external resources. (For example, redirects will be
@@ -9504,33 +9523,29 @@
   be applied.)</p>
 
   <!-- the next few paragraph are similar to text in the <style type="text/css"> section -->
-  <p>Once the attempts to obtain the resource and its critical
-  subresources are complete, the user agent must, if the loads were
-  successful, <a href="#queue-a-task">queue a task</a> to <a href="#fire-a-simple-event">fire a simple
+  <p>Once the attempts to obtain the resource and its <a href="#critical-subresources">critical
+  subresources</a> are complete, the user agent must, if the loads
+  were successful, <a href="#queue-a-task">queue a task</a> to <a href="#fire-a-simple-event">fire a simple
   event</a> named <code title="event-load">load</code> at the
   <code><a href="#the-link-element">link</a></code> element, or, if the resource or one of its
-  critical subresources failed to completely load for any reason
-  (e.g. DNS error, HTTP 404 response, a connection being prematurely
-  closed, unsupported Content-Type), <a href="#queue-a-task">queue a task</a> to
-  <a href="#fire-a-simple-event">fire a simple event</a> named <code title="event-error">error</code> at the <code><a href="#the-link-element">link</a></code>
+  <a href="#critical-subresources">critical subresources</a> failed to completely load for any
+  reason (e.g. DNS error, HTTP 404 response, a connection being
+  prematurely closed, unsupported Content-Type), <a href="#queue-a-task">queue a
+  task</a> to <a href="#fire-a-simple-event">fire a simple event</a> named <code title="event-error">error</code> at the <code><a href="#the-link-element">link</a></code>
   element. Non-network errors in processing the resource or its
   subresources (e.g. CSS parse errors, PNG decoding errors) are not
   failures for the purposes of this paragraph.</p>
 
-  <p>The <a href="#task-source">task source</a> for these <a href="#concept-task" title="concept-task">tasks</a> is the <a href="#dom-manipulation-task-source">DOM manipulation
-  task source</a>.</p>
+  <p>The <a href="#task-source">task source</a> for these <a href="#concept-task" title="concept-task">tasks</a> is the <a href="#dom-manipulation-task-source">DOM manipulation task
+  source</a>.</p>
 
   <p>The element must <a href="#delay-the-load-event">delay the load event</a> of the
   element's document until all the attempts to obtain the resource and
-  its critical subresources are complete. (Resources that the user
-  agent has not yet attempted to obtain, e.g. because it is waiting
-  for the resource to be needed, do not <a href="#delay-the-load-event">delay the load
+  its <a href="#critical-subresources">critical subresources</a> are complete. (Resources that
+  the user agent has not yet attempted to obtain, e.g. because it is
+  waiting for the resource to be needed, do not <a href="#delay-the-load-event">delay the load
   event</a>.)</p>
 
-  <p>Which resources are considered critical or not is defined by the
-  relevant specification. For CSS resources, only <code title="">@import</code> rules introduce critical subresources; other
-  resources, e.g. fonts or backgrounds, are not.</p>
-
   <hr><p id="linkui">Interactive user agents may provide users with a
   means to <a href="#following-hyperlinks" title="following hyperlinks">follow the
   hyperlinks</a> created using the <code><a href="#the-link-element">link</a></code> element,
@@ -10567,18 +10582,18 @@
   URL don't affect the CSS --></p>
 
   <!-- the next few paragraph are similar to text in the <style type="text/css"> section -->
-  <p>Once the attempts to obtain the style sheet's critical
-  subresources, if any, are complete, or, if the style sheet has no
-  critical subresources, once the style sheet has been parsed and
-  processed, the user agent must, if the loads were successful or
-  there were none, <a href="#queue-a-task">queue a task</a> to <a href="#fire-a-simple-event">fire a simple
-  event</a> named <code title="event-load">load</code> at the
-  <code><a href="#the-style-element">style</a></code> element, or, if one of the style sheet's critical
-  subresources failed to completely load for any reason (e.g. DNS
-  error, HTTP 404 response, a connection being prematurely closed,
-  unsupported Content-Type), <a href="#queue-a-task">queue a task</a> to <a href="#fire-a-simple-event">fire a
-  simple event</a> named <code title="event-error">error</code> at
-  the <code><a href="#the-style-element">style</a></code> element. Non-network errors in processing the
+  <p>Once the attempts to obtain the style sheet's <a href="#critical-subresources">critical
+  subresources</a>, if any, are complete, or, if the style sheet
+  has no <a href="#critical-subresources">critical subresources</a>, once the style sheet has
+  been parsed and processed, the user agent must, if the loads were
+  successful or there were none, <a href="#queue-a-task">queue a task</a> to
+  <a href="#fire-a-simple-event">fire a simple event</a> named <code title="event-load">load</code> at the <code><a href="#the-style-element">style</a></code> element,
+  or, if one of the style sheet's <a href="#critical-subresources">critical subresources</a>
+  failed to completely load for any reason (e.g. DNS error, HTTP 404
+  response, a connection being prematurely closed, unsupported
+  Content-Type), <a href="#queue-a-task">queue a task</a> to <a href="#fire-a-simple-event">fire a simple
+  event</a> named <code title="event-error">error</code> at the
+  <code><a href="#the-style-element">style</a></code> element. Non-network errors in processing the
   style sheet or its subresources (e.g. CSS parse errors, PNG decoding
   errors) are not failures for the purposes of this paragraph.</p>
 
@@ -10587,11 +10602,8 @@
 
   <p>The element must <a href="#delay-the-load-event">delay the load event</a> of the
   element's document until all the attempts to obtain the style
-  sheet's critical subresources, if any, are complete.</p>
-
-  <p>Which resources are considered critical or not is defined by the
-  relevant specification. For CSS resources, only <code title="">@import</code> rules introduce critical subresources; other
-  resources, e.g. fonts or backgrounds, are not.</p>
+  sheet's <a href="#critical-subresources">critical subresources</a>, if any, are
+  complete.</p>
 
   </div><p class="note">This specification does not specify a style system,
   but CSS is expected to be supported by most Web browsers. <a href="#refsCSS">[CSS]</a><div class="impl">
@@ -10803,9 +10815,9 @@
   specified. The default, which is used if the attribute is absent,
   is "<code title="">text/javascript</code>".<p>The <dfn id="attr-script-src" title="attr-script-src"><code>src</code></dfn>
   attribute, if specified, gives the address of the external script
-  resource to use. The value of the attribute must be a <a href="#valid-url">valid
-  URL</a> identifying a script resource of the type given by the
-  <code title="attr-script-type"><a href="#attr-script-type">type</a></code> attribute, if the
+  resource to use. The value of the attribute must be a <a href="#valid-non-empty-url">valid
+  non-empty URL</a> identifying a script resource of the type given
+  by the <code title="attr-script-type"><a href="#attr-script-type">type</a></code> attribute, if the
   attribute is present, or of the type "<code title="">text/javascript</code>", if the attribute is absent. A
   resource is a script resource of a given type if that type
   identifies a scripting language and the resource conforms with the
@@ -10971,10 +10983,18 @@
    <li>
 
     <p>If the element has a <code title="attr-script-src"><a href="#attr-script-src">src</a></code>
-    attribute, then the value of that attribute must be <a href="#resolve-a-url" title="resolve a url">resolved</a> relative to the element, and
-    if that is successful, the specified resource must then be <a href="#fetch" title="fetch">fetched</a>, from the <a href="#origin">origin</a> of the
-    element's <code><a href="#document">Document</a></code>.</p> <!-- not http-origin privacy
-    sensitive -->
+    attribute whose value is not the empty string, then the value of
+    that attribute must be <a href="#resolve-a-url" title="resolve a url">resolved</a>
+    relative to the element, and if that is successful, the specified
+    resource must then be <a href="#fetch" title="fetch">fetched</a>, from the
+    <a href="#origin">origin</a> of the element's <code><a href="#document">Document</a></code>.</p>
+    <!-- not http-origin privacy sensitive -->
+
+    <p>If the <code title="attr-script-src"><a href="#attr-script-src">src</a></code> attribute's
+    value is the empty string or if it could not be resolved, then the
+    user agent must <a href="#queue-a-task">queue a task</a> to <a href="#fire-a-simple-event">fire a simple
+    event</a> named <code title="event-error">error</code> at the
+    element, and abort these steps.</p>
 
     <p>For historical reasons, if the <a href="#url">URL</a> is a <a href="#javascript-protocol" title="javascript protocol"><code title="">javascript:</code>
     URL</a>, then the user agent must not, despite the requirements
@@ -11212,7 +11232,12 @@
 
      <li>
 
-      <p><a href="#fire-a-simple-event">Fire a simple event</a> named <code title="event-load">load</code> at the <code><a href="#script">script</a></code>
+      <p>If the script is from an external file, <a href="#fire-a-simple-event">fire a simple
+      event</a> named <code title="event-load">load</code> at the
+      <code><a href="#script">script</a></code> element.</p>
+
+      <p>Otherwise, the script is internal; <a href="#queue-a-task">queue a task</a>
+      to <a href="#fire-a-simple-event">fire a simple event</a> named <code title="event-load">load</code> at the <code><a href="#script">script</a></code>
       element.</p>
 
      </li>
@@ -15752,11 +15777,9 @@
   --><p>The image given by the <dfn id="attr-img-src" title="attr-img-src"><code>src</code></dfn> attribute is the
   embedded content, and the value of the <dfn id="attr-img-alt" title="attr-img-alt"><code>alt</code></dfn> attribute is the
   <code><a href="#the-img-element">img</a></code> element's <a href="#fallback-content">fallback content</a>.<p>The <code title="attr-img-src"><a href="#attr-img-src">src</a></code> attribute must be
-  present, and must contain a <a href="#valid-url">valid URL</a> referencing a
-  non-interactive, optionally animated, image resource that is neither
-  paged nor scripted. If the <i>base URI of the element</i> is the
-  same as <a href="#the-document-s-address">the document's address</a>, then the <code title="attr-img-src"><a href="#attr-img-src">src</a></code> attribute's value must not be the
-  empty string.<p class="note">Images can thus be static bitmaps (e.g. PNGs, GIFs,
+  present, and must contain a <a href="#valid-non-empty-url">valid non-empty URL</a>
+  referencing a non-interactive, optionally animated, image resource
+  that is neither paged nor scripted.<p class="note">Images can thus be static bitmaps (e.g. PNGs, GIFs,
   JPEGs), single-page vector documents (single-page PDFs, XML files
   with an SVG root element), animated bitmaps (APNGs, animated GIFs),
   animated vector graphics (XML files with an SVG root element that
@@ -15772,19 +15795,14 @@
   <hr><p>Unless the user agent cannot support images, or its support for
   images has been disabled, or the user agent only fetches elements on
   demand, or the element's <code title="attr-img-src"><a href="#attr-img-src">src</a></code>
-  attribute has a value that is an <i>ignored self-reference</i>,
-  then, when an <code><a href="#the-img-element">img</a></code> is created with a <code title="attr-img-src"><a href="#attr-img-src">src</a></code> attribute, and whenever the <code title="attr-img-src"><a href="#attr-img-src">src</a></code> attribute is set subsequently, the
+  attribute's value is the empty string, then, when an
+  <code><a href="#the-img-element">img</a></code> is created with a <code title="attr-img-src"><a href="#attr-img-src">src</a></code> attribute, and whenever the <code title="attr-img-src"><a href="#attr-img-src">src</a></code> attribute is set subsequently, the
   user agent must <a href="#resolve-a-url" title="resolve a url">resolve</a> the value
   of that attribute, relative to the element, and if that is
   successful must then <a href="#fetch">fetch</a> that resource.</p> <!-- Note
   how this does NOT happen when the base URL changes. --> <!--
   http-origin privacy sensitive -->
 
-  <p>The <code title="attr-img-src"><a href="#attr-img-src">src</a></code> attribute's value is an
-  <i>ignored self-reference</i> if its value is the empty string, and
-  the <i>base URI of the element</i> is the same as <a href="#the-document-s-address">the
-  document's address</a>.</p>
-
   <!-- same text in <input type=image> section and similar text elsewhere -->
   <p>Fetching the image must <a href="#delay-the-load-event">delay the load event</a> of the
   element's document until the <a href="#concept-task" title="concept-task">task</a>
@@ -16982,7 +17000,7 @@
   <a href="#nested-browsing-context">nested browsing context</a>.<p>The <dfn id="attr-iframe-src" title="attr-iframe-src"><code>src</code></dfn> attribute
   gives the address of a page that the <a href="#nested-browsing-context">nested browsing
   context</a> is to contain. The attribute, if present, must be a
-  <a href="#valid-url">valid URL</a>.<p>The <dfn id="attr-iframe-srcdoc" title="attr-iframe-srcdoc"><code>srcdoc</code></dfn>
+  <a href="#valid-non-empty-url">valid non-empty URL</a>.<p>The <dfn id="attr-iframe-srcdoc" title="attr-iframe-srcdoc"><code>srcdoc</code></dfn>
   attribute gives the content of the page that the <a href="#nested-browsing-context">nested
   browsing context</a> is to contain.  The value of the attribute
   in is <dfn id="an-iframe-srcdoc-document">an <code>iframe</code> <code title="attr-iframe-srcdoc">srcdoc</code> document</dfn>.<p>For <code><a href="#the-iframe-element">iframe</a></code> elements in <a href="#html-documents">HTML documents</a>,
@@ -17047,11 +17065,10 @@
 
    <dd>
 
-    <ol><!--
-     <li><p>If the value of the <code
-     title="attr-iframe-src">src</code> attribute is the empty string,
-     jump to the <i title="">empty</i> step below.</p></li>
---><li><p><a href="#resolve-a-url" title="resolve a url">Resolve</a> the value of
+    <ol><li><p>If the value of the <code title="attr-iframe-src"><a href="#attr-iframe-src">src</a></code> attribute is the empty string,
+     jump to the <i title="">empty</i> step below.</li>
+
+     <li><p><a href="#resolve-a-url" title="resolve a url">Resolve</a> the value of
      the <code title="attr-iframe-src"><a href="#attr-iframe-src">src</a></code> attribute, relative
      to the <code><a href="#the-iframe-element">iframe</a></code> element.</li>
 
@@ -17660,7 +17677,7 @@
   integration point for an external (typically non-HTML) application
   or interactive content.<p>The <dfn id="attr-embed-src" title="attr-embed-src"><code>src</code></dfn> attribute
   gives the address of the resource being embedded. The attribute, if
-  present, must contain a <a href="#valid-url">valid URL</a>.<p>The <dfn id="attr-embed-type" title="attr-embed-type"><code>type</code></dfn>
+  present, must contain a <a href="#valid-non-empty-url">valid non-empty URL</a>.<p>The <dfn id="attr-embed-type" title="attr-embed-type"><code>type</code></dfn>
   attribute, if present, gives the <a href="#mime-type">MIME type</a> by which the
   plugin to instantiate is selected. The value must be a <a href="#valid-mime-type">valid
   MIME type</a>. If both the <code title="attr-embed-type"><a href="#attr-embed-type">type</a></code> attribute and the <code title="attr-embed-src"><a href="#attr-embed-src">src</a></code> attribute are present, then the
@@ -17709,6 +17726,7 @@
   <ul class="brief"><li>The element is <a href="#in-a-document" title="in a document">in a <code>Document</code></a>.</li>
    <li>The element's <code><a href="#document">Document</a></code> is <a href="#fully-active">fully active</a>.</li>
    <li>The element has either a <code title="attr-embed-src"><a href="#attr-embed-src">src</a></code> attribute set or a <code title="attr-embed-type"><a href="#attr-embed-type">type</a></code> attribute set (or both).</li>
+   <li>The element's <code title="attr-embed-src"><a href="#attr-embed-src">src</a></code> attribute is either absent or its value is the empty string.</li>
    <li>The element is not in a <code><a href="#document">Document</a></code> whose <a href="#browsing-context">browsing context</a> had the <a href="#sandboxed-plugins-browsing-context-flag">sandboxed plugins browsing context flag</a> set when the <code><a href="#document">Document</a></code> was created (unless this has been overrriden as described above).</li>
    <li>The element's <code><a href="#document">Document</a></code> was not parsed from a resource whose <a href="#content-type-sniffing-0" title="Content-Type sniffing">sniffed type</a> as determined during <a href="#navigate" title="navigate">navigation</a> is <code><a href="#text-html-sandboxed">text/html-sandboxed</a></code> (unless this has been overrriden as described above).</li>
    <li>The element is not a descendant of a <a href="#media-element">media element</a>.</li>
@@ -17921,7 +17939,8 @@
   or as an external resource to be processed by a
   <a href="#plugin">plugin</a>.<p>The <dfn id="attr-object-data" title="attr-object-data"><code>data</code></dfn>
   attribute, if present, specifies the address of the resource. If
-  present, the attribute must be a <a href="#valid-url">valid URL</a>.<p>The <dfn id="attr-object-type" title="attr-object-type"><code>type</code></dfn>
+  present, the attribute must be a <a href="#valid-non-empty-url">valid non-empty
+  URL</a>.<p>The <dfn id="attr-object-type" title="attr-object-type"><code>type</code></dfn>
   attribute, if present, specifies the type of the resource. If
   present, the attribute must be a <a href="#valid-mime-type">valid MIME type</a>.<p>At least one of either the <code title="attr-object-data"><a href="#attr-object-data">data</a></code> attribute or the <code title="attr-object-type"><a href="#attr-object-type">type</a></code> attribute must be present.<p>The <dfn id="attr-object-name" title="attr-object-name"><code>name</code></dfn>
   attribute, if present, must be a <a href="#valid-browsing-context-name">valid browsing context
@@ -18299,12 +18318,13 @@
 
    <li><p>If the <code title="attr-object-data"><a href="#attr-object-data">data</a></code> attribute
    is absent but the <code title="attr-object-type"><a href="#attr-object-type">type</a></code>
-   attribute is present, <a href="#sandboxPluginObject">plugins
-   aren't being sandboxed</a>, and the user agent can find a <a href="#plugin">plugin</a>
-   suitable according to the value of the <code title="attr-object-type"><a href="#attr-object-type">type</a></code> attribute, then that <a href="#plugin">plugin</a>
-   <a href="#object-plugin">should be used</a>. If no suitable <a href="#plugin">plugin</a>
-   can be found, or if the <a href="#plugin">plugin</a> reports an error, jump to the next
-   step (fallback).</li>
+   attribute is present, <a href="#sandboxPluginObject">plugins aren't
+   being sandboxed</a>, and the user agent can find a
+   <a href="#plugin">plugin</a> suitable according to the value of the <code title="attr-object-type"><a href="#attr-object-type">type</a></code> attribute, then that
+   <a href="#plugin">plugin</a> <a href="#object-plugin">should be used</a>. If
+   no suitable <a href="#plugin">plugin</a> can be found, or if the
+   <a href="#plugin">plugin</a> reports an error, jump to the next step
+   (fallback).</li>
 
    <li><p>(Fallback.) The <code><a href="#the-object-element">object</a></code> element
    <a href="#represents">represents</a> the element's children, ignoring any
@@ -18555,12 +18575,11 @@
   elements</a>.<p>The <dfn id="attr-video-poster" title="attr-video-poster"><code>poster</code></dfn>
   attribute gives the address of an image file that the user agent can
   show while no video data is available. The attribute, if present,
-  must contain a <a href="#valid-url">valid URL</a>. <span class="impl">If the
-  specified resource is to be used, then, when the element is created
-  or when the <code title="attr-video-poster"><a href="#attr-video-poster">poster</a></code> attribute
-  is set, its value must be <a href="#resolve-a-url" title="resolve a
-  url">resolved</a> relative to the element, and if that is
-  successful, the resulting <a href="#absolute-url">absolute URL</a> must be <a href="#fetch" title="fetch">fetched</a>, from the element's
+  must contain a <a href="#valid-non-empty-url">valid non-empty URL</a>. <span class="impl">If the specified resource is to be used, then, when the
+  element is created or when the <code title="attr-video-poster"><a href="#attr-video-poster">poster</a></code> attribute is set, if its
+  value is not the empty string, its value must be <a href="#resolve-a-url" title="resolve a url">resolved</a> relative to the element, and
+  if that is successful, the resulting <a href="#absolute-url">absolute URL</a> must
+  be <a href="#fetch" title="fetch">fetched</a>, from the element's
   <code><a href="#document">Document</a></code>'s <a href="#origin">origin</a>; this must <a href="#delay-the-load-event">delay
   the load event</a> of the element's document. The <dfn id="poster-frame">poster
   frame</dfn> is then the image obtained from that resource, if
@@ -18898,7 +18917,8 @@
   resources</a> for <a href="#media-element" title="media element">media
   elements</a>. It does not <a href="#represents" title="represents">represent</a> anything on its own.<p>The <dfn id="attr-source-src" title="attr-source-src"><code>src</code></dfn> attribute
   gives the address of the <a href="#media-resource">media resource</a>. The value must
-  be a <a href="#valid-url">valid URL</a>. This attribute must be present.<p>The <dfn id="attr-source-type" title="attr-source-type"><code>type</code></dfn>
+  be a <a href="#valid-non-empty-url">valid non-empty URL</a>. This attribute must be
+  present.<p>The <dfn id="attr-source-type" title="attr-source-type"><code>type</code></dfn>
   attribute gives the type of the <a href="#media-resource">media resource</a>, to help
   the user agent determine if it can play this <a href="#media-resource">media
   resource</a> before fetching it. If specified, its value must be
@@ -19207,7 +19227,8 @@
   </dl><h5 id="location-of-the-media-resource"><span class="secno">4.8.9.2 </span>Location of the media resource</h5><p class="XXX annotation"><b>Status: </b><i>Last call for comments</i><p>The <dfn id="attr-media-src" title="attr-media-src"><code>src</code></dfn> content
   attribute on <a href="#media-element" title="media element">media elements</a> gives
   the address of the media resource (video, audio) to show. The
-  attribute, if present, must contain a <a href="#valid-url">valid URL</a>.<div class="impl">
+  attribute, if present, must contain a <a href="#valid-non-empty-url">valid non-empty
+  URL</a>.<div class="impl">
 
   <p>If a <code title="attr-media-src"><a href="#attr-media-src">src</a></code> attribute of a
   <a href="#media-element">media element</a> is set or changed, the user agent must
@@ -19504,7 +19525,11 @@
     <p>If <var title="">mode</var> is <i title="">attribute</i>, then
     run these substeps:</p>
 
-    <ol><li><p>&#8987; Let <var title="">absolute URL</var> be the
+    <ol><li><p>&#8987; <i>Process candidate</i>: If the <code title="attr-media-src"><a href="#attr-media-src">src</a></code> attribute's value is the empty
+     string, then end the <a href="#synchronous-section">synchronous section</a>, and jump
+     down to the <i title="">failed</i> step below.</li>
+
+     <li><p>&#8987; Let <var title="">absolute URL</var> be the
      <a href="#absolute-url">absolute URL</a> that would have resulted from <a href="#resolve-a-url" title="resolve a url">resolving</a> the <a href="#url">URL</a>
      specified by the <code title="attr-media-src"><a href="#attr-media-src">src</a></code>
      attribute's value relative to the <a href="#media-element">media element</a> when
@@ -19524,9 +19549,9 @@
      algorithm returns without aborting <em>this</em> one, then the
      load failed.</li>
 
-     <li><p>Reaching this step indicates that the media resource
-     failed to load or that the given <a href="#url">URL</a> could not be
-     <a href="#resolve-a-url" title="resolve a url">resolved</a>. Set the <code title="dom-media-error"><a href="#dom-media-error">error</a></code> attribute to a new
+     <li><p><i>Failed</i>: Reaching this step indicates that the media
+     resource failed to load or that the given <a href="#url">URL</a> could
+     not be <a href="#resolve-a-url" title="resolve a url">resolved</a>. Set the <code title="dom-media-error"><a href="#dom-media-error">error</a></code> attribute to a new
      <code><a href="#mediaerror">MediaError</a></code> object whose <code title="dom-MediaError-code"><a href="#dom-mediaerror-code">code</a></code> attribute is set to <code title="dom-MediaError-MEDIA_ERR_SRC_NOT_SUPPORTED"><a href="#dom-mediaerror-media_err_src_not_supported">MEDIA_ERR_SRC_NOT_SUPPORTED</a></code>.</li>
 
      <li><p>Set the element's <code title="dom-media-networkState"><a href="#dom-media-networkstate">networkState</a></code> attribute to
@@ -19591,8 +19616,9 @@
 
      </li>
 
-     <li><p>&#8987; <i>Process candidate</i>: If <var title="">candidate</var> does not have a <code title="attr-source-src"><a href="#attr-source-src">src</a></code> attribute, then end the
-     <a href="#synchronous-section">synchronous section</a>, and jump down to the <i title="">failed</i> step below.</li>
+     <li><p>&#8987; <i>Process candidate</i>: If <var title="">candidate</var> does not have a <code title="attr-source-src"><a href="#attr-source-src">src</a></code> attribute, or if its <code title="attr-source-src"><a href="#attr-source-src">src</a></code> attribute's value is the empty
+     string, then end the <a href="#synchronous-section">synchronous section</a>, and jump
+     down to the <i title="">failed</i> step below.</li>
 
      <li><p>&#8987; Let <var title="">absolute URL</var> be the
      <a href="#absolute-url">absolute URL</a> that would have resulted from <a href="#resolve-a-url" title="resolve a url">resolving</a> the <a href="#url">URL</a>
@@ -28911,15 +28937,15 @@
   form. The element is a <a href="#concept-button" title="concept-button">button</a>,
   specifically a <a href="#concept-submit-button" title="concept-submit-button">submit
   button</a>.<hr><p>The image is given by the <dfn id="attr-input-src" title="attr-input-src"><code>src</code></dfn> attribute. The <code title="attr-input-src"><a href="#attr-input-src">src</a></code> attribute must be present, and
-  must contain a <a href="#valid-url">valid URL</a> referencing a non-interactive,
-  optionally animated, image resource that is neither paged nor
-  scripted.<div class="impl">
+  must contain a <a href="#valid-non-empty-url">valid non-empty URL</a> referencing a
+  non-interactive, optionally animated, image resource that is neither
+  paged nor scripted.<div class="impl">
 
   <p>When any of the following events occur, unless the user agent
   cannot support images, or its support for images has been disabled,
-  or the user agent only fetches elements on demand, the user agent
-  must <a href="#resolve-a-url" title="resolve a url">resolve</a> the value of the
-  <code title="attr-input-src"><a href="#attr-input-src">src</a></code> attribute, relative to the
+  or the user agent only fetches elements on demand, or the <code title="attr-input-src"><a href="#attr-input-src">src</a></code> attribute's value is the empty
+  string, the user agent must <a href="#resolve-a-url" title="resolve a
+  url">resolve</a> the value of the <code title="attr-input-src"><a href="#attr-input-src">src</a></code> attribute, relative to the
   element, and if that is successful, must <a href="#fetch">fetch</a> the
   resulting <a href="#absolute-url">absolute URL</a>:</p> <!-- Note how this does NOT
   happen when the base URL changes. --> <!-- http-origin privacy
@@ -36310,10 +36336,11 @@
   to the user to help him.<p>The <dfn id="attr-command-icon" title="attr-command-icon"><code>icon</code></dfn>
   attribute gives a picture that represents the command. If the
   attribute is specified, the attribute's value must contain a
-  <a href="#valid-url">valid URL</a>. <span class="impl">To obtain the
-  <a href="#absolute-url">absolute URL</a> of the icon, the attribute's value must be
-  <a href="#resolve-a-url" title="resolve a url">resolved</a> relative to the
-  element.</span></p><!-- this is affected by the base URL being
+  <a href="#valid-non-empty-url">valid non-empty URL</a>. <span class="impl">To obtain the
+  <a href="#absolute-url">absolute URL</a> of the icon when the attribute's value is
+  not the empty string, the attribute's value must be <a href="#resolve-a-url" title="resolve a url">resolved</a> relative to the element. When
+  the attribute is absent, or its value is the empty string, or <a href="#resolve-a-url" title="resolve a url">resolving</a> its value fails, there is no
+  icon.</span></p><!-- this is affected by the base URL being
   changed, so users of this should cache the image once they've
   fetched it once, at least until the relative url changes again --><p>The <dfn id="attr-command-disabled" title="attr-command-disabled"><code>disabled</code></dfn> attribute
   is a <a href="#boolean-attribute">boolean attribute</a> that, if present, indicates that
@@ -37316,22 +37343,17 @@
   </ol></div><h3 id="links"><span class="secno">4.12 </span>Links</h3><p class="XXX annotation"><b>Status: </b><i>Last call for comments</i><h4 id="hyperlink-elements"><span class="secno">4.12.1 </span>Hyperlink elements</h4><p class="XXX annotation"><b>Status: </b><i>Last call for comments</i><p>The <code><a href="#the-a-element">a</a></code>, <code><a href="#the-area-element">area</a></code>, and <code><a href="#the-link-element">link</a></code>
   elements can, in certain situations described in the definitions of
   those elements, represent <dfn id="hyperlink" title="hyperlink">hyperlinks</dfn>.<p>The <dfn id="attr-hyperlink-href" title="attr-hyperlink-href"><code>href</code></dfn>
-  attribute on a hyperlink element must have a value that is a
-  <a href="#valid-url">valid URL</a>. This URL is the <em>destination
-  resource</em> of the hyperlink.<div class="note">
-
-   <p>The <code title="attr-hyperlink-href"><a href="#attr-hyperlink-href">href</a></code> attribute on
-   <code><a href="#the-a-element">a</a></code> and <code><a href="#the-area-element">area</a></code> elements is not required; when
-   those elements do not have <code title="attr-hyperlink-href"><a href="#attr-hyperlink-href">href</a></code> attributes they do not
-   represent hyperlinks.</p>
-
-   <p>The <code title="attr-link-href"><a href="#attr-link-href">href</a></code> attribute on the
-   <code><a href="#the-link-element">link</a></code> element <em>is</em> required, but whether a
-   <code><a href="#the-link-element">link</a></code> element represents a hyperlink or not depends on
-   the value of the <code title="attr-link-rel"><a href="#attr-link-rel">rel</a></code> attribute
-   of that element.</p>
-
-  </div><p>The <dfn id="attr-hyperlink-target" title="attr-hyperlink-target"><code>target</code></dfn>
+  attribute on <code><a href="#the-a-element">a</a></code> and <code><a href="#the-area-element">area</a></code> elements must have
+  a value that is a <a href="#valid-url">valid URL</a>. This <a href="#url">URL</a> is
+  the <i>destination resource</i> of the hyperlink.<p class="note">The <code title="attr-hyperlink-href"><a href="#attr-hyperlink-href">href</a></code>
+  attribute on <code><a href="#the-a-element">a</a></code> and <code><a href="#the-area-element">area</a></code> elements is not
+  required; when those elements do not have <code title="attr-hyperlink-href"><a href="#attr-hyperlink-href">href</a></code> attributes they do not
+  represent hyperlinks.<p class="note">The <code title="attr-link-href"><a href="#attr-link-href">href</a></code>
+  attribute on the <code><a href="#the-link-element">link</a></code> element <em>is</em> required (and
+  has to be a <a href="#valid-non-empty-url">valid <em>non-empty</em> URL</a>), but whether
+  a <code><a href="#the-link-element">link</a></code> element represents a hyperlink or not depends on
+  the value of the <code title="attr-link-rel"><a href="#attr-link-rel">rel</a></code> attribute of
+  that element.<p>The <dfn id="attr-hyperlink-target" title="attr-hyperlink-target"><code>target</code></dfn>
   attribute, if present, must be a <a href="#valid-browsing-context-name-or-keyword">valid browsing context name
   or keyword</a>. It gives the name of the <a href="#browsing-context">browsing
   context</a> that will be used. <span class="impl">User agents use
@@ -41890,17 +41912,20 @@
 
   <p>If the root element, as parsed according to the XML
   specifications cited above, is found to be an <code><a href="#the-html-element-0">html</a></code>
-  element with an attribute <code title="attr-html-manifest"><a href="#attr-html-manifest">manifest</a></code>, then, as soon as the
-  element is <a href="#insert-an-element-into-a-document" title="insert an element into a document">inserted
-  into the document</a>, the user agent must <a href="#resolve-a-url" title="resolve a
-  url">resolve</a> the value of that attribute relative to that
-  element, and if that is successful, must run the <a href="#concept-appcache-init" title="concept-appcache-init">application cache selection
-  algorithm</a> with the resulting <a href="#absolute-url">absolute URL</a> with
-  any <a href="#url-fragment" title="url-fragment">&lt;fragment&gt;</a> component
-  removed as the manifest URL, and passing in the newly-created
-  <code><a href="#document">Document</a></code>. Otherwise, if the attribute is absent or
-  resolving it fails, then as soon as the root element is <a href="#insert-an-element-into-a-document" title="insert an element into a document">inserted into the
-  document</a>, the user agent must run the <a href="#concept-appcache-init" title="concept-appcache-init">application cache selection
+  element with an attribute <code title="attr-html-manifest"><a href="#attr-html-manifest">manifest</a></code> whose value is not the
+  empty string, then, as soon as the element is <a href="#insert-an-element-into-a-document" title="insert an
+  element into a document">inserted into the document</a>, the user
+  agent must <a href="#resolve-a-url" title="resolve a url">resolve</a> the value of
+  that attribute relative to that element, and if that is successful,
+  must run the <a href="#concept-appcache-init" title="concept-appcache-init">application cache
+  selection algorithm</a> with the resulting <a href="#absolute-url">absolute
+  URL</a> with any <a href="#url-fragment" title="url-fragment">&lt;fragment&gt;</a> component removed as
+  the manifest URL, and passing in the newly-created
+  <code><a href="#document">Document</a></code>. Otherwise, if the attribute is absent, its
+  value is the empty string, or resolving its value fails, then as
+  soon as the root element is <a href="#insert-an-element-into-a-document" title="insert an element into a
+  document">inserted into the document</a>, the user agent must run
+  the <a href="#concept-appcache-init" title="concept-appcache-init">application cache selection
   algorithm</a> with no manifest, and passing in the
   <code><a href="#document">Document</a></code>.</p>
 
@@ -54840,16 +54865,17 @@
     <p id="parser-appcache">If the <code><a href="#document">Document</a></code> is being
     loaded as part of <a href="#navigate" title="navigate">navigation</a> of a
     <a href="#browsing-context">browsing context</a>, then: if the newly created element
-    has a <code title="attr-html-manifest"><a href="#attr-html-manifest">manifest</a></code> attribute,
-    then <a href="#resolve-a-url" title="resolve a url">resolve</a> the value of that
-    attribute to an <a href="#absolute-url">absolute URL</a>, relative to the newly
-    created element, and if that is successful, run the <a href="#concept-appcache-init" title="concept-appcache-init">application cache selection
+    has a <code title="attr-html-manifest"><a href="#attr-html-manifest">manifest</a></code> attribute
+    whose value is not the empty string, then <a href="#resolve-a-url" title="resolve a
+    url">resolve</a> the value of that attribute to an
+    <a href="#absolute-url">absolute URL</a>, relative to the newly created element,
+    and if that is successful, run the <a href="#concept-appcache-init" title="concept-appcache-init">application cache selection
     algorithm</a> with the resulting <a href="#absolute-url">absolute URL</a> with
     any <a href="#url-fragment" title="url-fragment">&lt;fragment&gt;</a> component
-    removed; otherwise, if there is no such attribute or resolving it
-    fails, run the <a href="#concept-appcache-init" title="concept-appcache-init">application
-    cache selection algorithm</a> with no manifest. The algorithm
-    must be passed the <code><a href="#document">Document</a></code> object.</p>
+    removed; otherwise, if there is no such attribute, or its value is
+    the empty string, or resolving its value fails, run the <a href="#concept-appcache-init" title="concept-appcache-init">application cache selection
+    algorithm</a> with no manifest. The algorithm must be passed
+    the <code><a href="#document">Document</a></code> object.</p>
 
     <p>Switch the <a href="#insertion-mode">insertion mode</a> to "<a href="#the-before-head-insertion-mode" title="insertion mode: before head">before head</a>".</p>
 
@@ -66674,7 +66700,7 @@
     <tr><th> <code title="">data</code>
      <td> <code title="attr-object-data"><a href="#attr-object-data">object</a></code>
      <td> Address of the resource
-     <td> <a href="#valid-url">Valid URL</a>
+     <td> <a href="#valid-non-empty-url">Valid non-empty URL</a>
     <tr><th> <code title="">datetime</code>
      <td> <code title="attr-mod-datetime"><a href="#attr-mod-datetime">del</a></code>;
           <code title="attr-mod-datetime"><a href="#attr-mod-datetime">ins</a></code>
@@ -66784,11 +66810,14 @@
      <td> <a href="#valid-floating-point-number">Valid floating point number</a>*
     <tr><th> <code title="">href</code>
      <td> <code title="attr-hyperlink-href"><a href="#attr-hyperlink-href">a</a></code>;
-          <code title="attr-hyperlink-href"><a href="#attr-hyperlink-href">area</a></code>;
-          <code title="attr-link-href"><a href="#attr-link-href">link</a></code>
+          <code title="attr-hyperlink-href"><a href="#attr-hyperlink-href">area</a></code>
      <td> Address of the <a href="#hyperlink">hyperlink</a>
      <td> <a href="#valid-url">Valid URL</a>
     <tr><th> <code title="">href</code>
+     <td> <code title="attr-link-href"><a href="#attr-link-href">link</a></code>
+     <td> Address of the <a href="#hyperlink">hyperlink</a>
+     <td> <a href="#valid-non-empty-url">Valid non-empty URL</a>
+    <tr><th> <code title="">href</code>
      <td> <code title="attr-base-href"><a href="#attr-base-href">base</a></code>
      <td> <a href="#document-base-url">Document base URL</a>
      <td> <a href="#valid-url">Valid URL</a>
@@ -66805,7 +66834,7 @@
     <tr><th> <code title="">icon</code>
      <td> <code title="attr-command-icon"><a href="#attr-command-icon">command</a></code>
      <td> Icon for the command
-     <td> <a href="#valid-url">Valid URL</a>
+     <td> <a href="#valid-non-empty-url">Valid non-empty URL</a>
     <tr><th> <code title="">id</code>
      <td> <a href="#the-id-attribute" title="attr-id">HTML elements</a>
      <td> The element's <a href="#concept-id" title="concept-id">ID</a>
@@ -66845,7 +66874,7 @@
     <tr><th> <code title="">manifest</code>
      <td> <code title="attr-html-manifest"><a href="#attr-html-manifest">html</a></code>
      <td> <a href="#concept-appcache-manifest" title="concept-appcache-manifest">Application cache manifest</a>
-     <td> <a href="#valid-url">Valid URL</a>
+     <td> <a href="#valid-non-empty-url">Valid non-empty URL</a>
     <tr><th> <code title="">max</code>
      <td> <code title="attr-input-max"><a href="#attr-input-max">input</a></code>
      <td> Maximum value
@@ -66940,7 +66969,7 @@
     <tr><th> <code title="">poster</code>
      <td> <code title="attr-video-poster"><a href="#attr-video-poster">video</a></code>
      <td> Poster frame to show prior to video playback
-     <td> <a href="#valid-url">Valid URL</a>
+     <td> <a href="#valid-non-empty-url">Valid non-empty URL</a>
     <tr><th> <code title="">preload</code>
      <td> <code title="attr-media-preload"><a href="#attr-media-preload">audio</a></code>;
           <code title="attr-media-preload"><a href="#attr-media-preload">video</a></code>
@@ -67046,7 +67075,7 @@
           <code title="attr-source-src"><a href="#attr-source-src">source</a></code>;
           <code title="attr-media-src"><a href="#attr-media-src">video</a></code>
      <td> Address of the resource
-     <td> <a href="#valid-url">Valid URL</a>
+     <td> <a href="#valid-non-empty-url">Valid non-empty URL</a>
     <tr><th> <code title="">srcdoc</code>
      <td> <code title="attr-iframe-srcdoc"><a href="#attr-iframe-srcdoc">iframe</a></code>
      <td> A document to render in the <code><a href="#the-iframe-element">iframe</a></code>
@@ -68951,6 +68980,7 @@
   Neil Soiffer,
   Nicholas Shanks,
   Nicholas Stimpson,
+  Nicholas Zakas,
   Nicolas Gallagher,
   Noah Mendelsohn,
   Noah Slater,

Received on Tuesday, 9 March 2010 00:36:13 UTC