| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2014 Google Inc. All rights reserved. | 2 * Copyright (C) 2014 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 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 page()->focusController().setActive(true); | 453 page()->focusController().setActive(true); |
| 454 LocalFrame* focusedFrame = page()->focusController().focusedFrame(); | 454 LocalFrame* focusedFrame = page()->focusController().focusedFrame(); |
| 455 if (focusedFrame) { | 455 if (focusedFrame) { |
| 456 Element* element = focusedFrame->document()->focusedElement(); | 456 Element* element = focusedFrame->document()->focusedElement(); |
| 457 if (element && focusedFrame->selection().selection().isNone()) { | 457 if (element && focusedFrame->selection().selection().isNone()) { |
| 458 // If the selection was cleared while the WebView was not | 458 // If the selection was cleared while the WebView was not |
| 459 // focused, then the focus element shows with a focus ring but | 459 // focused, then the focus element shows with a focus ring but |
| 460 // no caret and does respond to keyboard inputs. | 460 // no caret and does respond to keyboard inputs. |
| 461 if (element->isTextFormControl()) { | 461 if (element->isTextFormControl()) { |
| 462 element->updateFocusAppearance(SelectionBehaviorOnFocus::Res
tore); | 462 element->updateFocusAppearance(SelectionBehaviorOnFocus::Res
tore); |
| 463 } else if (element->isContentEditable()) { | 463 } else if (isContentEditable(*element)) { |
| 464 // updateFocusAppearance() selects all the text of | 464 // updateFocusAppearance() selects all the text of |
| 465 // contentseditable DIVs. So we set the selection explicitly | 465 // contentseditable DIVs. So we set the selection explicitly |
| 466 // instead. Note that this has the side effect of moving the | 466 // instead. Note that this has the side effect of moving the |
| 467 // caret back to the beginning of the text. | 467 // caret back to the beginning of the text. |
| 468 Position position(element, 0); | 468 Position position(element, 0); |
| 469 focusedFrame->selection().setSelection(VisibleSelection(posi
tion, SelDefaultAffinity)); | 469 focusedFrame->selection().setSelection(VisibleSelection(posi
tion, SelDefaultAffinity)); |
| 470 } | 470 } |
| 471 } | 471 } |
| 472 } | 472 } |
| 473 } else { | 473 } else { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 510 if (!focused->editor().canEdit() && !inputMethodController.hasComposition()) | 510 if (!focused->editor().canEdit() && !inputMethodController.hasComposition()) |
| 511 return false; | 511 return false; |
| 512 | 512 |
| 513 // We should verify the parent node of this IME composition node are | 513 // We should verify the parent node of this IME composition node are |
| 514 // editable because JavaScript may delete a parent node of the composition | 514 // editable because JavaScript may delete a parent node of the composition |
| 515 // node. In this case, WebKit crashes while deleting texts from the parent | 515 // node. In this case, WebKit crashes while deleting texts from the parent |
| 516 // node, which doesn't exist any longer. | 516 // node, which doesn't exist any longer. |
| 517 const EphemeralRange range = inputMethodController.compositionEphemeralRange
(); | 517 const EphemeralRange range = inputMethodController.compositionEphemeralRange
(); |
| 518 if (range.isNotNull()) { | 518 if (range.isNotNull()) { |
| 519 Node* node = range.startPosition().computeContainerNode(); | 519 Node* node = range.startPosition().computeContainerNode(); |
| 520 if (!node || !node->isContentEditable()) | 520 if (!node || !isContentEditable(*node)) |
| 521 return false; | 521 return false; |
| 522 } | 522 } |
| 523 | 523 |
| 524 // A keypress event is canceled. If an ongoing composition exists, then the | 524 // A keypress event is canceled. If an ongoing composition exists, then the |
| 525 // keydown event should have arisen from a handled key (e.g., backspace). | 525 // keydown event should have arisen from a handled key (e.g., backspace). |
| 526 // In this case we ignore the cancellation and continue; otherwise (no | 526 // In this case we ignore the cancellation and continue; otherwise (no |
| 527 // ongoing composition) we exit and signal success only for attempts to | 527 // ongoing composition) we exit and signal success only for attempts to |
| 528 // clear the composition. | 528 // clear the composition. |
| 529 if (m_suppressNextKeypressEvent && !inputMethodController.hasComposition()) | 529 if (m_suppressNextKeypressEvent && !inputMethodController.hasComposition()) |
| 530 return text.isEmpty(); | 530 return text.isEmpty(); |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 708 if (toHTMLTextAreaElement(*element).isDisabledOrReadOnly()) | 708 if (toHTMLTextAreaElement(*element).isDisabledOrReadOnly()) |
| 709 return WebTextInputTypeNone; | 709 return WebTextInputTypeNone; |
| 710 return WebTextInputTypeTextArea; | 710 return WebTextInputTypeTextArea; |
| 711 } | 711 } |
| 712 | 712 |
| 713 if (element->isHTMLElement()) { | 713 if (element->isHTMLElement()) { |
| 714 if (toHTMLElement(element)->isDateTimeFieldElement()) | 714 if (toHTMLElement(element)->isDateTimeFieldElement()) |
| 715 return WebTextInputTypeDateTimeField; | 715 return WebTextInputTypeDateTimeField; |
| 716 } | 716 } |
| 717 | 717 |
| 718 if (element->isContentEditable()) | 718 if (isContentEditable(*element)) |
| 719 return WebTextInputTypeContentEditable; | 719 return WebTextInputTypeContentEditable; |
| 720 | 720 |
| 721 return WebTextInputTypeNone; | 721 return WebTextInputTypeNone; |
| 722 } | 722 } |
| 723 | 723 |
| 724 WebColor WebFrameWidgetImpl::backgroundColor() const | 724 WebColor WebFrameWidgetImpl::backgroundColor() const |
| 725 { | 725 { |
| 726 if (isTransparent()) | 726 if (isTransparent()) |
| 727 return Color::transparent; | 727 return Color::transparent; |
| 728 if (!m_localRoot->frameView()) | 728 if (!m_localRoot->frameView()) |
| (...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1458 } | 1458 } |
| 1459 | 1459 |
| 1460 LocalFrame* WebFrameWidgetImpl::focusedLocalFrameAvailableForIme() const | 1460 LocalFrame* WebFrameWidgetImpl::focusedLocalFrameAvailableForIme() const |
| 1461 { | 1461 { |
| 1462 if (!m_imeAcceptEvents) | 1462 if (!m_imeAcceptEvents) |
| 1463 return nullptr; | 1463 return nullptr; |
| 1464 return focusedLocalFrameInWidget(); | 1464 return focusedLocalFrameInWidget(); |
| 1465 } | 1465 } |
| 1466 | 1466 |
| 1467 } // namespace blink | 1467 } // namespace blink |
| OLD | NEW |