diff --git a/editor/libeditor/HTMLEditor.cpp b/editor/libeditor/HTMLEditor.cpp
index 5dca4574fbea..a09841dade7a 100644
--- a/editor/libeditor/HTMLEditor.cpp
+++ b/editor/libeditor/HTMLEditor.cpp
@@ -17,7 +17,6 @@
#include "HTMLEditRules.h"
#include "HTMLEditUtils.h"
#include "HTMLURIRefObject.h"
-#include "SetDocumentTitleTransaction.h"
#include "StyleSheetTransactions.h"
#include "TextEditUtils.h"
#include "TypeInState.h"
@@ -811,22 +810,6 @@ HTMLEditor::IsBlockNode(nsINode* aNode)
return aNode && NodeIsBlockStatic(aNode);
}
-// Non-static version for the nsIEditor interface and JavaScript
-NS_IMETHODIMP
-HTMLEditor::SetDocumentTitle(const nsAString& aTitle)
-{
- RefPtr transaction =
- new SetDocumentTitleTransaction();
- NS_ENSURE_TRUE(transaction, NS_ERROR_OUT_OF_MEMORY);
-
- nsresult rv = transaction->Init(this, &aTitle);
- NS_ENSURE_SUCCESS(rv, rv);
-
- //Don't let Rules System change the selection
- AutoTransactionsConserveSelection dontChangeSelection(this);
- return EditorBase::DoTransaction(transaction);
-}
-
/**
* GetBlockNodeParent returns enclosing block level ancestor, if any.
*/
diff --git a/editor/libeditor/SetDocumentTitleTransaction.cpp b/editor/libeditor/SetDocumentTitleTransaction.cpp
deleted file mode 100644
index 2b3c8c97ff0f..000000000000
--- a/editor/libeditor/SetDocumentTitleTransaction.cpp
+++ /dev/null
@@ -1,230 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "SetDocumentTitleTransaction.h"
-#include "mozilla/dom/Element.h" // for Element
-#include "nsAString.h"
-#include "nsCOMPtr.h" // for nsCOMPtr, getter_AddRefs, etc.
-#include "nsDebug.h" // for NS_ENSURE_SUCCESS, etc.
-#include "nsError.h" // for NS_OK, NS_ERROR_FAILURE, etc.
-#include "nsIDOMCharacterData.h" // for nsIDOMCharacterData
-#include "nsIDOMDocument.h" // for nsIDOMDocument
-#include "nsIDOMElement.h" // for nsIDOMElement
-#include "nsIDOMNode.h" // for nsIDOMNode
-#include "nsIDOMNodeList.h" // for nsIDOMNodeList
-#include "nsIDOMText.h" // for nsIDOMText
-#include "nsIDocument.h" // for nsIDocument
-#include "nsIEditor.h" // for nsIEditor
-#include "nsIHTMLEditor.h" // for nsIHTMLEditor
-#include "nsLiteralString.h" // for NS_LITERAL_STRING
-#include "nsTextNode.h" // for nsTextNode
-#include "nsQueryObject.h" // for do_QueryObject
-
-namespace mozilla {
-
-// Note that aEditor is not refcounted.
-SetDocumentTitleTransaction::SetDocumentTitleTransaction()
- : mEditor(nullptr)
- , mIsTransient(false)
-{
-}
-
-NS_IMETHODIMP
-SetDocumentTitleTransaction::Init(nsIHTMLEditor* aEditor,
- const nsAString* aValue)
-
-{
- NS_ASSERTION(aEditor && aValue, "null args");
- if (!aEditor || !aValue) {
- return NS_ERROR_NULL_POINTER;
- }
-
- mEditor = aEditor;
- mValue = *aValue;
-
- return NS_OK;
-}
-
-NS_IMETHODIMP
-SetDocumentTitleTransaction::DoTransaction()
-{
- return SetDomTitle(mValue);
-}
-
-NS_IMETHODIMP
-SetDocumentTitleTransaction::UndoTransaction()
-{
- // No extra work required; the DOM changes alone are enough
- return NS_OK;
-}
-
-NS_IMETHODIMP
-SetDocumentTitleTransaction::RedoTransaction()
-{
- // No extra work required; the DOM changes alone are enough
- return NS_OK;
-}
-
-nsresult
-SetDocumentTitleTransaction::SetDomTitle(const nsAString& aTitle)
-{
- nsCOMPtr editor = do_QueryInterface(mEditor);
- if (NS_WARN_IF(!editor)) {
- return NS_ERROR_FAILURE;
- }
-
- nsCOMPtr domDoc;
- nsresult rv = editor->GetDocument(getter_AddRefs(domDoc));
- if (NS_WARN_IF(!domDoc)) {
- return NS_ERROR_FAILURE;
- }
-
- nsCOMPtr titleList;
- rv = domDoc->GetElementsByTagName(NS_LITERAL_STRING("title"),
- getter_AddRefs(titleList));
- if (NS_WARN_IF(NS_FAILED(rv))) {
- return rv;
- }
-
- // First assume we will NOT really do anything
- // (transaction will not be pushed on stack)
- mIsTransient = true;
-
- nsCOMPtr titleNode;
- if(titleList) {
- rv = titleList->Item(0, getter_AddRefs(titleNode));
- if (NS_WARN_IF(NS_FAILED(rv))) {
- return rv;
- }
-
- if (titleNode) {
- // Delete existing child textnode of title node
- // (Note: all contents under a TITLE node are always in a single text node)
- nsCOMPtr child;
- rv = titleNode->GetFirstChild(getter_AddRefs(child));
- if (NS_FAILED(rv)) {
- return rv;
- }
-
- if(child) {
- // Save current text as the undo value
- nsCOMPtr textNode = do_QueryInterface(child);
- if(textNode) {
- textNode->GetData(mUndoValue);
-
- // If title text is identical to what already exists,
- // quit now (mIsTransient is now TRUE)
- if (mUndoValue == aTitle) {
- return NS_OK;
- }
- }
- rv = editor->DeleteNode(child);
- if (NS_WARN_IF(NS_FAILED(rv))) {
- return rv;
- }
- }
- }
- }
-
- // We didn't return above, thus we really will be changing the title
- mIsTransient = false;
-
- // Get the node, create a and insert it under the HEAD
- nsCOMPtr document = do_QueryInterface(domDoc);
- if (NS_WARN_IF(!document)) {
- return NS_ERROR_UNEXPECTED;
- }
-
- RefPtr headElement = document->GetHeadElement();
- if (NS_WARN_IF(!headElement)) {
- return NS_ERROR_UNEXPECTED;
- }
-
- bool newTitleNode = false;
- uint32_t newTitleIndex = 0;
-
- if (!titleNode) {
- // Didn't find one above: Create a new one
- nsCOMPtrtitleElement;
- rv = domDoc->CreateElement(NS_LITERAL_STRING("title"),
- getter_AddRefs(titleElement));
- if (NS_WARN_IF(NS_FAILED(rv))) {
- return rv;
- }
- if (NS_WARN_IF(!titleElement)) {
- return NS_ERROR_FAILURE;
- }
-
- titleNode = do_QueryInterface(titleElement);
- newTitleNode = true;
-
- // Get index so we append new title node after all existing HEAD children.
- newTitleIndex = headElement->GetChildCount();
- }
-
- // Append a text node under the TITLE only if the title text isn't empty.
- if (titleNode && !aTitle.IsEmpty()) {
- RefPtr textNode = document->CreateTextNode(aTitle);
-
- if (newTitleNode) {
- // Not undoable: We will insert newTitleNode below
- nsCOMPtr title = do_QueryInterface(titleNode);
- MOZ_ASSERT(title);
-
- ErrorResult result;
- title->AppendChild(*textNode, result);
- if (NS_WARN_IF(result.Failed())) {
- return result.StealNSResult();
- }
- } else {
- // This is an undoable transaction
- nsCOMPtr newNode = do_QueryObject(textNode);
- if (NS_WARN_IF(!newNode)) {
- return NS_ERROR_FAILURE;
- }
-
- rv = editor->InsertNode(newNode, titleNode, 0);
- if (NS_WARN_IF(NS_FAILED(rv))) {
- return rv;
- }
- }
- // Calling AppendChild() or InsertNode() could cause removing the head
- // element. So, let's mark it dirty.
- headElement = nullptr;
- }
-
- if (newTitleNode) {
- if (!headElement) {
- headElement = document->GetHeadElement();
- if (NS_WARN_IF(!headElement)) {
- // XXX Can we return NS_OK when there is no head element?
- return NS_ERROR_UNEXPECTED;
- }
- }
- // Undoable transaction to insert title+text together
- rv = editor->InsertNode(titleNode, headElement->AsDOMNode(), newTitleIndex);
- }
- return rv;
-}
-
-NS_IMETHODIMP
-SetDocumentTitleTransaction::GetTxnDescription(nsAString& aString)
-{
- aString.AssignLiteral("SetDocumentTitleTransaction: ");
- aString += mValue;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-SetDocumentTitleTransaction::GetIsTransient(bool* aIsTransient)
-{
- if (NS_WARN_IF(!aIsTransient)) {
- return NS_ERROR_NULL_POINTER;
- }
- *aIsTransient = mIsTransient;
- return NS_OK;
-}
-
-} // namespace mozilla
diff --git a/editor/libeditor/SetDocumentTitleTransaction.h b/editor/libeditor/SetDocumentTitleTransaction.h
deleted file mode 100644
index 0f17fe8d2319..000000000000
--- a/editor/libeditor/SetDocumentTitleTransaction.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef SetDocumentTitleTransaction_h
-#define SetDocumentTitleTransaction_h
-
-#include "mozilla/EditTransactionBase.h" // for EditTransactionBase, etc.
-#include "nsString.h" // for nsString
-#include "nscore.h" // for NS_IMETHOD, nsAString, etc.
-
-class nsIHTMLEditor;
-
-namespace mozilla {
-
-/**
- * A transaction that changes the document's title,
- * which is a text node under the tag in a page's section
- * provides default concrete behavior for all nsITransaction methods.
- */
-class SetDocumentTitleTransaction final : public EditTransactionBase
-{
-public:
- /**
- * Initialize the transaction.
- * @param aEditor The object providing core editing operations.
- * @param aValue The new value for document title.
- */
- NS_IMETHOD Init(nsIHTMLEditor* aEditor,
- const nsAString* aValue);
- SetDocumentTitleTransaction();
-
-private:
- nsresult SetDomTitle(const nsAString& aTitle);
-
-public:
- NS_DECL_EDITTRANSACTIONBASE
-
- NS_IMETHOD RedoTransaction() override;
- NS_IMETHOD GetIsTransient(bool *aIsTransient) override;
-
-protected:
-
- // The editor that created this transaction.
- nsIHTMLEditor* mEditor;
-
- // The new title string.
- nsString mValue;
-
- // The previous title string to use for undo.
- nsString mUndoValue;
-
- // Set true if we dont' really change the title during Do().
- bool mIsTransient;
-};
-
-} // namespace mozilla
-
-#endif // #ifndef SetDocumentTitleTransaction_h
diff --git a/editor/libeditor/moz.build b/editor/libeditor/moz.build
index 998ef3d3937c..8e1bd6781e4d 100644
--- a/editor/libeditor/moz.build
+++ b/editor/libeditor/moz.build
@@ -64,7 +64,6 @@ UNIFIED_SOURCES += [
'JoinNodeTransaction.cpp',
'PlaceholderTransaction.cpp',
'SelectionState.cpp',
- 'SetDocumentTitleTransaction.cpp',
'SplitNodeTransaction.cpp',
'StyleSheetTransactions.cpp',
'TextEditor.cpp',
diff --git a/editor/libeditor/tests/chrome.ini b/editor/libeditor/tests/chrome.ini
index 98db30001427..20984d0c3f9f 100644
--- a/editor/libeditor/tests/chrome.ini
+++ b/editor/libeditor/tests/chrome.ini
@@ -9,6 +9,5 @@ support-files = green.png
[test_bug780908.xul]
[test_contenteditable_text_input_handling.html]
[test_htmleditor_keyevent_handling.html]
-[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
diff --git a/editor/libeditor/tests/test_set_document_title_transaction.html b/editor/libeditor/tests/test_set_document_title_transaction.html
deleted file mode 100644
index d745d4f135c0..000000000000
--- a/editor/libeditor/tests/test_set_document_title_transaction.html
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
- Test for SetDocumentTitleTransaction
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/editor/nsIHTMLEditor.idl b/editor/nsIHTMLEditor.idl
index 59f90961a919..3d2af68c82cb 100644
--- a/editor/nsIHTMLEditor.idl
+++ b/editor/nsIHTMLEditor.idl
@@ -236,11 +236,6 @@ interface nsIHTMLEditor : nsISupports
void insertElementAtSelection(in nsIDOMElement aElement,
in boolean aDeleteSelection);
- /**
- * Set the documents title.
- */
- void setDocumentTitle(in AString aTitle);
-
/**
* Set the BaseURL for the document to the current URL
* but only if the page doesn't have a tag