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

Side by Side Diff: extensions/browser/api/system_display/system_display_apitest.cc

Issue 2558453004: SystemDisplayApi: Introdice OverscanTracker (Closed)
Patch Set: Rebase + s_overscan_tracker -> g_overscan_tracker Created 4 years 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
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdint.h> 5 #include <stdint.h>
6 6
7 #include <set>
7 #include <utility> 8 #include <utility>
8 9
9 #include "base/debug/leak_annotations.h" 10 #include "base/debug/leak_annotations.h"
10 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/stl_util.h"
11 #include "base/strings/string_number_conversions.h" 13 #include "base/strings/string_number_conversions.h"
12 #include "build/build_config.h" 14 #include "build/build_config.h"
13 #include "extensions/browser/api/system_display/display_info_provider.h" 15 #include "extensions/browser/api/system_display/display_info_provider.h"
14 #include "extensions/browser/api/system_display/system_display_api.h" 16 #include "extensions/browser/api/system_display/system_display_api.h"
15 #include "extensions/browser/api_test_utils.h" 17 #include "extensions/browser/api_test_utils.h"
16 #include "extensions/common/api/system_display.h" 18 #include "extensions/common/api/system_display.h"
17 #include "extensions/shell/test/shell_apitest.h" 19 #include "extensions/shell/test/shell_apitest.h"
20 #include "extensions/test/result_catcher.h"
18 #include "ui/display/display.h" 21 #include "ui/display/display.h"
19 #include "ui/display/screen.h" 22 #include "ui/display/screen.h"
20 23
21 namespace extensions { 24 namespace extensions {
22 25
23 using api::system_display::Bounds; 26 using api::system_display::Bounds;
24 using api::system_display::DisplayUnitInfo; 27 using api::system_display::DisplayUnitInfo;
25 using display::Screen; 28 using display::Screen;
26 29
27 class MockScreen : public Screen { 30 class MockScreen : public Screen {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 EXPECT_FALSE(set_info_value_); 88 EXPECT_FALSE(set_info_value_);
86 set_info_value_ = params.ToValue(); 89 set_info_value_ = params.ToValue();
87 set_info_display_id_ = display_id; 90 set_info_display_id_ = display_id;
88 return true; 91 return true;
89 } 92 }
90 93
91 void EnableUnifiedDesktop(bool enable) override { 94 void EnableUnifiedDesktop(bool enable) override {
92 unified_desktop_enabled_ = enable; 95 unified_desktop_enabled_ = enable;
93 } 96 }
94 97
98 bool OverscanCalibrationStart(const std::string& id) override {
99 if (base::ContainsKey(overscan_started_, id))
100 return false;
101 overscan_started_.insert(id);
102 return true;
103 }
104
105 bool OverscanCalibrationAdjust(
106 const std::string& id,
107 const api::system_display::Insets& delta) override {
108 if (!base::ContainsKey(overscan_started_, id))
109 return false;
110 overscan_adjusted_.insert(id);
111 return true;
112 }
113
114 bool OverscanCalibrationReset(const std::string& id) override {
115 if (!base::ContainsKey(overscan_started_, id))
116 return false;
117 overscan_adjusted_.erase(id);
118 return true;
119 }
120
121 bool OverscanCalibrationComplete(const std::string& id) override {
122 if (!base::ContainsKey(overscan_started_, id))
123 return false;
124 overscan_started_.erase(id);
125 return true;
126 }
127
95 std::unique_ptr<base::DictionaryValue> GetSetInfoValue() { 128 std::unique_ptr<base::DictionaryValue> GetSetInfoValue() {
96 return std::move(set_info_value_); 129 return std::move(set_info_value_);
97 } 130 }
98 131
99 std::string GetSetInfoDisplayId() const { return set_info_display_id_; } 132 std::string GetSetInfoDisplayId() const { return set_info_display_id_; }
100 133
101 bool unified_desktop_enabled() const { return unified_desktop_enabled_; } 134 bool unified_desktop_enabled() const { return unified_desktop_enabled_; }
102 135
136 bool calibration_started(const std::string& id) const {
137 return base::ContainsKey(overscan_started_, id);
138 }
139
140 bool calibration_changed(const std::string& id) const {
141 return base::ContainsKey(overscan_adjusted_, id);
142 }
143
103 private: 144 private:
104 // Update the content of the |unit| obtained for |display| using 145 // Update the content of the |unit| obtained for |display| using
105 // platform specific method. 146 // platform specific method.
106 void UpdateDisplayUnitInfoForPlatform( 147 void UpdateDisplayUnitInfoForPlatform(
107 const display::Display& display, 148 const display::Display& display,
108 extensions::api::system_display::DisplayUnitInfo* unit) override { 149 extensions::api::system_display::DisplayUnitInfo* unit) override {
109 int64_t id = display.id(); 150 int64_t id = display.id();
110 unit->name = "DISPLAY NAME FOR " + base::Int64ToString(id); 151 unit->name = "DISPLAY NAME FOR " + base::Int64ToString(id);
111 if (id == 1) 152 if (id == 1)
112 unit->mirroring_source_id = "0"; 153 unit->mirroring_source_id = "0";
113 unit->is_primary = id == 0 ? true : false; 154 unit->is_primary = id == 0 ? true : false;
114 unit->is_internal = id == 0 ? true : false; 155 unit->is_internal = id == 0 ? true : false;
115 unit->is_enabled = true; 156 unit->is_enabled = true;
116 unit->rotation = (90 * id) % 360; 157 unit->rotation = (90 * id) % 360;
117 unit->dpi_x = 96.0; 158 unit->dpi_x = 96.0;
118 unit->dpi_y = 96.0; 159 unit->dpi_y = 96.0;
119 if (id == 0) { 160 if (id == 0) {
120 unit->overscan.left = 20; 161 unit->overscan.left = 20;
121 unit->overscan.top = 40; 162 unit->overscan.top = 40;
122 unit->overscan.right = 60; 163 unit->overscan.right = 60;
123 unit->overscan.bottom = 80; 164 unit->overscan.bottom = 80;
124 } 165 }
125 } 166 }
126 167
127 std::unique_ptr<base::DictionaryValue> set_info_value_; 168 std::unique_ptr<base::DictionaryValue> set_info_value_;
128 std::string set_info_display_id_; 169 std::string set_info_display_id_;
129 bool unified_desktop_enabled_ = false; 170 bool unified_desktop_enabled_ = false;
171 std::set<std::string> overscan_started_;
172 std::set<std::string> overscan_adjusted_;
130 173
131 DISALLOW_COPY_AND_ASSIGN(MockDisplayInfoProvider); 174 DISALLOW_COPY_AND_ASSIGN(MockDisplayInfoProvider);
132 }; 175 };
133 176
134 class SystemDisplayApiTest : public ShellApiTest { 177 class SystemDisplayApiTest : public ShellApiTest {
135 public: 178 public:
136 SystemDisplayApiTest() 179 SystemDisplayApiTest()
137 : provider_(new MockDisplayInfoProvider), screen_(new MockScreen) {} 180 : provider_(new MockDisplayInfoProvider), screen_(new MockScreen) {}
138 181
139 ~SystemDisplayApiTest() override {} 182 ~SystemDisplayApiTest() override {}
(...skipping 30 matching lines...) Expand all
170 api_test_utils::RunFunctionAndReturnError( 213 api_test_utils::RunFunctionAndReturnError(
171 set_info_function.get(), "[\"display_id\", {}]", browser_context())); 214 set_info_function.get(), "[\"display_id\", {}]", browser_context()));
172 215
173 std::unique_ptr<base::DictionaryValue> set_info = 216 std::unique_ptr<base::DictionaryValue> set_info =
174 provider_->GetSetInfoValue(); 217 provider_->GetSetInfoValue();
175 EXPECT_FALSE(set_info); 218 EXPECT_FALSE(set_info);
176 } 219 }
177 220
178 #else // !defined(OS_CHROMEOS) 221 #else // !defined(OS_CHROMEOS)
179 222
223 constexpr char kTestManifest[] =
224 "{\n"
225 " \"name\": \"Test\",\n"
226 " \"version\": \"1.0\",\n"
227 " \"app\": {\n"
228 " \"background\": {\n"
229 " \"scripts\": [\"background.js\"]\n"
230 " }\n"
231 " }\n"
232 "}";
233
234 constexpr char kTestManifestKiosk[] =
235 "{\n"
236 " \"name\": \"Test\",\n"
237 " \"version\": \"1.0\",\n"
238 " \"app\": {\n"
239 " \"background\": {\n"
240 " \"scripts\": [\"background.js\"]\n"
241 " }\n"
242 " },\n"
243 " \"kiosk_enabled\": true\n"
244 "}";
245
180 // TODO(stevenjb): Add API tests for {GS}etDisplayLayout. That code currently 246 // TODO(stevenjb): Add API tests for {GS}etDisplayLayout. That code currently
181 // lives in src/chrome but should be getting moved soon. 247 // lives in src/chrome but should be getting moved soon.
182 248
183 IN_PROC_BROWSER_TEST_F(SystemDisplayApiTest, SetDisplayNotKioskEnabled) { 249 IN_PROC_BROWSER_TEST_F(SystemDisplayApiTest, SetDisplayNotKioskEnabled) {
184 std::unique_ptr<base::DictionaryValue> test_extension_value( 250 std::unique_ptr<base::DictionaryValue> test_extension_value(
185 api_test_utils::ParseDictionary("{\n" 251 api_test_utils::ParseDictionary(kTestManifest));
186 " \"name\": \"Test\",\n"
187 " \"version\": \"1.0\",\n"
188 " \"app\": {\n"
189 " \"background\": {\n"
190 " \"scripts\": [\"background.js\"]\n"
191 " }\n"
192 " }\n"
193 "}"));
194 scoped_refptr<Extension> test_extension( 252 scoped_refptr<Extension> test_extension(
195 api_test_utils::CreateExtension(test_extension_value.get())); 253 api_test_utils::CreateExtension(test_extension_value.get()));
196 254
197 scoped_refptr<SystemDisplaySetDisplayPropertiesFunction> set_info_function( 255 scoped_refptr<SystemDisplaySetDisplayPropertiesFunction> set_info_function(
198 new SystemDisplaySetDisplayPropertiesFunction()); 256 new SystemDisplaySetDisplayPropertiesFunction());
199 257
200 set_info_function->set_extension(test_extension.get()); 258 set_info_function->set_extension(test_extension.get());
201 set_info_function->set_has_callback(true); 259 set_info_function->set_has_callback(true);
202 260
203 EXPECT_EQ( 261 EXPECT_EQ(
204 SystemDisplayFunction::kKioskOnlyError, 262 SystemDisplayFunction::kKioskOnlyError,
205 api_test_utils::RunFunctionAndReturnError( 263 api_test_utils::RunFunctionAndReturnError(
206 set_info_function.get(), "[\"display_id\", {}]", browser_context())); 264 set_info_function.get(), "[\"display_id\", {}]", browser_context()));
207 265
208 std::unique_ptr<base::DictionaryValue> set_info = 266 std::unique_ptr<base::DictionaryValue> set_info =
209 provider_->GetSetInfoValue(); 267 provider_->GetSetInfoValue();
210 EXPECT_FALSE(set_info); 268 EXPECT_FALSE(set_info);
211 } 269 }
212 270
213 IN_PROC_BROWSER_TEST_F(SystemDisplayApiTest, SetDisplayKioskEnabled) { 271 IN_PROC_BROWSER_TEST_F(SystemDisplayApiTest, SetDisplayKioskEnabled) {
214 std::unique_ptr<base::DictionaryValue> test_extension_value( 272 std::unique_ptr<base::DictionaryValue> test_extension_value(
215 api_test_utils::ParseDictionary("{\n" 273 api_test_utils::ParseDictionary(kTestManifestKiosk));
216 " \"name\": \"Test\",\n"
217 " \"version\": \"1.0\",\n"
218 " \"app\": {\n"
219 " \"background\": {\n"
220 " \"scripts\": [\"background.js\"]\n"
221 " }\n"
222 " },\n"
223 " \"kiosk_enabled\": true\n"
224 "}"));
225 scoped_refptr<Extension> test_extension( 274 scoped_refptr<Extension> test_extension(
226 api_test_utils::CreateExtension(test_extension_value.get())); 275 api_test_utils::CreateExtension(test_extension_value.get()));
227 276
228 scoped_refptr<SystemDisplaySetDisplayPropertiesFunction> set_info_function( 277 scoped_refptr<SystemDisplaySetDisplayPropertiesFunction> set_info_function(
229 new SystemDisplaySetDisplayPropertiesFunction()); 278 new SystemDisplaySetDisplayPropertiesFunction());
230 279
231 set_info_function->set_has_callback(true); 280 set_info_function->set_has_callback(true);
232 set_info_function->set_extension(test_extension.get()); 281 set_info_function->set_extension(test_extension.get());
233 282
234 ASSERT_TRUE(api_test_utils::RunFunction( 283 ASSERT_TRUE(api_test_utils::RunFunction(
(...skipping 22 matching lines...) Expand all
257 EXPECT_EQ(1, api_test_utils::GetInteger(overscan, "left")); 306 EXPECT_EQ(1, api_test_utils::GetInteger(overscan, "left"));
258 EXPECT_EQ(2, api_test_utils::GetInteger(overscan, "top")); 307 EXPECT_EQ(2, api_test_utils::GetInteger(overscan, "top"));
259 EXPECT_EQ(3, api_test_utils::GetInteger(overscan, "right")); 308 EXPECT_EQ(3, api_test_utils::GetInteger(overscan, "right"));
260 EXPECT_EQ(4, api_test_utils::GetInteger(overscan, "bottom")); 309 EXPECT_EQ(4, api_test_utils::GetInteger(overscan, "bottom"));
261 310
262 EXPECT_EQ("display_id", provider_->GetSetInfoDisplayId()); 311 EXPECT_EQ("display_id", provider_->GetSetInfoDisplayId());
263 } 312 }
264 313
265 IN_PROC_BROWSER_TEST_F(SystemDisplayApiTest, EnableUnifiedDesktop) { 314 IN_PROC_BROWSER_TEST_F(SystemDisplayApiTest, EnableUnifiedDesktop) {
266 std::unique_ptr<base::DictionaryValue> test_extension_value( 315 std::unique_ptr<base::DictionaryValue> test_extension_value(
267 api_test_utils::ParseDictionary("{\n" 316 api_test_utils::ParseDictionary(kTestManifestKiosk));
268 " \"name\": \"Test\",\n"
269 " \"version\": \"1.0\",\n"
270 " \"app\": {\n"
271 " \"background\": {\n"
272 " \"scripts\": [\"background.js\"]\n"
273 " }\n"
274 " },\n"
275 " \"kiosk_enabled\": true\n"
276 "}"));
277 scoped_refptr<Extension> test_extension( 317 scoped_refptr<Extension> test_extension(
278 api_test_utils::CreateExtension(test_extension_value.get())); 318 api_test_utils::CreateExtension(test_extension_value.get()));
279 { 319 {
280 scoped_refptr<SystemDisplayEnableUnifiedDesktopFunction> 320 scoped_refptr<SystemDisplayEnableUnifiedDesktopFunction>
281 enable_unified_function( 321 enable_unified_function(
282 new SystemDisplayEnableUnifiedDesktopFunction()); 322 new SystemDisplayEnableUnifiedDesktopFunction());
283 323
284 enable_unified_function->set_has_callback(true); 324 enable_unified_function->set_has_callback(true);
285 enable_unified_function->set_extension(test_extension.get()); 325 enable_unified_function->set_extension(test_extension.get());
286 326
287 EXPECT_FALSE(provider_->unified_desktop_enabled()); 327 EXPECT_FALSE(provider_->unified_desktop_enabled());
288 328
289 ASSERT_TRUE(api_test_utils::RunFunction(enable_unified_function.get(), 329 ASSERT_TRUE(api_test_utils::RunFunction(enable_unified_function.get(),
290 "[true]", browser_context())); 330 "[true]", browser_context()));
291 EXPECT_TRUE(provider_->unified_desktop_enabled()); 331 EXPECT_TRUE(provider_->unified_desktop_enabled());
292 } 332 }
293 { 333 {
294 scoped_refptr<SystemDisplayEnableUnifiedDesktopFunction> 334 scoped_refptr<SystemDisplayEnableUnifiedDesktopFunction>
295 enable_unified_function( 335 enable_unified_function(
296 new SystemDisplayEnableUnifiedDesktopFunction()); 336 new SystemDisplayEnableUnifiedDesktopFunction());
297 337
298 enable_unified_function->set_has_callback(true); 338 enable_unified_function->set_has_callback(true);
299 enable_unified_function->set_extension(test_extension.get()); 339 enable_unified_function->set_extension(test_extension.get());
300 ASSERT_TRUE(api_test_utils::RunFunction(enable_unified_function.get(), 340 ASSERT_TRUE(api_test_utils::RunFunction(enable_unified_function.get(),
301 "[false]", browser_context())); 341 "[false]", browser_context()));
302 EXPECT_FALSE(provider_->unified_desktop_enabled()); 342 EXPECT_FALSE(provider_->unified_desktop_enabled());
303 } 343 }
304 } 344 }
305 345
346 IN_PROC_BROWSER_TEST_F(SystemDisplayApiTest, OverscanCalibrationStart) {
347 const std::string id = "display0";
348 std::unique_ptr<base::DictionaryValue> test_extension_value(
349 api_test_utils::ParseDictionary(kTestManifestKiosk));
350 scoped_refptr<Extension> test_extension(
351 api_test_utils::CreateExtension(test_extension_value.get()));
352
353 // Setup MockDisplayInfoProvider.
354 api::system_display::DisplayProperties params;
355 provider_->SetInfo(id, params, nullptr);
356
357 // Call OverscanCalibrationStart.
358 scoped_refptr<SystemDisplayOverscanCalibrationStartFunction> start_function(
359 new SystemDisplayOverscanCalibrationStartFunction());
360 start_function->set_extension(test_extension.get());
361 start_function->set_has_callback(true);
362 ASSERT_TRUE(api_test_utils::RunFunction(
363 start_function.get(), "[\"" + id + "\"]", browser_context()));
364
365 ASSERT_TRUE(provider_->calibration_started(id));
366
367 // Call OverscanCalibrationComplete.
368 scoped_refptr<SystemDisplayOverscanCalibrationCompleteFunction>
369 complete_function(new SystemDisplayOverscanCalibrationCompleteFunction());
370 complete_function->set_extension(test_extension.get());
371 complete_function->set_has_callback(true);
372 ASSERT_TRUE(api_test_utils::RunFunction(
373 complete_function.get(), "[\"" + id + "\"]", browser_context()));
374
375 ASSERT_FALSE(provider_->calibration_started(id));
376 }
377
378 IN_PROC_BROWSER_TEST_F(SystemDisplayApiTest, OverscanCalibrationApp) {
379 // Setup MockDisplayInfoProvider.
380 const std::string id = "display0";
381 api::system_display::DisplayProperties params;
382 provider_->SetInfo(id, params, nullptr);
383
384 ASSERT_TRUE(RunAppTest("system/display/overscan")) << message_;
385
386 ASSERT_FALSE(provider_->calibration_started(id));
387 ASSERT_TRUE(provider_->calibration_changed(id));
388 }
389
390 IN_PROC_BROWSER_TEST_F(SystemDisplayApiTest, OverscanCalibrationAppNoComplete) {
391 // Setup MockDisplayInfoProvider.
392 const std::string id = "display0";
393 api::system_display::DisplayProperties params;
394 provider_->SetInfo(id, params, nullptr);
395
396 ResultCatcher catcher;
397 const Extension* extension = LoadApp("system/display/overscan_no_complete");
398 ASSERT_TRUE(extension);
399 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
400
401 // Calibration was started by the app but not completed.
402 ASSERT_TRUE(provider_->calibration_started(id));
403
404 // Unloading the app should complete the calibraiton (and hide the overlay).
405 UnloadApp(extension);
406 ASSERT_FALSE(provider_->calibration_changed(id));
407 ASSERT_FALSE(provider_->calibration_started(id));
408 }
409
306 #endif // !defined(OS_CHROMEOS) 410 #endif // !defined(OS_CHROMEOS)
307 411
308 } // namespace extensions 412 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698