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
This commit is contained in:
bryner%brianryner.com
2006-03-03 18:14:26 +00:00
parent 718cf96b65
commit 519bb98af6

View File

@@ -121,21 +121,20 @@ nsWindowCollector::Observe(nsISupports *subject,
const char *topic,
const PRUnichar *data)
{
nsresult rv;
nsRefPtr<nsHashPropertyBag> properties;
nsresult rv = nsMetricsUtils::NewPropertyBag(getter_AddRefs(properties));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsPIDOMWindow> window;
nsCAutoString action;
if (strcmp(topic, "domwindowcreated") == 0) {
// Log a window creation event.
nsRefPtr<nsHashPropertyBag> properties;
rv = nsMetricsUtils::NewPropertyBag(getter_AddRefs(properties));
NS_ENSURE_SUCCESS(rv, rv);
action.AssignLiteral("create");
nsCOMPtr<nsPIDOMWindow> 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<nsIDocShellTreeItem> 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<nsHashPropertyBag> properties;
rv = nsMetricsUtils::NewPropertyBag(getter_AddRefs(properties));
NS_ENSURE_SUCCESS(rv, rv);
action.AssignLiteral("open");
nsCOMPtr<nsPIDOMWindow> 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<nsIDOMWindowInternal> 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<nsHashPropertyBag> properties;
rv = nsMetricsUtils::NewPropertyBag(getter_AddRefs(properties));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsPIDOMWindow> 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<nsHashPropertyBag> properties;
rv = nsMetricsUtils::NewPropertyBag(getter_AddRefs(properties));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsPIDOMWindow> 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