On May 11, 2011, at 11:25 PM, Robert O'Callahan wrote: > On Thu, May 12, 2011 at 4:45 PM, Jer Noble <jer.no...@apple.com> wrote: > > > 2. Animating into and out of full screen. > > > > WebKit's current video full-screen support will animate an element between > > its full-screen and non-full-screen states. This has both security and > > user experience benefits. However, with the current z-index-based > > rendering technique recommended by the proposed Full Screen API, animating > > the full-screen transition is extremely difficult. > > > > Proposal: The full-screen element should create a new view, separate from > > its parent document's view. This would allow the UA to resize and animate > > the view separate from the parent document's view. This would also solve > > issue 1 above. > > > > I'm not sure what you mean exactly by a "new view". Depending on what you > > mean, that could create all kinds of implementation and spec issues. For > > example, if an element can have different style or layout in the two views, > > DOM APIs that return those things become ambiguous. I would strongly object > > to that. > > I'm not suggesting that the element exists in two views simultaneously, but > rather that it becomes the root of a new viewport. > > What does that mean in CSS terms? > > Does the element cease to exist in the old viewport? If so, what would that > mean in CSS terms?
I would imagine that, yes, the element ceases to exist in the old viewport. I'm not sure what that would mean in terms of CSS. > Having elements in the same document be in different viewports still creates > all kinds of spec and implementation issues :-(. It very well might. The current proposal has issues of it's own though. :) > > It seems to me you could animate the transition without having multiple > > concurent views. For example, "freeze" the rendering of the document in its > > browser window, put the document into the fullscreen state, and display it > > in a popup window that starts off matching the geometry of the fullscreen > > element and zooms out to cover the screen. > > That is much more difficult than it sounds. :) > > Freezing the non-full-screen content is already undesirable. The animation > can take an arbitrary amount of time to complete, > > Really? Why? It shouldn't take more than a second to complete, surely? This is hypothetical, but imagine a touch-based UI where the user can "pinch" to enter and exit full-screen. In this UI, the full-screen animation is under direct control of the user, and so can take as long as the user wants it to take. > > 4. A lack of rejection. > > > > The current proposal provides no notification to authors that a request to > > enter full screen has been denied. From an UA implementor's perspective, > > it makes writing test cases much more difficult. From an author's > > perspective it makes failing over to another full screen technique (such as > > a "full-window" substitute mode) impossible. > > > > Proposal: add a "fullscreenrequestdenied" event and require it to be > > dispatched when and if the UA denies a full-screen request. > > > > My main concern is that with some UI scenarios there might not be a good > > time to fire the "denied" event. For example, in Firefox 4 when an > > application requests geolocation a popup appears, and if the user clicks > > anywhere outside the popup the popup disappears but there is still UI > > allowing the user to grant the request later. If we used the same approach > > for fullscreen, I think we wouldn't want to fire the denied event unless > > the user actually selects "no" in the popup. (It would seem confusing to > > deny the request and then grant it later.) I'm wary of authors writing code > > that assumes a denied event will fire and breaks when it doesn't, or when > > it fires later than they expect. > > > > > The current API already requires that authors listen for events that may > occur in the far future. I don't see how this event would be any different. > > You mean "fullscreenchanged"? > > I'm confident authors will understand that "fullscreenchanged" might fire > late or never and will encounter that during testing. I'm less confident it > will be obvious to authors that both "fullscreenchanged" and > "fullscreendenied" might never fire and will encounter that during testing. I'm not sure I get the distinction. In fact, it seems to me to be the opposite. A) If an author calls requestFullScreen(), at some point in the future they will receive either a "fullscreenchanged" event or a "fullscreendenied" event. B) If an author calls requestFullScreen(), at some point in the future they may receive a "fullscreenchanged" event, or not. I'd argue that A) is easier to grasp. > And your geolocation example actually argues the other way: the existing > geolocation API includes an asynchronous error handler that is explicitly > called when a request is denied. This would be a similar if not identical > use case. > > I don't necessarily agree with that part of the geolocation API :-). Fair enough. But it is an API in relatively wide use now. Have authors complained that the timing of the error handler is too confusing? > > For your use-case of falling back to a "full-window" substitute mode, I > > would suggest Web authors automatically go into the full-window state > > almost immediately after requesting fullscreen, but cancel it if the window > > actually goes into fullscreen mode. > > That seems non-optimal. It would result in a very confusing user experience > ("The page is requesting full screen? But it already is full screen!"), and > I doubt any authors would choose to implement it that way. > > It seems rational to me: click on fullscreen, the video fills the entire > window (but not the screen), and some browser UI appears to suggest going the > rest of the way. Maybe that's not great, but the user experience where the > app waits for fullscreendenied before filling the window sounds even worse, > if that event never fires. It's also pretty bad if some passive UI appears, > the user ignores it, then later notices it and dismisses it, and the video > suddenly fills the window! True, without the "fullscreendenied" event, authors will be forced to "pre-fallback" to a full-window mode. But with the "fullscreendenied" event, they can decide whether to do that, or a more traditional post-denial full-window mode. If one is more confusing than the other, they can prefer the less confusing behavior. However, by withholding a denial event, the API is making that decision up front. > Are you planning to have any kind of UI for fullscreen permission, or do > these issues simply not arise for you? That behavior will be implemented by the browser, so that isn't up to WebKit to decide. -Jer