blob: bc28c9129ce37c0e57739acc2151ffb9f02e28c9 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_RENDERER_IMAGE_DOWNLOADER_SINGLE_IMAGE_DOWNLOADER_H_
#define CONTENT_RENDERER_IMAGE_DOWNLOADER_SINGLE_IMAGE_DOWNLOADER_H_
#include "base/memory/weak_ptr.h"
#include "content/renderer/image_downloader/image_downloader_base.h"
namespace content {
// A one time image downloader that will download a single image. When there are
// multiple frames, returns the first one. Returns an empty bitmap if
// downloading fails. This class does not impose size limitation on the image.
class SingleImageDownloader {
public:
using DownloadImageCallback = base::Callback<void(const SkBitmap&)>;
// Called to download the image in given |url|, and run |cb| when done.
// A new ImageDownloaderBase will be created and used to download the image,
// and will be destructed when downloading finishes or |render_frame| is
// destructed.
static void DownloadImage(base::WeakPtr<RenderFrame> render_frame,
const GURL& url,
const DownloadImageCallback& cb);
private:
// Callback when downloading finishes. |image_downloader| is passed in as a
// unique_ptr to keep it alive while downloading and destroy it after this
// callback is called.
static void DidDownloadImage(
std::unique_ptr<ImageDownloaderBase> image_downloader,
const DownloadImageCallback& callback,
int http_status_code,
const std::vector<SkBitmap>& images);
DISALLOW_COPY_AND_ASSIGN(SingleImageDownloader);
};
} // namespace content
#endif // CONTENT_RENDERER_IMAGE_DOWNLOADER_SINGLE_IMAGE_DOWNLOADER_H_