W3C home > Mailing lists > Public > public-device-apis@w3.org > September 2012

Re: Content of URL picked by Intent

From: Greg Billock <gbillock@google.com>
Date: Wed, 19 Sep 2012 10:38:51 -0700
Message-ID: <CAAxVY9fsg-CWsxovtprqHfTfA_L9Pw0ZsUWZrJ2CXmFTfi9OEw@mail.gmail.com>
To: Norifumi Kikkawa <Norifumi.Kikkawa@jp.sony.com>
Cc: "Frederick.Hirsch@nokia.com" <Frederick.Hirsch@nokia.com>, "jungkee.song@samsung.com" <jungkee.song@samsung.com>, "paulkinlan@google.com" <paulkinlan@google.com>, "public-web-intents@w3.org" <public-web-intents@w3.org>, "public-device-apis@w3.org" <public-device-apis@w3.org>
I don't like using "multiple" as a field on the intent object. It
doesn't always make sense, and seems like something that ought to be
treated at the interchange data format layer.

The more I consider this, the more I like using the 'type' parameter
to communicate this. So something like "[]image/*" or "[image/*]" or
"multipart/mixed;type=image/*" to indicate that the service can
provide multiple object support, or that client is expecting it.
That's nicely explicit, builds on the single-value case, and will work
for all the use cases we know of.

>From a purely technical standpoint, I think using multipart/... is
correct. Is it too unwieldy though?



On Wed, Sep 19, 2012 at 2:11 AM, Norifumi Kikkawa
<Norifumi.Kikkawa@jp.sony.com> wrote:
> Hi,
>
>> > It sounds like we are saying here that a 'profile' may require an array where it makes sense (e.g. Pick Contacts) and otherwise it can be either an array or single, requiring checking; though it might be simpler to always require returning an array.
>
> A more explicit way (like specifying "multiple") is sometimes useful in
> a Pick-Media type use case even if an array is available for intent.
>
> Note that my point here is multiple contents in the post result data
> retruned in the IntentSuccessCallback and NOT multiple contents
> in data of Intent object.
>
> Please assume a service just wants a single image to edit. If it can
> tell "just one image is enough" at the startActivity time, the invoked
> service which supports "Pick-Media" web intents can arrange its intent
> page for a user to select only a single image - disabling multiple
> selection for example.
>
> I believe this is not a Pick-Media specific requirement. Therefore the
> WebIntents spec should have a way for a service to allow/prohibit
> multiple post result contents like below;
>
> interface Intent {
>     readonly attribute DOMString     action;
>     readonly attribute DOMString     type;
>     readonly attribute any           data;
>     readpnly attribute Boolean    multiplePostResults;
>         // true if multiple result is allowed.
>     readonly attribute MessagePort[] ports;
>     void postResult (any data, optional sequence<Transferable> transferable);
>     void postFailure (any data);
> };
>
> This requirement is not applicable for intent actions which don't use a
> post result.
>
> Don't you think this is useful?
>
> Thanks,
> Kikkawa
>
>
> On Fri, 14 Sep 2012 03:16:55 +0900
> Greg Billock <gbillock@google.com> wrote:
>
>> On Thu, Sep 13, 2012 at 8:04 AM,  <Frederick.Hirsch@nokia.com> wrote:
>> > It sounds like we are saying here that a 'profile' may require an array where it makes sense (e.g. Pick Contacts) and otherwise it can be either an array or single, requiring checking; though it might be simpler to always require returning an array.
>> >
>> > To make sense of information an agreement is needed so we can expect a 'profile' like Pick Contacts etc, to specify that an array is returned, if this is not the mandatory default.
>> >
>> > What is the downside of using a Javascript array? Seems straightforward and simple...
>>
>> No downside -- that's what I prefer. The only thing I worry about is
>> if it is enough of a gotcha for simple cases (single values) that we
>> should do either something more explicit (like "multiple") or also
>> recommend handling a single object as { ... } instead of [ { ... } ].
>> Both are accommodations, and so are disappointing, but if they end up
>> making the API simpler to work with for most cases, I see the case for
>> making them.
>>
>> >
>> > regards, Frederick
>> >
>> > Frederick Hirsch
>> > Nokia
>> >
>> >
>> >
>> > On Sep 12, 2012, at 2:09 AM, ext Jungkee Song wrote:
>> >
>> >>> From: Greg Billock [mailto:gbillock@google.com]
>> >>> Sent: Saturday, September 08, 2012 12:23 AM
>> >>>
>> >>> On Fri, Sep 7, 2012 at 1:50 AM, Jungkee Song <jungkee.song@samsung.com>
>> >>> wrote:
>> >>>> Hi Greg,
>> >>>>
>> >>>> I propose we introduce *collection* [1]. FileList object in File API [2]
>> >>>> already shows *collection* is quite handy to deliver and access list of
>> >>>> objects.
>> >>>
>> >>> We already have in the spec that |data| is an arbitrary structured
>> >>> clone, which can be a collection. A perfectly valid solution is to
>> >>> just always have return types be collections, so in response to a pick
>> >>> intent you'd get:
>> >>>
>> >>> [ { "url": "the url", "filename": "filename" } ]
>> >>
>> >> Yes. In the schema level, client and service can have an agreement that they
>> >> will exchange data in collection type always. To make it explicit, we can
>> >> specify the requirement for data exchange type in related documents.
>> >>
>> >>
>> >>> JS already has the right tools to handle data objects like this. In
>> >>> that world, there's no need for "multiple" -- the payload is always
>> >>> potentially multiple. It is a bit error prone in the sense that for
>> >>> one object you have to return "[obj]" instead of just "obj".
>> >>
>> >> I think for the services that essentially assume multiple-object delivery
>> >> (e.g., Pick Contacts/Media Intent), it is even better for developers to
>> >> always expect the result as collection type even for a single object case
>> >> like [obj]; otherwise, developers always have to check the type (like the
>> >> code example below) as Intents are loosely-coupled and being developed
>> >> independently.
>> >>
>> >>
>> >>> One solution would be to allow both:
>> >>>
>> >>> function intentResult(data) {
>> >>>  if (data instanceof Array) {
>> >>>    handleResult(data[0]);
>> >>>    // obviously not fully general, but you get the idea
>> >>>  } else {
>> >>>    handleResult(data);
>> >>>  }
>> >>> }
>> >>>
>> >>> I prefer using existing machinery rather than inventing a new class to
>> >>> solve this problem. I'm pretty sure that having used structured clone,
>> >>> we have enough latitude to solve this problem at the schema level, and
>> >>> not need any new API complexity.
>> >>
>> >> Yes, I agree.
>> >>
>> >>
>> >>>> --Web IDL
>> >>>> [ArrayClass]
>> >>>> interface ObjectList {
>> >>>>  getter Object? item(unsigned long index);
>> >>>>  readonly attribute unsigned long length;
>> >>>> };
>> >>>>
>> >>>> --ECMAScript (Client)
>> >>>> var mimeObjects = getImageDataBlobList(...); // return collection of
>> >>>> MimeTypeIntentData
>> >>>> var intent = new Intent({
>> >>>>    action: "http://intents.w3.org/pick",
>> >>>>    type: "image/png",
>> >>>>    data: objects
>> >>>> });
>> >>>>
>> >>>> navigator.startActivity(intent);
>> >>>>
>> >>>> --WebIDL (Service)
>> >>>> partial interface Intent {
>> >>>>    readonly attribute Object objectList;
>> >>>> };
>> >>>>
>> >>>> --ECMAScript (Service)
>> >>>> window.intent.objectList.item(0);
>> >>>> or
>> >>>> window.intent.objectList[0]
>> >>>>
>> >>>> both are valid syntax.
>> >>>>
>> >>>> This can be used for Pick Media Intent and Pick Contacts Intent to
>> >>> deliver
>> >>>> array of Media objects and array of Contact objects, respectively as
>> >>> well.
>> >>>> i.e., I think it covers generic use cases in delivering list of
>> >>> *objects*.
>> >>>>
>> >>>> [1] http://www.w3.org/TR/domcore/#collections
>> >>>> [2] http://www.w3.org/TR/FileAPI/#dfn-filelist
>> >>>>
>> >>>>
>> >>>> Jungkee
>> >>>>
>> >>>>
>> >>>>> -----Original Message-----
>> >>>>> From: Greg Billock [mailto:gbillock@google.com]
>> >>>>> Sent: Friday, September 07, 2012 2:39 AM
>> >>>>> To: Norifumi Kikkawa
>> >>>>> Cc: Paul Kinlan; public-web-intents@w3.org
>> >>>>> Subject: Re: Content of URL picked by Intent
>> >>>>>
>> >>>>> The previous thinking on formatting intent payloads for MIME is here:
>> >>>>> http://www.w3.org/wiki/WebIntents/MIME_Types
>> >>>>>
>> >>>>> This has two flaws which we need to fix. First is that it relies on
>> >>>>> |extras| which we don't want to do. The second is that we need to
>> >>>>> figure out how to pass multiple data through, for which I think we'll
>> >>>>> use the "multiple: true" key. There are a few options here, but what I
>> >>>>> am advocating for is that data payloads for MIME types are always
>> >>>>> javascript objects, and that there is a consistent namespace of keys
>> >>>>> across all types. Proposal:
>> >>>>>
>> >>>>> dictionary MimeTypeIntentData {
>> >>>>>  URL url;
>> >>>>>  Blob blob;
>> >>>>>  DOMString text;
>> >>>>>  DOMString filename;
>> >>>>>  boolean multiple;
>> >>>>> }
>> >>>>>
>> >>>>> This plan needs some help when multiple is true. The fields could
>> >>>>> become sequence<URL>, sequence<Blob>, etc., but that's distasteful.
>> >>>>> Any better ideas for how to handle that?
>> >>>>>
>> >>>>> We will almost certainly end up with other keys in this schema for
>> >>>>> MIME types (for example, I've suggested using "errorName" and
>> >>>>> "errorMessage" for keys in error objects to parallel the JS Error type
>> >>>>> fields while trying to keep them separate from potential fields in
>> >>>>> non-error payloads). We've talked about passing 'origin' in some
>> >>>>> situations, and it may come to pass that 'origin' ends up being a
>> >>>>> voluntary payload field for some interchange types. You can imagine
>> >>>>> wanting to attach a "Content-Type" field, especially for something
>> >>>>> like {action: "pick", type: "image/*"} where the service can return
>> >>>>> the exact type of the attached image.
>> >>>>>
>> >>>>> Thanks for pushing on this. This is a critical discussion, as we
>> >>>>> recognized early on, and I'm glad that we're far enough on to be
>> >>>>> tackling it directly. :-)
>> >>>>>
>> >>>>> -Greg
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> On Wed, Sep 5, 2012 at 11:25 PM, Norifumi Kikkawa
>> >>>>> <Norifumi.Kikkawa@jp.sony.com> wrote:
>> >>>>>> Hi Paul, Thank you for your comment.
>> >>>>>>
>> >>>>>> Yes, for sharing purpose, the content of URL doesn't matter in many
>> >>>>> cases.
>> >>>>>> I'm thinking of "view" intent, which will enable a service to play
>> >>> its
>> >>>>>> introduced movie on a TV with the local discovery addendum.
>> >>>>>> In different from the image use case, maybe the view intent should
>> >>> pass
>> >>>>> url
>> >>>>>> to the movie rather than its binary file.
>> >>>>>>
>> >>>>>> Assuming the TV can play MP4 but WebM. I'd like to see a user agent
>> >>>>>> filters out incompatible TV from its picker list based on target
>> >>> movie.
>> >>>>>> For example, to play WebM content, the TV above should not be shown
>> >>> even
>> >>>>>> if it supports 'view' action (, or shown with "can't play" message).
>> >>>>>>
>> >>>>>>> Given have just removed extras, the data attribute in the intent
>> >>> object
>> >>>>> will need to carry extra data, so I will share a link to a document
>> >>> that
>> >>>>> describes how the payload should appear exactly for then share intent
>> >>>>> across multiple data types.
>> >>>>>>
>> >>>>>> Yes. With keeping the type attribute as "video/mp4" to simplify user
>> >>>>>> agent's work for filtering pickers, some other way should tell how to
>> >>>>>> specify the content.
>> >>>>>>
>> >>>>>> In the Data Formats section of http://webintents.org/pick, Brob, Data
>> >>>>>> URI and their list are assumed and may be distincted implicitly. Just
>> >>>>>> adding 'referece URI(?)' here without adding any data attribute is
>> >>>>>> minimum option.
>> >>>>>>
>> >>>>>> Anyway, at first, I'd like to know whether such usage of url in web
>> >>>>>> intents is possible or not since I have never seen it.
>> >>>>>>
>> >>>>>> Thanks,
>> >>>>>> Kikkawa
>> >>>>>>
>> >>>>>> On Wed, 5 Sep 2012 19:12:35 +0900
>> >>>>>> Paul Kinlan <paulkinlan@google.com> wrote:
>> >>>>>>
>> >>>>>>> Hi,
>> >>>>>>>
>> >>>>>>> Text/uri-list is for sharing URLs, it doesn't care what the content
>> >>> is
>> >>>>> behind that URL. Think of a button that is in the browser that just
>> >>> says
>> >>>>> share the URL in then address bar.  It could be a page, movie or PDF
>> >>> file.
>> >>>>>>>
>> >>>>>>> To be very explicit abut sharing a movie file your data type would
>> >>> be
>> >>>>> video/mpeg for example.  Then a URL that is passed in would be a
>> >>> pointer
>> >>>>> to a video file.
>> >>>>>>>
>> >>>>>>> Given have just removed extras, the data attribute in the intent
>> >>> object
>> >>>>> will need to carry extra data, so I will share a link to a document
>> >>> that
>> >>>>> describes how the payload should appear exactly for then share intent
>> >>>>> across multiple data types.
>> >>>>>>>
>> >>>>>>> P
>> >>>>>>>
>> >>>>>>> On 5 Sep 2012 01:22, "Norifumi Kikkawa"
>> >>>>> <Norifumi.Kikkawa@jp.sony.com<mailto:Norifumi.Kikkawa@jp.sony.com>>
>> >>> wrote:
>> >>>>>>> Hi all,
>> >>>>>>>
>> >>>>>>> I found that some media related intents actions can handle not only
>> >>>>>>> binary content but also url list. For example,
>> >>>>>>> http://webintents.org/share, http://webintents.org/pick assume the
>> >>>>>>> text/url type.
>> >>>>>>>
>> >>>>>>> Although I believe this is also useful in case of a single big
>> >>> content
>> >>>>> (e.g.
>> >>>>>>> movie), I concern that the "text/url" type seems not enough
>> >>>>>>> to determine the capability/requirement of services. How can the
>> >>> intent
>> >>>>>>> registration tag say "I can provide a url for movie, but for contact
>> >>>>>>> info"? How to pick a movie by url?
>> >>>>>>>
>> >>>>>>> My question is :
>> >>>>>>> 1. Can a URL be used for such porpose in web intents?
>> >>>>>>> 2. Does it make sense to add some mechanism to expose more detail
>> >>>>>>> info in "text/url" case?
>> >>>>>>>
>> >>>>>>> A URL may reveal its origin, but this is another issue...
>> >>>>>>>
>> >>>>>>> Thanks,
>> >>>>>>> Kikkawa
>> >>>>>>>
>> >>>>>>> ---------------------------------------------
>> >>>>>>> Norifumi Kikkawa
>> >>>>> <Norifumi.Kikkawa@jp.sony.com<mailto:Norifumi.Kikkawa@jp.sony.com>>
>> >>>>>>>  Section 1
>> >>>>>>>  Network Technology Dept.
>> >>>>>>>  Information Technology Development Division
>> >>>>>>>  System & Software Technology Platfotm
>> >>>>>>>  Sony Corporation
>> >>>>>>> (TEL) +81 50 3750 3953<tel:%2B81%2050%203750%203953>
>> >>>>>>> -----------------------------------------------
>> >>>>>>>
>> >>>>>>>
>> >>>>>>
>> >>>>>> ---------------------------------------------
>> >>>>>> Norifumi Kikkawa <Norifumi.Kikkawa@jp.sony.com>
>> >>>>>>  Section 1
>> >>>>>>  Network Technology Dept.
>> >>>>>>  Information Technology Development Division
>> >>>>>>  System & Software Technology Platfotm
>> >>>>>>  Sony Corporation
>> >>>>>> (TEL) +81 50 3750 3953
>> >>>>>> -----------------------------------------------
>> >>>>>>
>> >>>>>>
>> >>>>
>> >>
>> >>
>> >
>
> ---------------------------------------------
>  Norifumi Kikkawa <Norifumi.Kikkawa@jp.sony.com>
>   Section 1
>   Network Technology Dept.
>   Information Technology Development Division
>   System & Software Technology Platfotm
>   Sony Corporation
>  (TEL) +81 50 3750 3953
> -----------------------------------------------
>
Received on Wednesday, 19 September 2012 17:39:19 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 19 September 2012 17:39:20 GMT