Index: ppapi/tests/extensions/background_keepalive/background.cc |
diff --git a/ppapi/tests/extensions/background_keepalive/background.cc b/ppapi/tests/extensions/background_keepalive/background.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f4b3b7a55478f302d20432cc202c354a9481fc68 |
--- /dev/null |
+++ b/ppapi/tests/extensions/background_keepalive/background.cc |
@@ -0,0 +1,63 @@ |
+// Copyright (c) 2013 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. |
+ |
+#include <cstdio> |
+#include <string> |
+ |
+#include "ppapi/cpp/instance.h" |
+#include "ppapi/cpp/message_loop.h" |
+#include "ppapi/cpp/module.h" |
+#include "ppapi/cpp/var.h" |
+#include "ppapi/utility/completion_callback_factory.h" |
+ |
+class Instance : public pp::Instance { |
+ public: |
+ explicit Instance(PP_Instance instance) : |
+ pp::Instance(instance), |
+ callback_factory_(this), |
+ delay_milliseconds_(10), |
+ active_(true) { |
+ DoSomething(PP_OK); |
+ } |
+ virtual ~Instance() {} |
+ |
+ virtual void HandleMessage(const pp::Var& message_var) { |
+ std::string message_string = message_var.AsString(); |
+ if (message_string == "be idle") { |
+ active_ = false; |
+ } else { |
+ PostMessage("Unhandled control message."); |
+ } |
+ } |
+ |
+ void DoSomething(int32_t result) { |
+ if (active_) { |
+ pp::MessageLoop loop = pp::MessageLoop::GetCurrent(); |
+ pp::CompletionCallback c = callback_factory_.NewCallback( |
+ &Instance::DoSomething); |
+ loop.PostWork(c, delay_milliseconds_); |
+ } |
+ } |
+ |
+ pp::CompletionCallbackFactory<Instance> callback_factory_; |
+ int delay_milliseconds_; |
+ bool active_; |
+}; |
+ |
+class Module : public pp::Module { |
+ public: |
+ Module() : pp::Module() {} |
+ virtual ~Module() {} |
+ |
+ virtual pp::Instance* CreateInstance(PP_Instance instance) { |
+ return new Instance(instance); |
+ } |
+}; |
+ |
+namespace pp { |
+Module* CreateModule() { |
+ return new ::Module(); |
+} |
+} // namespace pp |
+ |