Home | History | Annotate | Download | only in renderer
      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