Index: third_party/WebKit/Source/core/editing/FrameCaret.cpp |
diff --git a/third_party/WebKit/Source/core/editing/FrameCaret.cpp b/third_party/WebKit/Source/core/editing/FrameCaret.cpp |
index f45bead89376b6cec0fd112fff8c2285135a8d5b..0024a45b4226861398741ce2e980dcb1b0a3417d 100644 |
--- a/third_party/WebKit/Source/core/editing/FrameCaret.cpp |
+++ b/third_party/WebKit/Source/core/editing/FrameCaret.cpp |
@@ -28,9 +28,7 @@ |
#include "core/dom/TaskRunnerHelper.h" |
#include "core/editing/CaretDisplayItemClient.h" |
#include "core/editing/EditingUtilities.h" |
-#include "core/editing/Editor.h" |
#include "core/editing/SelectionEditor.h" |
-#include "core/editing/commands/CompositeEditCommand.h" |
#include "core/frame/FrameView.h" |
#include "core/frame/LocalFrame.h" |
#include "core/frame/Settings.h" |
@@ -49,9 +47,10 @@ FrameCaret::FrameCaret(LocalFrame& frame, |
m_frame(frame), |
m_displayItemClient(new CaretDisplayItemClient()), |
m_caretVisibility(CaretVisibility::Hidden), |
- m_caretBlinkTimer(TaskRunnerHelper::get(TaskType::UnspecedTimer, &frame), |
- this, |
- &FrameCaret::caretBlinkTimerFired), |
+ m_caretBlinkTimer(new TaskRunnerTimer<FrameCaret>( |
+ TaskRunnerHelper::get(TaskType::UnspecedTimer, &frame), |
+ this, |
+ &FrameCaret::caretBlinkTimerFired)), |
m_shouldPaintCaret(true), |
m_isCaretBlinkingSuspended(false), |
m_shouldShowBlockCursor(false) {} |
@@ -75,11 +74,6 @@ const PositionWithAffinity FrameCaret::caretPosition() const { |
return PositionWithAffinity(selection.start(), selection.affinity()); |
} |
-inline static bool shouldStopBlinkingDueToTypingCommand(LocalFrame* frame) { |
- return frame->editor().lastEditCommand() && |
- frame->editor().lastEditCommand()->shouldStopCaretBlinking(); |
-} |
- |
void FrameCaret::updateAppearance() { |
DCHECK_GE(m_frame->document()->lifecycle().state(), |
DocumentLifecycle::LayoutClean); |
@@ -91,33 +85,30 @@ void FrameCaret::updateAppearance() { |
!isLogicalEndOfLine(createVisiblePosition(caretPosition())); |
bool shouldBlink = !paintBlockCursor && shouldBlinkCaret(); |
- |
- // If the caret moved, stop the blink timer so we can restart with a |
- // black caret in the new location. |
- if (!shouldBlink || shouldStopBlinkingDueToTypingCommand(m_frame)) |
+ if (!shouldBlink) { |
stopCaretBlinkTimer(); |
- |
+ return; |
+ } |
// Start blinking with a black caret. Be sure not to restart if we're |
// already blinking in the right location. |
- if (shouldBlink) |
- startBlinkCaret(); |
+ startBlinkCaret(); |
} |
void FrameCaret::stopCaretBlinkTimer() { |
- if (m_caretBlinkTimer.isActive() || m_shouldPaintCaret) |
+ if (m_caretBlinkTimer->isActive() || m_shouldPaintCaret) |
scheduleVisualUpdateForPaintInvalidationIfNeeded(); |
m_shouldPaintCaret = false; |
- m_caretBlinkTimer.stop(); |
+ m_caretBlinkTimer->stop(); |
} |
void FrameCaret::startBlinkCaret() { |
// Start blinking with a black caret. Be sure not to restart if we're |
// already blinking in the right location. |
- if (m_caretBlinkTimer.isActive()) |
+ if (m_caretBlinkTimer->isActive()) |
return; |
if (double blinkInterval = LayoutTheme::theme().caretBlinkInterval()) |
- m_caretBlinkTimer.startRepeating(blinkInterval, BLINK_FROM_HERE); |
+ m_caretBlinkTimer->startRepeating(blinkInterval, BLINK_FROM_HERE); |
m_shouldPaintCaret = true; |
scheduleVisualUpdateForPaintInvalidationIfNeeded(); |
@@ -238,4 +229,10 @@ void FrameCaret::scheduleVisualUpdateForPaintInvalidationIfNeeded() { |
frameView->scheduleVisualUpdateForPaintInvalidationIfNeeded(); |
} |
+void FrameCaret::recreateCaretBlinkTimerForTesting( |
+ RefPtr<WebTaskRunner> taskRunner) { |
+ m_caretBlinkTimer.reset(new TaskRunnerTimer<FrameCaret>( |
+ std::move(taskRunner), this, &FrameCaret::caretBlinkTimerFired)); |
+} |
+ |
} // namespace blink |