diff options
Diffstat (limited to 'chrome/common/extensions')
-rw-r--r-- | chrome/common/extensions/api/extension_api.json | 67 | ||||
-rw-r--r-- | chrome/common/extensions/docs/examples/api/omnibox/background.html | 19 | ||||
-rw-r--r-- | chrome/common/extensions/docs/examples/api/omnibox/manifest.json | 7 | ||||
-rw-r--r-- | chrome/common/extensions/docs/experimental.html | 1 | ||||
-rw-r--r-- | chrome/common/extensions/extension.cc | 12 | ||||
-rw-r--r-- | chrome/common/extensions/extension.h | 5 | ||||
-rw-r--r-- | chrome/common/extensions/extension_constants.cc | 6 | ||||
-rw-r--r-- | chrome/common/extensions/extension_constants.h | 3 |
8 files changed, 120 insertions, 0 deletions
diff --git a/chrome/common/extensions/api/extension_api.json b/chrome/common/extensions/api/extension_api.json index c387aaaf..c6094b6 100644 --- a/chrome/common/extensions/api/extension_api.json +++ b/chrome/common/extensions/api/extension_api.json @@ -3015,5 +3015,72 @@ } ], "events": [] + }, + { + "namespace": "experimental.omnibox", + "types": [], + "functions": [ + { + "name": "sendSuggestions", + "nodoc": true, + "type": "function", + "description": "", + "parameters": [ + {"type": "integer", "name": "requestId"}, + { + "type": "array", + "description": "Array of suggest results", + "items": { + "type": "object", + "properties": { + "content": {"type": "string"}, + "description": {"type": "string"} + } + } + } + ] + } + ], + "events": [ + { + "name": "onInputChanged", + "type": "function", + "description": "User has changed what is typed into the omnibox.", + "parameters": [ + { + "type": "string", + "name": "text" + }, + { + "type": "function", + "name": "suggest", + "parameters": [ + { + "type": "array", + "description": "Array of suggest results", + "items": { + "type": "object", + "properties": { + "content": {"type": "string"}, + "description": {"type": "string"} + } + } + } + ] + } + ] + }, + { + "name": "onInputEntered", + "type": "function", + "description": "User has accepted what is typed into the omnibox.", + "parameters": [ + { + "type": "string", + "name": "text" + } + ] + } + ] } ] diff --git a/chrome/common/extensions/docs/examples/api/omnibox/background.html b/chrome/common/extensions/docs/examples/api/omnibox/background.html new file mode 100644 index 0000000..ff83ff2 --- /dev/null +++ b/chrome/common/extensions/docs/examples/api/omnibox/background.html @@ -0,0 +1,19 @@ +<script> +// This event is fired each time the user updates the text in the omnibox, +// as long as the extension's keyword mode is still active. +chrome.experimental.omnibox.onInputChanged.addListener( + function(text, suggest) { + console.log('inputChanged: ' + text); + suggest([ + {content: text + " one", description: "the first one"}, + {content: text + " number two", description: "the second entry"} + ]); + }); + +// This event is fired with the user accepts the input in the omnibox. +chrome.experimental.omnibox.onInputEntered.addListener( + function(text) { + console.log('inputEntered: ' + text); + alert('You just typed "' + text + '"'); + }); +</script> diff --git a/chrome/common/extensions/docs/examples/api/omnibox/manifest.json b/chrome/common/extensions/docs/examples/api/omnibox/manifest.json new file mode 100644 index 0000000..2b63ca2 --- /dev/null +++ b/chrome/common/extensions/docs/examples/api/omnibox/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Omnibox Example", + "version": "1.0", + "permissions": [ "experimental" ], + "background_page": "background.html", + "omnibox_keyword": "omnix" +} diff --git a/chrome/common/extensions/docs/experimental.html b/chrome/common/extensions/docs/experimental.html index 8dd43e7..49a7aa4 100644 --- a/chrome/common/extensions/docs/experimental.html +++ b/chrome/common/extensions/docs/experimental.html @@ -265,6 +265,7 @@ on the following experimental APIs: <a href="experimental.contextMenu.html">experimental.contextMenu</a></li><li> <a href="experimental.cookies.html">experimental.cookies</a></li><li> <a href="experimental.infobars.html">experimental.infobars</a></li><li> + <a href="experimental.omnibox.html">experimental.omnibox</a></li><li> <a href="experimental.processes.html">experimental.processes</a></li> </ul> diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc index 89d7095..f68445e 100644 --- a/chrome/common/extensions/extension.cc +++ b/chrome/common/extensions/extension.cc @@ -1456,6 +1456,18 @@ bool Extension::InitFromValue(const DictionaryValue& source, bool require_key, } } + if (source.HasKey(keys::kOmniboxKeyword)) { + if (!source.GetString(keys::kOmniboxKeyword, &omnibox_keyword_) || + omnibox_keyword_.empty()) { + *error = errors::kInvalidOmniboxKeyword; + return false; + } + if (!HasApiPermission(Extension::kExperimentalPermission)) { + *error = errors::kOmniboxExperimental; + return false; + } + } + if (!CheckAppsAreEnabled(manifest_value_.get(), error) || !LoadWebContentEnabled(manifest_value_.get(), error) || !LoadWebOrigin(manifest_value_.get(), error) || diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h index a135df5..49d6288 100644 --- a/chrome/common/extensions/extension.h +++ b/chrome/common/extensions/extension.h @@ -327,6 +327,8 @@ class Extension { return chrome_url_overrides_; } + const std::string omnibox_keyword() const { return omnibox_keyword_; } + bool web_content_enabled() const { return web_content_enabled_; } const ExtensionExtent& web_extent() const { return web_extent_; } @@ -528,6 +530,9 @@ class Extension { // resource to the cached image. ImageCache image_cache_; + // The omnibox keyword for this extension, or empty if there is none. + std::string omnibox_keyword_; + // Runtime data: // True if the background page is ready. diff --git a/chrome/common/extensions/extension_constants.cc b/chrome/common/extensions/extension_constants.cc index 174701c..d0a64e1 100644 --- a/chrome/common/extensions/extension_constants.cc +++ b/chrome/common/extensions/extension_constants.cc @@ -62,6 +62,7 @@ const wchar_t* kWebContent = L"web_content"; const wchar_t* kWebContentEnabled = L"web_content.enabled"; const wchar_t* kWebOrigin = L"web_content.origin"; const wchar_t* kWebPaths = L"web_content.paths"; +const wchar_t* kOmniboxKeyword = L"omnibox_keyword"; } // namespace extension_manifest_keys namespace extension_manifest_values { @@ -244,6 +245,11 @@ const char* kCannotAccessPage = "Cannot access contents of url \"*\". " const char* kCannotScriptGallery = "The extensions gallery cannot be scripted."; const char* kWebContentMustBeEnabled = "The 'web_content.enabled' property " "must be set to true in order to use any other web content features."; +const char* kInvalidOmniboxKeyword = + "Invalid value for 'omnibox_keyword'."; +const char* kOmniboxExperimental = + "You must request the 'experimental' permission in order to use the" + " omnibox API."; } // namespace extension_manifest_errors namespace extension_urls { diff --git a/chrome/common/extensions/extension_constants.h b/chrome/common/extensions/extension_constants.h index 2353b35..35c4555 100644 --- a/chrome/common/extensions/extension_constants.h +++ b/chrome/common/extensions/extension_constants.h @@ -64,6 +64,7 @@ namespace extension_manifest_keys { extern const wchar_t* kWebLaunchUrl; extern const wchar_t* kWebOrigin; extern const wchar_t* kWebPaths; + extern const wchar_t* kOmniboxKeyword; } // namespace extension_manifest_keys // Some values expected in manifests. @@ -161,6 +162,8 @@ namespace extension_manifest_errors { extern const char* kCannotAccessPage; extern const char* kCannotScriptGallery; extern const char* kWebContentMustBeEnabled; + extern const char* kInvalidOmniboxKeyword; + extern const char* kOmniboxExperimental; } // namespace extension_manifest_errors namespace extension_urls { |