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 CHROME_BROWSER_UI_ASH_SCREENSHOT_TAKER_H_ 6 #define CHROME_BROWSER_UI_ASH_SCREENSHOT_TAKER_H_ 7 8 #include "ash/screenshot_delegate.h" 9 #include "base/basictypes.h" 10 #include "base/compiler_specific.h" 11 #include "base/files/file_path.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/weak_ptr.h" 14 #include "base/observer_list.h" 15 #include "base/time/time.h" 16 #include "chrome/browser/notifications/notification.h" 17 18 class Profile; 19 20 namespace ash { 21 namespace test { 22 class ScreenshotTakerTest; 23 } 24 } 25 namespace aura { 26 class Window; 27 } 28 29 class ScreenshotTakerObserver { 30 public: 31 enum Result { 32 SCREENSHOT_SUCCESS = 0, 33 SCREENSHOT_GRABWINDOW_PARTIAL_FAILED, 34 SCREENSHOT_GRABWINDOW_FULL_FAILED, 35 SCREENSHOT_CREATE_DIR_FAILED, 36 SCREENSHOT_GET_DIR_FAILED, 37 SCREENSHOT_CHECK_DIR_FAILED, 38 SCREENSHOT_CREATE_FILE_FAILED, 39 SCREENSHOT_WRITE_FILE_FAILED, 40 SCREENSHOT_RESULT_COUNT 41 }; 42 43 virtual void OnScreenshotCompleted( 44 Result screenshot_result, 45 const base::FilePath& screenshot_path) = 0; 46 47 protected: 48 virtual ~ScreenshotTakerObserver() {} 49 }; 50 51 class ScreenshotTaker : public ash::ScreenshotDelegate { 52 public: 53 ScreenshotTaker(); 54 55 virtual ~ScreenshotTaker(); 56 57 // Overridden from ash::ScreenshotDelegate: 58 virtual void HandleTakeScreenshotForAllRootWindows() OVERRIDE; 59 virtual void HandleTakePartialScreenshot(aura::Window* window, 60 const gfx::Rect& rect) OVERRIDE; 61 virtual bool CanTakeScreenshot() OVERRIDE; 62 63 void ShowNotification( 64 ScreenshotTakerObserver::Result screenshot_result, 65 const base::FilePath& screenshot_path); 66 67 void AddObserver(ScreenshotTakerObserver* observer); 68 void RemoveObserver(ScreenshotTakerObserver* observer); 69 bool HasObserver(ScreenshotTakerObserver* observer) const; 70 71 private: 72 friend class ash::test::ScreenshotTakerTest; 73 74 Profile* GetProfile(); 75 void SetScreenshotDirectoryForTest(const base::FilePath& directory); 76 void SetScreenshotBasenameForTest(const std::string& basename); 77 void SetScreenshotProfileForTest(Profile* profile); 78 79 Notification* CreateNotification( 80 ScreenshotTakerObserver::Result screenshot_result, 81 const base::FilePath& screenshot_path); 82 83 base::WeakPtrFactory<ScreenshotTaker> factory_; 84 85 // The timestamp when the screenshot task was issued last time. 86 base::Time last_screenshot_timestamp_; 87 88 ObserverList<ScreenshotTakerObserver> observers_; 89 90 base::FilePath screenshot_directory_for_test_; 91 std::string screenshot_basename_for_test_; 92 Profile* profile_for_test_; 93 94 DISALLOW_COPY_AND_ASSIGN(ScreenshotTaker); 95 }; 96 97 #endif // CHROME_BROWSER_UI_ASH_SCREENSHOT_TAKER_H_ 98