Home | History | Annotate | Download | only in thumbnail
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_ANDROID_THUMBNAIL_THUMBNAIL_H_
      6 #define CHROME_BROWSER_ANDROID_THUMBNAIL_THUMBNAIL_H_
      7 
      8 #include "base/memory/ref_counted.h"
      9 #include "base/time/time.h"
     10 #include "cc/resources/ui_resource_bitmap.h"
     11 #include "cc/resources/ui_resource_client.h"
     12 #include "content/public/browser/android/ui_resource_client_android.h"
     13 #include "ui/gfx/geometry/size.h"
     14 
     15 namespace base {
     16 class Time;
     17 }
     18 
     19 namespace content {
     20 class UIResourceProvider;
     21 }
     22 
     23 namespace gfx {
     24 class Size;
     25 }
     26 
     27 typedef int TabId;
     28 
     29 class Thumbnail;
     30 
     31 class ThumbnailDelegate {
     32  public:
     33   virtual void InvalidateCachedThumbnail(Thumbnail* thumbnail) = 0;
     34   virtual ~ThumbnailDelegate() {}
     35 };
     36 
     37 class Thumbnail : public content::UIResourceClientAndroid {
     38  public:
     39   static scoped_ptr<Thumbnail> Create(
     40       TabId tab_id,
     41       const base::Time& time_stamp,
     42       float scale,
     43       content::UIResourceProvider* ui_resource_provider,
     44       ThumbnailDelegate* thumbnail_delegate);
     45   virtual ~Thumbnail();
     46 
     47   TabId tab_id() const { return tab_id_; }
     48   base::Time time_stamp() const { return time_stamp_; }
     49   float scale() const { return scale_; }
     50   cc::UIResourceId ui_resource_id() const { return ui_resource_id_; }
     51   const gfx::SizeF& scaled_content_size() const { return scaled_content_size_; }
     52   const gfx::SizeF& scaled_data_size() const { return scaled_data_size_; }
     53 
     54   void SetBitmap(const SkBitmap& bitmap);
     55   void SetCompressedBitmap(skia::RefPtr<SkPixelRef> compressed_bitmap,
     56                            const gfx::Size& content_size);
     57   void CreateUIResource();
     58 
     59   // content::UIResourceClient implementation.
     60   virtual cc::UIResourceBitmap GetBitmap(cc::UIResourceId uid,
     61                                          bool resource_lost) OVERRIDE;
     62 
     63   // content::UIResourceClientAndroid implementation.
     64   virtual void UIResourceIsInvalid() OVERRIDE;
     65 
     66  protected:
     67   Thumbnail(TabId tab_id,
     68             const base::Time& time_stamp,
     69             float scale,
     70             content::UIResourceProvider* ui_resource_provider,
     71             ThumbnailDelegate* thumbnail_delegate);
     72 
     73   void ClearUIResourceId();
     74 
     75   TabId tab_id_;
     76   base::Time time_stamp_;
     77   float scale_;
     78 
     79   gfx::SizeF scaled_content_size_;
     80   gfx::SizeF scaled_data_size_;
     81 
     82   cc::UIResourceBitmap bitmap_;
     83   cc::UIResourceId ui_resource_id_;
     84 
     85   bool retrieved_;
     86 
     87   content::UIResourceProvider* ui_resource_provider_;
     88   ThumbnailDelegate* thumbnail_delegate_;
     89 
     90   DISALLOW_COPY_AND_ASSIGN(Thumbnail);
     91 };
     92 
     93 #endif  // CHROME_BROWSER_ANDROID_THUMBNAIL_THUMBNAIL_H_
     94