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

Side by Side Diff: chrome/browser/views/bookmark_menu_controller_views.cc

Issue 388007: Fixes possible crash in showing bookmark menu. The problem occurred... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | views/controls/menu/menu_item_view.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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/views/bookmark_menu_controller_views.h" 5 #include "chrome/browser/views/bookmark_menu_controller_views.h"
6 6
7 #include "app/l10n_util.h" 7 #include "app/l10n_util.h"
8 #include "app/os_exchange_data.h" 8 #include "app/os_exchange_data.h"
9 #include "app/resource_bundle.h" 9 #include "app/resource_bundle.h"
10 #include "base/stl_util-inl.h" 10 #include "base/stl_util-inl.h"
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 int start_index; 249 int start_index;
250 const BookmarkNode* node = 250 const BookmarkNode* node =
251 bookmark_bar_->GetNodeForButtonAt(bookmark_bar_loc, &start_index); 251 bookmark_bar_->GetNodeForButtonAt(bookmark_bar_loc, &start_index);
252 if (!node || !node->is_folder()) 252 if (!node || !node->is_folder())
253 return NULL; 253 return NULL;
254 254
255 MenuItemView* alt_menu = node_to_menu_map_[node]; 255 MenuItemView* alt_menu = node_to_menu_map_[node];
256 if (!alt_menu) 256 if (!alt_menu)
257 alt_menu = CreateMenu(node, start_index); 257 alt_menu = CreateMenu(node, start_index);
258 258
259 if (alt_menu) 259 menu_ = alt_menu;
260 menu_ = alt_menu;
261 260
262 *button = bookmark_bar_->GetMenuButtonForNode(node); 261 *button = bookmark_bar_->GetMenuButtonForNode(node);
263 bookmark_bar_->GetAnchorPositionAndStartIndexForButton( 262 bookmark_bar_->GetAnchorPositionAndStartIndexForButton(
264 *button, anchor, &start_index); 263 *button, anchor, &start_index);
265 *has_mnemonics = false; 264 *has_mnemonics = false;
266 return alt_menu; 265 return alt_menu;
267 } 266 }
268 267
269 void BookmarkMenuController::BookmarkModelChanged() { 268 void BookmarkMenuController::BookmarkModelChanged() {
270 menu_->Cancel(); 269 menu_->Cancel();
271 } 270 }
272 271
273 void BookmarkMenuController::BookmarkNodeFavIconLoaded( 272 void BookmarkMenuController::BookmarkNodeFavIconLoaded(
274 BookmarkModel* model, const BookmarkNode* node) { 273 BookmarkModel* model, const BookmarkNode* node) {
275 if (node_to_menu_id_map_.find(node) != node_to_menu_id_map_.end()) 274 std::map<const BookmarkNode*, int>::iterator menu_pair =
276 menu_->SetIcon(model->GetFavIcon(node), node_to_menu_id_map_[node]); 275 node_to_menu_id_map_.find(node);
276 if (menu_pair == node_to_menu_id_map_.end())
277 return; // We're not showing a menu item for the node.
278
279 // Iterate through the menus looking for the menu containing node.
280 for (NodeToMenuMap::iterator i = node_to_menu_map_.begin();
281 i != node_to_menu_map_.end(); ++i) {
282 MenuItemView* menu_item = i->second->GetMenuItemByID(menu_pair->second);
283 if (menu_item) {
284 menu_item->SetIcon(model->GetFavIcon(node));
285 return;
286 }
287 }
277 } 288 }
278 289
279 MenuItemView* BookmarkMenuController::CreateMenu(const BookmarkNode* parent, 290 MenuItemView* BookmarkMenuController::CreateMenu(const BookmarkNode* parent,
280 int start_child_index) { 291 int start_child_index) {
281 MenuItemView* menu = new MenuItemView(this); 292 MenuItemView* menu = new MenuItemView(this);
282 menu->SetCommand(next_menu_id_++); 293 menu->SetCommand(next_menu_id_++);
283 menu_id_to_node_map_[menu->GetCommand()] = parent; 294 menu_id_to_node_map_[menu->GetCommand()] = parent;
284 menu->set_has_icons(true); 295 menu->set_has_icons(true);
285 BuildMenu(parent, start_child_index, menu, &next_menu_id_); 296 BuildMenu(parent, start_child_index, menu, &next_menu_id_);
286 if (show_other_folder_) 297 if (show_other_folder_)
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 menu_id_to_node_map_[id] = node; 344 menu_id_to_node_map_[id] = node;
334 } 345 }
335 } 346 }
336 347
337 BookmarkMenuController::~BookmarkMenuController() { 348 BookmarkMenuController::~BookmarkMenuController() {
338 profile_->GetBookmarkModel()->RemoveObserver(this); 349 profile_->GetBookmarkModel()->RemoveObserver(this);
339 if (observer_) 350 if (observer_)
340 observer_->BookmarkMenuDeleted(this); 351 observer_->BookmarkMenuDeleted(this);
341 STLDeleteValues(&node_to_menu_map_); 352 STLDeleteValues(&node_to_menu_map_);
342 } 353 }
OLDNEW
« no previous file with comments | « no previous file | views/controls/menu/menu_item_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698