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

Unified Diff: ppapi/tests/test_fullscreen.cc

Issue 7826017: Add PPB_Fullscreen;0.5. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: ppapi/tests/test_fullscreen.cc
===================================================================
--- ppapi/tests/test_fullscreen.cc (revision 102782)
+++ ppapi/tests/test_fullscreen.cc (working copy)
@@ -10,13 +10,10 @@
#include "ppapi/c/dev/ppb_testing_dev.h"
#include "ppapi/c/dev/ppb_fullscreen_dev.h"
-#include "ppapi/cpp/dev/fullscreen_dev.h"
-#include "ppapi/cpp/graphics_2d.h"
+#include "ppapi/cpp/input_event.h"
#include "ppapi/cpp/instance.h"
#include "ppapi/cpp/module.h"
#include "ppapi/cpp/point.h"
-#include "ppapi/cpp/rect.h"
-#include "ppapi/cpp/size.h"
#include "ppapi/tests/test_utils.h"
#include "ppapi/tests/testing_instance.h"
@@ -24,28 +21,32 @@
namespace {
-bool IsFullscreenView(const pp::Rect& position,
- const pp::Rect& clip,
- const pp::Size& screen_size) {
- return (position.point() == pp::Point(0, 0) &&
- position.size() == screen_size &&
- clip.point() == pp::Point(0, 0) &&
- clip.size() == screen_size);
+bool HasMidScreen(const pp::Rect& position, const pp::Size& screen_size) {
+ static int32_t mid_x = screen_size.width() / 2;
+ static int32_t mid_y = screen_size.height() / 2;
+ return (position.Contains(mid_x, mid_y));
}
} // namespace
TestFullscreen::TestFullscreen(TestingInstance* instance)
: TestCase(instance),
+ error_(""),
brettw 2011/09/27 00:04:20 Just use error_() (the "" version requires more wo
polina 2011/09/27 00:49:08 Done.
screen_mode_(instance),
fullscreen_pending_(false),
normal_pending_(false),
+ saw_first_fullscreen_didchangeview(false),
+ graphics2d_fullscreen_(instance, pp::Size(10, 10), false),
+ graphics2d_normal_(instance, pp::Size(15, 15), false),
+ set_fullscreen_true_callback_(instance->pp_instance()),
fullscreen_callback_(instance->pp_instance()),
normal_callback_(instance->pp_instance()) {
screen_mode_.GetScreenSize(&screen_size_);
}
bool TestFullscreen::Init() {
+ if (graphics2d_fullscreen_.is_null() && graphics2d_normal_.is_null())
+ return false;
return InitTestingInterface();
}
@@ -54,6 +55,16 @@
RUN_TEST(NormalToFullscreenToNormal);
}
+bool TestFullscreen::GotError() {
+ return !error_.empty();
+}
+
+std::string TestFullscreen::Error() {
+ std::string last_error = error_;
+ error_ = "";
brettw 2011/09/27 00:04:20 error_.clear()?
polina 2011/09/27 00:49:08 Done.
+ return last_error;
+}
+
std::string TestFullscreen::TestGetScreenSize() {
if (screen_size_.width() < 320 || screen_size_.width() > 2560)
return ReportError("screen_size.width()", screen_size_.width());
@@ -68,26 +79,20 @@
return ReportError("IsFullscreen() at start", true);
// 1. Switch to fullscreen.
+ // This is only allowed within a context of a user gesture (e.g. mouse click).
// The transition is asynchronous and ends at the next DidChangeView().
// No graphics devices can be bound while in transition.
- fullscreen_pending_ = true;
- if (!screen_mode_.SetFullscreen(true))
- return ReportError("SetFullscreen(true) in normal", false);
- pp::Graphics2D graphics2d_fullscreen(instance_, pp::Size(10, 10), false);
- if (graphics2d_fullscreen.is_null())
- return "Failed to create graphics2d_fullscreen";
- if (instance_->BindGraphics(graphics2d_fullscreen))
- return ReportError("BindGraphics() in fullscreen transition", true);
- if (screen_mode_.IsFullscreen())
- return ReportError("IsFullscreen() in fullscreen transtion", true);
-
+ instance_->RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE);
+ // HandleInputEvent() will call SetFullscreen(true).
// DidChangeView() will call the callback once in fullscreen mode.
fullscreen_callback_.WaitForResult();
+ if (GotError())
+ return Error();
if (fullscreen_pending_)
return "fullscreen_pending_ has not been reset";
if (!screen_mode_.IsFullscreen())
return ReportError("IsFullscreen() in fullscreen", false);
- if (!instance_->BindGraphics(graphics2d_fullscreen))
+ if (!instance_->BindGraphics(graphics2d_fullscreen_))
return ReportError("BindGraphics() in fullscreen", false);
// 2. Stay in fullscreen. No change.
@@ -97,27 +102,23 @@
return ReportError("IsFullscreen() in fullscreen^2", false);
// 3. Switch to normal.
- // The transition is synchronous in-process and asynchornous out-of-process
- // because proxied IsFullscreen saves a roundtrip by relying on information
- // communicated via a previous call to DidChangeView.
- // Graphics devices can be bound right away.
+ // The transition is asynchronous and ends at DidChangeView().
+ // No graphics devices can be bound while in transition.
normal_pending_ = true;
if (!screen_mode_.SetFullscreen(false))
return ReportError("SetFullscreen(false) in fullscreen", false);
- pp::Graphics2D graphics2d_normal(instance_, pp::Size(15, 15), false);
- if (graphics2d_normal.is_null())
- return "Failed to create graphics2d_normal";
- if (!instance_->BindGraphics(graphics2d_normal))
- return ReportError("BindGraphics() in normal transition", false);
- if (testing_interface_->IsOutOfProcess()) {
- if (!screen_mode_.IsFullscreen())
- return ReportError("IsFullscreen() in normal transition", false);
- normal_callback_.WaitForResult();
- if (normal_pending_)
- return "normal_pending_ has not been reset";
- }
+ if (instance_->BindGraphics(graphics2d_normal_))
+ return ReportError("BindGraphics() in normal transition", true);
+ if (!screen_mode_.IsFullscreen())
+ return ReportError("IsFullscreen() in normal transition", false);
+ // DidChangeView() will call the callback once out of fullscreen mode.
+ normal_callback_.WaitForResult();
+ if (normal_pending_)
+ return "normal_pending_ has not been reset";
if (screen_mode_.IsFullscreen())
return ReportError("IsFullscreen() in normal", true);
+ if (!instance_->BindGraphics(graphics2d_fullscreen_))
+ return ReportError("BindGraphics() in normal", false);
// 4. Stay in normal. No change.
if (!screen_mode_.SetFullscreen(false))
@@ -128,18 +129,70 @@
PASS();
}
-// Transition to fullscreen is asynchornous ending at DidChangeView.
-// Transition to normal is synchronous in-process and asynchronous
-// out-of-process ending at DidChangeView.
+void TestFullscreen::FailFullscreenTest(const std::string& error) {
+ screen_mode_.SetFullscreen(false);
+ fullscreen_pending_ = false;
+ error_ = error;
+ pp::Module::Get()->core()->CallOnMainThread(0, fullscreen_callback_);
+}
+
+// Transition to fullscreen can only happen after a user gesture.
+bool TestFullscreen::HandleInputEvent(const pp::InputEvent& event) {
+ // We only let mouse events through and only mouse clicks count.
+ if (event.GetType() != PP_INPUTEVENT_TYPE_MOUSEDOWN &&
+ event.GetType() != PP_INPUTEVENT_TYPE_MOUSEUP)
+ return false;
+ // We got the gesture. No need to handle any more events.
+ instance_->ClearInputEventRequest(PP_INPUTEVENT_CLASS_MOUSE);
+ fullscreen_pending_ = true;
+ if (!screen_mode_.SetFullscreen(true)) {
+ FailFullscreenTest(ReportError("SetFullscreen(true) in normal", false));
+ return false;
+ }
+ // No graphics devices can be bound while in transition.
+ if (instance_->BindGraphics(graphics2d_fullscreen_)) {
+ FailFullscreenTest(
+ ReportError("BindGraphics() in fullscreen transition", true));
+ return false;
+ }
+ if (screen_mode_.IsFullscreen()) {
+ FailFullscreenTest(
+ ReportError("IsFullscreen() in fullscreen transtion", true));
+ return false;
+ }
+ // DidChangeView() will complete the transition to fullscreen.
+ return false;
+}
+
+// Transitions to/from fullscreen is asynchornous ending at DidChangeView.
+// When going to fullscreen, You actually get two DidChangeView calls:
+// one for moving the plugin to the middle of window and one for placing
+// the plugin in the middle of the screen. Plugin size does not change.
void TestFullscreen::DidChangeView(const pp::Rect& position,
const pp::Rect& clip) {
- if (fullscreen_pending_ && IsFullscreenView(position, clip, screen_size_)) {
+ if (normal_position_.IsEmpty())
+ normal_position_ = position;
+
+ if (fullscreen_pending_ && !saw_first_fullscreen_didchangeview) {
+ saw_first_fullscreen_didchangeview = true;
+ if (!screen_mode_.IsFullscreen())
+ FailFullscreenTest("1st DidChangeView is not in fullscreen");
+ } else if (fullscreen_pending_) {
fullscreen_pending_ = false;
- pp::Module::Get()->core()->CallOnMainThread(0, fullscreen_callback_);
- } else if (normal_pending_ &&
- !IsFullscreenView(position, clip, screen_size_)) {
+ if (!screen_mode_.IsFullscreen())
+ FailFullscreenTest("2nd DidChangeView is not in fullscreen");
+ else if (!HasMidScreen(position, screen_size_))
+ FailFullscreenTest("DidChangeView is not in the middle of the screen");
+ else if (position.size() != normal_position_.size())
+ FailFullscreenTest("DidChangeView has different plugin size");
+ else
+ pp::Module::Get()->core()->CallOnMainThread(0, fullscreen_callback_);
+ } else if (normal_pending_) {
normal_pending_ = false;
- if (testing_interface_->IsOutOfProcess())
- pp::Module::Get()->core()->CallOnMainThread(0, normal_callback_);
+ if (screen_mode_.IsFullscreen())
+ error_ = "DidChangeview is in fullscreen";
+ else if (position != normal_position_)
+ error_ = "DidChangeView position is not normal";
+ pp::Module::Get()->core()->CallOnMainThread(0, normal_callback_);
}
}

Powered by Google App Engine
This is Rietveld 408576698