, listener); }, convert(_fire) { fire = _fire; }, }; }, onDeleteSuggestion({ fire }) { let { extension } = this; let listener = (eventName, text) => { fire.sync(text); }; extension.on(ExtensionSearchHandler.MSG_INPUT_DELETED, listener); return { unregister() { extension.off(ExtensionSearchHandler.MSG_INPUT_DELETED, listener); }, convert(_fire) { fire = _fire; }, }; }, }; onManifestEntry() { 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); this.keyword = keyword; } catch (e) { extension.manifestError(e.message); } } onShutdown() { ExtensionSearchHandler.unregisterKeyword(this.keyword); } getAPI(context) { return { omnibox: { setDefaultSuggestion: suggestion => { try { // This will throw if the keyword failed to register. ExtensionSearchHandler.setDefaultSuggestion( this.keyword, suggestion ); } catch (e) { return Promise.reject(e.message); } }, onInputStarted: new EventManager({ context, module: "omnibox", event: "onInputStarted", extensionApi: this, }).api(), onInputCancelled: new EventManager({ context, module: "omnibox", event: "onInputCancelled", extensionApi: this, }).api(), onInputEntered: new EventManager({ context, module: "omnibox", event: "onInputEntered", extensionApi: this, inputHandling: true, }).api(), onInputChanged: new EventManager({ context, module: "omnibox", event: "onInputChanged", extensionApi: this, }).api(), onDeleteSuggestion: new EventManager({ context, module: "omnibox", event: "onDeleteSuggestion", extensionApi: this, }).api(), // Internal APIs. addSuggestions: (id, suggestions) => { try { ExtensionSearchHandler.addSuggestions( this.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. } }, }, }; } }; PK