| Index: chrome/browser/manifest/manifest_icon_downloader.h | 
| diff --git a/chrome/browser/manifest/manifest_icon_downloader.h b/chrome/browser/manifest/manifest_icon_downloader.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..d7fad6ff8d42e4cd3a10cb446d3fff49dc6c7967 | 
| --- /dev/null | 
| +++ b/chrome/browser/manifest/manifest_icon_downloader.h | 
| @@ -0,0 +1,61 @@ | 
| +// Copyright 2015 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_MANIFEST_MANIFEST_ICON_DOWNLOADER_H_ | 
| +#define CHROME_BROWSER_MANIFEST_MANIFEST_ICON_DOWNLOADER_H_ | 
| + | 
| +#include "base/basictypes.h" | 
| +#include "base/bind.h" | 
| +#include "base/memory/ref_counted.h" | 
| +#include "content/public/browser/web_contents_observer.h" | 
| +#include "third_party/skia/include/core/SkBitmap.h" | 
| + | 
| +namespace content { | 
| +class WebContents; | 
| +}  // namespace content | 
| + | 
| +namespace gfx { | 
| +class Size; | 
| +} // namespace gfx | 
| + | 
| +class GURL; | 
| + | 
| +class ManifestIconDownloader | 
| +    : public content::WebContentsObserver { | 
| + public: | 
| +  using IconFetchCallback = base::Callback<void(const SkBitmap&)>; | 
| + | 
| +  explicit ManifestIconDownloader(content::WebContents* web_contents); | 
| +  ~ManifestIconDownloader() override = default; | 
| + | 
| +  // Downloads the icon located at icon_url. If the file contains multiple icons | 
| +  // then it attempts to pick the one closest in size bigger than or | 
| +  // equal to ideal_icon_size_in_dp, taking into account the density of the | 
| +  // device. If a bigger icon is chosen then ,the icon is scaled down to be | 
| +  // equal to ideal_icon_size_in_dp. | 
| +  // The boolean return value indicates if the download could be successfully | 
| +  // started. If this is false then the callback will NOT be called. | 
| +  bool Download(const GURL& icon_url, | 
| +                int ideal_icon_size_in_dp, | 
| +                const IconFetchCallback& callback); | 
| + | 
| + private: | 
| +  // Callback run after an attempt to download the manifest icon has been made. | 
| +  static void OnIconFetched(const int ideal_icon_size_in_px, | 
| +                            const IconFetchCallback& callback, | 
| +                            int id, | 
| +                            int http_status_code, | 
| +                            const GURL& url, | 
| +                            const std::vector<SkBitmap>& bitmaps, | 
| +                            const std::vector<gfx::Size>& sizes); | 
| + | 
| +  static int FindClosestBitmapIndex(const int ideal_icon_size_in_px, | 
| +                                    const std::vector<SkBitmap>& bitmaps); | 
| + | 
| +  friend class ManifestIconDownloaderTest; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(ManifestIconDownloader); | 
| +}; | 
| + | 
| +#endif  // CHROME_BROWSER_MANIFEST_MANIFEST_ICON_DOWNLOADER_H_ | 
|  |