cc: Added inline to Tile::IsReadyToDraw
[chromium-blink-merge.git] / ppapi / tests / test_flash_fullscreen.cc
blob819ffabe8bae37ce4456882dd003e967eca5698f
1 // Copyright (c) 2012 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.
5 #include "ppapi/tests/test_flash_fullscreen.h"
7 #include <stdio.h>
8 #include <string.h>
9 #include <string>
11 #include "ppapi/c/dev/ppb_testing_dev.h"
12 #include "ppapi/c/private/ppb_flash_fullscreen.h"
13 #include "ppapi/cpp/graphics_2d.h"
14 #include "ppapi/cpp/instance.h"
15 #include "ppapi/cpp/module.h"
16 #include "ppapi/cpp/point.h"
17 #include "ppapi/cpp/private/flash_fullscreen.h"
18 #include "ppapi/cpp/rect.h"
19 #include "ppapi/cpp/size.h"
20 #include "ppapi/tests/test_utils.h"
21 #include "ppapi/tests/testing_instance.h"
23 REGISTER_TEST_CASE(FlashFullscreen);
25 namespace {
27 bool IsFullscreenView(const pp::Rect& position,
28 const pp::Rect& clip,
29 const pp::Size& screen_size) {
30 return (position.point() == pp::Point(0, 0) &&
31 position.size() == screen_size &&
32 clip.point() == pp::Point(0, 0) &&
33 clip.size() == screen_size);
36 } // namespace
38 TestFlashFullscreen::TestFlashFullscreen(TestingInstance* instance)
39 : TestCase(instance),
40 screen_mode_(instance),
41 fullscreen_pending_(false),
42 normal_pending_(false),
43 fullscreen_event_(instance->pp_instance()),
44 normal_event_(instance->pp_instance()) {
45 screen_mode_.GetScreenSize(&screen_size_);
48 bool TestFlashFullscreen::Init() {
49 return CheckTestingInterface();
52 void TestFlashFullscreen::RunTests(const std::string& filter) {
53 RUN_TEST(GetScreenSize, filter);
54 RUN_TEST(NormalToFullscreenToNormal, filter);
57 std::string TestFlashFullscreen::TestGetScreenSize() {
58 if (screen_size_.width() < 320 || screen_size_.width() > 2560)
59 return ReportError("screen_size.width()", screen_size_.width());
60 if (screen_size_.height() < 200 || screen_size_.height() > 2048)
61 return ReportError("screen_size.height()", screen_size_.height());
62 PASS();
65 std::string TestFlashFullscreen::TestNormalToFullscreenToNormal() {
66 // 0. Start in normal mode.
67 if (screen_mode_.IsFullscreen())
68 return ReportError("IsFullscreen() at start", true);
70 // 1. Switch to fullscreen.
71 // The transition is asynchronous and ends at the next DidChangeView().
72 // No graphics devices can be bound while in transition.
73 fullscreen_pending_ = true;
74 if (!screen_mode_.SetFullscreen(true))
75 return ReportError("SetFullscreen(true) in normal", false);
76 pp::Graphics2D graphics2d_fullscreen(instance_, pp::Size(10, 10), false);
77 if (graphics2d_fullscreen.is_null())
78 return "Failed to create graphics2d_fullscreen";
79 // The out-of-process proxy is asynchronous, so testing for the following
80 // conditions is flaky and can only be done reliably in-process.
81 if (!testing_interface_->IsOutOfProcess()) {
82 if (instance_->BindGraphics(graphics2d_fullscreen))
83 return ReportError("BindGraphics() in fullscreen transition", true);
84 if (screen_mode_.IsFullscreen())
85 return ReportError("IsFullscreen() in fullscreen transtion", true);
88 // DidChangeView() will call the callback once in fullscreen mode.
89 fullscreen_event_.Wait();
90 if (fullscreen_pending_)
91 return "fullscreen_pending_ has not been reset";
92 if (!screen_mode_.IsFullscreen())
93 return ReportError("IsFullscreen() in fullscreen", false);
94 if (!instance_->BindGraphics(graphics2d_fullscreen))
95 return ReportError("BindGraphics() in fullscreen", false);
97 // 2. Stay in fullscreen. No change.
98 if (!screen_mode_.SetFullscreen(true))
99 return ReportError("SetFullscreen(true) in fullscreen", false);
100 if (!screen_mode_.IsFullscreen())
101 return ReportError("IsFullscreen() in fullscreen^2", false);
103 // 3. Switch to normal.
104 // The transition is synchronous in-process and asynchornous out-of-process
105 // because proxied IsFullscreen saves a roundtrip by relying on information
106 // communicated via a previous call to DidChangeView.
107 // Graphics devices can be bound right away.
108 normal_pending_ = true;
109 if (!screen_mode_.SetFullscreen(false))
110 return ReportError("SetFullscreen(false) in fullscreen", false);
111 pp::Graphics2D graphics2d_normal(instance_, pp::Size(15, 15), false);
112 if (graphics2d_normal.is_null())
113 return "Failed to create graphics2d_normal";
114 if (!instance_->BindGraphics(graphics2d_normal))
115 return ReportError("BindGraphics() in normal transition", false);
116 if (testing_interface_->IsOutOfProcess()) {
117 if (!screen_mode_.IsFullscreen())
118 return ReportError("IsFullscreen() in normal transition", false);
119 normal_event_.Wait();
120 if (normal_pending_)
121 return "normal_pending_ has not been reset";
123 if (screen_mode_.IsFullscreen())
124 return ReportError("IsFullscreen() in normal", true);
126 // 4. Stay in normal. No change.
127 if (!screen_mode_.SetFullscreen(false))
128 return ReportError("SetFullscreen(false) in normal", false);
129 if (screen_mode_.IsFullscreen())
130 return ReportError("IsFullscreen() in normal^2", true);
132 PASS();
135 // Transition to fullscreen is asynchornous ending at DidChangeView.
136 // Transition to normal is synchronous in-process and asynchronous
137 // out-of-process ending at DidChangeView.
138 void TestFlashFullscreen::DidChangeView(const pp::View& view) {
139 pp::Rect position = view.GetRect();
140 pp::Rect clip = view.GetClipRect();
141 if (fullscreen_pending_ && IsFullscreenView(position, clip, screen_size_)) {
142 fullscreen_pending_ = false;
143 fullscreen_event_.Signal();
144 } else if (normal_pending_ &&
145 !IsFullscreenView(position, clip, screen_size_)) {
146 normal_pending_ = false;
147 if (testing_interface_->IsOutOfProcess())
148 normal_event_.Signal();