• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 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 #ifndef CONTENT_RENDERER_IMAGE_LOADING_HELPER_H_
6 #define CONTENT_RENDERER_IMAGE_LOADING_HELPER_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #include "base/memory/scoped_vector.h"
12 #include "content/public/renderer/render_frame_observer.h"
13 #include "url/gurl.h"
14 
15 class SkBitmap;
16 
17 namespace content {
18 
19 class MultiResolutionImageResourceFetcher;
20 
21 // This class deals with image downloading.
22 // One instance of ImageLoadingHelper is owned by RenderFrame.
23 class ImageLoadingHelper : public RenderFrameObserver {
24  public:
25   explicit ImageLoadingHelper(RenderFrame* render_frame);
26 
27  private:
28   virtual ~ImageLoadingHelper();
29 
30   // Message handler.
31   void OnDownloadImage(int id,
32                        const GURL& image_url,
33                        bool is_favicon,
34                        uint32_t max_image_size);
35 
36   // Requests to download an image. When done, the ImageLoadingHelper
37   // is notified by way of DidDownloadImage. Returns true if the
38   // request was successfully started, false otherwise. id is used to
39   // uniquely identify the request and passed back to the
40   // DidDownloadImage method. If the image is a favicon, cookies will not be
41   // sent nor accepted during download. If the image has multiple frames, all
42   // the frames whose size <= |max_image_size| are returned. If all of the
43   // frames are larger than |max_image_size|, the smallest frame is resized to
44   // |max_image_size| and is the only result. |max_image_size| == 0 is
45   // interpreted as no max image size.
46   bool DownloadImage(int id,
47                      const GURL& image_url,
48                      bool is_favicon,
49                      uint32_t max_image_size);
50 
51   // This callback is triggered when DownloadImage completes, either
52   // succesfully or with a failure. See DownloadImage for more
53   // details.
54   void DidDownloadImage(
55       uint32_t max_image_size,
56       MultiResolutionImageResourceFetcher* fetcher,
57       const std::vector<SkBitmap>& images);
58 
59   // Decodes a data: URL image or returns an empty image in case of failure.
60   SkBitmap ImageFromDataUrl(const GURL&) const;
61 
62   // RenderFrameObserver implementation.
63   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
64 
65   typedef ScopedVector<MultiResolutionImageResourceFetcher>
66       ImageResourceFetcherList;
67 
68   // ImageResourceFetchers schedule via DownloadImage.
69   ImageResourceFetcherList image_fetchers_;
70 
71   DISALLOW_COPY_AND_ASSIGN(ImageLoadingHelper);
72 };
73 
74 }  // namespace content
75 
76 #endif  // CONTENT_RENDERER_IMAGE_LOADING_HELPER_H_
77 
78