10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifndef COMPONENTS_FAVICON_BASE_FAVICON_TYPES_H_
60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#define COMPONENTS_FAVICON_BASE_FAVICON_TYPES_H_
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/ref_counted_memory.h"
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/gfx/image/image.h"
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/gfx/size.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace favicon_base {
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)typedef int64 FaviconID;
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Defines the icon types. They are also stored in icon_type field of favicons
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// table.
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// The values of the IconTypes are used to select the priority in which favicon
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// data is returned in HistoryBackend and ThumbnailDatabase. Data for the
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// largest IconType takes priority if data for multiple IconTypes is available.
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)enum IconType {
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  INVALID_ICON = 0x0,
2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  FAVICON = 1 << 0,
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  TOUCH_ICON = 1 << 1,
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  TOUCH_PRECOMPOSED_ICON = 1 << 2
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)};
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Defines a gfx::Image of size desired_size_in_dip composed of image
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// representations for each of the desired scale factors.
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)struct FaviconImageResult {
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  FaviconImageResult();
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ~FaviconImageResult();
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // The resulting image.
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  gfx::Image image;
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // The URL of the favicon which contains all of the image representations of
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // |image|.
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // TODO(pkotwicz): Return multiple |icon_urls| to allow |image| to have
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // representations from several favicons once content::FaviconStatus supports
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // multiple URLs.
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  GURL icon_url;
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)};
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Defines a favicon bitmap which best matches the desired DIP size and one of
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// the desired scale factors.
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)struct FaviconRawBitmapResult {
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  FaviconRawBitmapResult();
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ~FaviconRawBitmapResult();
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Returns true if |bitmap_data| contains a valid bitmap.
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool is_valid() const { return bitmap_data.get() && bitmap_data->size(); }
5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Indicates whether |bitmap_data| is expired.
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool expired;
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // The bits of the bitmap.
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  scoped_refptr<base::RefCountedMemory> bitmap_data;
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // The pixel dimensions of |bitmap_data|.
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  gfx::Size pixel_size;
6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // The URL of the containing favicon.
6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  GURL icon_url;
6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // The icon type of the containing favicon.
6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  IconType icon_type;
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)};
7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Define type with same structure as FaviconRawBitmapResult for passing data to
7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// HistoryBackend::SetFavicons().
73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)typedef FaviconRawBitmapResult FaviconRawBitmapData;
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace favicon_base
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif  // COMPONENTS_FAVICON_BASE_FAVICON_TYPES_H_
78