From 229cb1758fd9dfe1ee6913356f16718d7e8fbfcd Mon Sep 17 00:00:00 2001 From: "bryner%brianryner.com" Date: Sat, 20 May 2006 21:37:50 +0000 Subject: [PATCH] Hook up the command event listener to existing windows when the collector is attached (bug 336525) r=marria --- .../metrics/src/nsUICommandCollector.cpp | 34 +++++++++++++++++++ extensions/metrics/src/nsUICommandCollector.h | 3 ++ 2 files changed, 37 insertions(+) diff --git a/extensions/metrics/src/nsUICommandCollector.cpp b/extensions/metrics/src/nsUICommandCollector.cpp index 691d7394e18a..99b5666ebcb9 100644 --- a/extensions/metrics/src/nsUICommandCollector.cpp +++ b/extensions/metrics/src/nsUICommandCollector.cpp @@ -59,6 +59,32 @@ NS_IMPL_ISUPPORTS3(nsUICommandCollector, nsIObserver, nsIDOMEventListener, nsIMetricsCollector) +/* static */ +PLDHashOperator PR_CALLBACK nsUICommandCollector::AddCommandEventListener( +const nsIDOMWindow* key, PRUint32 windowID, void* userArg) +{ + nsCOMPtr windowTarget = + do_QueryInterface(NS_CONST_CAST(nsIDOMWindow *, key)); + if (!windowTarget) { + MS_LOG(("Error casting domeventtarget")); + return PL_DHASH_NEXT; + } + + nsIDOMEventListener* listener = NS_STATIC_CAST(nsIDOMEventListener*, + userArg); + if (!listener) { + MS_LOG(("no event listener in userArg")); + return PL_DHASH_NEXT; + } + + nsresult rv = windowTarget->AddEventListener(NS_LITERAL_STRING("command"), + listener, PR_TRUE); + if (NS_FAILED(rv)) { + MS_LOG(("Warning: Adding event listener failed")); + } + return PL_DHASH_NEXT; +} + /* static */ PLDHashOperator PR_CALLBACK nsUICommandCollector::RemoveCommandEventListener( const nsIDOMWindow* key, PRUint32 windowID, void* userArg) @@ -106,6 +132,14 @@ nsUICommandCollector::OnAttach() // listener to each window rv = obsSvc->AddObserver(this, "domwindowopened", PR_FALSE); NS_ENSURE_SUCCESS(rv, rv); + + // Attach to all existing windows + nsMetricsService *ms = nsMetricsService::get(); + NS_ENSURE_STATE(ms); + + ms->WindowMap().EnumerateRead(AddCommandEventListener, + NS_STATIC_CAST(nsIDOMEventListener*, this)); + return NS_OK; } diff --git a/extensions/metrics/src/nsUICommandCollector.h b/extensions/metrics/src/nsUICommandCollector.h index 404ef036d49f..1203b094c377 100644 --- a/extensions/metrics/src/nsUICommandCollector.h +++ b/extensions/metrics/src/nsUICommandCollector.h @@ -58,6 +58,9 @@ class nsUICommandCollector : public nsIObserver, NS_DECL_NSIDOMEVENTLISTENER NS_DECL_NSIMETRICSCOLLECTOR + static PLDHashOperator PR_CALLBACK AddCommandEventListener( + const nsIDOMWindow* key, PRUint32 windowID, void* userArg); + static PLDHashOperator PR_CALLBACK RemoveCommandEventListener( const nsIDOMWindow* key, PRUint32 windowID, void* userArg);