| // Copyright 2014 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 UI_SNAPSHOT_SCREENSHOT_GRABBER_H_ |
| #define UI_SNAPSHOT_SCREENSHOT_GRABBER_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/callback.h" |
| #include "base/compiler_specific.h" |
| #include "base/files/file_path.h" |
| #include "base/macros.h" |
| #include "base/memory/ref_counted_memory.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/time/time.h" |
| #include "ui/gfx/geometry/rect.h" |
| #include "ui/gfx/native_widget_types.h" |
| #include "ui/snapshot/snapshot_export.h" |
| |
| namespace ui { |
| |
| // Result of the entire screenshotting attempt. This enum is fat for various |
| // file operations which could happen in the chrome layer. |
| enum class ScreenshotResult { |
| SUCCESS, |
| GRABWINDOW_PARTIAL_FAILED, |
| GRABWINDOW_FULL_FAILED, |
| CREATE_DIR_FAILED, |
| GET_DIR_FAILED, |
| CHECK_DIR_FAILED, |
| CREATE_FILE_FAILED, |
| WRITE_FILE_FAILED, |
| DISABLED |
| }; |
| |
| class SNAPSHOT_EXPORT ScreenshotGrabber { |
| public: |
| ScreenshotGrabber(); |
| ~ScreenshotGrabber(); |
| |
| // Callback for the new system, which ignores the observer crud. |
| using ScreenshotCallback = |
| base::OnceCallback<void(ui::ScreenshotResult screenshot_result, |
| scoped_refptr<base::RefCountedMemory> png_data)>; |
| |
| // Takes a screenshot of |rect| in |window| in that window's coordinate space |
| // and return it to |callback|. |
| void TakeScreenshot(gfx::NativeWindow window, |
| const gfx::Rect& rect, |
| ScreenshotCallback callback); |
| |
| bool CanTakeScreenshot(); |
| |
| private: |
| #if defined(USE_AURA) |
| class ScopedCursorHider; |
| #endif |
| |
| void GrabWindowSnapshotAsyncCallback( |
| const std::string& window_identifier, |
| bool is_partial, |
| ScreenshotCallback callback, |
| scoped_refptr<base::RefCountedMemory> png_data); |
| |
| // The timestamp when the screenshot task was issued last time. |
| base::TimeTicks last_screenshot_timestamp_; |
| |
| #if defined(USE_AURA) |
| // The object to hide cursor when taking screenshot. |
| std::unique_ptr<ScopedCursorHider> cursor_hider_; |
| #endif |
| |
| base::WeakPtrFactory<ScreenshotGrabber> factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ScreenshotGrabber); |
| }; |
| |
| } // namespace ui |
| |
| #endif // UI_SNAPSHOT_SCREENSHOT_GRABBER_H_ |