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

Unified Diff: third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp

Issue 1406713002: Make queryCommandSupported(copy|cut|paste) always return true (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 2015-10-14T18:29:33 Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp
diff --git a/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp b/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp
index 06751912f7b45f7712fb6027065d2bdc52f1f136..56c859af2c6124e64270581560ade84d5da1baef 100644
--- a/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp
@@ -295,8 +295,19 @@ static bool executeBackColor(LocalFrame& frame, Event*, EditorCommandSource sour
return executeApplyStyle(frame, source, EditActionSetBackgroundColor, CSSPropertyBackgroundColor, value);
}
-static bool executeCopy(LocalFrame& frame, Event*, EditorCommandSource, const String&)
+static bool canWriteClipboard(LocalFrame& frame, EditorCommandSource source)
{
+ if (source == CommandFromMenuOrKeyBinding)
+ return true;
+ Settings* settings = frame.settings();
+ bool defaultValue = (settings && settings->javaScriptCanAccessClipboard()) || UserGestureIndicator::processingUserGesture();
+ return frame.editor().client().canCopyCut(&frame, defaultValue);
+}
+
+static bool executeCopy(LocalFrame& frame, Event*, EditorCommandSource source, const String&)
+{
+ if (!canWriteClipboard(frame, source))
dcheng 2015/10/14 16:47:37 How come we need to do another check here? It look
yosin_UTC9 2015/10/15 01:30:47 Copy/Cut/Paste are only commands executing even if
dcheng 2015/10/15 06:10:30 Let's add a comment that we need to do these check
yosin_UTC9 2015/10/15 08:18:55 Added comments.
+ return false;
frame.editor().copy();
return true;
}
@@ -310,8 +321,10 @@ static bool executeCreateLink(LocalFrame& frame, Event*, EditorCommandSource, co
return true;
}
-static bool executeCut(LocalFrame& frame, Event*, EditorCommandSource, const String&)
+static bool executeCut(LocalFrame& frame, Event*, EditorCommandSource source, const String&)
{
+ if (!canWriteClipboard(frame, source))
+ return false;
frame.editor().cut();
return true;
}
@@ -941,14 +954,27 @@ static bool executeToggleOverwrite(LocalFrame& frame, Event*, EditorCommandSourc
return true;
}
-static bool executePaste(LocalFrame& frame, Event*, EditorCommandSource, const String&)
+static bool canReadClipboard(LocalFrame& frame, EditorCommandSource source)
{
+ if (source == CommandFromMenuOrKeyBinding)
+ return true;
+ Settings* settings = frame.settings();
+ bool defaultValue = settings && settings->javaScriptCanAccessClipboard() && settings->DOMPasteAllowed();
+ return frame.editor().client().canPaste(&frame, defaultValue);
+}
+
+static bool executePaste(LocalFrame& frame, Event*, EditorCommandSource source, const String&)
+{
+ if (!canReadClipboard(frame, source))
+ return false;
frame.editor().paste();
return true;
}
static bool executePasteGlobalSelection(LocalFrame& frame, Event*, EditorCommandSource source, const String&)
{
+ if (!canReadClipboard(frame, source))
+ return false;
if (!frame.editor().behavior().supportsGlobalSelection())
return false;
ASSERT_UNUSED(source, source == CommandFromMenuOrKeyBinding);
@@ -1170,26 +1196,6 @@ static bool supportedFromMenuOrKeyBinding(LocalFrame*)
return false;
}
-static bool supportedCopyCut(LocalFrame* frame)
-{
- if (!frame)
- return false;
-
- Settings* settings = frame->settings();
- bool defaultValue = (settings && settings->javaScriptCanAccessClipboard()) || UserGestureIndicator::processingUserGesture();
- return frame->editor().client().canCopyCut(frame, defaultValue);
-}
-
-static bool supportedPaste(LocalFrame* frame)
-{
- if (!frame)
- return false;
-
- Settings* settings = frame->settings();
- bool defaultValue = settings && settings->javaScriptCanAccessClipboard() && settings->DOMPasteAllowed();
- return frame->editor().client().canPaste(frame, defaultValue);
-}
-
// Enabled functions
static bool enabled(LocalFrame&, Event*, EditorCommandSource)
@@ -1230,13 +1236,17 @@ static bool enableCaretInEditableText(LocalFrame& frame, Event* event, EditorCom
return selection.isCaret() && selection.isContentEditable();
}
-static bool enabledCopy(LocalFrame& frame, Event*, EditorCommandSource)
+static bool enabledCopy(LocalFrame& frame, Event*, EditorCommandSource source)
{
+ if (!canWriteClipboard(frame, source))
+ return false;
return frame.editor().canDHTMLCopy() || frame.editor().canCopy();
}
-static bool enabledCut(LocalFrame& frame, Event*, EditorCommandSource)
+static bool enabledCut(LocalFrame& frame, Event*, EditorCommandSource source)
{
+ if (!canWriteClipboard(frame, source))
+ return false;
return frame.editor().canDHTMLCut() || frame.editor().canCut();
}
@@ -1270,8 +1280,10 @@ static bool enabledInRichlyEditableText(LocalFrame& frame, Event*, EditorCommand
return frame.selection().isCaretOrRange() && frame.selection().isContentRichlyEditable() && frame.selection().rootEditableElement();
}
-static bool enabledPaste(LocalFrame& frame, Event*, EditorCommandSource)
+static bool enabledPaste(LocalFrame& frame, Event*, EditorCommandSource source)
{
+ if (!canReadClipboard(frame, source))
+ return false;
return frame.editor().canPaste();
}
@@ -1457,9 +1469,9 @@ static const CommandMap& createCommandMap()
{ "BackColor", {4, executeBackColor, supported, enabledInRichlyEditableText, stateNone, valueBackColor, notTextInsertion, doNotAllowExecutionWhenDisabled } },
{ "BackwardDelete", {5, executeDeleteBackward, supportedFromMenuOrKeyBinding, enabledInEditableText, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } }, // FIXME: remove BackwardDelete when Safari for Windows stops using it.
{ "Bold", {6, executeToggleBold, supported, enabledInRichlyEditableText, stateBold, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
- { "Copy", {7, executeCopy, supportedCopyCut, enabledCopy, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } },
+ { "Copy", {7, executeCopy, supported, enabledCopy, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } },
{ "CreateLink", {8, executeCreateLink, supported, enabledInRichlyEditableText, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
- { "Cut", {9, executeCut, supportedCopyCut, enabledCut, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } },
+ { "Cut", {9, executeCut, supported, enabledCut, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } },
{ "DefaultParagraphSeparator", {10, executeDefaultParagraphSeparator, supported, enabled, stateNone, valueDefaultParagraphSeparator, notTextInsertion, doNotAllowExecutionWhenDisabled} },
{ "Delete", {11, executeDelete, supported, enabledDelete, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
{ "DeleteBackward", {12, executeDeleteBackward, supportedFromMenuOrKeyBinding, enabledInEditableText, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
@@ -1553,8 +1565,8 @@ static const CommandMap& createCommandMap()
{ "MoveWordRightAndModifySelection", {100, executeMoveWordRightAndModifySelection, supportedFromMenuOrKeyBinding, enabledVisibleSelectionOrCaretBrowsing, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
{ "Outdent", {101, executeOutdent, supported, enabledInRichlyEditableText, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
{ "OverWrite", {102, executeToggleOverwrite, supportedFromMenuOrKeyBinding, enabledInRichlyEditableText, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
- { "Paste", {103, executePaste, supportedPaste, enabledPaste, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } },
- { "PasteAndMatchStyle", {104, executePasteAndMatchStyle, supportedPaste, enabledPaste, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } },
+ { "Paste", {103, executePaste, supported, enabledPaste, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } },
+ { "PasteAndMatchStyle", {104, executePasteAndMatchStyle, supported, enabledPaste, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } },
{ "PasteGlobalSelection", {105, executePasteGlobalSelection, supportedFromMenuOrKeyBinding, enabledPaste, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } },
{ "Print", {106, executePrint, supported, enabled, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
{ "Redo", {107, executeRedo, supported, enabledRedo, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },

Powered by Google App Engine
This is Rietveld 408576698