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

Side by Side Diff: chrome/browser/thumbnails/thumbnail_list_source.cc

Issue 1021803002: [Thumbnails] Injecting TopSites into ThumbnailListSource. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Ensured some routines are in the IO thread. Created 5 years, 9 months 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
« no previous file with comments | « chrome/browser/thumbnails/thumbnail_list_source.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/thumbnails/thumbnail_list_source.h" 5 #include "chrome/browser/thumbnails/thumbnail_list_source.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/memory/ref_counted_memory.h" 12 #include "base/memory/ref_counted_memory.h"
13 #include "base/strings/string_util.h" 13 #include "base/strings/string_util.h"
14 #include "chrome/browser/history/top_sites_factory.h" 14 #include "chrome/browser/history/top_sites_factory.h"
15 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/search/instant_io_context.h" 16 #include "chrome/browser/search/instant_io_context.h"
17 #include "chrome/browser/thumbnails/thumbnail_service.h" 17 #include "chrome/browser/thumbnails/thumbnail_service.h"
18 #include "chrome/browser/thumbnails/thumbnail_service_factory.h" 18 #include "chrome/browser/thumbnails/thumbnail_service_factory.h"
19 #include "chrome/common/url_constants.h" 19 #include "chrome/common/url_constants.h"
20 #include "components/history/core/browser/top_sites.h" 20 #include "components/history/core/browser/top_sites.h"
21 #include "content/public/browser/browser_thread.h"
21 #include "net/base/escape.h" 22 #include "net/base/escape.h"
22 #include "net/url_request/url_request.h" 23 #include "net/url_request/url_request.h"
23 24
25 using content::BrowserThread;
26
24 namespace { 27 namespace {
25 28
26 const char kHtmlHeader[] = 29 const char kHtmlHeader[] =
27 "<!DOCTYPE html>\n<html>\n<head>\n<title>TopSites Thumbnails</title>\n" 30 "<!DOCTYPE html>\n<html>\n<head>\n<title>TopSites Thumbnails</title>\n"
28 "<meta charset=\"utf-8\">\n" 31 "<meta charset=\"utf-8\">\n"
29 "<style type=\"text/css\">\nimg.thumb {border: 1px solid black;}\n" 32 "<style type=\"text/css\">\nimg.thumb {border: 1px solid black;}\n"
30 "li {white-space: nowrap;}\n</style>\n"; 33 "li {white-space: nowrap;}\n</style>\n";
31 const char kHtmlBody[] = "</head>\n<body>\n"; 34 const char kHtmlBody[] = "</head>\n<body>\n";
32 const char kHtmlFooter[] = "</body>\n</html>\n"; 35 const char kHtmlFooter[] = "</body>\n</html>\n";
33 36
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 out->push_back("</li>\n"); 75 out->push_back("</li>\n");
73 } 76 }
74 } 77 }
75 out->push_back("</ul></div>\n"); 78 out->push_back("</ul></div>\n");
76 } 79 }
77 80
78 } // namespace 81 } // namespace
79 82
80 ThumbnailListSource::ThumbnailListSource(Profile* profile) 83 ThumbnailListSource::ThumbnailListSource(Profile* profile)
81 : thumbnail_service_(ThumbnailServiceFactory::GetForProfile(profile)), 84 : thumbnail_service_(ThumbnailServiceFactory::GetForProfile(profile)),
82 profile_(profile), 85 top_sites_(TopSitesFactory::GetForProfile(profile)),
83 weak_ptr_factory_(this) { 86 weak_ptr_factory_(this) {
84 } 87 }
85 88
86 ThumbnailListSource::~ThumbnailListSource() { 89 ThumbnailListSource::~ThumbnailListSource() {
87 } 90 }
88 91
89 std::string ThumbnailListSource::GetSource() const { 92 std::string ThumbnailListSource::GetSource() const {
90 return chrome::kChromeUIThumbnailListHost; 93 return chrome::kChromeUIThumbnailListHost;
91 } 94 }
92 95
93 void ThumbnailListSource::StartDataRequest( 96 void ThumbnailListSource::StartDataRequest(
94 const std::string& path, 97 const std::string& path,
95 int render_process_id, 98 int render_process_id,
96 int render_frame_id, 99 int render_frame_id,
97 const content::URLDataSource::GotDataCallback& callback) { 100 const content::URLDataSource::GotDataCallback& callback) {
98 scoped_refptr<history::TopSites> top_sites = 101 DCHECK_CURRENTLY_ON(BrowserThread::IO);
99 TopSitesFactory::GetForProfile(profile_); 102 if (!top_sites_) {
100 if (!top_sites) {
101 callback.Run(NULL); 103 callback.Run(NULL);
102 return; 104 return;
103 } 105 }
104 106
105 top_sites->GetMostVisitedURLs( 107 top_sites_->GetMostVisitedURLs(
106 base::Bind(&ThumbnailListSource::OnMostVisitedURLsAvailable, 108 base::Bind(&ThumbnailListSource::OnMostVisitedURLsAvailable,
107 weak_ptr_factory_.GetWeakPtr(), callback), 109 weak_ptr_factory_.GetWeakPtr(), callback),
108 true); 110 true);
109 } 111 }
110 112
111 std::string ThumbnailListSource::GetMimeType(const std::string& path) const { 113 std::string ThumbnailListSource::GetMimeType(const std::string& path) const {
112 return "text/html"; 114 return "text/html";
113 } 115 }
114 116
115 base::MessageLoop* ThumbnailListSource::MessageLoopForRequestPath( 117 base::MessageLoop* ThumbnailListSource::MessageLoopForRequestPath(
(...skipping 10 matching lines...) Expand all
126 return URLDataSource::ShouldServiceRequest(request); 128 return URLDataSource::ShouldServiceRequest(request);
127 } 129 }
128 130
129 bool ThumbnailListSource::ShouldReplaceExistingSource() const { 131 bool ThumbnailListSource::ShouldReplaceExistingSource() const {
130 return false; 132 return false;
131 } 133 }
132 134
133 void ThumbnailListSource::OnMostVisitedURLsAvailable( 135 void ThumbnailListSource::OnMostVisitedURLsAvailable(
134 const content::URLDataSource::GotDataCallback& callback, 136 const content::URLDataSource::GotDataCallback& callback,
135 const history::MostVisitedURLList& mvurl_list) { 137 const history::MostVisitedURLList& mvurl_list) {
138 DCHECK_CURRENTLY_ON(BrowserThread::IO);
136 const size_t num_mv = mvurl_list.size(); 139 const size_t num_mv = mvurl_list.size();
137 size_t num_mv_with_thumb = 0; 140 size_t num_mv_with_thumb = 0;
138 141
139 // Encode all available thumbnails and store into |base64_encoded_pngs|. 142 // Encode all available thumbnails and store into |base64_encoded_pngs|.
140 std::vector<std::string> base64_encoded_pngs(num_mv); 143 std::vector<std::string> base64_encoded_pngs(num_mv);
141 for (size_t i = 0; i < num_mv; ++i) { 144 for (size_t i = 0; i < num_mv; ++i) {
142 scoped_refptr<base::RefCountedMemory> data; 145 scoped_refptr<base::RefCountedMemory> data;
143 if (thumbnail_service_->GetPageThumbnail(mvurl_list[i].url, false, &data)) { 146 if (thumbnail_service_->GetPageThumbnail(mvurl_list[i].url, false, &data)) {
144 base::Base64Encode(std::string(data->front_as<char>(), data->size()), 147 base::Base64Encode(std::string(data->front_as<char>(), data->size()),
145 &base64_encoded_pngs[i]); 148 &base64_encoded_pngs[i]);
(...skipping 11 matching lines...) Expand all
157 } 160 }
158 if (num_mv_with_thumb < num_mv) { 161 if (num_mv_with_thumb < num_mv) {
159 out.push_back("<h2>TopSites URLs without Thumbnails</h2>\n"); 162 out.push_back("<h2>TopSites URLs without Thumbnails</h2>\n");
160 RenderMostVisitedURLList(mvurl_list, base64_encoded_pngs, false, &out); 163 RenderMostVisitedURLList(mvurl_list, base64_encoded_pngs, false, &out);
161 } 164 }
162 out.push_back(kHtmlFooter); 165 out.push_back(kHtmlFooter);
163 166
164 std::string out_html = JoinString(out, ""); 167 std::string out_html = JoinString(out, "");
165 callback.Run(base::RefCountedString::TakeString(&out_html)); 168 callback.Run(base::RefCountedString::TakeString(&out_html));
166 } 169 }
OLDNEW
« no previous file with comments | « chrome/browser/thumbnails/thumbnail_list_source.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698