bug 257868 - remove the nsIPresShell::SetAnonymousContentFor() API, make the frames store strong refs to the anonymous content instead. Decomtaminate nsIAnonymousContentCreator.

r+sr=roc
This commit is contained in:
asqueella@gmail.com
2007-02-18 17:34:09 +00:00
parent aa043fadef
commit 49c82b0ca8
35 changed files with 669 additions and 818 deletions

View File

@@ -49,7 +49,6 @@
#include "nsIFormControl.h"
#include "nsINameSpaceManager.h"
#include "nsCOMPtr.h"
#include "nsISupportsArray.h"
#include "nsIDOMElement.h"
#include "nsIDOMDocument.h"
#include "nsIDocument.h"
@@ -119,20 +118,21 @@ nsFileControlFrame::Destroy()
nsCOMPtr<nsIDOMEventReceiver> receiver(do_QueryInterface(mBrowse));
receiver->RemoveEventListenerByIID(mMouseListener,
NS_GET_IID(nsIDOMMouseListener));
nsContentUtils::DestroyAnonymousContent(&mBrowse);
}
if (mTextContent) {
nsCOMPtr<nsIDOMEventReceiver> receiver(do_QueryInterface(mTextContent));
receiver->RemoveEventListenerByIID(mMouseListener,
NS_GET_IID(nsIDOMMouseListener));
nsContentUtils::DestroyAnonymousContent(&mTextContent);
}
mMouseListener->ForgetFrame();
nsAreaFrame::Destroy();
}
NS_IMETHODIMP
nsFileControlFrame::CreateAnonymousContent(nsPresContext* aPresContext,
nsISupportsArray& aChildList)
nsresult
nsFileControlFrame::CreateAnonymousContent(nsTArray<nsIContent*>& aElements)
{
// Get the NodeInfoManager and tag necessary to create input elements
nsCOMPtr<nsIDocument> doc = mContent->GetDocument();
@@ -143,66 +143,64 @@ nsFileControlFrame::CreateAnonymousContent(nsPresContext* aPresContext,
getter_AddRefs(nodeInfo));
// Create the text content
nsCOMPtr<nsIContent> content;
nsresult rv = NS_NewHTMLElement(getter_AddRefs(content), nodeInfo);
NS_ENSURE_SUCCESS(rv, rv);
NS_NewHTMLElement(getter_AddRefs(mTextContent), nodeInfo);
if (!mTextContent)
return NS_ERROR_OUT_OF_MEMORY;
content.swap(mTextContent);
mTextContent->SetAttr(kNameSpaceID_None, nsGkAtoms::type,
NS_LITERAL_STRING("text"), PR_FALSE);
if (mTextContent) {
mTextContent->SetAttr(kNameSpaceID_None, nsGkAtoms::type, NS_LITERAL_STRING("text"), PR_FALSE);
nsCOMPtr<nsIDOMHTMLInputElement> textControl = do_QueryInterface(mTextContent);
if (textControl) {
nsCOMPtr<nsIFileControlElement> fileControl = do_QueryInterface(mContent);
if (fileControl) {
// Initialize value when we create the content in case the value was set
// before we got here
nsAutoString value;
fileControl->GetFileName(value);
textControl->SetValue(value);
}
textControl->SetTabIndex(-1);
textControl->SetDisabled(PR_TRUE);
textControl->SetReadOnly(PR_TRUE);
nsCOMPtr<nsIDOMHTMLInputElement> textControl = do_QueryInterface(mTextContent);
if (textControl) {
nsCOMPtr<nsIFileControlElement> fileControl = do_QueryInterface(mContent);
if (fileControl) {
// Initialize value when we create the content in case the value was set
// before we got here
nsAutoString value;
fileControl->GetFileName(value);
textControl->SetValue(value);
}
aChildList.AppendElement(mTextContent);
// register as an event listener of the textbox to open file dialog on mouse click
nsCOMPtr<nsIDOMEventReceiver> receiver(do_QueryInterface(mTextContent));
receiver->AddEventListenerByIID(mMouseListener,
NS_GET_IID(nsIDOMMouseListener));
textControl->SetTabIndex(-1);
textControl->SetDisabled(PR_TRUE);
textControl->SetReadOnly(PR_TRUE);
}
if (!aElements.AppendElement(mTextContent))
return NS_ERROR_OUT_OF_MEMORY;
// register as an event listener of the textbox to open file dialog on mouse click
nsCOMPtr<nsIDOMEventReceiver> receiver = do_QueryInterface(mTextContent);
receiver->AddEventListenerByIID(mMouseListener,
NS_GET_IID(nsIDOMMouseListener));
// Create the browse button
rv = NS_NewHTMLElement(getter_AddRefs(content), nodeInfo);
NS_ENSURE_SUCCESS(rv, rv);
NS_NewHTMLElement(getter_AddRefs(mBrowse), nodeInfo);
if (!mBrowse)
return NS_ERROR_OUT_OF_MEMORY;
mBrowse = do_QueryInterface(content);
if (mBrowse) {
mBrowse->SetAttr(kNameSpaceID_None, nsGkAtoms::type, NS_LITERAL_STRING("button"), PR_FALSE);
nsCOMPtr<nsIDOMHTMLInputElement> fileContent = do_QueryInterface(mContent);
nsCOMPtr<nsIDOMHTMLInputElement> browseControl = do_QueryInterface(mBrowse);
if (fileContent && browseControl) {
PRInt32 tabIndex;
nsAutoString accessKey;
fileContent->GetAccessKey(accessKey);
browseControl->SetAccessKey(accessKey);
fileContent->GetTabIndex(&tabIndex);
browseControl->SetTabIndex(tabIndex);
}
mBrowse->SetAttr(kNameSpaceID_None, nsGkAtoms::type,
NS_LITERAL_STRING("button"), PR_FALSE);
nsCOMPtr<nsIDOMHTMLInputElement> fileContent = do_QueryInterface(mContent);
nsCOMPtr<nsIDOMHTMLInputElement> browseControl = do_QueryInterface(mBrowse);
if (fileContent && browseControl) {
PRInt32 tabIndex;
nsAutoString accessKey;
aChildList.AppendElement(mBrowse);
// register as an event listener of the button to open file dialog on mouse click
nsCOMPtr<nsIDOMEventReceiver> receiver(do_QueryInterface(mBrowse));
receiver->AddEventListenerByIID(mMouseListener,
NS_GET_IID(nsIDOMMouseListener));
fileContent->GetAccessKey(accessKey);
browseControl->SetAccessKey(accessKey);
fileContent->GetTabIndex(&tabIndex);
browseControl->SetTabIndex(tabIndex);
}
if (!aElements.AppendElement(mBrowse))
return NS_ERROR_OUT_OF_MEMORY;
// register as an event listener of the button to open file dialog on mouse click
receiver = do_QueryInterface(mBrowse);
receiver->AddEventListenerByIID(mMouseListener,
NS_GET_IID(nsIDOMMouseListener));
SyncAttr(kNameSpaceID_None, nsGkAtoms::size, SYNC_TEXT);
SyncAttr(kNameSpaceID_None, nsGkAtoms::disabled, SYNC_BOTH);