| Index: components/ntp_tiles/metrics.cc | 
| diff --git a/components/ntp_tiles/metrics.cc b/components/ntp_tiles/metrics.cc | 
| index 0a2f207c32393722a1142221581dbee18bb8e6f4..819a6aed935e2a6206b653b4e0fc839fdffec5f6 100644 | 
| --- a/components/ntp_tiles/metrics.cc | 
| +++ b/components/ntp_tiles/metrics.cc | 
| @@ -27,9 +27,11 @@ const char kHistogramPopularName[] = "popular"; | 
| const char kHistogramWhitelistName[] = "whitelist"; | 
|  | 
| // Suffixes for the various icon types. | 
| -const char kIconTypeSuffixColor[] = "IconsColor"; | 
| -const char kIconTypeSuffixGray[] = "IconsGray"; | 
| -const char kIconTypeSuffixReal[] = "IconsReal"; | 
| +const char kTileTypeSuffixIconColor[] = "IconsColor"; | 
| +const char kTileTypeSuffixIconGray[] = "IconsGray"; | 
| +const char kTileTypeSuffixIconReal[] = "IconsReal"; | 
| +const char kTileTypeSuffixThumbnail[] = "Thumbnail"; | 
| +const char kTileTypeSuffixThumbnailFailed[] = "ThumbnailFailed"; | 
|  | 
| // Log an event for a given |histogram| at a given element |position|. This | 
| // routine exists because regular histogram macros are cached thus can't be used | 
| @@ -59,17 +61,19 @@ std::string GetSourceHistogramName(TileSource source) { | 
| return std::string(); | 
| } | 
|  | 
| -const char* GetIconTypeSuffix(TileVisualType type) { | 
| +const char* GetTileTypeSuffix(TileVisualType type) { | 
| switch (type) { | 
| case TileVisualType::ICON_COLOR: | 
| -      return kIconTypeSuffixColor; | 
| +      return kTileTypeSuffixIconColor; | 
| case TileVisualType::ICON_DEFAULT: | 
| -      return kIconTypeSuffixGray; | 
| +      return kTileTypeSuffixIconGray; | 
| case TileVisualType::ICON_REAL: | 
| -      return kIconTypeSuffixReal; | 
| +      return kTileTypeSuffixIconReal; | 
| +    case THUMBNAIL: | 
| +      return kTileTypeSuffixThumbnail; | 
| +    case THUMBNAIL_FAILED: | 
| +      return kTileTypeSuffixThumbnailFailed; | 
| case TileVisualType::NONE:                     // Fall through. | 
| -    case TileVisualType::NUM_RECORDED_TILE_TYPES:  // Fall through. | 
| -    case TileVisualType::THUMBNAIL:                // Fall through. | 
| case TileVisualType::UNKNOWN_TILE_TYPE: | 
| break; | 
| } | 
| @@ -85,7 +89,6 @@ void RecordPageImpression(const std::vector<TileImpression>& tiles, | 
| for (int index = 0; index < static_cast<int>(tiles.size()); index++) { | 
| TileSource source = tiles[index].source; | 
| TileVisualType tile_type = tiles[index].type; | 
| -    const GURL& url = tiles[index].url; | 
|  | 
| UMA_HISTOGRAM_ENUMERATION("NewTabPage.SuggestionsImpression", index, | 
| kMaxNumTiles); | 
| @@ -95,26 +98,28 @@ void RecordPageImpression(const std::vector<TileImpression>& tiles, | 
| "NewTabPage.SuggestionsImpression.%s", source_name.c_str()); | 
| LogHistogramEvent(impression_histogram, index, kMaxNumTiles); | 
|  | 
| -    if (tile_type >= NUM_RECORDED_TILE_TYPES) { | 
| +    if (tile_type > LAST_RECORDED_TILE_TYPE) { | 
| continue; | 
| } | 
|  | 
| UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileType", tile_type, | 
| -                              NUM_RECORDED_TILE_TYPES); | 
| +                              LAST_RECORDED_TILE_TYPE + 1); | 
|  | 
| std::string tile_type_histogram = | 
| base::StringPrintf("NewTabPage.TileType.%s", source_name.c_str()); | 
| -    LogHistogramEvent(tile_type_histogram, tile_type, NUM_RECORDED_TILE_TYPES); | 
| +    LogHistogramEvent(tile_type_histogram, tile_type, | 
| +                      LAST_RECORDED_TILE_TYPE + 1); | 
|  | 
| -    const char* icon_type_suffix = GetIconTypeSuffix(tile_type); | 
| -    if (icon_type_suffix) { | 
| +    const char* tile_type_suffix = GetTileTypeSuffix(tile_type); | 
| +    if (tile_type_suffix) { | 
| +      // Note: This handles a null |rappor_service|. | 
| rappor::SampleDomainAndRegistryFromGURL( | 
| rappor_service, | 
| -          base::StringPrintf("NTP.SuggestionsImpressions.%s", icon_type_suffix), | 
| -          url); | 
| +          base::StringPrintf("NTP.SuggestionsImpressions.%s", tile_type_suffix), | 
| +          tiles[index].url); | 
|  | 
| std::string icon_impression_histogram = base::StringPrintf( | 
| -          "NewTabPage.SuggestionsImpression.%s", icon_type_suffix); | 
| +          "NewTabPage.SuggestionsImpression.%s", tile_type_suffix); | 
| LogHistogramEvent(icon_impression_histogram, index, kMaxNumTiles); | 
| } | 
| } | 
| @@ -127,21 +132,21 @@ void RecordTileClick(int index, TileSource source, TileVisualType tile_type) { | 
| "NewTabPage.MostVisited.%s", GetSourceHistogramName(source).c_str()); | 
| LogHistogramEvent(histogram, index, kMaxNumTiles); | 
|  | 
| -  const char* icon_type_suffix = GetIconTypeSuffix(tile_type); | 
| -  if (icon_type_suffix) { | 
| -    std::string icon_histogram = | 
| -        base::StringPrintf("NewTabPage.MostVisited.%s", icon_type_suffix); | 
| -    LogHistogramEvent(icon_histogram, index, kMaxNumTiles); | 
| +  const char* tile_type_suffix = GetTileTypeSuffix(tile_type); | 
| +  if (tile_type_suffix) { | 
| +    std::string tile_type_histogram = | 
| +        base::StringPrintf("NewTabPage.MostVisited.%s", tile_type_suffix); | 
| +    LogHistogramEvent(tile_type_histogram, index, kMaxNumTiles); | 
| } | 
|  | 
| -  if (tile_type < NUM_RECORDED_TILE_TYPES) { | 
| +  if (tile_type <= LAST_RECORDED_TILE_TYPE) { | 
| UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileTypeClicked", tile_type, | 
| -                              NUM_RECORDED_TILE_TYPES); | 
| +                              LAST_RECORDED_TILE_TYPE + 1); | 
|  | 
| std::string histogram = | 
| base::StringPrintf("NewTabPage.TileTypeClicked.%s", | 
| GetSourceHistogramName(source).c_str()); | 
| -    LogHistogramEvent(histogram, tile_type, NUM_RECORDED_TILE_TYPES); | 
| +    LogHistogramEvent(histogram, tile_type, LAST_RECORDED_TILE_TYPE + 1); | 
| } | 
| } | 
|  | 
|  |