Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / app_list / search / omnibox_provider.cc
index 4ca991c..e32a7b9 100644 (file)
@@ -6,12 +6,17 @@
 
 #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 {
@@ -61,46 +66,54 @@ void ACMatchClassificationsToTags(
   }
 }
 
-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(&params);
-  }
-
-  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));
@@ -123,6 +136,8 @@ class OmniboxResult : public ChromeSearchResult {
   }
 
   Profile* profile_;
+  AppListControllerDelegate* list_controller_;
+  AutocompleteController* autocomplete_controller_;
   AutocompleteMatch match_;
 
   DISALLOW_COPY_AND_ASSIGN(OmniboxResult);
@@ -130,26 +145,25 @@ class OmniboxResult : public ChromeSearchResult {
 
 }  // 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() {
@@ -164,8 +178,8 @@ void OmniboxProvider::PopulateFromACResult(const AutocompleteResult& result) {
     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)));
   }
 }