summaryrefslogtreecommitdiffstats
path: root/webkit/glue/image_resource_fetcher.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/glue/image_resource_fetcher.cc')
-rw-r--r--webkit/glue/image_resource_fetcher.cc54
1 files changed, 54 insertions, 0 deletions
diff --git a/webkit/glue/image_resource_fetcher.cc b/webkit/glue/image_resource_fetcher.cc
new file mode 100644
index 0000000..6185834
--- /dev/null
+++ b/webkit/glue/image_resource_fetcher.cc
@@ -0,0 +1,54 @@
+// Copyright (c) 2006-2008 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.
+
+#include "webkit/glue/image_resource_fetcher.h"
+
+#include "base/callback.h"
+#include "gfx/size.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebFrame.h"
+#include "webkit/glue/image_decoder.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+
+using WebKit::WebFrame;
+
+namespace webkit_glue {
+
+ImageResourceFetcher::ImageResourceFetcher(
+ const GURL& image_url,
+ WebFrame* frame,
+ int id,
+ int image_size,
+ Callback* callback)
+ : callback_(callback),
+ id_(id),
+ image_url_(image_url),
+ image_size_(image_size) {
+ fetcher_.reset(new ResourceFetcher(
+ image_url, frame,
+ NewCallback(this, &ImageResourceFetcher::OnURLFetchComplete)));
+}
+
+ImageResourceFetcher::~ImageResourceFetcher() {
+ if (!fetcher_->completed())
+ fetcher_->Cancel();
+}
+
+void ImageResourceFetcher::OnURLFetchComplete(
+ const WebKit::WebURLResponse& response,
+ const std::string& data) {
+ SkBitmap bitmap;
+ if (!response.isNull() && response.httpStatusCode() == 200) {
+ // Request succeeded, try to convert it to an image.
+ ImageDecoder decoder(gfx::Size(image_size_, image_size_));
+ bitmap = decoder.Decode(
+ reinterpret_cast<const unsigned char*>(data.data()), data.size());
+ } // else case:
+ // If we get here, it means no image from server or couldn't decode the
+ // response as an image. The delegate will see a null image, indicating
+ // that an error occurred.
+ callback_->Run(this, bitmap);
+ callback_.reset();
+}
+
+} // namespace webkit_glue