From 519bb98af6a5022f3921573ced1b93e0472733e0 Mon Sep 17 00:00:00 2001 From: "bryner%brianryner.com" Date: Fri, 3 Mar 2006 18:14:26 +0000 Subject: [PATCH] Consolidate window events into a single element (bug 329187) r=marria. git-svn-id: svn://10.0.0.236/trunk@191699 18797224-902f-48f8-a5cc-f745e15eee43 --- .../metrics/src/nsWindowCollector.cpp | 87 +++++++------------ 1 file changed, 30 insertions(+), 57 deletions(-) diff --git a/mozilla/extensions/metrics/src/nsWindowCollector.cpp b/mozilla/extensions/metrics/src/nsWindowCollector.cpp index b826eb7f5d1..0e95effdd38 100644 --- a/mozilla/extensions/metrics/src/nsWindowCollector.cpp +++ b/mozilla/extensions/metrics/src/nsWindowCollector.cpp @@ -121,21 +121,20 @@ nsWindowCollector::Observe(nsISupports *subject, const char *topic, const PRUnichar *data) { - nsresult rv; + nsRefPtr properties; + nsresult rv = nsMetricsUtils::NewPropertyBag(getter_AddRefs(properties)); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr window; + nsCAutoString action; + if (strcmp(topic, "domwindowcreated") == 0) { // Log a window creation event. - nsRefPtr properties; - rv = nsMetricsUtils::NewPropertyBag(getter_AddRefs(properties)); - NS_ENSURE_SUCCESS(rv, rv); + action.AssignLiteral("create"); - nsCOMPtr window = do_QueryInterface(subject); + window = do_QueryInterface(subject); NS_ENSURE_STATE(window); - rv = nsMetricsUtils::PutUint16(properties, - NS_LITERAL_STRING("window"), - GetWindowID(window)); - NS_ENSURE_SUCCESS(rv, rv); - // We want the window's real parent, even if it crosses a chrome/content // boundary. This requires going up the docshell tree. nsCOMPtr item = @@ -158,24 +157,13 @@ nsWindowCollector::Observe(nsISupports *subject, rv = properties->SetPropertyAsBool(NS_LITERAL_STRING("chrome"), PR_TRUE); NS_ENSURE_SUCCESS(rv, rv); } - - nsMetricsService *ms = nsMetricsService::get(); - rv = ms->LogEvent(NS_LITERAL_STRING("windowcreate"), properties); - NS_ENSURE_SUCCESS(rv, rv); } else if (strcmp(topic, "toplevel-window-ready") == 0) { // Log a window open event. - nsRefPtr properties; - rv = nsMetricsUtils::NewPropertyBag(getter_AddRefs(properties)); - NS_ENSURE_SUCCESS(rv, rv); + action.AssignLiteral("open"); - nsCOMPtr window = do_QueryInterface(subject); + window = do_QueryInterface(subject); NS_ENSURE_STATE(window); - rv = nsMetricsUtils::PutUint16(properties, - NS_LITERAL_STRING("window"), - GetWindowID(window)); - NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr opener; window->GetOpener(getter_AddRefs(opener)); if (opener) { @@ -185,51 +173,36 @@ nsWindowCollector::Observe(nsISupports *subject, GetWindowID(opener)); NS_ENSURE_SUCCESS(rv, rv); } - - nsMetricsService *ms = nsMetricsService::get(); - rv = ms->LogEvent(NS_LITERAL_STRING("windowopen"), properties); - NS_ENSURE_SUCCESS(rv, rv); } else if (strcmp(topic, "domwindowclosed") == 0) { // Log a window close event. - nsRefPtr properties; - rv = nsMetricsUtils::NewPropertyBag(getter_AddRefs(properties)); - NS_ENSURE_SUCCESS(rv, rv); - - nsCOMPtr window = do_QueryInterface(subject); - NS_ENSURE_STATE(window); - - rv = nsMetricsUtils::PutUint16(properties, - NS_LITERAL_STRING("window"), - GetWindowID(window)); - NS_ENSURE_SUCCESS(rv, rv); - - nsMetricsService *ms = nsMetricsService::get(); - rv = ms->LogEvent(NS_LITERAL_STRING("windowclose"), properties); - NS_ENSURE_SUCCESS(rv, rv); + action.AssignLiteral("close"); + window = do_QueryInterface(subject); } else if (strcmp(topic, NS_WEBNAVIGATION_DESTROY) == 0 || strcmp(topic, NS_CHROME_WEBNAVIGATION_DESTROY) == 0) { // Log a window destroy event. - nsRefPtr properties; - rv = nsMetricsUtils::NewPropertyBag(getter_AddRefs(properties)); - NS_ENSURE_SUCCESS(rv, rv); - - nsCOMPtr window = do_GetInterface(subject); - NS_ENSURE_STATE(window); - - rv = nsMetricsUtils::PutUint16(properties, - NS_LITERAL_STRING("window"), - GetWindowID(window)); - NS_ENSURE_SUCCESS(rv, rv); - - nsMetricsService *ms = nsMetricsService::get(); - rv = ms->LogEvent(NS_LITERAL_STRING("windowdestroy"), properties); + action.AssignLiteral("destroy"); + window = do_GetInterface(subject); // Remove the window from our map. mWindowMap.Remove(subject); NS_ENSURE_SUCCESS(rv, rv); } - return NS_OK; + if (window) { + rv = nsMetricsUtils::PutUint16(properties, NS_LITERAL_STRING("windowid"), + GetWindowID(window)); + NS_ENSURE_SUCCESS(rv, rv); + + rv = properties->SetPropertyAsACString(NS_LITERAL_STRING("action"), + action); + NS_ENSURE_SUCCESS(rv, rv); + + nsMetricsService *ms = nsMetricsService::get(); + NS_ENSURE_STATE(ms); + rv = ms->LogEvent(NS_LITERAL_STRING("window"), properties); + } + + return rv; } /* static */ PRUint16