From 5e94941377bb07e54ae825ed5b709316c532b1b3 Mon Sep 17 00:00:00 2001 From: groovecoder Date: Thu, 16 Mar 2017 13:46:51 -0500 Subject: [PATCH] fix #209: page-requests-completed-per-tab metric --- docs/metrics.md | 14 +++++++++++++- webextension/background.js | 37 ++++++++++++++++++++++++++++++++++++- webextension/manifest.json | 4 +++- 3 files changed, 52 insertions(+), 3 deletions(-) diff --git a/docs/metrics.md b/docs/metrics.md index 3a0bb86..4a13647 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -49,7 +49,7 @@ whether they are actively interacting with it. * Average number of container tabs when new window was clicked * How many containers do users have hidden at the same time? (when should we measure this? each time a container is hidden?) * Do users pin container tabs? (do we have existing Telemetry for pinning?) -* Do users change URLs in a container tab? (sounds like it could be a flood unless we only record the first URL change?) +* Do users visit more pages in container tabs than non-container tabs? ### Follow-up Questions @@ -178,6 +178,17 @@ of a `testpilottest` telemetry ping for each scenario. } ``` +* The user closes a tab + +```js + { + "uuid": , + "userContextId": , + "event": "page-requests-completed-per-tab", + "pageRequestCount": + } +``` + ### A Redshift schema for the payload: ```lua @@ -188,6 +199,7 @@ local schema = { {"clickedContainerTabCount", "INTEGER", 255, nil, "Fields[payload.clickedContainerTabCount]"}, {"eventSource", "VARCHAR", 255, nil, "Fields[payload.eventSource]"}, {"event", "VARCHAR", 255, nil, "Fields[payload.event]"}, + {"pageRequestCount", "INTEGER", 255, nil, "Fields[payload.pageRequestCount]"} {"hiddenContainersCount", "INTEGER", 255, nil, "Fields[payload.hiddenContainersCount]"}, {"shownContainersCount", "INTEGER", 255, nil, "Fields[payload.shownContainersCount]"}, {"totalContainersCount", "INTEGER", 255, nil, "Fields[payload.totalContainersCount]"}, diff --git a/webextension/background.js b/webextension/background.js index e909c6b..75669a6 100644 --- a/webextension/background.js +++ b/webextension/background.js @@ -1,4 +1,3 @@ - const themeManager = { existingTheme: null, init() { @@ -43,7 +42,43 @@ const themeManager = { } }; +const tabPageCounter = { + counter: {}, + + init() { + browser.tabs.onCreated.addListener(this.initTabCounter.bind(this)); + browser.tabs.onRemoved.addListener(this.sendTabCountAndDelete.bind(this)); + browser.webRequest.onCompleted.addListener(this.incrementTabCount.bind(this), {urls: [""], types: ["main_frame"]}); + }, + + initTabCounter(tab) { + this.counter[tab.id] = { + "cookieStoreId": tab.cookieStoreId, + "pageRequests": 0 + }; + }, + + sendTabCountAndDelete(tab) { + browser.runtime.sendMessage({ + method: "sendTelemetryPayload", + event: "page-requests-completed-per-tab", + userContextId: this.counter[tab].cookieStoreId, + pageRequestCount: this.counter[tab].pageRequests + }); + delete this.counter[tab.id]; + }, + + incrementTabCount(details) { + browser.tabs.get(details.tabId).then(tab => { + this.counter[tab.id].pageRequests++; + }).catch(e => { + throw e; + }); + } +}; + themeManager.init(); +tabPageCounter.init(); browser.runtime.sendMessage({ method: "getPreference", diff --git a/webextension/manifest.json b/webextension/manifest.json index 6341619..93a6b16 100644 --- a/webextension/manifest.json +++ b/webextension/manifest.json @@ -20,7 +20,9 @@ "permissions": [ "cookies", - "tabs" + "tabs", + "webRequest", + "" ], "browser_action": {