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

Side by Side Diff: components/image_fetcher/image_fetcher_impl.cc

Issue 2761303002: Move common ImageFetcher component files to core/ (Closed)
Patch Set: Rebased. Created 3 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 | « components/image_fetcher/image_fetcher_impl.h ('k') | components/image_fetcher/ios/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "components/image_fetcher/image_fetcher_impl.h"
6
7 #include <string>
8
9 #include "base/bind.h"
10 #include "net/base/load_flags.h"
11 #include "net/url_request/url_request_context_getter.h"
12
13 namespace image_fetcher {
14
15 ImageFetcherImpl::ImageFetcherImpl(
16 std::unique_ptr<ImageDecoder> image_decoder,
17 net::URLRequestContextGetter* url_request_context)
18 : delegate_(nullptr), url_request_context_(url_request_context),
19 image_decoder_(std::move(image_decoder)),
20 image_data_fetcher_(new ImageDataFetcher(url_request_context_.get())) {
21 }
22
23 ImageFetcherImpl::~ImageFetcherImpl() {}
24
25 ImageFetcherImpl::ImageRequest::ImageRequest() {}
26
27 ImageFetcherImpl::ImageRequest::ImageRequest(const ImageRequest& other) =
28 default;
29
30 ImageFetcherImpl::ImageRequest::~ImageRequest() { }
31
32 void ImageFetcherImpl::SetImageFetcherDelegate(ImageFetcherDelegate* delegate) {
33 DCHECK(delegate);
34 delegate_ = delegate;
35 }
36
37 void ImageFetcherImpl::SetDataUseServiceName(
38 DataUseServiceName data_use_service_name) {
39 image_data_fetcher_->SetDataUseServiceName(data_use_service_name);
40 }
41
42 void ImageFetcherImpl::SetDesiredImageFrameSize(const gfx::Size& size) {
43 desired_image_frame_size_ = size;
44 }
45
46 void ImageFetcherImpl::StartOrQueueNetworkRequest(
47 const std::string& id,
48 const GURL& image_url,
49 const ImageFetcherCallback& callback) {
50 // Before starting to fetch the image. Look for a request in progress for
51 // |image_url|, and queue if appropriate.
52 ImageRequestMap::iterator it = pending_net_requests_.find(image_url);
53 if (it == pending_net_requests_.end()) {
54 ImageRequest request;
55 request.id = id;
56 request.callbacks.push_back(callback);
57 pending_net_requests_[image_url].swap(&request);
58
59 image_data_fetcher_->FetchImageData(
60 image_url,
61 base::Bind(&ImageFetcherImpl::OnImageURLFetched,
62 base::Unretained(this), image_url));
63 } else {
64 // Request in progress. Register as an interested callback.
65 it->second.callbacks.push_back(callback);
66 }
67 }
68
69 void ImageFetcherImpl::OnImageURLFetched(const GURL& image_url,
70 const std::string& image_data,
71 const RequestMetadata& metadata) {
72 // Inform the ImageFetcherDelegate.
73 if (delegate_) {
74 auto it = pending_net_requests_.find(image_url);
75 DCHECK(it != pending_net_requests_.end());
76 delegate_->OnImageDataFetched(it->second.id, image_data);
77 }
78
79 image_decoder_->DecodeImage(
80 image_data, desired_image_frame_size_,
81 base::Bind(&ImageFetcherImpl::OnImageDecoded, base::Unretained(this),
82 image_url, metadata));
83 }
84
85 void ImageFetcherImpl::OnImageDecoded(const GURL& image_url,
86 const RequestMetadata& metadata,
87 const gfx::Image& image) {
88 // Get request for the given image_url from the request queue.
89 ImageRequestMap::iterator image_iter = pending_net_requests_.find(image_url);
90 DCHECK(image_iter != pending_net_requests_.end());
91 ImageRequest* request = &image_iter->second;
92
93 // Run all callbacks
94 for (const auto& callback : request->callbacks) {
95 callback.Run(request->id, image, metadata);
96 }
97
98 // Inform the ImageFetcherDelegate.
99 if (delegate_) {
100 delegate_->OnImageFetched(request->id, image);
101 }
102
103 // Erase the completed ImageRequest.
104 pending_net_requests_.erase(image_iter);
105 }
106
107 ImageDecoder* ImageFetcherImpl::GetImageDecoder() {
108 return image_decoder_.get();
109 }
110
111 } // namespace image_fetcher
OLDNEW
« no previous file with comments | « components/image_fetcher/image_fetcher_impl.h ('k') | components/image_fetcher/ios/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698