Chromium Code Reviews| Index: chrome/test/base/ui_test_utils.cc |
| diff --git a/chrome/test/base/ui_test_utils.cc b/chrome/test/base/ui_test_utils.cc |
| index 26e8df978f519465c6b91430d6980834e43a28b2..e6c79068fd8046f9ff2011890acb94e01c5dbfef 100644 |
| --- a/chrome/test/base/ui_test_utils.cc |
| +++ b/chrome/test/base/ui_test_utils.cc |
| @@ -15,6 +15,7 @@ |
| #include "base/callback.h" |
| #include "base/command_line.h" |
| #include "base/file_path.h" |
| +#include "base/file_util.h" |
| #include "base/json/json_reader.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/message_loop.h" |
| @@ -23,6 +24,7 @@ |
| #include "base/rand_util.h" |
| #include "base/string_number_conversions.h" |
| #include "base/test/test_timeouts.h" |
| +#include "base/time.h" |
| #include "base/utf_string_conversions.h" |
| #include "base/values.h" |
| #include "chrome/browser/bookmarks/bookmark_model.h" |
| @@ -38,6 +40,7 @@ |
| #include "chrome/browser/ui/find_bar/find_notification_details.h" |
| #include "chrome/browser/ui/find_bar/find_tab_helper.h" |
| #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| +#include "chrome/browser/ui/window_snapshot/window_snapshot.h" |
| #include "chrome/common/chrome_notification_types.h" |
| #include "chrome/common/chrome_paths.h" |
| #include "chrome/common/extensions/extension_action.h" |
| @@ -272,6 +275,33 @@ void RunAllPendingMessageAndSendQuit(content::BrowserThread::ID thread_id) { |
| MessageLoop::QuitClosure()); |
| } |
| +#if defined(OS_WIN) |
| +const char kSnapshotBaseName[] = "ChromiumSnapshot"; |
| +const char kSnapshotExtension[] = ".png"; |
| + |
| +FilePath GetSnapshotFileName(const FilePath& snapshot_directory) { |
| + base::Time::Exploded the_time; |
| + |
| + base::Time::Now().LocalExplode(&the_time); |
| + std::string filename(StringPrintf("%s%04d%02d%02d%02d%02d%02d%s", |
| + kSnapshotBaseName, the_time.year, the_time.month, the_time.day_of_month, |
| + the_time.hour, the_time.minute, the_time.second, kSnapshotExtension)); |
| + |
| + FilePath snapshot_file = snapshot_directory.AppendASCII(filename); |
| + if (file_util::PathExists(snapshot_file)) { |
| + int index = 0; |
| + std::string suffix; |
| + FilePath trial_file; |
| + do { |
| + suffix = StringPrintf(" (%d)", ++index); |
| + trial_file = snapshot_file.InsertBeforeExtensionASCII(suffix); |
| + } while (file_util::PathExists(trial_file)); |
| + snapshot_file = trial_file; |
| + } |
| + return snapshot_file; |
| +} |
| +#endif |
| + |
| } // namespace |
| void RunMessageLoop() { |
| @@ -1148,6 +1178,44 @@ bool TakeEntirePageSnapshot(RenderViewHost* rvh, SkBitmap* bitmap) { |
| return taker.TakeEntirePageSnapshot(rvh, bitmap); |
| } |
| +#if defined(OS_WIN) |
| +bool SaveScreenSnapshotToDirectory(const FilePath& directory, |
| + FilePath* screenshot_path) { |
| + bool succeeded = false; |
| + FilePath out_path(GetSnapshotFileName(directory)); |
| + |
| + MONITORINFO monitor_info = {}; |
| + monitor_info.cbSize = sizeof(monitor_info); |
| + HMONITOR main_monitor = MonitorFromWindow(NULL, MONITOR_DEFAULTTOPRIMARY); |
| + if (GetMonitorInfo(main_monitor, &monitor_info)) { |
| + RECT& rect = monitor_info.rcMonitor; |
| + |
| + std::vector<unsigned char> png_data; |
| + if (browser::GrabWindowSnapshot(NULL, &png_data, |
| + gfx::Rect(rect.right - rect.left, |
| + rect.bottom - rect.top)) && |
| + png_data.size() <= INT_MAX) { |
| + int bytes = static_cast<int>(png_data.size()); |
| + int written = file_util::WriteFile( |
| + out_path, reinterpret_cast<char*>(&png_data[0]), bytes); |
|
robertshield
2012/04/11 17:03:36
should we also first check that png_data is not em
grt (UTC plus 2)
2012/04/11 17:33:08
I don't see why. GrabWindowSnapshot's contract is
|
| + succeeded = (written == bytes); |
| + } |
| + } |
| + |
| + if (succeeded && screenshot_path != NULL) |
| + *screenshot_path = out_path; |
| + |
| + return succeeded; |
| +} |
| + |
| +bool SaveScreenSnapshotToDesktop(FilePath* screenshot_path) { |
| + FilePath desktop; |
| + |
| + return PathService::Get(chrome::DIR_USER_DESKTOP, &desktop) && |
| + SaveScreenSnapshotToDirectory(desktop, screenshot_path); |
| +} |
| +#endif |
| + |
| namespace internal { |
| void ClickTask(ui_controls::MouseButton button, |