Bug 95178

Summary: Support CSS3 Keyboard control
Product: WebKit Reporter: Binyamin <7raivis>
Component: CSSAssignee: Nobody <webkit-unassigned>
Status: RESOLVED DUPLICATE    
Severity: Major CC: 7raivis, allan.jensen, ap, buildbot, cfleizach, cmarcelo, commit-queue, eflews.bot, esprehn+autocc, glenn, gyuyoung.kim, gyuyoung.kim, jcraig, macpherson, menard, pnormand, rakuco, rniwa, shikolay, syoichi
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
URL: http://dev.w3.org/csswg/css3-ui/#keyboard
Attachments:
Description Flags
add the feature of css3 keyboard navigation
none
add change log and license
rniwa: review-, eflews.bot: commit-queue-
css3 keyboard navigation patch kling: review-, eflews.bot: commit-queue-

Description Binyamin 2012-08-28 01:09:33 PDT
Add support for CSS3 Keyboard control http://dev.w3.org/csswg/css3-ui/#keyboard, the new properties: nav-index, nav-up, nav-right, nav-down, nav-left, ime-mode.
Comment 1 Alexey Proskuryakov 2012-08-28 09:34:35 PDT
Do you want any of these features specifically? Having a use case would go a long way towards establishing importance of a feature.
Comment 2 Binyamin 2012-08-28 11:23:42 PDT
(In reply to comment #1)

@Alexey, I think it would be grate to have support for all those features.
Comment 3 Sangho Kim 2013-04-21 19:09:21 PDT
Created attachment 198982 [details]
add the feature of css3 keyboard navigation

I attached the patch which has the feature of CSS3 keyboard navigation.
Please review...
Comment 4 Philippe Normand 2013-04-22 00:21:39 PDT
Comment on attachment 198982 [details]
add the feature of css3 keyboard navigation

View in context: https://bugs.webkit.org/attachment.cgi?id=198982&action=review

ChangeLog is missing. Also, can the new files be explicitely put under LGPL2 or BSD license? And don't forget to set the r flag to '?'

> Source/WebKit2/Shared/WebPreferencesStore.h:-39
> -#if PLATFORM(GTK)

Unrelated change?
Comment 5 Sangho Kim 2013-04-22 22:53:35 PDT
Created attachment 199152 [details]
add change log and license

I add the change log and license.
Do I have to do another?
Comment 6 WebKit Commit Bot 2013-04-22 22:56:01 PDT
Attachment 199152 [details] did not pass style-queue:

Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'ChangeLog', u'Source/WebCore/GNUmakefile.list.am', u'Source/WebCore/Target.pri', u'Source/WebCore/css/CSSComputedStyleDeclaration.cpp', u'Source/WebCore/css/CSSGrammar.y.in', u'Source/WebCore/css/CSSParser.cpp', u'Source/WebCore/css/CSSPrimitiveValue.cpp', u'Source/WebCore/css/CSSPrimitiveValue.h', u'Source/WebCore/css/CSSProperty.cpp', u'Source/WebCore/css/CSSPropertyNames.in', u'Source/WebCore/css/CSSValueKeywords.in', u'Source/WebCore/css/StyleResolver.cpp', u'Source/WebCore/dom/Element.h', u'Source/WebCore/page/EventHandler.cpp', u'Source/WebCore/page/FocusController.cpp', u'Source/WebCore/rendering/style/RenderStyle.cpp', u'Source/WebCore/rendering/style/RenderStyle.h', u'Source/WebCore/rendering/style/StyleNavData.cpp', u'Source/WebCore/rendering/style/StyleNavData.h', u'Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp', u'Source/WebCore/rendering/style/StyleRareNonInheritedData.h', u'Source/WebKit2/Shared/WebPreferencesStore.h']" exit_code: 1
ChangeLog:12:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:13:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:14:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:15:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:16:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:17:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:18:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:19:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:20:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:21:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:22:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:23:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:24:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:25:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:26:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:27:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:28:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:29:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:30:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ChangeLog:31:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/css/CSSPrimitiveValue.h:137:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 21 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 7 EFL EWS Bot 2013-04-22 22:59:24 PDT
Comment on attachment 199152 [details]
add change log and license

Attachment 199152 [details] did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/16639
Comment 8 Build Bot 2013-04-22 23:21:11 PDT
Comment on attachment 199152 [details]
add change log and license

Attachment 199152 [details] did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/16640
Comment 9 Alexey Proskuryakov 2013-04-22 23:30:32 PDT
What regression tests do you have for this feature? It will require a substantial number of tests.
Comment 10 Ryosuke Niwa 2013-04-22 23:30:41 PDT
Has this feature been announced on webkit-dev yet? (See http://www.webkit.org/coding/adding-features.html)
Comment 11 Build Bot 2013-04-22 23:34:31 PDT
Comment on attachment 199152 [details]
add change log and license

Attachment 199152 [details] did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/110757
Comment 12 Ryosuke Niwa 2013-04-22 23:39:58 PDT
Comment on attachment 199152 [details]
add change log and license

View in context: https://bugs.webkit.org/attachment.cgi?id=199152&action=review

Thank you for the patch but this patch needs tests. Every new feature or bug fix needs to come up with a layout test whenever possible.
See http://www.webkit.org/coding/contributing.html

There is a lot of stylistic and naming issues as I've pointed out below.

> ChangeLog:6
> +        Reviewed by .

Please don't remove NOBODY (OOPS!). (You used webkit-patch upload or prepare-ChangeLog in Tools/Scripts, right?)

>> ChangeLog:12
>> +        * Source/WebCore/Target.pri
> 
> Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]

You're missing a colon after the file name.

> Source/WebCore/css/CSSComputedStyleDeclaration.cpp:2109
> +            const StyleNavIndex* nav = style->getNavIndex();

Please don't use abbreviations like nav. Spell out navigation.

> Source/WebCore/css/CSSParser.cpp:2953
> +        if ((num > 2) || (value->unit != CSSPrimitiveValue::CSS_PARSER_HEXCOLOR && value->unit != CSSPrimitiveValue::CSS_ELEMENT_ID))

No need to wrap inner conditions with parentheses. Why are you comparing the unit to CSS_PARSER_HEXCOLOR and CSS_ELEMENT_ID? That doesn't make much sense.

> Source/WebCore/rendering/style/RenderStyle.cpp:1703
> +const StyleNavData* RenderStyle::getNav(int propId)

this name is too terse. Please give more descriptive name. Also, we don't prefix a function with "get" unless it has an out argument.

> Source/WebCore/rendering/style/StyleNavData.cpp:27
> +StyleNavData::StyleNavData()

Please don't use abbreviations like Nav.
Also, StyleNavData is a very vague name. Please consider giving it a more descriptive name.

> Source/WebCore/rendering/style/StyleNavData.cpp:29
> +    : m_id("")
> +    , m_target("")

Please use emptyString instead or let the default constructor run.
Comment 13 Ryosuke Niwa 2013-04-22 23:41:21 PDT
http://www.webkit.org/coding/coding-style.html is our style guideline. Please have a look at it.
Comment 14 Gyuyoung Kim 2013-04-24 22:29:46 PDT
Comment on attachment 199152 [details]
add change log and license

View in context: https://bugs.webkit.org/attachment.cgi?id=199152&action=review

> ChangeLog:8
> +        Add support for CSS3 Keyboard control http://dev.w3.org/csswg/css3-ui/#keyboard.

I'm wondering if you notify webkit-dev of this feature. According to webkit policy, new feature should be notified to webkit-dev first.

> Source/WebCore/GNUmakefile.list.am:4722
> +	Source/WebCore/rendering/style/StyleNavData.cpp \

I think this file needs to be added to CMake files as well in order to support EFL, blackberry and wince ports. Besides it looks you need to add this file to xcode for Mac.

> Source/WebCore/rendering/style/StyleNavData.cpp:2
> + * Copyright (C) 2013 Sangho Kim (thomas.kim@lge.com)

If contributor belongs to company, contributor has added a company copyright generally.

> Source/WebKit2/Shared/WebPreferencesStore.h:39
> +#if PLATFORM(GTK) || PLATFORM(QT)

There is no WK2 ChangeLog update for this file. As Ryosuke said, please use Tools/Script/prepare-ChangeLog.
Comment 15 Sangho Kim 2013-05-01 22:30:58 PDT
Created attachment 200300 [details]
css3 keyboard navigation patch

I changed some code as reference your reviews.
Comment 16 WebKit Commit Bot 2013-05-01 22:33:30 PDT
Attachment 200300 [details] did not pass style-queue:

Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/WebCore/CMakeLists.txt', u'Source/WebCore/ChangeLog', u'Source/WebCore/GNUmakefile.list.am', u'Source/WebCore/Target.pri', u'Source/WebCore/css/CSSComputedStyleDeclaration.cpp', u'Source/WebCore/css/CSSGrammar.y.in', u'Source/WebCore/css/CSSParser.cpp', u'Source/WebCore/css/CSSPrimitiveValue.cpp', u'Source/WebCore/css/CSSPrimitiveValue.h', u'Source/WebCore/css/CSSProperty.cpp', u'Source/WebCore/css/CSSPropertyNames.in', u'Source/WebCore/css/CSSValueKeywords.in', u'Source/WebCore/css/StyleResolver.cpp', u'Source/WebCore/dom/Element.h', u'Source/WebCore/page/EventHandler.cpp', u'Source/WebCore/page/FocusController.cpp', u'Source/WebCore/rendering/style/RenderStyle.cpp', u'Source/WebCore/rendering/style/RenderStyle.h', u'Source/WebCore/rendering/style/StyleNavDirection.cpp', u'Source/WebCore/rendering/style/StyleNavDirection.h', u'Source/WebCore/rendering/style/StyleNavIndex.cpp', u'Source/WebCore/rendering/style/StyleNavIndex.h', u'Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp', u'Source/WebCore/rendering/style/StyleRareNonInheritedData.h', u'Source/WebKit2/ChangeLog', u'Source/WebKit2/Shared/WebPreferencesStore.h']" exit_code: 1
Source/WebCore/css/CSSPrimitiveValue.h:137:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 17 EFL EWS Bot 2013-05-01 22:37:16 PDT
Comment on attachment 200300 [details]
css3 keyboard navigation patch

Attachment 200300 [details] did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/384040
Comment 18 EFL EWS Bot 2013-05-01 22:39:02 PDT
Comment on attachment 200300 [details]
css3 keyboard navigation patch

Attachment 200300 [details] did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/268060
Comment 19 Build Bot 2013-05-01 22:58:36 PDT
Comment on attachment 200300 [details]
css3 keyboard navigation patch

Attachment 200300 [details] did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/393032
Comment 20 Build Bot 2013-05-01 22:59:53 PDT
Comment on attachment 200300 [details]
css3 keyboard navigation patch

Attachment 200300 [details] did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/268064
Comment 21 Build Bot 2013-05-01 23:09:19 PDT
Comment on attachment 200300 [details]
css3 keyboard navigation patch

Attachment 200300 [details] did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/333116
Comment 22 James Craig 2013-05-02 14:09:24 PDT
We should not support any of the nav properties. nav-index, nav-up, nav-right, nav-down, and nav-left are all features at risk and we should let them remain at risk until they are removed from this version of the specification.

The main thing nav-index is lacking is a context. This could potentially be solved with an additional property, potentially:

     nav-context:  ignore | relative | absolute;

Yet, as specified, nav-index has all the same serious negative implications of positive integer values of tabindex, where each node has to know about the layout order of every other node in the document. If you're only specifying nav index on first level branches, this is fine, but there is no good way to use this on leaf nodes, and it has severe consequences for breaking index order of keyboard navigation.

Another problem this does not solve is the potential for infinite navigation loops with circular references using any of the nav-* properties. The specification should define that circular references are illegal, and it should also define recovery behavior when a rendering engine encounters circular navigation loops.

I mentioned both of these problems to Tantek at last years TPAC. I can't recall whether I sent a formal note to the list, but I will send a follow-up objection now.

The ime-mode property also seems problematic but I'm not yet familiar enough with this part of the proposal to officially object. Why should a web page get to disable my Pinyin character window? The example given it would not allow extended set characters to be entered into a form, but it seems this would be better solved by either 1) simple form validation, or 2) regex accept patterns in HTML input. Allowing CSS to disable IMEs seems like overkill for this problem.
Comment 23 Alexey Proskuryakov 2013-05-02 14:27:47 PDT
Bug 21279 tracks ime-mode, and I also had objections against it.
Comment 24 James Craig 2013-05-02 16:36:16 PDT
Sent objections to www-style:
http://lists.w3.org/Archives/Public/www-style/2013May/0076.html
Comment 25 James Craig 2013-05-03 12:19:34 PDT
David Baron says, "The group resolved a few weeks ago to drop them from level 3"
http://lists.w3.org/Archives/Public/www-style/2013Apr/0428.html

Any objections to closing this as "RESOLVED INVALID"?
Comment 26 Andreas Kling 2013-05-05 12:57:08 PDT
Comment on attachment 200300 [details]
css3 keyboard navigation patch

View in context: https://bugs.webkit.org/attachment.cgi?id=200300&action=review

It sounds like we shouldn't be implementing this at all. Regardless, r- because this should be behind an ENABLE-flag, and new features should be announced on webkit-dev.

> Source/WebCore/rendering/style/StyleRareNonInheritedData.h:206
> +    DataRef<StyleNavDirection> m_navUp;
> +    DataRef<StyleNavDirection> m_navDown;
> +    DataRef<StyleNavDirection> m_navLeft;
> +    DataRef<StyleNavDirection> m_navRight;
> +    DataRef<StyleNavIndex>     m_navIndex;

I don't like the idea of growing StyleRareNonInheritedData by 5 whole pointers for a single feature that's not used on the web yet. Can we make group this stuff under a single pointer here?
Comment 27 Philippe Normand 2013-06-24 02:21:15 PDT
Likely a duplicate of bug 66027.
Comment 28 James Craig 2013-06-24 09:31:47 PDT

*** This bug has been marked as a duplicate of bug 66027 ***