HTML Standard Tracker

Filter

File a bug

SVNBugCommentTime (UTC)
4834[Authors] [Conformance Checkers] [Gecko] [Internet Explorer] [Opera] [Webkit] Disallow empty URLs for external resources. Make UAs ignore such references.2010-03-09 00:35
@@ -864,20 +864,28 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   matches the <code title="">media-type</code> rule defined in section
   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>
 
   <p>The term <dfn>HTML MIME type</dfn> is used to refer to the <span
   title="MIME type">MIME types</span> <code>text/html</code> and
   <code>text/html-sandboxed</code>.</p>
 
+  <p>A resource's <dfn>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 <span>critical
+  subresources</span>; other resources, e.g. fonts or backgrounds, are
+  not.</p>
+
 
   <h4>XML</h4>
 
   <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>HTML
   elements</dfn>", when used in this specification, refers to any
   element in that namespace, and thus refers to both HTML and XHTML
   elements.</p>
@@ -4304,20 +4312,23 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   <h3>URLs</h3>
 
   <h4>Terminology</h4>
 
   <p>A <dfn>URL</dfn> is a string used to identify a resource.</p>
 
   <p>A <span>URL</span> is a <dfn>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>
 
+  <p>A <span>URL</span> is a <dfn>valid non-empty URL</dfn> if it is a
+  <span>valid URL</span> but it is not the empty string.</p>
+
   <p>A <span>URL</span> is an <dfn>absolute URL</dfn> if it is an
   <span>absolute Web address</span> as defined by the Web addresses
   specification. <a href="#refsWEBADDRESSES">[WEBADDRESSES]</a></p>
 
   <div class="impl">
 
   <p>To <dfn>parse a URL</dfn> <var title="">url</var> into its
   component parts, the user agent must use the <span>parse a Web
   address</span> algorithm defined by the Web addresses
   specification. <a href="#refsWEBADDRESSES">[WEBADDRESSES]</a></p>
@@ -11037,21 +11048,21 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
   </dl>
 
   <p>The <code>html</code> element <span>represents</span> the root of
   an HTML document.</p>
 
   <p>The <dfn title="attr-html-manifest"><code>manifest</code></dfn>
   attribute gives the address of the document's <span>application
   cache</span> <span
   title="concept-appcache-manifest">manifest</span>, if there is
   one. If the attribute is present, the attribute's value must be a
-  <span>valid URL</span>.</p>
+  <span>valid non-empty URL</span>.</p>
 
   <p>The <code title="attr-html-manifest">manifest</code> attribute
   only <span title="concept-appcache-init">has an effect</span> during
   the early stages of document load. Changing the attribute
   dynamically thus has no effect (and thus, no DOM API is provided for
   this attribute).</p>
 
   <p class="note">For the purposes of <span
   title="concept-appcache-init">application cache selection</span>,
   later <code>base</code> elements cannot affect the <span
@@ -11380,24 +11391,24 @@ gave me some of the songs they wrote. I love sharing my music.&lt;/p>
 };
 <span>HTMLLinkElement</span> implements <span>LinkStyle</span>;</pre>
    </dd>
   </dl>
 
   <p>The <code>link</code> element allows authors to link their
   document to other resources.</p>
 
   <p>The destination of the link(s) is given by the <dfn
   title="attr-link-href"><code>href</code></dfn> attribute, which must
-  be present and must contain a <span>valid URL</span>. <span
-  class="impl">If the <code title="attr-link-href">href</code>
-  attribute is absent, then the element does not define a
-  link.</span></p>
+  be present and must contain a <span>valid non-empty
+  URL</span>. <span class="impl">If the <code
+  title="attr-link-href">href</code> attribute is absent, then the
+  element does not define a link.</span></p>
 
 <!--END w3c-html-->
   <p>A <code>link</code> element must have either a <code
   title="attr-link-rel">rel</code> attribute, or an <code
   title="attr-itemprop">itemprop</code> attribute, or both.</p>
 <!--START w3c-html--><!--END html--><!--END complete-->
   <p>A <code>link</code> element must have <code
   title="attr-link-rel">rel</code> attribute.</p>
 <!--START html--><!--START complete-->
 
@@ -11427,71 +11438,83 @@ gave me some of the songs they wrote. I love sharing my music.&lt;/p>
 
   <p class="note">Each link is handled separately. For instance, if
   there are two <code>link</code> elements with <code
   title="">rel="stylesheet"</code>, they each count as a separate
   external resource, and each is affected by its own attributes
   independently.</p>
 
   <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 title="concept-link-obtain">obtain
-  the resource</dfn>, the user agent must <span title="resolve a
-  url">resolve</span> the <span>URL</span> given by the <code
-  title="attr-link-href">href</code> attribute, relative to the
-  element, and then <span>fetch</span> the resulting <span>absolute
-  URL</span>. User agents may opt to only try to obtain such resources
-  when they are needed, instead of pro-actively <span
-  title="fetch">fetching</span> all the external resources that are
-  not applied.</span></p> <!-- http-origin privacy sensitive -->
+  applied (as defined below).</p>
 
   <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
+  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">href</code> attribute's
+   value is the empty string, then abort these steps.</p></li>
+
+   <li><p><span title="resolve a url">Resolve</span> the
+   <span>URL</span> given by the <code
+   title="attr-link-href">href</code> attribute, relative to the
+   element.</li>
+
+   <li><p>If the previous step fails, then abort these steps.</p></li>
+
+   <li><p><span>Fetch</span> the resulting <span>absolute
+   URL</span>.</p></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 <span
+  title="fetch">fetching</span> 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
   followed and 404 responses will cause the external resource to not
   be applied.)</p>
 
   <!-- the next few paragraph are similar to text in the <style> section -->
-  <p>Once the attempts to obtain the resource and its critical
-  subresources are complete, the user agent must, if the loads were
-  successful, <span>queue a task</span> to <span>fire a simple
+  <p>Once the attempts to obtain the resource and its <span>critical
+  subresources</span> are complete, the user agent must, if the loads
+  were successful, <span>queue a task</span> to <span>fire a simple
   event</span> named <code title="event-load">load</code> at the
   <code>link</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), <span>queue a task</span> to
-  <span>fire a simple event</span> named <code
+  <span>critical subresources</span> failed to completely load for any
+  reason (e.g. DNS error, HTTP 404 response, a connection being
+  prematurely closed, unsupported Content-Type), <span>queue a
+  task</span> to <span>fire a simple event</span> named <code
   title="event-error">error</code> at the <code>link</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 <span>task source</span> for these <span
-  title="concept-task">tasks</span> is the <span>DOM manipulation
-  task source</span>.</p>
+  title="concept-task">tasks</span> is the <span>DOM manipulation task
+  source</span>.</p>
 
   <p>The element must <span>delay the load event</span> 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 <span>delay the load
+  its <span>critical subresources</span> 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 <span>delay the load
   event</span>.)</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 <span title="following hyperlinks">follow the
   hyperlinks</span> created using the <code>link</code> element,
   somewhere within their user interface. The exact interface is not
   defined by this specification, but it could include the following
   information (obtained from the element's attributes, again as
   defined below), in some form or another (possibly simplified), for
   each hyperlink created with each <code>link</code> element in the
@@ -12875,47 +12898,44 @@ c-end         = "-->"</pre>
   XML-based styling languages, user agents must pass all the child
   nodes of the <code>style</code> element to the style system.</p>
 
   <p>All <span title="URL">URLs</span> found by the styling language's
   processor must be <span title="resolve a url">resolved</span>,
   relative to the element (or as defined by the styling language),
   when the processor is invoked.<!-- so dynamic changes to the base
   URL don't affect the CSS --></p>
 
   <!-- the next few paragraph are similar to text in the <style> 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, <span>queue a task</span> to <span>fire a simple
-  event</span> named <code title="event-load">load</code> at the
-  <code>style</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), <span>queue a task</span> to <span>fire a
-  simple event</span> named <code title="event-error">error</code> at
-  the <code>style</code> element. Non-network errors in processing the
+  <p>Once the attempts to obtain the style sheet's <span>critical
+  subresources</span>, if any, are complete, or, if the style sheet
+  has no <span>critical subresources</span>, once the style sheet has
+  been parsed and processed, the user agent must, if the loads were
+  successful or there were none, <span>queue a task</span> to
+  <span>fire a simple event</span> named <code
+  title="event-load">load</code> at the <code>style</code> element,
+  or, if one of the style sheet's <span>critical subresources</span>
+  failed to completely load for any reason (e.g. DNS error, HTTP 404
+  response, a connection being prematurely closed, unsupported
+  Content-Type), <span>queue a task</span> to <span>fire a simple
+  event</span> named <code title="event-error">error</code> at the
+  <code>style</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>
 
   <p>The <span>task source</span> for these <span
   title="concept-task">tasks</span> is the <span>DOM manipulation task
   source</span>.</p>
 
   <p>The element must <span>delay the load event</span> 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 <span>critical subresources</span>, 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></p>
 
   <div class="impl">
 
   <p>The <dfn title="dom-style-media"><code>media</code></dfn>, <dfn
@@ -13192,22 +13212,22 @@ c-end         = "-->"</pre>
   <p>The <dfn title="attr-script-type"><code>type</code></dfn>
   attribute gives the language of the script or format of the data. If
   the attribute is present, its value must be a <span>valid MIME
   type</span>. The <code title="">charset</code> parameter must not be
   specified. The default, which is used if the attribute is absent,
   is "<code title="">text/javascript</code>".</p>
 
   <p>The <dfn 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 <span>valid
-  URL</span> identifying a script resource of the type given by the
-  <code title="attr-script-type">type</code> attribute, if the
+  non-empty URL</span> identifying a script resource of the type given
+  by the <code title="attr-script-type">type</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
   requirements of that language's specification.</p>
 
   <p>The <dfn title="attr-script-charset"><code>charset</code></dfn>
   attribute gives the character encoding of the external script
   resource. The attribute must not be specified if the <code
   title="attr-script-src">src</code> attribute is not present. If the
@@ -13414,26 +13434,32 @@ c-end         = "-->"</pre>
    <li>
 
     <p>The user agent must set the element's <span>"already
     started"</span> flag.</p>
 
    </li>
 
    <li>
 
     <p>If the element has a <code title="attr-script-src">src</code>
-    attribute, then the value of that attribute must be <span
-    title="resolve a url">resolved</span> relative to the element, and
-    if that is successful, the specified resource must then be <span
-    title="fetch">fetched</span>, from the <span>origin</span> of the
-    element's <code>Document</code>.</p> <!-- not http-origin privacy
-    sensitive -->
+    attribute whose value is not the empty string, then the value of
+    that attribute must be <span title="resolve a url">resolved</span>
+    relative to the element, and if that is successful, the specified
+    resource must then be <span title="fetch">fetched</span>, from the
+    <span>origin</span> of the element's <code>Document</code>.</p>
+    <!-- not http-origin privacy sensitive -->
+
+    <p>If the <code title="attr-script-src">src</code> attribute's
+    value is the empty string or if it could not be resolved, then the
+    user agent must <span>queue a task</span> to <span>fire a simple
+    event</span> named <code title="event-error">error</code> at the
+    element, and abort these steps.</p>
 
     <p>For historical reasons, if the <span>URL</span> is a <span
     title="javascript protocol"><code title="">javascript:</code>
     URL</span>, then the user agent must not, despite the requirements
     in the definition of the <span title="fetch">fetching</span>
     algorithm, actually execute the script in the URL; instead the
     user agent must act as if it had received an empty HTTP 400
     response.</p>
 
     <p>Once the resource's <span title="Content-Type">Content Type
@@ -13689,21 +13715,26 @@ c-end         = "-->"</pre>
       <var>the script block's source</var> and <var>the script
       block's type</var>.</p>
 
       <p class="note">This is where the script is compiled and
       actually executed.</p>
 
      </li>
 
      <li>
 
-      <p><span>Fire a simple event</span> named <code
+      <p>If the script is from an external file, <span>fire a simple
+      event</span> named <code title="event-load">load</code> at the
+      <code>script</code> element.</p>
+
+      <p>Otherwise, the script is internal; <span>queue a task</span>
+      to <span>fire a simple event</span> named <code
       title="event-load">load</code> at the <code>script</code>
       element.</p>
 
      </li>
 
     </ol>
 
    </dd>
 
   </dl>
@@ -19587,26 +19618,23 @@ interface <dfn>HTMLImageElement</dfn> : <span>HTMLElement</span> {
 
   -->
 
   <p>The image given by the <dfn
   title="attr-img-src"><code>src</code></dfn> attribute is the
   embedded content, and the value of the <dfn
   title="attr-img-alt"><code>alt</code></dfn> attribute is the
   <code>img</code> element's <span>fallback content</span>.</p>
 
   <p>The <code title="attr-img-src">src</code> attribute must be
-  present, and must contain a <span>valid URL</span> 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 <span>the document's address</span>, then the <code
-  title="attr-img-src">src</code> attribute's value must not be the
-  empty string.</p>
+  present, and must contain a <span>valid non-empty URL</span>
+  referencing a non-interactive, optionally animated, image resource
+  that is neither paged nor scripted.</p>
 
   <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
   use declarative SMIL animation), and so forth. However, this also
   precludes SVG files with script, multipage PDF files, interactive
   MNG files, HTML documents, plain text documents, and so forth.</p>
 
   <p>The requirements on the <code title="attr-img-alt">alt</code>
@@ -19618,35 +19646,30 @@ interface <dfn>HTMLImageElement</dfn> : <span>HTMLElement</span> {
   transparent images, as they rarely convey meaning and rarely add
   anything useful to the document.</p>
 
   <div class="impl">
 
   <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">src</code>
-  attribute has a value that is an <i>ignored self-reference</i>,
-  then, when an <code>img</code> is created with a <code
+  attribute's value is the empty string, then, when an
+  <code>img</code> is created with a <code
   title="attr-img-src">src</code> attribute, and whenever the <code
   title="attr-img-src">src</code> attribute is set subsequently, the
   user agent must <span title="resolve a url">resolve</span> the value
   of that attribute, relative to the element, and if that is
   successful must then <span>fetch</span> 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">src</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 <span>the
-  document's address</span>.</p>
-
   <!-- same text in <input type=image> section and similar text elsewhere -->
   <p>Fetching the image must <span>delay the load event</span> of the
   element's document until the <span title="concept-task">task</span>
   that is <span title="queue a task">queued</span> by the
   <span>networking task source</span> once the resource has been <span
   title="fetch">fetched</span> (defined below) has been run.</p>
 
   <p class="warning">This, unfortunately, can be used to perform a
   rudimentary port scan of the user's local network (especially in
   conjunction with scripting, though scripting isn't actually
@@ -21107,21 +21130,21 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
 };</pre>
    </dd>
   </dl>
 
   <p>The <code>iframe</code> element <span>represents</span> a
   <span>nested browsing context</span>.</p>
 
   <p>The <dfn title="attr-iframe-src"><code>src</code></dfn> attribute
   gives the address of a page that the <span>nested browsing
   context</span> is to contain. The attribute, if present, must be a
-  <span>valid URL</span>.</p>
+  <span>valid non-empty URL</span>.</p>
 
   <p>The <dfn title="attr-iframe-srcdoc"><code>srcdoc</code></dfn>
   attribute gives the content of the page that the <span>nested
   browsing context</span> is to contain.  The value of the attribute
   in is <dfn>an <code>iframe</code> <code
   title="attr-iframe-srcdoc">srcdoc</code> document</dfn>.</p>
 
   <p>For <code>iframe</code> elements in <span>HTML documents</span>,
   the attribute, if present, must have a value using <span>the HTML
   syntax</span> that consists of the following syntactic components,
@@ -21195,25 +21218,23 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
    the attribute.</p></dd>
 
    <dt>If the <code title="attr-iframe-src">src</code>
    attribute is specified but the <code
    title="attr-iframe-srcdoc">srcdoc</code> attribute is not</dt>
 
    <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><span title="resolve a url">Resolve</span> the value of
      the <code title="attr-iframe-src">src</code> attribute, relative
      to the <code>iframe</code> element.</p></li>
 
      <li><p>If that is not successful, then jump to the <i
      title="">empty</i> step below.</p></li>
 
      <li><p>If the resulting <span>absolute URL</span> is an
      <span>ASCII case-insensitive</span> match for the string
@@ -21962,21 +21983,21 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
     </div>
    </dd>
   </dl>
 
   <p>The <code>embed</code> element <span>represents</span> an
   integration point for an external (typically non-HTML) application
   or interactive content.</p>
 
   <p>The <dfn title="attr-embed-src"><code>src</code></dfn> attribute
   gives the address of the resource being embedded. The attribute, if
-  present, must contain a <span>valid URL</span>.</p>
+  present, must contain a <span>valid non-empty URL</span>.</p>
 
   <p>The <dfn title="attr-embed-type"><code>type</code></dfn>
   attribute, if present, gives the <span>MIME type</span> by which the
   plugin to instantiate is selected. The value must be a <span>valid
   MIME type</span>. If both the <code
   title="attr-embed-type">type</code> attribute and the <code
   title="attr-embed-src">src</code> attribute are present, then the
   <code title="attr-embed-type">type</code> attribute must specify the
   same type as the <span title="Content-Type">explicit Content-Type
   metadata</span> of the resource given by the <code
@@ -22027,20 +22048,21 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   provided.</p>
 
   <p>An <code>embed</code> element is said to be <dfn
   title="concept-embed-active">potentially active</dfn> when the
   following conditions are all met simultaneously:</p>
 
   <ul class="brief">
    <li>The element is <span title="in a document">in a <code>Document</code></span>.</li>
    <li>The element's <code>Document</code> is <span>fully active</span>.</li>
    <li>The element has either a <code title="attr-embed-src">src</code> attribute set or a <code title="attr-embed-type">type</code> attribute set (or both).</li>
+   <li>The element's <code title="attr-embed-src">src</code> attribute is either absent or its value is the empty string.</li>
    <li>The element is not in a <code>Document</code> whose <span>browsing context</span> had the <span>sandboxed plugins browsing context flag</span> set when the <code>Document</code> was created (unless this has been overrriden as described above).</li>
    <li>The element's <code>Document</code> was not parsed from a resource whose <span title="Content-Type sniffing">sniffed type</span> as determined during <span title="navigate">navigation</span> is <code>text/html-sandboxed</code> (unless this has been overrriden as described above).</li>
    <li>The element is not a descendant of a <span>media element</span>.</li>
    <li>The element is not a descendant of an <code>object</code> element that is not showing its <span>fallback content</span>.</li>
   </ul>
 
   <p>Whenever an <code>embed</code> element that was not <span
   title="concept-embed-active">potentially active</span> becomes <span
   title="concept-embed-active">potentially active</span>, and whenever
   a <span title="concept-embed-active">potentially active</span>
@@ -22292,21 +22314,22 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   </dl>
 
   <p>The <code>object</code> element can represent an external
   resource, which, depending on the type of the resource, will either
   be treated as an image, as a <span>nested browsing context</span>,
   or as an external resource to be processed by a
   <span>plugin</span>.</p>
 
   <p>The <dfn title="attr-object-data"><code>data</code></dfn>
   attribute, if present, specifies the address of the resource. If
-  present, the attribute must be a <span>valid URL</span>.</p>
+  present, the attribute must be a <span>valid non-empty
+  URL</span>.</p>
 
   <p>The <dfn title="attr-object-type"><code>type</code></dfn>
   attribute, if present, specifies the type of the resource. If
   present, the attribute must be a <span>valid MIME type</span>.</p>
 
   <p>At least one of either the <code
   title="attr-object-data">data</code> attribute or the <code
   title="attr-object-type">type</code> attribute must be present.</p>
 
   <p>The <dfn title="attr-object-name"><code>name</code></dfn>
@@ -22718,27 +22741,28 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
       source</span>.</p>
 
      </li>
 
     </ol>
 
    </li>
 
    <li><p>If the <code title="attr-object-data">data</code> attribute
    is absent but the <code title="attr-object-type">type</code>
-   attribute is present, <a href="#sandboxPluginObject">plugins
-   aren't being sandboxed</a>, and the user agent can find a <span>plugin</span>
-   suitable according to the value of the <code
-   title="attr-object-type">type</code> attribute, then that <span>plugin</span>
-   <a href="#object-plugin">should be used</a>. If no suitable <span>plugin</span>
-   can be found, or if the <span>plugin</span> reports an error, jump to the next
-   step (fallback).</p></li>
+   attribute is present, <a href="#sandboxPluginObject">plugins aren't
+   being sandboxed</a>, and the user agent can find a
+   <span>plugin</span> suitable according to the value of the <code
+   title="attr-object-type">type</code> attribute, then that
+   <span>plugin</span> <a href="#object-plugin">should be used</a>. If
+   no suitable <span>plugin</span> can be found, or if the
+   <span>plugin</span> reports an error, jump to the next step
+   (fallback).</p></li>
 
    <li><p>(Fallback.) The <code>object</code> element
    <span>represents</span> the element's children, ignoring any
    leading <code>param</code> element children. This is the element's
    <span>fallback content</span>. If the element has an instantiated
    <span>plugin</span>, then unload it.</p></li>
 
   </ol>
 
   <p id="object-plugin">When the algorithm above instantiates a
@@ -23054,27 +23078,28 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   title="attr-media-preload">preload</code>, <code
   title="attr-media-autoplay">autoplay</code>, <code
   title="attr-media-loop">loop</code>, and <code
   title="attr-media-controls">controls</code> attributes are <span
   title="media element attributes">the attributes common to all media
   elements</span>.</p>
 
   <p>The <dfn 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 <span>valid URL</span>. <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">poster</code> attribute
-  is set, its value must be <span title="resolve a
-  url">resolved</span> relative to the element, and if that is
-  successful, the resulting <span>absolute URL</span> must be <span
-  title="fetch">fetched</span>, from the element's
+  must contain a <span>valid non-empty URL</span>. <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">poster</code> attribute is set, if its
+  value is not the empty string, its value must be <span
+  title="resolve a url">resolved</span> relative to the element, and
+  if that is successful, the resulting <span>absolute URL</span> must
+  be <span title="fetch">fetched</span>, from the element's
   <code>Document</code>'s <span>origin</span>; this must <span>delay
   the load event</span> of the element's document. The <dfn>poster
   frame</dfn> is then the image obtained from that resource, if
   any.</span></p> <!-- thus it is unaffected by changes to the base
   URL. -->
 
   <p class="note">The image given by the <code
   title="attr-video-poster">poster</code> attribute, the <i>poster
   frame</i>, is intended to be a representative frame of the video
   (typically one of the first non-blank frames) that gives the user an
@@ -23501,21 +23526,22 @@ interface <dfn>HTMLAudioElement</dfn> : <span>HTMLMediaElement</span> {};</pre>
   </dl>
 
   <p>The <code>source</code> element allows authors to specify
   multiple alternative <span title="media resource">media
   resources</span> for <span title="media element">media
   elements</span>. It does not <span
   title="represents">represent</span> anything on its own.</p>
 
   <p>The <dfn title="attr-source-src"><code>src</code></dfn> attribute
   gives the address of the <span>media resource</span>. The value must
-  be a <span>valid URL</span>. This attribute must be present.</p>
+  be a <span>valid non-empty URL</span>. This attribute must be
+  present.</p>
 
   <p>The <dfn title="attr-source-type"><code>type</code></dfn>
   attribute gives the type of the <span>media resource</span>, to help
   the user agent determine if it can play this <span>media
   resource</span> before fetching it. If specified, its value must be
   a <span>valid MIME type</span>. The <code title="">codecs</code>
   parameter may be specified and might be necessary to specify exactly
   how the resource is encoded. <a
   href="#refsRFC4281">[RFC4281]</a></p>
 
@@ -23891,21 +23917,22 @@ interface <dfn>CueRangeCallback</dfn> {
 
   </dl>
 
 
 
   <h5>Location of the media resource</h5>
 
   <p>The <dfn title="attr-media-src"><code>src</code></dfn> content
   attribute on <span title="media element">media elements</span> gives
   the address of the media resource (video, audio) to show. The
-  attribute, if present, must contain a <span>valid URL</span>.</p>
+  attribute, if present, must contain a <span>valid non-empty
+  URL</span>.</p>
 
   <div class="impl">
 
   <p>If a <code title="attr-media-src">src</code> attribute of a
   <span>media element</span> is set or changed, the user agent must
   invoke the <span>media element</span>'s <span>media element load
   algorithm</span>. (<em>Removing</em> the <code
   title="attr-media-src">src</code> attribute does not do this, even
   if there are <code>source</code> elements present.)</p>
 
@@ -24299,20 +24326,25 @@ interface <dfn>CueRangeCallback</dfn> {
    title="event-media-loadstart">loadstart</code> at the <span>media
    element</span>.</p></li>
 
    <li>
 
     <p>If <var title="">mode</var> is <i title="">attribute</i>, then
     run these substeps:</p>
 
     <ol>
 
+     <li><p>&#x231B; <i>Process candidate</i>: If the <code
+     title="attr-media-src">src</code> attribute's value is the empty
+     string, then end the <span>synchronous section</span>, and jump
+     down to the <i title="">failed</i> step below.</p></li>
+
      <li><p>&#x231B; Let <var title="">absolute URL</var> be the
      <span>absolute URL</span> that would have resulted from <span
      title="resolve a url">resolving</span> the <span>URL</span>
      specified by the <code title="attr-media-src">src</code>
      attribute's value relative to the <span>media element</span> when
      the <code title="attr-media-src">src</code> attribute was last
      changed.</p> <!-- i.e. changing xml:base or <base> after src=""
      has no effect -->
 
      <li><p>&#x231B; If <var title="">absolute URL</var> was obtained
@@ -24323,23 +24355,23 @@ interface <dfn>CueRangeCallback</dfn> {
      <li><p>End the <span>synchronous section</span>, continuing the
      remaining steps asynchronously.</p></li>
 
      <li><p>If <var title="">absolute URL</var> was obtained
      successfully, run the <span
      title="concept-media-load-resource">resource fetch
      algorithm</span> with <var title="">absolute URL</var>. If that
      algorithm returns without aborting <em>this</em> one, then the
      load failed.</p></li>
 
-     <li><p>Reaching this step indicates that the media resource
-     failed to load or that the given <span>URL</span> could not be
-     <span title="resolve a url">resolved</span>. Set the <code
+     <li><p><i>Failed</i>: Reaching this step indicates that the media
+     resource failed to load or that the given <span>URL</span> could
+     not be <span title="resolve a url">resolved</span>. Set the <code
      title="dom-media-error">error</code> attribute to a new
      <code>MediaError</code> object whose <code
      title="dom-MediaError-code">code</code> attribute is set to <code
      title="dom-MediaError-MEDIA_ERR_SRC_NOT_SUPPORTED">MEDIA_ERR_SRC_NOT_SUPPORTED</code>.</p></li>
 
      <li><p>Set the element's <code
      title="dom-media-networkState">networkState</code> attribute to
      the <span
      title="dom-media-NETWORK_NO_SOURCE">NETWORK_NO_SOURCE</span>
      value.</p></li>
@@ -24410,23 +24442,24 @@ interface <dfn>CueRangeCallback</dfn> {
        relative to the remaining nodes.</dd>
 
       </dl>
 
       <p>Other changes don't affect <var title="">pointer</var>.</p>
 
      </li>
 
      <li><p>&#x231B; <i>Process candidate</i>: If <var
      title="">candidate</var> does not have a <code
-     title="attr-source-src">src</code> attribute, then end the
-     <span>synchronous section</span>, and jump down to the <i
-     title="">failed</i> step below.</p></li>
+     title="attr-source-src">src</code> attribute, or if its <code
+     title="attr-source-src">src</code> attribute's value is the empty
+     string, then end the <span>synchronous section</span>, and jump
+     down to the <i title="">failed</i> step below.</p></li>
 
      <li><p>&#x231B; Let <var title="">absolute URL</var> be the
      <span>absolute URL</span> that would have resulted from <span
      title="resolve a url">resolving</span> the <span>URL</span>
      specified by <var title="">candidate</var>'s <code
      title="attr-source-src">src</code> attribute's value relative to
      the <var title="">candidate</var> when the <code
      title="attr-source-src">src</code> attribute was last
      changed.</p> <!-- i.e. changing xml:base or <base> after src=""
      has no effect -->
@@ -39833,31 +39866,33 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   or alternatively a button from which the user can submit the
   form. The element is a <span title="concept-button">button</span>,
   specifically a <span title="concept-submit-button">submit
   button</span>.</p>
 
   <hr>
 
   <p>The image is given by the <dfn
   title="attr-input-src"><code>src</code></dfn> attribute. The <code
   title="attr-input-src">src</code> attribute must be present, and
-  must contain a <span>valid URL</span> referencing a non-interactive,
-  optionally animated, image resource that is neither paged nor
-  scripted.</p>
+  must contain a <span>valid non-empty URL</span> referencing a
+  non-interactive, optionally animated, image resource that is neither
+  paged nor scripted.</p>
 
   <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 <span title="resolve a url">resolve</span> the value of the
-  <code title="attr-input-src">src</code> attribute, relative to the
+  or the user agent only fetches elements on demand, or the <code
+  title="attr-input-src">src</code> attribute's value is the empty
+  string, the user agent must <span title="resolve a
+  url">resolve</span> the value of the <code
+  title="attr-input-src">src</code> attribute, relative to the
   element, and if that is successful, must <span>fetch</span> the
   resulting <span>absolute URL</span>:</p> <!-- Note how this does NOT
   happen when the base URL changes. --> <!-- http-origin privacy
   sensitive -->
 
   <ul>
 
    <li>The <code>input</code> element's <code
    title="attr-input-type">type</code> attribute is first set to the
    <span title="attr-input-type-image">Image Button</span> state
@@ -48966,24 +49001,27 @@ interface <dfn>DataGridListener</dfn> {
   <code title="attr-command-label">label</code> attribute must be
   specified and must have a value that is not the empty string.</p>
 
   <p>The <dfn title="attr-command-title"><code>title</code></dfn>
   attribute gives a hint describing the command, which might be shown
   to the user to help him.</p>
 
   <p>The <dfn 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
-  <span>valid URL</span>. <span class="impl">To obtain the
-  <span>absolute URL</span> of the icon, the attribute's value must be
-  <span title="resolve a url">resolved</span> relative to the
-  element.</span></p> <!-- this is affected by the base URL being
+  <span>valid non-empty URL</span>. <span class="impl">To obtain the
+  <span>absolute URL</span> of the icon when the attribute's value is
+  not the empty string, the attribute's value must be <span
+  title="resolve a url">resolved</span> relative to the element. When
+  the attribute is absent, or its value is the empty string, or <span
+  title="resolve a url">resolving</span> 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
   title="attr-command-disabled"><code>disabled</code></dfn> attribute
   is a <span>boolean attribute</span> that, if present, indicates that
   the command is not available in the current state.</p>
 
   <p class="note">The distinction between <code
   title="attr-command-disabled">disabled</code> and <code
@@ -50432,54 +50470,51 @@ interface <dfn>PeerToPeerClient</dfn> : <span>AbstractPeer</span> {
 
 
   <h4>Hyperlink elements</h4>
 
   <p>The <code>a</code>, <code>area</code>, and <code>link</code>
   elements can, in certain situations described in the definitions of
   those elements, represent <dfn
   title="hyperlink">hyperlinks</dfn>.</p>
 
   <p>The <dfn title="attr-hyperlink-href"><code>href</code></dfn>
-  attribute on a hyperlink element must have a value that is a
-  <span>valid URL</span>. This URL is the <em>destination
-  resource</em> of the hyperlink.</p>
-
-  <div class="note">
-
-   <p>The <code title="attr-hyperlink-href">href</code> attribute on
-   <code>a</code> and <code>area</code> elements is not required; when
-   those elements do not have <code
-   title="attr-hyperlink-href">href</code> attributes they do not
-   represent hyperlinks.</p>
-
-   <p>The <code title="attr-link-href">href</code> attribute on the
-   <code>link</code> element <em>is</em> required, but whether a
-   <code>link</code> element represents a hyperlink or not depends on
-   the value of the <code title="attr-link-rel">rel</code> attribute
-   of that element.</p>
-
-  </div>
+  attribute on <code>a</code> and <code>area</code> elements must have
+  a value that is a <span>valid URL</span>. This <span>URL</span> is
+  the <i>destination resource</i> of the hyperlink.</p>
+
+  <p class="note">The <code title="attr-hyperlink-href">href</code>
+  attribute on <code>a</code> and <code>area</code> elements is not
+  required; when those elements do not have <code
+  title="attr-hyperlink-href">href</code> attributes they do not
+  represent hyperlinks.</p>
+
+  <p class="note">The <code title="attr-link-href">href</code>
+  attribute on the <code>link</code> element <em>is</em> required (and
+  has to be a <span>valid <em>non-empty</em> URL</span>), but whether
+  a <code>link</code> element represents a hyperlink or not depends on
+  the value of the <code title="attr-link-rel">rel</code> attribute of
+  that element.</p>
 
   <p>The <dfn title="attr-hyperlink-target"><code>target</code></dfn>
   attribute, if present, must be a <span>valid browsing context name
   or keyword</span>. It gives the name of the <span>browsing
   context</span> that will be used. <span class="impl">User agents use
   this name when <span>following hyperlinks</span>.</span></p>
 
 <!--END w3c-html--><!--PING-->
   <p>The <dfn id="ping"
   title="attr-hyperlink-ping"><code>ping</code></dfn> attribute, if
   present, gives the URLs of the resources that are interested in
   being notified if the user follows the hyperlink. The value must be
-  a <span>set of space-separated tokens</span>, each of which must be a
-  <span title="valid URL">valid URL</span>. <span class="impl">The
-  value is used by the user agent for <span>hyperlink
+  a <span>set of space-separated tokens</span>, each of which must be
+  a <span>valid non-empty URL</span>. <span class="impl">The value is
+  used by the user agent for <span>hyperlink
   auditing</span>.</span></p>
 <!--START w3c-html--><!--PING-->
 
   <p>For <code>a</code> and <code>area</code> elements that represent
   hyperlinks, the relationship between the document containing the
   hyperlink and the destination resource indicated by the hyperlink is
   given by the value of the element's <dfn
   title="attr-hyperlink-rel"><code>rel</code></dfn> attribute, which
   must be a <span>set of space-separated tokens</span>. The <a
   href="#linkTypes">allowed values and their meanings</a> are defined
@@ -61967,34 +62002,35 @@ State: &lt;OUTPUT NAME=I>1&lt;/OUTPUT> &lt;INPUT VALUE="Increment" TYPE=BUTTON O
   mutated or implied by the algorithms given in this specification,
   are the ones that must be used when determining the character
   encoding according to the rules given in the above
   specifications. Once the character encoding is established, the
   <span>document's character encoding</span> must be set to that
   character encoding.</p>
 
   <p>If the root element, as parsed according to the XML
   specifications cited above, is found to be an <code>html</code>
   element with an attribute <code
-  title="attr-html-manifest">manifest</code>, then, as soon as the
-  element is <span title="insert an element into a document">inserted
-  into the document</span>, the user agent must <span title="resolve a
-  url">resolve</span> the value of that attribute relative to that
-  element, and if that is successful, must run the <span
-  title="concept-appcache-init">application cache selection
-  algorithm</span> with the resulting <span>absolute URL</span> with
-  any <span title="url-fragment">&lt;fragment&gt;</span> component
-  removed as the manifest URL, and passing in the newly-created
-  <code>Document</code>. Otherwise, if the attribute is absent or
-  resolving it fails, then as soon as the root element is <span
-  title="insert an element into a document">inserted into the
-  document</span>, the user agent must run the <span
-  title="concept-appcache-init">application cache selection
+  title="attr-html-manifest">manifest</code> whose value is not the
+  empty string, then, as soon as the element is <span title="insert an
+  element into a document">inserted into the document</span>, the user
+  agent must <span title="resolve a url">resolve</span> the value of
+  that attribute relative to that element, and if that is successful,
+  must run the <span title="concept-appcache-init">application cache
+  selection algorithm</span> with the resulting <span>absolute
+  URL</span> with any <span
+  title="url-fragment">&lt;fragment&gt;</span> component removed as
+  the manifest URL, and passing in the newly-created
+  <code>Document</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 <span title="insert an element into a
+  document">inserted into the document</span>, the user agent must run
+  the <span title="concept-appcache-init">application cache selection
   algorithm</span> with no manifest, and passing in the
   <code>Document</code>.</p>
 
   <p class="note">Because the processing of the <code
   title="attr-html-manifest">manifest</code> attribute happens
   only once the root element is parsed, any URLs referenced by
   processing instructions before the root element (such as <code
   title="">&lt;?xml-stylesheet?></code> and <code
   title="">&lt;?xbl?></code> PIs) will be fetched from the network and
   cannot be cached.</p><!-- v2: fix this somehow -->
@@ -87114,31 +87150,33 @@ document.body.appendChild(text);
    <dd>
 
     <p><span>Create an element for the token</span> in the <span>HTML
     namespace</span>. Append it to the <code>Document</code>
     object. Put this element in the <span>stack of open
     elements</span>.</p>
 
     <p id="parser-appcache">If the <code>Document</code> is being
     loaded as part of <span title="navigate">navigation</span> of a
     <span>browsing context</span>, then: if the newly created element
-    has a <code title="attr-html-manifest">manifest</code> attribute,
-    then <span title="resolve a url">resolve</span> the value of that
-    attribute to an <span>absolute URL</span>, relative to the newly
-    created element, and if that is successful, run the <span
+    has a <code title="attr-html-manifest">manifest</code> attribute
+    whose value is not the empty string, then <span title="resolve a
+    url">resolve</span> the value of that attribute to an
+    <span>absolute URL</span>, relative to the newly created element,
+    and if that is successful, run the <span
     title="concept-appcache-init">application cache selection
     algorithm</span> with the resulting <span>absolute URL</span> with
     any <span title="url-fragment">&lt;fragment&gt;</span> component
-    removed; otherwise, if there is no such attribute or resolving it
-    fails, run the <span title="concept-appcache-init">application
-    cache selection algorithm</span> with no manifest. The algorithm
-    must be passed the <code>Document</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 <span
+    title="concept-appcache-init">application cache selection
+    algorithm</span> with no manifest. The algorithm must be passed
+    the <code>Document</code> object.</p>
 
     <p>Switch the <span>insertion mode</span> to "<span
     title="insertion mode: before head">before head</span>".</p>
 
    </dd>
 
    <dt>An end tag whose tag name is one of: "head", "body", "html", "br"</dt>
    <dd>
     <p>Act as described in the "anything else" entry below.</p>
    </dd>
@@ -98791,21 +98829,21 @@ interface <span>HTMLDocument</span> {
      <td> <span>Boolean attribute</span>
     <tr>
      <th> <code title="">coords</code>
      <td> <code title="attr-area-coords">area</code>
      <td> Coordinates for the shape to be created in an <span>image map</span>
      <td> <span>Valid list of integers</span>*
     <tr>
      <th> <code title="">data</code>
      <td> <code title="attr-object-data">object</code>
      <td> Address of the resource
-     <td> <span>Valid URL</span>
+     <td> <span>Valid non-empty URL</span>
     <tr>
      <th> <code title="">datetime</code>
      <td> <code title="attr-mod-datetime">del</code>;
           <code title="attr-mod-datetime">ins</code>
      <td> Time and date of the change
      <td> <span>Valid global date and time string</span>
     <tr>
      <th> <code title="">datetime</code>
      <td> <code title="attr-time-datetime">time</code>
      <td> Value of the element
@@ -98921,46 +98959,50 @@ interface <span>HTMLDocument</span> {
      <td> Whether the element is relevant
      <td> <span>Boolean attribute</span>
     <tr>
      <th> <code title="">high</code>
      <td> <code title="attr-meter-high">meter</code>
      <td> Low limit of high range
      <td> <span>Valid floating point number</span>*
     <tr>
      <th> <code title="">href</code>
      <td> <code title="attr-hyperlink-href">a</code>;
-          <code title="attr-hyperlink-href">area</code>;
-          <code title="attr-link-href">link</code>
+          <code title="attr-hyperlink-href">area</code>
      <td> Address of the <span>hyperlink</span>
      <td> <span>Valid URL</span>
     <tr>
      <th> <code title="">href</code>
+     <td> <code title="attr-link-href">link</code>
+     <td> Address of the <span>hyperlink</span>
+     <td> <span>Valid non-empty URL</span>
+    <tr>
+     <th> <code title="">href</code>
      <td> <code title="attr-base-href">base</code>
      <td> <span>Document base URL</span>
      <td> <span>Valid URL</span>
     <tr>
      <th> <code title="">hreflang</code>
      <td> <code title="attr-hyperlink-hreflang">a</code>;
           <code title="attr-hyperlink-hreflang">area</code>;
           <code title="attr-link-hreflang">link</code>
      <td> Language of the linked resource
      <td> Valid BCP 47 language code
     <tr>
      <th> <code title="">http-equiv</code>
      <td> <code title="attr-meta-http-equiv">meta</code>
      <td> Pragma directive
      <td> Text*
     <tr>
      <th> <code title="">icon</code>
      <td> <code title="attr-command-icon">command</code>
      <td> Icon for the command
-     <td> <span>Valid URL</span>
+     <td> <span>Valid non-empty URL</span>
     <tr>
      <th> <code title="">id</code>
      <td> <span title="attr-id">HTML elements</span>
      <td> The element's <span title="concept-id">ID</span>
      <td> Text*
     <tr>
      <th> <code title="">ismap</code>
      <td> <code title="attr-img-ismap">img</code>
      <td> Whether the image is a server-side image map
      <td> <span>Boolean attribute</span>
@@ -99022,21 +99064,21 @@ interface <span>HTMLDocument</span> {
      <td> <span>Boolean attribute</span>
     <tr>
      <th> <code title="">low</code>
      <td> <code title="attr-meter-low">meter</code>
      <td> High limit of low range
      <td> <span>Valid floating point number</span>*
     <tr>
      <th> <code title="">manifest</code>
      <td> <code title="attr-html-manifest">html</code>
      <td> <span title="concept-appcache-manifest">Application cache manifest</span>
-     <td> <span>Valid URL</span>
+     <td> <span>Valid non-empty URL</span>
     <tr>
      <th> <code title="">max</code>
      <td> <code title="attr-input-max">input</code>
      <td> Maximum value
      <td> varies*
     <tr>
      <th> <code title="">max</code>
      <td> <code title="attr-meter-max">meter</code>;
           <code title="attr-progress-max">progress</code>
      <td> Upper bound of range
@@ -99133,33 +99175,33 @@ interface <span>HTMLDocument</span> {
      <th> <code title="">pattern</code>
      <td> <code title="attr-input-pattern">input</code>
      <td> Pattern to be matched by the form control's value
      <td> Regular expression matching the JavaScript <i title="">Pattern</i> production
 <!--END w3c-html--><!--PING-->
     <tr>
      <th> <code title="">ping</code>
      <td> <code title="attr-hyperlink-ping">a</code>;
           <code title="attr-hyperlink-ping">area</code>
      <td> <span title="URL">URLs</span> to ping
-     <td> <span>Set of space-separated tokens</span> consisting of <span title="valid URL">valid URLs</span>
+     <td> <span>Set of space-separated tokens</span> consisting of <span title="valid non-empty URL">valid non-empty URLs</span>
 <!--START w3c-html--><!--PING-->
     <tr>
      <th> <code title="">placeholder</code>
      <td> <code title="attr-input-placeholder">input</code>;
           <code title="attr-textarea-placeholder">textarea</code>
      <td> User-visible label to be placed within the form control
      <td> Text*
     <tr>
      <th> <code title="">poster</code>
      <td> <code title="attr-video-poster">video</code>
      <td> Poster frame to show prior to video playback
-     <td> <span>Valid URL</span>
+     <td> <span>Valid non-empty URL</span>
     <tr>
      <th> <code title="">preload</code>
      <td> <code title="attr-media-preload">audio</code>;
           <code title="attr-media-preload">video</code>
      <td> Hints how much buffering the <span>media resource</span> will likely need
      <td> "<code title="attr-media-preload-none">none</code>";
           "<code title="attr-media-preload-metadata">metadata</code>";
           "<code title="attr-media-preload-auto">auto</code>"
     <tr>
      <th> <code title="">pubdate</code>
@@ -99271,21 +99313,21 @@ interface <span>HTMLDocument</span> {
      <th> <code title="">src</code>
      <td> <code title="attr-media-src">audio</code>;
           <code title="attr-embed-src">embed</code>;
           <code title="attr-iframe-src">iframe</code>;
           <code title="attr-img-src">img</code>;
           <code title="attr-input-src">input</code>;
           <code title="attr-script-src">script</code>;
           <code title="attr-source-src">source</code>;
           <code title="attr-media-src">video</code>
      <td> Address of the resource
-     <td> <span>Valid URL</span>
+     <td> <span>Valid non-empty URL</span>
     <tr>
      <th> <code title="">srcdoc</code>
      <td> <code title="attr-iframe-srcdoc">iframe</code>
      <td> A document to render in the <code>iframe</code>
      <td> The source of <span>an <code>iframe</code> <code title="attr-iframe-srcdoc">srcdoc</code> document</span>*
     <tr>
      <th> <code title="">start</code>
      <td> <code title="attr-ol-start">ol</code>
      <td> Ordinal value of the first item
      <td> <span>Valid integer</span>
@@ -101674,20 +101716,21 @@ interface <span>HTMLDocument</span> {
   Mike Shaver,
   Mikko Rantalainen,
   Mohamed Zergaoui<!-- Innovimax SARL -->,
   Ms2ger,
   NARUSE Yui,
   Neil Deakin,
   Neil Rashbrook,
   Neil Soiffer,
   Nicholas Shanks,
   Nicholas Stimpson,
+  Nicholas Zakas,
   Nicolas Gallagher,
   Noah Mendelsohn,
   Noah Slater,
   Ojan Vafai,
   Olaf Hoffmann,
   Olav Junker Kj&aelig;r,
   Old&#345;ich Vete&#353;n&#237;k,
   Oliver Hunt,
   Oliver Rigby,
   Olivier Gendrin,

|