| Index: chrome/browser/notifications/sync_notifier/notification_bitmap_fetcher.h
|
| diff --git a/chrome/browser/notifications/sync_notifier/notification_bitmap_fetcher.h b/chrome/browser/notifications/sync_notifier/notification_bitmap_fetcher.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1d0372bcf334a6c2832bcc9e5530d26401cc4a7c
|
| --- /dev/null
|
| +++ b/chrome/browser/notifications/sync_notifier/notification_bitmap_fetcher.h
|
| @@ -0,0 +1,100 @@
|
| +// Copyright (c) 2013 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 CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_NOTIFICATION_BITMAP_FETCHER_H_
|
| +#define CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_NOTIFICATION_BITMAP_FETCHER_H_
|
| +
|
| +#include "base/gtest_prod_util.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/message_loop/message_loop_proxy.h"
|
| +#include "chrome/browser/image_decoder.h"
|
| +#include "googleurl/src/gurl.h"
|
| +#include "net/url_request/url_fetcher_delegate.h"
|
| +#include "third_party/skia/include/core/SKBitmap.h"
|
| +
|
| +namespace net {
|
| +class URLFetcher;
|
| +} // namespace net
|
| +
|
| +class NotificationBitmapFetcherTest;
|
| +
|
| +namespace notifier {
|
| +
|
| +class NotificationBitmapFetcher
|
| + : public net::URLFetcherDelegate,
|
| + public ImageDecoder::Delegate,
|
| + public base::RefCountedThreadSafe<NotificationBitmapFetcher> {
|
| + public:
|
| + NotificationBitmapFetcher(GURL& url,
|
| + scoped_ptr<net::URLFetcher>& url_fetcher,
|
| + scoped_refptr<base::MessageLoopProxy> task_runner);
|
| + ~NotificationBitmapFetcher();
|
| +
|
| + bool image_ready();
|
| +
|
| + bool image_failed();
|
| +
|
| + // Returns an unowned pointer to the fetched and decoded bitmap.
|
| + SkBitmap* bitmap();
|
| +
|
| + // Start fetching the URL with the fetcher. The operation will be continued
|
| + // in the OnURLFetchComplete callback.
|
| + void StartImageFetch();
|
| +
|
| + // Copy the output bitmap. This takes ownership of the bitmap. It is called
|
| + // on the UI thread. This also notifies observers.
|
| + void HandleImageDecoded(scoped_ptr<SkBitmap> bitmap);
|
| +
|
| + // If a bitmap image decode fails, notify observers of the failure.
|
| + void HandleImageFailed();
|
| +
|
| + // Methods inherited from URLFetcherDelegate
|
| +
|
| + // This will be called when the URL has been fetched, successfully or not.
|
| + // Use accessor methods on |source| to get the results.
|
| + virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
|
| +
|
| + // This will be called when some part of the response is read. |current|
|
| + // denotes the number of bytes received up to the call, and |total| is the
|
| + // expected total size of the response (or -1 if not determined).
|
| + virtual void OnURLFetchDownloadProgress(const net::URLFetcher* source,
|
| + int64 current, int64 total) OVERRIDE;
|
| +
|
| + // Methods inherited from ImageDecoder::Delegate
|
| +
|
| + // Called when image is decoded. |decoder| is used to identify the image in
|
| + // case of decoding several images simultaneously. This will not be called
|
| + // on the UI thread.
|
| + virtual void OnImageDecoded(const ImageDecoder* decoder,
|
| + const SkBitmap& decoded_image) OVERRIDE;
|
| +
|
| + // Called when decoding image failed.
|
| + virtual void OnDecodeImageFailed(const ImageDecoder* decoder) OVERRIDE;
|
| +
|
| + private:
|
| + scoped_ptr<net::URLFetcher> url_fetcher_;
|
| + scoped_refptr<ImageDecoder> image_decoder_;
|
| + scoped_refptr<base::MessageLoopProxy> task_runner_;
|
| + // |image_ready_| will be set to true once the image is fetched and decoded.
|
| + bool image_ready_;
|
| + // |image_failed_| will be set to true if we cannot fetch or decode the image.
|
| + bool image_failed_;
|
| + GURL url_;
|
| + scoped_ptr<SkBitmap> bitmap_;
|
| + int64 progress_current_;
|
| + int64 progress_total_;
|
| +
|
| + FRIEND_TEST_ALL_PREFIXES(NotificationBitmapFetcherTest, ImageReadyTest);
|
| + FRIEND_TEST_ALL_PREFIXES(NotificationBitmapFetcherTest, StartFetchTest);
|
| + FRIEND_TEST_ALL_PREFIXES(NotificationBitmapFetcherTest,
|
| + HandleImageDecodedTest);
|
| + FRIEND_TEST_ALL_PREFIXES(NotificationBitmapFetcherTest,
|
| + HandleImageFailedTest);
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(NotificationBitmapFetcher);
|
| +};
|
| +
|
| +} // namespace notifier
|
| +
|
| +#endif // CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_NOTIFICATION_BITMAP_FETCHER_H_
|
|
|