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

Side by Side Diff: components/suggestions/image_manager.cc

Issue 2794343002: Network traffic annotation added to image_data_fetcher. (Closed)
Patch Set: Annotation updated. Created 3 years, 7 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
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 "components/suggestions/image_manager.h" 5 #include "components/suggestions/image_manager.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/location.h" 11 #include "base/location.h"
12 #include "base/task_runner_util.h" 12 #include "base/task_runner_util.h"
13 #include "components/image_fetcher/core/image_fetcher.h" 13 #include "components/image_fetcher/core/image_fetcher.h"
14 #include "components/suggestions/image_encoder.h" 14 #include "components/suggestions/image_encoder.h"
15 #include "net/traffic_annotation/network_traffic_annotation.h"
15 #include "ui/gfx/image/image.h" 16 #include "ui/gfx/image/image.h"
16 17
17 using leveldb_proto::ProtoDatabase; 18 using leveldb_proto::ProtoDatabase;
18 19
19 namespace { 20 namespace {
20 21
21 // Statistics are logged to UMA with this string as part of histogram name. They 22 // Statistics are logged to UMA with this string as part of histogram name. They
22 // can all be found under LevelDB.*.ImageManager. Changing this needs to 23 // can all be found under LevelDB.*.ImageManager. Changing this needs to
23 // synchronize with histograms.xml, AND will also become incompatible with older 24 // synchronize with histograms.xml, AND will also become incompatible with older
24 // browsers still reporting the previous values. 25 // browsers still reporting the previous values.
25 const char kDatabaseUMAClientName[] = "ImageManager"; 26 const char kDatabaseUMAClientName[] = "ImageManager";
26 27
27 std::unique_ptr<SkBitmap> DecodeImage( 28 std::unique_ptr<SkBitmap> DecodeImage(
28 scoped_refptr<base::RefCountedMemory> encoded_data) { 29 scoped_refptr<base::RefCountedMemory> encoded_data) {
29 return suggestions::DecodeJPEGToSkBitmap(encoded_data->front(), 30 return suggestions::DecodeJPEGToSkBitmap(encoded_data->front(),
30 encoded_data->size()); 31 encoded_data->size());
31 } 32 }
32 33
33 // Wraps an ImageManager callback so that it can be used with the ImageFetcher. 34 // Wraps an ImageManager callback so that it can be used with the ImageFetcher.
34 void WrapCallback( 35 void WrapCallback(
35 const suggestions::ImageManager::ImageCallback& wrapped_callback, 36 const suggestions::ImageManager::ImageCallback& wrapped_callback,
36 const std::string& url, 37 const std::string& url,
37 const gfx::Image& image, 38 const gfx::Image& image,
38 const image_fetcher::RequestMetadata& metadata) { 39 const image_fetcher::RequestMetadata& metadata) {
39 wrapped_callback.Run(GURL(url), image); 40 wrapped_callback.Run(GURL(url), image);
40 } 41 }
41 42
43 constexpr net::NetworkTrafficAnnotationTag kTrafficAnnotation =
44 net::DefineNetworkTrafficAnnotation("suggestions_image_manager", R"(
45 semantics {
46 sender: "Suggestions Service Thumbnail Fetch"
47 description:
48 "Retrieves thumbnails for site suggestions based on the user's "
49 "synced browsing history, for use e.g. on the New Tab page."
50 trigger:
51 "Triggered when a thumbnail for a suggestion is required, and no "
52 "local thumbnail is available."
53 data: "The URL for which to retrieve a thumbnail."
54 destination: GOOGLE_OWNED_SERVICE
55 }
56 policy {
57 cookies_allowed: false
58 setting:
59 "Users can disable this feature by signing out of Chrome, or "
msramek 2017/05/19 08:47:38 nit: Offset.
Ramin Halavati 2017/05/19 09:03:37 Done.
60 "disabling Sync or History Sync in Chrome settings under 'Advanced "
61 "sync settings...'. The feature is enabled by default."
62 chrome_policy {
63 SyncDisabled {
64 policy_options {mode: MANDATORY}
65 SyncDisabled: true
66 }
67 }
68 chrome_policy {
69 SigninAllowed {
70 policy_options {mode: MANDATORY}
71 SigninAllowed: false
72 }
73 }
74 })");
75
42 } // namespace 76 } // namespace
43 77
44 namespace suggestions { 78 namespace suggestions {
45 79
46 ImageManager::ImageManager() : weak_ptr_factory_(this) {} 80 ImageManager::ImageManager() : weak_ptr_factory_(this) {}
47 81
48 ImageManager::ImageManager( 82 ImageManager::ImageManager(
49 std::unique_ptr<image_fetcher::ImageFetcher> image_fetcher, 83 std::unique_ptr<image_fetcher::ImageFetcher> image_fetcher,
50 std::unique_ptr<ProtoDatabase<ImageData>> database, 84 std::unique_ptr<ProtoDatabase<ImageData>> database,
51 const base::FilePath& database_dir, 85 const base::FilePath& database_dir,
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 173
140 void ImageManager::OnCacheImageDecoded( 174 void ImageManager::OnCacheImageDecoded(
141 const GURL& url, 175 const GURL& url,
142 const GURL& image_url, 176 const GURL& image_url,
143 const ImageCallback& callback, 177 const ImageCallback& callback,
144 std::unique_ptr<SkBitmap> bitmap) { 178 std::unique_ptr<SkBitmap> bitmap) {
145 if (bitmap.get()) { 179 if (bitmap.get()) {
146 callback.Run(url, gfx::Image::CreateFrom1xBitmap(*bitmap)); 180 callback.Run(url, gfx::Image::CreateFrom1xBitmap(*bitmap));
147 } else { 181 } else {
148 image_fetcher_->StartOrQueueNetworkRequest( 182 image_fetcher_->StartOrQueueNetworkRequest(
149 url.spec(), image_url, base::Bind(&WrapCallback, callback)); 183 url.spec(), image_url, base::Bind(&WrapCallback, callback),
184 kTrafficAnnotation);
150 } 185 }
151 } 186 }
152 187
153 scoped_refptr<base::RefCountedMemory> ImageManager::GetEncodedImageFromCache( 188 scoped_refptr<base::RefCountedMemory> ImageManager::GetEncodedImageFromCache(
154 const GURL& url) { 189 const GURL& url) {
155 ImageMap::iterator image_iter = image_map_.find(url.spec()); 190 ImageMap::iterator image_iter = image_map_.find(url.spec());
156 if (image_iter != image_map_.end()) { 191 if (image_iter != image_map_.end()) {
157 return image_iter->second; 192 return image_iter->second;
158 } 193 }
159 return nullptr; 194 return nullptr;
160 } 195 }
161 196
162 void ImageManager::ServeFromCacheOrNetwork( 197 void ImageManager::ServeFromCacheOrNetwork(
163 const GURL& url, 198 const GURL& url,
164 const GURL& image_url, 199 const GURL& image_url,
165 ImageCallback callback) { 200 ImageCallback callback) {
166 scoped_refptr<base::RefCountedMemory> encoded_data = 201 scoped_refptr<base::RefCountedMemory> encoded_data =
167 GetEncodedImageFromCache(url); 202 GetEncodedImageFromCache(url);
168 if (encoded_data.get()) { 203 if (encoded_data.get()) {
169 base::PostTaskAndReplyWithResult( 204 base::PostTaskAndReplyWithResult(
170 background_task_runner_.get(), FROM_HERE, 205 background_task_runner_.get(), FROM_HERE,
171 base::Bind(&DecodeImage, encoded_data), 206 base::Bind(&DecodeImage, encoded_data),
172 base::Bind(&ImageManager::OnCacheImageDecoded, 207 base::Bind(&ImageManager::OnCacheImageDecoded,
173 weak_ptr_factory_.GetWeakPtr(), url, image_url, callback)); 208 weak_ptr_factory_.GetWeakPtr(), url, image_url, callback));
174 } else { 209 } else {
175 image_fetcher_->StartOrQueueNetworkRequest( 210 image_fetcher_->StartOrQueueNetworkRequest(
176 url.spec(), image_url, base::Bind(&WrapCallback, callback)); 211 url.spec(), image_url, base::Bind(&WrapCallback, callback),
212 kTrafficAnnotation);
177 } 213 }
178 } 214 }
179 215
180 void ImageManager::SaveImage(const std::string& url, const SkBitmap& bitmap) { 216 void ImageManager::SaveImage(const std::string& url, const SkBitmap& bitmap) {
181 scoped_refptr<base::RefCountedBytes> encoded_data( 217 scoped_refptr<base::RefCountedBytes> encoded_data(
182 new base::RefCountedBytes()); 218 new base::RefCountedBytes());
183 if (!EncodeSkBitmapToJPEG(bitmap, &encoded_data->data())) { 219 if (!EncodeSkBitmapToJPEG(bitmap, &encoded_data->data())) {
184 return; 220 return;
185 } 221 }
186 222
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 it != pending_cache_requests_.end(); ++it) { 290 it != pending_cache_requests_.end(); ++it) {
255 const ImageCacheRequest& request = it->second; 291 const ImageCacheRequest& request = it->second;
256 for (CallbackVector::const_iterator callback_it = request.callbacks.begin(); 292 for (CallbackVector::const_iterator callback_it = request.callbacks.begin();
257 callback_it != request.callbacks.end(); ++callback_it) { 293 callback_it != request.callbacks.end(); ++callback_it) {
258 ServeFromCacheOrNetwork(request.url, request.image_url, *callback_it); 294 ServeFromCacheOrNetwork(request.url, request.image_url, *callback_it);
259 } 295 }
260 } 296 }
261 } 297 }
262 298
263 } // namespace suggestions 299 } // namespace suggestions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698