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

Side by Side Diff: chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc

Issue 2200993004: Make TabRestoreService::Entry noncopyable and fix up surrounding code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@tab-test-cleanup
Patch Set: Eliminate a use-after-free, Windows build fix Created 4 years, 4 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
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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/toolbar/recent_tabs_sub_menu_model.h" 5 #include "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 IDS_RECENTLY_CLOSED); 433 IDS_RECENTLY_CLOSED);
434 #if defined(OS_MACOSX) 434 #if defined(OS_MACOSX)
435 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 435 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
436 SetIcon(last_local_model_index_, 436 SetIcon(last_local_model_index_,
437 rb.GetNativeImageNamed(IDR_RECENTLY_CLOSED_WINDOW)); 437 rb.GetNativeImageNamed(IDR_RECENTLY_CLOSED_WINDOW));
438 #else 438 #else
439 SetIcon(last_local_model_index_, CreateFavicon(gfx::VectorIconId::TAB)); 439 SetIcon(last_local_model_index_, CreateFavicon(gfx::VectorIconId::TAB));
440 #endif 440 #endif
441 441
442 int added_count = 0; 442 int added_count = 0;
443 sessions::TabRestoreService::Entries entries = service->entries(); 443 for (const auto& entry : service->entries()) {
444 for (sessions::TabRestoreService::Entries::const_iterator it = 444 if (added_count == kMaxLocalEntries)
445 entries.begin(); 445 break;
446 it != entries.end() && added_count < kMaxLocalEntries; ++it) { 446 switch (entry->type) {
447 sessions::TabRestoreService::Entry* entry = *it; 447 case sessions::TabRestoreService::TAB: {
448 if (entry->type == sessions::TabRestoreService::TAB) { 448 auto& tab =
449 sessions::TabRestoreService::Tab* tab = 449 static_cast<const sessions::TabRestoreService::Tab&>(*entry);
450 static_cast<sessions::TabRestoreService::Tab*>(entry); 450 const sessions::SerializedNavigationEntry& current_navigation =
451 const sessions::SerializedNavigationEntry& current_navigation = 451 tab.navigations.at(tab.current_navigation_index);
452 tab->navigations.at(tab->current_navigation_index); 452 BuildLocalTabItem(entry->id, current_navigation.title(),
453 BuildLocalTabItem( 453 current_navigation.virtual_url(),
454 entry->id, 454 ++last_local_model_index_);
455 current_navigation.title(), 455 break;
456 current_navigation.virtual_url(), 456 }
457 ++last_local_model_index_); 457 case sessions::TabRestoreService::WINDOW: {
458 } else { 458 BuildLocalWindowItem(
459 DCHECK_EQ(entry->type, sessions::TabRestoreService::WINDOW); 459 entry->id,
460 BuildLocalWindowItem( 460 static_cast<const sessions::TabRestoreService::Window&>(*entry)
461 entry->id, static_cast<sessions::TabRestoreService::Window*>(entry) 461 .tabs.size(),
462 ->tabs.size(), 462 ++last_local_model_index_);
463 ++last_local_model_index_); 463 break;
464 }
464 } 465 }
465 ++added_count; 466 ++added_count;
466 } 467 }
467 } 468 }
468 DCHECK_GE(last_local_model_index_, 0); 469 DCHECK_GE(last_local_model_index_, 0);
469 } 470 }
470 471
471 void RecentTabsSubMenuModel::BuildTabsFromOtherDevices() { 472 void RecentTabsSubMenuModel::BuildTabsFromOtherDevices() {
472 // All other devices' items (device headers or tabs) use AddItem*() to append 473 // All other devices' items (device headers or tabs) use AddItem*() to append
473 // a menu item, because they are always only built once (i.e. invoked from 474 // a menu item, because they are always only built once (i.e. invoked from
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 725
725 ui::MenuModelDelegate* menu_model_delegate = GetMenuModelDelegate(); 726 ui::MenuModelDelegate* menu_model_delegate = GetMenuModelDelegate();
726 if (menu_model_delegate) 727 if (menu_model_delegate)
727 menu_model_delegate->OnMenuStructureChanged(); 728 menu_model_delegate->OnMenuStructureChanged();
728 } 729 }
729 730
730 void RecentTabsSubMenuModel::TabRestoreServiceDestroyed( 731 void RecentTabsSubMenuModel::TabRestoreServiceDestroyed(
731 sessions::TabRestoreService* service) { 732 sessions::TabRestoreService* service) {
732 TabRestoreServiceChanged(service); 733 TabRestoreServiceChanged(service);
733 } 734 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698