mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-29 07:42:04 +00:00
Bug 748307 part 4 - Clean up ExecCommand and QueryCommand*; r=ehsan
This commit is contained in:
parent
3163c8b65f
commit
fcfd499bd9
@ -3040,10 +3040,10 @@ nsHTMLDocument::DoClipboardSecurityCheck(bool aPaste)
|
||||
/* boolean execCommand(in DOMString commandID, in boolean doShowUI,
|
||||
in DOMString value); */
|
||||
NS_IMETHODIMP
|
||||
nsHTMLDocument::ExecCommand(const nsAString & commandID,
|
||||
nsHTMLDocument::ExecCommand(const nsAString& commandID,
|
||||
bool doShowUI,
|
||||
const nsAString & value,
|
||||
bool *_retval)
|
||||
const nsAString& value,
|
||||
bool* _retval)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(_retval);
|
||||
|
||||
@ -3062,40 +3062,39 @@ nsHTMLDocument::ExecCommand(const nsAString & commandID,
|
||||
}
|
||||
|
||||
// if editing is not on, bail
|
||||
if (!IsEditingOnAfterFlush())
|
||||
return NS_ERROR_FAILURE;
|
||||
NS_ENSURE_TRUE(IsEditingOnAfterFlush(), NS_ERROR_FAILURE);
|
||||
|
||||
// if they are requesting UI from us, let's fail since we have no UI
|
||||
if (doShowUI)
|
||||
if (doShowUI) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (commandID.LowerCaseEqualsLiteral("gethtml")) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
if (commandID.LowerCaseEqualsLiteral("gethtml"))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
if (commandID.LowerCaseEqualsLiteral("cut") ||
|
||||
(commandID.LowerCaseEqualsLiteral("copy"))) {
|
||||
commandID.LowerCaseEqualsLiteral("copy")) {
|
||||
rv = DoClipboardSecurityCheck(false);
|
||||
} else if (commandID.LowerCaseEqualsLiteral("paste")) {
|
||||
rv = DoClipboardSecurityCheck(true);
|
||||
}
|
||||
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// 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;
|
||||
NS_ENSURE_TRUE(cmdMgr, NS_ERROR_FAILURE);
|
||||
|
||||
nsIDOMWindow *window = GetWindow();
|
||||
if (!window)
|
||||
return NS_ERROR_FAILURE;
|
||||
nsIDOMWindow* window = GetWindow();
|
||||
NS_ENSURE_TRUE(window, NS_ERROR_FAILURE);
|
||||
|
||||
if ((cmdToDispatch.EqualsLiteral("cmd_paragraphState") ||
|
||||
cmdToDispatch.EqualsLiteral("cmd_fontSize")) && paramStr.IsEmpty()) {
|
||||
cmdToDispatch.EqualsLiteral("cmd_fontSize")) &&
|
||||
paramStr.IsEmpty()) {
|
||||
// Invalid value
|
||||
return NS_OK;
|
||||
}
|
||||
@ -3106,31 +3105,30 @@ nsHTMLDocument::ExecCommand(const nsAString & commandID,
|
||||
// we have a command that requires a parameter, create params
|
||||
nsCOMPtr<nsICommandParams> cmdParams = do_CreateInstance(
|
||||
NS_COMMAND_PARAMS_CONTRACTID, &rv);
|
||||
if (!cmdParams)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
NS_ENSURE_TRUE(cmdParams, NS_ERROR_OUT_OF_MEMORY);
|
||||
|
||||
if (isBool)
|
||||
if (isBool) {
|
||||
rv = cmdParams->SetBooleanValue("state_attribute", boolVal);
|
||||
else if (cmdToDispatch.Equals("cmd_fontFace"))
|
||||
} else if (cmdToDispatch.EqualsLiteral("cmd_fontFace")) {
|
||||
rv = cmdParams->SetStringValue("state_attribute", value);
|
||||
else if (cmdToDispatch.Equals("cmd_insertHTML"))
|
||||
} else if (cmdToDispatch.EqualsLiteral("cmd_insertHTML")) {
|
||||
rv = cmdParams->SetStringValue("state_data", value);
|
||||
else
|
||||
} else {
|
||||
rv = cmdParams->SetCStringValue("state_attribute", paramStr.get());
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = cmdMgr->DoCommand(cmdToDispatch.get(), cmdParams, window);
|
||||
}
|
||||
|
||||
*_retval = NS_SUCCEEDED(rv);
|
||||
|
||||
return rv;
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* boolean queryCommandEnabled(in DOMString commandID); */
|
||||
NS_IMETHODIMP
|
||||
nsHTMLDocument::QueryCommandEnabled(const nsAString & commandID,
|
||||
bool *_retval)
|
||||
nsHTMLDocument::QueryCommandEnabled(const nsAString& commandID,
|
||||
bool* _retval)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(_retval);
|
||||
*_retval = false;
|
||||
@ -3142,18 +3140,15 @@ nsHTMLDocument::QueryCommandEnabled(const nsAString & commandID,
|
||||
}
|
||||
|
||||
// if editing is not on, bail
|
||||
if (!IsEditingOnAfterFlush())
|
||||
return NS_ERROR_FAILURE;
|
||||
NS_ENSURE_TRUE(IsEditingOnAfterFlush(), 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;
|
||||
NS_ENSURE_TRUE(cmdMgr, NS_ERROR_FAILURE);
|
||||
|
||||
nsIDOMWindow *window = GetWindow();
|
||||
if (!window)
|
||||
return NS_ERROR_FAILURE;
|
||||
nsIDOMWindow* window = GetWindow();
|
||||
NS_ENSURE_TRUE(window, NS_ERROR_FAILURE);
|
||||
|
||||
return cmdMgr->IsCommandEnabled(cmdToDispatch.get(), window, _retval);
|
||||
}
|
||||
@ -3173,18 +3168,15 @@ nsHTMLDocument::QueryCommandIndeterm(const nsAString & commandID,
|
||||
}
|
||||
|
||||
// if editing is not on, bail
|
||||
if (!IsEditingOnAfterFlush())
|
||||
return NS_ERROR_FAILURE;
|
||||
NS_ENSURE_TRUE(IsEditingOnAfterFlush(), 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;
|
||||
NS_ENSURE_TRUE(cmdMgr, NS_ERROR_FAILURE);
|
||||
|
||||
nsIDOMWindow *window = GetWindow();
|
||||
if (!window)
|
||||
return NS_ERROR_FAILURE;
|
||||
nsIDOMWindow* window = GetWindow();
|
||||
NS_ENSURE_TRUE(window, NS_ERROR_FAILURE);
|
||||
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsICommandParams> cmdParams = do_CreateInstance(
|
||||
@ -3192,8 +3184,7 @@ nsHTMLDocument::QueryCommandIndeterm(const nsAString & commandID,
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = cmdMgr->GetCommandState(cmdToDispatch.get(), window, cmdParams);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// If command does not have a state_mixed value, this call fails and sets
|
||||
// *_retval to false. This is fine -- we want to return false in that case
|
||||
@ -3219,18 +3210,15 @@ nsHTMLDocument::QueryCommandState(const nsAString & commandID, bool *_retval)
|
||||
}
|
||||
|
||||
// if editing is not on, bail
|
||||
if (!IsEditingOnAfterFlush())
|
||||
return NS_ERROR_FAILURE;
|
||||
NS_ENSURE_TRUE(IsEditingOnAfterFlush(), 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;
|
||||
NS_ENSURE_TRUE(cmdMgr, NS_ERROR_FAILURE);
|
||||
|
||||
nsIDOMWindow *window = GetWindow();
|
||||
if (!window)
|
||||
return NS_ERROR_FAILURE;
|
||||
nsIDOMWindow* window = GetWindow();
|
||||
NS_ENSURE_TRUE(window, NS_ERROR_FAILURE);
|
||||
|
||||
if (commandID.LowerCaseEqualsLiteral("usecss")) {
|
||||
// Per spec, state is supported for styleWithCSS but not useCSS, so we just
|
||||
@ -3242,12 +3230,10 @@ nsHTMLDocument::QueryCommandState(const nsAString & commandID, bool *_retval)
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsICommandParams> cmdParams = do_CreateInstance(
|
||||
NS_COMMAND_PARAMS_CONTRACTID, &rv);
|
||||
if (!cmdParams)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
NS_ENSURE_TRUE(cmdParams, NS_ERROR_OUT_OF_MEMORY);
|
||||
|
||||
rv = cmdMgr->GetCommandState(cmdToDispatch.get(), window, cmdParams);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// handle alignment as a special case (possibly other commands too?)
|
||||
// Alignment is special because the external api is individual
|
||||
@ -3255,15 +3241,17 @@ nsHTMLDocument::QueryCommandState(const nsAString & commandID, bool *_retval)
|
||||
// parameters. When getting the state of this command, we need to
|
||||
// return the boolean for this particular alignment rather than the
|
||||
// string of 'which alignment is this?'
|
||||
if (cmdToDispatch.Equals("cmd_align")) {
|
||||
if (cmdToDispatch.EqualsLiteral("cmd_align")) {
|
||||
char * actualAlignmentType = nsnull;
|
||||
rv = cmdParams->GetCStringValue("state_attribute", &actualAlignmentType);
|
||||
if (NS_SUCCEEDED(rv) && actualAlignmentType && actualAlignmentType[0]) {
|
||||
*_retval = paramToCheck.Equals(actualAlignmentType);
|
||||
}
|
||||
if (actualAlignmentType)
|
||||
if (actualAlignmentType) {
|
||||
nsMemory::Free(actualAlignmentType);
|
||||
return rv;
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// If command does not have a state_all value, this call fails and sets
|
||||
@ -3301,46 +3289,41 @@ nsHTMLDocument::QueryCommandValue(const nsAString & commandID,
|
||||
}
|
||||
|
||||
// if editing is not on, bail
|
||||
if (!IsEditingOnAfterFlush())
|
||||
return NS_ERROR_FAILURE;
|
||||
NS_ENSURE_TRUE(IsEditingOnAfterFlush(), 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;
|
||||
NS_ENSURE_TRUE(cmdMgr, NS_ERROR_FAILURE);
|
||||
|
||||
nsIDOMWindow *window = GetWindow();
|
||||
if (!window)
|
||||
return NS_ERROR_FAILURE;
|
||||
nsIDOMWindow* window = GetWindow();
|
||||
NS_ENSURE_TRUE(window, NS_ERROR_FAILURE);
|
||||
|
||||
// create params
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsICommandParams> cmdParams = do_CreateInstance(
|
||||
NS_COMMAND_PARAMS_CONTRACTID, &rv);
|
||||
if (!cmdParams)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
NS_ENSURE_TRUE(cmdParams, NS_ERROR_OUT_OF_MEMORY);
|
||||
|
||||
// this is a special command since we are calling "DoCommand rather than
|
||||
// this is a special command since we are calling DoCommand rather than
|
||||
// GetCommandState like the other commands
|
||||
if (cmdToDispatch.Equals("cmd_getContents"))
|
||||
{
|
||||
if (cmdToDispatch.EqualsLiteral("cmd_getContents")) {
|
||||
rv = cmdParams->SetBooleanValue("selection_only", true);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = cmdParams->SetCStringValue("format", "text/html");
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = cmdMgr->DoCommand(cmdToDispatch.get(), cmdParams, window);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
return cmdParams->GetStringValue("result", _retval);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = cmdParams->GetStringValue("result", _retval);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
rv = cmdParams->SetCStringValue("state_attribute", paramStr.get());
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = cmdMgr->GetCommandState(cmdToDispatch.get(), window, cmdParams);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// If command does not have a state_attribute value, this call fails, and
|
||||
// _retval will wind up being the empty string. This is fine -- we want to
|
||||
|
Loading…
Reference in New Issue
Block a user