Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1161)

Side by Side Diff: third_party/WebKit/Source/core/page/FocusController.cpp

Issue 2362223002: Stop clamping tabIndex to short range (Closed)
Patch Set: Fix test expectation Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Nuanti Ltd. 3 * Copyright (C) 2008 Nuanti Ltd.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 Element* current = scope.currentElement(); 433 Element* current = scope.currentElement();
434 if (shouldVisit(*current) && adjustedTabIndex(*current) == tabIndex) 434 if (shouldVisit(*current) && adjustedTabIndex(*current) == tabIndex)
435 return current; 435 return current;
436 } 436 }
437 return nullptr; 437 return nullptr;
438 } 438 }
439 439
440 Element* nextElementWithGreaterTabIndex(ScopedFocusNavigation& scope, 440 Element* nextElementWithGreaterTabIndex(ScopedFocusNavigation& scope,
441 int tabIndex) { 441 int tabIndex) {
442 // Search is inclusive of start 442 // Search is inclusive of start
443 int winningTabIndex = std::numeric_limits<short>::max() + 1; 443 int winningTabIndex = std::numeric_limits<int>::max();
444 Element* winner = nullptr; 444 Element* winner = nullptr;
445 for (; scope.currentElement(); scope.moveToNext()) { 445 for (; scope.currentElement(); scope.moveToNext()) {
446 Element* current = scope.currentElement(); 446 Element* current = scope.currentElement();
447 int currentTabIndex = adjustedTabIndex(*current); 447 int currentTabIndex = adjustedTabIndex(*current);
448 if (shouldVisit(*current) && currentTabIndex > tabIndex && 448 if (shouldVisit(*current) && currentTabIndex > tabIndex) {
449 currentTabIndex < winningTabIndex) { 449 if (!winner || currentTabIndex < winningTabIndex) {
450 winner = current; 450 winner = current;
451 winningTabIndex = currentTabIndex; 451 winningTabIndex = currentTabIndex;
452 }
452 } 453 }
453 } 454 }
454 return winner; 455 return winner;
455 } 456 }
456 457
457 Element* previousElementWithLowerTabIndex(ScopedFocusNavigation& scope, 458 Element* previousElementWithLowerTabIndex(ScopedFocusNavigation& scope,
458 int tabIndex) { 459 int tabIndex) {
459 // Search is inclusive of start 460 // Search is inclusive of start
460 int winningTabIndex = 0; 461 int winningTabIndex = 0;
461 Element* winner = nullptr; 462 Element* winner = nullptr;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 if (Element* winner = 541 if (Element* winner =
541 findElementWithExactTabIndex(scope, tabIndex, WebFocusTypeBackward)) 542 findElementWithExactTabIndex(scope, tabIndex, WebFocusTypeBackward))
542 return winner; 543 return winner;
543 } 544 }
544 545
545 // There are no elements before start with the same tabindex as start, so look 546 // There are no elements before start with the same tabindex as start, so look
546 // for an element that: 547 // for an element that:
547 // 1) has the highest non-zero tabindex (that is less than start's tabindex), 548 // 1) has the highest non-zero tabindex (that is less than start's tabindex),
548 // and 549 // and
549 // 2) comes last in the scope, if there's a tie. 550 // 2) comes last in the scope, if there's a tie.
550 tabIndex = 551 tabIndex = (current && tabIndex) ? tabIndex : std::numeric_limits<int>::max();
551 (current && tabIndex) ? tabIndex : std::numeric_limits<short>::max();
552 scope.moveToLast(); 552 scope.moveToLast();
553 return previousElementWithLowerTabIndex(scope, tabIndex); 553 return previousElementWithLowerTabIndex(scope, tabIndex);
554 } 554 }
555 555
556 // Searches through the given tree scope, starting from start element, for the 556 // Searches through the given tree scope, starting from start element, for the
557 // next/previous selectable element that comes after/before start element. 557 // next/previous selectable element that comes after/before start element.
558 // The order followed is as specified in the HTML spec[1], which is elements 558 // The order followed is as specified in the HTML spec[1], which is elements
559 // with tab indexes first (from lowest to highest), and then elements without 559 // with tab indexes first (from lowest to highest), and then elements without
560 // tab indexes (in document order). The search algorithm also conforms the 560 // tab indexes (in document order). The search algorithm also conforms the
561 // Shadow DOM spec[2], which inserts sequence in a shadow tree into its host. 561 // Shadow DOM spec[2], which inserts sequence in a shadow tree into its host.
(...skipping 906 matching lines...) Expand 10 before | Expand all | Expand 10 after
1468 1468
1469 return consumed; 1469 return consumed;
1470 } 1470 }
1471 1471
1472 DEFINE_TRACE(FocusController) { 1472 DEFINE_TRACE(FocusController) {
1473 visitor->trace(m_page); 1473 visitor->trace(m_page);
1474 visitor->trace(m_focusedFrame); 1474 visitor->trace(m_focusedFrame);
1475 } 1475 }
1476 1476
1477 } // namespace blink 1477 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698