- From: Glenn Maynard <glenn@zewt.org>
- Date: Thu, 7 Mar 2013 18:19:01 -0600
- To: Arun Ranganathan <aranganathan@mozilla.com>
- Cc: WebApps WG <public-webapps@w3.org>, Alexey Proskuryakov <ap@webkit.org>, Jonas Sicking <jonas@sicking.cc>, Anne van Kesteren <annevk@annevk.nl>
- Message-ID: <CABirCh9LB--hNMU9AXYyyr8NjBvJMaTEMDuMGPtEct+SK4ZpJA@mail.gmail.com>
As an aside, I'd recommend minimizing normative dependencies on RFC2046. Like many RFCs it's an old, unclear spec. On Thu, Mar 7, 2013 at 12:35 PM, Arun Ranganathan <aranganathan@mozilla.com> wrote: > At some point there was a draft that specified *strict* parsing for compliance with RFC2046, including tokenization ("/") and eliminating non-ASCII cruft. But we scrapped that because bugs in all major browser projects showed that this spec. text was callously ignored. And I didn't want to spec. fiction, so we went with the current model for Blob.type, which is, as Anne points out, pretty lax. Chrome, at least, throws on new Blob([], {type: "漢字"}), as well as lowercasing the string. > I'm in favor of introducing stricter rules for Blob.type, and I'm also in favor of allowing charset params; Glenn's example of 'if(blob.type == "text/plain")' will break, but I don't think we should be encouraging strict equality comparisons on blob.type (and in fact, should *discourage* it as a practice). > > Glenn: I think that introducing a separate interface for other parameters actually takes away from the elegance of a simple Blob.type. The RFC doesn't separate them, and I'm not sure we should either. My reading of the RFC is that parameters *are an intrinsic part of* the MIME type. A couple points: - I disagree that we should discourage comparing against Blob.type, but ultimately it's such an obvious use of the property, people will do it whether it's encouraged or not. I'd never give it a second thought, since that appears to be its very purpose. Web APIs should be designed defensively around how people will actually use the API, not how we wish they would. Unless lots of Blob.type parameters actually include parameters, code will break unexpectedly when it ends up encountering one. - The RFC defines a protocol ("Content-Type"), not a JavaScript API, and a good protocols are rarely good APIs. Having Blob.type be the literal value of a Content-Type header isn't an elegant API. You shouldn't need to do parsing of a string value to extract "text/plain", and you shouldn't have to do serialization to get "text/plain; charset=UTF-8". (My reading of RFC2046 is different, but either way I don't think the intent of that RFC should determine the design of this API, at least on this point. It's a spec designed with completely different goals than a JavaScript API.) On Thu, Mar 7, 2013 at 2:02 PM, Alexey Proskuryakov <ap@webkit.org> wrote: > The current File API spec seems to have a mismatch between type in > BlobPropertyBag, and type as Blob attribute. The latter declaratively > states that the type is an ASCII lower case string. As mentioned by Glenn > before, WebKit interpreted this by raising an exception in constructor for > non-ASCII input, and lowercasing the string. I think that this is a > reasonable reading of the spec. I'd be fine with raising exceptions for > invalid types more eagerly. > With the file API spec as currently written, there's no normative text saying to throw an exception, so WebKit's interpretation is incorrect, but it's simple to fix. In 7.1 (Constructors), add a step that says "If the type member of the options argument is set, and contains any Unicode codepoints less than U+0020 or greater than U+007E, throw a SyntaxError exception and abort these steps." (WebKit actually only throws outside of [0,0x7F]. This language throws outside of [0x20,0x7E], excluding control characters.) I'd suggest importing WebKit's lowercasing of .type, too, in the same place. -- Glenn Maynard
Received on Friday, 8 March 2013 00:19:28 UTC