Mozilla Home
Privacy
Cookies
Legal
Bugzilla
Browse
Advanced Search
New Bug
Reports
Documentation
Log In
Log In with GitHub
or
Remember me
Browse
Advanced Search
New Bug
Reports
Documentation
Attachment 625070 Details for
Bug 742240
[patch]
Patch v4, updated for new spec
patch (text/plain), 16.90 KB, created by
Aryeh Gregor (:ayg) (no longer with Mozilla)
(
hide
)
Description:
Patch v4, updated for new spec
Filename:
MIME Type:
Creator:
Aryeh Gregor (:ayg) (no longer with Mozilla)
Size:
16.90 KB
patch
obsolete
># HG changeset patch ># User Aryeh Gregor <ayg@aryeh.name> ># Date 1334494640 -10800 ># Node ID 9da4158676f4953ae63cc19758e14ca733381b7c ># Parent 3a1c34f6417b46a2675c6aca32628da85872bca3 >Bug 742240 - Handle unsupported commands per spec in execCommand/queryCommand* > >diff --git a/content/html/document/src/nsHTMLDocument.cpp b/content/html/document/src/nsHTMLDocument.cpp >--- a/content/html/document/src/nsHTMLDocument.cpp >+++ b/content/html/document/src/nsHTMLDocument.cpp >@@ -3072,16 +3072,25 @@ nsHTMLDocument::ExecCommand(const nsAStr > { > NS_ENSURE_ARG_POINTER(_retval); > > // for optional parameters see dom/src/base/nsHistory.cpp: HistoryImpl::Go() > // this might add some ugly JS dependencies? > > *_retval = false; > >+ nsCAutoString cmdToDispatch, paramStr; >+ bool isBool, boolVal; >+ if (!ConvertToMidasInternalCommand(commandID, value, >+ cmdToDispatch, paramStr, >+ isBool, boolVal)) { >+ // Return false >+ return NS_OK; >+ } >+ > // if editing is not on, bail > if (!IsEditingOnAfterFlush()) > return NS_ERROR_FAILURE; > > // if they are requesting UI from us, let's fail since we have no UI > if (doShowUI) > return NS_OK; > >@@ -3105,22 +3114,16 @@ nsHTMLDocument::ExecCommand(const nsAStr > GetMidasCommandManager(getter_AddRefs(cmdMgr)); > if (!cmdMgr) > return NS_ERROR_FAILURE; > > nsIDOMWindow *window = GetWindow(); > if (!window) > return NS_ERROR_FAILURE; > >- nsCAutoString cmdToDispatch, paramStr; >- bool isBool, boolVal; >- if (!ConvertToMidasInternalCommand(commandID, value, >- cmdToDispatch, paramStr, isBool, boolVal)) >- return NS_OK; >- > if ((cmdToDispatch.EqualsLiteral("cmd_paragraphState") || > cmdToDispatch.EqualsLiteral("cmd_fontSize")) && paramStr.IsEmpty()) { > // Invalid value > return NS_OK; > } > > if (!isBool && paramStr.IsEmpty()) { > rv = cmdMgr->DoCommand(cmdToDispatch.get(), nsnull, window); >@@ -3152,63 +3155,67 @@ nsHTMLDocument::ExecCommand(const nsAStr > /* boolean queryCommandEnabled(in DOMString commandID); */ > NS_IMETHODIMP > nsHTMLDocument::QueryCommandEnabled(const nsAString & commandID, > bool *_retval) > { > NS_ENSURE_ARG_POINTER(_retval); > *_retval = false; > >+ nsCAutoString cmdToDispatch; >+ if (!ConvertToMidasInternalCommand(commandID, cmdToDispatch)) { >+ // Return false >+ return NS_OK; >+ } >+ > // if editing is not on, bail > if (!IsEditingOnAfterFlush()) > return NS_ERROR_FAILURE; > > // get command manager and dispatch command to our window if it's acceptable > nsCOMPtr<nsICommandManager> cmdMgr; > GetMidasCommandManager(getter_AddRefs(cmdMgr)); > if (!cmdMgr) > return NS_ERROR_FAILURE; > > nsIDOMWindow *window = GetWindow(); > if (!window) > return NS_ERROR_FAILURE; > >- nsCAutoString cmdToDispatch; >- if (!ConvertToMidasInternalCommand(commandID, cmdToDispatch)) >- return NS_OK; // queryCommandEnabled returns false on unsupported commands >- > return cmdMgr->IsCommandEnabled(cmdToDispatch.get(), window, _retval); > } > > /* boolean queryCommandIndeterm (in DOMString commandID); */ > NS_IMETHODIMP > nsHTMLDocument::QueryCommandIndeterm(const nsAString & commandID, > bool *_retval) > { > NS_ENSURE_ARG_POINTER(_retval); > *_retval = false; > >+ nsCAutoString cmdToDispatch; >+ if (!ConvertToMidasInternalCommand(commandID, cmdToDispatch)) { >+ // Return false >+ return NS_OK; >+ } >+ > // if editing is not on, bail > if (!IsEditingOnAfterFlush()) > return NS_ERROR_FAILURE; > > // get command manager and dispatch command to our window if it's acceptable > nsCOMPtr<nsICommandManager> cmdMgr; > GetMidasCommandManager(getter_AddRefs(cmdMgr)); > if (!cmdMgr) > return NS_ERROR_FAILURE; > > nsIDOMWindow *window = GetWindow(); > if (!window) > return NS_ERROR_FAILURE; > >- nsCAutoString cmdToDispatch; >- if (!ConvertToMidasInternalCommand(commandID, cmdToDispatch)) >- return NS_ERROR_NOT_IMPLEMENTED; >- > nsresult rv; > nsCOMPtr<nsICommandParams> cmdParams = do_CreateInstance( > NS_COMMAND_PARAMS_CONTRACTID, &rv); > NS_ENSURE_SUCCESS(rv, rv); > > rv = cmdMgr->GetCommandState(cmdToDispatch.get(), window, cmdParams); > if (NS_FAILED(rv)) > return rv; >@@ -3222,16 +3229,25 @@ nsHTMLDocument::QueryCommandIndeterm(con > > /* boolean queryCommandState(in DOMString commandID); */ > NS_IMETHODIMP > nsHTMLDocument::QueryCommandState(const nsAString & commandID, bool *_retval) > { > NS_ENSURE_ARG_POINTER(_retval); > *_retval = false; > >+ nsCAutoString cmdToDispatch, paramToCheck; >+ bool dummy, dummy2; >+ if (!ConvertToMidasInternalCommand(commandID, commandID, >+ cmdToDispatch, paramToCheck, >+ dummy, dummy2)) { >+ // Return false >+ return NS_OK; >+ } >+ > // if editing is not on, bail > if (!IsEditingOnAfterFlush()) > return NS_ERROR_FAILURE; > > // get command manager and dispatch command to our window if it's acceptable > nsCOMPtr<nsICommandManager> cmdMgr; > GetMidasCommandManager(getter_AddRefs(cmdMgr)); > if (!cmdMgr) >@@ -3243,22 +3259,16 @@ nsHTMLDocument::QueryCommandState(const > > if (commandID.LowerCaseEqualsLiteral("usecss")) { > // Per spec, state is supported for styleWithCSS but not useCSS, so we just > // return false always. > *_retval = false; > return NS_OK; > } > >- nsCAutoString cmdToDispatch, paramToCheck; >- bool dummy, dummy2; >- if (!ConvertToMidasInternalCommand(commandID, commandID, >- cmdToDispatch, paramToCheck, dummy, dummy2)) >- return NS_ERROR_NOT_IMPLEMENTED; >- > nsresult rv; > nsCOMPtr<nsICommandParams> cmdParams = do_CreateInstance( > NS_COMMAND_PARAMS_CONTRACTID, &rv); > if (!cmdParams) > return NS_ERROR_OUT_OF_MEMORY; > > rv = cmdMgr->GetCommandState(cmdToDispatch.get(), window, cmdParams); > if (NS_FAILED(rv)) >@@ -3289,61 +3299,51 @@ nsHTMLDocument::QueryCommandState(const > } > > /* boolean queryCommandSupported(in DOMString commandID); */ > NS_IMETHODIMP > nsHTMLDocument::QueryCommandSupported(const nsAString & commandID, > bool *_retval) > { > NS_ENSURE_ARG_POINTER(_retval); >- *_retval = false; >- >- // if editing is not on, bail >- if (!IsEditingOnAfterFlush()) >- return NS_ERROR_FAILURE; >- >- // get command manager >- nsCOMPtr<nsICommandManager> cmdMgr; >- GetMidasCommandManager(getter_AddRefs(cmdMgr)); >- if (!cmdMgr) >- return NS_ERROR_FAILURE; > > // commandID is supported if it can be converted to a Midas command > nsCAutoString cmdToDispatch; >- if (ConvertToMidasInternalCommand(commandID, cmdToDispatch)) >- *_retval = true; >+ *_retval = ConvertToMidasInternalCommand(commandID, cmdToDispatch); > > return NS_OK; > } > > /* DOMString queryCommandValue(in DOMString commandID); */ > NS_IMETHODIMP > nsHTMLDocument::QueryCommandValue(const nsAString & commandID, > nsAString &_retval) > { > _retval.SetLength(0); > >+ nsCAutoString cmdToDispatch, paramStr; >+ if (!ConvertToMidasInternalCommand(commandID, cmdToDispatch)) { >+ // Return empty string >+ return NS_OK; >+ } >+ > // if editing is not on, bail > if (!IsEditingOnAfterFlush()) > return NS_ERROR_FAILURE; > > // get command manager and dispatch command to our window if it's acceptable > nsCOMPtr<nsICommandManager> cmdMgr; > GetMidasCommandManager(getter_AddRefs(cmdMgr)); > if (!cmdMgr) > return NS_ERROR_FAILURE; > > nsIDOMWindow *window = GetWindow(); > if (!window) > return NS_ERROR_FAILURE; > >- nsCAutoString cmdToDispatch, paramStr; >- if (!ConvertToMidasInternalCommand(commandID, cmdToDispatch)) >- return NS_ERROR_NOT_IMPLEMENTED; >- > // create params > nsresult rv; > nsCOMPtr<nsICommandParams> cmdParams = do_CreateInstance( > NS_COMMAND_PARAMS_CONTRACTID, &rv); > if (!cmdParams) > return NS_ERROR_OUT_OF_MEMORY; > > // this is a special command since we are calling "DoCommand rather than >diff --git a/dom/imptests/failures/editing/conformancetest/test_runtest.html.json b/dom/imptests/failures/editing/conformancetest/test_runtest.html.json >--- a/dom/imptests/failures/editing/conformancetest/test_runtest.html.json >+++ b/dom/imptests/failures/editing/conformancetest/test_runtest.html.json >@@ -310,1905 +310,945 @@ > "[[\"createlink\",\"http://www.google.com/\"]] \"{<a href=otherurl><b>foobar]baz</b></a>\" compare innerHTML":true, > "[[\"createlink\",\"http://www.google.com/\"]] \"<a name=abc>foo[bar]baz</a>\" compare innerHTML":true, > "[[\"createlink\",\"http://www.google.com/\"]] \"<a name=abc><b>foo[bar]baz</b></a>\" compare innerHTML":true, > "[[\"createlink\",\"\"]] \"foo[bar]baz\": execCommand(\"createlink\", false, \"\") return value":true, > "[[\"stylewithcss\",\"true\"],[\"delete\",\"\"]] \"foo<span style=display:none>bar</span>[]baz\" compare innerHTML":true, > "[[\"stylewithcss\",\"false\"],[\"delete\",\"\"]] \"foo<span style=display:none>bar</span>[]baz\" compare innerHTML":true, > "[[\"delete\",\"\"]] \"foo<script>bar</script>[]baz\" compare innerHTML":true, > "[[\"defaultparagraphseparator\",\"div\"],[\"delete\",\"\"]] \"<p>foo</p><p>[]bar</p>\": execCommand(\"defaultparagraphseparator\", false, \"div\") return value":true, >- "[[\"defaultparagraphseparator\",\"div\"],[\"delete\",\"\"]] \"<p>foo</p><p>[]bar</p>\" queryCommandIndeterm(\"defaultparagraphseparator\") before":true, >- "[[\"defaultparagraphseparator\",\"div\"],[\"delete\",\"\"]] \"<p>foo</p><p>[]bar</p>\" queryCommandState(\"defaultparagraphseparator\") before":true, > "[[\"defaultparagraphseparator\",\"div\"],[\"delete\",\"\"]] \"<p>foo</p><p>[]bar</p>\" queryCommandValue(\"defaultparagraphseparator\") before":true, >- "[[\"defaultparagraphseparator\",\"div\"],[\"delete\",\"\"]] \"<p>foo</p><p>[]bar</p>\" queryCommandIndeterm(\"defaultparagraphseparator\") after":true, >- "[[\"defaultparagraphseparator\",\"div\"],[\"delete\",\"\"]] \"<p>foo</p><p>[]bar</p>\" queryCommandState(\"defaultparagraphseparator\") after":true, >// 27563 lines removed from diff >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"foo<sub><font size=3>[bar</font></sub>baz]\" queryCommandIndeterm(\"inserttext\") after":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"foo<sub><font size=3>[bar</font></sub>baz]\" queryCommandState(\"inserttext\") after":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"foo<sub><font size=3>[bar</font></sub>baz]\" queryCommandValue(\"inserttext\") after":true, > "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"foo<font size=3><sub>[bar</sub></font>baz]\": execCommand(\"inserttext\", false, \"a\") return value":true, > "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"foo<font size=3><sub>[bar</sub></font>baz]\" compare innerHTML":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"foo<font size=3><sub>[bar</sub></font>baz]\" queryCommandIndeterm(\"inserttext\") before":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"foo<font size=3><sub>[bar</sub></font>baz]\" queryCommandState(\"inserttext\") before":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"foo<font size=3><sub>[bar</sub></font>baz]\" queryCommandValue(\"inserttext\") before":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"foo<font size=3><sub>[bar</sub></font>baz]\" queryCommandIndeterm(\"inserttext\") after":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"foo<font size=3><sub>[bar</sub></font>baz]\" queryCommandState(\"inserttext\") after":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"foo<font size=3><sub>[bar</sub></font>baz]\" queryCommandValue(\"inserttext\") after":true, > "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"<blockquote><font color=blue>[foo]</font></blockquote>\": execCommand(\"inserttext\", false, \"a\") return value":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"<blockquote><font color=blue>[foo]</font></blockquote>\" compare innerHTML":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"<blockquote><font color=blue>[foo]</font></blockquote>\" queryCommandIndeterm(\"inserttext\") before":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"<blockquote><font color=blue>[foo]</font></blockquote>\" queryCommandState(\"inserttext\") before":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"<blockquote><font color=blue>[foo]</font></blockquote>\" queryCommandValue(\"inserttext\") before":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"<blockquote><font color=blue>[foo]</font></blockquote>\" queryCommandIndeterm(\"inserttext\") after":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"<blockquote><font color=blue>[foo]</font></blockquote>\" queryCommandState(\"inserttext\") after":true, >- "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"<blockquote><font color=blue>[foo]</font></blockquote>\" queryCommandValue(\"inserttext\") after":true >+ "[[\"delete\",\"\"],[\"inserttext\",\"a\"]] \"<blockquote><font color=blue>[foo]</font></blockquote>\" compare innerHTML":true > } >diff --git a/editor/libeditor/base/tests/test_bug408231.html b/editor/libeditor/base/tests/test_bug408231.html >--- a/editor/libeditor/base/tests/test_bug408231.html >+++ b/editor/libeditor/base/tests/test_bug408231.html >@@ -91,17 +91,17 @@ https://bugzilla.mozilla.org/show_bug.cg > ["selectall", "false"], > ["strikethrough", "false"], > ["styleWithCSS", "false"], > ["subscript", "false"], > ["superscript", "false"], > ["underline", "false"], > ["undo", "false"], > ["unlink", "false"], >- ["not-a-command", "NS_ERROR_NOT_IMPLEMENTED"] >+ ["not-a-command", "false"] > ]; > > var commandStateResults = [ > ["contentReadOnly", "false"], > ["copy", "false"], > ["createlink", "false"], > ["cut", "false"], > ["decreasefontsize", "false"], >@@ -131,17 +131,17 @@ https://bugzilla.mozilla.org/show_bug.cg > ["selectall", "false"], > ["strikethrough", "false"], > ["styleWithCSS", "false"], > ["subscript", "false"], > ["superscript", "false"], > ["underline", "false"], > ["undo", "false"], > ["unlink", "false"], >- ["not-a-command", "NS_ERROR_NOT_IMPLEMENTED"] >+ ["not-a-command", "false"] > ]; > > var commandValueResults = [ > ["contentReadOnly", ""], > ["copy", ""], > ["createlink", ""], > ["cut", ""], > ["decreasefontsize", ""], >@@ -171,17 +171,17 @@ https://bugzilla.mozilla.org/show_bug.cg > ["selectall", ""], > ["strikethrough", ""], > ["styleWithCSS", ""], > ["subscript", ""], > ["superscript", ""], > ["underline", ""], > ["undo", ""], > ["unlink", ""], >- ["not-a-command", "NS_ERROR_NOT_IMPLEMENTED"], >+ ["not-a-command", ""], > ]; > > > function callQueryCommandEnabled(cmdName) { > var result; > try { > result = '' + document.queryCommandEnabled( cmdName ); > } catch( error ) { >diff --git a/editor/libeditor/html/tests/browserscope/lib/richtext2/currentStatus.js b/editor/libeditor/html/tests/browserscope/lib/richtext2/currentStatus.js >--- a/editor/libeditor/html/tests/browserscope/lib/richtext2/currentStatus.js >+++ b/editor/libeditor/html/tests/browserscope/lib/richtext2/currentStatus.js >@@ -409,37 +409,16 @@ const knownFailures = { > "QE-Proposed-OUTDENT_TEXT-1-body": true, > "QE-Proposed-OUTDENT_TEXT-1-div": true, > "QE-Proposed-CREATEBOOKMARK_TEXT-1-dM": true, > "QE-Proposed-CREATEBOOKMARK_TEXT-1-body": true, > "QE-Proposed-CREATEBOOKMARK_TEXT-1-div": true, > "QE-Proposed-UNBOOKMARK_TEXT-1-dM": true, > "QE-Proposed-UNBOOKMARK_TEXT-1-body": true, > "QE-Proposed-UNBOOKMARK_TEXT-1-div": true, >- "QI-Proposed-UNSELECT_TEXT-1-dM": true, >- "QI-Proposed-UNSELECT_TEXT-1-body": true, >- "QI-Proposed-UNSELECT_TEXT-1-div": true, >- "QI-Proposed-INSERTLINEBREAK_TEXT-1-dM": true, >- "QI-Proposed-INSERTLINEBREAK_TEXT-1-body": true, >- "QI-Proposed-INSERTLINEBREAK_TEXT-1-div": true, >- "QI-Proposed-INSERTTEXT_TEXT-1-dM": true, >- "QI-Proposed-INSERTTEXT_TEXT-1-body": true, >- "QI-Proposed-INSERTTEXT_TEXT-1-div": true, >- "QI-Proposed-FORWARDDELETE_TEXT-1-dM": true, >- "QI-Proposed-FORWARDDELETE_TEXT-1-body": true, >- "QI-Proposed-FORWARDDELETE_TEXT-1-div": true, >- "QI-Proposed-CREATEBOOKMARK_TEXT-1-dM": true, >- "QI-Proposed-CREATEBOOKMARK_TEXT-1-body": true, >- "QI-Proposed-CREATEBOOKMARK_TEXT-1-div": true, >- "QI-Proposed-UNBOOKMARK_TEXT-1-dM": true, >- "QI-Proposed-UNBOOKMARK_TEXT-1-body": true, >- "QI-Proposed-UNBOOKMARK_TEXT-1-div": true, >- "QI-Proposed-garbage-1_TEXT-1-dM": true, >- "QI-Proposed-garbage-1_TEXT-1-body": true, >- "QI-Proposed-garbage-1_TEXT-1-div": true, > "QS-Proposed-SUB_SPAN.sub-1-SI-dM": true, > "QS-Proposed-SUB_SPAN.sub-1-SI-body": true, > "QS-Proposed-SUB_SPAN.sub-1-SI-div": true, > "QS-Proposed-SUB_MYSUB-1-SI-dM": true, > "QS-Proposed-SUB_MYSUB-1-SI-body": true, > "QS-Proposed-SUB_MYSUB-1-SI-div": true, > "QS-Proposed-SUP_SPAN.sup-1-SI-dM": true, > "QS-Proposed-SUP_SPAN.sup-1-SI-body": true,
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Flags:
ehsan.akhgari
: review+
Actions:
View
|
Diff
|
Review
Attachments on
bug 742240
:
612140
|
615125
|
615151
| 625070