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