// 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 #include #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 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 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 cursor_hider_; #endif base::WeakPtrFactory factory_; DISALLOW_COPY_AND_ASSIGN(ScreenshotGrabber); }; } // namespace ui #endif // UI_SNAPSHOT_SCREENSHOT_GRABBER_H_