Index: ppapi/native_client/tests/ppapi_test_lib/testable_callback.h |
=================================================================== |
--- ppapi/native_client/tests/ppapi_test_lib/testable_callback.h (revision 0) |
+++ ppapi/native_client/tests/ppapi_test_lib/testable_callback.h (revision 0) |
@@ -0,0 +1,65 @@ |
+// Copyright (c) 2011 The Native Client 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 NATIVE_CLIENT_TESTS_PPAPI_TEST_LIB_TESTABLE_CALLBACK_H |
+#define NATIVE_CLIENT_TESTS_PPAPI_TEST_LIB_TESTABLE_CALLBACK_H |
+ |
+#include "ppapi/c/pp_completion_callback.h" |
+#include "ppapi/c/pp_instance.h" |
+#include "ppapi/c/pp_stdint.h" |
+ |
+// NOTE: if you use you TestableCallback you will need to enable |
+// testing interfaces in PPAPIBrowserTester(), e.g. |
+// "--enable-pepper-testing", c.f. |
+// tests/ppapi_browser/ppb_graphics2d/nacl.scons |
+// |
+// Example Usage: |
+// |
+// void TestProgressSimple() { |
+// TestableCallback callback(pp_instance(), true); |
+// ... |
+// rv = PPBURLLoader()->Open(loader, request, callback.GetCallback()); |
+// EXPECT(rv == PP_OK_COMPLETIONPENDING); |
+ |
+// rv = callback.WaitForResult(); |
+// EXPECT(rv == PP_OK); |
+// ... |
+// } |
+ |
+class TestableCallback { |
+ public: |
+ TestableCallback(PP_Instance instance, bool force_async); |
+ |
+ // Get the callback to be passed to an asynchronous PPAPI call |
+ PP_CompletionCallback GetCallback(); |
+ |
+ // Waits for the callback to be called and returns the |
+ // result. Returns immediately if the callback was previously called |
+ // and the result wasn't returned (i.e. each result value received |
+ // by the callback is returned by WaitForResult() once and only |
+ // once). |
+ int32_t WaitForResult(); |
+ |
+ bool HasRun() const { return run_count_ != 0; } |
+ |
+ // Make instance runnable again. |
+ void Reset() { |
+ run_count_ = 0; |
+ have_result_ = false; |
+ } |
+ |
+ int32_t Result() const { return result_; } |
+ |
+ private: |
+ static void Handler(void* user_data, int32_t result); |
+ |
+ bool have_result_; // is a result available? |
+ int32_t result_; // value of the result |
+ bool force_async_; // force callback to be always called |
+ bool post_quit_task_; // has cleanup beem performed |
+ unsigned run_count_; // number of times the callback has been called |
+ PP_Instance instance_; |
+}; |
+ |
+#endif // NATIVE_CLIENT_TESTS_PPAPI_TEST_LIB_TESTABLE_CALLBACK_H |