Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(758)

Unified Diff: chrome/browser/extensions/extension_omnibox_api.cc

Issue 10265022: Moving extensions inside chrome/browser/extensions/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Re-synced with the current trunk Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_omnibox_api.cc
diff --git a/chrome/browser/extensions/extension_omnibox_api.cc b/chrome/browser/extensions/extension_omnibox_api.cc
deleted file mode 100644
index a83e57707820e967336de7d5a8324590b2567b19..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/extension_omnibox_api.cc
+++ /dev/null
@@ -1,297 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/extensions/extension_omnibox_api.h"
-
-#include "base/json/json_writer.h"
-#include "base/lazy_instance.h"
-#include "base/metrics/histogram.h"
-#include "base/string_util.h"
-#include "base/utf_string_conversions.h"
-#include "base/values.h"
-#include "chrome/browser/extensions/extension_event_router.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/search_engines/template_url.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/webui/ntp/app_launcher_handler.h"
-#include "chrome/common/chrome_notification_types.h"
-#include "chrome/common/extensions/extension_constants.h"
-#include "content/public/browser/notification_service.h"
-
-namespace events {
-const char kOnInputStarted[] = "omnibox.onInputStarted";
-const char kOnInputChanged[] = "omnibox.onInputChanged";
-const char kOnInputEntered[] = "omnibox.onInputEntered";
-const char kOnInputCancelled[] = "omnibox.onInputCancelled";
-}; // namespace events
-
-namespace {
-const char kDescriptionStylesOrderError[] =
- "Suggestion descriptionStyles must be in increasing non-overlapping order.";
-const char kDescriptionStylesLengthError[] =
- "Suggestion descriptionStyles contains an offset longer than the"
- " description text";
-
-const char kSuggestionContent[] = "content";
-const char kSuggestionDescription[] = "description";
-const char kSuggestionDescriptionStyles[] = "descriptionStyles";
-const char kDescriptionStylesType[] = "type";
-const char kDescriptionStylesOffset[] = "offset";
-const char kDescriptionStylesLength[] = "length";
-
-static base::LazyInstance<base::PropertyAccessor<ExtensionOmniboxSuggestion> >
- g_extension_omnibox_suggestion_property_accessor =
- LAZY_INSTANCE_INITIALIZER;
-
-base::PropertyAccessor<ExtensionOmniboxSuggestion>& GetPropertyAccessor() {
- return g_extension_omnibox_suggestion_property_accessor.Get();
-}
-
-// Returns the suggestion object set by the extension via the
-// omnibox.setDefaultSuggestion call, or NULL if it was never set.
-const ExtensionOmniboxSuggestion* GetDefaultSuggestionForExtension(
- Profile* profile, const std::string& extension_id) {
- const Extension* extension =
- profile->GetExtensionService()->GetExtensionById(extension_id, false);
- if (!extension)
- return NULL;
- return GetPropertyAccessor().GetProperty(
- profile->GetExtensionService()->GetPropertyBag(extension));
-}
-
-}; // namespace
-
-// static
-void ExtensionOmniboxEventRouter::OnInputStarted(
- Profile* profile, const std::string& extension_id) {
- profile->GetExtensionEventRouter()->DispatchEventToExtension(
- extension_id, events::kOnInputStarted, "[]", profile, GURL());
-}
-
-// static
-bool ExtensionOmniboxEventRouter::OnInputChanged(
- Profile* profile, const std::string& extension_id,
- const std::string& input, int suggest_id) {
- if (!profile->GetExtensionEventRouter()->ExtensionHasEventListener(
- extension_id, events::kOnInputChanged))
- return false;
-
- ListValue args;
- args.Set(0, Value::CreateStringValue(input));
- args.Set(1, Value::CreateIntegerValue(suggest_id));
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- profile->GetExtensionEventRouter()->DispatchEventToExtension(
- extension_id, events::kOnInputChanged, json_args, profile, GURL());
- return true;
-}
-
-// static
-void ExtensionOmniboxEventRouter::OnInputEntered(
- Profile* profile, const std::string& extension_id,
- const std::string& input) {
- ListValue args;
- args.Set(0, Value::CreateStringValue(input));
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- profile->GetExtensionEventRouter()->DispatchEventToExtension(
- extension_id, events::kOnInputEntered, json_args, profile, GURL());
-
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_EXTENSION_OMNIBOX_INPUT_ENTERED,
- content::Source<Profile>(profile),
- content::NotificationService::NoDetails());
-}
-
-// static
-void ExtensionOmniboxEventRouter::OnInputCancelled(
- Profile* profile, const std::string& extension_id) {
- profile->GetExtensionEventRouter()->DispatchEventToExtension(
- extension_id, events::kOnInputCancelled, "[]", profile, GURL());
-}
-
-bool OmniboxSendSuggestionsFunction::RunImpl() {
- ExtensionOmniboxSuggestions suggestions;
- ListValue* suggestions_value;
- EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &suggestions.request_id));
- EXTENSION_FUNCTION_VALIDATE(args_->GetList(1, &suggestions_value));
-
- suggestions.suggestions.resize(suggestions_value->GetSize());
- for (size_t i = 0; i < suggestions_value->GetSize(); ++i) {
- ExtensionOmniboxSuggestion& suggestion = suggestions.suggestions[i];
- DictionaryValue* suggestion_value;
- EXTENSION_FUNCTION_VALIDATE(suggestions_value->GetDictionary(
- i, &suggestion_value));
- EXTENSION_FUNCTION_VALIDATE(suggestion_value->GetString(
- kSuggestionContent, &suggestion.content));
- EXTENSION_FUNCTION_VALIDATE(suggestion_value->GetString(
- kSuggestionDescription, &suggestion.description));
-
- if (suggestion_value->HasKey(kSuggestionDescriptionStyles)) {
- ListValue* styles;
- EXTENSION_FUNCTION_VALIDATE(
- suggestion_value->GetList(kSuggestionDescriptionStyles, &styles));
- EXTENSION_FUNCTION_VALIDATE(suggestion.ReadStylesFromValue(*styles));
- } else {
- suggestion.description_styles.clear();
- suggestion.description_styles.push_back(
- ACMatchClassification(0, ACMatchClassification::NONE));
- }
- }
-
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_EXTENSION_OMNIBOX_SUGGESTIONS_READY,
- content::Source<Profile>(profile_->GetOriginalProfile()),
- content::Details<ExtensionOmniboxSuggestions>(&suggestions));
-
- return true;
-}
-
-bool OmniboxSetDefaultSuggestionFunction::RunImpl() {
- ExtensionOmniboxSuggestion suggestion;
- DictionaryValue* suggestion_value;
- EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &suggestion_value));
- EXTENSION_FUNCTION_VALIDATE(suggestion_value->GetString(
- kSuggestionDescription, &suggestion.description));
-
- if (suggestion_value->HasKey(kSuggestionDescriptionStyles)) {
- ListValue* styles;
- EXTENSION_FUNCTION_VALIDATE(
- suggestion_value->GetList(kSuggestionDescriptionStyles, &styles));
- EXTENSION_FUNCTION_VALIDATE(suggestion.ReadStylesFromValue(*styles));
- } else {
- suggestion.description_styles.clear();
- suggestion.description_styles.push_back(
- ACMatchClassification(0, ACMatchClassification::NONE));
- }
-
- // Store the suggestion in the extension's runtime data.
- GetPropertyAccessor().SetProperty(
- profile_->GetExtensionService()->GetPropertyBag(GetExtension()),
- suggestion);
-
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_EXTENSION_OMNIBOX_DEFAULT_SUGGESTION_CHANGED,
- content::Source<Profile>(profile_->GetOriginalProfile()),
- content::NotificationService::NoDetails());
-
- return true;
-}
-
-ExtensionOmniboxSuggestion::ExtensionOmniboxSuggestion() {}
-
-ExtensionOmniboxSuggestion::~ExtensionOmniboxSuggestion() {}
-
-bool ExtensionOmniboxSuggestion::ReadStylesFromValue(
- const ListValue& styles_value) {
- description_styles.clear();
-
- // Step 1: Build a vector of styles, 1 per character of description text.
- std::vector<int> styles;
- styles.resize(description.length()); // sets all styles to 0
-
- for (size_t i = 0; i < styles_value.GetSize(); ++i) {
- DictionaryValue* style;
- std::string type;
- int offset;
- int length;
- if (!styles_value.GetDictionary(i, &style))
- return false;
- if (!style->GetString(kDescriptionStylesType, &type))
- return false;
- if (!style->GetInteger(kDescriptionStylesOffset, &offset))
- return false;
- if (!style->GetInteger(kDescriptionStylesLength, &length) || length < 0)
- length = description.length();
-
- if (offset < 0)
- offset = std::max(0, static_cast<int>(description.length()) + offset);
-
- int type_class =
- (type == "url") ? ACMatchClassification::URL :
- (type == "match") ? ACMatchClassification::MATCH :
- (type == "dim") ? ACMatchClassification::DIM : -1;
- if (type_class == -1)
- return false;
-
- for (int j = offset;
- j < offset + length && j < static_cast<int>(styles.size()); ++j)
- styles[j] |= type_class;
- }
-
- // Step 2: Convert the vector into continuous runs of common styles.
- for (size_t i = 0; i < styles.size(); ++i) {
- if (i == 0 || styles[i] != styles[i-1])
- description_styles.push_back(ACMatchClassification(i, styles[i]));
- }
-
- return true;
-}
-
-ExtensionOmniboxSuggestions::ExtensionOmniboxSuggestions() : request_id(0) {}
-
-ExtensionOmniboxSuggestions::~ExtensionOmniboxSuggestions() {}
-
-void ApplyDefaultSuggestionForExtensionKeyword(
- Profile* profile,
- const TemplateURL* keyword,
- const string16& remaining_input,
- AutocompleteMatch* match) {
- DCHECK(keyword->IsExtensionKeyword());
- const ExtensionOmniboxSuggestion* suggestion =
- GetDefaultSuggestionForExtension(profile, keyword->GetExtensionId());
- if (!suggestion)
- return; // fall back to the universal default
-
- const string16 kPlaceholderText(ASCIIToUTF16("%s"));
- const string16 kReplacementText(ASCIIToUTF16("<input>"));
-
- string16 description = suggestion->description;
- ACMatchClassifications& description_styles = match->contents_class;
- description_styles = suggestion->description_styles;
-
- // Replace "%s" with the user's input and adjust the style offsets to the
- // new length of the description.
- size_t placeholder(suggestion->description.find(kPlaceholderText, 0));
- if (placeholder != string16::npos) {
- string16 replacement =
- remaining_input.empty() ? kReplacementText : remaining_input;
- description.replace(placeholder, kPlaceholderText.length(), replacement);
-
- for (size_t i = 0; i < description_styles.size(); ++i) {
- if (description_styles[i].offset > placeholder)
- description_styles[i].offset += replacement.length() - 2;
- }
- }
-
- match->contents.assign(description);
-}
-
-void LaunchAppFromOmnibox(const AutocompleteMatch& match,
- Profile* profile,
- WindowOpenDisposition disposition) {
- ExtensionService* service = profile->GetExtensionService();
- const Extension* extension =
- service->GetInstalledApp(match.destination_url);
- // While the Omnibox popup is open, the extension can be updated, changing
- // its URL and leaving us with no extension being found. In this case, we
- // ignore the request.
- if (!extension)
- return;
-
- AppLauncherHandler::RecordAppLaunchType(
- extension_misc::APP_LAUNCH_OMNIBOX_APP);
-
- // Look at the preferences to find the right launch container. If no
- // preference is set, launch as a regular tab.
- extension_misc::LaunchContainer launch_container =
- service->extension_prefs()->GetLaunchContainer(
- extension, ExtensionPrefs::LAUNCH_REGULAR);
-
- Browser::OpenApplication(profile, extension, launch_container, GURL(),
- disposition);
-}
« no previous file with comments | « chrome/browser/extensions/extension_omnibox_api.h ('k') | chrome/browser/extensions/extension_omnibox_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698