| 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> |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 Group(size_t max_results, double boost) | 99 Group(size_t max_results, double boost) |
| 100 : max_results_(max_results), | 100 : max_results_(max_results), |
| 101 boost_(boost) { | 101 boost_(boost) { |
| 102 } | 102 } |
| 103 ~Group() {} | 103 ~Group() {} |
| 104 | 104 |
| 105 void AddProvider(SearchProvider* provider) { | 105 void AddProvider(SearchProvider* provider) { |
| 106 providers_.push_back(provider); | 106 providers_.push_back(provider); |
| 107 } | 107 } |
| 108 | 108 |
| 109 void FetchResults() { | 109 void FetchResults(const KnownResults& known_results) { |
| 110 results_.clear(); | 110 results_.clear(); |
| 111 | 111 |
| 112 for (Providers::const_iterator provider_it = providers_.begin(); | 112 for (Providers::const_iterator provider_it = providers_.begin(); |
| 113 provider_it != providers_.end(); | 113 provider_it != providers_.end(); |
| 114 ++provider_it) { | 114 ++provider_it) { |
| 115 for (SearchProvider::Results::const_iterator | 115 for (SearchProvider::Results::const_iterator |
| 116 result_it = (*provider_it)->results().begin(); | 116 result_it = (*provider_it)->results().begin(); |
| 117 result_it != (*provider_it)->results().end(); | 117 result_it != (*provider_it)->results().end(); |
| 118 ++result_it) { | 118 ++result_it) { |
| 119 DCHECK_GE((*result_it)->relevance(), 0.0); | 119 DCHECK_GE((*result_it)->relevance(), 0.0); |
| 120 DCHECK_LE((*result_it)->relevance(), 1.0); | 120 DCHECK_LE((*result_it)->relevance(), 1.0); |
| 121 DCHECK(!(*result_it)->id().empty()); | 121 DCHECK(!(*result_it)->id().empty()); |
| 122 | 122 |
| 123 double boost = boost_; |
| 124 KnownResults::const_iterator known_it = |
| 125 known_results.find((*result_it)->id()); |
| 126 if (known_it != known_results.end()) { |
| 127 switch (known_it->second) { |
| 128 case PERFECT_PRIMARY: |
| 129 boost = 4.0; |
| 130 break; |
| 131 case PREFIX_PRIMARY: |
| 132 boost = 3.75; |
| 133 break; |
| 134 case PERFECT_SECONDARY: |
| 135 boost = 3.25; |
| 136 break; |
| 137 case PREFIX_SECONDARY: |
| 138 boost = 3.0; |
| 139 break; |
| 140 case UNKNOWN_RESULT: |
| 141 NOTREACHED() << "Unknown result in KnownResults?"; |
| 142 break; |
| 143 } |
| 144 } |
| 145 |
| 123 results_.push_back( | 146 results_.push_back( |
| 124 SortData(*result_it, (*result_it)->relevance() + boost_)); | 147 SortData(*result_it, (*result_it)->relevance() + boost)); |
| 125 } | 148 } |
| 126 } | 149 } |
| 127 | 150 |
| 128 std::sort(results_.begin(), results_.end()); | 151 std::sort(results_.begin(), results_.end()); |
| 129 if (max_results_ != kNoMaxResultsLimit && results_.size() > max_results_) | 152 if (max_results_ != kNoMaxResultsLimit && results_.size() > max_results_) |
| 130 results_.resize(max_results_); | 153 results_.resize(max_results_); |
| 131 } | 154 } |
| 132 | 155 |
| 133 const SortedResults& results() const { return results_; } | 156 const SortedResults& results() const { return results_; } |
| 134 | 157 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 151 groups_.push_back(new Group(kMaxMainGroupResults, 2.0)); | 174 groups_.push_back(new Group(kMaxMainGroupResults, 2.0)); |
| 152 groups_.push_back(new Group(kNoMaxResultsLimit, 1.0)); | 175 groups_.push_back(new Group(kNoMaxResultsLimit, 1.0)); |
| 153 groups_.push_back(new Group(kMaxWebstoreResults, 0.0)); | 176 groups_.push_back(new Group(kMaxWebstoreResults, 0.0)); |
| 154 } | 177 } |
| 155 | 178 |
| 156 void Mixer::AddProviderToGroup(GroupId group, SearchProvider* provider) { | 179 void Mixer::AddProviderToGroup(GroupId group, SearchProvider* provider) { |
| 157 size_t group_index = static_cast<size_t>(group); | 180 size_t group_index = static_cast<size_t>(group); |
| 158 groups_[group_index]->AddProvider(provider); | 181 groups_[group_index]->AddProvider(provider); |
| 159 } | 182 } |
| 160 | 183 |
| 161 void Mixer::MixAndPublish() { | 184 void Mixer::MixAndPublish(const KnownResults& known_results) { |
| 162 FetchResults(); | 185 FetchResults(known_results); |
| 163 | 186 |
| 164 SortedResults results; | 187 SortedResults results; |
| 165 results.reserve(kMaxResults); | 188 results.reserve(kMaxResults); |
| 166 | 189 |
| 167 // Adds main group and web store results first. | 190 // Adds main group and web store results first. |
| 168 results.insert(results.end(), | 191 results.insert(results.end(), |
| 169 groups_[MAIN_GROUP]->results().begin(), | 192 groups_[MAIN_GROUP]->results().begin(), |
| 170 groups_[MAIN_GROUP]->results().end()); | 193 groups_[MAIN_GROUP]->results().end()); |
| 171 results.insert(results.end(), | 194 results.insert(results.end(), |
| 172 groups_[WEBSTORE_GROUP]->results().begin(), | 195 groups_[WEBSTORE_GROUP]->results().begin(), |
| (...skipping 17 matching lines...) Expand all Loading... |
| 190 groups_[OMNIBOX_GROUP]->results().begin() + remaining_slots); | 213 groups_[OMNIBOX_GROUP]->results().begin() + remaining_slots); |
| 191 | 214 |
| 192 std::sort(results.begin(), results.end()); | 215 std::sort(results.begin(), results.end()); |
| 193 RemoveDuplicates(&results); | 216 RemoveDuplicates(&results); |
| 194 if (results.size() > kMaxResults) | 217 if (results.size() > kMaxResults) |
| 195 results.resize(kMaxResults); | 218 results.resize(kMaxResults); |
| 196 | 219 |
| 197 Publish(results, ui_results_); | 220 Publish(results, ui_results_); |
| 198 } | 221 } |
| 199 | 222 |
| 200 void Mixer::FetchResults() { | 223 void Mixer::FetchResults(const KnownResults& known_results) { |
| 201 for (Groups::iterator group_it = groups_.begin(); | 224 for (Groups::iterator group_it = groups_.begin(); |
| 202 group_it != groups_.end(); | 225 group_it != groups_.end(); |
| 203 ++group_it) { | 226 ++group_it) { |
| 204 (*group_it)->FetchResults(); | 227 (*group_it)->FetchResults(known_results); |
| 205 } | 228 } |
| 206 } | 229 } |
| 207 | 230 |
| 208 } // namespace app_list | 231 } // namespace app_list |
| OLD | NEW |