Bug 700538 part 2 - Make methods that return editing hosts return dom::Element* instead of nsIContent*; r=ehsan
--- a/content/base/public/nsIContent.h
+++ b/content/base/public/nsIContent.h
@@ -868,17 +868,17 @@ public:
*/
bool HasIndependentSelection();
/**
* If the content is a part of HTML editor, this returns editing
* host content. When the content is in designMode, this returns its body
* element. Also, when the content isn't editable, this returns null.
*/
- nsIContent* GetEditingHost();
+ mozilla::dom::Element* GetEditingHost();
/**
* Determing language. Look at the nearest ancestor element that has a lang
* attribute in the XML namespace or is an HTML/SVG element and has a lang in
* no namespace attribute.
*/
void GetLang(nsAString& aResult) const {
for (const nsIContent* content = this; content; content = content->GetParent()) {
--- a/content/base/src/nsContentAreaDragDrop.cpp
+++ b/content/base/src/nsContentAreaDragDrop.cpp
@@ -80,16 +80,17 @@
#include "nsIDocShellTreeItem.h"
#include "nsIWebBrowserPersist.h"
#include "nsEscape.h"
#include "nsContentUtils.h"
#include "nsIMIMEService.h"
#include "imgIContainer.h"
#include "imgIRequest.h"
#include "nsDOMDataTransfer.h"
+#include "mozilla/dom/Element.h"
class NS_STACK_CLASS DragDataProducer
{
public:
DragDataProducer(nsIDOMWindow* aWindow,
nsIContent* aTarget,
nsIContent* aSelectionTargetNode,
bool aIsAltKeyPressed);
--- a/content/base/src/nsGenericElement.cpp
+++ b/content/base/src/nsGenericElement.cpp
@@ -1547,36 +1547,36 @@ nsIContent::GetDesiredIMEState()
bool
nsIContent::HasIndependentSelection()
{
nsIFrame* frame = GetPrimaryFrame();
return (frame && frame->GetStateBits() & NS_FRAME_INDEPENDENT_SELECTION);
}
-nsIContent*
+dom::Element*
nsIContent::GetEditingHost()
{
// If this isn't editable, return NULL.
NS_ENSURE_TRUE(IsEditableInternal(), nsnull);
nsIDocument* doc = GetCurrentDoc();
NS_ENSURE_TRUE(doc, nsnull);
// If this is in designMode, we should return <body>
if (doc->HasFlag(NODE_IS_EDITABLE)) {
return doc->GetBodyElement();
}
nsIContent* content = this;
- for (nsIContent* parent = GetParent();
+ for (dom::Element* parent = GetElementParent();
parent && parent->HasFlag(NODE_IS_EDITABLE);
- parent = content->GetParent()) {
+ parent = content->GetElementParent()) {
content = parent;
}
- return content;
+ return content->AsElement();
}
nsresult
nsIContent::LookupNamespaceURIInternal(const nsAString& aNamespacePrefix,
nsAString& aNamespaceURI) const
{
if (aNamespacePrefix.EqualsLiteral("xml")) {
// Special-case for xml prefix
--- a/editor/composer/src/nsEditorSpellCheck.cpp
+++ b/editor/composer/src/nsEditorSpellCheck.cpp
@@ -57,16 +57,17 @@
#include "nsServiceManagerUtils.h"
#include "nsIChromeRegistry.h"
#include "nsString.h"
#include "nsReadableUtils.h"
#include "nsITextServicesFilter.h"
#include "nsUnicharUtils.h"
#include "mozilla/Services.h"
#include "mozilla/Preferences.h"
+#include "mozilla/dom/Element.h"
using namespace mozilla;
class UpdateDictionnaryHolder {
private:
nsEditorSpellCheck* mSpellCheck;
public:
UpdateDictionnaryHolder(nsEditorSpellCheck* esc): mSpellCheck(esc) {
--- a/editor/idl/nsIHTMLEditor.idl
+++ b/editor/idl/nsIHTMLEditor.idl
@@ -46,17 +46,25 @@ interface nsIContent;
interface nsISupportsArray;
interface nsISelection;
interface nsIContentFilter;
%{C++
#define NS_EDITOR_ELEMENT_NOT_FOUND \
NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_EDITOR, 1)
+namespace mozilla {
+namespace dom {
+class Element;
+}
+}
%}
+
+[ptr] native Element (mozilla::dom::Element);
+
[scriptable, uuid(833f30de-94c7-4630-a852-2300ef329d7b)]
interface nsIHTMLEditor : nsISupports
{
%{C++
typedef short EAlignment;
%}
@@ -585,11 +593,11 @@ interface nsIHTMLEditor : nsISupports
* Checks whether a BR node is visible to the user.
*/
boolean breakIsVisible(in nsIDOMNode aNode);
/**
* Get an active editor's editing host in DOM window. If this editor isn't
* active in the DOM window, this returns NULL.
*/
- [noscript, notxpcom] nsIContent GetActiveEditingHost();
+ [noscript, notxpcom] Element GetActiveEditingHost();
};
--- a/editor/libeditor/html/nsHTMLEditor.cpp
+++ b/editor/libeditor/html/nsHTMLEditor.cpp
@@ -5469,17 +5469,17 @@ nsHTMLEditor::IsActiveInDOMWindow()
// we're not active).
if (!content->HasFlag(NODE_IS_EDITABLE) ||
content->HasIndependentSelection()) {
return false;
}
return true;
}
-nsIContent*
+dom::Element*
nsHTMLEditor::GetActiveEditingHost()
{
NS_ENSURE_TRUE(mDocWeak, nsnull);
nsCOMPtr<nsIDocument> doc = do_QueryReferent(mDocWeak);
NS_ENSURE_TRUE(doc, nsnull);
if (doc->HasFlag(NODE_IS_EDITABLE)) {
return doc->GetBodyElement();