adding diff for publication
authorFrederick Hirsch <frederick.hirsch@nokia.com>
Tue, 21 May 2013 17:06:55 -0400
changeset 34 1802116a0fc6
parent 33 2fa42606892c
child 35 55d7fc79cd9a
adding diff for publication
spec/Overview-diff.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spec/Overview-diff.html	Tue May 21 17:06:55 2013 -0400
@@ -0,0 +1,8094 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Web Intents</title>
+<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
+<script src='https://www.w3.org/Tools/respec/respec-w3c-common' class='remove' async="" type="text/javascript">
+</script>
+<script class='remove' type="text/javascript">
+//<![CDATA[
+      var respecConfig = {
+          specStatus:           "WG-NOTE",
+          shortName:            "web-intents",
+          publishDate:  "2013-05-23",
+          copyrightStart: "2011",
+          previousPublishDate:  "2012-06-26",
+          previousMaturity:  "WD",
+          edDraftURI:           "https://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview-respec.html",
+          editors:  [
+              { name: "Greg Billock",
+                company: "Google", companyURL: "http://google.com/" },
+              { name: "James Hawkins",
+                company: "Google", companyURL: "http://google.com/" },
+              { name: "Paul Kinlan",
+                company: "Google", companyURL: "http://google.com/" },
+          ],
+          wg:           ["Device Applications (DAP) Working Group", "Web Applications (WebApps) Working Group"],
+          wgPublicList: "public-web-intents",
+          wgURI:        ["http://www.w3.org/2009/dap/", "http://www.w3.org/2008/webapps/"],
+          wgPatentURI:  ["http://www.w3.org/2004/01/pp-impl/43696/status", "http://www.w3.org/2004/01/pp-impl/42538/status"]
+      };
+//]]>
+</script>
+<style type='text/css'>
+.diff-old-a {
+  font-size: smaller;
+  color: red;
+}
+
+.diff-new { background-color: yellow; }
+.diff-chg { background-color: lime; }
+.diff-new:before,
+.diff-new:after
+    { content: "\2191" }
+.diff-chg:before, .diff-chg:after
+    { content: "\2195" }
+.diff-old { text-decoration: line-through; background-color: #FBB; }
+.diff-old:before,
+.diff-old:after
+    { content: "\2193" }
+:focus { border: thin red solid}
+</style>
+</head>
+<body>
+<del class="diff-old">Web
+Intents
+W3C
+Working
+Draft
+26
+June
+2012
+This
+version:
+http://www.w3.org/TR/2012/WD-web-intents-20120626/
+Latest
+published
+version:
+http://www.w3.org/TR/web-intents/
+Latest
+editor's
+draft:
+https://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview-respec.html
+Editors:
+Greg
+Billock
+,
+Google
+James
+Hawkins
+,
+Google
+Paul
+Kinlan
+,
+Google
+Copyright

+2011-2012
+W3C

+(
+MIT
+,
+ERCIM
+,
+Keio
+),
+All
+Rights
+Reserved.
+W3C
+liability
+,
+trademark
+and
+document
+use
+rules
+apply.
+Abstract
+</del>
+<section id='abstract'>
+<p>
+This
+<del class="diff-old">specification
+</del>
+<ins class="diff-chg">informative
+Working
+Group
+Note
+</ins>
+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>
+<del class="diff-old">Status
+of
+This
+Document
+</del>
+</section>
+<section id='sotd'>
+<p>
+<del class="diff-old">This
+section
+describes
+the
+status
+of
+this
+document
+at
+the
+time
+of
+its
+publication.
+Other
+documents
+may
+supersede
+this
+document.
+A
+list
+of
+current
+W3C
+publications
+and
+the
+latest
+revision
+of
+this
+technical
+report
+can
+be
+found
+in
+the
+</del>
+<del class="diff-old">W3C
+technical
+reports
+index
+at
+http://www.w3.org/TR/.
+</del>
+</p>
+This
+document
+<del class="diff-old">is
+</del>
+<ins class="diff-chg">was
+</ins>
+produced
+by
+<del class="diff-old">a
+</del>
+the
+<a href="http://www.w3.org/2009/dap/#webintents">
+Web
+Intents
+Task
+<del class="diff-old">Force,
+which
+is
+jointly
+operated
+by
+the
+DAP
+and
+WebApps
+Working
+Groups.
+The
+email
+address
+provided
+for
+feedback
+is
+that
+</del>
+<ins class="diff-chg">Force
+</ins></a>,<ins class="diff-chg">
+a
+joint
+activity
+</ins>
+of
+the
+<del class="diff-old">Task
+Force,
+where
+all
+feedback
+is
+welcome.
+This
+document
+was
+published
+by
+the
+</del>
+<a href="http://www.w3.org/2009/dap/">
+Device
+<del class="diff-old">Applications
+(DAP)
+</del>
+<ins class="diff-chg">APIs
+</ins>
+Working
+Group
+</a>
+and
+<ins class="diff-chg">the
+</ins><a href="http://www.w3.org/2008/webapps">
+Web
+Applications
+<del class="diff-old">(WebApps)
+</del>
+Working
+Group
+<del class="diff-old">as
+a
+First
+Public
+Working
+Draft.
+This
+document
+is
+intended
+</del>
+</a>.
+<ins class="diff-chg">Members
+of
+these
+working
+groups
+have
+agreed
+not
+</ins>
+to
+<del class="diff-old">become
+</del>
+<ins class="diff-chg">progress
+the
+Web
+Intents
+specification
+further
+as
+</ins>
+a
+<del class="diff-old">W3C
+Recommendation.
+If
+you
+wish
+to
+make
+comments
+regarding
+this
+</del>
+<ins class="diff-chg">Recommendation
+track
+</ins>
+document,
+<del class="diff-old">please
+send
+them
+</del>
+<ins class="diff-chg">electing
+</ins>
+to
+<del class="diff-old">public-web-intents@w3.org
+(
+subscribe
+,
+archives
+).
+All
+feedback
+is
+welcome.
+Publication
+</del>
+<ins class="diff-chg">publish
+it
+</ins>
+as
+<del class="diff-old">a
+</del>
+<ins class="diff-chg">an
+informative
+</ins>
+Working
+<del class="diff-old">Draft
+does
+</del>
+<ins class="diff-chg">Group
+Note.
+The
+Working
+Groups
+have
+</ins>
+not
+<del class="diff-old">imply
+endorsement
+by
+</del>
+<ins class="diff-chg">performed
+interop
+testing
+on
+</ins>
+the
+<del class="diff-old">W3C
+Membership.
+This
+</del>
+<ins class="diff-chg">material
+in
+this
+document.
+Implementers
+are
+cautioned
+that
+this
+material
+</ins>
+is
+<del class="diff-old">a
+draft
+document
+</del>
+<ins class="diff-chg">subject
+to
+change
+</ins>
+and
+<ins class="diff-new">that
+an
+alternative
+design
+</ins>
+may
+be
+<del class="diff-old">updated,
+replaced
+or
+obsoleted
+by
+other
+documents
+at
+any
+time.
+It
+is
+inappropriate
+to
+cite
+this
+document
+as
+other
+than
+work
+</del>
+<ins class="diff-chg">pursued
+</ins>
+in
+<del class="diff-old">progress.
+</del>
+<ins class="diff-chg">the
+future.
+</ins><p>
+</p>
+<p>
+<del class="diff-old">This
+document
+was
+produced
+by
+a
+group
+operating
+under
+</del>
+<ins class="diff-chg">Changes
+since
+</ins>
+the
+<del class="diff-old">5
+February
+2004
+W3C
+Patent
+Policy
+.
+W3C
+maintains
+a
+public
+list
+of
+any
+patent
+disclosures
+</del>
+<ins class="diff-chg">previous
+version
+include
+clarifications,
+corrections,
+and
+updates
+to
+the
+document
+</ins>
+(
+<del class="diff-old">Device
+Applications
+(DAP)
+Working
+Group
+,
+Web
+Applications
+(WebApps)
+Working
+Group
+</del>
+<a href="Overview-diff.html">
+<ins class="diff-chg">diff
+</ins>
+</a>
+<del class="diff-old">)
+made
+in
+connection
+with
+the
+deliverables
+of
+the
+group;
+that
+page
+also
+includes
+instructions
+</del>
+<ins class="diff-chg">).
+</ins></p><p><ins class="diff-chg">
+The
+email
+address
+provided
+</ins>
+for
+<del class="diff-old">disclosing
+a
+patent.
+An
+individual
+who
+has
+actual
+knowledge
+of
+a
+patent
+which
+the
+individual
+believes
+contains
+Essential
+Claim(s)
+must
+disclose
+the
+information
+in
+accordance
+with
+section
+6
+</del>
+<ins class="diff-chg">feedback
+is
+that
+</ins>
+of
+the
+<del class="diff-old">W3C
+Patent
+Policy
+.
+</del>
+<ins class="diff-chg">Task
+Force,
+where
+all
+feedback
+is
+welcome.
+</ins>
+</p>
+<del class="diff-old">Table
+of
+Contents
+1.
+Introduction
+1.1
+Example
+1.2
+Normative
+parts
+2.
+Terminology
+2.1
+Actors
+2.2
+Life
+cycle
+of
+Intents
+and
+Services
+3.
+API
+Description
+3.1
+Intent
+parameters
+dictionary
+3.1.1
+Dictionary
+IntentParameters
+Members
+3.2
+Intent
+object
+3.2.1
+Attributes
+3.2.2
+Methods
+3.3
+Invocation
+API
+3.3.1
+Methods
+3.4
+Delivery
+and
+Response
+API
+3.4.1
+Attributes
+3.5
+Registration
+Markup
+3.5.1
+Attributes
+4.
+User
+Agent
+Behavior
+4.1
+Explicit
+Intents
+4.2
+Matching
+action
+and
+type
+for
+delivery
+4.3
+Handling
+Service
+suggestions
+from
+Intent
+Invocation
+5.
+Use
+Cases
+and
+Requirements
+5.1
+Sharing
+5.2
+Integration
+with
+local
+web
+apps
+5.3
+Persistent
+connections
+5.4
+Integration
+with
+external
+applications
+5.5
+Translating
+existing
+web
+platform
+features
+to
+intents
+5.6
+Authentication
+6.
+Privacy
+Considerations
+A.
+Acknowledgements
+B.
+References
+B.1
+Normative
+references
+B.2
+Informative
+references
+</del>
+</section>
+<section>
+<h2>
+<del class="diff-old">1.
+</del>
+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
+a
+user-initiated
+action
+delegated
+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
+(e.g.
+"share"
+or
+"edit"),
+a
+"type"
+string
+which
+specifies
+the
+data
+payload
+the
+service
+should
+expect,
+and
+the
+data
+payload
+itself.
+</p>
+<p>
+The
+lifecycle
+of
+an
+Intent
+is
+that
+first,
+a
+client
+requests
+an
+Intent
+be
+handled.
+This
+Intent
+data
+is
+then
+passed
+to
+the
+User
+Agent,
+which
+allows
+the
+user
+to
+select
+which
+of
+potentially
+many
+possible
+services
+to
+use.
+Then
+the
+service
+is
+passed
+the
+Intent
+data
+and
+is
+provided
+a
+UI
+by
+the
+User
+Agent
+in
+which
+to
+perform
+the
+action
+specified
+in
+the
+Intent.
+Finally,
+the
+service
+may
+also
+return
+data
+as
+output
+back
+to
+the
+client.
+</p>
+<p>
+Web
+Intents
+provides
+a
+declarative
+syntax
+that
+allows
+services
+to
+list
+the
+Intents
+they
+handle.
+Using
+this
+method,
+services
+mark
+up
+what
+actions
+they
+can
+handle
+and
+which
+data
+types
+they
+expect.
+</p>
+<section>
+<h3>
+<del class="diff-old">1.1
+</del>
+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>
+<del class="diff-old">      
+  
+                           
+                           
+  navigator
+  document
+}
+</del>
+<pre class="example highlight">
+<ins class="diff-chg">      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);
+      }, false);
+</ins>
+<ins class="diff-new">      function imageEdited(data) {
+        document.getElementById('image').src = data;
+      }
+      
+</ins>
+</pre>
+<p>
+This
+code
+delegates
+image
+editing
+to
+third-party
+applications
+which
+can
+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.
+</p>
+<p>
+Now
+that
+a
+picture
+has
+been
+edited
+in
+the
+selected
+service,
+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
+<b>
+Share
+</b>
+button
+near
+images,
+and
+with
+this
+kind
+of
+accompanying
+code,
+it
+can
+accomplish
+this
+integration:
+</p>
+<del class="diff-old">      
+  
+                           
+                           
+  navigator
+},
+false
+);
+</del>
+<pre class="example highlight">
+<ins class="diff-chg">      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);
+      }, false);
+      
+</ins>
+</pre>
+<p>
+This
+code
+delegates
+sharing
+functionality
+to
+an
+existing
+services
+chosen
+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
+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
+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>
+<p>
+In
+this
+way,
+an
+Intent
+is
+like
+the
+dual
+of
+a
+hyperlink.
+With
+a
+hyperlink,
+the
+source
+page
+specifies
+the
+exact
+URL
+to
+be
+navigated
+to.
+With
+an
+Intent,
+the
+source
+page
+specifies
+the
+nature
+of
+the
+task
+to
+be
+done,
+and
+the
+user
+can
+select
+any
+of
+a
+number
+of
+applications
+to
+be
+used
+to
+complete
+the
+task.
+</p>
+<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
+like
+this:
+</p>
+<del class="diff-old">      
+  window
+    
+      setImageContentURI
+    
+  
+  document
+    window
+  
+&lt;/script&gt;
+</del>
+<pre class="example highlight">
+<ins class="diff-chg">      &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 image/*"&gt;&lt;/intent&gt;
+      &lt;script&gt;
+        window.addEventListener("load", function() {
+          if (window.intent) {
+            setImageContentURI(window.intent.data);
+          }
+        }, false);
+</ins>
+<ins class="diff-new">        document.getElementById('save-button').addEventListener("click", function() {
+          window.intent.postResult(getImageDataURI(...));
+        }, false);
+      &lt;/script&gt;
+      
+</ins>
+</pre>
+<p>
+The
+assumed
+pieces
+here
+(on
+both
+client
+and
+service
+pages)
+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.
+Or
+producing
+the
+public
+URI
+of
+the
+image
+on
+the
+site.
+</p>
+</section>
+<section>
+<h3>
+<del class="diff-old">1.2
+</del>
+Normative
+parts
+</h3>
+<p>
+The
+normative
+parts
+of
+this
+specification
+are
+the
+API
+Description
+and
+the
+User
+Agent
+Behavior
+section.
+All
+other
+parts
+are
+informative.
+</p>
+</section>
+</section>
+<section>
+<h2>
+<del class="diff-old">2.
+</del>
+Terminology
+</h2>
+<p>
+An
+<dfn>
+Intent
+</dfn>
+is
+an
+action
+with
+accompanying
+data,
+which
+is
+to
+be
+performed
+by
+a
+Service
+of
+the
+user's
+choosing.
+</p>
+<section>
+<h3>
+<del class="diff-old">2.1
+</del>
+Actors
+</h3>
+<p>
+A
+web
+page
+which
+creates
+an
+Intent
+and
+invokes
+the
+User
+Agent
+with
+it
+is
+a
+<dfn>
+Client
+</dfn>.
+The
+User
+Agent
+may
+also
+allow
+non-web-page
+sources
+invoke
+Intents.
+For
+instance,
+the
+User
+Agent
+may
+have
+UI
+which
+invokes
+Intents
+delivery,
+or
+may
+register
+for
+external
+OS
+hooks
+which
+trigger
+Intents.
+</p>
+<p>
+A
+web
+page
+which
+can
+handle
+an
+Intent
+is
+a
+<dfn>
+Service
+</dfn>,
+possibly
+returning
+a
+piece
+of
+data
+to
+the
+calling
+Client
+page.
+(Note
+that
+the
+User
+Agent
+may
+have
+ways
+to
+deliver
+Intents
+to
+Services
+which
+are
+not
+web
+pages
+as
+well.
+These
+may
+be
+extension
+APIs,
+plug-in
+helpers,
+external
+OS
+handlers,
+etc.)
+</p>
+</section>
+<section>
+<h3>
+<del class="diff-old">2.2
+</del>
+Life
+cycle
+of
+Intents
+and
+Services
+</h3>
+<p>
+<dfn>
+Registration
+</dfn>
+is
+how
+a
+<del class="diff-old">Service
+</del>
+<ins class="diff-chg">web
+page
+</ins>
+page
+informs
+the
+User
+Agent
+that
+it
+<ins class="diff-new">(or
+another
+same-origin
+Service
+page)
+</ins>
+is
+capable
+of
+handling
+Intents.
+</p>
+<p>
+<dfn>
+Invocation
+</dfn>
+refers
+to
+the
+API
+by
+which
+a
+Client
+page
+dispatches
+an
+Intent
+for
+handling.
+</p>
+<p>
+<dfn>
+Selection
+</dfn>
+is
+the
+mechanism
+in
+which
+the
+User
+Agent
+decides
+which
+Service
+will
+handle
+a
+particular
+Intent.
+</p>
+<p>
+<dfn>
+Delivery
+</dfn>
+is
+the
+means
+by
+which
+the
+User
+Agent
+passes
+an
+Intent
+to
+a
+Service
+page
+for
+handling.
+</p>
+<p>
+<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>
+<section>
+<h2>
+<del class="diff-old">3.
+</del>
+API
+Description
+</h2>
+<section>
+<h3>
+<del class="diff-old">3.1
+</del>
+Intent
+parameters
+dictionary
+</h3>
+<p>
+This
+object
+can
+be
+used
+in
+the
+object-literal
+constructor
+of
+the
+Intent
+object.
+When
+using
+the
+object
+literal
+constructor,
+the
+<b>
+action
+</b>
+and
+<b>
+type
+</b>
+fields
+are
+required;
+all
+others
+are
+optional.
+</p>
+<del class="diff-old">       {
+};
+3.1.1
+Dictionary
+IntentParameters
+Members
+action
+of
+type
+</del>
+<dl title='dictionary IntentParameters' class='idl'>
+<dt>
+DOMString
+<ins class="diff-chg">action
+</ins>
+</dt>
+<dd>
+An
+opaque
+string
+indicating
+the
+action
+type
+of
+the
+intent.
+The
+string
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+be
+empty.
+</dd>
+<del class="diff-old">data
+of
+</del>
+<dt>
+<ins class="diff-chg">DOMString
+</ins>
+type
+<del class="diff-old">any
+</del>
+</dt>
+<dd>
+<ins class="diff-chg">A
+string
+indicating
+the
+type
+of
+the
+data
+payload.
+The
+data
+payload
+MUST
+be
+described
+by
+this
+parameter,
+which
+MUST
+NOT
+be
+empty.
+</ins></dd><dt><ins class="diff-chg">
+any?
+data
+</ins></dt>
+<dd>
+The
+data
+payload
+used
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+be
+an
+object
+upon
+which
+the
+structured
+clone
+algorithm
+can
+be
+performed,
+including
+Transferables.
+</dd>
+<del class="diff-old">extras
+of
+type
+Object
+</del>
+<dt>
+<ins class="diff-chg">sequence&lt;Transferable&gt;?
+transfer
+</ins>
+</dt>
+<dd>
+<del class="diff-old">A
+key-value
+map
+</del>
+<ins class="diff-chg">The
+list
+</ins>
+of
+<del class="diff-old">extra
+metadata
+to
+be
+sent
+with
+</del>
+<ins class="diff-chg">Transferables,
+for
+use
+in
+</ins>
+the
+<del class="diff-old">intent.
+Keys
+and
+values
+are
+strings.
+</del>
+<ins class="diff-chg">structured
+clone
+algorithm.
+</ins>
+</dd>
+<dt>
+<ins class="diff-chg">URL?
+</ins>
+service
+<del class="diff-old">of
+type
+URL
+</del>
+</dt>
+<dd>
+When
+present,
+this
+field
+marks
+the
+intent
+as
+an
+explicit
+intent.
+The
+value
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+be
+an
+absolute
+URL.
+</dd>
+<dt>
+<ins class="diff-chg">sequence&lt;URL&gt;?
+</ins>
+suggestions
+<del class="diff-old">of
+type
+sequence&lt;
+URL
+&gt;
+</del>
+</dt>
+<dd>
+When
+present,
+this
+field
+provides
+a
+list
+of
+<del class="diff-old">(absolute)
+</del>
+suggested
+Service
+<del class="diff-old">URLs
+</del>
+<ins class="diff-chg">URLs,
+each
+</ins>
+of
+which
+<ins class="diff-new">is
+an
+absolute
+URL
+that
+</ins>
+the
+Client
+is
+aware
+<ins class="diff-new">of
+</ins>
+and
+which
+can
+handle
+the
+intent.
+</dd>
+<del class="diff-old">transfer
+of
+type
+sequence&lt;
+Transferable
+&gt;
+The
+list
+of
+Transferables,
+for
+use
+in
+the
+structured
+clone
+algorithm.
+type
+of
+type
+DOMString
+A
+string
+indicating
+the
+type
+of
+the
+data
+payload.
+The
+data
+payload
+must
+be
+described
+by
+this
+parameter,
+which
+must
+not
+be
+empty.
+</del>
+</dl>
+</section>
+<section>
+<h3>
+<del class="diff-old">3.2
+</del>
+Intent
+object
+</h3>
+<p>
+The
+Intent
+object
+models
+a
+particular
+task
+which
+can
+be
+requested
+to
+be
+handled
+by
+Services.
+<del class="diff-old">It
+is
+left
+up
+to
+the
+client
+</del>
+<ins class="diff-chg">A
+Client
+</ins>
+page
+<del class="diff-old">whether
+to
+launch
+</del>
+<ins class="diff-chg">may
+invoke
+</ins>
+multiple
+Intents
+simultaneously.
+Specific
+Intent
+objects
+are
+immutable
+once
+created.
+</p>
+<del class="diff-old">      ]
+interface  {
+};
+3.2.1
+Attributes
+action
+of
+type
+DOMString
+,
+</del>
+<dl title='[Constructor(IntentParameters params),&lt;br&gt; Constructor(DOMString action, DOMString type, optional any data, optional sequence&amp;lt;Transferable&amp;gt; transferList)] interface Intent' class='idl'>
+<dt>
+readonly
+<ins class="diff-new">attribute
+DOMString
+action
+</ins>
+</dt>
+<dd>
+This
+is
+an
+opaque
+string.
+Chosen
+strings
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+be
+namespaced
+by
+a
+URL
+namespace
+convention.
+The
+string
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+be
+empty,
+or
+the
+constructor
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+throw
+an
+exception.
+</dd>
+<dt>
+<ins class="diff-chg">readonly
+attribute
+DOMString
+type
+</ins></dt><dd><ins class="diff-chg">
+The
+</ins>
+data
+<del class="diff-old">of
+</del>
+<ins class="diff-chg">payload
+MUST
+be
+described
+by
+the
+</ins>
+type
+<del class="diff-old">any
+,
+</del>
+<ins class="diff-chg">parameter.
+Recommended
+type
+strings
+are
+MIME
+strings
+or
+self-documenting
+urls.
+The
+string
+MUST
+NOT
+be
+empty,
+or
+the
+constructor
+MUST
+throw
+an
+exception.
+</ins></dd><dt>
+readonly
+<ins class="diff-new">attribute
+any
+data
+</ins>
+</dt>
+<dd>
+The
+object
+used
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+be
+an
+object
+upon
+which
+the
+structured
+clone
+algorithm
+can
+be
+performed,
+including
+Transferables,
+or
+the
+constructor
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+throw
+an
+exception.
+</dd>
+<del class="diff-old">ports
+of
+type
+array
+of
+MessagePort
+,
+</del>
+<dt>
+readonly
+<ins class="diff-new">attribute
+MessagePort[]
+ports
+</ins>
+</dt>
+<dd>
+<b>
+Only
+present
+when
+the
+Intent
+object
+is
+delivered
+to
+the
+Service
+page.
+</b>
+Any
+ports
+used
+in
+the
+<del class="diff-old">|transferList|
+</del>
+<code>
+<ins class="diff-chg">transferList
+</ins></code>
+of
+the
+constructor
+during
+invocation
+will
+be
+delivered
+to
+the
+service
+page
+in
+the
+<del class="diff-old">|ports|
+attribute.
+See
+[
+POSTMSG
+]
+type
+of
+type
+DOMString
+,
+readonly
+The
+data
+payload
+must
+be
+described
+by
+the
+type
+parameter.
+Recommended
+type
+strings
+are
+MIME
+strings
+or
+self-documenting
+urls.
+The
+string
+must
+not
+be
+empty,
+or
+the
+constructor
+must
+throw
+an
+exception.
+3.2.2
+Methods
+</del>
+<code>
+<del class="diff-old">getExtra
+Retrieves
+the
+value
+(if
+any)
+from
+the
+extra
+data
+dictionary
+this
+intent
+was
+constructed
+with.
+Parameter
+Type
+Nullable
+Optional
+Description
+key
+DOMString
+✘
+✘
+Return
+type:
+DOMString
+</del>
+<ins class="diff-chg">ports
+</ins>
+</code>
+<ins class="diff-chg">attribute.
+See
+[[!POSTMSG]]
+</ins>
+</dd>
+<del class="diff-old">postFailure
+</del>
+<dt>
+<ins class="diff-chg">void
+postResult(any
+data,
+optional
+sequence&lt;Transferable&gt;
+transferable)
+</ins>
+</dt>
+<dd>
+<b>
+Only
+present
+when
+the
+Intent
+object
+is
+delivered
+to
+the
+Service
+page.
+</b>
+The
+payload
+passed
+to
+this
+method
+will
+be
+returned
+to
+the
+<del class="diff-old">onFailure
+</del>
+<ins class="diff-chg">onSuccess
+</ins>
+callback
+registered
+by
+the
+client
+page
+in
+the
+startActivity
+call
+(if
+any).
+The
+<del class="diff-old">playload
+</del>
+<ins class="diff-chg">payload
+</ins>
+must
+be
+an
+object
+upon
+which
+the
+structured
+clone
+algorithm
+can
+be
+<del class="diff-old">performed,
+including
+Transferables.
+[
+HTML5
+]
+Parameter
+Type
+Nullable
+Optional
+Description
+data
+any
+✘
+✘
+Return
+type:
+</del>
+<ins class="diff-chg">performed.
+The
+Transferables
+array,
+if
+present,
+will
+specify
+transferable
+elements
+in
+the
+</ins>
+<code>
+<del class="diff-old">void
+</del>
+<ins class="diff-chg">data
+</ins>
+</code>
+<ins class="diff-chg">payload
+argument,
+as
+per
+[[!HTML5]]
+[[!POSTMSG]]
+</ins>
+</dd>
+<del class="diff-old">postResult
+</del>
+<dt>
+<ins class="diff-chg">void
+postFailure(any
+data)
+</ins>
+</dt>
+<dd>
+<b>
+Only
+present
+when
+the
+Intent
+object
+is
+delivered
+to
+the
+Service
+page.
+</b>
+The
+payload
+passed
+to
+this
+method
+will
+be
+returned
+to
+the
+<del class="diff-old">onSuccess
+</del>
+<ins class="diff-chg">onFailure
+</ins>
+callback
+registered
+by
+the
+client
+page
+in
+the
+startActivity
+call
+(if
+any).
+The
+<del class="diff-old">payload
+</del>
+<ins class="diff-chg">playload
+</ins>
+must
+be
+an
+object
+upon
+which
+the
+structured
+clone
+algorithm
+can
+be
+<del class="diff-old">performed.
+The
+Transferables
+array,
+if
+present,
+will
+specify
+transferable
+elements
+in
+the
+|data|
+payload
+argument,
+as
+per
+[
+HTML5
+]
+[
+POSTMSG
+]
+Parameter
+Type
+Nullable
+Optional
+Description
+data
+any
+✘
+✘
+transferable
+sequence&lt;
+Transferable
+&gt;
+✘
+✔
+Return
+type:
+void
+</del>
+<ins class="diff-chg">performed,
+including
+Transferables.
+[[!HTML5]]
+</ins>
+</dd>
+</dl>
+<p>
+Notes
+on
+the
+intent
+object:
+The
+transferList
+parameter
+is
+not
+available
+post-creation.
+It
+becomes
+an
+internal
+implementation
+detail
+directing
+the
+User
+Agent
+to
+interpret
+some
+fields
+of
+the
+<del class="diff-old">|data|
+</del>
+<code>
+<ins class="diff-chg">data
+</ins></code>
+argument
+as
+Transferable.
+The
+<del class="diff-old">|data|
+</del>
+<code>
+<ins class="diff-chg">data
+</ins></code>
+and
+<del class="diff-old">|transferList|
+</del>
+<code>
+<ins class="diff-chg">transferList
+</ins></code>
+arguments
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+be
+implemented
+following
+the
+W3C
+Web
+Messaging
+spec
+<del class="diff-old">[
+POSTMSG
+].
+</del>
+<ins class="diff-chg">[[!POSTMSG]].
+</ins>
+</p>
+<p>
+The
+User
+Agent
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+perform
+the
+structured
+clone
+algorithm
+on
+creation
+of
+the
+Intent
+object.
+</p>
+</section>
+<section>
+<h3>
+<del class="diff-old">3.3
+</del>
+Invocation
+API
+</h3>
+<p>
+The
+client
+invokes
+an
+intent
+by
+constructing
+an
+Intent
+object
+as
+above
+and
+calling
+the
+<code>
+navigator.startActivity
+</code>
+function
+on
+it.
+The
+callbacks
+passed
+to
+this
+method
+are
+invoked
+when
+the
+intent
+has
+been
+handled
+by
+the
+service.
+The
+User
+Agent
+will
+mediate
+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>
+<del class="diff-old">    ]
+interface  {
+};
+3.3.1
+Methods
+</del>
+<dl title='[NoInterfaceObject] interface Intents' class='idl'>
+<dt>
+<ins class="diff-chg">void
+</ins>
+startActivity
+<ins class="diff-chg">(Intent
+intent,
+optional
+IntentSuccessCallback
+onSuccess,
+optional
+IntentFailureCallback
+onFailure)
+</ins>
+</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.
+User
+Agents
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+restrict
+this
+method
+to
+only
+be
+successfully
+callable
+within
+the
+context
+of
+an
+explicit
+user
+gesture.
+An
+exception
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+be
+thrown
+if
+the
+Intent
+is
+invalid
+(i.e.
+<code>
+null
+</code>
+),
+or
+if
+the
+method
+is
+invoked
+without
+being
+the
+result
+of
+an
+explicit
+user
+gesture.
+<del class="diff-old">Parameter
+Type
+Nullable
+Optional
+Description
+intent
+Intent
+✘
+✘
+onSuccess
+IntentSuccessCallback
+✘
+✔
+onFailure
+IntentFailureCallback
+✘
+✔
+Return
+type:
+void
+</del>
+</dd>
+</dl>
+<p>
+The
+invocation
+API
+is
+implemented
+by
+the
+<code>
+window.navigator
+</code>
+object.
+</p>
+<del class="diff-old">Navigator
+implements
+Intents
+;
+All
+instances
+of
+the
+Navigator
+type
+are
+defined
+to
+also
+implement
+the
+Intents
+interface.
+</del>
+<dl title='Navigator implements Intents' class='idl'>
+</dl>
+<section>
+<p>
+The
+callbacks
+passed
+to
+startActivity
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+provide
+these
+signatures:
+</p>
+<del class="diff-old">    
+Callback
+IntentSuccessCallback
+Parameters
+data
+of
+type
+</del>
+<dl title='callback IntentSuccessCallback = void' class='idl'>
+<dt>
+<ins class="diff-chg">optional
+</ins>
+any
+<ins class="diff-chg">data
+</ins>
+</dt>
+<dd>
+The
+<del class="diff-old">|data|
+</del>
+<code>
+<ins class="diff-chg">data
+</ins></code>
+passed
+will
+be
+the
+payload
+data
+from
+the
+structured
+cloneable
+object
+passed
+to
+the
+postResult
+method
+of
+the
+delivered
+Intent.
+</dd>
+<dt>
+<ins class="diff-chg">optional
+MessagePort[]
+</ins>
+ports
+<del class="diff-old">of
+type
+array
+of
+MessagePort
+</del>
+</dt>
+<dd>
+The
+<del class="diff-old">|ports|
+</del>
+<code>
+<ins class="diff-chg">ports
+</ins></code>
+will
+be
+any
+ports
+in
+the
+payload,
+as
+resulting
+from
+the
+structured
+clone
+algorithm
+with
+Transferables,
+as
+in
+the
+Web
+Messaging
+spec.
+<del class="diff-old">[
+POSTMSG
+]
+</del>
+<ins class="diff-chg">[[!POSTMSG]]
+</ins>
+</dd>
+</dl>
+<del class="diff-old">    
+Callback
+IntentFailureCallback
+Parameters
+data
+of
+type
+</del>
+<dl title='callback IntentFailureCallback = void' class='idl'>
+<dt>
+<ins class="diff-chg">optional
+</ins>
+any
+<ins class="diff-chg">data
+</ins>
+</dt>
+<dd>
+The
+<del class="diff-old">|data|
+</del>
+<code>
+<ins class="diff-chg">data
+</ins></code>
+passed
+will
+be
+the
+payload
+data
+passed
+to
+the
+postFailure
+method
+of
+the
+delivered
+Intent.
+</dd>
+</dl>
+</section>
+</section>
+<section>
+<h3>
+<del class="diff-old">3.4
+</del>
+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>
+<del class="diff-old">    ]
+interface  {
+};
+3.4.1
+Attributes
+intent
+of
+type
+Intent
+,
+</del>
+<dl title='[NoInterfaceObject] interface IntentProvider' class='idl'>
+<dt>
+readonly
+<ins class="diff-new">attribute
+Intent
+intent
+</ins>
+</dt>
+<dd>
+The
+intent
+object
+as
+delivered
+to
+the
+service
+page
+(includes
+postResult
+and
+postFailure
+methods).
+</dd>
+</dl>
+<dl title='Window implements IntentProvider' class='idl'>
+<del class="diff-old">Window
+implements
+IntentProvider
+;
+All
+instances
+of
+the
+Window
+type
+are
+defined
+to
+also
+implement
+the
+IntentProvider
+interface.
+</del>
+</dl>
+<p>
+This
+object
+will
+only
+be
+made
+available
+to
+Service
+pages
+when
+they
+are
+loaded
+in
+the
+context
+of
+an
+intent
+invocation.
+Even
+if
+the
+same
+URL
+is
+loaded
+in
+other
+situations,
+the
+User
+Agent
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+make
+<code>
+Window
+</code>
+implement
+<a>
+IntentProvider
+</a>.
+Similarly,
+if
+a
+Service
+page
+is
+registered,
+but
+the
+User
+Agent
+loads
+it
+and
+it
+does
+not
+contain
+the
+declarative
+markup
+marking
+it
+as
+expecting
+to
+handle
+the
+Intent
+the
+User
+Agent
+is
+delivering,
+the
+User
+Agent
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+make
+<code>
+Window
+</code>
+implement
+<a>
+IntentProvider
+</a>.
+</p>
+<p>
+The
+<code>
+window.intent
+</code>
+object
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+be
+made
+available
+across
+same-origin
+redirects
+of
+the
+service
+page.
+It
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+be
+<ins class="diff-new">made
+</ins>
+available
+if
+redirects
+cross
+an
+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
+<ins class="diff-new">made
+</ins>
+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>
+The
+<code>
+window.intent
+</code>
+object
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+be
+made
+available
+to
+a
+page
+on
+the
+same-origin
+as
+the
+originally-delivered
+page
+if
+the
+user
+initiates
+a
+navigation
+on
+the
+browsing
+context
+in
+which
+that
+Service
+page
+is
+displayed,
+AND
+the
+new
+page
+has
+declarative
+syntax
+marking
+it
+as
+a
+handler
+for
+the
+Intent
+type
+the
+User
+Agent
+is
+delivering.
+</p>
+<p>
+In
+other
+words,
+in
+the
+browsing
+context
+in
+which
+the
+Intent
+is
+originally
+delivered,
+the
+intent
+data
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+be
+<ins class="diff-new">made
+</ins>
+available
+to
+pages
+in
+a
+redirect
+or
+navigation
+sequence
+when
+they
+are
+in
+the
+same
+origin
+as
+that
+to
+which
+it
+was
+originally
+delivered
+(and
+have
+the
+enabling
+markup),
+but
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+be
+<ins class="diff-new">made
+</ins>
+available
+to
+any
+other
+pages.
+This
+allows
+Service
+pages
+to
+delegate
+handling,
+to
+redirect
+to
+login
+screens,
+and
+so
+forth,
+but
+does
+not
+make
+the
+Intent
+data
+available
+to
+any
+such
+pages
+encountered
+which
+are
+not
+in
+the
+same
+origin.
+</p>
+<p>
+<ins class="diff-chg">Multiple
+invocation
+by
+code
+in
+the
+service
+page
+MUST
+throw
+a
+Javascript
+exception.
+The
+User
+Agent
+MUST
+NOT
+allow
+a
+particular
+Intent
+to
+be
+replied
+to
+multiple
+times.
+</ins></p></section><section>
+<h3>
+<del class="diff-old">3.5
+</del>
+Registration
+Markup
+</h3>
+<p>
+<del class="diff-old">Service
+</del>
+<ins class="diff-chg">Web
+</ins>
+pages
+declaratively
+mark
+themselves
+(or
+other
+same-origin
+<ins class="diff-new">Service
+</ins>
+pages)
+as
+providing
+handling
+functionality
+for
+particular
+intent
+actions
+and
+types
+using
+the
+<code>
+&lt;intent&gt;
+</code>
+tag.
+A
+User
+Agent
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+deliver
+an
+Intent
+to
+a
+web
+app
+service
+page
+which
+does
+not
+include
+markup
+describing
+what
+intents
+it
+can
+handle
+which
+matches
+the
+intent
+being
+delivered
+(See
+the
+section
+on
+Matching
+action
+and
+type
+for
+delivery).
+</p>
+<del class="diff-old">     {
+};
+3.5.1
+Attributes
+action
+of
+type
+</del>
+<dl title='interface HTMLIntentElement : HTMLElement' class='idl'>
+<dt>
+<ins class="diff-chg">attribute
+</ins>
+DOMString
+<ins class="diff-chg">action
+</ins>
+</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>
+<del class="diff-old">disposition
+of
+type
+</del>
+<dt>
+<ins class="diff-chg">attribute
+</ins>
+DOMString
+<ins class="diff-chg">type
+</ins>
+</dt>
+<dd>
+<del class="diff-old">The
+disposition
+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
+</del>
+<ins class="diff-chg">A
+string
+specifying
+</ins>
+the
+<del class="diff-old">disposition.
+The
+window
+disposition
+means
+that
+</del>
+<ins class="diff-chg">type
+of
+payload
+data
+</ins>
+the
+service
+<del class="diff-old">is
+opened
+in
+</del>
+<ins class="diff-chg">can
+accept.
+Must
+be
+</ins>
+a
+<del class="diff-old">new
+tab
+</del>
+<ins class="diff-chg">space
+separated
+list
+of
+type
+specifiers.
+If
+these
+parse
+as
+MIME
+types,
+</ins>
+or
+<del class="diff-old">window
+context.
+The
+inline
+disposition
+means
+that
+the
+User
+Agent
+should
+open
+</del>
+the
+<del class="diff-old">service
+in
+a
+context
+directly
+related
+to
+the
+client
+page
+context
+in
+an
+overlappable
+way.
+The
+User
+Agent
+must
+not
+allow
+this
+UI
+surface
+to
+</del>
+<ins class="diff-chg">MIME
+wildcard
+types
+"*/*"
+or
+"*",
+they
+will
+</ins>
+be
+<del class="diff-old">under
+the
+control
+of
+</del>
+<ins class="diff-chg">interpreted
+as
+such
+(see
+</ins>
+the
+<del class="diff-old">client
+page.
+href
+of
+</del>
+<ins class="diff-chg">section
+on
+matching
+action
+and
+</ins>
+type
+<ins class="diff-chg">for
+delivery).
+If
+not,
+they
+will
+be
+interpreted
+as
+string
+literal
+type
+specifiers.
+Empty
+type
+attributes
+are
+not
+valid
+registrations.
+</ins></dd><dt><ins class="diff-chg">
+attribute
+</ins>
+DOMString
+<ins class="diff-chg">href
+</ins>
+</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>
+<del class="diff-old">title
+of
+type
+</del>
+<dt>
+<ins class="diff-chg">attribute
+</ins>
+DOMString
+<ins class="diff-chg">title
+</ins>
+</dt>
+<dd>
+A
+human-readable
+title
+which
+the
+User
+Agent
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+use
+to
+indicate
+the
+service
+to
+the
+user.
+If
+the
+<code>
+title
+</code>
+attribute
+is
+missing,
+the
+User
+Agent
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+use
+the
+title
+of
+the
+registered
+Service
+page
+as
+the
+service
+title.
+</dd>
+<del class="diff-old">type
+of
+type
+</del>
+<dt>
+<ins class="diff-chg">attribute
+</ins>
+DOMString
+<ins class="diff-chg">disposition
+</ins>
+</dt>
+<dd>
+<del class="diff-old">A
+string
+specifying
+</del>
+<ins class="diff-chg">The
+</ins><code><ins class="diff-chg">
+disposition
+</ins></code><ins class="diff-chg">
+attribute
+allows
+a
+service
+to
+choose
+which
+context
+to
+be
+opened
+in.
+The
+User
+Agent
+MUST
+NOT
+allow
+</ins>
+the
+<del class="diff-old">type
+of
+payload
+data
+</del>
+<ins class="diff-chg">Client
+page
+any
+ability
+to
+change
+the
+disposition.
+The
+</ins><code><ins class="diff-chg">
+window
+</ins></code><ins class="diff-chg">
+disposition
+means
+that
+</ins>
+the
+service
+<del class="diff-old">can
+accept.
+Must
+be
+</del>
+<ins class="diff-chg">is
+opened
+in
+</ins>
+a
+<del class="diff-old">space
+separated
+list
+of
+type
+specifiers.
+If
+these
+parse
+as
+MIME
+types,
+</del>
+<ins class="diff-chg">new
+tab
+</ins>
+or
+<ins class="diff-new">window
+context.
+The
+</ins><code><ins class="diff-new">
+inline
+</ins></code><ins class="diff-new">
+disposition
+means
+that
+</ins>
+the
+<del class="diff-old">MIME
+wildcard
+types
+"*/*"
+or
+"*",
+they
+will
+be
+interpreted
+as
+such
+(see
+</del>
+<ins class="diff-chg">User
+Agent
+SHOULD
+open
+</ins>
+the
+<del class="diff-old">section
+on
+matching
+action
+and
+type
+for
+delivery).
+If
+not,
+they
+will
+</del>
+<ins class="diff-chg">service
+in
+a
+context
+directly
+related
+to
+the
+client
+page
+context
+in
+an
+overlappable
+way.
+The
+User
+Agent
+MUST
+NOT
+allow
+this
+UI
+surface
+to
+</ins>
+be
+<del class="diff-old">interpreted
+as
+string
+literal
+type
+specifiers.
+Empty
+type
+attributes
+are
+not
+valid
+registrations.
+</del>
+<ins class="diff-chg">under
+the
+control
+of
+the
+client
+page.
+</ins>
+</dd>
+</dl>
+<p>
+<i>
+This
+section
+should
+not
+be
+construed
+as
+limiting
+the
+ability
+of
+the
+User
+Agent
+to
+manage
+registration
+of
+non-web
+services.
+That
+is,
+the
+User
+Agent
+may
+handle
+intent
+invocations
+locally,
+using
+extensions,
+or
+with
+third-party
+system
+services.
+This
+section
+solely
+governs
+how
+web-app
+service
+pages
+register
+and
+unregister
+with
+the
+User
+Agent
+with
+the
+<code>
+&lt;intent&gt;
+</code>
+tag.
+</i>
+</p>
+<h4>
+Same-origin
+registration
+</h4>
+<p>
+The
+User
+Agent
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+obey
+any
+registration
+markup
+which
+is
+not
+same-origin.
+That
+is,
+a
+page
+may
+only
+register
+<code>
+href
+</code>
+attributes
+for
+other
+service
+handlers
+on
+its
+same
+origin.
+A
+page
+may
+register
+itself
+as
+a
+Service
+handler,
+by
+leaving
+the
+<code>
+href
+</code>
+attribute
+empty.
+</p>
+<p>
+For
+cross-page
+registration,
+when
+the
+<code>
+href
+</code>
+attribute
+points
+to
+a
+different
+resource,
+the
+User
+Agent
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+interpret
+intent
+registrations
+additively.
+That
+is,
+an
+intent
+descriptor
+from
+the
+tag
+would
+be
+added
+to
+the
+registry
+if
+it
+is
+not
+present
+(if
+the
+user
+approves
+the
+addition).
+</p>
+<h4>
+Unregistering
+</h4>
+<p>
+The
+User
+Agent
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+treat
+any
+registration
+markup
+which
+has
+both
+<code>
+action
+</code>
+and
+<code>
+type
+</code>
+attributes
+missing
+as
+if
+the
+markup
+specified
+no
+intent
+capability
+on
+the
+<del class="diff-old">|href|
+</del>
+<code>
+<ins class="diff-chg">href
+</ins></code>
+page.
+That
+is,
+a
+page
+may
+unregister
+itself
+implicitly
+by
+removing
+all
+intent
+tags,
+or
+explicitly
+by
+keeping
+the
+tag
+present,
+but
+without
+<code>
+action
+</code>
+or
+<code>
+type
+</code>
+attributes.
+Such
+explicit
+unregistration
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+be
+honored
+for
+any
+tag
+with
+a
+same-origin
+<code>
+href
+</code>
+attribute.
+</p>
+<p>
+The
+intent
+tags
+on
+the
+service
+handler
+page
+itself
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+be
+interpreted
+by
+the
+User
+Agent
+as
+authoritative.
+That
+is,
+if
+the
+User
+Agent
+loads
+a
+service
+page,
+and
+sees
+that
+<del class="diff-old">not
+all
+</del>
+<ins class="diff-chg">its
+</ins>
+intent
+descriptors
+<del class="diff-old">it
+believes
+will
+be
+handled
+by
+</del>
+<ins class="diff-chg">do
+not
+match
+</ins>
+the
+<del class="diff-old">page
+are
+actually
+handled,
+</del>
+<ins class="diff-chg">set
+currently
+registered
+for
+that
+page,
+</ins>
+it
+would
+replace
+the
+currently-registered
+set
+with
+the
+<del class="diff-old">new
+</del>
+set
+<del class="diff-old">declared
+by
+</del>
+<ins class="diff-chg">discovered
+on
+the
+more
+current
+load
+of
+</ins>
+the
+page.
+</p>
+<h4>
+HTTP
+<del class="diff-old">Error
+</del>
+<ins class="diff-chg">Status
+</ins>
+Codes
+on
+Service
+Pages
+</h4>
+<p>
+If
+a
+registered
+service
+page
+is
+retrieved
+and
+has
+a
+non-20x
+error
+code
+<del class="diff-old">[
+HTTP11
+],
+</del>
+<ins class="diff-chg">[[!HTTP11]],
+</ins>
+the
+User
+Agent
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+take
+the
+following
+actions:
+</p>
+<p>
+30x:
+redirect
+to
+the
+indicated
+page.
+If
+the
+page
+is
+on-domain,
+and
+has
+intent
+markup,
+the
+intent
+will
+be
+<del class="diff-old">re-delivered.
+</del>
+<ins class="diff-chg">made
+available
+to
+the
+redirect
+page.
+</ins>
+If
+the
+redirect
+is
+permanent
+(301),
+the
+User
+Agent
+<del class="diff-old">may
+</del>
+<ins class="diff-chg">MAY
+</ins>
+update
+its
+service
+registration
+records
+to
+reflect
+that.
+</p>
+<p>
+<del class="diff-old">40x:
+</del>
+<ins class="diff-chg">4xx:
+</ins>
+indicate
+to
+the
+user
+that
+the
+page
+cannot
+be
+loaded,
+along
+with
+any
+remediation
+capabilities
+(i.e.
+authentication
+for
+403
+or
+payments
+for
+402).
+In
+the
+case
+of
+error
+410,
+the
+User
+Agent
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+unregister
+the
+handler
+from
+its
+internal
+registry.
+</p>
+<p>
+50x:
+indicate
+to
+the
+user
+that
+the
+page
+cannot
+be
+loaded.
+</p>
+<p>
+<ins class="diff-chg">If
+the
+desired
+registered
+service
+page
+cannot
+be
+loaded,
+the
+User
+Agent
+SHOULD
+display
+UI
+allowing
+the
+user
+to
+select
+another
+service.
+</ins>
+</p>
+</section>
+</section>
+<section>
+<h2>
+<del class="diff-old">4.
+</del>
+User
+Agent
+Behavior
+</h2>
+<section>
+<h3>
+<ins class="diff-new">Service
+Registration
+</ins></h3>
+<p>
+When
+the
+User
+Agent
+loads
+a
+page
+with
+registration
+markup,
+it
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+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.
+The
+User
+Agent
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+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
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+allow
+web
+pages
+the
+ability
+to
+discover
+passively
+which
+services
+the
+user
+has
+configured
+to
+handle
+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
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+be
+made
+available
+passively.
+</p>
+<p>
+The
+User
+Agent
+<del class="diff-old">may
+</del>
+<ins class="diff-chg">MAY
+</ins>
+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.
+(TODO:
+add
+example
+of
+a
+local
+network
+service)
+</p>
+<p>
+<ins class="diff-new">The
+User
+Agent
+MAY
+act
+as
+a
+Client
+or
+a
+Service.
+For
+example,
+the
+User
+Agent
+may
+implement
+particular
+affordances
+which
+directly
+launch
+Intents
+that
+may
+be
+handled
+by
+registered
+Services,
+or
+present
+UI
+allowing
+its
+own
+functionality
+to
+be
+used
+alongside
+other
+registered
+Services
+to
+handle
+Intents.
+For
+instance,
+User
+Agents
+MAY
+also
+dispatch
+intents
+directly
+based
+on
+data-specific
+controls
+derived
+from
+microdata
+in
+pages,
+or
+based
+on
+other
+User
+Agent-level
+features.
+</ins></p></section><section><h3><ins class="diff-new">
+Invocation
+and
+Dispatch
+</ins></h3><p>
+For
+intents
+invoked
+by
+client
+web
+applications,
+the
+User
+Agent
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+require
+that
+such
+invocations
+be
+in
+the
+context
+of
+a
+user
+gesture.
+User
+Agents
+<del class="diff-old">may
+</del>
+<ins class="diff-chg">MAY
+</ins>
+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
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+provide
+a
+way
+for
+the
+user
+to
+configure
+which
+intents
+are
+delivered
+to
+which
+services.
+This
+process
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+be
+configurable
+on
+a
+per-invocation
+<del class="diff-old">basis
+for
+most
+intents,
+although
+defaulting
+</del>
+<ins class="diff-chg">basis.
+Defaulting
+</ins>
+rules,
+as
+long
+as
+they
+are
+configurable
+by
+the
+user,
+are
+expected
+to
+<del class="diff-old">mean
+that
+</del>
+<ins class="diff-chg">result
+in
+</ins>
+the
+User
+Agent
+<del class="diff-old">need
+</del>
+not
+<del class="diff-old">present
+specific
+</del>
+<ins class="diff-chg">presenting
+full
+</ins>
+UI
+controls
+on
+every
+invocation.
+</p>
+<p>
+When
+the
+User
+Agent
+delivers
+an
+intent
+payload
+to
+a
+web
+application,
+it
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+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
+<del class="diff-old">must
+not
+place
+</del>
+<ins class="diff-chg">MUST
+NOT
+make
+available
+</ins>
+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
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+be
+overwritten
+by
+the
+User
+Agent.
+It
+also
+means
+that
+Service
+pages
+cannot
+access
+<code>
+window.intent
+</code>
+in
+scripts
+which
+occur
+before
+the
+page
+parses
+the
+intents
+registration
+markup.
+If
+such
+scripts
+are
+simply
+declaring
+functions
+to
+be
+called
+later,
+that
+will
+work,
+but
+scripts
+which
+run
+before
+the
+registration
+markup
+is
+parsed
+won't
+find
+<code>
+window.intent
+</code>
+<del class="diff-old">set,
+</del>
+<ins class="diff-chg">made
+available,
+</ins>
+even
+though
+it
+may
+be
+made
+available
+later
+in
+the
+page
+load,
+and
+so
+are
+likely
+broken.
+</p>
+<p>
+When
+a
+new
+context
+is
+opened
+for
+the
+service
+page,
+the
+User
+Agent
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+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
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+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
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+invoke
+the
+<code>
+onFailure
+</code>
+callback
+in
+the
+client
+page
+invocation,
+if
+any.
+</p>
+<p>
+The
+User
+Agent
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+allow
+any
+serializable
+and/or
+Transferable
+object
+to
+be
+passed
+between
+client
+to
+service
+and
+back
+from
+service
+to
+client.
+This
+includes
+Blobs
+<del class="diff-old">[
+BLOB
+],
+</del>
+<ins class="diff-chg">[[!BLOB]],
+</ins>
+MessagePorts,
+etc.
+The
+User
+Agent
+<del class="diff-old">may
+</del>
+<ins class="diff-chg">MAY
+</ins>
+inspect
+the
+payload
+of
+intents
+and
+present
+specialized
+UI
+corresponding
+to
+well-known
+intent
+types.
+<del class="diff-old">The
+User
+Agent
+must
+not
+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
+</del>
+<ins class="diff-chg">As
+</ins>
+an
+<del class="diff-old">attack
+vector,
+and
+other
+mis-use.
+In
+the
+same
+way
+User
+Agents
+may
+dispatch
+Intents
+triggered
+by
+non-web
+mechanisms
+to
+web
+applications,
+User
+Agents
+may
+dispatch
+intents
+invoked
+by
+web
+applications
+to
+handlers
+which
+are
+not
+web
+applications.
+In
+those
+cases,
+the
+User
+Agent
+should
+provide
+a
+public
+API
+mechanism
+for
+external
+connection
+to
+the
+intent
+dispatch
+mechanism
+selected.
+For
+</del>
+example,
+the
+User
+Agent
+may
+<del class="diff-old">be
+able
+to
+run
+an
+Operating
+System
+command
+in
+response
+</del>
+<ins class="diff-chg">present
+specialized
+messaging
+</ins>
+to
+<del class="diff-old">an
+intent.
+The
+User
+Agent
+could
+provide
+a
+configuration
+interface
+such
+that
+</del>
+the
+user
+<del class="diff-old">can
+install
+handler
+applications,
+and
+a
+documented
+format
+in
+which
+intent
+payload
+data
+is
+translated
+to
+that
+application.
+In
+these
+cases,
+the
+requirement
+</del>
+<ins class="diff-chg">indicating
+</ins>
+that
+<del class="diff-old">User
+Agents
+pass
+any
+serializable
+object
+</del>
+<ins class="diff-chg">an
+intent
+</ins>
+is
+<del class="diff-old">relaxed
+for
+some
+kinds
+</del>
+of
+<del class="diff-old">handlers.
+User
+Agents
+may
+also
+dispatch
+intents
+directly
+based
+on
+data-specific
+controls
+derived
+from
+microdata
+in
+pages,
+or
+based
+on
+other
+User
+Agent-level
+features.
+For
+instance,
+if
+</del>
+the
+<del class="diff-old">user
+has
+services
+registered
+which
+handle
+text/vcard,
+then
+the
+User
+Agent
+may
+provide
+</del>
+<ins class="diff-chg">"share"
+type,
+or
+that
+</ins>
+the
+<del class="diff-old">user
+with
+a
+way
+</del>
+<ins class="diff-chg">Client
+is
+asking
+them
+</ins>
+to
+<del class="diff-old">invoke
+particular
+intents
+that
+consume
+such
+data
+as
+it
+detects
+it
+in
+web
+pages.
+</del>
+<ins class="diff-chg">pick
+an
+image.
+</ins>
+</p>
+<p>
+If
+the
+user
+has
+no
+services
+registered
+for
+a
+particular
+type
+of
+intent,
+the
+User
+Agent
+<del class="diff-old">may
+</del>
+<ins class="diff-chg">MAY
+</ins>
+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>
+<p>
+<ins class="diff-chg">The
+User
+Agent
+MUST
+NOT
+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.
+</ins></p></section><section>
+<h3>
+<del class="diff-old">4.1
+</del>
+Explicit
+Intents
+</h3>
+<p>
+When
+handling
+an
+Intent
+marked
+as
+explicit
+(that
+is,
+constructed
+with
+the
+object
+literal
+constructor
+with
+a
+non-empty
+<b>
+service
+</b>
+field),
+the
+expected
+User
+Agent
+behavior
+is
+that
+if
+this
+"service"
+attribute
+is
+present,
+it
+<del class="diff-old">should
+not
+</del>
+<ins class="diff-chg">SHOULD
+NOT
+</ins>
+display
+a
+service
+selection
+mechanism
+to
+the
+user.
+Instead,
+the
+service
+url
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+be
+loaded
+directly
+to
+handle
+the
+intent.
+(This
+is
+not
+a
+hard
+restriction.
+The
+User
+Agent
+<del class="diff-old">may
+</del>
+<ins class="diff-chg">MAY
+</ins>
+provide
+a
+way
+for
+the
+user
+to
+intercept
+even
+an
+explicit
+invocation.)
+</p>
+<p>
+During
+delivery,
+all
+restrictions
+are
+still
+in
+place.
+That
+is,
+the
+User
+Agent
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+follow
+the
+above
+requirements
+on
+placing
+the
+<code>
+window.intent
+</code>
+object
+in
+the
+scope
+of
+the
+page,
+and
+respect
+any
+declarative
+metadata
+in
+that
+service
+page.
+If
+the
+user
+agent
+needs
+information
+about
+the
+service
+(i.e.
+disposition,
+title,
+etc)
+for
+use
+in
+preparing
+its
+UI,
+it
+<del class="diff-old">may
+</del>
+<ins class="diff-chg">MAY
+</ins>
+load
+the
+service
+URL
+and
+examine
+the
+page
+for
+any
+declarative
+metadata.
+</p>
+<p>
+The
+User
+Agent
+<del class="diff-old">may
+</del>
+<ins class="diff-chg">MAY
+</ins>
+ask
+the
+user
+if
+they
+wish
+to
+install
+this
+service,
+just
+like
+for
+any
+other
+visit
+of
+the
+page.
+</p>
+</section>
+<section>
+<h3>
+<del class="diff-old">4.2
+</del>
+Matching
+action
+and
+type
+for
+delivery
+</h3>
+<p>
+When
+an
+Intent
+is
+delivered,
+the
+User
+Agent
+must
+verify
+that
+the
+Service
+to
+which
+the
+intent
+is
+to
+be
+delivered
+(either
+from
+an
+explicit
+invocation
+or
+from
+the
+result
+of
+a
+user
+selection)
+has
+a
+registration
+record
+supporting
+the
+action
+and
+type
+of
+the
+Intent
+being
+delivered
+by
+following
+these
+steps:
+</p>
+<ol>
+<li>
+Let
+<var>
+intent
+action
+</var>
+be
+the
+action
+field
+of
+the
+invoked
+intent.
+</li>
+<li>
+Let
+<var>
+intent
+type
+</var>
+be
+the
+type
+field
+of
+the
+invoked
+intent.
+</li>
+<li>
+For
+every
+distinguishable
+registration
+(that
+is,
+having
+unique
+action/type
+fields)
+present
+for
+the
+Service
+page,
+follow
+these
+steps:
+<ol>
+<li>
+When
+comparing
+field
+values,
+"different
+from"
+means
+that
+the
+strings
+under
+comparison
+represent
+different
+sequences
+of
+code
+points.
+</li>
+<li>
+When
+considering
+whether
+a
+field
+value
+is
+a
+MIME
+type,
+it
+is
+considered
+so
+if
+it
+parses
+as
+a
+valid
+MIME
+type
+<del class="diff-old">[
+RFC2046
+],
+</del>
+<ins class="diff-chg">[[!RFC2046]],
+</ins>
+or
+is
+equal
+to
+the
+MIME
+wildcard
+strings
+"*"
+or
+"*/*".
+</li>
+<li>
+Let
+<var>
+service
+action
+</var>
+be
+the
+value
+of
+the
+action
+field
+of
+the
+service
+registration.
+</li>
+<li>
+Let
+<var>
+service
+type
+</var>
+be
+the
+value
+of
+the
+type
+field
+of
+the
+service
+registration.
+</li>
+<li>
+If
+the
+<var>
+service
+type
+</var>
+or
+<var>
+service
+action
+</var>
+is
+empty,
+the
+registration
+record
+is
+invalid.
+Continue
+to
+the
+next
+registration
+record.
+</li>
+<li>
+If
+the
+<var>
+intent
+action
+</var>
+is
+different
+from
+the
+<var>
+service
+action
+</var>,
+continue
+to
+the
+next
+registration
+record.
+</li>
+<li>
+If
+the
+<var>
+intent
+type
+</var>
+is
+a
+MIME
+type,
+and
+the
+<var>
+service
+type
+</var>
+is
+not,
+continue
+to
+the
+next
+registration
+record.
+</li>
+<li>
+If
+the
+<var>
+service
+type
+</var>
+is
+a
+MIME
+type,
+and
+the
+<var>
+intent
+type
+</var>
+is
+not,
+continue
+to
+the
+next
+registration
+record.
+</li>
+<li>
+If
+both
+<var>
+service
+type
+</var>
+and
+<var>
+<del class="diff-old">action
+</del>
+<ins class="diff-chg">intent
+</ins>
+type
+</var>
+are
+MIME
+types,
+then
+check
+whether
+the
+MIME
+specifiers
+overlap.
+This
+is
+true
+if
+the
+top-level
+and
+sublevel
+types
+match
+exactly,
+or
+if
+one
+or
+both
+are
+represented
+by
+the
+MIME
+wild
+card
+("*").
+If
+any
+MIME
+parameters
+are
+present
+in
+the
+<var>
+service
+type
+</var>
+or
+the
+<var>
+<del class="diff-old">action
+</del>
+<ins class="diff-chg">intent
+</ins>
+type
+</var>,
+they
+must
+be
+present
+in
+both
+and
+match
+exactly.
+A
+MIME
+parameter
+present
+in
+only
+one
+of
+<var>
+service
+type
+</var>
+and
+<var>
+<del class="diff-old">action
+</del>
+<ins class="diff-chg">intent
+</ins>
+type
+</var>
+does
+not
+disqualify
+the
+match.
+If
+the
+MIME
+types
+do
+not
+overlap,
+continue
+<del class="diff-old">fo
+</del>
+<ins class="diff-chg">to
+</ins>
+the
+next
+registration
+record.
+</li>
+<li>
+If
+neither
+<var>
+service
+type
+</var>
+nor
+<var>
+<del class="diff-old">action
+</del>
+<ins class="diff-chg">intent
+</ins>
+type
+</var>
+are
+MIME
+types,
+then
+if
+they
+are
+different,
+continue
+to
+the
+next
+registration
+record.
+</li>
+</ol>
+</li>
+<li>
+If
+no
+satisfying
+match
+is
+found
+in
+the
+registrations
+of
+the
+Service
+page,
+the
+Intent
+<del class="diff-old">must
+not
+</del>
+<ins class="diff-chg">MUST
+NOT
+</ins>
+be
+delivered.
+If
+any
+satisfying
+match
+is
+found,
+the
+Intent
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+be
+delivered
+to
+the
+Service
+page.
+</li>
+</ol>
+</section>
+<section>
+<h3>
+<del class="diff-old">4.3
+</del>
+Handling
+Service
+suggestions
+from
+Intent
+Invocation
+</h3>
+<p>
+If
+the
+user
+has
+no
+persistent
+information
+about
+a
+qualifying
+service
+for
+a
+particular
+intent
+registered
+with
+the
+User
+Agent,
+the
+User
+Agent
+<del class="diff-old">should
+</del>
+<ins class="diff-chg">SHOULD
+</ins>
+present
+the
+user
+with
+the
+option
+to
+select
+from
+the
+default
+services
+proposed
+by
+the
+client
+at
+invocation
+(from
+the
+<i>
+suggestions
+</i>
+parameter).
+</p>
+<p>
+If
+the
+user
+agent
+needs
+information
+about
+the
+all
+or
+any
+of
+the
+suggested
+services
+(i.e.
+disposition,
+title,
+icon,
+etc)
+for
+use
+in
+preparing
+its
+UI,
+it
+<del class="diff-old">may
+</del>
+<ins class="diff-chg">MAY
+</ins>
+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
+<del class="diff-old">may
+</del>
+<ins class="diff-chg">MAY
+</ins>
+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
+<del class="diff-old">must
+</del>
+<ins class="diff-chg">MUST
+</ins>
+follow
+the
+matching
+algorithm
+of
+the
+"Matching
+action
+and
+type
+for
+delivery"
+section
+before
+delivering
+the
+Intent
+to
+a
+suggested
+service,
+just
+as
+for
+any
+Intent
+delivery.
+</p>
+</section>
+</section>
+<section>
+<h2>
+<del class="diff-old">5.
+</del>
+Use
+Cases
+and
+Requirements
+</h2>
+<section>
+<h3>
+<del class="diff-old">5.1
+</del>
+Sharing
+</h3>
+<p>
+Web
+Intents
+should
+be
+useful
+to
+enable
+users
+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>
+</section>
+<section>
+<h3>
+<del class="diff-old">5.2
+</del>
+Integration
+with
+local
+web
+apps
+</h3>
+<p>
+Local
+web
+apps
+should
+be
+able
+to
+invoke
+and
+handle
+intents.
+</p>
+</section>
+<section>
+<h3>
+<del class="diff-old">5.3
+</del>
+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>
+</section>
+<section>
+<h3>
+<del class="diff-old">5.4
+</del>
+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>
+</section>
+<section>
+<h3>
+<del class="diff-old">5.5
+</del>
+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
+<del class="diff-old">use
+</del>
+<ins class="diff-chg">user
+</ins>
+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>
+</section>
+<section>
+<h3>
+<del class="diff-old">5.6
+</del>
+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>
+</section>
+</section>
+<section>
+<h2>
+<del class="diff-old">6.
+</del>
+Privacy
+Considerations
+</h2>
+<p>
+The
+user
+needs
+to
+have
+confidence
+that
+the
+Service
+will
+<del class="diff-old">user
+</del>
+<ins class="diff-chg">use
+</ins>
+the
+data
+associated
+with
+the
+action
+for
+the
+purpose
+intended
+and
+not
+share
+or
+retain
+the
+data
+<del class="diff-old">inappropriately.
+</del>
+<ins class="diff-chg">inappropriately
+[[WEBAPP-PRIVACY-BESTPRACTICES]].
+</ins>
+For
+this
+reason
+it
+is
+important
+that
+the
+user
+have
+control
+over
+Intents,
+in
+particular
+the
+selection
+mechanism
+which
+determines
+which
+Service
+will
+handle
+a
+particular
+Intent.
+This
+offers
+the
+possibility
+of
+user
+decision
+and
+control
+related
+to
+the
+choice
+of
+Service,
+allowing
+<del class="diff-old">them
+</del>
+<ins class="diff-chg">the
+user
+</ins>
+to
+take
+into
+account
+expectations
+regarding
+the
+Service,
+including
+Service
+policies
+related
+to
+retention
+and
+secondary
+use.
+This
+relates
+to
+the
+privacy
+principles
+of
+control
+and
+consent
+<del class="diff-old">[
+DAP-PRIVACY-REQS
+].
+</del>
+<ins class="diff-chg">[[DAP-PRIVACY-REQS]].
+</ins>
+For
+this
+reason
+a
+user
+should
+be
+made
+aware
+of
+explicit
+intents
+and
+be
+able
+to
+view
+and
+change
+them;
+implementations
+should
+be
+encouraged
+to
+offer
+this
+functionality.
+The
+minimum
+data
+necessary
+for
+a
+Service
+should
+be
+included
+as
+Intent
+parameters,
+corresponding
+to
+the
+privacy
+principle
+of
+minimization
+<del class="diff-old">[
+DAP-PRIVACY-REQS
+].
+</del>
+<ins class="diff-chg">[[DAP-PRIVACY-REQS]].
+</ins>
+</p>
+</section>
+<section class='appendix'>
+<h2>
+<del class="diff-old">A.
+</del>
+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>
+<del class="diff-old">B.
+References
+B.1
+Normative
+references
+[BLOB]
+Arun
+Ranganathan.
+Blob.
+17
+November
+2009.
+W3C
+Working
+Draft.
+(Work
+in
+progress.)
+URL:
+http://www.w3.org/TR/2009/WD-FileAPI-20091117/#dfn-Blob
+[HTML5]
+Ian
+Hickson;
+David
+Hyatt.
+HTML5.
+25
+May
+2011.
+W3C
+Working
+Draft.
+(Work
+in
+progress.)
+URL:
+http://www.w3.org/TR/html5
+[HTTP11]
+R.
+Fielding;
+et
+al.
+Hypertext
+Transfer
+Protocol
+-
+HTTP/1.1.
+June
+1999.
+Internet
+RFC
+2616.
+URL:
+http://www.ietf.org/rfc/rfc2616.txt
+[POSTMSG]
+Ian
+Hickson.
+HTML5
+Web
+Messaging.
+13
+March
+2012.
+W3C
+Working
+Draft.
+(Work
+In
+Progress.)
+URL:
+http://www.w3.org/TR/webmessaging/
+[RFC2046]
+N.
+Freed;
+N.
+Borenstein.
+Multipurpose
+Internet
+Mail
+Extensions
+(MIME)
+Part
+Two:
+Media
+Types.
+November
+1996.
+Internet
+RFC
+2046.
+URL:
+http://www.ietf.org/rfc/rfc2046.txt
+B.2
+Informative
+references
+[DAP-PRIVACY-REQS]
+Alissa
+Cooper,
+Frederick
+Hirsch,
+John
+Morris.
+Device
+API
+Privacy
+Requirements
+29
+June
+2010.
+W3C
+Note
+URL:
+http://www.w3.org/TR/2010/NOTE-dap-privacy-reqs-20100629/
+</del>
+</section>
+</body>
+</html>
+