// Copyright (c) 2010 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_CPP_DEV_SELECTION_DEV_H_
#define PPAPI_CPP_DEV_SELECTION_DEV_H_

#include "ppapi/c/dev/ppp_selection_dev.h"

namespace pp {

class Instance;
class Var;

// This class allows you to associate the PPP_Selection_Dev C-based interface
// with an object. It registers as the global handler for handling the
// PPP_Selection_Dev interface that the browser calls.
//
// You would typically use this either via inheritance on your instance:
//   class MyInstance : public pp::Instance, public pp::Selection_Dev {
//     class MyInstance() : pp::Selection_Dev(this) {
//     }
//     ...
//   };
//
// or by composition:
//   class MySelection : public pp::Selection_Dev {
//     ...
//   };
//
//   class MyInstance : public pp::Instance {
//     MyInstance() : selection_(this) {
//     }
//
//     MySelection selection_;
//   };
class Selection_Dev {
 public:
  Selection_Dev(Instance* instance);
  virtual ~Selection_Dev();

  // PPP_Selection_Dev functions exposed as virtual functions for you to
  // override.
  virtual Var GetSelectedText(bool html) = 0;

 private:
  Instance* associated_instance_;
};

}  // namespace pp

#endif  // PPAPI_CPP_DEV_SELECTION_DEV_H_
