forked from mirrors/gecko-dev
		
	 e6d84db845
			
		
	
	
		e6d84db845
		
	
	
	
	
		
			
			MozReview-Commit-ID: BQoWF9nHOuF --HG-- rename : browser/components/extensions/ext-desktop-runtime.js => browser/components/extensions/ext-browser.js extra : source : 7fd4ade8811856e835506310a57725dbd355c786 extra : histedit_source : c1775902971f858bfaa386977ca8d579c0ce3c61%2C489e3ed33d4c1bb47c3afbe30849b42e83771f48
		
			
				
	
	
		
			107 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			107 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";
 | |
| 
 | |
| XPCOMUtils.defineLazyModuleGetter(this, "ExtensionSearchHandler",
 | |
|                                   "resource://gre/modules/ExtensionSearchHandler.jsm");
 | |
| var {
 | |
|   SingletonEventManager,
 | |
| } = ExtensionUtils;
 | |
| 
 | |
| // WeakMap[extension -> keyword]
 | |
| let gKeywordMap = new WeakMap();
 | |
| 
 | |
| this.omnibox = class extends ExtensionAPI {
 | |
|   onManifestEntry(entryName) {
 | |
|     let {extension} = this;
 | |
|     let {manifest} = extension;
 | |
| 
 | |
|     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);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   onShutdown(reason) {
 | |
|     let {extension} = this;
 | |
| 
 | |
|     let keyword = gKeywordMap.get(extension);
 | |
|     if (keyword) {
 | |
|       ExtensionSearchHandler.unregisterKeyword(keyword);
 | |
|       gKeywordMap.delete(extension);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   getAPI(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.sync();
 | |
|           };
 | |
|           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.sync();
 | |
|           };
 | |
|           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.sync(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.sync(text, id);
 | |
|           };
 | |
|           extension.on(ExtensionSearchHandler.MSG_INPUT_CHANGED, listener);
 | |
|           return () => {
 | |
|             extension.off(ExtensionSearchHandler.MSG_INPUT_CHANGED, listener);
 | |
|           };
 | |
|         }).api(),
 | |
|       },
 | |
|     };
 | |
|   }
 | |
| };
 |