moebius#56: Fix: DataTransfer - Pasting image from clipboard fails in some cases

https://github.com/MoonchildProductions/moebius/pull/56
This commit is contained in:
janekptacijarabaci 2018-04-20 22:54:26 +02:00 • committed by Roy Tam
commit 37c73e0634
13 changed files with 156 additions and 44 deletions

View file

@ -1538,6 +1538,13 @@ HTMLEditor::CanPaste(int32_t aSelectionType,
NS_ENSURE_ARG_POINTER(aCanPaste);
*aCanPaste = false;
// Always enable the paste command when inside of a HTML or XHTML document.
nsCOMPtr<nsIDocument> doc = GetDocument();
if (doc && doc->IsHTMLOrXHTML()) {
*aCanPaste = true;
return NS_OK;
}
// can't paste if readonly
if (!IsModifiable()) {
return NS_OK;

View file

@ -383,6 +383,13 @@ TextEditor::CanPaste(int32_t aSelectionType,
NS_ENSURE_ARG_POINTER(aCanPaste);
*aCanPaste = false;
// Always enable the paste command when inside of a HTML or XHTML document.
nsCOMPtr<nsIDocument> doc = GetDocument();
if (doc && doc->IsHTMLOrXHTML()) {
*aCanPaste = true;
return NS_OK;
}
// can't paste if readonly
if (!IsModifiable()) {
return NS_OK;

View file

@ -12,3 +12,4 @@ support-files = green.png
[test_set_document_title_transaction.html]
[test_texteditor_keyevent_handling.html]
skip-if = (debug && os=='win') || (os == 'linux') # Bug 1116205, leaks on windows debug, fails delete key on linux
[test_pasteImgTextarea.xul]

View file

@ -247,3 +247,5 @@ skip-if = toolkit == 'android'
[test_css_chrome_load_access.html]
skip-if = toolkit == 'android' # chrome urls not available due to packaging
[test_selection_move_commands.html]
[test_pasteImgTextarea.html]
skip-if = toolkit == 'android' # bug 1299578

View file

@ -0,0 +1,20 @@
<!doctype html>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/SpawnTask.js"></script>
<img id="i" src="green.png">
<textarea id="t"></textarea>
<script>
let loaded = new Promise(resolve => addLoadEvent(resolve));
add_task(function*() {
yield loaded;
SpecialPowers.setCommandNode(window, document.getElementById("i"));
SpecialPowers.doCommand(window, "cmd_copyImageContents");
let input = document.getElementById("t");
input.focus();
var controller =
SpecialPowers.wrap(input).controllers.getControllerForCommand("cmd_paste");
is(controller.isCommandEnabled("cmd_paste"), true,
"paste should be enabled in html textareas when an image is on the clipboard");
});
</script>

View file

@ -0,0 +1,27 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
<window xmlns:html="http://www.w3.org/1999/xhtml"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SpawnTask.js"></script>
<body xmlns="http://www.w3.org/1999/xhtml">
<html:img id="i" src="green.png" />
<html:textarea id="t"></html:textarea>
</body>
<script type="text/javascript"><![CDATA[
let loaded = new Promise(resolve => addLoadEvent(resolve));
add_task(function*() {
yield loaded;
SpecialPowers.setCommandNode(window, document.getElementById("i"));
SpecialPowers.doCommand(window, "cmd_copyImageContents");
let input = document.getElementById("t");
input.focus();
var controller =
SpecialPowers.wrap(input).controllers.getControllerForCommand("cmd_paste");
is(controller.isCommandEnabled("cmd_paste"), false,
"paste should not be enabled in xul textareas when an image is on the clipboard");
});
]]></script>
</window>