1// Copyright (c) 2012 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#ifndef PPAPI_PROXY_TALK_RESOURCE_H_
6#define PPAPI_PROXY_TALK_RESOURCE_H_
7
8#include "ppapi/proxy/plugin_resource.h"
9#include "ppapi/proxy/ppapi_proxy_export.h"
10#include "ppapi/shared_impl/tracked_callback.h"
11#include "ppapi/thunk/ppb_talk_private_api.h"
12
13namespace ppapi {
14namespace proxy {
15
16class PPAPI_PROXY_EXPORT TalkResource
17    : public PluginResource,
18      public NON_EXPORTED_BASE(thunk::PPB_Talk_Private_API) {
19 public:
20  TalkResource(Connection connection, PP_Instance instance);
21  virtual ~TalkResource();
22
23  // Resource overrides.
24  thunk::PPB_Talk_Private_API* AsPPB_Talk_Private_API();
25
26 private:
27  // PPB_Talk_API implementation.
28  virtual int32_t RequestPermission(
29      PP_TalkPermission permission,
30      scoped_refptr<TrackedCallback> callback) OVERRIDE;
31  virtual int32_t StartRemoting(
32      PP_TalkEventCallback event_callback,
33      void* user_data,
34      scoped_refptr<TrackedCallback> callback) OVERRIDE;
35  virtual int32_t StopRemoting(
36      scoped_refptr<TrackedCallback> callback) OVERRIDE;
37
38  // PluginResource override.
39  virtual void OnReplyReceived(const ResourceMessageReplyParams& params,
40                               const IPC::Message& msg) OVERRIDE;
41
42  void OnNotifyEvent(const ResourceMessageReplyParams& params,
43                     PP_TalkEvent event);
44  void OnRequestPermissionReply(const ResourceMessageReplyParams& params);
45  void OnStartRemotingReply(const ResourceMessageReplyParams& params);
46  void OnStopRemotingReply(const ResourceMessageReplyParams& params);
47
48  scoped_refptr<TrackedCallback> permission_callback_;
49  scoped_refptr<TrackedCallback> start_callback_;
50  scoped_refptr<TrackedCallback> stop_callback_;
51  PP_TalkEventCallback event_callback_;
52  void* event_callback_user_data_;
53
54  DISALLOW_COPY_AND_ASSIGN(TalkResource);
55};
56
57}  // namespace proxy
58}  // namespace ppapi
59
60#endif  // PPAPI_PROXY_TALK_RESOURCE_H_
61