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

Side by Side Diff: chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm

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 (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/cocoa/history_menu_bridge.h" 5 #include "chrome/browser/ui/cocoa/history_menu_bridge.h"
6 6
7 #import <Cocoa/Cocoa.h> 7 #import <Cocoa/Cocoa.h>
8 8
9 #include <initializer_list> 9 #include <initializer_list>
10 #include <memory> 10 #include <memory>
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 91
92 HistoryMenuBridge::HistoryItem* CreateItem(const base::string16& title) { 92 HistoryMenuBridge::HistoryItem* CreateItem(const base::string16& title) {
93 HistoryMenuBridge::HistoryItem* item = 93 HistoryMenuBridge::HistoryItem* item =
94 new HistoryMenuBridge::HistoryItem(); 94 new HistoryMenuBridge::HistoryItem();
95 item->title = title; 95 item->title = title;
96 item->url = GURL(title); 96 item->url = GURL(title);
97 return item; 97 return item;
98 } 98 }
99 99
100 MockTRS::Entries CreateSessionEntries( 100 MockTRS::Entries CreateSessionEntries(
101 std::vector<std::unique_ptr<MockTRS::Entry>>* out,
102 std::initializer_list<MockTRS::Entry*> entries) { 101 std::initializer_list<MockTRS::Entry*> entries) {
103 MockTRS::Entries ret; 102 MockTRS::Entries ret;
104 out->reserve(out->size() + entries.size());
105 for (auto* entry : entries) { 103 for (auto* entry : entries) {
sky 2016/08/04 16:34:38 no {}
106 ret.emplace_back(entry); 104 ret.emplace_back(entry);
107 out->emplace_back(entry);
108 } 105 }
109 return ret; 106 return ret;
110 } 107 }
111 108
112 MockTRS::Tab* CreateSessionTab(SessionID::id_type id, 109 MockTRS::Tab* CreateSessionTab(SessionID::id_type id,
113 const std::string& url, 110 const std::string& url,
114 const std::string& title) { 111 const std::string& title) {
115 auto tab = new MockTRS::Tab; 112 auto tab = new MockTRS::Tab;
116 tab->id = id; 113 tab->id = id;
117 tab->current_navigation_index = 0; 114 tab->current_navigation_index = 0;
118 tab->navigations.push_back( 115 tab->navigations.push_back(
119 sessions::SerializedNavigationEntryTestHelper::CreateNavigation(url, 116 sessions::SerializedNavigationEntryTestHelper::CreateNavigation(url,
120 title)); 117 title));
121 return tab; 118 return tab;
122 } 119 }
123 120
124 MockTRS::Window* CreateSessionWindow( 121 MockTRS::Window* CreateSessionWindow(
125 SessionID::id_type id, 122 SessionID::id_type id,
126 std::initializer_list<MockTRS::Tab*> tabs) { 123 std::initializer_list<MockTRS::Tab*> tabs) {
127 auto window = new MockTRS::Window; 124 auto window = new MockTRS::Window;
128 window->id = id; 125 window->id = id;
129 window->tabs.reserve(tabs.size()); 126 window->tabs.reserve(tabs.size());
130 for (auto* tab : tabs) { 127 for (auto* tab : tabs)
131 window->tabs.emplace_back(std::move(*tab)); 128 window->tabs.emplace_back(std::move(tab));
132 delete tab;
133 }
134 return window; 129 return window;
135 } 130 }
136 131
137 void GetFaviconForHistoryItem(HistoryMenuBridge::HistoryItem* item) { 132 void GetFaviconForHistoryItem(HistoryMenuBridge::HistoryItem* item) {
138 bridge_->GetFaviconForHistoryItem(item); 133 bridge_->GetFaviconForHistoryItem(item);
139 } 134 }
140 135
141 void GotFaviconData(HistoryMenuBridge::HistoryItem* item, 136 void GotFaviconData(HistoryMenuBridge::HistoryItem* item,
142 const favicon_base::FaviconImageResult& image_result) { 137 const favicon_base::FaviconImageResult& image_result) {
143 bridge_->GotFaviconData(item, image_result); 138 bridge_->GotFaviconData(item, image_result);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 // Confirm tooltips and confirm they are not trimmed (like the item 229 // Confirm tooltips and confirm they are not trimmed (like the item
235 // name might be). Add tolerance for URL fixer-upping; 230 // name might be). Add tolerance for URL fixer-upping;
236 // e.g. http://foo becomes http://foo/) 231 // e.g. http://foo becomes http://foo/)
237 EXPECT_GE([[[menu itemAtIndex:0] toolTip] length], (2*short_url.length()-5)); 232 EXPECT_GE([[[menu itemAtIndex:0] toolTip] length], (2*short_url.length()-5));
238 EXPECT_GE([[[menu itemAtIndex:1] toolTip] length], (2*long_url.length()-5)); 233 EXPECT_GE([[[menu itemAtIndex:1] toolTip] length], (2*long_url.length()-5));
239 } 234 }
240 235
241 // Test that the menu is created for a set of simple tabs. 236 // Test that the menu is created for a set of simple tabs.
242 TEST_F(HistoryMenuBridgeTest, RecentlyClosedTabs) { 237 TEST_F(HistoryMenuBridgeTest, RecentlyClosedTabs) {
243 std::unique_ptr<MockTRS> trs(new MockTRS(profile())); 238 std::unique_ptr<MockTRS> trs(new MockTRS(profile()));
244 std::vector<std::unique_ptr<MockTRS::Entry>> hold_entries; 239 auto entries{CreateSessionEntries({
245 auto entries{CreateSessionEntries(&hold_entries, {
246 CreateSessionTab(24, "http://google.com", "Google"), 240 CreateSessionTab(24, "http://google.com", "Google"),
247 CreateSessionTab(42, "http://apple.com", "Apple"), 241 CreateSessionTab(42, "http://apple.com", "Apple"),
248 })}; 242 })};
249 243
250 using ::testing::ReturnRef; 244 using ::testing::ReturnRef;
251 EXPECT_CALL(*trs.get(), entries()).WillOnce(ReturnRef(entries)); 245 EXPECT_CALL(*trs.get(), entries()).WillOnce(ReturnRef(entries));
252 246
253 bridge_->TabRestoreServiceChanged(trs.get()); 247 bridge_->TabRestoreServiceChanged(trs.get());
254 248
255 NSMenu* menu = bridge_->HistoryMenu(); 249 NSMenu* menu = bridge_->HistoryMenu();
256 ASSERT_EQ(2U, [[menu itemArray] count]); 250 ASSERT_EQ(2U, [[menu itemArray] count]);
257 251
258 NSMenuItem* item1 = [menu itemAtIndex:0]; 252 NSMenuItem* item1 = [menu itemAtIndex:0];
259 MockBridge::HistoryItem* hist1 = bridge_->HistoryItemForMenuItem(item1); 253 MockBridge::HistoryItem* hist1 = bridge_->HistoryItemForMenuItem(item1);
260 EXPECT_TRUE(hist1); 254 EXPECT_TRUE(hist1);
261 EXPECT_EQ(24, hist1->session_id); 255 EXPECT_EQ(24, hist1->session_id);
262 EXPECT_NSEQ(@"Google", [item1 title]); 256 EXPECT_NSEQ(@"Google", [item1 title]);
263 257
264 NSMenuItem* item2 = [menu itemAtIndex:1]; 258 NSMenuItem* item2 = [menu itemAtIndex:1];
265 MockBridge::HistoryItem* hist2 = bridge_->HistoryItemForMenuItem(item2); 259 MockBridge::HistoryItem* hist2 = bridge_->HistoryItemForMenuItem(item2);
266 EXPECT_TRUE(hist2); 260 EXPECT_TRUE(hist2);
267 EXPECT_EQ(42, hist2->session_id); 261 EXPECT_EQ(42, hist2->session_id);
268 EXPECT_NSEQ(@"Apple", [item2 title]); 262 EXPECT_NSEQ(@"Apple", [item2 title]);
269 } 263 }
270 264
271 // Test that the menu is created for a mix of windows and tabs. 265 // Test that the menu is created for a mix of windows and tabs.
272 TEST_F(HistoryMenuBridgeTest, RecentlyClosedTabsAndWindows) { 266 TEST_F(HistoryMenuBridgeTest, RecentlyClosedTabsAndWindows) {
273 std::unique_ptr<MockTRS> trs(new MockTRS(profile())); 267 std::unique_ptr<MockTRS> trs(new MockTRS(profile()));
274 std::vector<std::unique_ptr<MockTRS::Entry>> hold_entries; 268 auto entries{CreateSessionEntries({
275 auto entries{CreateSessionEntries(&hold_entries, {
276 CreateSessionTab(24, "http://google.com", "Google"), 269 CreateSessionTab(24, "http://google.com", "Google"),
277 CreateSessionWindow(30, { 270 CreateSessionWindow(30, {
278 CreateSessionTab(31, "http://foo.com", "foo"), 271 CreateSessionTab(31, "http://foo.com", "foo"),
279 CreateSessionTab(32, "http://bar.com", "bar"), 272 CreateSessionTab(32, "http://bar.com", "bar"),
280 }), 273 }),
281 CreateSessionTab(42, "http://apple.com", "Apple"), 274 CreateSessionTab(42, "http://apple.com", "Apple"),
282 CreateSessionWindow(50, { 275 CreateSessionWindow(50, {
283 CreateSessionTab(51, "http://magic.com", "magic"), 276 CreateSessionTab(51, "http://magic.com", "magic"),
284 CreateSessionTab(52, "http://goats.com", "goats"), 277 CreateSessionTab(52, "http://goats.com", "goats"),
285 CreateSessionTab(53, "http://teleporter.com", "teleporter"), 278 CreateSessionTab(53, "http://teleporter.com", "teleporter"),
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 image_result.image = gfx::Image::CreateFrom1xBitmap(bitmap); 363 image_result.image = gfx::Image::CreateFrom1xBitmap(bitmap);
371 GotFaviconData(&item, image_result); 364 GotFaviconData(&item, image_result);
372 365
373 // Make sure the callback works. 366 // Make sure the callback works.
374 EXPECT_FALSE(item.icon_requested); 367 EXPECT_FALSE(item.icon_requested);
375 EXPECT_TRUE(item.icon.get()); 368 EXPECT_TRUE(item.icon.get());
376 EXPECT_TRUE([item.menu_item image]); 369 EXPECT_TRUE([item.menu_item image]);
377 } 370 }
378 371
379 } // namespace 372 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698