1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/search/most_visited_iframe_source.h" 6 7 #include "base/metrics/histogram.h" 8 #include "base/strings/string_number_conversions.h" 9 #include "chrome/common/url_constants.h" 10 #include "grit/browser_resources.h" 11 #include "net/base/url_util.h" 12 #include "url/gurl.h" 13 14 namespace { 15 16 const char kTitleHTMLPath[] = "/title.html"; 17 const char kTitleCSSPath[] = "/title.css"; 18 const char kTitleJSPath[] = "/title.js"; 19 const char kThumbnailHTMLPath[] = "/thumbnail.html"; 20 const char kThumbnailCSSPath[] = "/thumbnail.css"; 21 const char kThumbnailJSPath[] = "/thumbnail.js"; 22 const char kUtilJSPath[] = "/util.js"; 23 const char kCommonCSSPath[] = "/common.css"; 24 const char kLogHTMLPath[] = "/log.html"; 25 26 } // namespace 27 28 MostVisitedIframeSource::MostVisitedIframeSource() { 29 } 30 31 MostVisitedIframeSource::~MostVisitedIframeSource() { 32 } 33 34 const int MostVisitedIframeSource::kNumMostVisited = 8; 35 const char MostVisitedIframeSource::kMostVisitedHistogramName[] = 36 "NewTabPage.MostVisited"; 37 38 std::string MostVisitedIframeSource::GetSource() const { 39 return chrome::kChromeSearchMostVisitedHost; 40 } 41 42 void MostVisitedIframeSource::StartDataRequest( 43 const std::string& path_and_query, 44 int render_process_id, 45 int render_view_id, 46 const content::URLDataSource::GotDataCallback& callback) { 47 GURL url(chrome::kChromeSearchMostVisitedUrl + path_and_query); 48 std::string path(url.path()); 49 if (path == kTitleHTMLPath) { 50 SendResource(IDR_MOST_VISITED_TITLE_HTML, callback); 51 } else if (path == kTitleCSSPath) { 52 SendResource(IDR_MOST_VISITED_TITLE_CSS, callback); 53 } else if (path == kTitleJSPath) { 54 SendResource(IDR_MOST_VISITED_TITLE_JS, callback); 55 } else if (path == kThumbnailHTMLPath) { 56 SendResource(IDR_MOST_VISITED_THUMBNAIL_HTML, callback); 57 } else if (path == kThumbnailCSSPath) { 58 SendResource(IDR_MOST_VISITED_THUMBNAIL_CSS, callback); 59 } else if (path == kThumbnailJSPath) { 60 SendResource(IDR_MOST_VISITED_THUMBNAIL_JS, callback); 61 } else if (path == kUtilJSPath) { 62 SendResource(IDR_MOST_VISITED_UTIL_JS, callback); 63 } else if (path == kCommonCSSPath) { 64 SendResource(IDR_MOST_VISITED_IFRAME_CSS, callback); 65 } else if (path == kLogHTMLPath) { 66 // Log the clicked MostVisited element by position. 67 std::string str_position; 68 int position; 69 if (net::GetValueForKeyInQuery(url, "pos", &str_position) && 70 base::StringToInt(str_position, &position)) 71 UMA_HISTOGRAM_ENUMERATION(kMostVisitedHistogramName, position, 72 kNumMostVisited); 73 callback.Run(NULL); 74 } else { 75 callback.Run(NULL); 76 } 77 } 78 79 bool MostVisitedIframeSource::ServesPath(const std::string& path) const { 80 return path == kTitleHTMLPath || path == kTitleCSSPath || 81 path == kTitleJSPath || path == kThumbnailHTMLPath || 82 path == kThumbnailCSSPath || path == kThumbnailJSPath || 83 path == kUtilJSPath || path == kCommonCSSPath || path == kLogHTMLPath; 84 } 85