forked from mirrors/gecko-dev
		
	 0d4fc02631
			
		
	
	
		0d4fc02631
		
	
	
	
	
		
			
			Backed out changeset a07c835a4bf7 (bug 1845150) Backed out changeset 0016d7f4e556 (bug 1845150) Backed out changeset 46cfe5fe6e6a (bug 1845150) Backed out changeset 83190b8a08d0 (bug 1845150) Backed out changeset ada948351267 (bug 1845150) Backed out changeset 7aa4340bfd96 (bug 1845150) Backed out changeset 683745289588 (bug 1845150)
		
			
				
	
	
		
			122 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* 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/. */
 | |
| 
 | |
| /**
 | |
|  * Represents an info bar that shows a data submission notification.
 | |
|  */
 | |
| var gDataNotificationInfoBar = {
 | |
|   _OBSERVERS: [
 | |
|     "datareporting:notify-data-policy:request",
 | |
|     "datareporting:notify-data-policy:close",
 | |
|   ],
 | |
| 
 | |
|   _DATA_REPORTING_NOTIFICATION: "data-reporting",
 | |
| 
 | |
|   get _log() {
 | |
|     let { Log } = ChromeUtils.importESModule(
 | |
|       "resource://gre/modules/Log.sys.mjs"
 | |
|     );
 | |
|     delete this._log;
 | |
|     return (this._log = Log.repository.getLoggerWithMessagePrefix(
 | |
|       "Toolkit.Telemetry",
 | |
|       "DataNotificationInfoBar::"
 | |
|     ));
 | |
|   },
 | |
| 
 | |
|   init() {
 | |
|     window.addEventListener("unload", () => {
 | |
|       for (let o of this._OBSERVERS) {
 | |
|         Services.obs.removeObserver(this, o);
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     for (let o of this._OBSERVERS) {
 | |
|       Services.obs.addObserver(this, o, true);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   _getDataReportingNotification(name = this._DATA_REPORTING_NOTIFICATION) {
 | |
|     return gNotificationBox.getNotificationWithValue(name);
 | |
|   },
 | |
| 
 | |
|   _displayDataPolicyInfoBar(request) {
 | |
|     if (this._getDataReportingNotification()) {
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     this._actionTaken = false;
 | |
| 
 | |
|     let buttons = [
 | |
|       {
 | |
|         "l10n-id": "data-reporting-notification-button",
 | |
|         popup: null,
 | |
|         callback: () => {
 | |
|           this._actionTaken = true;
 | |
|           window.openPreferences("privacy-reports");
 | |
|         },
 | |
|       },
 | |
|     ];
 | |
| 
 | |
|     this._log.info("Creating data reporting policy notification.");
 | |
|     gNotificationBox.appendNotification(
 | |
|       this._DATA_REPORTING_NOTIFICATION,
 | |
|       {
 | |
|         label: {
 | |
|           "l10n-id": "data-reporting-notification-message",
 | |
|         },
 | |
|         priority: gNotificationBox.PRIORITY_INFO_HIGH,
 | |
|         eventCallback: event => {
 | |
|           if (event == "removed") {
 | |
|             Services.obs.notifyObservers(
 | |
|               null,
 | |
|               "datareporting:notify-data-policy:close"
 | |
|             );
 | |
|           }
 | |
|         },
 | |
|       },
 | |
|       buttons
 | |
|     );
 | |
|     // It is important to defer calling onUserNotifyComplete() until we're
 | |
|     // actually sure the notification was displayed. If we ever called
 | |
|     // onUserNotifyComplete() without showing anything to the user, that
 | |
|     // would be very good for user choice. It may also have legal impact.
 | |
|     request.onUserNotifyComplete();
 | |
|   },
 | |
| 
 | |
|   _clearPolicyNotification() {
 | |
|     let notification = this._getDataReportingNotification();
 | |
|     if (notification) {
 | |
|       this._log.debug("Closing notification.");
 | |
|       notification.close();
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   observe(subject, topic, data) {
 | |
|     switch (topic) {
 | |
|       case "datareporting:notify-data-policy:request":
 | |
|         let request = subject.wrappedJSObject.object;
 | |
|         try {
 | |
|           this._displayDataPolicyInfoBar(request);
 | |
|         } catch (ex) {
 | |
|           request.onUserNotifyFailed(ex);
 | |
|         }
 | |
|         break;
 | |
| 
 | |
|       case "datareporting:notify-data-policy:close":
 | |
|         // If this observer fires, it means something else took care of
 | |
|         // responding. Therefore, we don't need to do anything. So, we
 | |
|         // act like we took action and clear state.
 | |
|         this._actionTaken = true;
 | |
|         this._clearPolicyNotification();
 | |
|         break;
 | |
| 
 | |
|       default:
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   QueryInterface: ChromeUtils.generateQI([
 | |
|     "nsIObserver",
 | |
|     "nsISupportsWeakReference",
 | |
|   ]),
 | |
| };
 |