| OLD | NEW |
| 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 "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 | 6 |
| 7 #include "chrome/browser/ui/toolbar/back_forward_menu_model.h" | 7 #include "chrome/browser/ui/toolbar/back_forward_menu_model.h" |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 return; | 246 return; |
| 247 FaviconService::Handle handle = favicon_service->GetFaviconForURL( | 247 FaviconService::Handle handle = favicon_service->GetFaviconForURL( |
| 248 entry->GetURL(), history::FAVICON, &load_consumer_, | 248 entry->GetURL(), history::FAVICON, &load_consumer_, |
| 249 base::Bind(&BackForwardMenuModel::OnFavIconDataAvailable, | 249 base::Bind(&BackForwardMenuModel::OnFavIconDataAvailable, |
| 250 base::Unretained(this))); | 250 base::Unretained(this))); |
| 251 load_consumer_.SetClientData(favicon_service, handle, entry->GetUniqueID()); | 251 load_consumer_.SetClientData(favicon_service, handle, entry->GetUniqueID()); |
| 252 } | 252 } |
| 253 | 253 |
| 254 void BackForwardMenuModel::OnFavIconDataAvailable( | 254 void BackForwardMenuModel::OnFavIconDataAvailable( |
| 255 FaviconService::Handle handle, | 255 FaviconService::Handle handle, |
| 256 history::FaviconData favicon) { | 256 history::FaviconData favicon_data) { |
| 257 if (favicon.is_valid()) { | 257 if (favicon_data.is_valid()) { |
| 258 int unique_id = load_consumer_.GetClientDataForCurrentRequest(); | 258 int unique_id = load_consumer_.GetClientDataForCurrentRequest(); |
| 259 // Find the current model_index for the unique_id. | 259 // Find the current model_index for the unique_id. |
| 260 NavigationEntry* entry = NULL; | 260 NavigationEntry* entry = NULL; |
| 261 int model_index = -1; | 261 int model_index = -1; |
| 262 for (int i = 0; i < GetItemCount() - 1; i++) { | 262 for (int i = 0; i < GetItemCount() - 1; i++) { |
| 263 if (IsSeparator(i)) | 263 if (IsSeparator(i)) |
| 264 continue; | 264 continue; |
| 265 if (GetNavigationEntry(i)->GetUniqueID() == unique_id) { | 265 if (GetNavigationEntry(i)->GetUniqueID() == unique_id) { |
| 266 model_index = i; | 266 model_index = i; |
| 267 entry = GetNavigationEntry(i); | 267 entry = GetNavigationEntry(i); |
| 268 break; | 268 break; |
| 269 } | 269 } |
| 270 } | 270 } |
| 271 | 271 |
| 272 if (!entry) | 272 if (!entry) |
| 273 // The NavigationEntry wasn't found, this can happen if the user | 273 // The NavigationEntry wasn't found, this can happen if the user |
| 274 // navigates to another page and a NavigatationEntry falls out of the | 274 // navigates to another page and a NavigatationEntry falls out of the |
| 275 // range of kMaxHistoryItems. | 275 // range of kMaxHistoryItems. |
| 276 return; | 276 return; |
| 277 | 277 |
| 278 // Now that we have a valid NavigationEntry, decode the favicon and assign | 278 // Now that we have a valid NavigationEntry, decode the favicon and assign |
| 279 // it to the NavigationEntry. | 279 // it to the NavigationEntry. |
| 280 const history::FaviconDataElement& element = favicon_data.elements[0]; |
| 280 SkBitmap fav_icon; | 281 SkBitmap fav_icon; |
| 281 if (gfx::PNGCodec::Decode(favicon.image_data->front(), | 282 if (gfx::PNGCodec::Decode(element.bitmap_data->front(), |
| 282 favicon.image_data->size(), | 283 element.bitmap_data->size(), |
| 283 &fav_icon)) { | 284 &fav_icon)) { |
| 284 entry->GetFavicon().valid = true; | 285 entry->GetFavicon().valid = true; |
| 285 entry->GetFavicon().url = favicon.icon_url; | 286 entry->GetFavicon().url = element.icon_url; |
| 286 if (fav_icon.empty()) | 287 if (fav_icon.empty()) |
| 287 return; | 288 return; |
| 288 // TODO: Once the history service returns more representations, | 289 // TODO: Once the history service returns more representations, |
| 289 // use them all instead of having just the lodpi favicon. | 290 // use them all instead of having just the lodpi favicon. |
| 290 entry->GetFavicon().image = gfx::Image(fav_icon); | 291 entry->GetFavicon().image = gfx::Image(fav_icon); |
| 291 if (menu_model_delegate()) { | 292 if (menu_model_delegate()) { |
| 292 menu_model_delegate()->OnIconChanged(model_index); | 293 menu_model_delegate()->OnIconChanged(model_index); |
| 293 } | 294 } |
| 294 } | 295 } |
| 295 } | 296 } |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 470 metric_string += "ForwardMenu_"; | 471 metric_string += "ForwardMenu_"; |
| 471 else | 472 else |
| 472 metric_string += "BackMenu_"; | 473 metric_string += "BackMenu_"; |
| 473 metric_string += action; | 474 metric_string += action; |
| 474 if (index != -1) { | 475 if (index != -1) { |
| 475 // +1 is for historical reasons (indices used to start at 1). | 476 // +1 is for historical reasons (indices used to start at 1). |
| 476 metric_string += base::IntToString(index + 1); | 477 metric_string += base::IntToString(index + 1); |
| 477 } | 478 } |
| 478 return metric_string; | 479 return metric_string; |
| 479 } | 480 } |
| OLD | NEW |