Upgrade google analytics; fix page reporting

- Drop deprecated ga.js in favor of analytics.js
- Queue timing reports on page load until page change is reported in
 order to correctly connect timings to the page
- Report version and gerrit domain

Change-Id: Ia2b0bef936a06770fb7fd428705854396580ed29
diff --git a/background.js b/background.js
index 7f038a8..3b0652f 100644
--- a/background.js
+++ b/background.js
@@ -12,18 +12,18 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-var _gaq = _gaq || [];
-_gaq.push(['_setAccount', 'UA-73551813-1']);
-_gaq.push(['_setSiteSpeedSampleRate', 100]);
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','https://www.google-analytics.com/analytics.js',
+'ga');
 
-(function() {
-  var ga = document.createElement('script');
-  ga.type = 'text/javascript';
-  ga.async = true;
-  ga.src = 'https://ssl.google-analytics.com/ga.js';
-  var s = document.getElementsByTagName('script')[0];
-  s.parentNode.insertBefore(ga, s);
-})();
+ga('create', 'UA-73551813-1', {
+  'siteSpeedSampleRate': 100,
+  'cookieDomain': 'none',
+});
+ga('set', 'checkProtocolTask', null);
+ga('send', 'pageview');
 
 var RequestType = {
   NAV: 'nav-report',
@@ -32,17 +32,25 @@
 
 chrome.runtime.onMessage.addListener(function(request) {
   var detail = request.detail;
-  if (detail.host) {
-    _gaq.push(['_setDomainName', detail.host]);
-  }
+  var version = detail.ver || chrome.app.getDetails().version;
+
+  ga('set', 'dimension1', version);
+  ga('set', 'dimension2', detail.host);
 
   switch (request.type) {
     case RequestType.TIMING:
       var time = Math.round(detail.value);
-      _gaq.push(['_trackTiming', detail.category, detail.name, time]);
+      var hourInMillis = 1000 * 60 * 60;
+      if (0 < time && time < hourInMillis) {
+        ga('send', 'timing', detail.category, detail.name, time);
+      } else {
+        console.log(
+          'timing out of range: ' + [detail.category, detail.name, time]);
+      }
       break;
     case RequestType.NAV:
-      _gaq.push(['_trackPageview', detail.value]);
+      ga('set', 'page', detail.value);
+      ga('send', 'pageview');
       break;
   };
 });
@@ -197,7 +205,7 @@
   };
   chrome.cookies.get(cookieID, function(cookie) {
     if (cookie) {
-      _gaq.push(['_trackEvent', 'Page Action', 'Switch to Gerrit']);
+      ga('send', 'event', 'Page Action', 'Switch to Gerrit');
       chrome.cookies.remove(cookieID, function() {
         // The GWT UI does not handle PolyGerrit URL redirection.
         chrome.tabs.update(tab.id, {
@@ -207,7 +215,7 @@
         });
       });
     } else {
-      _gaq.push(['_trackEvent', 'Page Action', 'Switch to PolyGerrit']);
+      ga('send', 'event', 'Page Action', 'Switch to PolyGerrit');
       chrome.cookies.set({
         url: tab.url,
         name: 'GERRIT_UI',
diff --git a/content.js b/content.js
index 55a2804..1b24124 100644
--- a/content.js
+++ b/content.js
@@ -16,12 +16,30 @@
   var isPolyGerrit = !!appEl;
 
   if (isPolyGerrit) {
+    var page;
+    var pendingEvents = [];
     var reportToBackground = function(e) {
       e.detail.host = location.host;
       chrome.runtime.sendMessage({type: e.type, detail: e.detail});
     };
-    document.addEventListener('timing-report', reportToBackground);
-    document.addEventListener('nav-report', reportToBackground);
+    var reportNav = function(e) {
+      page = e.detail.value;
+      reportToBackground(e);
+      if (pendingEvents.length) {
+        pendingEvents.forEach(reportToBackground);
+        pendingEvents = [];
+      }
+    };
+    var reportTiming = function(e) {
+      if (page) {
+        reportToBackground(e);
+      } else {
+        pendingEvents.push(
+            {type: e.type, detail: Object.assign({}, e.detail)});
+      }
+    };
+    document.addEventListener('timing-report', reportTiming);
+    document.addEventListener('nav-report', reportNav);
   } else {
     chrome.runtime.sendMessage({
       type: 'nav-report',
diff --git a/manifest.json b/manifest.json
index 39a68fb..62d9a4c 100644
--- a/manifest.json
+++ b/manifest.json
@@ -2,7 +2,7 @@
   "manifest_version": 2,
   "name": "Gerrit UI Switcher",
   "description": "Easily switch between the current Gerrit UI and the new PolyGerrit UI",
-  "version": "0.5.2",
+  "version": "0.5.3",
   "background": {
     "scripts": [
       "background.js"
@@ -45,5 +45,5 @@
     "*://*.git.corp.google.com/*",
     "*://*.staging-git.corp.google.com/*"
   ],
-  "content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'"
+  "content_security_policy": "script-src 'self' https://www.google-analytics.com; object-src 'self'"
 }