Updates to incorporate a lot of feedback coming from people
authorGreg Billock <gbillock@google.com>
Wed, 06 Jun 2012 09:44:27 -0700
changeset 15 0bea278978de
parent 14 1b7596aacd4c
child 16 573065e3be16
Updates to incorporate a lot of feedback coming from people
looking at the FPWD proposal state.
spec/Overview-respec.html
spec/Overview.html
--- a/spec/Overview-respec.html	Thu May 17 15:50:14 2012 -0700
+++ b/spec/Overview-respec.html	Wed Jun 06 09:44:27 2012 -0700
@@ -138,10 +138,10 @@
       code:
       </p>
       <pre class="example">
-      document.getElementById('edit-photo').onclick = function() {
-        var intent = new Intent("http://webintents.org/edit",
-                                "text/uri-list;type=image/jpeg",
-                                getImageDataURI(...));
+      document.getElementById('edit-photo').addEventListener("click", function() {
+        var intent = new Intent({"action":"http://webintents.org/edit",
+                                 "type":"image/jpeg",
+                                 "data":getImageDataBlob(...)});
         navigator.startActivity(intent, imageEdited);
       };
 
@@ -151,7 +151,7 @@
       </pre>
       <p>
       This code delegates image editing to third-party applications which can
-      consume images specified as URIs (including data URIs), and produce
+      consume images prepared as blobs, and produce
       results in the same format. For instance, one such editor might be
       a meme-maker&mdash;an application allowing the user to place humorous
       messages on pictures they take.
@@ -164,27 +164,30 @@
       accompanying code, it can accomplish this integration:
       </p>
       <pre class="example">
-      document.getElementById('share-photo').onclick = function() {
-        var intent = new Intent("http://webintents.org/share",
-                                "text/uri-list;type=image/jpeg",
-                                getPublicURIForImage(...));
+      document.getElementById('share-photo').addEventListener("click", function() {
+        var intent = new Intent({"action":"http://webintents.org/share",
+                                 "type":"text/uri-list",
+                                 "data":getPublicURIForImage(...)});
         navigator.startActivity(intent);
       };
       </pre>
       <p>
       This code delegates sharing functionality to an existing services chosen
-      by the user which are capable of sharing urls. So a social networking site
-      selected by the user might produce a status update with a thumbnail.
-      A blogging site might provide a UI allowing the user to post the picture.
+      by the user which are capable of sharing urls.
+      (<code>getPublicURIForImage()</code> is a
+      marker for an application-specific piece of functionality getting the URL
+      to be shared) So a social networking site
+      selected by the user might produce a status update with a thumbnail of the
+      image. A blogging site might provide a UI allowing the user to post the picture.
       <p>
       Note that with this integration, other more high-minded services can be
       selected by the user as well. Instead of using the service to add funny
-      captions, the user might utilize a sophisticated photo editing application
+      captions, the user might use a sophisticated photo editing application
       to adjust exposure, remove red-eye, or do any number of other
       transformations on the image. The user can have many such tools
       registered, and choose any of that set to use for any given image editing
-      task. The photo hosting application isn't controlling which such application
-      any given user uses; it is loosely coupled with such applications by providing the
+      task. The photo hosting application isn't controlling which application
+      the user chooses; it is loosely coupled with such applications by providing the
       data necessary for them to carry out their task, and controls allowing the
       user to launch these activities on the data.
       </p>
@@ -197,7 +200,7 @@
       <p>
       On the service side, the page needs to register itself as a Web Intents service, and
       handle the incoming intent data, possibly producing a response. That is
-      done with this kind of code:
+      done like this:
       </p>
       <pre class="example">
       &lt;html&gt;
@@ -207,13 +210,13 @@
       &lt;body&gt;
       &lt;intent action="http://webintents.org/edit" type="text/uri-list;type=image/*,image/*"&gt;&lt;/intent&gt;
       &lt;script&gt;
-        window.onload = function() {
+        window.addEventListener("load", function() {
           if (window.intent) {
             setImageContentURI(window.intent.data);
           }
         };
 
-        document.getElementById('save-button').onclick = function() {
+        document.getElementById('save-button').addEventListener("click", function() {
           window.intent.postResult(getImageDataURI(...));
         };
       &lt;/script&gt;
@@ -258,7 +261,7 @@
       </p>
       </section>
       <section>
-      <h3>Life cycle of Intents</h3>
+      <h3>Life cycle of Intents and Services</h3>
       <p>
         <dfn>Registration</dfn> is how a Service page informs the User Agent
         that it is capable of handling Intents.
@@ -279,6 +282,12 @@
         <dfn>Response</dfn> is the means in which the Service can respond to an
         Intent by passing data back through the User Agent to the Client page.
       </p>
+      <p>
+      The steps in a particular Intent invocation are asynchronous. The Service
+      receives the Intent delivery and prepares its Response in a separate
+      execution context. That Response is then returned to the calling Client in
+      an asynchronous callback.
+      </p>
       </section>
     </section>
     
@@ -505,28 +514,28 @@
     delivery).
     </p>
     <dl title='interface HTMLIntentElement : HTMLElement' class='idl'>
-      <dt>readonly attribute string action</dt>
+      <dt>attribute string action</dt>
       <dd>An opaque string indicating the behavior class the service supports.
       It is recommended that users use a fully qualified URI.
       If the <code>action</code> attribute is missing, the intent Service is
       assumed to handle display of the provided type(s) in the <code>type</code>
       attributes.</dd>
-      <dt>readonly attribute string type</dt>
+      <dt>attribute string type</dt>
       <dd>A string specifying the type of payload data the service can
       accept. Must be a space separated list of type specifiers. If these parse
       as MIME types, or the MIME wildcard types "*/*" or "*", they will be
       interpreted as such (see the section on matching action and type for delivery).
       If not, they will be interpreted as string literal type specifiers. Empty
       type attributes are not valid registrations.</dd>
-      <dt>readonly attribute string href</dt>
+      <dt>attribute string href</dt>
       <dd>Should be a fully qualified URI. If the <code>href</code> attribute
       is missing, the service URI will be set to the URI in which the tag is
       found.</dd>
-      <dt>readonly attribute string title</dt>
+      <dt>attribute string title</dt>
       <dd>A human-readable title which the User Agent SHOULD use to indicate the
       service to the user. If the <code>title</code> attribute is missing, the User Agent SHOULD
-      utilize the title of the registered Service page as the service title.</dd>
-      <dt>readonly attribute string disposition</dt>
+      use the title of the registered Service page as the service title.</dd>
+      <dt>attribute string disposition</dt>
       <dd>The <code>disposition</code> attribute allows a service to choose which
       context to be opened in. The User Agent MUST NOT allow the Client page any
       ability to change the disposition. The <code>window</code> disposition means
@@ -605,7 +614,8 @@
       the user to configure that page as a web intents service. The details of
       this process is left up to the User Agent. The model is that the page
       advises of the ability to handle intents, and the User Agent may remember
-      that.
+      that. The User Agent MUST NOT deliver an intent to a Service discovered in
+      this way before the user has made a specific action allowing it.
       </p>
       <p>
       The User Agent MUST NOT allow web pages the ability to discover passively
@@ -780,7 +790,7 @@
         </ol>
         <li>If no satisfying match is found in the registrations of the Service
         page, the Intent MUST NOT be delivered. If any satisfying match is
-        found, the Intent MUST be delivered.</li>
+        found, the Intent MUST be delivered to the Service page.</li>
       </ol>
       </section>
 
@@ -798,10 +808,9 @@
       suggested services (i.e. disposition, title, icon, etc) for use in
       preparing its UI, it MAY load the suggested default service URL(s) and
       examine the page(s) for the &lt;intent&gt; tag, reading off such information,
-      or load the favicon for the site(s). The User Agent SHOULD ignore the
-      suggested services from the intent invocation if the user already has a handler
-      selected. The User Agent MAY ask the user if they wish to install all
-      or any of the suggested services, just as for any other visit of those pages.
+      or load the favicon for the site(s). The User Agent MAY ask the user if
+      they wish to install all or any of the suggested services, just as for
+      any other visit of those pages.
       </p>
       <p>
       The User Agent MUST follow the matching algorithm of the "Matching action
--- a/spec/Overview.html	Thu May 17 15:50:14 2012 -0700
+++ b/spec/Overview.html	Wed Jun 06 09:44:27 2012 -0700
@@ -477,7 +477,7 @@
 pre.sh_sourceCode .sh_attribute { color: #006400; }
 
 </style><link href="http://www.w3.org/StyleSheets/TR/W3C-ED" rel="stylesheet" type="text/css" charset="utf-8"></head>
-  <body style="display: inherit; "><div class="head"><p><a href="http://www.w3.org/"><img width="72" height="48" src="http://www.w3.org/Icons/w3c_home" alt="W3C"></a></p><h1 class="title" id="title">Web Intents</h1><h2 id="w3c-editor-s-draft-17-may-2012"><acronym title="World Wide Web Consortium">W3C</acronym> Editor's Draft 17 May 2012</h2><dl><dt>This version:</dt><dd><a href="http://dev.w3.org/2011/webapps/TODO.html">http://dev.w3.org/2011/webapps/TODO.html</a></dd><dt>Latest published version:</dt><dd><a href="http://www.w3.org/TR/web-intents/">http://www.w3.org/TR/web-intents/</a></dd><dt>Latest editor's draft:</dt><dd><a href="http://dev.w3.org/2011/webapps/TODO.html">http://dev.w3.org/2011/webapps/TODO.html</a></dd><dt>Previous version:</dt><dd>none</dd><dt>Editors:</dt><dd><span>Greg Billock</span>, <a href="http://google.com/">Google</a></dd>
+  <body style="display: inherit; "><div class="head"><p><a href="http://www.w3.org/"><img width="72" height="48" src="http://www.w3.org/Icons/w3c_home" alt="W3C"></a></p><h1 class="title" id="title">Web Intents</h1><h2 id="w3c-editor-s-draft-06-june-2012"><acronym title="World Wide Web Consortium">W3C</acronym> Editor's Draft 06 June 2012</h2><dl><dt>This version:</dt><dd><a href="http://dev.w3.org/2011/webapps/TODO.html">http://dev.w3.org/2011/webapps/TODO.html</a></dd><dt>Latest published version:</dt><dd><a href="http://www.w3.org/TR/web-intents/">http://www.w3.org/TR/web-intents/</a></dd><dt>Latest editor's draft:</dt><dd><a href="http://dev.w3.org/2011/webapps/TODO.html">http://dev.w3.org/2011/webapps/TODO.html</a></dd><dt>Previous version:</dt><dd>none</dd><dt>Editors:</dt><dd><span>Greg Billock</span>, <a href="http://google.com/">Google</a></dd>
 <dd><span>James Hawkins</span>, <a href="http://google.com/">Google</a></dd>
 <dd><span>Paul Kinlan</span>, <a href="http://google.com/">Google</a></dd>
 </dl><p class="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> © 2012 <a href="http://www.w3.org/"><acronym title="World Wide Web Consortium">W3C</acronym></a><sup>®</sup> (<a href="http://www.csail.mit.edu/"><acronym title="Massachusetts Institute of Technology">MIT</acronym></a>, <a href="http://www.ercim.eu/"><acronym title="European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. <acronym title="World Wide Web Consortium">W3C</acronym> <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>, <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.</p><hr></div>
@@ -491,7 +491,7 @@
       pages to create, receive, and reply to Web Intents messages, and the
       procedures the User Agent carries out to facilitate that process.
       </p>
-    </div><div id="sotd" class="introductory section"><h2>Status of This Document</h2><p><em>This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current <acronym title="World Wide Web Consortium">W3C</acronym> publications and the latest revision of this technical report can be found in the <a href="http://www.w3.org/TR/"><acronym title="World Wide Web Consortium">W3C</acronym> technical reports index</a> at http://www.w3.org/TR/.</em></p><p>This document was published by the <a href="http://www.w3.org/2008/webapps/">Web Applications (WebApps) Working Group</a> as an Editor's Draft. If you wish to make comments regarding this document, please send them to <a href="mailto:public-web-intents@w3.org">public-web-intents@w3.org</a> (<a href="mailto:public-web-intents-request@w3.org?subject=subscribe">subscribe</a>, <a href="http://lists.w3.org/Archives/Public/public-web-intents/">archives</a>). All feedback is welcome.</p><p>Publication as an Editor's Draft does not imply endorsement by the <acronym title="World Wide Web Consortium">W3C</acronym> Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.</p><p>This document was produced by a group operating under the <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 <acronym title="World Wide Web Consortium">W3C</acronym> Patent Policy</a>. <acronym title="World Wide Web Consortium">W3C</acronym> maintains a <a href="TODO" rel="disclosure">public list of any patent disclosures</a> made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section 6 of the <acronym title="World Wide Web Consortium">W3C</acronym> Patent Policy</a>.</p></div><div id="toc" class="section"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a><ul class="toc"><li class="tocline"><a href="#example" class="tocxref"><span class="secno">1.1 </span>Example</a></li><li class="tocline"><a href="#normative-parts" class="tocxref"><span class="secno">1.2 </span>Normative parts</a></li></ul></li><li class="tocline"><a href="#terminology" class="tocxref"><span class="secno">2. </span>Terminology</a><ul class="toc"><li class="tocline"><a href="#actors" class="tocxref"><span class="secno">2.1 </span>Actors</a></li><li class="tocline"><a href="#life-cycle-of-intents" class="tocxref"><span class="secno">2.2 </span>Life cycle of Intents</a></li></ul></li><li class="tocline"><a href="#api-description" class="tocxref"><span class="secno">3. </span>API Description</a><ul class="toc"><li class="tocline"><a href="#intent-parameters-dictionary" class="tocxref"><span class="secno">3.1 </span>Intent parameters dictionary</a><ul class="toc"><li class="tocline"><a href="#dictionary-intentparameters-members" class="tocxref"><span class="secno">3.1.1 </span>Dictionary <span class="idlType formerLink idlType"><code>IntentParameters</code></span> Members</a></li></ul></li><li class="tocline"><a href="#intent-object" class="tocxref"><span class="secno">3.2 </span>Intent object</a><ul class="toc"><li class="tocline"><a href="#attributes" class="tocxref"><span class="secno">3.2.1 </span>Attributes</a></li><li class="tocline"><a href="#methods" class="tocxref"><span class="secno">3.2.2 </span>Methods</a></li></ul></li><li class="tocline"><a href="#invocation-api" class="tocxref"><span class="secno">3.3 </span>Invocation API</a><ul class="toc"><li class="tocline"><a href="#methods-1" class="tocxref"><span class="secno">3.3.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#delivery-and-response-api" class="tocxref"><span class="secno">3.4 </span>Delivery and Response API</a><ul class="toc"><li class="tocline"><a href="#attributes-1" class="tocxref"><span class="secno">3.4.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#registration-markup" class="tocxref"><span class="secno">3.5 </span>Registration Markup</a><ul class="toc"><li class="tocline"><a href="#attributes-2" class="tocxref"><span class="secno">3.5.1 </span>Attributes</a></li></ul></li></ul></li><li class="tocline"><a href="#user-agent-behavior" class="tocxref"><span class="secno">4. </span>User Agent Behavior</a><ul class="toc"><li class="tocline"><a href="#explicit-intents" class="tocxref"><span class="secno">4.1 </span>Explicit Intents</a></li><li class="tocline"><a href="#matching-action-and-type-for-delivery" class="tocxref"><span class="secno">4.2 </span>Matching action and type for delivery</a></li><li class="tocline"><a href="#handling-service-suggestions-from-intent-invocation" class="tocxref"><span class="secno">4.3 </span>Handling Service suggestions from Intent Invocation</a></li></ul></li><li class="tocline"><a href="#use-cases-and-requirements" class="tocxref"><span class="secno">5. </span>Use Cases and Requirements</a><ul class="toc"><li class="tocline"><a href="#sharing" class="tocxref"><span class="secno">5.1 </span>Sharing</a></li><li class="tocline"><a href="#integration-with-local-web-apps" class="tocxref"><span class="secno">5.2 </span>Integration with local web apps</a></li><li class="tocline"><a href="#persistent-connections" class="tocxref"><span class="secno">5.3 </span>Persistent connections</a></li><li class="tocline"><a href="#integration-with-external-applications" class="tocxref"><span class="secno">5.4 </span>Integration with external applications</a></li><li class="tocline"><a href="#translating-existing-web-platform-features-to-intents" class="tocxref"><span class="secno">5.5 </span>Translating existing web platform features to intents</a></li><li class="tocline"><a href="#authentication" class="tocxref"><span class="secno">5.6 </span>Authentication</a></li></ul></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">A. </span>Acknowledgements</a></li><li class="tocline"><a href="#references" class="tocxref"><span class="secno">B. </span>References</a><ul class="toc"><li class="tocline"><a href="#normative-references" class="tocxref"><span class="secno">B.1 </span>Normative references</a></li><li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">B.2 </span>Informative references</a></li></ul></li></ul></div>
+    </div><div id="sotd" class="introductory section"><h2>Status of This Document</h2><p><em>This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current <acronym title="World Wide Web Consortium">W3C</acronym> publications and the latest revision of this technical report can be found in the <a href="http://www.w3.org/TR/"><acronym title="World Wide Web Consortium">W3C</acronym> technical reports index</a> at http://www.w3.org/TR/.</em></p><p>This document was published by the <a href="http://www.w3.org/2008/webapps/">Web Applications (WebApps) Working Group</a> as an Editor's Draft. If you wish to make comments regarding this document, please send them to <a href="mailto:public-web-intents@w3.org">public-web-intents@w3.org</a> (<a href="mailto:public-web-intents-request@w3.org?subject=subscribe">subscribe</a>, <a href="http://lists.w3.org/Archives/Public/public-web-intents/">archives</a>). All feedback is welcome.</p><p>Publication as an Editor's Draft does not imply endorsement by the <acronym title="World Wide Web Consortium">W3C</acronym> Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.</p><p>This document was produced by a group operating under the <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 <acronym title="World Wide Web Consortium">W3C</acronym> Patent Policy</a>. <acronym title="World Wide Web Consortium">W3C</acronym> maintains a <a href="TODO" rel="disclosure">public list of any patent disclosures</a> made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section 6 of the <acronym title="World Wide Web Consortium">W3C</acronym> Patent Policy</a>.</p></div><div id="toc" class="section"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a><ul class="toc"><li class="tocline"><a href="#example" class="tocxref"><span class="secno">1.1 </span>Example</a></li><li class="tocline"><a href="#normative-parts" class="tocxref"><span class="secno">1.2 </span>Normative parts</a></li></ul></li><li class="tocline"><a href="#terminology" class="tocxref"><span class="secno">2. </span>Terminology</a><ul class="toc"><li class="tocline"><a href="#actors" class="tocxref"><span class="secno">2.1 </span>Actors</a></li><li class="tocline"><a href="#life-cycle-of-intents-and-services" class="tocxref"><span class="secno">2.2 </span>Life cycle of Intents and Services</a></li></ul></li><li class="tocline"><a href="#api-description" class="tocxref"><span class="secno">3. </span>API Description</a><ul class="toc"><li class="tocline"><a href="#intent-parameters-dictionary" class="tocxref"><span class="secno">3.1 </span>Intent parameters dictionary</a><ul class="toc"><li class="tocline"><a href="#dictionary-intentparameters-members" class="tocxref"><span class="secno">3.1.1 </span>Dictionary <span class="idlType formerLink idlType"><code>IntentParameters</code></span> Members</a></li></ul></li><li class="tocline"><a href="#intent-object" class="tocxref"><span class="secno">3.2 </span>Intent object</a><ul class="toc"><li class="tocline"><a href="#attributes" class="tocxref"><span class="secno">3.2.1 </span>Attributes</a></li><li class="tocline"><a href="#methods" class="tocxref"><span class="secno">3.2.2 </span>Methods</a></li></ul></li><li class="tocline"><a href="#invocation-api" class="tocxref"><span class="secno">3.3 </span>Invocation API</a><ul class="toc"><li class="tocline"><a href="#methods-1" class="tocxref"><span class="secno">3.3.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#delivery-and-response-api" class="tocxref"><span class="secno">3.4 </span>Delivery and Response API</a><ul class="toc"><li class="tocline"><a href="#attributes-1" class="tocxref"><span class="secno">3.4.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#registration-markup" class="tocxref"><span class="secno">3.5 </span>Registration Markup</a><ul class="toc"><li class="tocline"><a href="#attributes-2" class="tocxref"><span class="secno">3.5.1 </span>Attributes</a></li></ul></li></ul></li><li class="tocline"><a href="#user-agent-behavior" class="tocxref"><span class="secno">4. </span>User Agent Behavior</a><ul class="toc"><li class="tocline"><a href="#explicit-intents" class="tocxref"><span class="secno">4.1 </span>Explicit Intents</a></li><li class="tocline"><a href="#matching-action-and-type-for-delivery" class="tocxref"><span class="secno">4.2 </span>Matching action and type for delivery</a></li><li class="tocline"><a href="#handling-service-suggestions-from-intent-invocation" class="tocxref"><span class="secno">4.3 </span>Handling Service suggestions from Intent Invocation</a></li></ul></li><li class="tocline"><a href="#use-cases-and-requirements" class="tocxref"><span class="secno">5. </span>Use Cases and Requirements</a><ul class="toc"><li class="tocline"><a href="#sharing" class="tocxref"><span class="secno">5.1 </span>Sharing</a></li><li class="tocline"><a href="#integration-with-local-web-apps" class="tocxref"><span class="secno">5.2 </span>Integration with local web apps</a></li><li class="tocline"><a href="#persistent-connections" class="tocxref"><span class="secno">5.3 </span>Persistent connections</a></li><li class="tocline"><a href="#integration-with-external-applications" class="tocxref"><span class="secno">5.4 </span>Integration with external applications</a></li><li class="tocline"><a href="#translating-existing-web-platform-features-to-intents" class="tocxref"><span class="secno">5.5 </span>Translating existing web platform features to intents</a></li><li class="tocline"><a href="#authentication" class="tocxref"><span class="secno">5.6 </span>Authentication</a></li></ul></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">A. </span>Acknowledgements</a></li><li class="tocline"><a href="#references" class="tocxref"><span class="secno">B. </span>References</a><ul class="toc"><li class="tocline"><a href="#normative-references" class="tocxref"><span class="secno">B.1 </span>Normative references</a></li><li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">B.2 </span>Informative references</a></li></ul></li></ul></div>
     
     <div id="introduction" class="section">
       <!--OddPage--><h2><span class="secno">1. </span>Introduction</h2>
@@ -535,10 +535,10 @@
       photo, it can place an <b>Edit</b> button, with this kind of accompanying
       code:
       </p>
-      <pre class="example">document.getElementById('edit-photo').onclick = function() {
-  var intent = new Intent("http://webintents.org/edit",
-                          "text/uri-list;type=image/jpeg",
-                          getImageDataURI(...));
+      <pre class="example">document.getElementById('edit-photo').addEventListener("click", function() {
+  var intent = new Intent({"action":"http://webintents.org/edit",
+                           "type":"image/jpeg",
+                           "data":getImageDataBlob(...)});
   navigator.startActivity(intent, imageEdited);
 };
 
@@ -547,7 +547,7 @@
 }</pre>
       <p>
       This code delegates image editing to third-party applications which can
-      consume images specified as URIs (including data URIs), and produce
+      consume images prepared as blobs, and produce
       results in the same format. For instance, one such editor might be
       a meme-maker—an application allowing the user to place humorous
       messages on pictures they take.
@@ -559,26 +559,29 @@
       but by adding a <b>Share</b> button near images, and with this kind of
       accompanying code, it can accomplish this integration:
       </p>
-      <pre class="example">document.getElementById('share-photo').onclick = function() {
-  var intent = new Intent("http://webintents.org/share",
-                          "text/uri-list;type=image/jpeg",
-                          getPublicURIForImage(...));
+      <pre class="example">document.getElementById('share-photo').addEventListener("click", function() {
+  var intent = new Intent({"action":"http://webintents.org/share",
+                           "type":"text/uri-list",
+                           "data":getPublicURIForImage(...)});
   navigator.startActivity(intent);
 };</pre>
       <p>
       This code delegates sharing functionality to an existing services chosen
-      by the user which are capable of sharing urls. So a social networking site
-      selected by the user might produce a status update with a thumbnail.
-      A blogging site might provide a UI allowing the user to post the picture.
+      by the user which are capable of sharing urls.
+      (<code>getPublicURIForImage()</code> is a
+      marker for an application-specific piece of functionality getting the URL
+      to be shared) So a social networking site
+      selected by the user might produce a status update with a thumbnail of the
+      image. A blogging site might provide a UI allowing the user to post the picture.
       </p><p>
       Note that with this integration, other more high-minded services can be
       selected by the user as well. Instead of using the service to add funny
-      captions, the user might utilize a sophisticated photo editing application
+      captions, the user might use a sophisticated photo editing application
       to adjust exposure, remove red-eye, or do any number of other
       transformations on the image. The user can have many such tools
       registered, and choose any of that set to use for any given image editing
-      task. The photo hosting application isn't controlling which such application
-      any given user uses; it is loosely coupled with such applications by providing the
+      task. The photo hosting application isn't controlling which application
+      the user chooses; it is loosely coupled with such applications by providing the
       data necessary for them to carry out their task, and controls allowing the
       user to launch these activities on the data.
       </p>
@@ -591,7 +594,7 @@
       <p>
       On the service side, the page needs to register itself as a Web Intents service, and
       handle the incoming intent data, possibly producing a response. That is
-      done with this kind of code:
+      done like this:
       </p>
       <pre class="example">&lt;html&gt;
 &lt;head&gt;
@@ -600,13 +603,13 @@
 &lt;body&gt;
 &lt;intent action="http://webintents.org/edit" type="text/uri-list;type=image/*,image/*"&gt;&lt;/intent&gt;
 &lt;script&gt;
-  window.onload = function() {
+  window.addEventListener("load", function() {
     if (window.intent) {
       setImageContentURI(window.intent.data);
     }
   };
 
-  document.getElementById('save-button').onclick = function() {
+  document.getElementById('save-button').addEventListener("click", function() {
     window.intent.postResult(getImageDataURI(...));
   };
 &lt;/script&gt;</pre>
@@ -649,8 +652,8 @@
         external OS handlers, etc.)
       </p>
       </div>
-      <div id="life-cycle-of-intents" class="section">
-      <h3><span class="secno">2.2 </span>Life cycle of Intents</h3>
+      <div id="life-cycle-of-intents-and-services" class="section">
+      <h3><span class="secno">2.2 </span>Life cycle of Intents and Services</h3>
       <p>
         <dfn id="dfn-registration">Registration</dfn> is how a Service page informs the User Agent
         that it is capable of handling Intents.
@@ -671,6 +674,12 @@
         <dfn id="dfn-response">Response</dfn> is the means in which the Service can respond to an
         Intent by passing data back through the User Agent to the Client page.
       </p>
+      <p>
+      The steps in a particular Intent invocation are asynchronous. The Service
+      receives the Intent delivery and prepares its Response in a separate
+      execution context. That Response is then returned to the calling Client in
+      an asynchronous callback.
+      </p>
       </div>
     </div>
     
@@ -889,28 +898,28 @@
     delivery).
     </p>
     <pre class="idl"><span class="idlInterface" id="idl-def-HTMLIntentElement">interface <span class="idlInterfaceID">HTMLIntentElement</span> : <span class="idlSuperclass"><a>HTMLElement</a></span> {
-<span class="idlAttribute">    readonly attribute <span class="idlAttrType"><a>string</a></span> <span class="idlAttrName"><a href="#widl-HTMLIntentElement-action">action</a></span>;</span>
-<span class="idlAttribute">    readonly attribute <span class="idlAttrType"><a>string</a></span> <span class="idlAttrName"><a href="#widl-HTMLIntentElement-type">type</a></span>;</span>
-<span class="idlAttribute">    readonly attribute <span class="idlAttrType"><a>string</a></span> <span class="idlAttrName"><a href="#widl-HTMLIntentElement-href">href</a></span>;</span>
-<span class="idlAttribute">    readonly attribute <span class="idlAttrType"><a>string</a></span> <span class="idlAttrName"><a href="#widl-HTMLIntentElement-title">title</a></span>;</span>
-<span class="idlAttribute">    readonly attribute <span class="idlAttrType"><a>string</a></span> <span class="idlAttrName"><a href="#widl-HTMLIntentElement-disposition">disposition</a></span>;</span>
+<span class="idlAttribute">    attribute <span class="idlAttrType"><a>string</a></span> <span class="idlAttrName"><a href="#widl-HTMLIntentElement-action">action</a></span>;</span>
+<span class="idlAttribute">    attribute <span class="idlAttrType"><a>string</a></span> <span class="idlAttrName"><a href="#widl-HTMLIntentElement-type">type</a></span>;</span>
+<span class="idlAttribute">    attribute <span class="idlAttrType"><a>string</a></span> <span class="idlAttrName"><a href="#widl-HTMLIntentElement-href">href</a></span>;</span>
+<span class="idlAttribute">    attribute <span class="idlAttrType"><a>string</a></span> <span class="idlAttrName"><a href="#widl-HTMLIntentElement-title">title</a></span>;</span>
+<span class="idlAttribute">    attribute <span class="idlAttrType"><a>string</a></span> <span class="idlAttrName"><a href="#widl-HTMLIntentElement-disposition">disposition</a></span>;</span>
 };</span>
-</pre><div id="attributes-2" class="section"><h4><span class="secno">3.5.1 </span>Attributes</h4><dl class="attributes"><dt id="widl-HTMLIntentElement-action"><code>action</code> of type <span class="idlAttrType"><a>string</a></span>, readonly</dt><dd>An opaque string indicating the behavior class the service supports.
+</pre><div id="attributes-2" class="section"><h4><span class="secno">3.5.1 </span>Attributes</h4><dl class="attributes"><dt id="widl-HTMLIntentElement-action"><code>action</code> of type <span class="idlAttrType"><a>string</a></span></dt><dd>An opaque string indicating the behavior class the service supports.
       It is recommended that users use a fully qualified URI.
       If the <code>action</code> attribute is missing, the intent Service is
       assumed to handle display of the provided type(s) in the <code>type</code>
-      attributes.</dd><dt id="widl-HTMLIntentElement-disposition"><code>disposition</code> of type <span class="idlAttrType"><a>string</a></span>, readonly</dt><dd>The <code>disposition</code> attribute allows a service to choose which
+      attributes.</dd><dt id="widl-HTMLIntentElement-disposition"><code>disposition</code> of type <span class="idlAttrType"><a>string</a></span></dt><dd>The <code>disposition</code> attribute allows a service to choose which
       context to be opened in. The User Agent <em class="rfc2119" title="must not">must not</em> allow the Client page any
       ability to change the disposition. The <code>window</code> disposition means
       that the service is opened in a new tab or window context. The
       <code>inline</code> disposition means that the User Agent <em class="rfc2119" title="should">should</em> open the
       service in a context directly related to the client page context in an
       overlappable way. The User Agent <em class="rfc2119" title="must not">must not</em> allow this UI surface to be
-      under the control of the client page.</dd><dt id="widl-HTMLIntentElement-href"><code>href</code> of type <span class="idlAttrType"><a>string</a></span>, readonly</dt><dd>Should be a fully qualified URI. If the <code>href</code> attribute
+      under the control of the client page.</dd><dt id="widl-HTMLIntentElement-href"><code>href</code> of type <span class="idlAttrType"><a>string</a></span></dt><dd>Should be a fully qualified URI. If the <code>href</code> attribute
       is missing, the service URI will be set to the URI in which the tag is
-      found.</dd><dt id="widl-HTMLIntentElement-title"><code>title</code> of type <span class="idlAttrType"><a>string</a></span>, readonly</dt><dd>A human-readable title which the User Agent <em class="rfc2119" title="should">should</em> use to indicate the
+      found.</dd><dt id="widl-HTMLIntentElement-title"><code>title</code> of type <span class="idlAttrType"><a>string</a></span></dt><dd>A human-readable title which the User Agent <em class="rfc2119" title="should">should</em> use to indicate the
       service to the user. If the <code>title</code> attribute is missing, the User Agent <em class="rfc2119" title="should">should</em>
-      utilize the title of the registered Service page as the service title.</dd><dt id="widl-HTMLIntentElement-type"><code>type</code> of type <span class="idlAttrType"><a>string</a></span>, readonly</dt><dd>A string specifying the type of payload data the service can
+      use the title of the registered Service page as the service title.</dd><dt id="widl-HTMLIntentElement-type"><code>type</code> of type <span class="idlAttrType"><a>string</a></span></dt><dd>A string specifying the type of payload data the service can
       accept. Must be a space separated list of type specifiers. If these parse
       as MIME types, or the MIME wildcard types "*/*" or "*", they will be
       interpreted as such (see the section on matching action and type for delivery).
@@ -985,7 +994,8 @@
       the user to configure that page as a web intents service. The details of
       this process is left up to the User Agent. The model is that the page
       advises of the ability to handle intents, and the User Agent may remember
-      that.
+      that. The User Agent <em class="rfc2119" title="must not">must not</em> deliver an intent to a Service discovered in
+      this way before the user has made a specific action allowing it.
       </p>
       <p>
       The User Agent <em class="rfc2119" title="must not">must not</em> allow web pages the ability to discover passively
@@ -1160,7 +1170,7 @@
         </ol>
         </li><li>If no satisfying match is found in the registrations of the Service
         page, the Intent <em class="rfc2119" title="must not">must not</em> be delivered. If any satisfying match is
-        found, the Intent <em class="rfc2119" title="must">must</em> be delivered.</li>
+        found, the Intent <em class="rfc2119" title="must">must</em> be delivered to the Service page.</li>
       </ol>
       </div>
 
@@ -1178,10 +1188,9 @@
       suggested services (i.e. disposition, title, icon, etc) for use in
       preparing its UI, it <em class="rfc2119" title="may">may</em> load the suggested default service URL(s) and
       examine the page(s) for the &lt;intent&gt; tag, reading off such information,
-      or load the favicon for the site(s). The User Agent <em class="rfc2119" title="should">should</em> ignore the
-      suggested services from the intent invocation if the user already has a handler
-      selected. The User Agent <em class="rfc2119" title="may">may</em> ask the user if they wish to install all
-      or any of the suggested services, just as for any other visit of those pages.
+      or load the favicon for the site(s). The User Agent <em class="rfc2119" title="may">may</em> ask the user if
+      they wish to install all or any of the suggested services, just as for
+      any other visit of those pages.
       </p>
       <p>
       The User Agent <em class="rfc2119" title="must">must</em> follow the matching algorithm of the "Matching action
@@ -1290,8 +1299,9 @@
 
 
 <div id="references" class="appendix section"><!--OddPage--><h2><span class="secno">B. </span>References</h2><div id="normative-references" class="section"><h3><span class="secno">B.1 </span>Normative references</h3><dl class="bibliography"><dt id="bib-BLOB">[BLOB]</dt><dd>Arun Ranganathan. <a href="http://www.w3.org/TR/2009/WD-FileAPI-20091117/#dfn-Blob"><cite>Blob.</cite></a> 17 November 2009. W3C Working Draft. (Work in progress.) URL: <a href="http://www.w3.org/TR/2009/WD-FileAPI-20091117/">http://www.w3.org/TR/2009/WD-FileAPI-20091117/#dfn-Blob</a> 
-</dd><dt id="bib-HTML5">[HTML5]</dt><dd>Ian Hickson; David Hyatt. <a href="http://www.w3.org/TR/html5"><cite>HTML5.</cite></a> 25 May 2011. W3C Working Draft. (Work in progress.) URL: <a href="http://www.w3.org/TR/html5">http://www.w3.org/TR/html5</a> 
+</dd><dt id="bib-HTML5">[HTML5]</dt><dd>Ian Hickson; David Hyatt. <a href="http://www.w3.org/TR/html5"><cite>HTML5.</cite></a> 29 March 2012. W3C Working Draft. (Work in progress.) URL: <a href="http://www.w3.org/TR/html5">http://www.w3.org/TR/html5</a> 
 </dd><dt id="bib-HTTP11">[HTTP11]</dt><dd>R. Fielding; et al. <a href="http://www.ietf.org/rfc/rfc2616.txt"><cite>Hypertext Transfer Protocol - HTTP/1.1.</cite></a> June 1999. Internet RFC 2616. URL: <a href="http://www.ietf.org/rfc/rfc2616.txt">http://www.ietf.org/rfc/rfc2616.txt</a> 
 </dd><dt id="bib-POSTMSG">[POSTMSG]</dt><dd>Ian Hickson. <a href="http://www.w3.org/TR/webmessaging/"><cite>HTML5 Web Messaging.</cite></a> 13 March 2012. W3C Working Draft. (Work In Progress.) URL: <a href="http://www.w3.org/TR/webmessaging/">http://www.w3.org/TR/webmessaging/</a>
 </dd><dt id="bib-RFC2046">[RFC2046]</dt><dd>N. Freed; N. Borenstein. <a href="http://www.ietf.org/rfc/rfc2046.txt"><cite>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types.</cite></a> November 1996. Internet RFC 2046. URL: <a href="http://www.ietf.org/rfc/rfc2046.txt">http://www.ietf.org/rfc/rfc2046.txt</a> 
 </dd></dl></div><div id="informative-references" class="section"><h3><span class="secno">B.2 </span>Informative references</h3><p>No informative references.</p></div></div></body></html>
+