Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 4 * Copyright (C) 2009 Igalia S.L. | 4 * Copyright (C) 2009 Igalia S.L. |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 97 std::begin(kCommandNameEntries), std::end(kCommandNameEntries), commandN ame, | 97 std::begin(kCommandNameEntries), std::end(kCommandNameEntries), commandN ame, |
| 98 [](const CommandNameEntry& entry, const String& needle) | 98 [](const CommandNameEntry& entry, const String& needle) |
| 99 { | 99 { |
| 100 return codePointCompareIgnoringASCIICase(needle, entry.name) > 0; | 100 return codePointCompareIgnoringASCIICase(needle, entry.name) > 0; |
| 101 }); | 101 }); |
| 102 if (result != std::end(kCommandNameEntries) && codePointCompareIgnoringASCII Case(commandName, result->name) == 0) | 102 if (result != std::end(kCommandNameEntries) && codePointCompareIgnoringASCII Case(commandName, result->name) == 0) |
| 103 return result->type; | 103 return result->type; |
| 104 return WebEditingCommandType::Invalid; | 104 return WebEditingCommandType::Invalid; |
| 105 } | 105 } |
| 106 | 106 |
| 107 InputEvent::InputType InputTypeFromCommandType(WebEditingCommandType commandType ) | |
| 108 { | |
| 109 switch (commandType) { | |
| 110 case WebEditingCommandType::Delete: | |
| 111 case WebEditingCommandType::DeleteBackward: | |
| 112 case WebEditingCommandType::DeleteBackwardByDecomposingPreviousCharacter: | |
| 113 case WebEditingCommandType::DeleteForward: | |
| 114 case WebEditingCommandType::DeleteToBeginningOfLine: | |
| 115 case WebEditingCommandType::DeleteToBeginningOfParagraph: | |
| 116 case WebEditingCommandType::DeleteToEndOfLine: | |
| 117 case WebEditingCommandType::DeleteToEndOfParagraph: | |
| 118 case WebEditingCommandType::DeleteToMark: | |
| 119 case WebEditingCommandType::DeleteWordBackward: | |
| 120 case WebEditingCommandType::DeleteWordForward: | |
| 121 return InputEvent::InputType::DeleteContent; | |
| 122 case WebEditingCommandType::Redo: | |
| 123 return InputEvent::InputType::Redo; | |
| 124 case WebEditingCommandType::Undo: | |
| 125 return InputEvent::InputType::Undo; | |
| 126 case WebEditingCommandType::InsertBacktab: | |
| 127 case WebEditingCommandType::InsertHTML: | |
| 128 case WebEditingCommandType::InsertHorizontalRule: | |
| 129 case WebEditingCommandType::InsertImage: | |
| 130 case WebEditingCommandType::InsertLineBreak: | |
| 131 case WebEditingCommandType::InsertNewline: | |
| 132 case WebEditingCommandType::InsertNewlineInQuotedContent: | |
| 133 case WebEditingCommandType::InsertOrderedList: | |
| 134 case WebEditingCommandType::InsertParagraph: | |
| 135 case WebEditingCommandType::InsertTab: | |
| 136 case WebEditingCommandType::InsertText: | |
| 137 case WebEditingCommandType::InsertUnorderedList: | |
| 138 return InputEvent::InputType::InsertText; | |
|
ojan
2016/04/16 00:11:45
I think InsertText and InsertHTML should be two se
chongz
2016/04/18 22:54:47
The spec (http://w3c.github.io/editing/input-event
chongz
2016/04/19 21:17:01
Actually according to https://github.com/w3c/editi
| |
| 139 default: | |
| 140 return InputEvent::InputType::None; | |
| 141 } | |
| 142 } | |
| 143 | |
| 107 } // anonymous namespace | 144 } // anonymous namespace |
| 108 | 145 |
| 109 class EditorInternalCommand { | 146 class EditorInternalCommand { |
| 110 public: | 147 public: |
| 111 WebEditingCommandType commandType; | 148 WebEditingCommandType commandType; |
| 112 bool (*execute)(LocalFrame&, Event*, EditorCommandSource, const String&); | 149 bool (*execute)(LocalFrame&, Event*, EditorCommandSource, const String&); |
| 113 bool (*isSupportedFromDOM)(LocalFrame*); | 150 bool (*isSupportedFromDOM)(LocalFrame*); |
| 114 bool (*isEnabled)(LocalFrame&, Event*, EditorCommandSource); | 151 bool (*isEnabled)(LocalFrame&, Event*, EditorCommandSource); |
| 115 TriState (*state)(LocalFrame&, Event*); | 152 TriState (*state)(LocalFrame&, Event*); |
| 116 String (*value)(LocalFrame&, Event*); | 153 String (*value)(LocalFrame&, Event*); |
| (...skipping 1627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1744 { | 1781 { |
| 1745 // TODO(yosin) We should move this logic into |canExecute()| member function | 1782 // TODO(yosin) We should move this logic into |canExecute()| member function |
| 1746 // in |EditorInternalCommand| to replace |allowExecutionWhenDisabled|. | 1783 // in |EditorInternalCommand| to replace |allowExecutionWhenDisabled|. |
| 1747 // |allowExecutionWhenDisabled| is for "Copy", "Cut" and "Paste" commands | 1784 // |allowExecutionWhenDisabled| is for "Copy", "Cut" and "Paste" commands |
| 1748 // only. | 1785 // only. |
| 1749 if (!isEnabled(triggeringEvent)) { | 1786 if (!isEnabled(triggeringEvent)) { |
| 1750 // Let certain commands be executed when performed explicitly even if th ey are disabled. | 1787 // Let certain commands be executed when performed explicitly even if th ey are disabled. |
| 1751 if (!isSupported() || !m_frame || !m_command->allowExecutionWhenDisabled ) | 1788 if (!isSupported() || !m_frame || !m_command->allowExecutionWhenDisabled ) |
| 1752 return false; | 1789 return false; |
| 1753 } | 1790 } |
| 1791 | |
| 1792 if (m_source == CommandFromMenuOrKeyBinding) { | |
| 1793 InputEvent::InputType inputType = InputTypeFromCommandType(m_command->co mmandType); | |
| 1794 if (inputType != InputEvent::InputType::None) { | |
| 1795 if (dispatchBeforeInputEditorCommand(eventTargetNodeForDocument(m_fr ame->document()), inputType) != DispatchEventResult::NotCanceled) | |
| 1796 return true; | |
| 1797 } | |
| 1798 } | |
| 1799 | |
| 1800 // 'beforeinput' event handler may destroy |frame()|. | |
| 1801 if (!m_frame || !frame().document()) | |
| 1802 return false; | |
| 1803 | |
| 1754 frame().document()->updateLayoutIgnorePendingStylesheets(); | 1804 frame().document()->updateLayoutIgnorePendingStylesheets(); |
| 1755 DEFINE_STATIC_LOCAL(SparseHistogram, commandHistogram, ("WebCore.Editing.Com mands")); | 1805 DEFINE_STATIC_LOCAL(SparseHistogram, commandHistogram, ("WebCore.Editing.Com mands")); |
| 1756 commandHistogram.sample(static_cast<int>(m_command->commandType)); | 1806 commandHistogram.sample(static_cast<int>(m_command->commandType)); |
| 1757 return m_command->execute(*m_frame, triggeringEvent, m_source, parameter); | 1807 return m_command->execute(*m_frame, triggeringEvent, m_source, parameter); |
| 1758 } | 1808 } |
| 1759 | 1809 |
| 1760 bool Editor::Command::execute(Event* triggeringEvent) const | 1810 bool Editor::Command::execute(Event* triggeringEvent) const |
| 1761 { | 1811 { |
| 1762 return execute(String(), triggeringEvent); | 1812 return execute(String(), triggeringEvent); |
| 1763 } | 1813 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1803 { | 1853 { |
| 1804 return m_command && m_command->isTextInsertion; | 1854 return m_command && m_command->isTextInsertion; |
| 1805 } | 1855 } |
| 1806 | 1856 |
| 1807 int Editor::Command::idForHistogram() const | 1857 int Editor::Command::idForHistogram() const |
| 1808 { | 1858 { |
| 1809 return isSupported() ? static_cast<int>(m_command->commandType) : 0; | 1859 return isSupported() ? static_cast<int>(m_command->commandType) : 0; |
| 1810 } | 1860 } |
| 1811 | 1861 |
| 1812 } // namespace blink | 1862 } // namespace blink |
| OLD | NEW |