Home | History | Annotate | Download | only in snapshot
      1 // Copyright (c) 2012 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 UI_SNAPSHOT_SNAPSHOT_H_
      6 #define UI_SNAPSHOT_SNAPSHOT_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/callback_forward.h"
     11 #include "base/memory/ref_counted.h"
     12 #include "base/memory/ref_counted_memory.h"
     13 #include "ui/gfx/native_widget_types.h"
     14 #include "ui/snapshot/snapshot_export.h"
     15 
     16 namespace base {
     17 class TaskRunner;
     18 }
     19 
     20 namespace gfx {
     21 class Rect;
     22 class Image;
     23 class Size;
     24 }
     25 
     26 namespace ui {
     27 
     28 // Grabs a snapshot of the window/view. No security checks are done. This is
     29 // intended to be used for debugging purposes where no BrowserProcess instance
     30 // is available (ie. tests). This function is synchronous, so it should NOT be
     31 // used in a result of user action. Support for async vs synchronous
     32 // GrabWindowSnapshot differs by platform.  To be most general, use the
     33 // synchronous function first and if it returns false call the async one.
     34 SNAPSHOT_EXPORT bool GrabWindowSnapshot(
     35     gfx::NativeWindow window,
     36     std::vector<unsigned char>* png_representation,
     37     const gfx::Rect& snapshot_bounds);
     38 
     39 SNAPSHOT_EXPORT bool GrabViewSnapshot(
     40     gfx::NativeView view,
     41     std::vector<unsigned char>* png_representation,
     42     const gfx::Rect& snapshot_bounds);
     43 
     44 
     45 // These functions take a snapshot of |source_rect|, specified in layer space
     46 // coordinates (DIP for desktop, physical pixels for Android), and scale the
     47 // snapshot to |target_size| (in physical pixels), asynchronously.
     48 typedef base::Callback<void(const gfx::Image& snapshot)>
     49     GrabWindowSnapshotAsyncCallback;
     50 SNAPSHOT_EXPORT void GrabWindowSnapshotAndScaleAsync(
     51     gfx::NativeWindow window,
     52     const gfx::Rect& source_rect,
     53     const gfx::Size& target_size,
     54     scoped_refptr<base::TaskRunner> background_task_runner,
     55     const GrabWindowSnapshotAsyncCallback& callback);
     56 
     57 typedef base::Callback<void(scoped_refptr<base::RefCountedBytes> png_data)>
     58     GrabWindowSnapshotAsyncPNGCallback;
     59 SNAPSHOT_EXPORT void GrabWindowSnapshotAsync(
     60     gfx::NativeWindow window,
     61     const gfx::Rect& source_rect,
     62     scoped_refptr<base::TaskRunner> background_task_runner,
     63     const GrabWindowSnapshotAsyncPNGCallback& callback);
     64 SNAPSHOT_EXPORT void GrabViewSnapshotAsync(
     65     gfx::NativeView view,
     66     const gfx::Rect& source_rect,
     67     scoped_refptr<base::TaskRunner> background_task_runner,
     68     const GrabWindowSnapshotAsyncPNGCallback& callback);
     69 
     70 }  // namespace ui
     71 
     72 #endif  // UI_SNAPSHOT_SNAPSHOT_H_
     73