Bug 1053779 part 1 - Clean up nsEditor::CreateHTMLContent; r=ehsan

This commit is contained in:
Aryeh Gregor 2014-08-13 14:53:33 +03:00
parent 5c83a43d29
commit 9582368fce
7 changed files with 29 additions and 35 deletions

View File

@ -66,9 +66,8 @@ NS_IMETHODIMP CreateElementTxn::DoTransaction(void)
NS_ASSERTION(mEditor && mParent, "bad state");
NS_ENSURE_TRUE(mEditor && mParent, NS_ERROR_NOT_INITIALIZED);
ErrorResult rv;
nsCOMPtr<Element> newContent = mEditor->CreateHTMLContent(mTag, rv);
NS_ENSURE_SUCCESS(rv.ErrorCode(), rv.ErrorCode());
nsCOMPtr<Element> newContent =
mEditor->CreateHTMLContent(nsCOMPtr<nsIAtom>(do_GetAtom(mTag)));
NS_ENSURE_STATE(newContent);
mNewNode = newContent->AsDOMNode();

View File

@ -148,9 +148,9 @@ nsHTMLEditor::CreateAnonymousElement(const nsAString & aTag, nsIDOMNode * aPare
NS_ENSURE_TRUE(ps, NS_ERROR_NOT_INITIALIZED);
// Create a new node through the element factory
ErrorResult rv;
nsCOMPtr<Element> newContent = CreateHTMLContent(aTag, rv);
NS_ENSURE_SUCCESS(rv.ErrorCode(), rv.ErrorCode());
nsCOMPtr<Element> newContent =
CreateHTMLContent(nsCOMPtr<nsIAtom>(do_GetAtom(aTag)));
NS_ENSURE_STATE(newContent);
nsCOMPtr<nsIDOMElement> newElement = do_QueryInterface(newContent);
NS_ENSURE_TRUE(newElement, NS_ERROR_FAILURE);

View File

@ -2575,13 +2575,14 @@ nsHTMLEditor::CreateElementWithDefaults(const nsAString& aTagName)
// the transaction system
// New call to use instead to get proper HTML element, bug 39919
ErrorResult rv;
nsCOMPtr<dom::Element> newElement = CreateHTMLContent(realTagName, rv);
if (rv.Failed() || !newElement) {
nsCOMPtr<Element> newElement =
CreateHTMLContent(nsCOMPtr<nsIAtom>(do_GetAtom(realTagName)));
if (!newElement) {
return nullptr;
}
// Mark the new element dirty, so it will be formatted
ErrorResult rv;
newElement->SetAttribute(NS_LITERAL_STRING("_moz_dirty"), EmptyString(), rv);
// Set default values for new elements

View File

@ -312,10 +312,9 @@ nsHTMLEditor::IsSimpleModifiableNode(nsIContent* aContent,
// "text-decoration: underline", which decomposes into four different text-*
// properties. So for now, we just create a span, add the desired style, and
// see if it matches.
ErrorResult rv;
nsCOMPtr<Element> newSpan = CreateHTMLContent(NS_LITERAL_STRING("span"), rv);
NS_ASSERTION(!rv.Failed(), "CreateHTMLContent failed");
NS_ENSURE_SUCCESS(rv.ErrorCode(), false);
nsCOMPtr<Element> newSpan = CreateHTMLContent(nsGkAtoms::span);
NS_ASSERTION(newSpan, "CreateHTMLContent failed");
NS_ENSURE_TRUE(newSpan, false);
mHTMLCSSUtils->SetCSSEquivalentToHTMLStyle(newSpan, aProperty,
aAttribute, aValue,
/*suppress transaction*/ true);

View File

@ -1566,9 +1566,9 @@ nsEditor::ReplaceContainer(nsINode* aNode,
int32_t offset = parent->IndexOf(aNode);
// create new container
ErrorResult rv;
*outNode = CreateHTMLContent(aNodeType, rv).take();
NS_ENSURE_SUCCESS(rv.ErrorCode(), rv.ErrorCode());
*outNode =
CreateHTMLContent(nsCOMPtr<nsIAtom>(do_GetAtom(aNodeType))).take();
NS_ENSURE_STATE(*outNode);
nsCOMPtr<nsIDOMElement> elem = do_QueryInterface(*outNode);
@ -1690,9 +1690,9 @@ nsEditor::InsertContainerAbove(nsIContent* aNode,
int32_t offset = parent->IndexOf(aNode);
// create new container
ErrorResult rv;
nsCOMPtr<Element> newContent = CreateHTMLContent(aNodeType, rv);
NS_ENSURE_SUCCESS(rv.ErrorCode(), rv.ErrorCode());
nsCOMPtr<Element> newContent =
CreateHTMLContent(nsCOMPtr<nsIAtom>(do_GetAtom(aNodeType)));
NS_ENSURE_STATE(newContent);
// set attribute if needed
nsresult res;
@ -4767,29 +4767,27 @@ nsresult nsEditor::ClearSelection()
}
already_AddRefed<Element>
nsEditor::CreateHTMLContent(const nsAString& aTag, ErrorResult& rv)
nsEditor::CreateHTMLContent(nsIAtom* aTag)
{
MOZ_ASSERT(aTag);
nsCOMPtr<nsIDocument> doc = GetDocument();
if (!doc) {
rv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
// XXX Wallpaper over editor bug (editor tries to create elements with an
// empty nodename).
if (aTag.IsEmpty()) {
if (aTag == nsGkAtoms::_empty) {
NS_ERROR("Don't pass an empty tag to nsEditor::CreateHTMLContent, "
"check caller.");
rv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
nsCOMPtr<nsIContent> ret;
nsresult res = doc->CreateElem(aTag, nullptr, kNameSpaceID_XHTML,
getter_AddRefs(ret));
if (NS_FAILED(res)) {
rv.Throw(res);
}
nsresult res = doc->CreateElem(nsDependentAtomString(aTag), nullptr,
kNameSpaceID_XHTML, getter_AddRefs(ret));
NS_ENSURE_SUCCESS(res, nullptr);
return dont_AddRef(ret.forget().take()->AsElement());
}

View File

@ -255,10 +255,9 @@ public:
/* Method to replace certain CreateElementNS() calls.
Arguments:
nsString& aTag - tag you want
nsIAtom* aTag - tag you want
*/
already_AddRefed<mozilla::dom::Element>
CreateHTMLContent(const nsAString& aTag, mozilla::ErrorResult& rv);
already_AddRefed<mozilla::dom::Element> CreateHTMLContent(nsIAtom* aTag);
// IME event handlers
virtual nsresult BeginIMEComposition(mozilla::WidgetCompositionEvent* aEvent);

View File

@ -1171,10 +1171,8 @@ nsTextEditRules::CreateBogusNodeIfNeeded(nsISelection *aSelection)
}
// Create a br.
ErrorResult res;
nsCOMPtr<Element> newContent =
mEditor->CreateHTMLContent(NS_LITERAL_STRING("br"), res);
NS_ENSURE_SUCCESS(res.ErrorCode(), res.ErrorCode());
nsCOMPtr<Element> newContent = mEditor->CreateHTMLContent(nsGkAtoms::br);
NS_ENSURE_STATE(newContent);
// set mBogusNode to be the newly created <br>
mBogusNode = do_QueryInterface(newContent);