forked from mirrors/gecko-dev
		
	 b3b4cd18df
			
		
	
	
		b3b4cd18df
		
	
	
	
	
		
			
			MozReview-Commit-ID: GYzueGSijyd --HG-- extra : rebase_source : b55464fb90f63317822ba8acd47388ace84e4b96
		
			
				
	
	
		
			104 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
 | |
| /* vim: set sts=2 sw=2 et tw=80: */
 | |
| "use strict";
 | |
| 
 | |
| Cu.import("resource://gre/modules/ExtensionUtils.jsm");
 | |
| 
 | |
| XPCOMUtils.defineLazyModuleGetter(this, "ExtensionSearchHandler",
 | |
|                                   "resource://gre/modules/ExtensionSearchHandler.jsm");
 | |
| var {
 | |
|   SingletonEventManager,
 | |
| } = ExtensionUtils;
 | |
| 
 | |
| // WeakMap[extension -> keyword]
 | |
| let gKeywordMap = new WeakMap();
 | |
| 
 | |
| /* eslint-disable mozilla/balanced-listeners */
 | |
| extensions.on("manifest_omnibox", (type, directive, extension, manifest) => {
 | |
|   let keyword = manifest.omnibox.keyword;
 | |
|   try {
 | |
|     // This will throw if the keyword is already registered.
 | |
|     ExtensionSearchHandler.registerKeyword(keyword, extension);
 | |
|     gKeywordMap.set(extension, keyword);
 | |
|   } catch (e) {
 | |
|     extension.manifestError(e.message);
 | |
|   }
 | |
| });
 | |
| 
 | |
| extensions.on("shutdown", (type, extension) => {
 | |
|   let keyword = gKeywordMap.get(extension);
 | |
|   if (keyword) {
 | |
|     ExtensionSearchHandler.unregisterKeyword(keyword);
 | |
|     gKeywordMap.delete(extension);
 | |
|   }
 | |
| });
 | |
| /* eslint-enable mozilla/balanced-listeners */
 | |
| 
 | |
| extensions.registerSchemaAPI("omnibox", "addon_parent", context => {
 | |
|   let {extension} = context;
 | |
|   return {
 | |
|     omnibox: {
 | |
|       setDefaultSuggestion(suggestion) {
 | |
|         let keyword = gKeywordMap.get(extension);
 | |
|         try {
 | |
|           // This will throw if the keyword failed to register.
 | |
|           ExtensionSearchHandler.setDefaultSuggestion(keyword, suggestion);
 | |
|         } catch (e) {
 | |
|           return Promise.reject(e.message);
 | |
|         }
 | |
|       },
 | |
| 
 | |
|       onInputStarted: new SingletonEventManager(context, "omnibox.onInputStarted", fire => {
 | |
|         let listener = (eventName) => {
 | |
|           fire();
 | |
|         };
 | |
|         extension.on(ExtensionSearchHandler.MSG_INPUT_STARTED, listener);
 | |
|         return () => {
 | |
|           extension.off(ExtensionSearchHandler.MSG_INPUT_STARTED, listener);
 | |
|         };
 | |
|       }).api(),
 | |
| 
 | |
|       onInputCancelled: new SingletonEventManager(context, "omnibox.onInputCancelled", fire => {
 | |
|         let listener = (eventName) => {
 | |
|           fire();
 | |
|         };
 | |
|         extension.on(ExtensionSearchHandler.MSG_INPUT_CANCELLED, listener);
 | |
|         return () => {
 | |
|           extension.off(ExtensionSearchHandler.MSG_INPUT_CANCELLED, listener);
 | |
|         };
 | |
|       }).api(),
 | |
| 
 | |
|       onInputEntered: new SingletonEventManager(context, "omnibox.onInputEntered", fire => {
 | |
|         let listener = (eventName, text, disposition) => {
 | |
|           fire(text, disposition);
 | |
|         };
 | |
|         extension.on(ExtensionSearchHandler.MSG_INPUT_ENTERED, listener);
 | |
|         return () => {
 | |
|           extension.off(ExtensionSearchHandler.MSG_INPUT_ENTERED, listener);
 | |
|         };
 | |
|       }).api(),
 | |
|     },
 | |
| 
 | |
|     omnibox_internal: {
 | |
|       addSuggestions(id, suggestions) {
 | |
|         let keyword = gKeywordMap.get(extension);
 | |
|         try {
 | |
|           ExtensionSearchHandler.addSuggestions(keyword, id, suggestions);
 | |
|         } catch (e) {
 | |
|           // Silently fail because the extension developer can not know for sure if the user
 | |
|           // has already invalidated the callback when asynchronously providing suggestions.
 | |
|         }
 | |
|       },
 | |
| 
 | |
|       onInputChanged: new SingletonEventManager(context, "omnibox_internal.onInputChanged", fire => {
 | |
|         let listener = (eventName, text, id) => {
 | |
|           fire(text, id);
 | |
|         };
 | |
|         extension.on(ExtensionSearchHandler.MSG_INPUT_CHANGED, listener);
 | |
|         return () => {
 | |
|           extension.off(ExtensionSearchHandler.MSG_INPUT_CHANGED, listener);
 | |
|         };
 | |
|       }).api(),
 | |
|     },
 | |
|   };
 | |
| });
 |