| Summary: | [firefox] Pasted HTML shows twice (with clipboard privileges) | ||
|---|---|---|---|
| Product: | [ECD] Orion | Reporter: | Mihai Sucan <mihai.sucan> |
| Component: | Editor | Assignee: | Mihai Sucan <mihai.sucan> |
| Status: | RESOLVED FIXED | QA Contact: | |
| Severity: | normal | ||
| Priority: | P3 | CC: | eclipse.felipe, mihai.sucan, Silenio_Quarti |
| Version: | unspecified | ||
| Target Milestone: | 0.4 M1 | ||
| Hardware: | All | ||
| OS: | All | ||
| Whiteboard: | |||
Proposed fix: https://github.com/mihaisucan/orion.client/tree/bug-362835 Please let me know if further changes are needed. Thank you! For reference the Mozilla bug is: https://bugzilla.mozilla.org/show_bug.cgi?id=699541 I'm okay with the fix. Feel free to push to master and thank you for one more fix. |
Since the new Orion landed in Firefox 10 nightlies one can see HTML pastes showing twice. STR: 1. Get the latest Firefox nightly, open Scratchpad. 2. Select some HTML from any tab and Paste into Scratchpad. 3. Notice how the pasted text shows twice. If you use Edit > Paste you also get: Error: An error occurred executing the cmd_paste command: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIController.doCommand]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: chrome://global/content/globalOverlay.js :: goDoCommand :: line 96" data: no] Source File: chrome://global/content/globalOverlay.js Line: 100 (in the Error Console) If I select some plain text from other apps, it works without issues. Problem: Orion runs with clipboard privileges enabled in Scratchpad and the call to execCommand("paste") works, but Orion fails to detect it works. It does not cancel the original paste event and during the timeout _getText() finds the same text pasted twice in the clipboardDiv. The reason why Orion fails to detect that execCommand("paste") works is that the call throws. The reason it throws is not because clipboard privileges are not given, but because Firefox has some internal failure when you try to paste HTML into the PRE, and it goes out of the PRE. You can construct a minimal page with a <div><pre contenteditable=""> and paste HTML into this element - you get the same error (provided that you use Edit > Paste from the Firefox menu). Ctrl-V hides the error. Nonetheless, paste works even if the execCommand() throws. Two ways to fix the bug: A. check in the try-catch if paste worked (see if there are new childNodes in clipboardDiv or in the PRE). B. always clear clipboardDiv when execCommand() throws - to remove anything that execCommand() did.