Closed
Bug 497178
Opened 17 years ago
Closed 17 years ago
Make nsPIDOMEventTarget::GetListenerManager to return nsIEventListenerManager*
Categories
(Core :: DOM: Events, defect)
Tracking
()
RESOLVED
FIXED
People
(Reporter: smaug, Assigned: smaug)
References
Details
Attachments
(1 file, 4 obsolete files)
|
68.78 KB,
patch
|
Details | Diff | Splinter Review |
This should reduce unnecessary Addref/Release
| Assignee | ||
Comment 1•17 years ago
|
||
Needs still testing.
Attachment #382362 -
Attachment is obsolete: true
| Assignee | ||
Comment 2•17 years ago
|
||
Attachment #382568 -
Attachment is obsolete: true
| Assignee | ||
Comment 3•17 years ago
|
||
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 4•17 years ago
|
||
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+
| Assignee | ||
Comment 5•17 years ago
|
||
Attachment #382733 -
Attachment is obsolete: true
| Assignee | ||
Comment 6•17 years ago
|
||
Status: NEW → RESOLVED
Closed: 17 years ago
Resolution: --- → FIXED
Depends on: 511487
You need to log in
before you can comment on or make changes to this bug.
Description
•