| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/app_list/search/mixer.h" | 5 #include "chrome/browser/ui/app_list/search/mixer.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "chrome/browser/ui/app_list/search/chrome_search_result.h" | 12 #include "chrome/browser/ui/app_list/search/chrome_search_result.h" |
| 13 #include "chrome/browser/ui/app_list/search/search_provider.h" | 13 #include "chrome/browser/ui/app_list/search/search_provider.h" |
| 14 | 14 |
| 15 namespace app_list { | 15 namespace app_list { |
| 16 | 16 |
| 17 namespace { | 17 namespace { |
| 18 | 18 |
| 19 // Maximum number of results to show. | 19 // Maximum number of results to show. |
| 20 const size_t kMaxResults = 6; | 20 const size_t kMaxResults = 6; |
| 21 const size_t kMaxMainGroupResults = 4; | 21 const size_t kMaxMainGroupResults = 4; |
| 22 const size_t kMaxWebstoreResults = 2; | 22 const size_t kMaxWebstoreResults = 2; |
| 23 const size_t kMaxPeopleResults = 2; |
| 23 | 24 |
| 24 // A value to indicate no max number of results limit. | 25 // A value to indicate no max number of results limit. |
| 25 const size_t kNoMaxResultsLimit = 0; | 26 const size_t kNoMaxResultsLimit = 0; |
| 26 | 27 |
| 27 // Used for sorting and mixing results. | 28 // Used for sorting and mixing results. |
| 28 struct SortData { | 29 struct SortData { |
| 29 SortData() | 30 SortData() |
| 30 : result(NULL), | 31 : result(NULL), |
| 31 score(0.0) { | 32 score(0.0) { |
| 32 } | 33 } |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 SortedResults results_; | 165 SortedResults results_; |
| 165 | 166 |
| 166 DISALLOW_COPY_AND_ASSIGN(Group); | 167 DISALLOW_COPY_AND_ASSIGN(Group); |
| 167 }; | 168 }; |
| 168 | 169 |
| 169 Mixer::Mixer(AppListModel::SearchResults* ui_results) | 170 Mixer::Mixer(AppListModel::SearchResults* ui_results) |
| 170 : ui_results_(ui_results) {} | 171 : ui_results_(ui_results) {} |
| 171 Mixer::~Mixer() {} | 172 Mixer::~Mixer() {} |
| 172 | 173 |
| 173 void Mixer::Init() { | 174 void Mixer::Init() { |
| 174 groups_.push_back(new Group(kMaxMainGroupResults, 2.0)); | 175 groups_.push_back(new Group(kMaxMainGroupResults, 3.0)); |
| 175 groups_.push_back(new Group(kNoMaxResultsLimit, 1.0)); | 176 groups_.push_back(new Group(kNoMaxResultsLimit, 2.0)); |
| 176 groups_.push_back(new Group(kMaxWebstoreResults, 0.0)); | 177 groups_.push_back(new Group(kMaxWebstoreResults, 1.0)); |
| 178 groups_.push_back(new Group(kMaxPeopleResults, 0.0)); |
| 177 } | 179 } |
| 178 | 180 |
| 179 void Mixer::AddProviderToGroup(GroupId group, SearchProvider* provider) { | 181 void Mixer::AddProviderToGroup(GroupId group, SearchProvider* provider) { |
| 180 size_t group_index = static_cast<size_t>(group); | 182 size_t group_index = static_cast<size_t>(group); |
| 181 groups_[group_index]->AddProvider(provider); | 183 groups_[group_index]->AddProvider(provider); |
| 182 } | 184 } |
| 183 | 185 |
| 184 void Mixer::MixAndPublish(const KnownResults& known_results) { | 186 void Mixer::MixAndPublish(const KnownResults& known_results) { |
| 185 FetchResults(known_results); | 187 FetchResults(known_results); |
| 186 | 188 |
| 187 SortedResults results; | 189 SortedResults results; |
| 188 results.reserve(kMaxResults); | 190 results.reserve(kMaxResults); |
| 189 | 191 |
| 190 // Adds main group and web store results first. | 192 // Adds main group and web store results first. |
| 191 results.insert(results.end(), | 193 results.insert(results.end(), |
| 192 groups_[MAIN_GROUP]->results().begin(), | 194 groups_[MAIN_GROUP]->results().begin(), |
| 193 groups_[MAIN_GROUP]->results().end()); | 195 groups_[MAIN_GROUP]->results().end()); |
| 194 results.insert(results.end(), | 196 results.insert(results.end(), |
| 195 groups_[WEBSTORE_GROUP]->results().begin(), | 197 groups_[WEBSTORE_GROUP]->results().begin(), |
| 196 groups_[WEBSTORE_GROUP]->results().end()); | 198 groups_[WEBSTORE_GROUP]->results().end()); |
| 199 results.insert(results.end(), |
| 200 groups_[PEOPLE_GROUP]->results().begin(), |
| 201 groups_[PEOPLE_GROUP]->results().end()); |
| 197 | 202 |
| 198 // Collapse duplicate apps from local and web store. | 203 // Collapse duplicate apps from local and web store. |
| 199 RemoveDuplicates(&results); | 204 RemoveDuplicates(&results); |
| 200 | 205 |
| 201 DCHECK_GE(kMaxResults, results.size()); | 206 DCHECK_GE(kMaxResults, results.size()); |
| 202 size_t remaining_slots = kMaxResults - results.size(); | 207 size_t remaining_slots = kMaxResults - results.size(); |
| 203 | 208 |
| 204 // Reserves at least one slot for the omnibox result. If there is no available | 209 // Reserves at least one slot for the omnibox result. If there is no available |
| 205 // slot for omnibox results, removes the last one from web store. | 210 // slot for omnibox results, removes the last one from web store. |
| 206 const size_t omnibox_results = groups_[OMNIBOX_GROUP]->results().size(); | 211 const size_t omnibox_results = groups_[OMNIBOX_GROUP]->results().size(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 222 | 227 |
| 223 void Mixer::FetchResults(const KnownResults& known_results) { | 228 void Mixer::FetchResults(const KnownResults& known_results) { |
| 224 for (Groups::iterator group_it = groups_.begin(); | 229 for (Groups::iterator group_it = groups_.begin(); |
| 225 group_it != groups_.end(); | 230 group_it != groups_.end(); |
| 226 ++group_it) { | 231 ++group_it) { |
| 227 (*group_it)->FetchResults(known_results); | 232 (*group_it)->FetchResults(known_results); |
| 228 } | 233 } |
| 229 } | 234 } |
| 230 | 235 |
| 231 } // namespace app_list | 236 } // namespace app_list |
| OLD | NEW |