| Index: chrome/browser/tab_contents/thumbnail_generator.h
|
| ===================================================================
|
| --- chrome/browser/tab_contents/thumbnail_generator.h (revision 45523)
|
| +++ chrome/browser/tab_contents/thumbnail_generator.h (working copy)
|
| @@ -5,22 +5,30 @@
|
| #ifndef CHROME_BROWSER_TAB_CONTENTS_THUMBNAIL_GENERATOR_H_
|
| #define CHROME_BROWSER_TAB_CONTENTS_THUMBNAIL_GENERATOR_H_
|
|
|
| +#include <map>
|
| +#include <utility>
|
| #include <vector>
|
|
|
| #include "base/basictypes.h"
|
| +#include "base/callback.h"
|
| +#include "base/linked_ptr.h"
|
| +#include "base/lock.h"
|
| #include "base/timer.h"
|
| #include "chrome/browser/renderer_host/render_widget_host_painting_observer.h"
|
| #include "chrome/common/notification_observer.h"
|
| #include "chrome/common/notification_registrar.h"
|
|
|
| +class RenderViewHost;
|
| class RenderWidgetHost;
|
| class SkBitmap;
|
| +class TabContents;
|
|
|
| // This class MUST be destroyed after the RenderWidgetHosts, since it installs
|
| // a painting observer that is not removed.
|
| class ThumbnailGenerator : public RenderWidgetHostPaintingObserver,
|
| public NotificationObserver {
|
| public:
|
| + typedef Callback1<const SkBitmap&>::Type ThumbnailReadyCallback;
|
| // This class will do nothing until you call StartThumbnailing.
|
| ThumbnailGenerator();
|
| ~ThumbnailGenerator();
|
| @@ -29,6 +37,17 @@
|
| // be called repeatedly and with wild abandon to no ill effect.
|
| void StartThumbnailing();
|
|
|
| + // This registers a callback that can receive the resulting SkBitmap
|
| + // from the renderer when it is done rendering it. This differs
|
| + // from GetThumbnailForRenderer in that it is asynchronous, and
|
| + // because it will also fetch the bitmap even if the tab is hidden.
|
| + // In addition, if the renderer has to be invoked, the scaling of
|
| + // the thumbnail happens on the rendering thread. Takes ownership
|
| + // of the callback object.
|
| + void AskForThumbnail(RenderWidgetHost* renderer,
|
| + ThumbnailReadyCallback* callback,
|
| + gfx::Size size);
|
| +
|
| SkBitmap GetThumbnailForRenderer(RenderWidgetHost* renderer) const;
|
|
|
| #ifdef UNIT_TEST
|
| @@ -45,6 +64,11 @@
|
| BackingStore* backing_store);
|
| virtual void WidgetDidUpdateBackingStore(RenderWidgetHost* widget);
|
|
|
| + virtual void WidgetDidReceivePaintAtSizeAck(
|
| + RenderWidgetHost* widget,
|
| + const TransportDIB::Handle& dib_handle,
|
| + const gfx::Size& size);
|
| +
|
| // NotificationObserver interface.
|
| virtual void Observe(NotificationType type,
|
| const NotificationSource& source,
|
| @@ -57,6 +81,10 @@
|
| // Called when the given widget is destroyed.
|
| void WidgetDestroyed(RenderWidgetHost* widget);
|
|
|
| + // Called when the given tab contents are disconnected (either
|
| + // through being closed, or because the renderer is no longer there).
|
| + void TabContentsDisconnected(TabContents* contents);
|
| +
|
| // Timer function called on a delay after a tab has been shown. It will
|
| // invalidate the thumbnail for hosts with expired thumbnails in shown_hosts_.
|
| void ShownDelayHandler();
|
| @@ -76,6 +104,12 @@
|
| // See the setter above.
|
| bool no_timeout_;
|
|
|
| + // Map of callback objects by TransportDIB::Handle.
|
| + struct AsyncRequestInfo;
|
| + typedef std::map<TransportDIB::Handle,
|
| + linked_ptr<AsyncRequestInfo> > ThumbnailCallbackMap;
|
| + ThumbnailCallbackMap callback_map_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ThumbnailGenerator);
|
| };
|
|
|
|
|