Closed Bug 497178 Opened 17 years ago Closed 17 years ago

Make nsPIDOMEventTarget::GetListenerManager to return nsIEventListenerManager*

Categories

(Core :: DOM: Events, defect)

x86
All
defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: smaug, Assigned: smaug)

References

Details

Attachments

(1 file, 4 obsolete files)

This should reduce unnecessary Addref/Release
Blocks: 481510
Attached patch small tweaks (obsolete) — — Splinter Review
Needs still testing.
Attachment #382362 - Attachment is obsolete: true
Attached patch v3 (obsolete) — — Splinter Review
Attachment #382568 - Attachment is obsolete: true
Attached patch v4 (obsolete) — — Splinter Review
Adding without strong ref is always ok, removing is ok if one listener is removed.
Attachment #382587 - Attachment is obsolete: true
Attachment #382733 - Flags: superreview?(peterv)
Attachment #382733 - Flags: review?(peterv)
Comment on attachment 382733 [details] [diff] [review] v4 >diff --git a/content/base/src/nsGenericElement.cpp b/content/base/src/nsGenericElement.cpp > nsDOMEventRTTearoff::GetDOM3EventTarget(nsIDOM3EventTarget **aTarget) >+ nsIEventListenerManager* listener_manager = mNode->GetListenerManager(PR_TRUE); Long line. > nsDOMEventRTTearoff::AddEventListener(const nsAString& aType, >+ nsIEventListenerManager* listener_manager = mNode->GetListenerManager(PR_TRUE); Long line. > nsGenericElement::GetEventListenerManagerForAttr(nsIEventListenerManager** aManager, > nsISupports** aTarget, > PRBool* aDefer) > { >- nsresult rv = GetListenerManager(PR_TRUE, aManager); >- if (NS_SUCCEEDED(rv)) { >- NS_ADDREF(*aTarget = static_cast<nsIContent*>(this)); >- } >+ *aManager = GetListenerManager(PR_TRUE); > *aDefer = PR_TRUE; >- return rv; >+ NS_ENSURE_STATE(*aManager); >+ NS_ADDREF(*aManager); >+ NS_ADDREF(*aTarget = static_cast<nsIContent*>(this)); >+ return NS_OK; The one caller to GetEventListenerManagerForAttr checks for success rv and non-null manager, maybe it should just check for non-null manager? >diff --git a/content/events/public/nsPIDOMEventTarget.h b/content/events/public/nsPIDOMEventTarget.h >+ virtual nsIEventListenerManager* GetListenerManager(PRBool aCreateIfNotFound) = 0; Long line. >diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp >-nsGlobalWindow::GetListenerManager(PRBool aCreateIfNotFound, >- nsIEventListenerManager** aResult) >-{ >- FORWARD_TO_INNER_CREATE(GetListenerManager, (aCreateIfNotFound, aResult)); >+nsIEventListenerManager* >+nsGlobalWindow::GetListenerManager(PRBool aCreateIfNotFound) >+{ >+ if (IsOuterWindow()) { >+ if (!mInnerWindow) { >+ NS_ENSURE_TRUE(!mIsClosed, nsnull); >+ nsCOMPtr<nsIDOMDocument> doc; >+ nsresult rv = GetDocument(getter_AddRefs(doc)); >+ NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && mInnerWindow, nsnull); >+ } >+ return GetCurrentInnerWindowInternal()->GetListenerManager(aCreateIfNotFound); \ >+ } I think you should change FORWARD_TO_INNER_CREATE so it has a err_rval argument, just like FORWARD_TO_INNER. > > if (!mListenerManager) { > if (!aCreateIfNotFound) { >- *aResult = nsnull; >- return NS_OK; >+ return nsnull; > } > > static NS_DEFINE_CID(kEventListenerManagerCID, > NS_EVENTLISTENERMANAGER_CID); > nsresult rv; > > mListenerManager = do_CreateInstance(kEventListenerManagerCID, &rv); >- NS_ENSURE_SUCCESS(rv, rv); >+ NS_ENSURE_SUCCESS(rv, nsnull); Don't need rv anymore, just check mListenerManager. >diff --git a/dom/base/nsWindowRoot.cpp b/dom/base/nsWindowRoot.cpp >+nsWindowRoot::GetListenerManager(PRBool aCreateIfNotFound) > nsresult rv; > mListenerManager = do_CreateInstance(kEventListenerManagerCID, &rv); >- if (NS_FAILED(rv)) return rv; >+ if (NS_FAILED(rv)) return nsnull; Don't need rv anymore, just check mListenerManager.
Attachment #382733 - Flags: superreview?(peterv)
Attachment #382733 - Flags: superreview+
Attachment #382733 - Flags: review?(peterv)
Attachment #382733 - Flags: review+
Attached patch +comments — — Splinter Review
Attachment #382733 - Attachment is obsolete: true
Status: NEW → RESOLVED
Closed: 17 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: