#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "third_party/blink/renderer/core/editing/commands/editor_command.h"
#include <iterator>
#include "base/metrics/histogram_functions.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/renderer/core/css/css_property_names.h"
#include "third_party/blink/renderer/core/css/css_property_value_set.h"
#include "third_party/blink/renderer/core/css_value_keywords.h"
#include "third_party/blink/renderer/core/display_lock/display_lock_document_state.h"
#include "third_party/blink/renderer/core/dom/events/event.h"
#include "third_party/blink/renderer/core/dom/tag_collection.h"
#include "third_party/blink/renderer/core/editing/commands/clipboard_commands.h"
#include "third_party/blink/renderer/core/editing/commands/create_link_command.h"
#include "third_party/blink/renderer/core/editing/commands/editing_command_type.h"
#include "third_party/blink/renderer/core/editing/commands/editing_commands_utilities.h"
#include "third_party/blink/renderer/core/editing/commands/editor_command_names.h"
#include "third_party/blink/renderer/core/editing/commands/format_block_command.h"
#include "third_party/blink/renderer/core/editing/commands/indent_outdent_command.h"
#include "third_party/blink/renderer/core/editing/commands/insert_commands.h"
#include "third_party/blink/renderer/core/editing/commands/move_commands.h"
#include "third_party/blink/renderer/core/editing/commands/remove_format_command.h"
#include "third_party/blink/renderer/core/editing/commands/style_commands.h"
#include "third_party/blink/renderer/core/editing/commands/typing_command.h"
#include "third_party/blink/renderer/core/editing/commands/undo_stack.h"
#include "third_party/blink/renderer/core/editing/commands/unlink_command.h"
#include "third_party/blink/renderer/core/editing/editing_tri_state.h"
#include "third_party/blink/renderer/core/editing/editing_utilities.h"
#include "third_party/blink/renderer/core/editing/editor.h"
#include "third_party/blink/renderer/core/editing/ephemeral_range.h"
#include "third_party/blink/renderer/core/editing/frame_selection.h"
#include "third_party/blink/renderer/core/editing/ime/edit_context.h"
#include "third_party/blink/renderer/core/editing/ime/input_method_controller.h"
#include "third_party/blink/renderer/core/editing/iterators/text_iterator.h"
#include "third_party/blink/renderer/core/editing/kill_ring.h"
#include "third_party/blink/renderer/core/editing/selection_modifier.h"
#include "third_party/blink/renderer/core/editing/selection_template.h"
#include "third_party/blink/renderer/core/editing/set_selection_options.h"
#include "third_party/blink/renderer/core/editing/spellcheck/spell_checker.h"
#include "third_party/blink/renderer/core/editing/visible_position.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/html/html_br_element.h"
#include "third_party/blink/renderer/core/html_names.h"
#include "third_party/blink/renderer/core/input/event_handler.h"
#include "third_party/blink/renderer/core/input/keyboard_shortcut_recorder.h"
#include "third_party/blink/renderer/core/layout/layout_text.h"
#include "third_party/blink/renderer/core/page/chrome_client.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/scroll/scrollbar.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
namespace blink {
namespace {
struct CommandNameEntry { … };
const CommandNameEntry kCommandNameEntries[] = …;
static_assert …;
EditingCommandType EditingCommandTypeFromCommandName(
const String& command_name) { … }
InputEvent::InputType InputTypeFromCommandType(EditingCommandType command_type,
LocalFrame& frame) { … }
StaticRangeVector* RangesFromCurrentSelectionOrExtendCaret(
const LocalFrame& frame,
SelectionModifyDirection direction,
TextGranularity granularity) { … }
EphemeralRange ComputeRangeForTranspose(LocalFrame& frame) { … }
}
class EditorInternalCommand { … };
static const bool kNotTextInsertion = …;
static const bool kIsTextInsertion = …;
static bool ExecuteApplyParagraphStyle(LocalFrame& frame,
EditorCommandSource source,
InputEvent::InputType input_type,
CSSPropertyID property_id,
const String& property_value) { … }
bool ExpandSelectionToGranularity(LocalFrame& frame,
TextGranularity granularity) { … }
static bool HasChildTags(Element& element, const QualifiedName& tag_name) { … }
static EditingTriState SelectionListState(LocalFrame& frame,
const QualifiedName& tag_name) { … }
static EphemeralRange UnionEphemeralRanges(const EphemeralRange& range1,
const EphemeralRange& range2) { … }
static bool CanSmartCopyOrDelete(LocalFrame& frame) { … }
static bool ExecuteCreateLink(LocalFrame& frame,
Event*,
EditorCommandSource,
const String& value) { … }
static bool ExecuteDefaultParagraphSeparator(LocalFrame& frame,
Event*,
EditorCommandSource,
const String& value) { … }
static void PerformDelete(LocalFrame& frame) { … }
static bool ExecuteDelete(LocalFrame& frame,
Event*,
EditorCommandSource source,
const String&) { … }
static bool DeleteWithDirection(LocalFrame& frame,
DeleteDirection direction,
TextGranularity granularity,
bool kill_ring,
bool is_typing_action) { … }
static bool ExecuteDeleteBackward(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteDeleteBackwardByDecomposingPreviousCharacter(
LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteDeleteForward(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteDeleteToBeginningOfLine(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteDeleteToBeginningOfParagraph(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteDeleteToEndOfLine(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteDeleteToEndOfParagraph(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteDeleteToMark(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteDeleteWordBackward(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteDeleteWordForward(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteFindString(LocalFrame& frame,
Event*,
EditorCommandSource,
const String& value) { … }
static bool ExecuteFormatBlock(LocalFrame& frame,
Event*,
EditorCommandSource,
const String& value) { … }
static bool ExecuteForwardDelete(LocalFrame& frame,
Event*,
EditorCommandSource source,
const String&) { … }
static bool ExecuteIgnoreSpelling(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteIndent(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteJustifyCenter(LocalFrame& frame,
Event*,
EditorCommandSource source,
const String&) { … }
static bool ExecuteJustifyFull(LocalFrame& frame,
Event*,
EditorCommandSource source,
const String&) { … }
static bool ExecuteJustifyLeft(LocalFrame& frame,
Event*,
EditorCommandSource source,
const String&) { … }
static bool ExecuteJustifyRight(LocalFrame& frame,
Event*,
EditorCommandSource source,
const String&) { … }
static bool ExecuteOutdent(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteToggleOverwrite(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecutePrint(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteRedo(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteRemoveFormat(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteScrollPageBackward(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteScrollPageForward(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteScrollLineUp(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteScrollLineDown(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteScrollToBeginningOfDocument(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteScrollToEndOfDocument(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteSelectAll(LocalFrame& frame,
Event*,
EditorCommandSource source,
const String&) { … }
static bool ExecuteSelectLine(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteSelectParagraph(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteSelectSentence(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteSelectToMark(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteSelectWord(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteSetMark(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteSwapWithMark(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteTranspose(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteUndo(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteUnlink(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteUnselect(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteYank(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool ExecuteYankAndSelect(LocalFrame& frame,
Event*,
EditorCommandSource,
const String&) { … }
static bool Supported(LocalFrame*) { … }
static bool SupportedFromMenuOrKeyBinding(LocalFrame*) { … }
static bool Enabled(LocalFrame&, Event*, EditorCommandSource) { … }
static bool EnabledVisibleSelection(LocalFrame& frame,
Event* event,
EditorCommandSource source) { … }
static bool EnabledVisibleSelectionAndMark(LocalFrame& frame,
Event* event,
EditorCommandSource source) { … }
static bool EnableCaretInEditableText(LocalFrame& frame,
Event* event,
EditorCommandSource source) { … }
static bool EnabledInEditableText(LocalFrame& frame,
Event* event,
EditorCommandSource source) { … }
static bool EnabledInEditableTextOrCaretBrowsing(LocalFrame& frame,
Event* event,
EditorCommandSource source) { … }
static bool EnabledDelete(LocalFrame& frame,
Event* event,
EditorCommandSource source) { … }
static bool EnabledInRichlyEditableText(LocalFrame& frame,
Event*,
EditorCommandSource source) { … }
static bool EnabledRangeInEditableText(LocalFrame& frame,
Event*,
EditorCommandSource source) { … }
static bool EnabledRangeInRichlyEditableText(LocalFrame& frame,
Event*,
EditorCommandSource source) { … }
static bool EnabledRedo(LocalFrame& frame, Event*, EditorCommandSource) { … }
static bool EnabledUndo(LocalFrame& frame, Event*, EditorCommandSource) { … }
static bool EnabledUnselect(LocalFrame& frame,
Event* event,
EditorCommandSource source) { … }
static bool EnabledSelectAll(LocalFrame& frame,
Event*,
EditorCommandSource source) { … }
static EditingTriState StateNone(LocalFrame&, Event*) { … }
EditingTriState StateOrderedList(LocalFrame& frame, Event*) { … }
static EditingTriState StateUnorderedList(LocalFrame& frame, Event*) { … }
static EditingTriState StateJustifyCenter(LocalFrame& frame, Event*) { … }
static EditingTriState StateJustifyFull(LocalFrame& frame, Event*) { … }
static EditingTriState StateJustifyLeft(LocalFrame& frame, Event*) { … }
static EditingTriState StateJustifyRight(LocalFrame& frame, Event*) { … }
static String ValueStateOrNull(const EditorInternalCommand& self,
LocalFrame& frame,
Event* triggering_event) { … }
static String ValueEmpty(const EditorInternalCommand&, LocalFrame&, Event*) { … }
static String ValueDefaultParagraphSeparator(const EditorInternalCommand&,
LocalFrame& frame,
Event*) { … }
static String ValueFormatBlock(const EditorInternalCommand&,
LocalFrame& frame,
Event*) { … }
static bool CanNotExecuteWhenDisabled(LocalFrame&, EditorCommandSource) { … }
static const EditorInternalCommand* InternalCommand(
const String& command_name) { … }
EditorCommand Editor::CreateCommand(const String& command_name) const { … }
EditorCommand Editor::CreateCommand(const String& command_name,
EditorCommandSource source) const { … }
bool Editor::ExecuteCommand(const String& command_name) { … }
bool Editor::ExecuteCommand(const String& command_name, const String& value) { … }
bool Editor::IsCommandEnabled(const String& command_name) const { … }
EditorCommand::EditorCommand()
: … { … }
EditorCommand::EditorCommand(const EditorInternalCommand* command,
EditorCommandSource source,
LocalFrame* frame)
: … { … }
LocalFrame& EditorCommand::GetFrame() const { … }
bool EditorCommand::Execute(const String& parameter,
Event* triggering_event) const { … }
bool EditorCommand::Execute(Event* triggering_event) const { … }
bool EditorCommand::CanExecute(Event* triggering_event) const { … }
bool EditorCommand::IsSupported() const { … }
bool EditorCommand::IsEnabled(Event* triggering_event) const { … }
EditingTriState EditorCommand::GetState(Event* triggering_event) const { … }
String EditorCommand::Value(Event* triggering_event) const { … }
bool EditorCommand::IsTextInsertion() const { … }
bool EditorCommand::IsValueInterpretedAsHTML() const { … }
int EditorCommand::IdForHistogram() const { … }
const StaticRangeVector* EditorCommand::GetTargetRanges() const { … }
}