Spatial Navigation should avoid unwanted calculation while deciding focus candidate.
https://bugs.webkit.org/show_bug.cgi?id=117265

Patch by Abhijeet Kandalkar <abhijeet.k@samsung.com> on 2013-08-05
Reviewed by Antonio Gomes.

Source/WebCore:

Spatial Navigation should consider only those nodes as candidate which are exactly in the focus-direction.
e.g. If we are moving down then the nodes that are above CURRENT focused node should be considered as invalid.
Added isValidCandidate() which checks whether node is exactly in the focus-direction.

Test: fast/spatial-navigation/snav-search-optimization.html

* page/FocusController.cpp:
(WebCore::FocusController::findFocusCandidateInContainer):
(WebCore::FocusController::advanceFocusDirectionally):
* page/Page.cpp:
(WebCore::Page::Page):
* page/Page.h:
(WebCore::Page::setLastSpatialNavigationCandidateCount):
(WebCore::Page::lastSpatialNavigationCandidateCount):
* page/SpatialNavigation.cpp:
(WebCore::isValidCandidate):
* page/SpatialNavigation.h:
* testing/Internals.cpp:
(WebCore::Internals::lastSpatialNavigationCandidateCount):
* testing/Internals.h:
* testing/Internals.idl:

LayoutTests:

Added testcases to count how many target nodes were tested before choosing a final target.

* fast/spatial-navigation/snav-search-optimization-expected.txt: Added.
* fast/spatial-navigation/snav-search-optimization.html: Added.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@153704 268f45cc-cd09-0410-ab3c-d52691b4dbfc