| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef PPAPI_TESTS_TEST_GRAPHICS_2D_H_ |
| #define PPAPI_TESTS_TEST_GRAPHICS_2D_H_ |
| |
| #include <string> |
| |
| #include "ppapi/c/pp_stdint.h" |
| #include "ppapi/c/ppb_graphics_2d.h" |
| #include "ppapi/c/ppb_image_data.h" |
| #include "ppapi/tests/test_case.h" |
| |
| namespace pp { |
| class Graphics2D; |
| class ImageData; |
| class Point; |
| class Rect; |
| } |
| |
| class TestGraphics2D : public TestCase { |
| public: |
| explicit TestGraphics2D(TestingInstance* instance); |
| |
| // TestCase implementation. |
| virtual void DidChangeView(const pp::View& view); |
| virtual bool Init(); |
| virtual void RunTests(const std::string& filter); |
| |
| void QuitMessageLoop(); |
| |
| private: |
| bool ReadImageData(const pp::Graphics2D& dc, |
| pp::ImageData* image, |
| const pp::Point& top_left) const; |
| |
| void FillRectInImage(pp::ImageData* image, |
| const pp::Rect& rect, |
| uint32_t color) const; |
| |
| // Fill image with gradient colors. |
| void FillImageWithGradient(pp::ImageData* image) const; |
| |
| // Return true if images are the same. |
| bool CompareImages(const pp::ImageData& image1, |
| const pp::ImageData& image2); |
| |
| // Return true if images within specified rectangles are the same. |
| bool CompareImageRect(const pp::ImageData& image1, |
| const pp::Rect& rc1, |
| const pp::ImageData& image2, |
| const pp::Rect& rc2) const; |
| |
| // Validates that the given image is a single color with a square of another |
| // color inside it. |
| bool IsSquareInImage(const pp::ImageData& image_data, |
| uint32_t background_color, |
| const pp::Rect& square, uint32_t square_color) const; |
| |
| // Validates that the given device context is a single color with a square of |
| // another color inside it. |
| bool IsSquareInDC(const pp::Graphics2D& dc, uint32_t background_color, |
| const pp::Rect& square, uint32_t square_color) const; |
| |
| // Validates that the given device context is filled with the given color. |
| bool IsDCUniformColor(const pp::Graphics2D& dc, uint32_t color) const; |
| |
| // Issues a flush on the given device context and blocks until the flush |
| // has issued its callback. Returns an empty string on success or an error |
| // message on failure. |
| std::string FlushAndWaitForDone(pp::Graphics2D* context); |
| |
| // Creates an image and replaces the contents of the Graphics2D with the |
| // image, waiting for completion. This returns the resource ID of the image |
| // data we created. This image data will be released by the time the call |
| // completes, but it can be used for comparisons later. |
| // |
| // Returns 0 on failure. |
| PP_Resource ReplaceContentsAndReturnID(pp::Graphics2D* dc, |
| const pp::Size& size); |
| |
| // Resets the internal state of view change. |
| void ResetViewChangedState(); |
| |
| // Waits until we get a view change event. Note that it's possible to receive |
| // an unexpected event, thus post_quit_on_view_changed_ is introduced so that |
| // DidChangeView can check whether the event is from here. |
| bool WaitUntilViewChanged(); |
| |
| std::string TestInvalidResource(); |
| std::string TestInvalidSize(); |
| std::string TestHumongous(); |
| std::string TestInitToZero(); |
| std::string TestDescribe(); |
| std::string TestScale(); |
| std::string TestPaint(); |
| std::string TestScroll(); |
| std::string TestReplace(); |
| std::string TestFlush(); |
| std::string TestFlushOffscreenUpdate(); |
| std::string TestDev(); |
| std::string TestReplaceContentsCaching(); |
| std::string TestBindNull(); |
| |
| // Used by the tests that access the C API directly. |
| const PPB_Graphics2D_1_2* graphics_2d_interface_; |
| const PPB_ImageData_1_0* image_data_interface_; |
| |
| // Used to indicate that DidChangeView has happened, in order to make plugin |
| // and ui synchronous. |
| bool is_view_changed_; |
| |
| // Set to true to request that the next invocation of DidChangeView should |
| // post a quit to the message loop. DidChangeView will also reset the flag so |
| // this will only happen once. |
| bool post_quit_on_view_changed_; |
| }; |
| |
| #endif // PPAPI_TESTS_TEST_GRAPHICS_2D_H_ |