- From: Mercurial notifier <cvsmail@w3.org>
- Date: Wed, 11 Jul 2012 04:16:31 +0000
- To: public-dap-commits@w3.org
changeset: 144:7a3d33dc568b tag: tip user: Robin Berjon <robin@berjon.com> date: Wed Jul 11 00:16:29 2012 -0400 files: gallery/FPWD.html description: snapshot diff -r 2f91b1eaa4d8 -r 7a3d33dc568b gallery/FPWD.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gallery/FPWD.html Wed Jul 11 00:16:29 2012 -0400 @@ -0,0 +1,971 @@ +<!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>Pick Media Intent</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + + + <style type="text/css">/***************************************************************** + * ReSpec 3 CSS + * Robin Berjon - http://berjon.com/ + *****************************************************************/ + +/* --- 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; +} + +cite .bibref { + font-style: normal; +} + +code { + color: #ff4500; +} + + +/* --- --- */ +ol.algorithm { counter-reset:numsection; list-style-type: none; } +ol.algorithm li { margin: 0.5em 0; } +ol.algorithm li:before { font-weight: bold; counter-increment: numsection; content: counters(numsection, ".") ") "; } + +/* --- TOC --- */ +.toc a, .tof a { + text-decoration: none; +} + +a .secno, a .figno { + color: #000; +} + +ul.tof, ol.tof { + list-style: none outside none; +} + +.caption { + margin-top: 0.5em; + font-style: italic; +} + +/* --- 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; +} +</style><style type="text/css">/* --- EXAMPLES --- */ +div.example-title { + min-width: 7.5em; + color: #b9ab2d; +} +div.example-title span { + text-transform: uppercase; +} +div.example, div.illegal-example { + padding: 0.5em; + margin: 1em 0; + position: relative; + clear: both; +} +div.illegal-example { color: red } +div.illegal-example p { color: black } +div.example { + padding: .5em; + border-left-width: .5em; + border-left-style: solid; + border-color: #e0cb52; + background: #fcfaee; +} +</style><style type="text/css">/* --- ISSUES/NOTES --- */ +div.issue-title, div.note-title { + padding-right: 1em; + min-width: 7.5em; + color: #b9ab2d; +} +div.issue-title { color: #e05252; } +div.note-title { color: #52e052; } +div.issue-title span, div.note-title span { + text-transform: uppercase; +} +div.note, div.issue { + margin-top: 1em; + margin-bottom: 1em; +} +.note > p:first-child, .issue > p:first-child { margin-top: 0 } +.issue, .note { + padding: .5em; + border-left-width: .5em; + border-left-style: solid; +} +div.issue, div.note { + padding: 0.5em; + margin: 1em 0; + position: relative; + clear: both; +} +span.note, span.issue { padding: .1em .5em .15em; } + +.issue { + border-color: #e05252; + background: #fbe9e9; +} +.note { + border-color: #52e052; + background: #e9fbe9; +} + + +</style><style type="text/css">/* HIGHLIGHTS */ +code.prettyprint { + color: inherit; +} + +/* this from google-code-prettify */ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} +</style><style type="text/css">/* --- 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, .idlCallbackID, .idlEnumID { + 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, .idlCallbackType { + 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%; +} +</style><link href="http://www.w3.org/StyleSheets/TR/W3C-WD" rel="stylesheet"></head> + <body><div class="head"> + <p> + + <a href="http://www.w3.org/"><img src="http://www.w3.org/Icons/w3c_home" alt="W3C" height="48" width="72"></a> + + </p> + <h1 class="title" id="title">Pick Media Intent</h1> + + <h2 id="w3c-working-draft-12-july-2012"><abbr title="World Wide Web Consortium">W3C</abbr> Working Draft 12 July 2012</h2> + <dl> + + <dt>This version:</dt> + <dd><a href="http://www.w3.org/TR/2012/WD-gallery-20120712/">http://www.w3.org/TR/2012/WD-gallery-20120712/</a></dd> + <dt>Latest published version:</dt> + <dd><a href="http://www.w3.org/TR/gallery/">http://www.w3.org/TR/gallery/</a></dd> + + + <dt>Latest editor's draft:</dt> + <dd><a href="http://w3c-test.org/dap/gallery/">http://w3c-test.org/dap/gallery/</a></dd> + + + + + + + <dt>Editors:</dt> + <dd><span>송정기(Jungkee Song)</span>, <a href="http://www.samsung.com/sec/">Samsung Electronics Co., Ltd.</a></dd> +<dd><a href="http://wonsuk73.com/">이원석(Wonsuk Lee)</a>, <a href="http://www.samsung.com/sec/">Samsung Electronics Co., Ltd.</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/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup> + (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>, + <a href="http://www.ercim.eu/"><abbr title="European Research Consortium for Informatics and Mathematics">ERCIM</abbr></a>, + <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. + <abbr title="World Wide Web Consortium">W3C</abbr> <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 class="introductory section" id="abstract"><h2>Abstract</h2> + <p> + The Pick Media Intent defines a Web Intent [<cite><a href="#bib-WEBINTENTS" class="bibref">WEBINTENTS</a></cite>] that enables + access to a user's media gallery from inside a Web application. It + defines both an Intent action/type pair that selects this operation, + and the format of the media data that is returned by services implementing this specification. + </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 <abbr title="World Wide Web Consortium">W3C</abbr> publications and the latest revision + of this technical report can be found in the <a href="http://www.w3.org/TR/"><abbr title="World Wide Web Consortium">W3C</abbr> technical reports + index</a> at http://www.w3.org/TR/.</em> + </p> + + <p> + This document recasts the previous pure JavaScript APIs version as an API built using Web Intents, while refining the metadata format based on related media data definitions and practical web-based media services. + </p> + + <p> + This document was published by the <a href="http://www.w3.org/2009/dap/">Device APIs Working Group</a> as a First Public Working Draft. + + This document is intended to become a <abbr title="World Wide Web Consortium">W3C</abbr> Recommendation. + + If you wish to make comments regarding this document, please send them to + <a href="mailto:public-device-apis@w3.org">public-device-apis@w3.org</a> + (<a href="mailto:public-device-apis-request@w3.org?subject=subscribe">subscribe</a>, + <a href="http://lists.w3.org/Archives/Public/public-device-apis/">archives</a>). + + + All feedback is welcome. + </p> + + <p> + Publication as a Working Draft does not imply endorsement by the <abbr title="World Wide Web Consortium">W3C</abbr> 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 <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>. + + + + + <abbr title="World Wide Web Consortium">W3C</abbr> maintains a <a href="http://www.w3.org/2004/01/pp-impl/43696/status" 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 <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>. + + + </p> + + + + +</div><div class="section" id="toc"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a class="tocxref" href="#introduction"><span class="secno">1. </span>Introduction</a></li><li class="tocline"><a class="tocxref" href="#conformance"><span class="secno">2. </span>Conformance</a></li><li class="tocline"><a class="tocxref" href="#security-and-privacy-considerations"><span class="secno">3. </span>Security and Privacy Considerations</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#privacy-considerations-for-implementers-of-the-pick-media-intent"><span class="secno">3.1 </span>Privacy considerations for implementers of the Pick Media Intent</a></li><li class="tocline"><a class="tocxref" href="#privacy-considerations-for-recipients-of-media-objects"><span class="secno">3.2 </span>Privacy considerations for recipients of media objects</a></li><li class="tocline"><a class="tocxref" href="#additional-implementation-considerations"><span class="secno">3.3 </span>Addtional implementation considerations</a></li></ul></li><li class="tocline"><a class="tocxref" href="#intent-description"><span class="secno">4. </span>Intent Description</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#intent-extras"><span class="secno">4.1 </span>Intent Extras</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#the-mediaintentextras-dictionary"><span class="secno">4.1.1 </span>The <span class="formerLink"><code>MediaIntentExtras</code></span> dictionary</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#dictionary-mediaintentextras-members"><span class="secno">4.1.1.1 </span>Dictionary <span class="formerLink"><code>MediaIntentExtras</code></span> Members</a></li></ul></li></ul></li></ul></li><li class="tocline"><a class="tocxref" href="#data-format"><span class="secno">5. </span>Data Format</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#the-media-dictionary"><span class="secno">5.1 </span>The <span class="formerLink"><code>Media/code></span> dictionary</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#dictionary-media-members"><span class="secno">5.1.1 </span>Dictionary <span class="formerLink"><code>Media</code></span> Members</a></li></ul></li><li class="tocline"><a class="tocxref" href="#the-mediacontent-dictionary"><span class="secno">5.2 </span>The <span class="formerLink"><code>MediaContent</code></span> dictionary</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#dictionary-mediacontent-members"><span class="secno">5.2.1 </span>Dictionary <span class="formerLink"><code>MediaContent</code></span> Members</a></li></ul></li><li class="tocline"><a class="tocxref" href="#the-mediaerror-dictionary"><span class="secno">5.3 </span>The <span class="formerLink"><code>MediaError</code></span> dictionary</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#dictionary-mediaerror-members"><span class="secno">5.3.1 </span>Dictionary <span class="formerLink"><code>MediaError</code></span> Members</></li></ul></li><li class="tocline"><a class="tocxref" href="#extended-media-properties-and-parameters"><span class="secno">5.4 </span>Extended Media Properties and Parameters</a></li></ul></li><li class="tocline"><a class="tocxref" href="#media-service-example"><span class="secno">A. </span>Media Service Example</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#accessing-mediaintentextras-values---example-1"><span class="secno">A.1 </span>Accessing <span class="formerLink"><code>MediaIntentExtras</code></span> Values - Example #1</a></li><li class="tocline"><a class="tocxref" href="#creating-media-object---example-2"><span class="secno">A.2 </span>Creating Media Object - Example #2</a></li></ul></li><li class="tocline"><a class="tocxref" href="#references"><span class="secno">B. </span>References</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#normative-references"><span class="secno">B.1 </span>Normative references</a></li><li class="tocline"><a class="tocxref" href="#infomative-references"><span class="secno">B.2 </span>Informative references</a></li></ul></li></ul></div> + + + + <div id="introduction" class="informative section"> + <!--OddPage--><h2><span class="secno">1. </span>Introduction</h2><p><em>This section is non-normative.</em></p> + <p> + On account of a number of media applications and services accessed from various devices, users tend to maintain their media data in multiple sources including local storage of devices and web-based media galleries. For instance, users upload subset of their photos to several different social media galleries with different metadata. For another example, users collect their favourite audio and video resources in several different media galleries which provide inconsistent metadata attributes one another. + </p> + <div class="note"><div class="note-title"><span>Note</span></div><p class=""> + A terminology, <b>media object</b>, is used hereunder to denote <b>media data</b> that contain a media content and its related metadata. (See <a class="idlType" href="#idl-def-Media"><code>Media</code></a> dictionary) + </p></div> + <p> + This specification enables a Web application to have access to a selected subset of user's media objects, obtained from arbitrary services not known to the Web application. The interactions, brokered using Web Intents [<cite><a href="#bib-WEBINTENTS" class="bibref">WEBINTENTS</a></cite>] are designed in order to maximise the user's security and privacy. Media objects may be sourced from a plurality of sources — both online and local to the user's device — so long as those sources are registered as Intent services with the user agent. It defines a common media object format which services use to provide data to Web applications in a consistent and interoperable manner. + </p> + <p> + For a Pick Media Intent request, user permission can be naturally asked by a necessary user authentication process that a service implementer <em title="may" class="rfc2119">may</em> provide. Also, users can determine the result media objects to bring to the client with the searching and selecting functionalities that a service implementer <em title="may" class="rfc2119">may</em> provide. + </p> + <p> + A set of <a href="#security-and-privacy-considerations">Security and Privacy Considerations</a> are + presented for the discretion of both implementers of Pick Media Intent services and recipients of media + data (i.e. Web applications). + </p> + <p> + The following code illustrates how to obtain media object from a user's media gallery: + </p> + <div class="example"><div class="example-title"><span>Example 1</span></div><pre class="example highlight prettyprint"><span class="kwd">var</span><span class="pln"> intent </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Intent</span><span class="pun">({</span><span class="pln"> action</span><span class="pun">:</span><span class="pln"> </span><span class="str">"http://webintents.org/pick"</span><span class="pun">,</span><span class="pln"> + type</span><span class="pun">:</span><span class="pln"> </span><span class="str">"http://w3.org/type/media"</span><span class="pun">,</span><span class="pln"> + extras</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> search</span><span class="pun">:</span><span class="pln"> </span><span class="str">"olympic"</span><span class="pun">,</span><span class="pln"> + filters</span><span class="pun">:</span><span class="pln"> </span><span class="pun">[</span><span class="str">"title"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"description"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"author"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"tags"</span><span class="pun">],</span><span class="pln"> + limit</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100</span><span class="pln"> </span><span class="pun">}});</span><span class="pln"> +navigator</span><span class="pun">.</span><span class="pln">startActivity</span><span class="pun">(</span><span class="pln">intent</span><span class="pun">,</span><span class="pln"> mediaOK</span><span class="pun">,</span><span class="pln"> mediaFail</span><span class="pun">);</span><span class="pln"> + +</span><span class="kwd">function</span><span class="pln"> mediaOK </span><span class="pun">(</span><span class="pln">mediaObjectArray</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + </span><span class="com">// iterate over the array of media objects to do something useful with them</span><span class="pln"> +</span><span class="pun">}</span><span class="pln"> +</span><span class="kwd">function</span><span class="pln"> mediaFail </span><span class="pun">(</span><span class="pln">err</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + </span><span class="com">// display an error to the user</span><span class="pln"> +</span><span class="pun">}</span></pre></div> + <p> + When the above code is run, the user would typically be prompted by her user agent to select + a service able to pick media objects (there may be several such services, if she has multiple media galleries). Upon selecting a service, she will be presented with an interface enabling her + to choose what media objects are returned to the Web application. Upon completing her + choice, an array of the media objects would be returned to the Web application in the <code>mediaOK</code> + callback. + </p> + </div> + + <div class="section" id="conformance"><!--OddPage--><h2><span class="secno">2. </span>Conformance</h2> +<p> + As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, + and notes in this specification are non-normative. Everything else in this specification is + normative. +</p> +<p> + The key words <em title="must" class="rfc2119">must</em>, <em title="must not" class="rfc2119">must not</em>, <em title="required" class="rfc2119">required</em>, <em title="should" class="rfc2119">should</em>, <em title="should not" class="rfc2119">should not</em>, <em title="recommended" class="rfc2119">recommended</em>, <em title="may" class="rfc2119">may</em>, + and <em title="optional" class="rfc2119">optional</em> in this specification are to be interpreted as described in [<cite><a href="#bib-RFC2119" class="bibref">RFC2119</a></cite>]. +</p> + + <p> + There is only one single conformance requirement placed upon the <dfn id="dfn-user-agent">user agent</dfn> + product: a <a class="internalDFN" href="#dfn-user-agent">user agent</a> <em title="must" class="rfc2119">must</em> support Web Intents [<cite><a href="#bib-WEBINTENTS" class="bibref">WEBINTENTS</a></cite>]. + </p> + <p> + The conformance criteria in this specification apply to a single product: the + <dfn id="dfn-media-service">Media service</dfn> which exposes a Web Intent service that + handles Pick Media Intents as defined in this specification. + </p> + <p> + The data returned by the <a class="internalDFN" href="#dfn-media-service">Media service</a> is described in this specification using [<cite><a href="#bib-WEBIDL" class="bibref">WEBIDL</a></cite>]. + When this data is provided using JavaScript, then the <a class="internalDFN" href="#dfn-media-service">Media service</a> <em title="must" class="rfc2119">must</em> do so in a manner + consistent with the ECMAScript Bindings defined in the Web IDL specification. + </p> + </div> + + <div id="security-and-privacy-considerations" class="informative section"> + <!--OddPage--><h2><span class="secno">3. </span>Security and Privacy Considerations</h2><p><em>This section is non-normative.</em></p> + <p> + The Intent defined in this specification can be used to find media objects from user's media galleries. The media objects, in the form of photos, videos, voice recordings with related metadata, may contain user's private information. The distribution of this information could + potentially compromise the user's privacy. A conforming implementation + of this specification should provide a mechanism that protects the user's privacy and this mechanism should ensure that no such information is retrievable without the user's express permission. + </p> + <div class="section" id="privacy-considerations-for-implementers-of-the-pick-media-intent"> + <h3><span class="secno">3.1 </span>Privacy considerations for implementers of the Pick Media Intent</h3><p><em>This section is non-normative.</em></p> + <p> + A <a>media service</a> should not provide media objects to Web sites without the express + permission of the user. Obtaining the user's express permission to access a set of media objects does + not imply that the user has granted permission for the same Web site to access more media objects. + A <a>media service</a> should take great care to ensure that the user can clearly see which information + is about to be shared, and must not share more information than has been requested by the Web application. + </p> + <p> + A <a class="internalDFN" href="#dfn-user-agent">user agent</a> may have prearranged trust relationships with a specific <a>media service</a> + that do not require such user interaction. + </p> + </div> + <div class="section" id="privacy-considerations-for-recipients-of-media-objects"> + <h3><span class="secno">3.2 </span>Privacy considerations for recipients of media objects</h3> + <p> + Web sites operators that retrieve media objects using this Intent are denoted as recipients + below. + </p> + <p> + Recipients should only request media objects when necessary, and only use the media objects for the task for which it was provided to them. + </p> + <p> + Recipients should dispose of media objects once that task is completed, unless expressly + permitted to retain it by the user. Recipients should also take measures to protect this information + against unauthorised access. If media objects are stored, users should be allowed to update and + delete this information. + </p> + <p> + The recipient of media objects should not retransmit the media objects without the + user's express permission. Care should be taken when retransmitting and use of encryption is + encouraged. + </p> + <p> + Recipients should clearly and conspicuously disclose the fact that they are collecting media objects, + the purpose of the collection, how long the data is retained, how the data is secured, how the data is + shared if it is shared, how users can access, update and delete the data, and any other choices that + users have with respect to the data. This disclosure should include an explanation of any exceptions to + the guidelines listed above. + </p> + <p> + Note that even if a user gives permission to share their media objects this can have serious + privacy implications for those parties whose media objects are shared, as they may not wish such sharing to + occur. This should be considered by Web applications when requesting and using such information. + </p> + </div> + <div class="section" id="additional-implementation-considerations"> + <h3><span class="secno">3.3 </span>Additional implementation considerations</h3> + <p> + Further to the requirements listed in the previous section, implementers of a <a>user agents</a> are + also advised to consider the following aspects that can negatively affect the privacy of their users: + in certain cases, users can inadvertently grant permission to disclose their media objects + to Web sites. In other cases, the content hosted at a certain URL changes in such a way that the + previously granted permissions no longer apply as far as the user is concerned. Or the users + might simply change their minds. + </p> + <p> + Predicting or preventing these situations is inherently difficult. Mitigation and in-depth defensive + measures are a <a class="internalDFN" href="#dfn-user-agent">user agent</a>'s responsibility and not prescribed by this specification. However, in + designing these measures, implementers are advised to enable user awareness of information sharing, and to + provide easy access to user interfaces that enable revocation of permissions that Web applications have to + access this Intent. + </p> + </div> + </div> + + <div class="section" id="intent-description"> + <!--OddPage--><h2><span class="secno">4. </span>Intent Description</h2> + <p> + The action for this Intent is <code>http://webintents.org/pick</code>. + </p> + <p> + The type for this Intent is <code>http://w3.org/type/media</code>. + </p> + <p> + When a <a>media service</a> is matched for delivery using these action and type, it + <em title="must" class="rfc2119">must</em> respond in one of two ways: + </p> + <ul> + <li> + If media objects have been successfully selected for delivery, then a successful payload is returned + to the client (using <code>postResult()</code>) matching the data format defined below. + </li> + <li> + If an error of any kind takes place in the service, then an error payload is returned (using + <code>postFailure()</code>) matching the error data format defined below. The <a>media service</a> + <em title="must not" class="rfc2119">must not</em> treat the user selecting zero media object or cancelling the service as error conditions. + </li> + </ul> + <div class="section" id="intent-extras"> + <h3><span class="secno">4.1 </span>Intent Extras</h3> + <p> + The Pick Media Intent can be instantiated with an <code>extras</code> field that adheres to the + following dictionary. + </p> + <div class="section" id="the-mediaintentextras-dictionary"> + <h4><span class="secno">4.1.1 </span>The <a class="idlType" href="#idl-def-MediaIntentExtras"><code>MediaIntentExtras</code></a> dictionary</h4> + <p> + The <a class="idlType" href="#idl-def-MediaIntentExtras"><code>MediaIntentExtras</code></a> dictionary describes the options that the invoker can inform to the service as hints in searching the media objects. None of the fields are mandatory. + </p> + <pre class="idl"><span class="idlDictionary" id="idl-def-MediaIntentExtras">dictionary <span class="idlDictionaryID">MediaIntentExtras</span> { +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a>?</span> <span class="idlMemberName"><a href="#widl-MediaIntentExtras-search">search</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a>[]?</span> <span class="idlMemberName"><a href="#widl-MediaIntentExtras-filters">filters</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>unsigned long</a>?</span> <span class="idlMemberName"><a href="#widl-MediaIntentExtras-limit">limit</a></span>;</span> +};</span></pre><div class="section" id="dictionary-mediaintentextras-members"><h5><span class="secno">4.1.1.1 </span>Dictionary <a href="#idl-def-MediaIntentExtras" class="idlType"><code>MediaIntentExtras</code></a> Members</h5><dl class="dictionary-members"><dt id="widl-MediaIntentExtras-filters"><code>filters</code> of type array of <span class="idlMemberType"><a>DOMString</a></span>, nullable</dt><dd> + An array of string which contain hints to the <a>media service</a> to the DOMString and DOMString[] fields in the <a class="idlType" href="#idl-def-Media"><code>Media</code></a> dictionary that + the Web application prefers to use as search criteria. The <a>media service</a> <em title="may" class="rfc2119">may</em> + use the values of the <a>filters</a> to search media objects in the media gallery. If a filter name is provided that the <a>media service</a> does not recognise as a field + of the <a class="idlType" href="#idl-def-Media"><code>Media</code></a> dictionary, then it <em title="must" class="rfc2119">must</em> ignore it. + </dd><dt id="widl-MediaIntentExtras-limit"><code>limit</code> of type <span class="idlMemberType"><a>unsigned long</a></span>, nullable</dt><dd> + By default a <a>media service</a> <em title="may" class="rfc2119">may</em> return as many media objects as the user selects. If <code>limit</code> + is specified, the <a>media service</a> <em title="must not" class="rfc2119">must not</em> return more than <code>limit</code> media objects. The + <a>media service</a> <em title="should" class="rfc2119">should</em> enforce this limitation in the user interface that it exposes. + </dd><dt id="widl-MediaIntentExtras-search"><code>search</code> of type <span class="idlMemberType"><a>DOMString</a></span>, nullable</dt><dd> + A string which provides a hint to the <a>media service</a> to search media objects. + The exact manner in which this hint is exploited is entirely up to the <a>media service</a>. + </dd></dl></div> + </div> + </div> + </div> + <div class="section" id="data-format"> + <!--OddPage--><h2><span class="secno">5. </span>Data Format</h2> + <p> + Upon successful invocation, the <a>media service</a> <em title="must" class="rfc2119">must</em> return an array of <a class="idlType" href="#idl-def-Media"><code>Media</code></a> dictionaries. + </p> + <div class="section" id="the-media-dictionary"> + <h3><span class="secno">5.1 </span>The <a class="idlType" href="#idl-def-Media"><code>Media</code></a> dictionary</h3> + <p> + The <a class="idlType" href="#idl-def-Media"><code>Media</code></a> dictionary captures the properties of a media object. The properties defined in this dictionary present the content (URI by default and Blob as option) of the media data and the related metadata. The properties of the dictionary are defined based on the previous work of metadata survey in Media Ontology WG, the <a href="http://www.w3.org/TR/2012/REC-mediaont-10-20120209/#core-property-lists">core set</a>, [<cite><a href="#bib-MEDIA-ANNOT-REQS" class="bibref">MEDIA-ANNOT-REQS</a></cite>] as well as the common attributes of open APIs provided by typical web-based media services, thereby allowing the data format to be supported across implementations supporting these various media metadata representations. + </p> + <p> + Additional attributes <em title="may" class="rfc2119">may</em> be included according to the provisions detailed in + <a href="#extended-media-properties-and-parameters">Extended Media Properties and Parameters</a>. + </p> + <pre class="idl"><span class="idlDictionary" id="idl-def-Media">dictionary <span class="idlDictionaryID">Media</span> { +<span class="idlMember"> <span class="idlMemberType"><a class="idlType" href="#idl-def-MediaContent"><code>MediaContent</code></a></span> <span class="idlMemberName"><a href="#widl-Media-content">content</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a></span> <span class="idlMemberName"><a href="#widl-Media-description">description</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a>?</span> <span class="idlMemberName"><a href="#widl-Media-id">id</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a></span> <span class="idlMemberName"><a href="#widl-Media-title">title</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a></span> <span class="idlMemberName"><a href="#widl-Media-type">type</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a>?</span> <span class="idlMemberName"><a href="#widl-Media-author">author</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a>?</span> <span class="idlMemberName"><a href="#widl-Media-category">category</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a>?</span> <span class="idlMemberName"><a href="#widl-Media-copyright">copyright</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a>?</span> <span class="idlMemberName"><a href="#widl-Media-fileName">fileName</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>unsigned long</a>?</span> <span class="idlMemberName"><a href="#widl-Media-fileSize">fileSize</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>Position</a>?</span> <span class="idlMemberName"><a href="#widl-Media-location">location</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a>[]?</span> <span class="idlMemberName"><a href="#widl-Media-tags">tags</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a class="idlType" href="#idl-def-MediaContent"><code>MediaContent</code></a>?</span> <span class="idlMemberName"><a href="#widl-Media-thumbnail">thumbnail</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>Date</a>?</span> <span class="idlMemberName"><a href="#widl-Media-createdDate">createdDate</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>Date</a>?</span> <span class="idlMemberName"><a href="#widl-Media-updatedDate">updatedDate</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a>?</span> <span class="idlMemberName"><a href="#widl-Media-collection">collection</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>unsigned long</a>?</span> <span class="idlMemberName"><a href="#widl-Media-duration">duration</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>unsigned long</a>?</span> <span class="idlMemberName"><a href="#widl-Media-frameRate">frameRate</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a>?</span> <span class="idlMemberName"><a href="#widl-Media-language">language</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>unsigned long</a>?</span> <span class="idlMemberName"><a href="#widl-Media-likeCount">likeCount</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>float</a>?</span> <span class="idlMemberName"><a href="#widl-Media-rating">rating</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>unsigned long</a>?</span> <span class="idlMemberName"><a href="#widl-Media-ratingCount">ratingCount</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a>?</span> <span class="idlMemberName"><a href="#widl-Media-resolution">resolution</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>unsigned long</a>?</span> <span class="idlMemberName"><a href="#widl-Media-samplingRate">samplingRate</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>Date</a>?</span> <span class="idlMemberName"><a href="#widl-Media-publishedDate">publishedDate</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a>?</span> <span class="idlMemberName"><a href="#widl-Media-publisher">publisher</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>unsigned long</a>?</span> <span class="idlMemberName"><a href="#widl-Media-viewCount">viewCount</a></span>;</span> +};</span></pre><div class="section" id="dictionary-media-members"><h4><span class="secno">5.1.1 </span>Dictionary <a href="#idl-def-Media" class="idlType"><code>Media</code></a> Members</h4><dl class="dictionary-members"><dt id="widl-Media-author"><code>author</code> of type <span class="idlMemberType"><a>DOMString</a></span>, nullable</dt><dd> + The author of the media resource in string. + </dd><dt id="widl-Media-category"><code>category</code> of type <span class="idlMemberType"><a>DOMString</a></span>, nullable</dt><dd> + The category (genre) of the content of the media resource. + </dd><dt id="widl-Media-collection"><code>collection</code> of type <span class="idlMemberType"><a>DOMString</a></span>, nullable</dt><dd> + <p> + The name of the collection or album that the media resource belongs to. + </p> + </dd><dt id="widl-Media-content"><code>content</code> of type <span class="idlMemberType"><a class="idlType" href="#idl-def-MediaContent"><code>MediaContent</code></a></span></dt><dd> + A dictionary containing a URI to the content of the media resource. It optionally contains a Blob of the content. + </dd><dt id="widl-Media-copyright"><code>copyright</code> of type <span class="idlMemberType"><a>DOMString</a></span>, nullable</dt><dd> + The copyright statement associated with the media resource. + </dd><dt id="widl-Media-createdDate"><code>createdDate</code> of type <span class="idlMemberType"><a>Date</a></span>, nullable</dt><dd> + <p> + The creation date of the media resource in Date type. + </p> + </dd><dt id="widl-Media-description"><code>description</code> of type <span class="idlMemberType"><a>DOMString</a></span></dt><dd> + The text description of the content of the media resource. + </dd><dt id="widl-Media-duration"><code>duration</code> of type <span class="idlMemberType"><a>unsigned long</a></span>, nullable</dt><dd> + <p> + The actual duration of the resource. The units are defined to be seconds. + </p> + </dd><dt id="widl-Media-fileName"><code>fileName</code> of type <span class="idlMemberType"><a>DOMString</a></span>, nullable</dt><dd> + This field's value is not a url, but is the filename (probably not fully qualified, but simply the name of the leaf file) of the resource being passed as assigned by the user. (See <a href="http://www.w3.org/wiki/WebIntents/MIME_Types">WebIntents/MIME Types</a>) + </dd><dt id="widl-Media-fileSize"><code>fileSize</code> of type <span class="idlMemberType"><a>unsigned long</a></span>, nullable</dt><dd> + The size of the content of the media resource. + </dd><dt id="widl-Media-frameRate"><code>frameRate</code> of type <span class="idlMemberType"><a>unsigned long</a></span>, nullable</dt><dd> + <p> + The video frame rate. The units are defined to be frames per second. + </p> + </dd><dt id="widl-Media-id"><code>id</code> of type <span class="idlMemberType"><a>DOMString</a></span>, nullable</dt><dd> + <p> + A URI identifying a media resource. + </p> + <div class="note"><div class="note-title"><span>Note</span></div><p class=""> + The property, identifier, defined in the core set of [<a href="http://www.w3.org/TR/2012/REC-mediaont-10-20120209/#core-property-lists">Ontology for Media Resources 1.0</a>] can be considered as a representation format. + </p></div> + </dd><dt id="widl-Media-language"><code>language</code> of type <span class="idlMemberType"><a>DOMString</a></span>, nullable</dt><dd> + <p> + The language used in the media resource. + </p> + </dd><dt id="widl-Media-likeCount"><code>likeCount</code> of type <span class="idlMemberType"><a>unsigned long</a></span>, nullable</dt><dd> + <p> + The count of the vote in favour of the media resource. + </p> + </dd><dt id="widl-Media-location"><code>location</code> of type <span class="idlMemberType"><a>Position</a></span>, nullable</dt><dd> + The location information related to the content of the media resource. [<cite><a href="#bib-GEOLOCATION-API" class="bibref">GEOLOCATION-API</a></cite>] + </dd><dt id="widl-Media-publishedDate"><code>publishedDate</code> of type <span class="idlMemberType"><a>Date</a></span>, nullable</dt><dd> + <p> + The publishing date of the media resource in Date type. + </p> + </dd><dt id="widl-Media-publisher"><code>publisher</code> of type <span class="idlMemberType"><a>DOMString</a></span>, nullable</dt><dd> + <p> + The publisher of the media resource. + </p> + </dd><dt id="widl-Media-rating"><code>rating</code> of type <span class="idlMemberType"><a>float</a></span>, nullable</dt><dd> + <p> + The rating value (e.g., customer rating, review, audience appreciation) of the media resource. + </p> + </dd><dt id="widl-Media-ratingCount"><code>ratingCount</code> of type <span class="idlMemberType"><a>unsigned long</a></span>, nullable</dt><dd> + <p> + The number of ratings made on the media resource. + </p> + </dd><dt id="widl-Media-resolution"><code>resolution</code> of type <span class="idlMemberType"><a>DOMString</a></span>, nullable</dt><dd> + <p> + The frame size of the resource (e.g., width and height of 720 and 480 in px is represented as 720*480+px). + </p> + <div class="note"><div class="note-title"><span>Note</span></div><p class=""> + If the usage of this property is frequent, a separate dictionary can be defined referring to frameSize property defined in [<a href="http://www.w3.org/TR/2012/REC-mediaont-10-20120209/#core-property-lists">Ontology for Media Resources 1.0</a>] + </p></div> + </dd><dt id="widl-Media-samplingRate"><code>samplingRate</code> of type <span class="idlMemberType"><a>unsigned long</a></span>, nullable</dt><dd> + <p> + The audio sampling rate. The units are defined to be samples per second. + </p> + </dd><dt id="widl-Media-tags"><code>tags</code> of type array of <span class="idlMemberType"><a>DOMString</a></span>, nullable</dt><dd> + <p> + The array of strings representing series of tag string. + </p> + </dd><dt id="widl-Media-thumbnail"><code>thumbnail</code> of type <span class="idlMemberType"><a class="idlType" href="#idl-def-MediaContent"><code>MediaContent</code></a></span>, nullable</dt><dd> + A dictionary containing a URI to the thumbnail of the content of the media resource. It optionally contains a Blob of the thumbnail of the content. + </dd><dt id="widl-Media-title"><code>title</code> of type <span class="idlMemberType"><a>DOMString</a></span></dt><dd> + The title or name given to the media resource. + </dd><dt id="widl-Media-type"><code>type</code> of type <span class="idlMemberType"><a>DOMString</a></span></dt><dd> + The MIME type of the media resource (e.g., image/png, video/*) [<cite><a href="#bib-RFC2046" class="bibref">RFC2046</a></cite>]. + </dd><dt id="widl-Media-updatedDate"><code>updatedDate</code> of type <span class="idlMemberType"><a>Date</a></span>, nullable</dt><dd> + <p> + The last updated date of the media resource in Date type. + </p> + </dd><dt id="widl-Media-viewCount"><code>viewCount</code> of type <span class="idlMemberType"><a>unsigned long</a></span>, nullable</dt><dd> + <p> + The access count made on the media resource. + </p> + </dd></dl></div> + </div> + + <div class="section" id="the-mediacontent-dictionary"> + <h3><span class="secno">5.2 </span>The <a class="idlType" href="#idl-def-MediaContent"><code>MediaContent</code></a> dictionary</h3> + <p> + The <a class="idlType" href="#idl-def-MediaContent"><code>MediaContent</code></a> dictionary describes a media content reference in detail. + </p> + <pre class="idl"><span class="idlDictionary" id="idl-def-MediaContent">dictionary <span class="idlDictionaryID">MediaContent</span> { +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a></span> <span class="idlMemberName"><a href="#widl-MediaContent-uri">uri</a></span>;</span> +<span class="idlMember"> <span class="idlMemberType"><a>Blob</a>?</span> <span class="idlMemberName"><a href="#widl-MediaContent-blob">blob</a></span>;</span> +};</span></pre><div class="section" id="dictionary-mediacontent-members"><h4><span class="secno">5.2.1 </span>Dictionary <a href="#idl-def-MediaContent" class="idlType"><code>MediaContent</code></a> Members</h4><dl class="dictionary-members"><dt id="widl-MediaContent-blob"><code>blob</code> of type <span class="idlMemberType"><a>Blob</a></span>, nullable</dt><dd> + The optional property to contain the media content in Blob format. + </dd><dt id="widl-MediaContent-uri"><code>uri</code> of type <span class="idlMemberType"><a>DOMString</a></span></dt><dd> + The URI to the content of the media resource. This attribute is a mandatory property. + </dd></dl></div> + </div> + + <div class="section" id="the-mediaerror-dictionary"> + <h3><span class="secno">5.3 </span>The <a class="idlType" href="#idl-def-MediaError"><code>MediaError</code></a> dictionary</h3> + <p> + If the <a>media service</a> encounters an error then it <em title="must" class="rfc2119">must</em> return an error + (through <code>postFailure()</code>) using the <a class="idlType" href="#idl-def-MediaError"><code>MediaError</code></a> dictionary. + </p> + <pre class="idl"><span class="idlDictionary" id="idl-def-MediaError">dictionary <span class="idlDictionaryID">MediaError</span> { +<span class="idlMember"> <span class="idlMemberType"><a>DOMString</a></span> <span class="idlMemberName"><a href="#widl-MediaError-message">message</a></span>;</span> +};</span></pre><div class="section" id="dictionary-mediaerror-members"><h4><span class="secno">5.3.1 </span>Dictionary <a href="#idl-def-MediaError" class="idlType"><code>MediaError</code></a> Members</h4><dl class="dictionary-members"><dt id="widl-MediaError-message"><code>message</code> of type <span class="idlMemberType"><a>DOMString</a></span></dt><dd>A message describing the error.</dd></dl></div> + </div> + <div class="section" id="extended-media-properties-and-parameters"> + <h3><span class="secno">5.4 </span>Extended Media Properties and Parameters</h3> + <p> + A <a>media service</a> <em title="may" class="rfc2119">may</em> extend the dictionaries described in in the Data Formats section with + additional fields. If providing an extended field, a <a>media service</a> <em title="must" class="rfc2119">must</em> prefix its name + with <code>X</code> (U+0058 LATIN CAPITAL LETTER X) or use a vendor-specific prefix. + </p> + </div> + </div> + <div id="media-service-example" class="informative appendix section"> + <!--OddPage--><h2><span class="secno">A. </span>Media Service Example</h2><p><em>This section is non-normative.</em></p> + + <p> + This section describes an example usage of the Pick Media Intent in media service. It shows the use of the values delivered through <a class="idlType" href="#idl-def-MediaIntentExtras"><code>MediaIntentExtras</code></a> dictionary, and the way to return the result array of media objects through <a class="idlType" href="#idl-def-Media"><code>Media</code></a> dictionary. + </p> + + <div class="section" id="accessing-mediaintentextras-values---example-1"> + <h3><span class="secno">A.1 </span>Accessing <a class="idlType" href="#idl-def-MediaIntentExtras"><code>MediaIntentExtras</code></a> Values - Example #1</h3><p><em>This section is non-normative.</em></p> + + <p> + Media service implementers can retrieve the values delivered in extra field of the intent request. The extra field contains the MediaIntentExtras dictionary: + </p> + <div class="example"> + <pre class="highlight prettyprint"><span class="pln"> </span><span class="tag"><script</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text/javascript"</span><span class="tag">></span><span class="pln"> + </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">window</span><span class="pun">.</span><span class="pln">intent</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + </span><span class="kwd">var</span><span class="pln"> keyword </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">.</span><span class="pln">intent</span><span class="pun">.</span><span class="pln">extra</span><span class="pun">.</span><span class="pln">search</span><span class="pun">;</span><span class="pln"> </span><span class="com">// a string based hint to search</span><span class="pln"> + </span><span class="kwd">var</span><span class="pln"> filters </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">.</span><span class="pln">intent</span><span class="pun">.</span><span class="pln">extra</span><span class="pun">.</span><span class="pln">filters</span><span class="pun">;</span><span class="pln"> </span><span class="com">// DOMString[] based hint to fields to match</span><span class="pln"> + </span><span class="kwd">var</span><span class="pln"> limit </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">.</span><span class="pln">intent</span><span class="pun">.</span><span class="pln">extra</span><span class="pun">.</span><span class="pln">limit</span><span class="pun">;</span><span class="pln"> </span><span class="com">// maximum number of objects to return</span><span class="pln"> + + </span><span class="com">// do search relevant media objects based on the extras</span><span class="pln"> + </span><span class="kwd">var</span><span class="pln"> mediaObjectArray </span><span class="pun">=</span><span class="pln"> searchMediaObjects</span><span class="pun">(</span><span class="pln">keyword</span><span class="pun">,</span><span class="pln"> filters</span><span class="pun">,</span><span class="pln"> limit</span><span class="pun">);</span><span class="pln"> + + </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mediaObjectArray</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + window</span><span class="pun">.</span><span class="pln">intent</span><span class="pun">.</span><span class="pln">postResult</span><span class="pun">(</span><span class="pln">mediaObjectArray</span><span class="pun">);</span><span class="pln"> + </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + window</span><span class="pun">.</span><span class="pln">intent</span><span class="pun">.</span><span class="pln">postFailure</span><span class="pun">(</span><span class="pln">errorMessage</span><span class="pun">);</span><span class="pln"> + </span><span class="pun">}</span><span class="pln"> + </span><span class="pun">}</span><span class="pln"> + </span><span class="tag"></script></span><span class="pln"> + </span></pre> + </div> + + <p> + The use of the properties in MediaIntentExtras dictionary is optional. Service implementers can decide whether these properties are to be used as hints for search. + </p> + </div> + + <div class="section" id="creating-media-object---example-2"> + <h3><span class="secno">A.2 </span>Creating Media Object - Example #2</h3> + + <p> + Media service implementers can create media objects in the format of the Media dictionary and make an array of media objects to send to client. (using <code>postResult()</code>): + </p> + + <div class="example"> + <pre class="highlight prettyprint"><span class="pln"> </span><span class="tag"><script</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text/javascript"</span><span class="tag">></span><span class="pln"> + </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">window</span><span class="pun">.</span><span class="pln">intent</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + </span><span class="kwd">var</span><span class="pln"> content </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{};</span><span class="pln"> + content</span><span class="pun">.</span><span class="pln">uri </span><span class="pun">=</span><span class="pln"> </span><span class="str">"http://example.com/gallery/image00001.png"</span><span class="pun">;</span><span class="pln"> + + </span><span class="kwd">var</span><span class="pln"> mediaObject </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Object</span><span class="pun">();</span><span class="pln"> + mediaObject</span><span class="pun">.</span><span class="pln">content </span><span class="pun">=</span><span class="pln"> content</span><span class="pun">;</span><span class="pln"> + mediaObject</span><span class="pun">.</span><span class="pln">description </span><span class="pun">=</span><span class="pln"> </span><span class="str">"The city view of Seoul"</span><span class="pun">;</span><span class="pln"> + mediaObject</span><span class="pun">.</span><span class="pln">id </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln"> + mediaObject</span><span class="pun">.</span><span class="pln">title </span><span class="pun">=</span><span class="pln"> </span><span class="str">"City of Seoul"</span><span class="pun">;</span><span class="pln"> + mediaObject</span><span class="pun">.</span><span class="pln">type </span><span class="pun">=</span><span class="pln"> </span><span class="str">"image/png"</span><span class="pun">;</span><span class="pln"> </span><span class="com">// MIME type of the media content</span><span class="pln"> + mediaObject</span><span class="pun">.</span><span class="pln">author </span><span class="pun">=</span><span class="pln"> </span><span class="str">"J."</span><span class="pun">;</span><span class="pln"> + + </span><span class="kwd">var</span><span class="pln"> mediaObjectArray </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Array</span><span class="pun">();</span><span class="pln"> + + mediaObjectArray</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> mediaObject</span><span class="pun">;</span><span class="pln"> + + </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mediaObjectArray</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + window</span><span class="pun">.</span><span class="pln">intent</span><span class="pun">.</span><span class="pln">postResult</span><span class="pun">(</span><span class="pln">mediaObjectArray</span><span class="pun">);</span><span class="pln"> + </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + window</span><span class="pun">.</span><span class="pln">intent</span><span class="pun">.</span><span class="pln">postFailure</span><span class="pun">(</span><span class="pln">errorMessage</span><span class="pun">);</span><span class="pln"> + </span><span class="pun">}</span><span class="pln"> + </span><span class="pun">}</span><span class="pln"> + </span><span class="tag"></script></span><span class="pln"> + </span></pre> + </div> + </div> + </div> + + +<div class="appendix section" id="references"><!--OddPage--><h2><span class="secno">B. </span>References</h2><div class="section" id="normative-references"><h3><span class="secno">B.1 </span>Normative references</h3><dl class="bibliography"><dt id="bib-RFC2119">[RFC2119]</dt><dd>S. Bradner. <a href="http://www.ietf.org/rfc/rfc2119.txt"><cite>Key words for use in RFCs to Indicate Requirement Levels.</cite></a> March 1997. Internet RFC 2119. URL: <a href="http://www.ietf.org/rfc/rfc2119.txt">http://www.ietf.org/rfc/rfc2119.txt</a> +</dd><dt id="bib-WEBIDL">[WEBIDL]</dt><dd>Cameron McCormack. <a href="http://www.w3.org/TR/2011/WD-WebIDL-20110927/"><cite>Web IDL.</cite></a> 27 September 2011. W3C Working Draft. (Work in progress.) URL: <a href="http://www.w3.org/TR/2011/WD-WebIDL-20110927/">http://www.w3.org/TR/2011/WD-WebIDL-20110927/</a> +</dd><dt id="bib-WEBINTENTS">[WEBINTENTS]</dt><dd>Greg Billock; James Hawkins; Paul Kinlan. <a href="http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html"><cite>Web Intents.</cite></a> Editors' Draft. (Work in progress.) URL: <a href="http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html">http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html</a> +</dd></dl></div><div class="section" id="informative-references"><h3><span class="secno">B.2 </span>Informative references</h3><dl class="bibliography"><dt id="bib-GEOLOCATION-API">[GEOLOCATION-API]</dt><dd>Andrei Popescu. <a href="http://www.w3.org/TR/2008/WD-geolocation-API-20081222/"><cite>Geolocation API Specification.</cite></a> 22 December 2008. W3C Working Draft. (Work in progress.) URL: <a href="http://www.w3.org/TR/2008/WD-geolocation-API-20081222/">http://www.w3.org/TR/2008/WD-geolocation-API-20081222/</a> +</dd><dt id="bib-MEDIA-ANNOT-REQS">[MEDIA-ANNOT-REQS]</dt><dd>WonSuk Lee; Felix Sasaki; Tobias Bürger; Véronique Malaisé. <a href="http://www.w3.org/TR/2010/WD-media-annot-reqs-20100121/"><cite>Use Cases and Requirements for Ontology and API for Media Object 1.0.</cite></a>W3C Working Draft 21 January 2010. URL: <a href="http://www.w3.org/TR/2010/WD-media-annot-reqs-20100121/">http://www.w3.org/TR/2010/WD-media-annot-reqs-20100121/</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></body></html> \ No newline at end of file
Received on Wednesday, 11 July 2012 04:16:35 UTC