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 901e539a26a1a5d03a4e9aca991b034c393625c7..92e3069fad1884cfad5fa316304535999c4ca668 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" |
| @@ -273,6 +276,33 @@ void RunAllPendingMessageAndSendQuit(content::BrowserThread::ID thread_id) { |
| MessageLoop::QuitClosure()); |
| } |
| +#if defined(OS_WIN) |
|
Paweł Hajdan Jr.
2012/04/14 10:42:56
Please extract this and any other possible Windows
grt (UTC plus 2)
2012/04/14 23:18:04
Done.
|
| +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() { |
| @@ -1158,6 +1188,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); |
| + 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, |