Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: chrome/browser/chromeos/login/wallpaper_manager_test_utils.cc

Issue 253833006: Add browser test for CustomizationWallpaperDownloader. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Implemented set_retry_delay_for_testing. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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 #include "chrome/browser/chromeos/login/wallpaper_manager_test_utils.h"
6
7 #include "ash/ash_switches.h"
8 #include "base/command_line.h"
9 #include "base/file_util.h"
10 #include "base/files/file_path.h"
11 #include "base/files/scoped_temp_dir.h"
12 #include "base/logging.h"
13 #include "base/run_loop.h"
14 #include "base/time/time.h"
15 #include "chrome/browser/chromeos/login/wallpaper_manager.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "ui/gfx/codec/jpeg_codec.h"
18 #include "ui/gfx/point.h"
19 #include "ui/gfx/rect.h"
20
21 namespace chromeos {
22
23 namespace {
24
25 class TestWallpaperObserverPendingListEmpty
26 : public WallpaperManager::Observer {
27 public:
28 explicit TestWallpaperObserverPendingListEmpty(
29 WallpaperManager* wallpaper_manager)
30 : empty_(false), wallpaper_manager_(wallpaper_manager) {
31 DCHECK(wallpaper_manager_);
32 wallpaper_manager_->AddObserver(this);
33 }
34
35 virtual ~TestWallpaperObserverPendingListEmpty() {
36 wallpaper_manager_->RemoveObserver(this);
37 }
38
39 virtual void OnWallpaperAnimationFinished(
40 const std::string& user_id) OVERRIDE {}
41
42 virtual void OnPendingListEmptyForTesting() OVERRIDE {
43 empty_ = true;
44 base::MessageLoop::current()->Quit();
45 }
46
47 void WaitForPendingListEmpty() {
48 while (!empty_)
49 base::RunLoop().Run();
50 }
51
52 private:
53 bool empty_;
54 WallpaperManager* wallpaper_manager_;
55
56 DISALLOW_COPY_AND_ASSIGN(TestWallpaperObserverPendingListEmpty);
57 };
58
59 } // namespace
60
61 namespace wallpaper_manager_test_utils {
62
63 const SkColor kLargeDefaultWallpaperColor = SK_ColorRED;
64 const SkColor kSmallDefaultWallpaperColor = SK_ColorGREEN;
65 const SkColor kLargeGuestWallpaperColor = SK_ColorBLUE;
66 const SkColor kSmallGuestWallpaperColor = SK_ColorYELLOW;
67
68 const SkColor kCustomWallpaperColor = SK_ColorMAGENTA;
69
70 const int kWallpaperSize = 2;
71
72 bool CreateJPEGImage(int width,
73 int height,
74 SkColor color,
75 std::vector<unsigned char>* output) {
76 SkBitmap bitmap;
77 bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height, 0);
78 bitmap.allocPixels();
79 bitmap.eraseColor(color);
80
81 const int kQuality = 80;
82 if (!gfx::JPEGCodec::Encode(
83 static_cast<const unsigned char*>(bitmap.getPixels()),
84 gfx::JPEGCodec::FORMAT_SkBitmap,
85 width,
86 height,
87 bitmap.rowBytes(),
88 kQuality,
89 output)) {
90 LOG(ERROR) << "Unable to encode " << width << "x" << height << " bitmap";
91 return false;
92 }
93 return true;
94 }
95
96 gfx::ImageSkia CreateTestImage(int width, int height, SkColor color) {
97 SkBitmap bitmap;
98 bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
99 bitmap.allocPixels();
100 bitmap.eraseColor(color);
101 return gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
102 }
103
104 bool WriteJPEGFile(const base::FilePath& path,
105 int width,
106 int height,
107 SkColor color) {
108 std::vector<unsigned char> output;
109 if (!CreateJPEGImage(width, height, color, &output))
110 return false;
111
112 size_t bytes_written = base::WriteFile(
113 path, reinterpret_cast<const char*>(&output[0]), output.size());
114 if (bytes_written != output.size()) {
115 LOG(ERROR) << "Wrote " << bytes_written << " byte(s) instead of "
116 << output.size() << " to " << path.value();
117 return false;
118 }
119 return true;
120 }
121
122 bool ImageIsNearColor(gfx::ImageSkia image, SkColor expected_color) {
123 if (image.size().IsEmpty()) {
124 LOG(ERROR) << "Image is empty";
125 return false;
126 }
127
128 const SkBitmap* bitmap = image.bitmap();
129 if (!bitmap) {
130 LOG(ERROR) << "Unable to get bitmap from image";
131 return false;
132 }
133
134 bitmap->lockPixels();
135 gfx::Point center = gfx::Rect(image.size()).CenterPoint();
136 SkColor image_color = bitmap->getColor(center.x(), center.y());
137 bitmap->unlockPixels();
138
139 const int kDiff = 3;
140 if (std::abs(static_cast<int>(SkColorGetA(image_color)) -
141 static_cast<int>(SkColorGetA(expected_color))) > kDiff ||
142 std::abs(static_cast<int>(SkColorGetR(image_color)) -
143 static_cast<int>(SkColorGetR(expected_color))) > kDiff ||
144 std::abs(static_cast<int>(SkColorGetG(image_color)) -
145 static_cast<int>(SkColorGetG(expected_color))) > kDiff ||
146 std::abs(static_cast<int>(SkColorGetB(image_color)) -
147 static_cast<int>(SkColorGetB(expected_color))) > kDiff) {
148 LOG(ERROR) << "Expected color near 0x" << std::hex << expected_color
149 << " but got 0x" << image_color;
150 return false;
151 }
152
153 return true;
154 }
155
156 void WaitAsyncWallpaperLoadFinished() {
157 TestWallpaperObserverPendingListEmpty observer(WallpaperManager::Get());
158 observer.WaitForPendingListEmpty();
159 }
160
161 void CreateCmdlineWallpapers(const base::ScopedTempDir& dir,
162 scoped_ptr<base::CommandLine>* command_line) {
163 std::vector<std::string> options;
164 options.push_back(std::string("WM_Test_cmdline"));
165 const base::FilePath small_file =
166 dir.path().Append(FILE_PATH_LITERAL("small.jpg"));
167 options.push_back(std::string("--") +
168 ash::switches::kAshDefaultWallpaperSmall + "=" +
169 small_file.value());
170 const base::FilePath large_file =
171 dir.path().Append(FILE_PATH_LITERAL("large.jpg"));
172 options.push_back(std::string("--") +
173 ash::switches::kAshDefaultWallpaperLarge + "=" +
174 large_file.value());
175
176 const base::FilePath guest_small_file =
177 dir.path().Append(FILE_PATH_LITERAL("guest_small.jpg"));
178 options.push_back(std::string("--") + ash::switches::kAshGuestWallpaperSmall +
179 "=" + guest_small_file.value());
180 const base::FilePath guest_large_file =
181 dir.path().Append(FILE_PATH_LITERAL("guest_large.jpg"));
182 options.push_back(std::string("--") + ash::switches::kAshGuestWallpaperLarge +
183 "=" + guest_large_file.value());
184
185 ASSERT_TRUE(WriteJPEGFile(
186 small_file, kWallpaperSize, kWallpaperSize, kSmallDefaultWallpaperColor));
187 ASSERT_TRUE(WriteJPEGFile(
188 large_file, kWallpaperSize, kWallpaperSize, kLargeDefaultWallpaperColor));
189
190 ASSERT_TRUE(WriteJPEGFile(guest_small_file,
191 kWallpaperSize,
192 kWallpaperSize,
193 kSmallGuestWallpaperColor));
194 ASSERT_TRUE(WriteJPEGFile(guest_large_file,
195 kWallpaperSize,
196 kWallpaperSize,
197 kLargeGuestWallpaperColor));
198
199 command_line->reset(new base::CommandLine(options));
200 WallpaperManager::Get()->SetCommandLineForTesting(command_line->get());
201 }
202
203 } // namespace wallpaper_manager_test_utils
204
205 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698