RESOLVED FIXED 66031
Chromium plumbing for webkitRequestFullScreen
https://bugs.webkit.org/show_bug.cgi?id=66031
Summary Chromium plumbing for webkitRequestFullScreen
James Kozianski
Reported 2011-08-10 22:30:13 PDT
Chromium plumbing for webkitRequestFullScreen
Attachments
Patch (5.03 KB, patch)
2011-08-10 22:33 PDT, James Kozianski
no flags
Patch (5.09 KB, patch)
2011-08-15 21:23 PDT, James Kozianski
no flags
Patch (5.07 KB, patch)
2011-08-17 16:39 PDT, James Kozianski
no flags
Patch (5.05 KB, patch)
2011-08-17 20:36 PDT, James Kozianski
no flags
Patch for landing (5.05 KB, patch)
2011-08-17 20:48 PDT, James Kozianski
no flags
Patch for landing (5.03 KB, patch)
2011-08-18 17:48 PDT, James Kozianski
no flags
James Kozianski
Comment 1 2011-08-10 22:33:23 PDT
WebKit Review Bot
Comment 2 2011-08-10 22:37:50 PDT
Comment on attachment 103577 [details] Patch Attachment 103577 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/9358062
WebKit Review Bot
Comment 3 2011-08-11 00:13:53 PDT
Comment on attachment 103577 [details] Patch Attachment 103577 [details] did not pass cr-mac-ews (chromium): Output: http://queues.webkit.org/results/9352079
Darin Fisher (:fishd, Google)
Comment 4 2011-08-15 16:18:32 PDT
Comment on attachment 103577 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=103577&action=review > Source/WebKit/chromium/public/WebView.h:366 > add another new line here > Source/WebKit/chromium/public/WebView.h:367 > + // Fullscreen ----------------------------------------------------------- nit: new line after the section break > Source/WebKit/chromium/public/WebView.h:369 > + though folks have not been entirely consistent, we have a convention of putting two new lines at the end of a section. so, add another new line here. > Source/WebKit/chromium/public/WebViewClient.h:218 > + virtual void enterFullscreenForElement() { } shouldn't we pass a WebElement to these functions? if not, then the functions should probably be renamed to not have the ForElement suffix. what's the difference between these functions and the ForNode variants? why do we need both? > Source/WebKit/chromium/src/ChromeClientImpl.cpp:914 > + // be restructured to wait for an ACK from the browser that we did enter we normally try to avoid leaving comments in this code that reference the multi-process architecture details of Chromium. they can easily bit-rot since people on the Chromium side might be unlikely to fix up comments here. maybe you should just talk in terms of "the embedder" needing to notify you asynchronously, etc. > Source/WebKit/chromium/src/WebViewImpl.cpp:2680 > + Element* fullscreenElement = page()->mainFrame()->document()->webkitCurrentFullScreenElement(); it might be nice to cache a pointer to the m_page->mainFrame()->document() in a local variable to help readability since you reuse that expression a lot. > Source/WebKit/chromium/src/WebViewImpl.cpp:2681 > + if (fullscreenElement) shouldn't this be a "if (!fullscreenElement)"? i would think that if we have a full screen element that we would want to exit full screen mode. > Source/WebKit/chromium/src/WebViewImpl.h:375 > + virtual void exitFullscreen(); there is actually a section in WebViewImpl.h that is dedicated for listing the methods of WebView in the same order as they appear in the header file. unfortunately, the folks who authored setVisibilityState and graphicsContext3D did not follow that rule. please don't add to that mess :-)
James Kozianski
Comment 5 2011-08-15 20:13:09 PDT
Comment on attachment 103577 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=103577&action=review >> Source/WebKit/chromium/public/WebView.h:366 > > add another new line here Done. >> Source/WebKit/chromium/public/WebView.h:369 >> + > > though folks have not been entirely consistent, we have a convention of putting two new > lines at the end of a section. so, add another new line here. Done. >> Source/WebKit/chromium/public/WebViewClient.h:218 >> + virtual void enterFullscreenForElement() { } > > shouldn't we pass a WebElement to these functions? if not, then the functions > should probably be renamed to not have the ForElement suffix. > > what's the difference between these functions and the ForNode variants? why > do we need both? The ForNode variants seem to be a WebKit specific way to do fullscreen specifically for video elements. In HTMLMediaElement.cpp there is code added by jer.noble@apple.com that short-circuits the calls to enterFullscreenForNode(Node*) with calls to document->requestFullscreenForElement(Element*) if FULLSCREEN_API is enabled, so it seems that enterFullscreenForNode() is deprecated (as it seems that Safari builds with FULLSCREEN_API on?) The ForNode variants are NOTIMPLEMNTED() in Chromium, but they are plumbed through to RenderView. Should I "hijack" them and remove the ForElement() ones? My feeling is that it would be best to leave the ForElement() functions as they are and try and remove the apparently deprecated ForNode() variants. In fact, hijacking them would be messy because they accept Node*s, not Element*s. I've called them *ForElement because it is the fullscreen mode that focuses the renderer around an element, which is different to the embedder simply entering fullscreen mode. That is, toggling the browser into fullscreen with the button is different to a site going fullscreen. >> Source/WebKit/chromium/src/ChromeClientImpl.cpp:914 >> + // be restructured to wait for an ACK from the browser that we did enter > > we normally try to avoid leaving comments in this code that reference the > multi-process architecture details of Chromium. they can easily bit-rot > since people on the Chromium side might be unlikely to fix up comments > here. maybe you should just talk in terms of "the embedder" needing to > notify you asynchronously, etc. Okay. I've updated the comment. >> Source/WebKit/chromium/src/WebViewImpl.cpp:2680 >> + Element* fullscreenElement = page()->mainFrame()->document()->webkitCurrentFullScreenElement(); > > it might be nice to cache a pointer to the m_page->mainFrame()->document() in a local variable > to help readability since you reuse that expression a lot. Done. >> Source/WebKit/chromium/src/WebViewImpl.cpp:2681 >> + if (fullscreenElement) > > shouldn't this be a "if (!fullscreenElement)"? i would think that if we have a full screen element that we would want to exit full screen mode. Yep, that's right. Sorry, this was amongst some local changes I'd made but forgot to upload. >> Source/WebKit/chromium/src/WebViewImpl.h:375 >> + virtual void exitFullscreen(); > > there is actually a section in WebViewImpl.h that is dedicated for listing > the methods of WebView in the same order as they appear in the header file. > unfortunately, the folks who authored setVisibilityState and graphicsContext3D > did not follow that rule. please don't add to that mess :-) Done.
James Kozianski
Comment 6 2011-08-15 21:23:20 PDT
Darin Fisher (:fishd, Google)
Comment 7 2011-08-16 21:00:07 PDT
(In reply to comment #5) > The ForNode variants seem to be a WebKit specific way to do fullscreen specifically for video elements. In HTMLMediaElement.cpp there is code added by jer.noble@apple.com that short-circuits the calls to enterFullscreenForNode(Node*) with calls to document->requestFullscreenForElement(Element*) if FULLSCREEN_API is enabled, so it seems that enterFullscreenForNode() is deprecated (as it seems that Safari builds with FULLSCREEN_API on?) > > The ForNode variants are NOTIMPLEMNTED() in Chromium, but they are plumbed through to RenderView. Should I "hijack" them and remove the ForElement() ones? My feeling is that it would be best to leave the ForElement() functions as they are and try and remove the apparently deprecated ForNode() variants. In fact, hijacking them would be messy because they accept Node*s, not Element*s. > > I've called them *ForElement because it is the fullscreen mode that focuses the renderer around an element, which is different to the embedder simply entering fullscreen mode. That is, toggling the browser into fullscreen with the button is different to a site going fullscreen. Ah! Makes sense now. The ForNode methods are probably the leftovers from the work that scherkus' intern did to try to implement fullscreen mode for video. I agree that it should be deleted in place of these new methods. However, I still don't see the point in calling these ForElement. From the point of view of the browser, the only significant difference between F11 and webkitRequestFullscreen is the latter is content-initiated. That means the browser may need to present different UI to the user. The browser won't otherwise care at all about what is focused in the page. I also think it is consistent to drop the ForElement suffix since that normally implies that there will be a corresponding parameter of type WebElement, but you don't pass such a parameter.
Darin Fisher (:fishd, Google)
Comment 8 2011-08-16 21:03:29 PDT
Comment on attachment 104002 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=104002&action=review By the way, if you think that ForElement is the best suffix, then just pass a WebElement parameter like the ChromeClient methods do. > Source/WebKit/chromium/public/WebView.h:367 > + // Fullscreen ----------------------------------------------------------- sorry to be a nut about whitespace, but i had intended for there to be two blank lines above each section heading. apparently, a good number of people haven't been following that convention, but if you scroll up far enough, you'll see that convention in place. sigh :(
James Kozianski
Comment 9 2011-08-17 16:30:27 PDT
(In reply to comment #7) > (In reply to comment #5) > > The ForNode variants seem to be a WebKit specific way to do fullscreen specifically for video elements. In HTMLMediaElement.cpp there is code added by jer.noble@apple.com that short-circuits the calls to enterFullscreenForNode(Node*) with calls to document->requestFullscreenForElement(Element*) if FULLSCREEN_API is enabled, so it seems that enterFullscreenForNode() is deprecated (as it seems that Safari builds with FULLSCREEN_API on?) > > > > The ForNode variants are NOTIMPLEMNTED() in Chromium, but they are plumbed through to RenderView. Should I "hijack" them and remove the ForElement() ones? My feeling is that it would be best to leave the ForElement() functions as they are and try and remove the apparently deprecated ForNode() variants. In fact, hijacking them would be messy because they accept Node*s, not Element*s. > > > > I've called them *ForElement because it is the fullscreen mode that focuses the renderer around an element, which is different to the embedder simply entering fullscreen mode. That is, toggling the browser into fullscreen with the button is different to a site going fullscreen. > > Ah! Makes sense now. The ForNode methods are probably the leftovers from the work that scherkus' intern did to try to implement fullscreen mode for video. I agree that it should be deleted in place of these new methods. > > However, I still don't see the point in calling these ForElement. From the point of view of the browser, the only significant difference between F11 and webkitRequestFullscreen is the latter is content-initiated. That means the browser may need to present different UI to the user. The browser won't otherwise care at all about what is focused in the page. > > I also think it is consistent to drop the ForElement suffix since that normally implies that there will be a corresponding parameter of type WebElement, but you don't pass such a parameter. Yep, that makes sense. I've dropped the suffix. >> Source/WebKit/chromium/public/WebView.h:367 > sorry to be a nut about whitespace, but i had intended for there to be two blank > lines above each section heading. apparently, a good number of people haven't > been following that convention, but if you scroll up far enough, you'll see that > convention in place. sigh :( Sorry, my bad! Done.
James Kozianski
Comment 10 2011-08-17 16:39:50 PDT
James Kozianski
Comment 11 2011-08-17 20:36:05 PDT
James Kozianski
Comment 12 2011-08-17 20:48:42 PDT
Created attachment 104302 [details] Patch for landing
WebKit Review Bot
Comment 13 2011-08-18 07:19:14 PDT
Comment on attachment 104302 [details] Patch for landing Rejecting attachment 104302 [details] from commit-queue. Failed to run "['./Tools/Scripts/webkit-patch', '--status-host=queues.webkit.org', '--bot-id=ec2-cq-02', '--port..." exit_code: 2 Last 500 characters of output: Kit2/ChangeLog Failed to merge in the changes. Patch failed at 0001 Dump-as-markup conversion: editing/pasteboard/paste-text-010.html and editing/pasteboard/paste-text-015.html When you have resolved this problem run "git rebase --continue". If you would prefer to skip this patch, instead run "git rebase --skip". To restore the original branch and stop rebasing run "git rebase --abort". rebase refs/remotes/origin/master: command returned error: 1 Died at Tools/Scripts/update-webkit line 146. Full output: http://queues.webkit.org/results/9421630
James Kozianski
Comment 14 2011-08-18 17:48:53 PDT
Created attachment 104429 [details] Patch for landing
WebKit Review Bot
Comment 15 2011-08-18 18:17:35 PDT
Comment on attachment 104429 [details] Patch for landing Clearing flags on attachment: 104429 Committed r93381: <http://trac.webkit.org/changeset/93381>
WebKit Review Bot
Comment 16 2011-08-18 18:17:41 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.