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

Side by Side Diff: Source/web/WebViewImpl.cpp

Issue 939603002: Adding support for Smart GO NEXT feature in Android Chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 10 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) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * 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 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 2414 matching lines...) Expand 10 before | Expand all | Expand 10 after
2425 flags |= WebTextInputFlagAutocorrectOn; 2425 flags |= WebTextInputFlagAutocorrectOn;
2426 else if (autocorrect == "off") 2426 else if (autocorrect == "off")
2427 flags |= WebTextInputFlagAutocorrectOff; 2427 flags |= WebTextInputFlagAutocorrectOff;
2428 2428
2429 const AtomicString& spellcheck = element->getAttribute(spellcheckString); 2429 const AtomicString& spellcheck = element->getAttribute(spellcheckString);
2430 if (spellcheck == "on") 2430 if (spellcheck == "on")
2431 flags |= WebTextInputFlagSpellcheckOn; 2431 flags |= WebTextInputFlagSpellcheckOn;
2432 else if (spellcheck == "off") 2432 else if (spellcheck == "off")
2433 flags |= WebTextInputFlagSpellcheckOff; 2433 flags |= WebTextInputFlagSpellcheckOff;
2434 2434
2435 if (wantEnterEvents(element)) {
2436 flags |= WebTextInputFlagWantEnterEvents;
2437 }
2438
2439 if (havePreviousInput(element)) {
2440 flags |= WebTextInputFlagHavePreviousInput;
2441 }
2442
2443 if (haveNextInput(element)) {
2444 flags |= WebTextInputFlagHaveNextInput;
2445 }
2435 return flags; 2446 return flags;
2436 } 2447 }
2437 2448
2449 Element* WebViewImpl::haveNextInput(Element* element)
2450 {
2451 if (!element->isFormControlElement())
2452 return 0;
2453
2454 HTMLFormControlElement* formControlElement = toHTMLFormControlElement(elemen t);
bcwhite 2015/02/24 17:06:23 80 character line limits
yosin_UTC9 2015/02/25 01:25:36 Blink coding style rule allows lines to over 80 ch
AKV 2015/04/08 18:38:12 Done.
2455 Node* parentFormNode = reinterpret_cast<Node*>(formControlElement->formOwner ());
yosin_UTC9 2015/02/25 01:25:36 We don't need to use |reinterpret_cast<Node*>|. |f
2456 if (!parentFormNode)
2457 return 0;
yosin_UTC9 2015/02/25 01:25:36 nit: better to use |nullptr|.
AKV 2015/04/08 18:38:12 Done.
2458 Node* nextNode = static_cast<Node*>(element)->nextSibling();
yosin_UTC9 2015/02/25 01:25:36 nit: We don't need to cast to |Node| for |element|
2459 // Find all children of parentForm and do the checks
2460 // NodeList childNodes = static_cast<Node*>(parentFormElement)->childNodes() ;
2461 while ((nextNode = NodeRenderingTraversal::next(nextNode, parentFormNode))) {
yosin_UTC9 2015/02/25 01:25:36 I think we should use tab order rather than render
AKV 2015/04/08 18:38:12 Done.
2462 RenderObject* renderer = nextNode->renderer();
2463 if (nextNode->isContentEditable() || (renderer && renderer->isTextContro l())) {
2464 if (nextNode->isElementNode()) {
2465 return toElement(nextNode);
2466 }
2467 }
2468 // TODO(AKV) Need to handle when form has an iframe/frame as its child.
2469 }
2470 return 0;
yosin_UTC9 2015/02/25 01:25:36 nit: better to use |nullptr|.
AKV 2015/04/08 18:38:12 Done.
2471 }
2472
2473 Element* WebViewImpl::havePreviousInput(Element* element)
2474 {
2475 if (!element->isFormControlElement())
2476 return 0;
yosin_UTC9 2015/02/25 01:25:36 nit: better to use |nullptr|.
AKV 2015/04/08 18:38:12 Done.
AKV 2015/04/08 18:38:12 Done.
2477
2478 HTMLFormControlElement* formControlElement = toHTMLFormControlElement(elemen t);
2479 Node* parentFormNode = reinterpret_cast<Node*>(formControlElement->formOwner ());
yosin_UTC9 2015/02/25 01:25:36 We don't need to use |reinterpret_cast<Node*>|. |f
AKV 2015/04/08 18:38:12 I wanted to use Node pointer to pass to FocusContr
2480 if (!parentFormNode)
2481 return 0;
2482 Node* previousNode = static_cast<Node*>(element)->previousSibling();
2483 while ((previousNode = NodeRenderingTraversal::previous(previousNode, parent FormNode))) {
2484 RenderObject* renderer = previousNode->renderer();
2485 if (previousNode->isContentEditable() || (renderer && renderer->isTextCo ntrol())) {
2486 if (previousNode->isElementNode()) {
2487 return toElement(previousNode);
2488 }
2489 }
2490 // TODO(AKV) Need to handle when form has an iframe/frame as its child.
2491 }
2492 return 0;
2493 }
2494
2495 bool WebViewImpl::wantEnterEvents(Element* element)
2496 {
2497 if (!element->isFormControlElement())
2498 return false;
2499
2500 if (element->hasEventListeners(EventTypeNames::keydown) || element->hasEvent Listeners(EventTypeNames::keypress) || element->hasEventListeners(EventTypeNames ::keyup))
2501 return true;
2502
2503 return false;
2504 }
2505
2506 void WebViewImpl::advanceFocusToNextInputField(bool direction)
2507 {
2508 Element* element = focusedElement();
2509 if (!element)
2510 return;
2511
2512 HTMLFormControlElement* formControlElement = toHTMLFormControlElement(elemen t);
2513 HTMLFormElement* parentFormElement = formControlElement->formOwner();
2514 if (!parentFormElement) // There is no form element as parent, so navigation is not required.
2515 return;
2516
2517 Element* nextElement = element;
2518 FocusType focusType = FocusTypeNone;
2519 if (direction) {
2520 focusType = FocusTypeForward;
2521 nextElement = haveNextInput(element);
2522 } else {
2523 nextElement = havePreviousInput(element);
2524 focusType = FocusTypeBackward;
2525 }
2526
2527 if (!nextElement)
2528 return;
2529
2530 nextElement->scrollIntoViewIfNeeded(true /*centerIfNeeded*/);
2531 nextElement->dispatchSimulatedClick(0, SendMouseUpDownEvents);
2532 nextElement->focus(false, focusType);
2533 }
2534
2438 WebString WebViewImpl::inputModeOfFocusedElement() 2535 WebString WebViewImpl::inputModeOfFocusedElement()
2439 { 2536 {
2440 if (!RuntimeEnabledFeatures::inputModeAttributeEnabled()) 2537 if (!RuntimeEnabledFeatures::inputModeAttributeEnabled())
2441 return WebString(); 2538 return WebString();
2442 2539
2443 Element* element = focusedElement(); 2540 Element* element = focusedElement();
2444 if (!element) 2541 if (!element)
2445 return WebString(); 2542 return WebString();
2446 2543
2447 if (isHTMLInputElement(*element)) { 2544 if (isHTMLInputElement(*element)) {
(...skipping 2030 matching lines...) Expand 10 before | Expand all | Expand 10 after
4478 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi nedConstraints(); 4575 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi nedConstraints();
4479 4576
4480 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) 4577 if (!mainFrameImpl() || !mainFrameImpl()->frameView())
4481 return false; 4578 return false;
4482 4579
4483 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width 4580 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width
4484 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1); 4581 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1);
4485 } 4582 }
4486 4583
4487 } // namespace blink 4584 } // namespace blink
OLDNEW
« no previous file with comments | « Source/web/WebViewImpl.h ('k') | public/web/WebTextInputType.h » ('j') | public/web/WebView.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698