forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			90 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* vim: set ts=2 sw=2 sts=2 et tw=80: */
 | |
| /* 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 class SpeechDispatcherParent extends JSWindowActorParent {
 | |
|   prefName() {
 | |
|     return "media.webspeech.synth.dont_notify_on_error";
 | |
|   }
 | |
| 
 | |
|   disableNotification() {
 | |
|     Services.prefs.setBoolPref(this.prefName(), true);
 | |
|   }
 | |
| 
 | |
|   async receiveMessage(aMessage) {
 | |
|     // The top level browsing context's embedding element should be a xul browser element.
 | |
|     let browser = this.browsingContext.top.embedderElement;
 | |
| 
 | |
|     if (!browser) {
 | |
|       // We don't have a browser so bail!
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     let notificationId;
 | |
| 
 | |
|     if (Services.prefs.getBoolPref(this.prefName(), false)) {
 | |
|       console.info("Opted out from speech-dispatcher error notification");
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     let messageId;
 | |
|     switch (aMessage.data) {
 | |
|       case "lib-missing":
 | |
|         messageId = "speech-dispatcher-lib-missing";
 | |
|         break;
 | |
| 
 | |
|       case "lib-too-old":
 | |
|         messageId = "speech-dispatcher-lib-too-old";
 | |
|         break;
 | |
| 
 | |
|       case "missing-symbol":
 | |
|         messageId = "speech-dispatcher-missing-symbol";
 | |
|         break;
 | |
| 
 | |
|       case "open-fail":
 | |
|         messageId = "speech-dispatcher-open-fail";
 | |
|         break;
 | |
| 
 | |
|       case "no-voices":
 | |
|         messageId = "speech-dispatcher-no-voices";
 | |
|         break;
 | |
| 
 | |
|       default:
 | |
|         break;
 | |
|     }
 | |
| 
 | |
|     let MozXULElement = browser.ownerGlobal.MozXULElement;
 | |
|     MozXULElement.insertFTLIfNeeded("browser/speechDispatcher.ftl");
 | |
| 
 | |
|     // Now actually create the notification
 | |
|     let notificationBox = browser.getTabBrowser().getNotificationBox(browser);
 | |
|     if (notificationBox.getNotificationWithValue(notificationId)) {
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     let buttons = [
 | |
|       {
 | |
|         supportPage: "speechd-setup",
 | |
|       },
 | |
|       {
 | |
|         "l10n-id": "speech-dispatcher-dismiss-button",
 | |
|         callback: () => {
 | |
|           this.disableNotification();
 | |
|         },
 | |
|       },
 | |
|     ];
 | |
| 
 | |
|     let iconURL = "chrome://browser/skin/drm-icon.svg";
 | |
|     notificationBox.appendNotification(
 | |
|       notificationId,
 | |
|       {
 | |
|         label: { "l10n-id": messageId },
 | |
|         image: iconURL,
 | |
|         priority: notificationBox.PRIORITY_INFO_HIGH,
 | |
|         type: "warning",
 | |
|       },
 | |
|       buttons
 | |
|     );
 | |
|   }
 | |
| }
 | 
