forked from mirrors/gecko-dev
		
	 c4ec4d7309
			
		
	
	
		c4ec4d7309
		
	
	
	
	
		
			
			r=tritter - backed out changesets: 1660057, 1667426, 1674214, 1669749, 1685801, 1667381 - fission.experiment support removed everywhere, including telemetry Differential Revision: https://phabricator.services.mozilla.com/D165169
		
			
				
	
	
		
			73 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* -*- mode: js; indent-tabs-mode: nil; js-indent-level: 2 -*- */
 | |
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| export var BrowserTelemetryUtils = {
 | |
|   recordSiteOriginTelemetry(aWindows, aIsGeckoView) {
 | |
|     Services.tm.idleDispatchToMainThread(() => {
 | |
|       this._recordSiteOriginTelemetry(aWindows, aIsGeckoView);
 | |
|     });
 | |
|   },
 | |
| 
 | |
|   computeSiteOriginCount(aWindows, aIsGeckoView) {
 | |
|     // Geckoview and Desktop work differently. On desktop, aBrowser objects
 | |
|     // holds an array of tabs which we can use to get the <browser> objects.
 | |
|     // In Geckoview, it is apps' responsibility to keep track of the tabs, so
 | |
|     // there isn't an easy way for us to get the tabs.
 | |
|     let tabs = [];
 | |
|     if (aIsGeckoView) {
 | |
|       // To get all active windows; Each tab has its own window
 | |
|       tabs = aWindows;
 | |
|     } else {
 | |
|       for (const win of aWindows) {
 | |
|         tabs = tabs.concat(win.gBrowser.tabs);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     let topLevelBCs = [];
 | |
| 
 | |
|     for (const tab of tabs) {
 | |
|       let browser;
 | |
|       if (aIsGeckoView) {
 | |
|         browser = tab.browser;
 | |
|       } else {
 | |
|         browser = tab.linkedBrowser;
 | |
|       }
 | |
| 
 | |
|       if (browser.browsingContext) {
 | |
|         // This is the top level browsingContext
 | |
|         topLevelBCs.push(browser.browsingContext);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return CanonicalBrowsingContext.countSiteOrigins(topLevelBCs);
 | |
|   },
 | |
| 
 | |
|   _recordSiteOriginTelemetry(aWindows, aIsGeckoView) {
 | |
|     let currentTime = Date.now();
 | |
| 
 | |
|     // default is 5 minutes
 | |
|     if (!this.min_interval) {
 | |
|       this.min_interval = Services.prefs.getIntPref(
 | |
|         "telemetry.number_of_site_origin.min_interval",
 | |
|         300000
 | |
|       );
 | |
|     }
 | |
| 
 | |
|     let originCount = this.computeSiteOriginCount(aWindows, aIsGeckoView);
 | |
|     let histogram = Services.telemetry.getHistogramById(
 | |
|       "FX_NUMBER_OF_UNIQUE_SITE_ORIGINS_ALL_TABS"
 | |
|     );
 | |
| 
 | |
|     // Discard the first load because most of the time the first load only has 1
 | |
|     // tab and 1 window open, so it is useless to report it.
 | |
|     if (!this._lastRecordSiteOrigin) {
 | |
|       this._lastRecordSiteOrigin = currentTime;
 | |
|     } else if (currentTime >= this._lastRecordSiteOrigin + this.min_interval) {
 | |
|       this._lastRecordSiteOrigin = currentTime;
 | |
| 
 | |
|       histogram.add(originCount);
 | |
|     }
 | |
|   },
 | |
| };
 |