Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Side by Side Diff: ui/app_list/app_list_model.cc

Issue 1868363002: Replace scoped_ptr with std::unique_ptr in //ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@scopedptrcc
Patch Set: scopedptrui: rebase-make_scoped_ptr Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/app_list/app_list_model.h ('k') | ui/app_list/cocoa/app_list_view_controller.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "ui/app_list/app_list_model.h" 5 #include "ui/app_list/app_list_model.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "ui/app_list/app_list_folder_item.h" 10 #include "ui/app_list/app_list_folder_item.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 } 73 }
74 74
75 AppListFolderItem* AppListModel::FindFolderItem(const std::string& id) { 75 AppListFolderItem* AppListModel::FindFolderItem(const std::string& id) {
76 AppListItem* item = top_level_item_list_->FindItem(id); 76 AppListItem* item = top_level_item_list_->FindItem(id);
77 if (item && item->GetItemType() == AppListFolderItem::kItemType) 77 if (item && item->GetItemType() == AppListFolderItem::kItemType)
78 return static_cast<AppListFolderItem*>(item); 78 return static_cast<AppListFolderItem*>(item);
79 DCHECK(!item); 79 DCHECK(!item);
80 return NULL; 80 return NULL;
81 } 81 }
82 82
83 AppListItem* AppListModel::AddItem(scoped_ptr<AppListItem> item) { 83 AppListItem* AppListModel::AddItem(std::unique_ptr<AppListItem> item) {
84 DCHECK(!item->IsInFolder()); 84 DCHECK(!item->IsInFolder());
85 DCHECK(!top_level_item_list()->FindItem(item->id())); 85 DCHECK(!top_level_item_list()->FindItem(item->id()));
86 return AddItemToItemListAndNotify(std::move(item)); 86 return AddItemToItemListAndNotify(std::move(item));
87 } 87 }
88 88
89 AppListItem* AppListModel::AddItemToFolder(scoped_ptr<AppListItem> item, 89 AppListItem* AppListModel::AddItemToFolder(std::unique_ptr<AppListItem> item,
90 const std::string& folder_id) { 90 const std::string& folder_id) {
91 if (folder_id.empty()) 91 if (folder_id.empty())
92 return AddItem(std::move(item)); 92 return AddItem(std::move(item));
93 DVLOG(2) << "AddItemToFolder: " << item->id() << ": " << folder_id; 93 DVLOG(2) << "AddItemToFolder: " << item->id() << ": " << folder_id;
94 CHECK_NE(folder_id, item->folder_id()); 94 CHECK_NE(folder_id, item->folder_id());
95 DCHECK_NE(AppListFolderItem::kItemType, item->GetItemType()); 95 DCHECK_NE(AppListFolderItem::kItemType, item->GetItemType());
96 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id); 96 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id);
97 if (!dest_folder) 97 if (!dest_folder)
98 return NULL; 98 return NULL;
99 DCHECK(!dest_folder->item_list()->FindItem(item->id())) 99 DCHECK(!dest_folder->item_list()->FindItem(item->id()))
(...skipping 29 matching lines...) Expand all
129 } 129 }
130 130
131 // If the target item is a folder, just add the source item to it. 131 // If the target item is a folder, just add the source item to it.
132 if (target_item->GetItemType() == AppListFolderItem::kItemType) { 132 if (target_item->GetItemType() == AppListFolderItem::kItemType) {
133 AppListFolderItem* target_folder = 133 AppListFolderItem* target_folder =
134 static_cast<AppListFolderItem*>(target_item); 134 static_cast<AppListFolderItem*>(target_item);
135 if (target_folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) { 135 if (target_folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) {
136 LOG(WARNING) << "MergeItems called with OEM folder as target"; 136 LOG(WARNING) << "MergeItems called with OEM folder as target";
137 return ""; 137 return "";
138 } 138 }
139 scoped_ptr<AppListItem> source_item_ptr = RemoveItem(source_item); 139 std::unique_ptr<AppListItem> source_item_ptr = RemoveItem(source_item);
140 source_item_ptr->set_position( 140 source_item_ptr->set_position(
141 target_folder->item_list()->CreatePositionBefore( 141 target_folder->item_list()->CreatePositionBefore(
142 syncer::StringOrdinal())); 142 syncer::StringOrdinal()));
143 AddItemToFolderItemAndNotify(target_folder, std::move(source_item_ptr)); 143 AddItemToFolderItemAndNotify(target_folder, std::move(source_item_ptr));
144 return target_folder->id(); 144 return target_folder->id();
145 } 145 }
146 146
147 // Otherwise remove the source item and target item from their current 147 // Otherwise remove the source item and target item from their current
148 // location, they will become owned by the new folder. 148 // location, they will become owned by the new folder.
149 scoped_ptr<AppListItem> source_item_ptr = RemoveItem(source_item); 149 std::unique_ptr<AppListItem> source_item_ptr = RemoveItem(source_item);
150 CHECK(source_item_ptr); 150 CHECK(source_item_ptr);
151 // Note: This would fail if |target_item_id == source_item_id|, except we 151 // Note: This would fail if |target_item_id == source_item_id|, except we
152 // checked that they are distinct at the top of this method. 152 // checked that they are distinct at the top of this method.
153 scoped_ptr<AppListItem> target_item_ptr = 153 std::unique_ptr<AppListItem> target_item_ptr =
154 top_level_item_list_->RemoveItem(target_item_id); 154 top_level_item_list_->RemoveItem(target_item_id);
155 CHECK(target_item_ptr); 155 CHECK(target_item_ptr);
156 156
157 // Create a new folder in the same location as the target item. 157 // Create a new folder in the same location as the target item.
158 std::string new_folder_id = AppListFolderItem::GenerateId(); 158 std::string new_folder_id = AppListFolderItem::GenerateId();
159 DVLOG(2) << "Creating folder for merge: " << new_folder_id; 159 DVLOG(2) << "Creating folder for merge: " << new_folder_id;
160 scoped_ptr<AppListItem> new_folder_ptr(new AppListFolderItem( 160 std::unique_ptr<AppListItem> new_folder_ptr(new AppListFolderItem(
161 new_folder_id, AppListFolderItem::FOLDER_TYPE_NORMAL)); 161 new_folder_id, AppListFolderItem::FOLDER_TYPE_NORMAL));
162 new_folder_ptr->set_position(target_item_ptr->position()); 162 new_folder_ptr->set_position(target_item_ptr->position());
163 AppListFolderItem* new_folder = static_cast<AppListFolderItem*>( 163 AppListFolderItem* new_folder = static_cast<AppListFolderItem*>(
164 AddItemToItemListAndNotify(std::move(new_folder_ptr))); 164 AddItemToItemListAndNotify(std::move(new_folder_ptr)));
165 165
166 // Add the items to the new folder. 166 // Add the items to the new folder.
167 target_item_ptr->set_position( 167 target_item_ptr->set_position(
168 new_folder->item_list()->CreatePositionBefore( 168 new_folder->item_list()->CreatePositionBefore(
169 syncer::StringOrdinal())); 169 syncer::StringOrdinal()));
170 AddItemToFolderItemAndNotify(new_folder, std::move(target_item_ptr)); 170 AddItemToFolderItemAndNotify(new_folder, std::move(target_item_ptr));
171 source_item_ptr->set_position( 171 source_item_ptr->set_position(
172 new_folder->item_list()->CreatePositionBefore( 172 new_folder->item_list()->CreatePositionBefore(
173 syncer::StringOrdinal())); 173 syncer::StringOrdinal()));
174 AddItemToFolderItemAndNotify(new_folder, std::move(source_item_ptr)); 174 AddItemToFolderItemAndNotify(new_folder, std::move(source_item_ptr));
175 175
176 return new_folder->id(); 176 return new_folder->id();
177 } 177 }
178 178
179 void AppListModel::MoveItemToFolder(AppListItem* item, 179 void AppListModel::MoveItemToFolder(AppListItem* item,
180 const std::string& folder_id) { 180 const std::string& folder_id) {
181 DVLOG(2) << "MoveItemToFolder: " << folder_id 181 DVLOG(2) << "MoveItemToFolder: " << folder_id
182 << " <- " << item->ToDebugString(); 182 << " <- " << item->ToDebugString();
183 if (item->folder_id() == folder_id) 183 if (item->folder_id() == folder_id)
184 return; 184 return;
185 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id); 185 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id);
186 scoped_ptr<AppListItem> item_ptr = RemoveItem(item); 186 std::unique_ptr<AppListItem> item_ptr = RemoveItem(item);
187 if (dest_folder) { 187 if (dest_folder) {
188 CHECK(!item->IsInFolder()); 188 CHECK(!item->IsInFolder());
189 AddItemToFolderItemAndNotify(dest_folder, std::move(item_ptr)); 189 AddItemToFolderItemAndNotify(dest_folder, std::move(item_ptr));
190 } else { 190 } else {
191 AddItemToItemListAndNotifyUpdate(std::move(item_ptr)); 191 AddItemToItemListAndNotifyUpdate(std::move(item_ptr));
192 } 192 }
193 } 193 }
194 194
195 bool AppListModel::MoveItemToFolderAt(AppListItem* item, 195 bool AppListModel::MoveItemToFolderAt(AppListItem* item,
196 const std::string& folder_id, 196 const std::string& folder_id,
197 syncer::StringOrdinal position) { 197 syncer::StringOrdinal position) {
198 DVLOG(2) << "MoveItemToFolderAt: " << folder_id 198 DVLOG(2) << "MoveItemToFolderAt: " << folder_id
199 << "[" << position.ToDebugString() << "]" 199 << "[" << position.ToDebugString() << "]"
200 << " <- " << item->ToDebugString(); 200 << " <- " << item->ToDebugString();
201 if (item->folder_id() == folder_id) 201 if (item->folder_id() == folder_id)
202 return false; 202 return false;
203 AppListFolderItem* src_folder = FindOrCreateFolderItem(item->folder_id()); 203 AppListFolderItem* src_folder = FindOrCreateFolderItem(item->folder_id());
204 if (src_folder && 204 if (src_folder &&
205 src_folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) { 205 src_folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) {
206 LOG(WARNING) << "MoveItemToFolderAt called with OEM folder as source"; 206 LOG(WARNING) << "MoveItemToFolderAt called with OEM folder as source";
207 return false; 207 return false;
208 } 208 }
209 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id); 209 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id);
210 scoped_ptr<AppListItem> item_ptr = RemoveItem(item); 210 std::unique_ptr<AppListItem> item_ptr = RemoveItem(item);
211 if (dest_folder) { 211 if (dest_folder) {
212 item_ptr->set_position( 212 item_ptr->set_position(
213 dest_folder->item_list()->CreatePositionBefore(position)); 213 dest_folder->item_list()->CreatePositionBefore(position));
214 AddItemToFolderItemAndNotify(dest_folder, std::move(item_ptr)); 214 AddItemToFolderItemAndNotify(dest_folder, std::move(item_ptr));
215 } else { 215 } else {
216 item_ptr->set_position( 216 item_ptr->set_position(
217 top_level_item_list_->CreatePositionBefore(position)); 217 top_level_item_list_->CreatePositionBefore(position));
218 AddItemToItemListAndNotifyUpdate(std::move(item_ptr)); 218 AddItemToItemListAndNotifyUpdate(std::move(item_ptr));
219 } 219 }
220 return true; 220 return true;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 << "Invalid call to DeleteItem for item with children: " << id; 265 << "Invalid call to DeleteItem for item with children: " << id;
266 FOR_EACH_OBSERVER(AppListModelObserver, 266 FOR_EACH_OBSERVER(AppListModelObserver,
267 observers_, 267 observers_,
268 OnAppListItemWillBeDeleted(item)); 268 OnAppListItemWillBeDeleted(item));
269 top_level_item_list_->DeleteItem(id); 269 top_level_item_list_->DeleteItem(id);
270 FOR_EACH_OBSERVER(AppListModelObserver, observers_, OnAppListItemDeleted()); 270 FOR_EACH_OBSERVER(AppListModelObserver, observers_, OnAppListItemDeleted());
271 return; 271 return;
272 } 272 }
273 AppListFolderItem* folder = FindFolderItem(item->folder_id()); 273 AppListFolderItem* folder = FindFolderItem(item->folder_id());
274 DCHECK(folder) << "Folder not found for item: " << item->ToDebugString(); 274 DCHECK(folder) << "Folder not found for item: " << item->ToDebugString();
275 scoped_ptr<AppListItem> child_item = RemoveItemFromFolder(folder, item); 275 std::unique_ptr<AppListItem> child_item = RemoveItemFromFolder(folder, item);
276 DCHECK_EQ(item, child_item.get()); 276 DCHECK_EQ(item, child_item.get());
277 FOR_EACH_OBSERVER(AppListModelObserver, 277 FOR_EACH_OBSERVER(AppListModelObserver,
278 observers_, 278 observers_,
279 OnAppListItemWillBeDeleted(item)); 279 OnAppListItemWillBeDeleted(item));
280 child_item.reset(); // Deletes item. 280 child_item.reset(); // Deletes item.
281 FOR_EACH_OBSERVER(AppListModelObserver, observers_, OnAppListItemDeleted()); 281 FOR_EACH_OBSERVER(AppListModelObserver, observers_, OnAppListItemDeleted());
282 } 282 }
283 283
284 void AppListModel::DeleteUninstalledItem(const std::string& id) { 284 void AppListModel::DeleteUninstalledItem(const std::string& id) {
285 AppListItem* item = FindItem(id); 285 AppListItem* item = FindItem(id);
(...skipping 23 matching lines...) Expand all
309 // Remove child items from folders. 309 // Remove child items from folders.
310 std::vector<std::string> folder_ids; 310 std::vector<std::string> folder_ids;
311 for (size_t i = 0; i < top_level_item_list_->item_count(); ++i) { 311 for (size_t i = 0; i < top_level_item_list_->item_count(); ++i) {
312 AppListItem* item = top_level_item_list_->item_at(i); 312 AppListItem* item = top_level_item_list_->item_at(i);
313 if (item->GetItemType() != AppListFolderItem::kItemType) 313 if (item->GetItemType() != AppListFolderItem::kItemType)
314 continue; 314 continue;
315 AppListFolderItem* folder = static_cast<AppListFolderItem*>(item); 315 AppListFolderItem* folder = static_cast<AppListFolderItem*>(item);
316 if (folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) 316 if (folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM)
317 continue; // Do not remove OEM folders. 317 continue; // Do not remove OEM folders.
318 while (folder->item_list()->item_count()) { 318 while (folder->item_list()->item_count()) {
319 scoped_ptr<AppListItem> child = folder->item_list()->RemoveItemAt(0); 319 std::unique_ptr<AppListItem> child = folder->item_list()->RemoveItemAt(0);
320 child->set_folder_id(""); 320 child->set_folder_id("");
321 AddItemToItemListAndNotifyUpdate(std::move(child)); 321 AddItemToItemListAndNotifyUpdate(std::move(child));
322 } 322 }
323 folder_ids.push_back(folder->id()); 323 folder_ids.push_back(folder->id());
324 } 324 }
325 // Delete folders. 325 // Delete folders.
326 for (size_t i = 0; i < folder_ids.size(); ++i) 326 for (size_t i = 0; i < folder_ids.size(); ++i)
327 DeleteItem(folder_ids[i]); 327 DeleteItem(folder_ids[i]);
328 } 328 }
329 329
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 AppListFolderItem* dest_folder = FindFolderItem(folder_id); 389 AppListFolderItem* dest_folder = FindFolderItem(folder_id);
390 if (dest_folder) 390 if (dest_folder)
391 return dest_folder; 391 return dest_folder;
392 392
393 if (!folders_enabled()) { 393 if (!folders_enabled()) {
394 LOG(ERROR) << "Attempt to create folder item when disabled: " << folder_id; 394 LOG(ERROR) << "Attempt to create folder item when disabled: " << folder_id;
395 return NULL; 395 return NULL;
396 } 396 }
397 397
398 DVLOG(2) << "Creating new folder: " << folder_id; 398 DVLOG(2) << "Creating new folder: " << folder_id;
399 scoped_ptr<AppListFolderItem> new_folder( 399 std::unique_ptr<AppListFolderItem> new_folder(
400 new AppListFolderItem(folder_id, AppListFolderItem::FOLDER_TYPE_NORMAL)); 400 new AppListFolderItem(folder_id, AppListFolderItem::FOLDER_TYPE_NORMAL));
401 new_folder->set_position( 401 new_folder->set_position(
402 top_level_item_list_->CreatePositionBefore(syncer::StringOrdinal())); 402 top_level_item_list_->CreatePositionBefore(syncer::StringOrdinal()));
403 AppListItem* new_folder_item = 403 AppListItem* new_folder_item =
404 AddItemToItemListAndNotify(std::move(new_folder)); 404 AddItemToItemListAndNotify(std::move(new_folder));
405 return static_cast<AppListFolderItem*>(new_folder_item); 405 return static_cast<AppListFolderItem*>(new_folder_item);
406 } 406 }
407 407
408 AppListItem* AppListModel::AddItemToItemListAndNotify( 408 AppListItem* AppListModel::AddItemToItemListAndNotify(
409 scoped_ptr<AppListItem> item_ptr) { 409 std::unique_ptr<AppListItem> item_ptr) {
410 DCHECK(!item_ptr->IsInFolder()); 410 DCHECK(!item_ptr->IsInFolder());
411 AppListItem* item = top_level_item_list_->AddItem(std::move(item_ptr)); 411 AppListItem* item = top_level_item_list_->AddItem(std::move(item_ptr));
412 FOR_EACH_OBSERVER(AppListModelObserver, 412 FOR_EACH_OBSERVER(AppListModelObserver,
413 observers_, 413 observers_,
414 OnAppListItemAdded(item)); 414 OnAppListItemAdded(item));
415 return item; 415 return item;
416 } 416 }
417 417
418 AppListItem* AppListModel::AddItemToItemListAndNotifyUpdate( 418 AppListItem* AppListModel::AddItemToItemListAndNotifyUpdate(
419 scoped_ptr<AppListItem> item_ptr) { 419 std::unique_ptr<AppListItem> item_ptr) {
420 DCHECK(!item_ptr->IsInFolder()); 420 DCHECK(!item_ptr->IsInFolder());
421 AppListItem* item = top_level_item_list_->AddItem(std::move(item_ptr)); 421 AppListItem* item = top_level_item_list_->AddItem(std::move(item_ptr));
422 FOR_EACH_OBSERVER(AppListModelObserver, 422 FOR_EACH_OBSERVER(AppListModelObserver,
423 observers_, 423 observers_,
424 OnAppListItemUpdated(item)); 424 OnAppListItemUpdated(item));
425 return item; 425 return item;
426 } 426 }
427 427
428 AppListItem* AppListModel::AddItemToFolderItemAndNotify( 428 AppListItem* AppListModel::AddItemToFolderItemAndNotify(
429 AppListFolderItem* folder, 429 AppListFolderItem* folder,
430 scoped_ptr<AppListItem> item_ptr) { 430 std::unique_ptr<AppListItem> item_ptr) {
431 CHECK_NE(folder->id(), item_ptr->folder_id()); 431 CHECK_NE(folder->id(), item_ptr->folder_id());
432 AppListItem* item = folder->item_list()->AddItem(std::move(item_ptr)); 432 AppListItem* item = folder->item_list()->AddItem(std::move(item_ptr));
433 item->set_folder_id(folder->id()); 433 item->set_folder_id(folder->id());
434 FOR_EACH_OBSERVER(AppListModelObserver, 434 FOR_EACH_OBSERVER(AppListModelObserver,
435 observers_, 435 observers_,
436 OnAppListItemUpdated(item)); 436 OnAppListItemUpdated(item));
437 return item; 437 return item;
438 } 438 }
439 439
440 scoped_ptr<AppListItem> AppListModel::RemoveItem(AppListItem* item) { 440 std::unique_ptr<AppListItem> AppListModel::RemoveItem(AppListItem* item) {
441 if (!item->IsInFolder()) 441 if (!item->IsInFolder())
442 return top_level_item_list_->RemoveItem(item->id()); 442 return top_level_item_list_->RemoveItem(item->id());
443 443
444 AppListFolderItem* folder = FindFolderItem(item->folder_id()); 444 AppListFolderItem* folder = FindFolderItem(item->folder_id());
445 return RemoveItemFromFolder(folder, item); 445 return RemoveItemFromFolder(folder, item);
446 } 446 }
447 447
448 scoped_ptr<AppListItem> AppListModel::RemoveItemFromFolder( 448 std::unique_ptr<AppListItem> AppListModel::RemoveItemFromFolder(
449 AppListFolderItem* folder, 449 AppListFolderItem* folder,
450 AppListItem* item) { 450 AppListItem* item) {
451 std::string folder_id = folder->id(); 451 std::string folder_id = folder->id();
452 CHECK_EQ(item->folder_id(), folder_id); 452 CHECK_EQ(item->folder_id(), folder_id);
453 scoped_ptr<AppListItem> result = folder->item_list()->RemoveItem(item->id()); 453 std::unique_ptr<AppListItem> result =
454 folder->item_list()->RemoveItem(item->id());
454 result->set_folder_id(""); 455 result->set_folder_id("");
455 if (folder->item_list()->item_count() == 0) { 456 if (folder->item_list()->item_count() == 0) {
456 DVLOG(2) << "Deleting empty folder: " << folder->ToDebugString(); 457 DVLOG(2) << "Deleting empty folder: " << folder->ToDebugString();
457 DeleteItem(folder_id); 458 DeleteItem(folder_id);
458 } 459 }
459 return result; 460 return result;
460 } 461 }
461 462
462 } // namespace app_list 463 } // namespace app_list
OLDNEW
« no previous file with comments | « ui/app_list/app_list_model.h ('k') | ui/app_list/cocoa/app_list_view_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698