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