| Index: chrome/test/base/ui_test_utils_win.cc
|
| diff --git a/chrome/test/base/ui_test_utils_win.cc b/chrome/test/base/ui_test_utils_win.cc
|
| index 144b44dc2d42336a241f70f79484672bfa2a0173..8cc90fddf6fd2d84dfb6a6b079b697b0a03528fd 100644
|
| --- a/chrome/test/base/ui_test_utils_win.cc
|
| +++ b/chrome/test/base/ui_test_utils_win.cc
|
| @@ -4,17 +4,53 @@
|
|
|
| #include "chrome/test/base/ui_test_utils.h"
|
|
|
| +#include "base/file_path.h"
|
| +#include "base/file_util.h"
|
| #include "base/logging.h"
|
| #include "base/message_loop.h"
|
| +#include "base/path_service.h"
|
| +#include "base/stringprintf.h"
|
| +#include "base/time.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/browser_window.h"
|
| #include "chrome/browser/ui/views/frame/browser_view.h"
|
| +#include "chrome/browser/ui/window_snapshot/window_snapshot.h"
|
| +#include "chrome/common/chrome_paths.h"
|
| #include "ui/base/win/foreground_helper.h"
|
| #include "ui/ui_controls/ui_controls.h"
|
| #include "ui/views/focus/focus_manager.h"
|
|
|
| namespace ui_test_utils {
|
|
|
| +namespace {
|
| +
|
| +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;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| bool IsViewFocused(const Browser* browser, ViewID vid) {
|
| BrowserWindow* browser_window = browser->window();
|
| DCHECK(browser_window);
|
| @@ -76,4 +112,40 @@ void MoveMouseToCenterAndPress(views::View* view,
|
| ui_controls::SendMouseEventsNotifyWhenDone(button, state, task);
|
| }
|
|
|
| +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);
|
| +}
|
| +
|
| } // namespace ui_test_utils
|
|
|