#include "chrome/browser/autocomplete/autocomplete_classifier.h"
#include "chrome/browser/autocomplete/autocomplete_controller.h"
-#include "chrome/browser/autocomplete/autocomplete_input.h"
-#include "chrome/browser/autocomplete/autocomplete_match.h"
-#include "chrome/browser/ui/app_list/search/chrome_search_result.h"
-#include "chrome/browser/ui/browser_navigator.h"
-#include "chrome/common/metrics/proto/omnibox_event.pb.h"
+#include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h"
+#include "chrome/browser/bookmarks/bookmark_model_factory.h"
+#include "chrome/browser/search_engines/template_url_service_factory.h"
+#include "chrome/browser/ui/app_list/app_list_controller_delegate.h"
+#include "chrome/browser/ui/app_list/search/search_util.h"
+#include "components/bookmarks/browser/bookmark_model.h"
+#include "components/metrics/proto/omnibox_event.pb.h"
+#include "components/omnibox/autocomplete_input.h"
+#include "components/omnibox/autocomplete_match.h"
#include "grit/theme_resources.h"
+#include "ui/app_list/search_result.h"
#include "ui/base/resource/resource_bundle.h"
namespace app_list {
}
}
-class OmniboxResult : public ChromeSearchResult {
+class OmniboxResult : public SearchResult {
public:
- OmniboxResult(Profile* profile, const AutocompleteMatch& match)
+ OmniboxResult(Profile* profile,
+ AppListControllerDelegate* list_controller,
+ AutocompleteController* autocomplete_controller,
+ const AutocompleteMatch& match)
: profile_(profile),
+ list_controller_(list_controller),
+ autocomplete_controller_(autocomplete_controller),
match_(match) {
- set_id(match.destination_url.spec());
+ if (match_.search_terms_args) {
+ match_.search_terms_args->from_app_list = true;
+ autocomplete_controller_->UpdateMatchDestinationURL(
+ *match_.search_terms_args, &match_);
+ }
+ set_id(match_.destination_url.spec());
// Derive relevance from omnibox relevance and normalize it to [0, 1].
// The magic number 1500 is the highest score of an omnibox result.
// See comments in autocomplete_provider.h.
- set_relevance(match.relevance / 1500.0);
+ set_relevance(match_.relevance / 1500.0);
UpdateIcon();
UpdateTitleAndDetails();
}
- virtual ~OmniboxResult() {}
-
- // ChromeSearchResult overides:
- virtual void Open(int event_flags) OVERRIDE {
- chrome::NavigateParams params(profile_,
- match_.destination_url,
- match_.transition);
- params.disposition = ui::DispositionFromEventFlags(event_flags);
- chrome::Navigate(¶ms);
- }
-
- virtual void InvokeAction(int action_index, int event_flags) OVERRIDE {}
-
- virtual scoped_ptr<ChromeSearchResult> Duplicate() OVERRIDE {
- return scoped_ptr<ChromeSearchResult>(
- new OmniboxResult(profile_, match_)).Pass();
+ ~OmniboxResult() override {}
+
+ // SearchResult overrides:
+ void Open(int event_flags) override {
+ RecordHistogram(OMNIBOX_SEARCH_RESULT);
+ list_controller_->OpenURL(profile_,
+ match_.destination_url,
+ match_.transition,
+ ui::DispositionFromEventFlags(event_flags));
}
- virtual ChromeSearchResultType GetType() OVERRIDE {
- return OMNIBOX_SEARCH_RESULT;
+ scoped_ptr<SearchResult> Duplicate() override {
+ return scoped_ptr<SearchResult>(new OmniboxResult(
+ profile_, list_controller_, autocomplete_controller_, match_));
}
private:
void UpdateIcon() {
- int resource_id = match_.starred ?
+ BookmarkModel* bookmark_model =
+ BookmarkModelFactory::GetForProfile(profile_);
+ bool is_bookmarked =
+ bookmark_model && bookmark_model->IsBookmarked(match_.destination_url);
+ int resource_id = is_bookmarked ?
IDR_OMNIBOX_STAR : AutocompleteMatch::TypeToIcon(match_.type);
SetIcon(*ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
resource_id));
}
Profile* profile_;
+ AppListControllerDelegate* list_controller_;
+ AutocompleteController* autocomplete_controller_;
AutocompleteMatch match_;
DISALLOW_COPY_AND_ASSIGN(OmniboxResult);
} // namespace
-OmniboxProvider::OmniboxProvider(Profile* profile)
+OmniboxProvider::OmniboxProvider(Profile* profile,
+ AppListControllerDelegate* list_controller)
: profile_(profile),
+ list_controller_(list_controller),
controller_(new AutocompleteController(
profile,
+ TemplateURLServiceFactory::GetForProfile(profile),
this,
- AutocompleteClassifier::kDefaultOmniboxProviders)) {
+ AutocompleteClassifier::kDefaultOmniboxProviders &
+ ~AutocompleteProvider::TYPE_ZERO_SUGGEST)) {
}
OmniboxProvider::~OmniboxProvider() {}
void OmniboxProvider::Start(const base::string16& query) {
- controller_->Start(AutocompleteInput(query,
- base::string16::npos,
- base::string16(),
- GURL(),
- AutocompleteInput::INVALID_SPEC,
- false,
- false,
- true,
- AutocompleteInput::ALL_MATCHES));
+ controller_->Start(AutocompleteInput(
+ query, base::string16::npos, std::string(), GURL(),
+ metrics::OmniboxEventProto::INVALID_SPEC, false, false, true, true,
+ ChromeAutocompleteSchemeClassifier(profile_)));
}
void OmniboxProvider::Stop() {
if (!it->destination_url.is_valid())
continue;
- Add(scoped_ptr<ChromeSearchResult>(
- new OmniboxResult(profile_, *it)).Pass());
+ Add(scoped_ptr<SearchResult>(
+ new OmniboxResult(profile_, list_controller_, controller_.get(), *it)));
}
}