Web Intents: Initial upload of the draft API.
authorJames Hawkins <jhawkins@chromium.org>
Wed, 04 Jan 2012 15:09:25 -0800
changeset 0 755368b5be33
child 1 5fee5c5c5eaa
Web Intents: Initial upload of the draft API.
spec/Overview.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spec/Overview.html	Wed Jan 04 15:09:25 2012 -0800
@@ -0,0 +1,1002 @@
+<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
+<html lang="en" dir="ltr">
+<head>
+    <title>Web Intents</title>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <!-- 
+      === NOTA BENE ===
+      For the three scripts below, if your spec resides on dev.w3 you can check them
+      out in the same tree and use relative links so that they'll work offline,
+     -->
+    
+    
+    
+  <style type="text/css">
+/*****************************************************************
+ * ReSpec CSS
+ * Robin Berjon (robin at berjon dot com)
+ * v0.05 - 2009-07-31
+ *****************************************************************/
+
+
+/* --- INLINES --- */
+em.rfc2119 { 
+    text-transform:     lowercase;
+    font-variant:       small-caps;
+    font-style:         normal;
+    color:              #900;
+}
+
+h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
+h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
+    border: none;
+}
+
+dfn {
+    font-weight:    bold;
+}
+
+a.internalDFN {
+    color:  inherit;
+    border-bottom:  1px solid #99c;
+    text-decoration:    none;
+}
+
+a.externalDFN {
+    color:  inherit;
+    border-bottom:  1px dotted #ccc;
+    text-decoration:    none;
+}
+
+a.bibref {
+    text-decoration:    none;
+}
+
+code {
+    color:  #ff4500;
+}
+
+
+/* --- WEB IDL --- */
+pre.idl {
+    border-top: 1px solid #90b8de;
+    border-bottom: 1px solid #90b8de;
+    padding:    1em;
+    line-height:    120%;
+}
+
+pre.idl::before {
+    content:    "WebIDL";
+    display:    block;
+    width:      150px;
+    background: #90b8de;
+    color:  #fff;
+    font-family:    initial;
+    padding:    3px;
+    font-weight:    bold;
+    margin: -1em 0 1em -1em;
+}
+
+.idlType {
+    color:  #ff4500;
+    font-weight:    bold;
+    text-decoration:    none;
+}
+
+/*.idlModule*/
+/*.idlModuleID*/
+/*.idlInterface*/
+.idlInterfaceID, .idlDictionaryID {
+    font-weight:    bold;
+    color:  #005a9c;
+}
+
+.idlSuperclass {
+    font-style: italic;
+    color:  #005a9c;
+}
+
+/*.idlAttribute*/
+.idlAttrType, .idlFieldType, .idlMemberType {
+    color:  #005a9c;
+}
+.idlAttrName, .idlFieldName, .idlMemberName {
+    color:  #ff4500;
+}
+.idlAttrName a, .idlFieldName a, .idlMemberName a {
+    color:  #ff4500;
+    border-bottom:  1px dotted #ff4500;
+    text-decoration: none;
+}
+
+/*.idlMethod*/
+.idlMethType {
+    color:  #005a9c;
+}
+.idlMethName {
+    color:  #ff4500;
+}
+.idlMethName a {
+    color:  #ff4500;
+    border-bottom:  1px dotted #ff4500;
+    text-decoration: none;
+}
+
+/*.idlParam*/
+.idlParamType {
+    color:  #005a9c;
+}
+.idlParamName {
+    font-style: italic;
+}
+
+.extAttr {
+    color:  #666;
+}
+
+/*.idlConst*/
+.idlConstType {
+    color:  #005a9c;
+}
+.idlConstName {
+    color:  #ff4500;
+}
+.idlConstName a {
+    color:  #ff4500;
+    border-bottom:  1px dotted #ff4500;
+    text-decoration: none;
+}
+
+/*.idlException*/
+.idlExceptionID {
+    font-weight:    bold;
+    color:  #c00;
+}
+
+.idlTypedefID, .idlTypedefType {
+    color:  #005a9c;
+}
+
+.idlRaises, .idlRaises a.idlType, .idlRaises a.idlType code, .excName a, .excName a code {
+    color:  #c00;
+    font-weight:    normal;
+}
+
+.excName a {
+    font-family:    monospace;
+}
+
+.idlRaises a.idlType, .excName a.idlType {
+    border-bottom:  1px dotted #c00;
+}
+
+.excGetSetTrue, .excGetSetFalse, .prmNullTrue, .prmNullFalse, .prmOptTrue, .prmOptFalse {
+    width:  45px;
+    text-align: center;
+}
+.excGetSetTrue, .prmNullTrue, .prmOptTrue { color:  #0c0; }
+.excGetSetFalse, .prmNullFalse, .prmOptFalse { color:  #c00; }
+
+.idlImplements a {
+    font-weight:    bold;
+}
+
+dl.attributes, dl.methods, dl.constants, dl.fields, dl.dictionary-members {
+    margin-left:    2em;
+}
+
+.attributes dt, .methods dt, .constants dt, .fields dt, .dictionary-members dt {
+    font-weight:    normal;
+}
+
+.attributes dt code, .methods dt code, .constants dt code, .fields dt code, .dictionary-members dt code {
+    font-weight:    bold;
+    color:  #000;
+    font-family:    monospace;
+}
+
+.attributes dt code, .fields dt code, .dictionary-members dt code {
+    background:  #ffffd2;
+}
+
+.attributes dt .idlAttrType code, .fields dt .idlFieldType code, .dictionary-members dt .idlMemberType code {
+    color:  #005a9c;
+    background:  transparent;
+    font-family:    inherit;
+    font-weight:    normal;
+    font-style: italic;
+}
+
+.methods dt code {
+    background:  #d9e6f8;
+}
+
+.constants dt code {
+    background:  #ddffd2;
+}
+
+.attributes dd, .methods dd, .constants dd, .fields dd, .dictionary-members dd {
+    margin-bottom:  1em;
+}
+
+table.parameters, table.exceptions {
+    border-spacing: 0;
+    border-collapse:    collapse;
+    margin: 0.5em 0;
+    width:  100%;
+}
+table.parameters { border-bottom:  1px solid #90b8de; }
+table.exceptions { border-bottom:  1px solid #deb890; }
+
+.parameters th, .exceptions th {
+    color:  #fff;
+    padding:    3px 5px;
+    text-align: left;
+    font-family:    initial;
+    font-weight:    normal;
+    text-shadow:    #666 1px 1px 0;
+}
+.parameters th { background: #90b8de; }
+.exceptions th { background: #deb890; }
+
+.parameters td, .exceptions td {
+    padding:    3px 10px;
+    border-top: 1px solid #ddd;
+    vertical-align: top;
+}
+
+.parameters tr:first-child td, .exceptions tr:first-child td {
+    border-top: none;
+}
+
+.parameters td.prmName, .exceptions td.excName, .exceptions td.excCodeName {
+    width:  100px;
+}
+
+.parameters td.prmType {
+    width:  120px;
+}
+
+table.exceptions table {
+    border-spacing: 0;
+    border-collapse:    collapse;
+    width:  100%;
+}
+
+/* --- TOC --- */
+.toc a {
+    text-decoration:    none;
+}
+
+a .secno {
+    color:  #000;
+}
+
+/* --- TABLE --- */
+table.simple {
+    border-spacing: 0;
+    border-collapse:    collapse;
+    border-bottom:  3px solid #005a9c;
+}
+
+.simple th {
+    background: #005a9c;
+    color:  #fff;
+    padding:    3px 5px;
+    text-align: left;
+}
+
+.simple th[scope="row"] {
+    background: inherit;
+    color:  inherit;
+    border-top: 1px solid #ddd;
+}
+
+.simple td {
+    padding:    3px 10px;
+    border-top: 1px solid #ddd;
+}
+
+.simple tr:nth-child(even) {
+    background: #f0f6ff;
+}
+
+/* --- DL --- */
+.section dd > p:first-child {
+    margin-top: 0;
+}
+
+.section dd > p:last-child {
+    margin-bottom: 0;
+}
+
+.section dd {
+    margin-bottom:  1em;
+}
+
+.section dl.attrs dd, .section dl.eldef dd {
+    margin-bottom:  0;
+}
+
+/* --- EXAMPLES --- */
+pre.example {
+    border-top: 1px solid #ff4500;
+    border-bottom: 1px solid #ff4500;
+    padding:    1em;
+    margin-top: 1em;
+}
+
+pre.example::before {
+    content:    "Example";
+    display:    block;
+    width:      150px;
+    background: #ff4500;
+    color:  #fff;
+    font-family:    initial;
+    padding:    3px;
+    font-weight:    bold;
+    margin: -1em 0 1em -1em;
+}
+
+/* --- EDITORIAL NOTES --- */
+.issue {
+    padding:    1em;
+    margin: 1em 0em 0em;
+    border: 1px solid #f00;
+    background: #ffc;
+}
+
+.issue::before {
+    content:    "Issue";
+    display:    block;
+    width:  150px;
+    margin: -1.5em 0 0.5em 0;
+    font-weight:    bold;
+    border: 1px solid #f00;
+    background: #fff;
+    padding:    3px 1em;
+}
+
+.note {
+    margin: 1em 0em 0em;
+    padding:    1em;
+    border: 2px solid #cff6d9;
+    background: #e2fff0;
+}
+
+.note::before {
+    content:    "Note";
+    display:    block;
+    width:  150px;
+    margin: -1.5em 0 0.5em 0;
+    font-weight:    bold;
+    border: 1px solid #cff6d9;
+    background: #fff;
+    padding:    3px 1em;
+}
+
+/* --- Best Practices --- */
+div.practice {
+    border: solid #bebebe 1px;
+    margin: 2em 1em 1em 2em;
+}
+
+span.practicelab {
+    margin: 1.5em 0.5em 1em 1em;
+    font-weight: bold;
+    font-style: italic;
+}
+
+span.practicelab   { background: #dfffff; }
+
+span.practicelab {
+    position: relative;
+    padding: 0 0.5em;
+    top: -1.5em;
+}
+
+p.practicedesc {
+    margin: 1.5em 0.5em 1em 1em;
+}
+
+@media screen {
+    p.practicedesc {
+        position: relative;
+        top: -2em;
+        padding: 0;
+        margin: 1.5em 0.5em -1em 1em;
+    }
+}
+
+/* --- SYNTAX HIGHLIGHTING --- */
+pre.sh_sourceCode {
+  background-color: white;
+  color: black;
+  font-style: normal;
+  font-weight: normal;
+}
+
+pre.sh_sourceCode .sh_keyword { color: #005a9c; font-weight: bold; }           /* language keywords */
+pre.sh_sourceCode .sh_type { color: #666; }                            /* basic types */
+pre.sh_sourceCode .sh_usertype { color: teal; }                             /* user defined types */
+pre.sh_sourceCode .sh_string { color: red; font-family: monospace; }        /* strings and chars */
+pre.sh_sourceCode .sh_regexp { color: orange; font-family: monospace; }     /* regular expressions */
+pre.sh_sourceCode .sh_specialchar { color:      #ffc0cb; font-family: monospace; }  /* e.g., \n, \t, \\ */
+pre.sh_sourceCode .sh_comment { color: #A52A2A; font-style: italic; }         /* comments */
+pre.sh_sourceCode .sh_number { color: purple; }                             /* literal numbers */
+pre.sh_sourceCode .sh_preproc { color: #00008B; font-weight: bold; }       /* e.g., #include, import */
+pre.sh_sourceCode .sh_symbol { color: blue; }                            /* e.g., *, + */
+pre.sh_sourceCode .sh_function { color: black; font-weight: bold; }         /* function calls and declarations */
+pre.sh_sourceCode .sh_cbracket { color: red; }                              /* block brackets (e.g., {, }) */
+pre.sh_sourceCode .sh_todo { font-weight: bold; background-color: #00FFFF; }   /* TODO and FIXME */
+
+/* Predefined variables and functions (for instance glsl) */
+pre.sh_sourceCode .sh_predef_var { color: #00008B; }
+pre.sh_sourceCode .sh_predef_func { color: #00008B; font-weight: bold; }
+
+/* for OOP */
+pre.sh_sourceCode .sh_classname { color: teal; }
+
+/* line numbers (not yet implemented) */
+pre.sh_sourceCode .sh_linenum { display: none; }
+
+/* Internet related */
+pre.sh_sourceCode .sh_url { color: blue; text-decoration: underline; font-family: monospace; }
+
+/* for ChangeLog and Log files */
+pre.sh_sourceCode .sh_date { color: blue; font-weight: bold; }
+pre.sh_sourceCode .sh_time, pre.sh_sourceCode .sh_file { color: #00008B; font-weight: bold; }
+pre.sh_sourceCode .sh_ip, pre.sh_sourceCode .sh_name { color: #006400; }
+
+/* for Prolog, Perl... */
+pre.sh_sourceCode .sh_variable { color: #006400; }
+
+/* for LaTeX */
+pre.sh_sourceCode .sh_italics { color: #006400; font-style: italic; }
+pre.sh_sourceCode .sh_bold { color: #006400; font-weight: bold; }
+pre.sh_sourceCode .sh_underline { color: #006400; text-decoration: underline; }
+pre.sh_sourceCode .sh_fixed { color: green; font-family: monospace; }
+pre.sh_sourceCode .sh_argument { color: #006400; }
+pre.sh_sourceCode .sh_optionalargument { color: purple; }
+pre.sh_sourceCode .sh_math { color: orange; }
+pre.sh_sourceCode .sh_bibtex { color: blue; }
+
+/* for diffs */
+pre.sh_sourceCode .sh_oldfile { color: orange; }
+pre.sh_sourceCode .sh_newfile { color: #006400; }
+pre.sh_sourceCode .sh_difflines { color: blue; }
+
+/* for css */
+pre.sh_sourceCode .sh_selector { color: purple; }
+pre.sh_sourceCode .sh_property { color: blue; }
+pre.sh_sourceCode .sh_value { color: #006400; font-style: italic; }
+
+/* other */
+pre.sh_sourceCode .sh_section { color: black; font-weight: bold; }
+pre.sh_sourceCode .sh_paren { color: red; }
+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 id="StayFocusd-infobar" style="display: none; top: 1792px; "><img src="chrome-extension://laankejkbhbdhmipfmgcngdelahlfoji/img/eye_19x19_red.png"><span id="StayFocusd-infobar-msg"></span><span id="StayFocusd-infobar-links"><a href="#" id="StayFocusd-infobar-never-show">hide forever</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#" id="StayFocusd-infobar-hide">hide once</a></span></div><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-04-january-2012"><acronym title="World Wide Web Consortium">W3C</acronym> Editor's Draft 04 January 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>
+    <div id="abstract" class="introductory section"><h2>Abstract</h2>
+      <p>
+      This specification defines a service discovery and light-weight RPC
+      mechanism for web apps called Web Intents.
+      </p>
+      <p>
+      This document defines DOM interfaces and markup used by client and service
+      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></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-object" class="tocxref"><span class="secno">3.1 </span>Intent object</a><ul class="toc"><li class="tocline"><a href="#attributes" class="tocxref"><span class="secno">3.1.1 </span>Attributes</a></li><li class="tocline"><a href="#methods" class="tocxref"><span class="secno">3.1.2 </span>Methods</a></li></ul></li><li class="tocline"><a href="#invocation-api" class="tocxref"><span class="secno">3.2 </span>Invocation API</a><ul class="toc"><li class="tocline"><a href="#methods-1" class="tocxref"><span class="secno">3.2.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#delivery-and-response-api" class="tocxref"><span class="secno">3.3 </span>Delivery and Response API</a><ul class="toc"><li class="tocline"><a href="#attributes-1" class="tocxref"><span class="secno">3.3.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#registration-markup" class="tocxref"><span class="secno">3.4 </span>Registration Markup</a></li></ul></li><li class="tocline"><a href="#user-agent-behavior" class="tocxref"><span class="secno">4. </span>User Agent Behavior</a></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>
+      <p>
+        Web Intents enable rich integration between web
+        applications. Increasingly, services available on the web have a need to
+        pass rich data back and forth as they do their jobs. Web Intents
+        facilitate this interchange while maintaining the kind of loose coupling
+        and open architecture that has proven so advantageous for the web. They
+        exist purely client-side, mediated through the User Agent, allowing the
+        user a great degree of control over the security and privacy of the
+        exchanged data.
+      </p>
+      <p>
+        An Intent is an action to be performed by a service.  It consists of an
+        "action" string which tells the service what kind of activity the user
+        expects to be performed (i.e. "share" or "edit"), a "type" string which
+        specifies the data payload the service should expect, and the data payload
+        itself.
+      </p>
+      <p>
+        A client requests an Intent be handled, the User Agent allows the
+        user to select which service to use, and the service performs the action
+        of the Intent, possibly using data passed as input in the Intent.  
+        The service may return data as output to the client.
+      </p>
+      <p>
+        Web Intents provides a declarative syntax that allows
+        services to list the Intents they handle. Using this method, pages mark
+        up what actions they can handle what data types they expect.
+      </p>
+      <div id="example" class="section">
+      <h3><span class="secno">1.1 </span>Example</h3>
+      <p>
+      Suppose there is a photo hosting application. This application allows a
+      user to select images to be shared, edit those images, and then share them
+      with friends. The application is built around making photos available to
+      users, but has no built-in editor or sharing interface. But beside each
+      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(...));
+  navigator.startActivity(intent, imageEdited);
+});
+
+function imageEdited(data) {
+  document.getElementById('image').src = data;
+}</pre>
+      <p>
+      This assumes an image editor exists which can consume images specified as
+      URIs (including data URIs), and produces a result in the same format. For
+      instance, one such editor might be a meme-maker—an application allowing
+      the user to place humorous messages on top of pictures they take.
+      </p>
+      <p>
+      Now that a picture has been selected and meme text added, the user
+      undoubtedly wants to share the result with friends. Again, the photo
+      hosting application may not have built-in sharing capabilities, but by
+      adding a "share" button near images, and with this kind of accompany 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(...));
+  navigator.startActivity(intent);
+});</pre>
+      <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 can utilize 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 at any given time. The photo
+      hosting application isn't controlling which such application any given
+      user uses, it is loosely coupled with such appliations 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>
+      <p>
+      On the service page, it needs to register itself as a service, and
+      handle the incoming intent data, possibly producing a response. That is
+      done with this kind of code:
+      </p>
+      <pre class="example">&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;Image Meme Editor&lt;/title&gt;
+&lt;/head&gt;
+&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() {
+    if (window.intent) {
+      setImageContentURI(window.intent.data);
+    }
+  }
+
+  document.getElementById('save-button').onclick = function() {
+    window.intent.postReply(getImageDataURI(...));
+  }
+&lt;/script&gt;</pre>
+      <p>
+      The assumed pieces here are functions which deal with the application's
+      image display, for instance putting the image into a canvas and taking it back out
+      again as a data URI.
+      </p>
+    </div>
+    </div>
+
+    <div id="terminology" class="section">
+      <!--OddPage--><h2><span class="secno">2. </span>Terminology</h2>
+      <p>
+        An <dfn id="dfn-intent">Intent</dfn> is an action with accompanying data, which is to be
+        performed by a Service of the user's choosing.
+      </p>
+      <div id="actors" class="section">
+      <h3><span class="secno">2.1 </span>Actors</h3>
+      <p>
+        A <dfn id="dfn-client">Client</dfn> is a web page which creates an intent and invokes
+        it.
+      </p>
+      <p>
+        A <dfn id="dfn-service">Service</dfn> is a web page which can handle a Web Intent,
+        possibly returning a piece of data to the calling Client page.
+      </p>
+      </div>
+      <div id="life-cycle-of-intents" class="section">
+      <h3><span class="secno">2.2 </span>Life cycle of intents</h3>
+      <p>
+        <dfn id="dfn-registration">Registration</dfn> is how a Service page informs the User Agent
+        that it is capable of handling Intents.
+      </p>
+      <p>
+        <dfn id="dfn-invocation">Invocation</dfn> refers to the API by which a Client page
+        dispatches an intent for handling.
+      </p>
+      <p>
+        <dfn id="dfn-selection">Selection</dfn> is the mechanism in which the User Agent decides
+        which service will handle a particular intent.
+      </p>
+      <p>
+        <dfn id="dfn-delivery">Delivery</dfn> is the means by which the User Agent hands intent
+        data to a Service page for handling.
+      </p>
+      <p>
+        <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>
+      </div>
+    </div>
+    
+    <div id="api-description" class="section">
+    <!--OddPage--><h2><span class="secno">3. </span>API Description</h2>
+
+    <div id="intent-object" class="section">
+    <h3><span class="secno">3.1 </span>Intent object</h3>
+      <p>
+      The client requests a specific intent handler and optionally sends in a callback to
+      receive data from the service.  The browser mediates the service selection by 
+      enumerating the list of registered services that match the requested
+      intent action and type.  The user is then able to select which service should handle the intent.
+      </p>
+      <pre class="idl"><span class="idlInterface" id="idl-def-Intent">[<span class="extAttr">Constructor(in string action, in string type, in any data)</span>]
+interface <span class="idlInterfaceID">Intent</span> {
+<span class="idlAttribute">    readonly attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-Intent-action">action</a></span>;</span>
+<span class="idlAttribute">    readonly attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-Intent-type">type</a></span>;</span>
+<span class="idlAttribute">    readonly attribute <span class="idlAttrType"><a>any</a></span>       <span class="idlAttrName"><a href="#widl-Intent-data">data</a></span>;</span>
+<span class="idlMethod">    <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-Intent-postResult-void-any-data">postResult</a></span> (<span class="idlParam"><span class="idlParamType"><a>any</a></span> <span class="idlParamName">data</span></span>);</span>
+<span class="idlMethod">    <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-Intent-postFailure-void-any-data">postFailure</a></span> (<span class="idlParam"><span class="idlParamType"><a>any</a></span> <span class="idlParamName">data</span></span>);</span>
+};</span>
+</pre><div id="attributes" class="section"><h4><span class="secno">3.1.1 </span>Attributes</h4><dl class="attributes"><dt id="widl-Intent-action"><code>action</code> of type <span class="idlAttrType"><a>DOMString</a></span>, readonly</dt><dd>This is an opaque string. Chosen strings <em class="rfc2119" title="should">should</em> be namespaced by a
+        URL namespace convention.<div><em>No exceptions.</em></div></dd><dt id="widl-Intent-data"><code>data</code> of type <span class="idlAttrType"><a>any</a></span>, readonly</dt><dd>The object used <em class="rfc2119" title="must">must</em> be a Transferable or an object upon which the
+        structured clone algorithm can be performed.<div><em>No exceptions.</em></div></dd><dt id="widl-Intent-type"><code>type</code> of type <span class="idlAttrType"><a>DOMString</a></span>, readonly</dt><dd>The data payload <em class="rfc2119" title="must">must</em> be described by the type parameter.
+        Recommended type strings are MIME strings and self-documenting urls.<div><em>No exceptions.</em></div></dd></dl></div><div id="methods" class="section"><h4><span class="secno">3.1.2 </span>Methods</h4><dl class="methods"><dt id="widl-Intent-postFailure-void-any-data"><code>postFailure</code></dt><dd>The payload passed to this method will be returned to the onFailure
+        callback registered by the client page in the startActivity call (if any).
+        The playload must be a Transferable object upon which the structured
+        clone algorithm can be performed.<table class="parameters"><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">data</td><td class="prmType"><code><a>any</a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc"></td></tr></table><div><em>No exceptions.</em></div><div><em>Return type: </em><code><a>void</a></code></div></dd><dt id="widl-Intent-postResult-void-any-data"><code>postResult</code></dt><dd>The payload passed to this method will be returned to the onSuccess
+        callback registered by the client page in the startActivity call (if any).
+        The payload must be a Transferable object [<cite><a class="bibref" rel="biblioentry" href="#bib-HTML5">HTML5</a></cite>] upon which the structured
+        clone algorithm can be performed.<table class="parameters"><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">data</td><td class="prmType"><code><a>any</a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc"></td></tr></table><div><em>No exceptions.</em></div><div><em>Return type: </em><code><a>void</a></code></div></dd></dl></div>
+      </div>
+
+    <div id="invocation-api" class="section">
+    <h3><span class="secno">3.2 </span>Invocation API</h3>
+    <p>
+    The client invokes an intent by constructing an object as above and invoking
+    a <code>navigator.startActivity</code> function on it. The callbacks are invoked when
+    the intent has been handled.
+    </p>
+    <pre class="idl"><span class="idlInterface" id="idl-def-Intents">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">Intents</span> {
+<span class="idlMethod">    <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-Intents-startActivity-void-Intent-intent--onSuccess--onFailure">startActivity</a></span> (<span class="idlParam"><span class="idlParamType"><a href="#idl-def-Intent" class="idlType"><code>Intent</code></a></span> <span class="idlParamName">intent</span></span>, <span class="idlParam">optional <span class="idlParamType"><a></a></span> <span class="idlParamName">onSuccess</span></span>, <span class="idlParam">optional <span class="idlParamType"><a></a></span> <span class="idlParamName">onFailure</span></span>);</span>
+};</span>
+</pre><div id="methods-1" class="section"><h4><span class="secno">3.2.1 </span>Methods</h4><dl class="methods"><dt id="widl-Intents-startActivity-void-Intent-intent--onSuccess--onFailure"><code>startActivity</code></dt><dd>Called to invoke an intent service. The intent object is described
+      above. The onSuccess handler, if any, will be called by the user agent if
+      the service is dispatched, processes the intent, and calls postResult on
+      the intent object it receives. The handler will be invoked with one
+      parameter: the data received from the service.
+      The onFailure handler, if any, will be called by the user agent if
+      the service cannot be dispatched, if the user aborts the selection
+      process, or if a service was chosen, received the intent, processes the intent,
+      and calls postFailure on the intent object it receives. The handler will be invoked with one
+      parameter: the data received from the service.
+      <table class="parameters"><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">intent</td><td class="prmType"><code><a href="#idl-def-Intent" class="idlType"><code>Intent</code></a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc"></td></tr><tr><td class="prmName">onSuccess</td><td class="prmType"><code><a></a></code></td><td class="prmNullFalse">✘</td><td class="prmOptTrue">✔</td><td class="prmDesc"></td></tr><tr><td class="prmName">onFailure</td><td class="prmType"><code><a></a></code></td><td class="prmNullFalse">✘</td><td class="prmOptTrue">✔</td><td class="prmDesc"></td></tr></table><div><em>No exceptions.</em></div><div><em>Return type: </em><code><a>void</a></code></div></dd></dl></div>
+    <p>
+    The invocation API is implemented by the <code>window.navigator</code> object.
+    </p>
+    <pre class="idl"><span class="idlImplements"><a>Navigator</a> implements <a href="#idl-def-Intents" class="idlType"><code>Intents</code></a>;</span></pre><div class="idlImplementsDesc"><p>All instances of the <code><a>Navigator</a></code> type are defined to also implement the <a href="#idl-def-Intents" class="idlType"><code>Intents</code></a> interface.</p></div>
+    </div>
+
+    <div id="delivery-and-response-api" class="section">
+    <h3><span class="secno">3.3 </span>Delivery and Response API</h3>
+    <p>
+    When the user agent loads a service page to handle an intent invocation, it
+    will place a <code>window.intent</code> object in the scope of the page.
+    </p>
+
+    <pre class="idl"><span class="idlInterface" id="idl-def-IntentProvider">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">IntentProvider</span> {
+<span class="idlAttribute">    readonly attribute <span class="idlAttrType"><a href="#idl-def-Intent" class="idlType"><code>Intent</code></a></span> <span class="idlAttrName"><a href="#widl-IntentProvider-intent">intent</a></span>;</span>
+};</span>
+</pre><div id="attributes-1" class="section"><h4><span class="secno">3.3.1 </span>Attributes</h4><dl class="attributes"><dt id="widl-IntentProvider-intent"><code>intent</code> of type <span class="idlAttrType"><a href="#idl-def-Intent" class="idlType"><code>Intent</code></a></span>, readonly</dt><dd>The intent object as delivered to the service page.<div><em>No exceptions.</em></div></dd></dl></div>
+    <pre class="idl"><span class="idlImplements"><a>DOMWindow</a> implements <a href="#idl-def-IntentProvider" class="idlType"><code>IntentProvider</code></a>;</span></pre><div class="idlImplementsDesc"><p>All instances of the <code><a>DOMWindow</a></code> type are defined to also implement the <a href="#idl-def-IntentProvider" class="idlType"><code>IntentProvider</code></a> interface.</p></div>
+
+    <p>
+    This object will only be made available to service pages when they are
+    loaded in the context of an intent invocation. In other situations, the User
+    Agent <em class="rfc2119" title="must not">must not</em> make <code>DOMWindow</code> implement
+    <code>IntentProvider</code>.
+    </p>
+    <p>
+    The <code>window.intent</code> object <em class="rfc2119" title="must">must</em> be made available across
+    same-origin redirects of the service page. It <em class="rfc2119" title="must not">must not</em> be available if
+    redirects cross a same-origin boundary.
+    </p>
+    <p>
+    So the following redirect sequence
+    will work: http://example.com/service to http://example.com/login back to
+    http://example.com/service. In this case, the <code>window.intent</code>
+    data would be available to all three page loads.
+    </p>
+    <p>
+    This will also work: http://example.com/service to
+    http://example.com/newservice. In this sequence, the <code>window.intent</code>
+    data is available to both pages.
+    </p>
+    <p>
+    In this sequence, the <code>window.intent</code> is only available to
+    example.com pages: http://example.com/service to http://login.example.com
+    and back to http://example.com/service. The intent data is not provided to
+    http://login.example.com
+    </p>
+    <p>
+    In other words, in the browsing context in which the intent is originally
+    delivered, the intent data <em class="rfc2119" title="must">must</em> be available to pages in a redirect sequence
+    when they are in the same origin as that to which it was originally
+    delivered, but <em class="rfc2119" title="must not">must not</em> be available to any other pages. If the user navigates to a
+    different URL, even within the same origin, the intent data <em class="rfc2119" title="must not">must not</em> be made
+    available.
+    </p>
+    </div>
+
+    <div id="registration-markup" class="section">
+    <h3><span class="secno">3.4 </span>Registration Markup</h3>
+    <p>
+    Service pages declaratively mark themselves as providing handling
+    functionality for particular intent actions and types. A User Agent <em class="rfc2119" title="must not">must not</em>
+    deliver an intent to a page which is not described in its metadata
+    describing what intents it can handle. The algorithm for matching intents is
+    that the action string provided in invocation and registration must match
+    exactly, and the type strings must match exactly except for possible [<cite><a class="bibref" rel="biblioentry" href="#bib-RFC2046">RFC2046</a></cite>]
+    MIME subtype wildcards.
+    </p><pre>    &lt;!ENTITY % Disposition "{window|inline}"&gt;
+
+    &lt;!ELEMENT INTENT - O EMPTY               -- a Web Intents registration →
+    &lt;!ATTLIST INTENT
+    action      %URI;               #<em class="rfc2119" title="required">required</em>   -- URI specifying action --
+    type        %ContentTypes,%URI; #<em class="rfc2119" title="required">required</em>   -- advisory content type --
+    href        %URI;               #IMPLIED    -- URI for linked resource --
+    title       %i18n;              #IMPLIED    -- service title --
+    disposition %Disposition        "window"    -- where the service is created --
+    &gt;
+    </pre>
+    <p></p>
+    <p>
+    The <code>dispositon</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 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.
+    </p>
+    <p>
+    The User Agent <em class="rfc2119" title="should">should</em> discard any registration markup which is not
+    same-origin.
+    </p>
+    </div>
+
+    </div>
+
+    <div id="user-agent-behavior" class="section">
+      <!--OddPage--><h2><span class="secno">4. </span>User Agent Behavior</h2>
+      <p>
+      When the User Agent loads a page with registration markup, it <em class="rfc2119" title="should">should</em> allow
+      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, but 
+      </p>
+      <p>
+      The User Agent <em class="rfc2119" title="must not">must not</em> allow web pages the ability to discover passively
+      which services the user has configured to handler particular intents,
+      or any intents, whether by enumeration or exact query. There may be
+      mechanisms for the user to actively grant this information to web pages,
+      but it <em class="rfc2119" title="must not">must not</em> be made available passively.
+      </p>
+      <p>
+      The User Agent <em class="rfc2119" title="may">may</em> provide additional mechanisms for web intents service
+      registration. For example, by external applications, through a separate
+      API, as a result of a permissions bundle in a downloaded web application,
+      or pre-bundled.
+      </p>
+      <p>
+      For intents invoked by client web applications, the User Agent <em class="rfc2119" title="must">must</em>
+      require that such invocations be directly caused by a user gesture. User
+      Agents <em class="rfc2119" title="may">may</em> also dispatch intents invoked through other mechanisms. For
+      example, hardware events (i.e. plugging in a USB storage device) or
+      software events (i.e. downloading a file).
+      </p>
+      <p>
+      When a client page invokes an intent, the User Agent dispatches it to a
+      chosen service. The details of this process are left up to the User Agent.
+      The User Agent may dispatch intents to web application service pages,
+      helper applications, proxy them through connections to other hardware,
+      etc. In general, though, the User Agent <em class="rfc2119" title="must">must</em> provide a way for the user
+      to configure which intents are delivered to which services. This process
+      <em class="rfc2119" title="should">should</em> be configurable on a per-invocation basis for most intents,
+      although defaulting rules, as long as they are configurable by the user,
+      are expected to mean that the User Agent need not present specific UI
+      controls on every invocation.
+      </p>
+      <p>
+      When the User Agent delivers an intent payload to a web application, it
+      <em class="rfc2119" title="must">must</em> make the <code>window.intent</code> object available as the document
+      is loaded and parsed, so that scripts on the page may process the intent
+      data as they load. User agents <em class="rfc2119" title="must not">must not</em> place a <code>window.intent</code>
+      object in the scope of pages which do not have registration metadata
+      declaring themselves as intent handlers. This means that any use of
+      <code>window.intent</code> in pages which do not explicitly declare
+      themselves as web intents handlers <em class="rfc2119" title="must not">must not</em> be overwritten by the User
+      Agent.
+      </p>
+      <p>
+      When a new context is opened for the service page, the User Agent <em class="rfc2119" title="must">must</em>
+      connect the <code>postResult</code> and <code>postFailure</code> methods
+      of the <code>window.intent</code> object so that they return their
+      serializable payloads to the registered handlers the User Agent received
+      in the invoking <code>navigator.startActivity</code> call. If the user
+      closes the service page before it has responded, the User Agent <em class="rfc2119" title="should">should</em>
+      invoke the <code>onFailure</code> callback in the client page invocation,
+      if any. If the user cancels a service selection UI control the User Agent
+      displays in the course of dispatching an intent, the User Agent <em class="rfc2119" title="should">should</em>
+      invoke the <code>onFailure</code> callback in the client page invocation,
+      if any.
+      </p>
+      <p>
+      The User Agent <em class="rfc2119" title="should">should</em> allow any serializable object to be passed between
+      client to service and back from service to client. This includes Blobs [<cite><a class="bibref" rel="biblioentry" href="#bib-BLOB">BLOB</a></cite>],
+      MessagePorts, etc. The User Agent <em class="rfc2119" title="may">may</em> inspect the payload of intents and
+      present specialized UI corresponding to well-known intent types. The User
+      Agent <em class="rfc2119" title="must not">must not</em> categorically prohibit dispatch of unknown intent types.
+      This is not meant to prohibit the User Agent from performing filtering
+      functions on intents, such as suppressing unwanted intent invocations,
+      intents as used as an attack vector, and other mis-use.
+      </p>
+      <p>
+      In the same way User Agents <em class="rfc2119" title="may">may</em> dispatch intents caused by non-web
+      mechanisms to web applications, User Agents <em class="rfc2119" title="may">may</em> dispatch intents invoked by
+      web applications to handlers which are not web applications. In those
+      cases, the User Agent <em class="rfc2119" title="should">should</em> provide a public API mechanism for external
+      connection to the intent dispatch mechanism selected. For example, the
+      User Agent may be able to run an Operating System level command in
+      response to an intent. The User Agent could provide a configuration
+      interface such that the user can install handler applications, and a
+      documented format in which intent payload data is translated to that
+      application. In these cases, the requirement that User Agents <em class="rfc2119" title="should">should</em> pass
+      any serializable object may need to be relaxed for some kinds of handlers.
+      </p>
+      <p>
+      User Agents <em class="rfc2119" title="may">may</em> also dispatch intents based on data-specific controls
+      derived from microdata in pages. For instance, if the user has services
+      registered which handle text/vcard, then the User Agent may provide the
+      user with a way to invoke particular intents that consume such data as it
+      detects it in web pages.
+      </p>
+      <p>
+      If the user has no services registered for a particular type of intent,
+      the User Agent <em class="rfc2119" title="may">may</em> display options from other sources of data about
+      services it knows can handle that intent type so that the user can
+      complete the activity.
+      </p>
+    </div>
+    
+    <div id="use-cases-and-requirements" class="section">
+      <!--OddPage--><h2><span class="secno">5. </span>Use Cases and Requirements</h2>
+      <div id="sharing" class="section">
+        <h3><span class="secno">5.1 </span>Sharing</h3>
+        <p>
+        Web Intents should be useful to enable to share content as they
+        encounter it on web pages. Whether by implicit controls made available
+        by the User Agent or explicit controls placed in web pages, Web Intents
+        should handle the use case of a user wishing to share a page as a whole,
+        or particular content on the page. The user should be able to select the
+        sharing application of choice to accomplish this task.
+        </p>
+      </div>
+      <div id="integration-with-local-web-apps" class="section">
+        <h3><span class="secno">5.2 </span>Integration with local web apps</h3>
+        <p>
+        Local web apps should be able to invoke and handle intents.
+        </p>
+      </div>
+      <div id="persistent-connections" class="section">
+        <h3><span class="secno">5.3 </span>Persistent connections</h3>
+        <p>
+        Web Intents invocations are modeled on RPC, but there are times when a
+        persistent connection is desired. There are a few different methods that
+        Web Intents should support for this. One is returning URIs which can be
+        loaded by clients in an iframe and then messaged using other web
+        platform features. Another is returning a defaulting token which the
+        client can then use to target other intents directly at a known target.
+        A third is returning a MessagePort to the client which can be used for
+        subsequent communication.
+        </p>
+        <p>
+        In these cases, Web Intents is acting as a way for the user to attach a
+        particular client page to a persistently-available service. It is up to
+        the particular types of intents to describe exactly how this should
+        work. i.e. whether the connection is permanent or temporary, whether
+        tokens are user-consumable or opaque.
+        </p>
+      </div>
+      <div id="integration-with-external-applications" class="section">
+        <h3><span class="secno">5.4 </span>Integration with external applications</h3>
+        <p>
+        It should be possible for intents to be routed to external helper
+        applications. For instance, a locally available photo editing tool could
+        be configured to interact with the browser to handle an image edit
+        intent. Or the browser could discover home networking equipment on the
+        local network and make it available for particular types of intents.
+        </p>
+      </div>
+      <div id="translating-existing-web-platform-features-to-intents" class="section">
+        <h3><span class="secno">5.5 </span>Translating existing web platform features to intents</h3>
+        <p>
+        It should be possible to translate a few existing features to use Web
+        Intents, thus putting web applications on the same footing as local
+        resources. For instance, it should be possible for the User Agent to
+        translate file selection controls to intents such that the use can
+        choose to upload a file from a cloud storage locker as well as from
+        local disk. In these cases, the User Agent may supply built-in intent
+        handlers corresponding to existing functionality.
+        </p>
+        <p>
+        Another use case is allowing web applications to function as plug-ins.
+        For example, a link returning a resource of a type which the user agent
+        doesn't know how to display can be translated into an intent which
+        allows the user to configure a web application capable of reading that
+        resource type and viewing it. This would let web apps function as
+        plug-ins.
+        </p>
+      </div>
+      <div id="authentication" class="section">
+        <h3><span class="secno">5.6 </span>Authentication</h3>
+        <p>
+        It is expected that many services for Web Intents will be ones the user
+        has an account with. The service should be able to use standard login
+        mechanisms in the context the User Agent places them within to perform
+        authentication. That is, the service page handling an intent should be
+        loaded with the same cookie jar and access to localStorage, etc. with
+        which it runs in a normal browsing context. Intent data should be
+        persisted by the User Agent across login redirects.
+        </p>
+      </div>
+    </div>
+    
+    <div class="appendix section" id="acknowledgements">
+      <!--OddPage--><h2><span class="secno">A. </span>Acknowledgements</h2>
+      <p>
+        Many thanks to Robin Berjon for making our lives so much easier with his cool tool.
+      </p>
+      <p>
+        See also <a href="http://www.webintents.org/">webintents.org</a> for
+        more examples and a sample Javascript implementation of Web Intents.
+      </p>
+    </div>
+  
+
+
+<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-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>