OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/search_engines/template_url_table_model.h" | 5 #include "chrome/browser/ui/search_engines/template_url_table_model.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/i18n/rtl.h" | 10 #include "base/i18n/rtl.h" |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
124 template_url_service_(template_url_service), | 124 template_url_service_(template_url_service), |
125 favicon_service_(favicon_service) { | 125 favicon_service_(favicon_service) { |
126 DCHECK(template_url_service); | 126 DCHECK(template_url_service); |
127 template_url_service_->Load(); | 127 template_url_service_->Load(); |
128 template_url_service_->AddObserver(this); | 128 template_url_service_->AddObserver(this); |
129 Reload(); | 129 Reload(); |
130 } | 130 } |
131 | 131 |
132 TemplateURLTableModel::~TemplateURLTableModel() { | 132 TemplateURLTableModel::~TemplateURLTableModel() { |
133 template_url_service_->RemoveObserver(this); | 133 template_url_service_->RemoveObserver(this); |
134 base::STLDeleteElements(&entries_); | |
135 } | 134 } |
136 | 135 |
137 void TemplateURLTableModel::Reload() { | 136 void TemplateURLTableModel::Reload() { |
138 base::STLDeleteElements(&entries_); | 137 entries_.clear(); |
139 | 138 |
140 TemplateURLService::TemplateURLVector urls = | 139 TemplateURLService::TemplateURLVector urls = |
141 template_url_service_->GetTemplateURLs(); | 140 template_url_service_->GetTemplateURLs(); |
142 | 141 |
143 std::vector<ModelEntry*> default_entries, other_entries, extension_entries; | 142 std::vector<std::unique_ptr<ModelEntry>> default_entries, other_entries, |
143 extension_entries; | |
144 // Keywords that can be made the default first. | 144 // Keywords that can be made the default first. |
145 for (TemplateURLService::TemplateURLVector::iterator i = urls.begin(); | 145 for (auto i = urls.begin(); i != urls.end(); ++i) { |
Nico
2016/10/24 18:41:02
nit: foreach
Avi (use Gerrit)
2016/10/24 19:15:37
Done.
| |
146 i != urls.end(); ++i) { | |
147 TemplateURL* template_url = *i; | 146 TemplateURL* template_url = *i; |
148 // NOTE: we don't use ShowInDefaultList here to avoid items bouncing around | 147 // NOTE: we don't use ShowInDefaultList here to avoid items bouncing around |
149 // the lists while editing. | 148 // the lists while editing. |
150 if (template_url->show_in_default_list()) | 149 if (template_url->show_in_default_list()) |
151 default_entries.push_back(new ModelEntry(this, template_url)); | 150 default_entries.push_back( |
151 base::MakeUnique<ModelEntry>(this, template_url)); | |
152 else if (template_url->type() == TemplateURL::OMNIBOX_API_EXTENSION) | 152 else if (template_url->type() == TemplateURL::OMNIBOX_API_EXTENSION) |
153 extension_entries.push_back(new ModelEntry(this, template_url)); | 153 extension_entries.push_back( |
154 base::MakeUnique<ModelEntry>(this, template_url)); | |
154 else | 155 else |
155 other_entries.push_back(new ModelEntry(this, template_url)); | 156 other_entries.push_back(base::MakeUnique<ModelEntry>(this, template_url)); |
156 } | 157 } |
157 | 158 |
158 last_search_engine_index_ = static_cast<int>(default_entries.size()); | 159 last_search_engine_index_ = static_cast<int>(default_entries.size()); |
159 last_other_engine_index_ = last_search_engine_index_ + | 160 last_other_engine_index_ = last_search_engine_index_ + |
160 static_cast<int>(other_entries.size()); | 161 static_cast<int>(other_entries.size()); |
161 | 162 |
162 entries_.insert(entries_.end(), | 163 std::move(default_entries.begin(), default_entries.end(), |
163 default_entries.begin(), | 164 std::back_inserter(entries_)); |
164 default_entries.end()); | |
165 | 165 |
166 entries_.insert(entries_.end(), | 166 std::move(other_entries.begin(), other_entries.end(), |
167 other_entries.begin(), | 167 std::back_inserter(entries_)); |
168 other_entries.end()); | |
169 | 168 |
170 entries_.insert(entries_.end(), | 169 std::move(extension_entries.begin(), extension_entries.end(), |
171 extension_entries.begin(), | 170 std::back_inserter(entries_)); |
172 extension_entries.end()); | |
173 | 171 |
174 if (observer_) | 172 if (observer_) |
175 observer_->OnModelChanged(); | 173 observer_->OnModelChanged(); |
176 } | 174 } |
177 | 175 |
178 int TemplateURLTableModel::RowCount() { | 176 int TemplateURLTableModel::RowCount() { |
179 return static_cast<int>(entries_.size()); | 177 return static_cast<int>(entries_.size()); |
180 } | 178 } |
181 | 179 |
182 base::string16 TemplateURLTableModel::GetText(int row, int col_id) { | 180 base::string16 TemplateURLTableModel::GetText(int row, int col_id) { |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
298 | 296 |
299 NotifyChanged(index); | 297 NotifyChanged(index); |
300 } | 298 } |
301 | 299 |
302 TemplateURL* TemplateURLTableModel::GetTemplateURL(int index) { | 300 TemplateURL* TemplateURLTableModel::GetTemplateURL(int index) { |
303 return entries_[index]->template_url(); | 301 return entries_[index]->template_url(); |
304 } | 302 } |
305 | 303 |
306 int TemplateURLTableModel::IndexOfTemplateURL( | 304 int TemplateURLTableModel::IndexOfTemplateURL( |
307 const TemplateURL* template_url) { | 305 const TemplateURL* template_url) { |
308 for (std::vector<ModelEntry*>::iterator i = entries_.begin(); | 306 for (auto i = entries_.begin(); i != entries_.end(); ++i) { |
Nico
2016/10/24 18:41:02
nit: foreach?
Avi (use Gerrit)
2016/10/24 19:15:37
No, we need i on line 309.
| |
309 i != entries_.end(); ++i) { | 307 ModelEntry* entry = i->get(); |
310 ModelEntry* entry = *i; | |
311 if (entry->template_url() == template_url) | 308 if (entry->template_url() == template_url) |
312 return static_cast<int>(i - entries_.begin()); | 309 return static_cast<int>(i - entries_.begin()); |
313 } | 310 } |
314 return -1; | 311 return -1; |
315 } | 312 } |
316 | 313 |
317 int TemplateURLTableModel::MoveToMainGroup(int index) { | 314 int TemplateURLTableModel::MoveToMainGroup(int index) { |
318 if (index < last_search_engine_index_) | 315 if (index < last_search_engine_index_) |
319 return index; // Already in the main group. | 316 return index; // Already in the main group. |
320 | 317 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
357 } | 354 } |
358 | 355 |
359 void TemplateURLTableModel::NotifyChanged(int index) { | 356 void TemplateURLTableModel::NotifyChanged(int index) { |
360 if (observer_) { | 357 if (observer_) { |
361 DCHECK_GE(index, 0); | 358 DCHECK_GE(index, 0); |
362 observer_->OnItemsChanged(index, 1); | 359 observer_->OnItemsChanged(index, 1); |
363 } | 360 } |
364 } | 361 } |
365 | 362 |
366 void TemplateURLTableModel::FaviconAvailable(ModelEntry* entry) { | 363 void TemplateURLTableModel::FaviconAvailable(ModelEntry* entry) { |
367 std::vector<ModelEntry*>::iterator i = | 364 auto i = std::find_if(entries_.begin(), entries_.end(), |
368 std::find(entries_.begin(), entries_.end(), entry); | 365 [entry](const std::unique_ptr<ModelEntry>& ptr) { |
366 return ptr.get() == entry; | |
367 }); | |
369 DCHECK(i != entries_.end()); | 368 DCHECK(i != entries_.end()); |
370 NotifyChanged(static_cast<int>(i - entries_.begin())); | 369 NotifyChanged(static_cast<int>(i - entries_.begin())); |
371 } | 370 } |
372 | 371 |
373 void TemplateURLTableModel::OnTemplateURLServiceChanged() { | 372 void TemplateURLTableModel::OnTemplateURLServiceChanged() { |
374 Reload(); | 373 Reload(); |
375 } | 374 } |
376 | 375 |
377 std::unique_ptr<TemplateURLTableModel::ModelEntry> | 376 std::unique_ptr<TemplateURLTableModel::ModelEntry> |
378 TemplateURLTableModel::RemoveEntry(int index) { | 377 TemplateURLTableModel::RemoveEntry(int index) { |
379 std::unique_ptr<ModelEntry> entry(entries_[index]); | 378 std::unique_ptr<ModelEntry> entry = std::move(entries_[index]); |
380 entries_.erase(index + entries_.begin()); | 379 entries_.erase(index + entries_.begin()); |
381 if (index < last_search_engine_index_) | 380 if (index < last_search_engine_index_) |
382 --last_search_engine_index_; | 381 --last_search_engine_index_; |
383 if (index < last_other_engine_index_) | 382 if (index < last_other_engine_index_) |
384 --last_other_engine_index_; | 383 --last_other_engine_index_; |
385 if (observer_) | 384 if (observer_) |
386 observer_->OnItemsRemoved(index, 1); | 385 observer_->OnItemsRemoved(index, 1); |
387 return entry; | 386 return entry; |
388 } | 387 } |
389 | 388 |
390 void TemplateURLTableModel::AddEntry(int index, | 389 void TemplateURLTableModel::AddEntry(int index, |
391 std::unique_ptr<ModelEntry> entry) { | 390 std::unique_ptr<ModelEntry> entry) { |
392 entries_.insert(entries_.begin() + index, entry.release()); | 391 entries_.insert(entries_.begin() + index, std::move(entry)); |
393 if (index <= last_other_engine_index_) | 392 if (index <= last_other_engine_index_) |
394 ++last_other_engine_index_; | 393 ++last_other_engine_index_; |
395 if (observer_) | 394 if (observer_) |
396 observer_->OnItemsAdded(index, 1); | 395 observer_->OnItemsAdded(index, 1); |
397 } | 396 } |
OLD | NEW |