Index: chrome/browser/views/options/cookies_view.cc |
=================================================================== |
--- chrome/browser/views/options/cookies_view.cc (revision 6144) |
+++ chrome/browser/views/options/cookies_view.cc (working copy) |
@@ -280,17 +280,24 @@ |
// Remove the selected cookies. This iterates over the rows backwards, which |
// is required when calling RemoveCookies, see bug 2994. |
- int first_selected_row = -1; |
+ int last_selected_view_row = -1; |
+ int remove_count = 0; |
for (views::TableView::iterator i = SelectionBegin(); |
i != SelectionEnd(); ++i) { |
- int selected_row = *i; |
- if (first_selected_row == -1) |
- first_selected_row = selected_row; |
- cookies_model_->RemoveCookies(selected_row, 1); |
+ int selected_model_row = *i; |
+ ++remove_count; |
+ if (last_selected_view_row == -1) { |
+ // Store the view row since the view to model mapping changes when |
+ // we delete. |
+ last_selected_view_row = model_to_view(selected_model_row); |
+ } |
+ cookies_model_->RemoveCookies(selected_model_row, 1); |
} |
- // Keep an element selected |
- if (RowCount() > 0) |
- Select(std::min(RowCount() - 1, first_selected_row)); |
+ |
+ // Select the next row after the last row deleted (unless removing last row). |
+ DCHECK(RowCount() > 0); |
+ Select(view_to_model(std::min(RowCount() - 1, |
+ last_selected_view_row - remove_count + 1))); |
} |
void CookiesTableView::OnKeyDown(unsigned short virtual_keycode) { |