On Mar 7, 2013, at 7:19 PM, Glenn Maynard wrote:

> Chrome, at least, throws on new Blob([], {type: "漢字"}), as well as 
> lowercasing the string.
> 


Stricter rules are in place for "type" both while constructing Blob and for 
slice calls:

http://dev.w3.org/2006/webapi/FileAPI/#constructorBlob

and 

http://dev.w3.org/2006/webapi/FileAPI/#slide-method-algo

I agree with previous comments you've made about ByteString not solving any 
problems that Anne vK brings up; instead, I think using DOMString is probably 
ok, with tighter rules on what is valid and what should be ignored.  Throwing a 
SyntaxError might be overkill to developers and a bit too punitive; instead, I 
advocate sticking with the original spirit of the opaque string idea and 
ignoring bad use of "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".
> 

So the "type" attribute of a Blob object isn't the *literal* value of the 
header; it's the type of the Blob, expressed as a MIME type.  When 
dereferencing Blob URLs, you get this type back with the Content-Type header, 
as you do normally in HTTP scenarios.  This is a well-understood behavior, and 
I agree with points you've made about not being beholden to the RFC when 
designing an API.  

I think the question here is whether or not to include *separate attributes* on 
the Blob interface for the rarely used Charset Parameter, namely anything after 
the semicolon in MIME types of the sort: "text/plain;charset=UTF-8".  I've 
considered all your arguments by way of developer advocacy, and actually think 
we'll do developers a disservice by adding to the Blob interface:

1. The Charset Parameter consideration applies only to text/plain.  There are 
numerous other MIME types that don't use it: application/*, audio/*, image/*, 
video/*, etc.  Complicating the interface on the off-chance that a stray use of 
the Charset parameter breaks a direct equality comparison is "too much API for 
too little."

2. The Charset Parameter even in the context of text/plain isn't common enough 
to warrant a special case for text/plain within the API.

3. In general, it's a pretty stable assumption to conclude that developers will 
expect "type" to be surfaced later along with "Content-Type" when dereferencing 
a Blob URI.  I don't think we've made an assumption that's terribly galling.

-- A*

Reply via email to