1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <algorithm>
6
7#include "ppapi/cpp/instance.h"
8#include "ppapi/cpp/module.h"
9#include "ppapi/cpp/var.h"
10
11// When compiling natively on Windows, PostMessage can be #define-d to
12// something else.
13#ifdef PostMessage
14#undef PostMessage
15#endif
16
17// This is a simple C++ Pepper plugin that demonstrates HandleMessage and
18// PostMessage.
19
20// This object represents one time the page says <embed>.
21class MyInstance : public pp::Instance {
22 public:
23  explicit MyInstance(PP_Instance instance) : pp::Instance(instance) {}
24  virtual ~MyInstance() {}
25  virtual void HandleMessage(const pp::Var& message_data);
26};
27
28// HandleMessage gets invoked when postMessage is called on the DOM element
29// associated with this plugin instance.
30// In this case, if we are given a string, we'll post a message back to
31// JavaScript indicating whether or not that string is a palindrome.
32void MyInstance::HandleMessage(const pp::Var& message_data) {
33  if (message_data.is_string()) {
34    std::string string_copy(message_data.AsString());
35    std::reverse(string_copy.begin(), string_copy.end());
36    bool is_palindrome(message_data.AsString() == string_copy);
37
38    PostMessage(pp::Var(is_palindrome));
39  }
40}
41
42// This object is the global object representing this plugin library as long
43// as it is loaded.
44class MyModule : public pp::Module {
45 public:
46  MyModule() : pp::Module() {}
47  virtual ~MyModule() {}
48
49  // Override CreateInstance to create your customized Instance object.
50  virtual pp::Instance* CreateInstance(PP_Instance instance) {
51    return new MyInstance(instance);
52  }
53};
54
55namespace pp {
56
57// Factory function for your specialization of the Module object.
58Module* CreateModule() {
59  return new MyModule();
60}
61
62}  // namespace pp
63
64