// Copyright (c) 2012 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_HOST_MESSAGE_FILTER_HOST_H_
#define PPAPI_HOST_MESSAGE_FILTER_HOST_H_

#include "base/compiler_specific.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "ppapi/host/ppapi_host_export.h"
#include "ppapi/host/resource_host.h"

namespace ppapi {
namespace host {

class PpapiHost;
class ResourceMessageFilter;

// This class is a generic ResourceHost that is composed of a single
// ResourceMessageFilter. There are cases where ResourceHosts only serve the
// purpose of passing messages onto a message filter to be handled on another
// thread. This class can be used as the host in those cases.
class PPAPI_HOST_EXPORT MessageFilterHost : public ResourceHost {
 public:
  MessageFilterHost(PpapiHost* host,
                    PP_Instance instance,
                    PP_Resource resource,
                    const scoped_refptr<ResourceMessageFilter>& message_filter);
  virtual ~MessageFilterHost();

 private:
  DISALLOW_COPY_AND_ASSIGN(MessageFilterHost);
};

}  // namespace host
}  // namespace ppapi

#endif  // PPAPI_HOST_MESSAGE_FILTER_HOST_H_
