15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#ifndef CONTENT_RENDERER_FETCHERS_IMAGE_RESOURCE_FETCHER_H_
6a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#define CONTENT_RENDERER_FETCHERS_IMAGE_RESOURCE_FETCHER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLRequest.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "url/gurl.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkBitmap;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class WebFrame;
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class WebURLResponse;
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
21a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)namespace content {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ResourceFetcher;
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ImageResourceFetcher handles downloading an image for a webview. Once
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// downloading is done the supplied callback is notified. ImageResourceFetcher
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is used to download the favicon and images for web apps.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImageResourceFetcher {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef base::Callback<void(ImageResourceFetcher*, const SkBitmap&)> Callback;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ImageResourceFetcher(const GURL& image_url,
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                       blink::WebFrame* frame,
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                       int id,
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                       int image_size,
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                       blink::WebURLRequest::RequestContext request_context,
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                       const Callback& callback);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  virtual ~ImageResourceFetcher();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // URL of the image we're downloading.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL& image_url() const { return image_url_; }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Unique identifier for the request.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int id() const { return id_; }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ResourceFetcher::Callback. Decodes the image and invokes callback_.
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void OnURLFetchComplete(const blink::WebURLResponse& response,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const std::string& data);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Callback callback_;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Unique identifier for the request.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int id_;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // URL of the image.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL image_url_;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The size of the image. This is only a hint that is used if the image
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // contains multiple sizes. A value of 0 results in using the first frame
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // of the image.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int image_size_;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Does the actual download.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ResourceFetcher> fetcher_;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ImageResourceFetcher);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
71a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)}  // namespace content
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#endif  // CONTENT_RENDERER_FETCHERS_IMAGE_RESOURCE_FETCHER_H_
74