| Index: third_party/WebKit/Source/modules/notifications/NotificationImageLoader.h | 
| diff --git a/third_party/WebKit/Source/modules/notifications/NotificationImageLoader.h b/third_party/WebKit/Source/modules/notifications/NotificationImageLoader.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..5fde3bd905108340967a22e0209bcc17750e23a7 | 
| --- /dev/null | 
| +++ b/third_party/WebKit/Source/modules/notifications/NotificationImageLoader.h | 
| @@ -0,0 +1,63 @@ | 
| +// Copyright 2016 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 NotificationImageLoader_h | 
| +#define NotificationImageLoader_h | 
| + | 
| +#include "core/loader/ThreadableLoader.h" | 
| +#include "core/loader/ThreadableLoaderClient.h" | 
| +#include "platform/SharedBuffer.h" | 
| +#include "platform/heap/Handle.h" | 
| +#include "wtf/Functional.h" | 
| +#include "wtf/OwnPtr.h" | 
| +#include "wtf/PassOwnPtr.h" | 
| +#include "wtf/RefPtr.h" | 
| + | 
| +class SkBitmap; | 
| + | 
| +namespace blink { | 
| + | 
| +class ExecutionContext; | 
| +class KURL; | 
| +class ResourceError; | 
| + | 
| +// Asynchronously downloads an image when given a url, decodes the loaded data, | 
| +// and passes the bitmap to the given callback. | 
| +class NotificationImageLoader final : public GarbageCollectedFinalized<NotificationImageLoader>, public ThreadableLoaderClient { | 
| +public: | 
| +    // The bitmap may be empty if the request failed or the image data could not | 
| +    // be decoded. | 
| +    using ImageCallback = Function<void(const SkBitmap&)>; | 
| + | 
| +    NotificationImageLoader(); | 
| +    ~NotificationImageLoader() override; | 
| + | 
| +    // Asynchronously downloads an image from the given url, decodes the loaded | 
| +    // data, and passes the bitmap to the callback. | 
| +    void start(ExecutionContext*, const KURL&, PassOwnPtr<ImageCallback>); | 
| + | 
| +    // Cancels the pending load, if there is one. The |m_imageCallback| will not | 
| +    // be run. | 
| +    void stop(); | 
| + | 
| +    // ThreadableLoaderClient interface. | 
| +    void didReceiveData(const char* data, unsigned length) override; | 
| +    void didFinishLoading(unsigned long resourceIdentifier, double finishTime) override; | 
| +    void didFail(const ResourceError&) override; | 
| +    void didFailRedirectCheck() override; | 
| + | 
| +    DEFINE_INLINE_TRACE() {} | 
| + | 
| +private: | 
| +    void runCallbackWithEmptyBitmap(); | 
| + | 
| +    bool m_stopped; | 
| +    RefPtr<SharedBuffer> m_data; | 
| +    OwnPtr<ImageCallback> m_imageCallback; | 
| +    OwnPtr<ThreadableLoader> m_threadableLoader; | 
| +}; | 
| + | 
| +} // namespace blink | 
| + | 
| +#endif // NotificationImageLoader_h | 
|  |