1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_OMNIBOX_API_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_EXTENSIONS_EXTENSION_OMNIBOX_API_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string16.h" 10513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/autocomplete/autocomplete_match.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_function.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Event router class for events related to the omnibox API. 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionOmniboxEventRouter { 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The user has just typed the omnibox keyword. This is sent exactly once in 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // a given input session, before any OnInputChanged events. 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void OnInputStarted( 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile, const std::string& extension_id); 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The user has changed what is typed into the omnibox while in an extension 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // keyword session. Returns true if someone is listening to this event, and 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // thus we have some degree of confidence we'll get a response. 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static bool OnInputChanged( 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile, const std::string& extension_id, 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& input, int suggest_id); 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The user has accepted the omnibox input. 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void OnInputEntered( 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile, const std::string& extension_id, 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& input); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The user has cleared the keyword, or closed the omnibox popup. This is 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sent at most once in a give input session, after any OnInputChanged events. 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void OnInputCancelled( 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile, const std::string& extension_id); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ExtensionOmniboxEventRouter); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass OmniboxSendSuggestionsFunction : public SyncExtensionFunction { 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool RunImpl(); 454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DECLARE_EXTENSION_FUNCTION_NAME("omnibox.sendSuggestions"); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass OmniboxSetDefaultSuggestionFunction : public SyncExtensionFunction { 49201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public: 50201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual bool RunImpl(); 51201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DECLARE_EXTENSION_FUNCTION_NAME("omnibox.setDefaultSuggestion"); 52201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 53201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct ExtensionOmniboxSuggestion { 55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExtensionOmniboxSuggestion(); 56731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ~ExtensionOmniboxSuggestion(); 57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Converts a list of style ranges from the extension into the format expected 594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // by the autocomplete system. 604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool ReadStylesFromValue(const ListValue& value); 614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The text that gets put in the edit box. 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 content; 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The text that is displayed in the drop down. 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 description; 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Contains style ranges for the description. 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ACMatchClassifications description_styles; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct ExtensionOmniboxSuggestions { 73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExtensionOmniboxSuggestions(); 74731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ~ExtensionOmniboxSuggestions(); 75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int request_id; 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<ExtensionOmniboxSuggestion> suggestions; 78731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 79731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick private: 80731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // This class is passed around by pointer. 81731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DISALLOW_COPY_AND_ASSIGN(ExtensionOmniboxSuggestions); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 84201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// If the extension has set a custom default suggestion via 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// omnibox.setDefaultSuggestion, apply that to |match|. Otherwise, do nothing. 86201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid ApplyDefaultSuggestionForExtensionKeyword( 87201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Profile* profile, 88201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const TemplateURL* keyword, 89201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const string16& remaining_input, 90201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AutocompleteMatch* match); 91201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_OMNIBOX_API_H_ 93