15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Functions and constants for test registration and setup. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NOTE: These must be implemented by the tester: 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - SetupTests() 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - SetupPluginInterfaces() 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sample Usage: 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// void MyCallback(void* user_data, int32_t result) { ... } 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// void TestPPBFoo() { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// // sync test case 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PP_Resource my_resource = PPBFoo()->Create(kInvalidInstance); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// EXPECT(my_resource == kInvalidResource); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// // async test case 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PP_CompletionCallback testable_callback = 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MakeTestableCompletionCallback("MyCallback", MyCallback, NULL); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// int32_t pp_error = PPBFoo()->AsyncFunction(testable_callback); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// EXPECT(pp_error == PP_OK_COMPLETIONPENDING); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TEST_PASSED; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// } 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// void SetupTests() { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RegisterTest("TestPPBFoo", TestPPBFoo); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// const PPP_Bar ppp_bar_interface = { ... }; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// void SetupPluginInterface() { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RegisterPluginInterface(PPP_BAR_INTERFACE, &ppp_bar_interface); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// } 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NATIVE_CLIENT_TESTS_PPAPI_TEST_PPB_TEMPLATE_TEST_INTERFACE_H 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NATIVE_CLIENT_TESTS_PPAPI_TEST_PPB_TEMPLATE_TEST_INTERFACE_H 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h> 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <limits> 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sstream> 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/include/nacl_string.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_completion_callback.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_instance.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_module.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_point.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_resource.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_var.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_image_data.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PP_Rect; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PP_Size; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These must be implemented by the tester 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use RegisterTest() to register each TestFunction. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetupTests(); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use RegisterPluginInterface() to register custom PPP_ interfaces other than 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PPP_Instance that is required and provided by default. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetupPluginInterfaces(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test helpers 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Registers test_function, so it is callable from JS using 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// plugin.postMessage(test_name); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*TestFunction)(); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RegisterTest(nacl::string test_name, TestFunction test_function); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Registers ppp_interface, so it is returned by PPP_GetInterface(). 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RegisterPluginInterface(const char* interface_name, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const void* ppp_interface); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper for creating user callbacks whose invocation will be reported to JS. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Callback setting allows for synchronous completion to make it easier to 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test error conditions. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WARNING: Do not reuse this callback if the operation that took it as an arg 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// returned PP_OK_COMPLETIONPENDING. The wrapper allocates data on creation 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and then deallocates it when the callback is invoked. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_CompletionCallback MakeTestableCompletionCallback( 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* callback_name, // will be postmessage'ed to JS 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_CompletionCallback_Func func, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* user_data); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_CompletionCallback MakeTestableCompletionCallback( 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* callback_name, // will be postmessage'ed to JS 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_CompletionCallback_Func func); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Uses PPB_Messaging interface to post "test_name:message". 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PostTestMessage(nacl::string test_name, nacl::string message); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make a STRING var. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Var PP_MakeString(const char* s); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert var into printable string (for debuggin) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)nacl::string StringifyVar(const PP_Var& var); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use to verify the result of a test and report failures. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EXPECT(expr) do { \ 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!(expr)) { \ 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char error[1024]; \ 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snprintf(error, sizeof(error), \ 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ERROR at %s:%d: %s\n", __FILE__, __LINE__, #expr); \ 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s", error); \ 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PostTestMessage(__FUNCTION__, error); \ 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } \ 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} while (0) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Check expected value of INT32 var. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EXPECT_VAR_INT(var, val) \ 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT(var.type == PP_VARTYPE_INT32 && var.value.as_int == val) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Check expected value of STRING var (val is 'char*') 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EXPECT_VAR_STRING(var, val) \ 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do { \ 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT(var.type == PP_VARTYPE_STRING); \ 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t dummy_size; \ 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* expected = PPBVar()->VarToUtf8(var, &dummy_size); \ 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT(0 == strcmp(expected, val)); \ 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } while (0) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Check expected value of BOOL var. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EXPECT_VAR_BOOL(var, val) \ 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT(var.type == PP_VARTYPE_BOOL && var.value.as_bool == val) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use to report success. 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_PASSED PostTestMessage(__FUNCTION__, "PASSED"); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Or failure. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_FAILED EXPECT(false) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Handy for use with LOG_TO_BROWSER() convert arbitrary objects into strings. 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> nacl::string toString(T v) { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::stringstream s; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s << v; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return s.str(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Log message for debugging or progress reporting purposes. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If you use this with nacltest.js::expectMessageSequence 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// it will not interfere with output used for correctness checking. 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LOG_TO_BROWSER(message) PostTestMessage("@", message) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cause a crash in a way that is guaranteed not to get optimized out by LLVM. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CRASH *(volatile int *) 0 = 0; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use this constant for stress testing 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (i.e. creating and using a large number of resources). 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kManyResources = 1000; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PPAPI Helpers 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Instance kInvalidInstance = 0; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Module kInvalidModule = 0; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Resource kInvalidResource = 0; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These should not exist. 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Chrome uses the bottom 2 bits to differentiate between different id types. 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 00 - module, 01 - instance, 10 - resource, 11 - var. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Instance kNotAnInstance = 0xFFFFF0; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Resource kNotAResource = 0xAAAAA0; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Point kOrigin = PP_MakePoint(0, 0); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Interface pointers and ids corresponding to this plugin; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// set at initialization/creation. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Instance pp_instance(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Module pp_module(); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If you are providing your own version of PPP_Instance::DidCreate 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// call this function to ensure proper test set-up. 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool DidCreateDefault(PP_Instance instance, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t argc, const char* argn[], const char* argv[]); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Other default implementations of the required PPP_Instance functions. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DidDestroyDefault(PP_Instance instance); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DidChangeViewDefault(PP_Instance instance, PP_Resource view); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DidChangeFocusDefault(PP_Instance instance, PP_Bool has_focus); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool HandleDocumentLoadDefault(PP_Instance instance, PP_Resource url_loader); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsSizeInRange(PP_Size size, PP_Size min_size, PP_Size max_size); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsSizeEqual(PP_Size size, PP_Size expected); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsRectEqual(PP_Rect position, PP_Rect expected); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(polina, nfullagar): allow specification of non-premultipled colors 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and provide alpha premultiplcation in FormatColor(). This will be required 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// when future PPAPI pixel formats are extended to include non-premultipled 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// or ignored alpha. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ColorPremul { uint32_t A, R, G, B; }; // Use premultipled Alpha. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kSheerRed = { 0x88, 0x88, 0x00, 0x00 }; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kSheerBlue = { 0x88, 0x00, 0x00, 0x88 }; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kSheerGray = { 0x77, 0x55, 0x55, 0x55 }; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kOpaqueGreen = { 0xFF, 0x00, 0xFF, 0x00 }; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kOpaqueBlack = { 0xFF, 0x00, 0x00, 0x00 }; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kOpaqueWhite = { 0xFF, 0xFF, 0xFF, 0xFF }; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kOpaqueYellow = { 0xFF, 0xFF, 0xFF, 0x00 }; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kBytesPerPixel = sizeof(uint32_t); // 4 bytes for BGRA or RGBA. 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Assumes premultipled Alpha. 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t FormatColor(PP_ImageDataFormat format, ColorPremul color); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates image data resource and bitmap for a rectangular region of |size| 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and |pixel_color|. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource CreateImageData(PP_Size size, ColorPremul pixel_color, void** bmp); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Checks if the image rect of |color| and |size| is on the screen at |origin|. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsImageRectOnScreen(PP_Resource graphics2d, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Point origin, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Size size, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColorPremul color); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // NATIVE_CLIENT_TESTS_PPAPI_TEST_PPB_TEMPLATE_TEST_INTERFACE_H 225