summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ppapi/native_client/tests/ppapi_browser/ppb_fullscreen/ppapi_ppb_fullscreen.cc80
1 files changed, 54 insertions, 26 deletions
diff --git a/ppapi/native_client/tests/ppapi_browser/ppb_fullscreen/ppapi_ppb_fullscreen.cc b/ppapi/native_client/tests/ppapi_browser/ppb_fullscreen/ppapi_ppb_fullscreen.cc
index 5940b8e..7c42cd4 100644
--- a/ppapi/native_client/tests/ppapi_browser/ppb_fullscreen/ppapi_ppb_fullscreen.cc
+++ b/ppapi/native_client/tests/ppapi_browser/ppb_fullscreen/ppapi_ppb_fullscreen.cc
@@ -37,14 +37,42 @@ PP_Size kSize1920x1200 = PP_MakeSize(1920, 1200); // WUXGA: 24" HP, 17" MB Pro
PP_Size kSize2560x1600 = PP_MakeSize(2560, 1600); // WQXGA: 30" HP Monitor
PP_Size kSize2560x2048 = PP_MakeSize(2560, 2048); // QSXGA
+PP_Size kSampleSize = PP_MakeSize(1, 1);
+const char* kNoTest = NULL;
+
+PP_Size g_screen_size = PP_MakeSize(0, 0);
PP_Resource g_graphics2d = kInvalidResource;
+PP_Resource g_image_data = kInvalidResource;
+const char* g_test = kNoTest;
+
+void FlushCallback(void* user_data, int32_t result) {
+ printf("--- FlushCallback result=%d\n", static_cast<int>(result));
+ PPBCore()->ReleaseResource(g_image_data);
+ if (g_test != kNoTest && result == PP_OK)
+ PostTestMessage(g_test, "PASSED");
+}
+
+bool PaintPlugin(PP_Size size, ColorPremul pixel_color, const char* test) {
+ printf("--- PaintPlugin size=%dx%d test=%s\n", size.width, size.height, test);
+ g_test = test;
+ static const PPB_Graphics2D* ppb = PPBGraphics2D();
+ static PP_Bool always_opaque = PP_TRUE;
+
+ if (g_graphics2d == kInvalidResource) {
+ g_graphics2d = ppb->Create(pp_instance(), &g_screen_size, always_opaque);
+ if (!PPBInstance()->BindGraphics(pp_instance(), g_graphics2d))
+ return false;
+ }
+ if (g_graphics2d == kInvalidResource)
+ return false;
-bool CreateGraphics2D(PP_Resource* graphics2d) {
- PP_Size size = PP_MakeSize(90, 90);
- PP_Bool not_always_opaque = PP_FALSE;
- *graphics2d =
- PPBGraphics2D()->Create(pp_instance(), &size, not_always_opaque);
- return (*graphics2d != kInvalidResource);
+ void* bitmap = NULL;
+ g_image_data = CreateImageData(size, pixel_color, &bitmap);
+ ppb->PaintImageData(g_graphics2d, g_image_data, &kOrigin, NULL);
+ PP_CompletionCallback cc = PP_MakeCompletionCallback(FlushCallback, NULL);
+ if (ppb->Flush(g_graphics2d, cc) != PP_OK_COMPLETIONPENDING)
+ return false;
+ return IsImageRectOnScreen(g_graphics2d, kOrigin, size, pixel_color);
}
////////////////////////////////////////////////////////////////////////////////
@@ -94,7 +122,6 @@ void TestSetFullscreenFalse() {
const PPB_Fullscreen* ppb = PPBFullscreen();
if (ppb->IsFullscreen(pp_instance()) == PP_TRUE) {
// Transition out of fullscreen.
- EXPECT(CreateGraphics2D(&g_graphics2d));
// The transition is asynchronous and ends at the next DidChangeView().
EXPECT(ppb->SetFullscreen(pp_instance(), PP_FALSE) == PP_TRUE);
g_normal_pending = true;
@@ -103,9 +130,11 @@ void TestSetFullscreenFalse() {
EXPECT(ppb->SetFullscreen(pp_instance(), PP_TRUE) == PP_FALSE);
EXPECT(ppb->IsFullscreen(pp_instance()) == PP_TRUE);
// No 2D or 3D device can be bound during transition.
- EXPECT(PPBGraphics2D()->IsGraphics2D(g_graphics2d) == PP_TRUE);
- EXPECT(PPBInstance()->BindGraphics(pp_instance(), g_graphics2d) ==
- PP_FALSE);
+ PP_Resource g2d =
+ PPBGraphics2D()->Create(pp_instance(), &kSampleSize, PP_FALSE);
+ EXPECT(PPBGraphics2D()->IsGraphics2D(g2d) == PP_TRUE);
+ EXPECT(PPBInstance()->BindGraphics(pp_instance(), g2d) == PP_FALSE);
+ PPBCore()->ReleaseResource(g2d);
// The transition ends at the next DidChangeView().
} else {
// No change.
@@ -158,7 +187,6 @@ PP_Bool HandleInputEvent(PP_Instance instance, PP_Resource event) {
PPBInputEvent()->ClearInputEventRequest(pp_instance(),
PP_INPUTEVENT_CLASS_MOUSE);
EXPECT(PPBFullscreen()->IsFullscreen(pp_instance()) == PP_FALSE);
- EXPECT(CreateGraphics2D(&g_graphics2d));
EXPECT(PPBFullscreen()->SetFullscreen(pp_instance(), PP_TRUE) == PP_TRUE);
g_fullscreen_pending = true;
// Transition is pending, so additional requests fail.
@@ -167,9 +195,11 @@ PP_Bool HandleInputEvent(PP_Instance instance, PP_Resource event) {
PP_FALSE);
EXPECT(PPBFullscreen()->IsFullscreen(pp_instance()) == PP_FALSE);
// No 2D or 3D device can be bound during transition.
- EXPECT(PPBGraphics2D()->IsGraphics2D(g_graphics2d) == PP_TRUE);
- EXPECT(PPBInstance()->BindGraphics(pp_instance(), g_graphics2d) ==
- PP_FALSE);
+ PP_Resource g2d =
+ PPBGraphics2D()->Create(pp_instance(), &kSampleSize, PP_FALSE);
+ EXPECT(PPBGraphics2D()->IsGraphics2D(g2d) == PP_TRUE);
+ EXPECT(PPBInstance()->BindGraphics(pp_instance(), g2d) == PP_FALSE);
+ PPBCore()->ReleaseResource(g2d);
// The transition ends at the next DidChangeView().
return PP_FALSE;
}
@@ -182,14 +212,8 @@ const PPP_InputEvent ppp_input_event_interface = {
// PPP_Instance
////////////////////////////////////////////////////////////////////////////////
-PP_Size GetScreenSize() {
- PP_Size screen_size = PP_MakeSize(0, 0);
- CHECK(PPBFullscreen()->GetScreenSize(pp_instance(), &screen_size));
- return screen_size;
-}
-
bool HasMidScreen(const PP_Rect* position) {
- static PP_Size screen_size = GetScreenSize();
+ static PP_Size screen_size = g_screen_size;
static int32_t mid_x = screen_size.width / 2;
static int32_t mid_y = screen_size.height / 2;
PP_Point origin = position->point;
@@ -213,25 +237,30 @@ void DidChangeView(PP_Instance instance,
position->size.width, position->size.height,
clip->point.x, clip->point.y,
clip->size.width, clip->size.height);
- // Remember the original position on the first DidChangeView.
+ // Remember the original position on the first DidChangeView and paint
+ // the plugin area.
if (g_normal_position.size.width == 0 && g_normal_position.size.height == 0) {
g_normal_position = PP_MakeRectFromXYWH(position->point.x,
position->point.y,
position->size.width,
position->size.height);
+ CHECK(PPBFullscreen()->GetScreenSize(pp_instance(), &g_screen_size));
+ CHECK(PaintPlugin(position->size, kOpaqueGreen, kNoTest));
}
const char* test = NULL;
- PP_Size screen_size = GetScreenSize();
+ ColorPremul pixel_color;
if (g_fullscreen_pending && PPBFullscreen()->IsFullscreen(pp_instance())) {
test = "TestSetFullscreenTrue";
+ pixel_color = kOpaqueYellow;
g_fullscreen_pending = false;
- EXPECT(IsSizeEqual(position->size, screen_size));
+ EXPECT(IsSizeEqual(position->size, g_screen_size));
// NOTE: we cannot reliably test for clip size being equal to the screen
// because it might be affected by JS console, info bars, etc.
} else if (g_normal_pending &&
!PPBFullscreen()->IsFullscreen(pp_instance())) {
test = "TestSetFullscreenFalse";
+ pixel_color = kSheerBlue;
g_normal_pending = false;
EXPECT(IsRectEqual(*position, g_normal_position));
}
@@ -239,8 +268,7 @@ void DidChangeView(PP_Instance instance,
// We should now be able to bind 2D and 3D devices.
EXPECT(PPBGraphics2D()->IsGraphics2D(g_graphics2d) == PP_TRUE);
EXPECT(PPBInstance()->BindGraphics(pp_instance(), g_graphics2d) == PP_TRUE);
- PPBCore()->ReleaseResource(g_graphics2d);
- PostTestMessage(test, "PASSED");
+ EXPECT(PaintPlugin(position->size, pixel_color, test));
}
}