blob: 65d80bdac300357d47612c26e3025ca6889021b8 [file] [log] [blame]
license.botbf09a502008-08-24 00:55:551// Copyright (c) 2006-2008 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.
initial.commitf5b16fe2008-07-27 00:20:514
initial.commitf5b16fe2008-07-27 00:20:515#include "webkit/glue/image_resource_fetcher.h"
6
[email protected]2041cf342010-02-19 03:15:597#include "base/callback.h"
[email protected]c1d9cdc2011-01-17 06:50:018#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
[email protected]08397d52011-02-05 01:53:389#include "ui/gfx/size.h"
initial.commitf5b16fe2008-07-27 00:20:5110#include "webkit/glue/image_decoder.h"
[email protected]d5282e72009-05-13 13:16:5211#include "third_party/skia/include/core/SkBitmap.h"
initial.commitf5b16fe2008-07-27 00:20:5112
[email protected]dd7daa82009-08-10 05:46:4513using WebKit::WebFrame;
14
[email protected]f6134ff2009-07-07 16:44:3915namespace webkit_glue {
16
initial.commitf5b16fe2008-07-27 00:20:5117ImageResourceFetcher::ImageResourceFetcher(
initial.commitf5b16fe2008-07-27 00:20:5118 const GURL& image_url,
[email protected]f6134ff2009-07-07 16:44:3919 WebFrame* frame,
20 int id,
21 int image_size,
22 Callback* callback)
23 : callback_(callback),
initial.commitf5b16fe2008-07-27 00:20:5124 id_(id),
25 image_url_(image_url),
26 image_size_(image_size) {
[email protected]f6134ff2009-07-07 16:44:3927 fetcher_.reset(new ResourceFetcher(
28 image_url, frame,
29 NewCallback(this, &ImageResourceFetcher::OnURLFetchComplete)));
initial.commitf5b16fe2008-07-27 00:20:5130}
31
32ImageResourceFetcher::~ImageResourceFetcher() {
33 if (!fetcher_->completed())
34 fetcher_->Cancel();
35}
36
37void ImageResourceFetcher::OnURLFetchComplete(
[email protected]f6134ff2009-07-07 16:44:3938 const WebKit::WebURLResponse& response,
initial.commitf5b16fe2008-07-27 00:20:5139 const std::string& data) {
[email protected]f6134ff2009-07-07 16:44:3940 SkBitmap bitmap;
41 if (!response.isNull() && response.httpStatusCode() == 200) {
initial.commitf5b16fe2008-07-27 00:20:5142 // Request succeeded, try to convert it to an image.
[email protected]f6134ff2009-07-07 16:44:3943 ImageDecoder decoder(gfx::Size(image_size_, image_size_));
44 bitmap = decoder.Decode(
initial.commitf5b16fe2008-07-27 00:20:5145 reinterpret_cast<const unsigned char*>(data.data()), data.size());
46 } // else case:
47 // If we get here, it means no image from server or couldn't decode the
[email protected]f6134ff2009-07-07 16:44:3948 // response as an image. The delegate will see a null image, indicating
49 // that an error occurred.
[email protected]0fd62c42011-01-20 20:35:5650
51 // Take care to clear callback_ before running the callback as it may lead to
52 // our destruction.
53 scoped_ptr<Callback> callback;
54 callback.swap(callback_);
55 callback->Run(this, bitmap);
initial.commitf5b16fe2008-07-27 00:20:5156}
[email protected]f6134ff2009-07-07 16:44:3957
58} // namespace webkit_glue